From 1160b8080405eb224c860143ee985d14fc214e52 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Sun, 1 Dec 2024 20:34:02 +0300 Subject: [PATCH 001/645] Add polyfills for 'Element.append' and 'Element.prepend' --- src/lib/legacy/elementAppendPrepend.js | 51 ++++++++++++++++++++++++++ src/lib/legacy/index.ts | 1 + 2 files changed, 52 insertions(+) create mode 100644 src/lib/legacy/elementAppendPrepend.js diff --git a/src/lib/legacy/elementAppendPrepend.js b/src/lib/legacy/elementAppendPrepend.js new file mode 100644 index 000000000..b02631755 --- /dev/null +++ b/src/lib/legacy/elementAppendPrepend.js @@ -0,0 +1,51 @@ +// From https://gist.github.com/jickoo/7b4122829240cc415c098aab89d6f49d + +// Source: https://github.com/jserz/js_piece/blob/master/DOM/ParentNode/append()/append().md +(function (arr) { + arr.forEach(function (item) { + if (item.hasOwnProperty('append')) { + return; + } + Object.defineProperty(item, 'append', { + configurable: true, + enumerable: true, + writable: true, + value: function append() { + var argArr = Array.prototype.slice.call(arguments), + docFrag = document.createDocumentFragment(); + + argArr.forEach(function (argItem) { + var isNode = argItem instanceof Node; + docFrag.appendChild(isNode ? argItem : document.createTextNode(String(argItem))); + }); + + this.appendChild(docFrag); + } + }); + }); +})([Element.prototype, Document.prototype, DocumentFragment.prototype]); + +// Source: https://github.com/jserz/js_piece/blob/master/DOM/ParentNode/prepend()/prepend().md +(function (arr) { + arr.forEach(function (item) { + if (item.hasOwnProperty('prepend')) { + return; + } + Object.defineProperty(item, 'prepend', { + configurable: true, + enumerable: true, + writable: true, + value: function prepend() { + var argArr = Array.prototype.slice.call(arguments), + docFrag = document.createDocumentFragment(); + + argArr.forEach(function (argItem) { + var isNode = argItem instanceof Node; + docFrag.appendChild(isNode ? argItem : document.createTextNode(String(argItem))); + }); + + this.insertBefore(docFrag, this.firstChild); + } + }); + }); +})([Element.prototype, Document.prototype, DocumentFragment.prototype]); diff --git a/src/lib/legacy/index.ts b/src/lib/legacy/index.ts index 9a836578e..d90a9e684 100644 --- a/src/lib/legacy/index.ts +++ b/src/lib/legacy/index.ts @@ -9,6 +9,7 @@ import 'abortcontroller-polyfill'; // requires fetch import 'resize-observer-polyfill'; import './domParserTextHtml'; +import './elementAppendPrepend'; import './focusPreventScroll'; import './htmlMediaElement'; import './keyboardEvent'; From 3fd36ee626848e30b8f8d868d4a36ae00efcafe5 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Sun, 1 Dec 2024 20:34:36 +0300 Subject: [PATCH 002/645] Add element-closest-polyfill --- package-lock.json | 11 +++++++++++ package.json | 1 + src/lib/legacy/index.ts | 1 + 3 files changed, 13 insertions(+) diff --git a/package-lock.json b/package-lock.json index 023d5e743..364f05eae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,6 +32,7 @@ "core-js": "3.41.0", "date-fns": "2.30.0", "dompurify": "2.5.8", + "element-closest-polyfill": "1.0.7", "epubjs": "0.3.93", "escape-html": "1.0.3", "fast-text-encoding": "1.0.6", @@ -9696,6 +9697,11 @@ "dev": true, "license": "ISC" }, + "node_modules/element-closest-polyfill": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/element-closest-polyfill/-/element-closest-polyfill-1.0.7.tgz", + "integrity": "sha512-SX7RrUUEybUllkGjVf5XJR5I0Fl2L0iawK/caX/yJu94xW/WoRRD8Fky65gKpvqhU9PLBKOliIy4Ly2rDRzdUQ==" + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -32265,6 +32271,11 @@ "integrity": "sha512-eHhqaja8tE/FNpIiBrvBjFV/SSKpyWHLvxuR9dPTdo+3V9ppdLmFB7ZZQ98qNovcngPLYIz0oOBF9P0FfZef5Q==", "dev": true }, + "element-closest-polyfill": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/element-closest-polyfill/-/element-closest-polyfill-1.0.7.tgz", + "integrity": "sha512-SX7RrUUEybUllkGjVf5XJR5I0Fl2L0iawK/caX/yJu94xW/WoRRD8Fky65gKpvqhU9PLBKOliIy4Ly2rDRzdUQ==" + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", diff --git a/package.json b/package.json index 5d86090f2..7149a9707 100644 --- a/package.json +++ b/package.json @@ -98,6 +98,7 @@ "core-js": "3.41.0", "date-fns": "2.30.0", "dompurify": "2.5.8", + "element-closest-polyfill": "1.0.7", "epubjs": "0.3.93", "escape-html": "1.0.3", "fast-text-encoding": "1.0.6", diff --git a/src/lib/legacy/index.ts b/src/lib/legacy/index.ts index d90a9e684..d8dcf9539 100644 --- a/src/lib/legacy/index.ts +++ b/src/lib/legacy/index.ts @@ -1,6 +1,7 @@ import 'core-js/stable'; import 'regenerator-runtime/runtime'; import 'jquery'; +import 'element-closest-polyfill'; import 'fast-text-encoding'; import 'intersection-observer'; import 'classlist.js'; From 6863ab7e89fdf5a885f570a4d2cbdc211c731203 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Wed, 9 Apr 2025 11:35:44 -0400 Subject: [PATCH 003/645] Fix lint and add license header --- src/lib/legacy/elementAppendPrepend.js | 40 ++++++++++++++++++++------ 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/src/lib/legacy/elementAppendPrepend.js b/src/lib/legacy/elementAppendPrepend.js index b02631755..53039f451 100644 --- a/src/lib/legacy/elementAppendPrepend.js +++ b/src/lib/legacy/elementAppendPrepend.js @@ -1,9 +1,33 @@ +/** + * MIT License + * + * Copyright (c) 2016-2025, jszhou + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + // From https://gist.github.com/jickoo/7b4122829240cc415c098aab89d6f49d // Source: https://github.com/jserz/js_piece/blob/master/DOM/ParentNode/append()/append().md (function (arr) { arr.forEach(function (item) { - if (item.hasOwnProperty('append')) { + if (Object.prototype.hasOwnProperty.call(item, 'append')) { return; } Object.defineProperty(item, 'append', { @@ -11,11 +35,11 @@ enumerable: true, writable: true, value: function append() { - var argArr = Array.prototype.slice.call(arguments), - docFrag = document.createDocumentFragment(); + const argArr = Array.prototype.slice.call(arguments); + const docFrag = document.createDocumentFragment(); argArr.forEach(function (argItem) { - var isNode = argItem instanceof Node; + const isNode = argItem instanceof Node; docFrag.appendChild(isNode ? argItem : document.createTextNode(String(argItem))); }); @@ -28,7 +52,7 @@ // Source: https://github.com/jserz/js_piece/blob/master/DOM/ParentNode/prepend()/prepend().md (function (arr) { arr.forEach(function (item) { - if (item.hasOwnProperty('prepend')) { + if (Object.prototype.hasOwnProperty.call(item, 'prepend')) { return; } Object.defineProperty(item, 'prepend', { @@ -36,11 +60,11 @@ enumerable: true, writable: true, value: function prepend() { - var argArr = Array.prototype.slice.call(arguments), - docFrag = document.createDocumentFragment(); + const argArr = Array.prototype.slice.call(arguments); + const docFrag = document.createDocumentFragment(); argArr.forEach(function (argItem) { - var isNode = argItem instanceof Node; + const isNode = argItem instanceof Node; docFrag.appendChild(isNode ? argItem : document.createTextNode(String(argItem))); }); From a791b353d713e8fa569a4ddfce217e5ee442d0d0 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Mon, 14 Apr 2025 00:39:50 -0400 Subject: [PATCH 004/645] Allow setting roles for guest stars --- src/components/metadataEditor/personEditor.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/components/metadataEditor/personEditor.js b/src/components/metadataEditor/personEditor.js index 84431c7f8..35f22bb57 100644 --- a/src/components/metadataEditor/personEditor.js +++ b/src/components/metadataEditor/personEditor.js @@ -67,16 +67,15 @@ function show(person) { if (type === PersonKind.Unknown) { continue; } - selectPersonTypeOptions += ``; + const selected = person.Type === type ? 'selected' : ''; + selectPersonTypeOptions += ``; } dlg.querySelector('.selectPersonType').innerHTML = globalize.translateHtml(selectPersonTypeOptions); dlg.querySelector('.selectPersonType').addEventListener('change', function () { - if (this.value === 'Actor') { - dlg.querySelector('.fldRole').classList.remove('hide'); - } else { - dlg.querySelector('.fldRole').classList.add('hide'); - } + dlg.querySelector('.fldRole').classList.toggle( + 'hide', + ![ PersonKind.Actor, PersonKind.GuestStar ].includes(this.value)); }); dlg.querySelector('.btnCancel').addEventListener('click', function () { From e526067d295f7a5dd95067d049cc0dd0264944ae Mon Sep 17 00:00:00 2001 From: rapinsa Date: Mon, 14 Apr 2025 13:18:06 -0400 Subject: [PATCH 005/645] Translated using Weblate (Thai) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/th/ --- src/strings/th.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/th.json b/src/strings/th.json index 9a3993740..483ee432c 100644 --- a/src/strings/th.json +++ b/src/strings/th.json @@ -147,5 +147,8 @@ "AllowedRemoteAddressesHelp": "คอมม่าเป็นการแบ่งเลขที่อยู่ IP หรือ การเข้า IP/netmask สำหรับโครงข่ายนั้นที่จะต้องถูกอนุญาตให้เชื่อมต่อระยะไกล ถ้าเว้นว่างไว้การเชื่อมต่อระยะไกลจะถูกอนุญาตโดยอัตโนมัติ", "AllowFfmpegThrottling": "กำลังเข้ารหัส", "AllowContentWithTagsHelp": "แสดงสื่อที่สอดคล้องกับ Tag เฉพาะทางอย่างน้อย 1 Tag", - "AllowSubtitleManagement": "อนุญาติให้ผู้ใช้ท่านนี้แก้ไขคำบรรยายใต้วิดีโอได้" + "AllowSubtitleManagement": "อนุญาติให้ผู้ใช้ท่านนี้แก้ไขคำบรรยายใต้วิดีโอได้", + "AllowFfmpegThrottlingHelp": "เมื่อกระบวนการแปลงรหัส (transcode) หรือเปลี่ยนคอนเทนเนอร์ (remux) มีความคืบหน้าเร็วกว่าตำแหน่งที่กำลังเล่นอยู่ในปัจจุบันมากพอแล้ว ระบบจะหยุดชั่วคราวโดยอัตโนมัติ เพื่อลดการใช้ทรัพยากรของระบบ ฟีเจอร์นี้มีประโยชน์มากที่สุดเมื่อรับชมวิดีโอโดยไม่ได้เลื่อนตำแหน่งบ่อยๆ แต่หากพบปัญหาในการเล่น ให้ปิดฟีเจอร์นี้ออก", + "AllowFmp4TranscodingContainerHelp": "อนุญาตให้ใช้คอนเทนเนอร์แบบ fMP4 ในการแปลงรหัสสำหรับจูนเนอร์นี้ เพื่อให้สามารถเล่นเนื้อหาที่เข้ารหัสแบบ HEVC และ HDR ได้ แต่ไม่ใช่จูนเนอร์ทุกตัวที่จะรองรับคอนเทนเนอร์ประเภทนี้ หากพบปัญหาในการเล่นเนื้อหา ให้ปิดฟีเจอร์นี้ออก", + "AirPlay": "แอร์เพลย์" } From ea1e7435fea8a5336c3304c9f3e14371c7161b80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnau=20Galofr=C3=A9?= Date: Mon, 14 Apr 2025 18:15:27 -0400 Subject: [PATCH 006/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index ffdcc8d58..015081f02 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -1067,7 +1067,7 @@ "ManageLibrary": "Maneig de la biblioteca", "Logo": "Logo", "LiveTV": "TV en directe", - "LiveBroadcasts": "Les emissions en directe", + "LiveBroadcasts": "Emissions en directe", "ListPaging": "{0} - {1} de {2}", "List": "Llista", "LeaveBlankToNotSetAPassword": "Podeu deixar aquest camp en blanc per establir cap contrasenya.", @@ -1821,7 +1821,7 @@ "EnableLibrary": "Habilitar la biblioteca", "EnableLibraryHelp": "Deshabilitar la biblioteca l'amagarà per a tots els usuaris.", "LimitSupportedVideoResolution": "Limitar la resolució màxima de vídeo suportada", - "LimitSupportedVideoResolutionHelp": "Utilitzi \"Resolució de transcodificació de vídeo màxima permesa\" com a resolució màxima permesa.", + "LimitSupportedVideoResolutionHelp": "Utilitzar \"La màxima resolució de transcodificació de vídeo permesa\" com a màxima resolució suportada.", "PlaybackError.FATAL_HLS_ERROR": "S'ha produït un error fatal al stream HLS.", "PlaybackError.RateLimitExceeded": "Aquest mitjà no es pot reproduir en aquests instants deguts a límits de la xarxa.", "EncodingFormatHelp": "Seleccioni la codificació de vídeo a la qual hauria de transcodificar Jellyfin. Jellyfin utilitzarà codificació mitjançant programari quan l'acceleració per maquinari no estigui disponible. La codificació H264 sempre estarà habilitada.", @@ -2020,5 +2020,7 @@ "ImageUploadFailed": "Pujada d'imatge fallida", "UploadCustomImage": "Pujar imatge personalitzada", "ReadInputAtNativeFramerate": "Llegeix l'origen a la velocitat de fotogrames nativa", - "ReadInputAtNativeFramerateHelp": "Activant aquesta opció pot solucionar alguns problemes, p. ex. retransmissions en directe que es paren sobtadament." + "ReadInputAtNativeFramerateHelp": "Activant aquesta opció pot solucionar alguns problemes, p. ex. retransmissions en directe que es paren sobtadament.", + "LimitSegmentLength": "Utilitzar segments HLS escurçats", + "LimitSegmentLengthHelp": "Activar aquesta opció pot ajudar a prevenir que el reproductor HLS es pengi durant la cerca en alguns dispositius, com televisors webOS." } From 010ca8f3d3b773356ae74ead3428bd478497f077 Mon Sep 17 00:00:00 2001 From: millallo Date: Tue, 15 Apr 2025 03:57:44 -0400 Subject: [PATCH 007/645] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/it.json b/src/strings/it.json index 5a5a146fa..d18d81a33 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -1482,8 +1482,8 @@ "LabelHDHomerunPortRange": "Intervallo porte di HD Homerun", "LabelH265Crf": "CRF di codifica H.265", "LabelAllowedAudioChannels": "Numero massimo di Canali Audio permessi", - "AspectRatioFill": "Riempi", - "AspectRatioCover": "Copertina", + "AspectRatioFill": "Allunga", + "AspectRatioCover": "Zoom", "SyncPlayGroupDefaultTitle": "Gruppo di {0}", "AllowHevcEncoding": "Permetti codifica in formato HEVC", "DisablePlugin": "Disabilita", @@ -1653,7 +1653,7 @@ "Digital": "Digitale", "LabelTextWeight": "Stile testo", "Bold": "Grassetto", - "EnableSplashScreen": "Abilita la schermata di avvio", + "EnableSplashScreen": "Abilita l'immagine nella schermata di avvio", "MediaInfoDvBlSignalCompatibilityId": "Id compatibilità segnale bl DV", "MediaInfoBlPresentFlag": "Flag di preselezione bl DV", "MediaInfoElPresentFlag": "Flag di preselezione el DV", From 733587e7c2ae6e1a2148fa20d6a00db91bb57995 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 09:43:04 +0000 Subject: [PATCH 008/645] Update dependency @jellyfin/sdk to v0.0.0-unstable.202504150501 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5ee27ba10..438444039 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202504130507", + "@jellyfin/sdk": "0.0.0-unstable.202504150501", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.10", "@mui/material": "6.4.10", @@ -4090,9 +4090,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202504130507", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504130507.tgz", - "integrity": "sha512-22acZbqDyAfjIJbKtEwEm+Sc/A1DKpP45tiz+Mx4iHDm4SBGGKRrIbJg2/2WDT7CUYQjoZAFTig7vr9trytPfA==", + "version": "0.0.0-unstable.202504150501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504150501.tgz", + "integrity": "sha512-NjiwaNmuZylU+8v7pyOfOhcqWU4/YJ4jA2Sn2p+EITh76TDK2jbRHsdr5FEc26vaFBorKhxAcj77cQdhinXuiA==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -28579,9 +28579,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202504130507", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504130507.tgz", - "integrity": "sha512-22acZbqDyAfjIJbKtEwEm+Sc/A1DKpP45tiz+Mx4iHDm4SBGGKRrIbJg2/2WDT7CUYQjoZAFTig7vr9trytPfA==", + "version": "0.0.0-unstable.202504150501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504150501.tgz", + "integrity": "sha512-NjiwaNmuZylU+8v7pyOfOhcqWU4/YJ4jA2Sn2p+EITh76TDK2jbRHsdr5FEc26vaFBorKhxAcj77cQdhinXuiA==", "requires": {} }, "@jellyfin/ux-web": { diff --git a/package.json b/package.json index 1abe958ea..8d3198152 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202504130507", + "@jellyfin/sdk": "0.0.0-unstable.202504150501", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.10", "@mui/material": "6.4.10", From d975d86595c3f24f57c882dda14d1985c1a5e671 Mon Sep 17 00:00:00 2001 From: Akos Lukacs Date: Tue, 15 Apr 2025 07:59:08 -0400 Subject: [PATCH 009/645] Translated using Weblate (Hungarian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/ --- src/strings/hu.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/strings/hu.json b/src/strings/hu.json index b5776e06b..942dd816c 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -1992,5 +1992,12 @@ "PreferNonstandardArtistsTagHelp": "Használja a nem szabványos ARTISTS címkét az ARTIST címke helyett, ha elérhető.", "Penciller": "Grafikus", "MetadataImagesLoadError": "Nem sikerült betölteni a metaadat beállításokat", - "LibraryNameInvalid": "A könyvtár neve nem lehet üres." + "LibraryNameInvalid": "A könyvtár neve nem lehet üres.", + "LabelGroupShowsIntoCollections": "Sorozatok csoportosítása kollekcióként", + "LabelGroupShowsIntoCollectionsHelp": "Az egy kollekcióban lévő sorozatok egyetlen csoportosított elemként fognak megjelenni a sorozatlistában.", + "CustomSplashScreenSize": "Az egyedi képeknek 16:9-es képarányúnak, és legalább 1920x1080 pixel méretűnek kell lenniük.", + "DeleteCustomImage": "Egyedi kép törlése", + "ImageDeleteFailed": "A kép törlése nem sikerült", + "ImageUploadCancelled": "A kép feltöltése megszakítva", + "ImageUploadFailed": "A kép feltöltése sikertelen" } From 7d0bee01deb4dbc31c84a031460d1669b3c78448 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 15 Apr 2025 10:21:43 -0400 Subject: [PATCH 010/645] Add server name to startup wizard --- src/apps/wizard/controllers/start/index.html | 6 ++++- src/apps/wizard/controllers/start/index.js | 27 ++++++++++++++------ src/strings/en-us.json | 2 +- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/apps/wizard/controllers/start/index.html b/src/apps/wizard/controllers/start/index.html index 394959349..1c718df43 100644 --- a/src/apps/wizard/controllers/start/index.html +++ b/src/apps/wizard/controllers/start/index.html @@ -1,4 +1,4 @@ -
+
@@ -12,6 +12,10 @@

${ThisWizardWillGuideYou}


+
+ +
${LabelServerNameHelp}
+
diff --git a/src/apps/wizard/controllers/start/index.js b/src/apps/wizard/controllers/start/index.js index abbe00327..4bd9d68a9 100644 --- a/src/apps/wizard/controllers/start/index.js +++ b/src/apps/wizard/controllers/start/index.js @@ -6,12 +6,16 @@ import dom from 'scripts/dom'; import 'elements/emby-button/emby-button'; import 'elements/emby-select/emby-select'; -function loadPage(page, config, languageOptions) { - const elem = page.querySelector('#selectLocalizationLanguage'); - elem.innerHTML = languageOptions.map(function (l) { +function loadPage(page, systemInfo, config, languageOptions) { + const serverNameElem = page.querySelector('#txtServerName'); + serverNameElem.value = config.ServerName || systemInfo.ServerName; + + const languageElem = page.querySelector('#selectLocalizationLanguage'); + languageElem.innerHTML = languageOptions.map(function (l) { return ''; }).join(''); - elem.value = config.UICulture; + languageElem.value = config.UICulture; + loading.hide(); } @@ -19,7 +23,9 @@ function save(page) { loading.show(); const apiClient = ServerConnections.currentApiClient(); apiClient.getJSON(apiClient.getUrl('Startup/Configuration')).then(function (config) { + config.ServerName = page.querySelector('#txtServerName').value; config.UICulture = page.querySelector('#selectLocalizationLanguage').value; + apiClient.ajax({ type: 'POST', data: JSON.stringify(config), @@ -38,17 +44,22 @@ function onSubmit(e) { export default function (view) { view.querySelector('.wizardStartForm').addEventListener('submit', onSubmit); + view.addEventListener('viewshow', function () { document.querySelector('.skinHeader').classList.add('noHomeButtonHeader'); loading.show(); const page = this; const apiClient = ServerConnections.currentApiClient(); - const promise1 = apiClient.getJSON(apiClient.getUrl('Startup/Configuration')); - const promise2 = apiClient.getJSON(apiClient.getUrl('Localization/Options')); - Promise.all([promise1, promise2]).then(function (responses) { - loadPage(page, responses[0], responses[1]); + + Promise.all([ + apiClient.getPublicSystemInfo(), + apiClient.getJSON(apiClient.getUrl('Startup/Configuration')), + apiClient.getJSON(apiClient.getUrl('Localization/Options')) + ]).then(([ systemInfo, config, languageOptions ]) => { + loadPage(page, systemInfo, config, languageOptions); }); }); + view.addEventListener('viewhide', function () { document.querySelector('.skinHeader').classList.remove('noHomeButtonHeader'); }); diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 21e3491bf..9f6e69f1c 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1591,7 +1591,7 @@ "ThemeSongs": "Theme songs", "ThemeVideos": "Theme videos", "TheseSettingsAffectSubtitlesOnThisDevice": "These settings affect subtitles on this device", - "ThisWizardWillGuideYou": "This wizard will help guide you through the setup process. To begin, please select your preferred language.", + "ThisWizardWillGuideYou": "This wizard will help guide you through the setup process. To begin, please enter a server name and select your preferred language.", "Thumb": "Thumb", "ThumbCard": "Thumb Card", "Thursday": "Thursday", From 5f804138c8a692fe7f12d89c7ee0dc8cb5bccb9a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 14:45:22 +0000 Subject: [PATCH 011/645] Update tanstack-query monorepo to v5.72.1 --- package-lock.json | 62 +++++++++++++++++++++++------------------------ package.json | 4 +-- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5ee27ba10..b98bf3e8c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,8 +24,8 @@ "@mui/material": "6.4.10", "@mui/x-date-pickers": "7.28.3", "@react-hook/resize-observer": "2.0.2", - "@tanstack/react-query": "5.71.10", - "@tanstack/react-query-devtools": "5.71.10", + "@tanstack/react-query": "5.72.1", + "@tanstack/react-query-devtools": "5.72.1", "abortcontroller-polyfill": "1.7.8", "blurhash": "2.0.5", "classlist.js": "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz", @@ -5416,9 +5416,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.71.10", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.71.10.tgz", - "integrity": "sha512-/fKEY8fO1nbszfrBatzmhJa1nEwIKn0c6Tv2A1ocSA5OiD2GukOIV8nnBbvJRgZb/VIoBy9/N4PVbABI8YQLow==", + "version": "5.72.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.72.1.tgz", + "integrity": "sha512-nOu0EEkZuJ0BZnYgeaEfo44+psq1jBO7/zp3KudixD4dvgOVerrhAhDEKsWx2N7MxB59mjO4r0ddP/VqWGPK+Q==", "license": "MIT", "funding": { "type": "github", @@ -5426,9 +5426,9 @@ } }, "node_modules/@tanstack/query-devtools": { - "version": "5.71.5", - "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.71.5.tgz", - "integrity": "sha512-Fq1JeAp+I52Md/KnyeFxzG7G0RpdHgeOfDNhSPkZQs/JqqXuAfpUf+wFHDz+vP0GZbSnla2JmcLSQebOkIb1yA==", + "version": "5.72.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.72.1.tgz", + "integrity": "sha512-D0vEoQaiVq9ayCqvvxA9XkDq7TIesyPpvgP69arRtt5FQF6n/Hrta4SlkfXC4m9BCvFLlhLDcKGYa2eMQ4ZIIA==", "license": "MIT", "funding": { "type": "github", @@ -5436,12 +5436,12 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.71.10", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.71.10.tgz", - "integrity": "sha512-mQYM/ObpL8YMDz8vCoUuHkbe8Yu7NnVRH8aBaBa/3zlufjp1f1VuWjeO3TcumNHfuVMDwEAGinsgwrB7OKADiQ==", + "version": "5.72.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.72.1.tgz", + "integrity": "sha512-4UEMyRx54xj144D2nDvDIMiXSG5BrqyCJrmyNoGbymNS+VWODcBDFrmRk9p2fe12UGZ4JtKPTNuW2Jg0aisUgQ==", "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.71.10" + "@tanstack/query-core": "5.72.1" }, "funding": { "type": "github", @@ -5452,19 +5452,19 @@ } }, "node_modules/@tanstack/react-query-devtools": { - "version": "5.71.10", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.71.10.tgz", - "integrity": "sha512-n0xsIzwNvkIoZCmfHww28jFmnVTVzOt5dHj/py3LNFMJHGnJq9o9ttQESzVt2Hr7as00Aqf8ElVwH6na1o6dnw==", + "version": "5.72.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.72.1.tgz", + "integrity": "sha512-ckNRgABst3MLjpM2nD/CzQToCiaT3jb3Xhtf+GP/0/9ij9SPT/SC+lc3wUDSkT0OupnHobBBF5E1/Xp6B+XZLg==", "license": "MIT", "dependencies": { - "@tanstack/query-devtools": "5.71.5" + "@tanstack/query-devtools": "5.72.1" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "^5.71.10", + "@tanstack/react-query": "^5.72.1", "react": "^18 || ^19" } }, @@ -29262,29 +29262,29 @@ } }, "@tanstack/query-core": { - "version": "5.71.10", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.71.10.tgz", - "integrity": "sha512-/fKEY8fO1nbszfrBatzmhJa1nEwIKn0c6Tv2A1ocSA5OiD2GukOIV8nnBbvJRgZb/VIoBy9/N4PVbABI8YQLow==" + "version": "5.72.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.72.1.tgz", + "integrity": "sha512-nOu0EEkZuJ0BZnYgeaEfo44+psq1jBO7/zp3KudixD4dvgOVerrhAhDEKsWx2N7MxB59mjO4r0ddP/VqWGPK+Q==" }, "@tanstack/query-devtools": { - "version": "5.71.5", - "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.71.5.tgz", - "integrity": "sha512-Fq1JeAp+I52Md/KnyeFxzG7G0RpdHgeOfDNhSPkZQs/JqqXuAfpUf+wFHDz+vP0GZbSnla2JmcLSQebOkIb1yA==" + "version": "5.72.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.72.1.tgz", + "integrity": "sha512-D0vEoQaiVq9ayCqvvxA9XkDq7TIesyPpvgP69arRtt5FQF6n/Hrta4SlkfXC4m9BCvFLlhLDcKGYa2eMQ4ZIIA==" }, "@tanstack/react-query": { - "version": "5.71.10", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.71.10.tgz", - "integrity": "sha512-mQYM/ObpL8YMDz8vCoUuHkbe8Yu7NnVRH8aBaBa/3zlufjp1f1VuWjeO3TcumNHfuVMDwEAGinsgwrB7OKADiQ==", + "version": "5.72.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.72.1.tgz", + "integrity": "sha512-4UEMyRx54xj144D2nDvDIMiXSG5BrqyCJrmyNoGbymNS+VWODcBDFrmRk9p2fe12UGZ4JtKPTNuW2Jg0aisUgQ==", "requires": { - "@tanstack/query-core": "5.71.10" + "@tanstack/query-core": "5.72.1" } }, "@tanstack/react-query-devtools": { - "version": "5.71.10", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.71.10.tgz", - "integrity": "sha512-n0xsIzwNvkIoZCmfHww28jFmnVTVzOt5dHj/py3LNFMJHGnJq9o9ttQESzVt2Hr7as00Aqf8ElVwH6na1o6dnw==", + "version": "5.72.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.72.1.tgz", + "integrity": "sha512-ckNRgABst3MLjpM2nD/CzQToCiaT3jb3Xhtf+GP/0/9ij9SPT/SC+lc3wUDSkT0OupnHobBBF5E1/Xp6B+XZLg==", "requires": { - "@tanstack/query-devtools": "5.71.5" + "@tanstack/query-devtools": "5.72.1" } }, "@tanstack/react-table": { diff --git a/package.json b/package.json index 1abe958ea..ca519358d 100644 --- a/package.json +++ b/package.json @@ -90,8 +90,8 @@ "@mui/material": "6.4.10", "@mui/x-date-pickers": "7.28.3", "@react-hook/resize-observer": "2.0.2", - "@tanstack/react-query": "5.71.10", - "@tanstack/react-query-devtools": "5.71.10", + "@tanstack/react-query": "5.72.1", + "@tanstack/react-query-devtools": "5.72.1", "abortcontroller-polyfill": "1.7.8", "blurhash": "2.0.5", "classlist.js": "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz", From eb3c245a67a9cf5fafd9beea0d8d362daeaa8454 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 15 Apr 2025 12:37:05 -0400 Subject: [PATCH 012/645] Fix backdrop positioning in experimental layout --- src/components/Backdrop.tsx | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/src/components/Backdrop.tsx b/src/components/Backdrop.tsx index 52b6bdcc9..4a6b793fa 100644 --- a/src/components/Backdrop.tsx +++ b/src/components/Backdrop.tsx @@ -1,15 +1,5 @@ -import Box from '@mui/material/Box'; import React, { useEffect } from 'react'; -import layoutManager from './layoutManager'; -import { DRAWER_WIDTH } from './ResponsiveDrawer'; - -const styles = layoutManager.experimental ? { - left: { - md: DRAWER_WIDTH - } -} : {}; - const Backdrop = () => { useEffect(() => { // Initialize the UI components after first render @@ -18,10 +8,7 @@ const Backdrop = () => { return ( <> - +
); From 3898793df9bcd6568b334888b2be2cde44304aa6 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 15 Apr 2025 12:38:50 -0400 Subject: [PATCH 013/645] Add splash screen backdrop to login page --- src/apps/dashboard/routes/branding/index.tsx | 2 +- src/components/backdrop/backdrop.js | 8 +++--- src/constants/branding.ts | 1 + src/controllers/itemDetails/index.js | 2 +- src/controllers/session/login/index.html | 2 +- src/scripts/autoBackdrops.js | 26 +++++++++++++++++--- 6 files changed, 30 insertions(+), 11 deletions(-) create mode 100644 src/constants/branding.ts diff --git a/src/apps/dashboard/routes/branding/index.tsx b/src/apps/dashboard/routes/branding/index.tsx index d69222bb1..3d2d8d2c7 100644 --- a/src/apps/dashboard/routes/branding/index.tsx +++ b/src/apps/dashboard/routes/branding/index.tsx @@ -19,13 +19,13 @@ import Loading from 'components/loading/LoadingComponent'; import Image from 'components/Image'; import Page from 'components/Page'; import ServerConnections from 'components/ServerConnections'; +import { SPLASHSCREEN_URL } from 'constants/branding'; import { useApi } from 'hooks/useApi'; import globalize from 'lib/globalize'; import { queryClient } from 'utils/query/queryClient'; import { ActionData } from 'types/actionData'; const BRANDING_CONFIG_KEY = 'branding'; -const SPLASHSCREEN_URL = '/Branding/Splashscreen'; const BrandingOption = { CustomCss: 'CustomCss', LoginDisclaimer: 'LoginDisclaimer', diff --git a/src/components/backdrop/backdrop.js b/src/components/backdrop/backdrop.js index 4c64ea818..f99a46a5b 100644 --- a/src/components/backdrop/backdrop.js +++ b/src/components/backdrop/backdrop.js @@ -213,19 +213,19 @@ function enabled() { let rotationInterval; let currentRotatingImages = []; let currentRotationIndex = -1; -export function setBackdrops(items, imageOptions, enableImageRotation, isEnabled = false) { +export function setBackdrops(items, imageOptions, isEnabled = false) { if (isEnabled || enabled()) { const images = getImageUrls(items, imageOptions); if (images.length) { - startRotation(images, enableImageRotation); + setBackdropImages(images); } else { clearBackdrop(); } } } -function startRotation(images, enableImageRotation) { +export function setBackdropImages(images) { if (isEqual(images, currentRotatingImages)) { return; } @@ -235,7 +235,7 @@ function startRotation(images, enableImageRotation) { currentRotatingImages = images; currentRotationIndex = -1; - if (images.length > 1 && enableImageRotation !== false && enableRotation()) { + if (images.length > 1 && enableRotation()) { rotationInterval = setInterval(onRotationInterval, 24000); } diff --git a/src/constants/branding.ts b/src/constants/branding.ts new file mode 100644 index 000000000..36b738c5d --- /dev/null +++ b/src/constants/branding.ts @@ -0,0 +1 @@ +export const SPLASHSCREEN_URL = '/Branding/Splashscreen'; diff --git a/src/controllers/itemDetails/index.js b/src/controllers/itemDetails/index.js index b1545f696..c3f37a155 100644 --- a/src/controllers/itemDetails/index.js +++ b/src/controllers/itemDetails/index.js @@ -503,7 +503,7 @@ function renderBackdrop(page, item) { // If backdrops are disabled, but the header banner is enabled, add a class to the page to disable the transparency page.classList.toggle('noBackdropTransparency', isBannerEnabled && !userSettings.enableBackdrops()); - setBackdrops([item], null, null, isBannerEnabled); + setBackdrops([item], null, isBannerEnabled); } else { clearBackdrop(); } diff --git a/src/controllers/session/login/index.html b/src/controllers/session/login/index.html index f24bc0d3e..63096a3d7 100644 --- a/src/controllers/session/login/index.html +++ b/src/controllers/session/login/index.html @@ -1,4 +1,4 @@ -
+
diff --git a/src/scripts/autoBackdrops.js b/src/scripts/autoBackdrops.js index 2334d1690..0ba53e242 100644 --- a/src/scripts/autoBackdrops.js +++ b/src/scripts/autoBackdrops.js @@ -1,7 +1,11 @@ -import { clearBackdrop, setBackdrops } from '../components/backdrop/backdrop'; +import { clearBackdrop, setBackdropImages, setBackdrops } from '../components/backdrop/backdrop'; import * as userSettings from './settings/userSettings'; import libraryMenu from './libraryMenu'; import { pageClassOn } from '../utils/dashboard'; +import { queryClient } from 'utils/query/queryClient'; +import { getBrandingOptionsQuery } from 'apps/dashboard/features/branding/api/useBrandingOptions'; +import ServerConnections from 'components/ServerConnections'; +import { SPLASHSCREEN_URL } from 'constants/branding'; const cache = {}; @@ -43,7 +47,7 @@ function getBackdropItemIds(apiClient, userId, types, parentId) { } function showBackdrop(type, parentId) { - const apiClient = window.ApiClient; + const apiClient = ServerConnections.currentApiClient(); if (apiClient) { getBackdropItemIds(apiClient, apiClient.getCurrentUserId(), type, parentId).then(function (images) { @@ -59,13 +63,27 @@ function showBackdrop(type, parentId) { } } +async function showSplashScreen() { + const api = ServerConnections.getCurrentApi(); + const brandingOptions = await queryClient.fetchQuery(getBrandingOptionsQuery(api)); + if (brandingOptions.SplashscreenEnabled) { + setBackdropImages([ + api.getUri(SPLASHSCREEN_URL, { t: Date.now() }) + ]); + } else { + clearBackdrop(); + } +} + pageClassOn('pageshow', 'page', function () { const page = this; if (!page.classList.contains('selfBackdropPage')) { if (page.classList.contains('backdropPage')) { - if (enabled()) { - const type = page.getAttribute('data-backdroptype'); + const type = page.getAttribute('data-backdroptype'); + if (type === 'splashscreen') { + showSplashScreen(); + } else if (enabled()) { const parentId = page.classList.contains('globalBackdropPage') ? '' : libraryMenu.getTopParentId(); showBackdrop(type, parentId); } else { From 1ed4c46cc883b975af0703ffc6387829282f581b Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 15 Apr 2025 14:28:51 -0400 Subject: [PATCH 014/645] Fix item details screen not filling desktop screen --- src/styles/librarybrowser.scss | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/styles/librarybrowser.scss b/src/styles/librarybrowser.scss index 9afed6ed9..a604f2762 100644 --- a/src/styles/librarybrowser.scss +++ b/src/styles/librarybrowser.scss @@ -581,10 +581,10 @@ height: 30vh; } } -} -.layout-tv .itemBackdrop { - display: none; + .layout-tv & { + display: none; + } } .detailPageContent { @@ -845,10 +845,14 @@ .detailPageSecondaryContainer { padding-top: 1.25em; -} -.layout-mobile .detailPageSecondaryContainer { - padding-top: 1em; + .layout-desktop & { + flex-grow: 1; + } + + .layout-mobile & { + padding-top: 1em; + } } .detailImageContainer .card { @@ -1168,6 +1172,12 @@ div.itemDetailGalleryLink.defaultCardBackground { .detailPageWrapperContainer { border-spacing: 0; border-collapse: collapse; + + .layout-desktop & { + display: flex; + flex-direction: column; + min-height: 60vh; + } } .mediaInfoContent .btnCopy .material-icons { From 48b5bcc5763f115e0afe71a5a30d6acc508d3ba8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 23:00:29 +0000 Subject: [PATCH 015/645] Update dependency webpack to v5.99.5 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2ddfd6131..2f74344cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -128,7 +128,7 @@ "typescript": "5.8.3", "typescript-eslint": "8.29.0", "vitest": "3.1.1", - "webpack": "5.98.0", + "webpack": "5.99.5", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "6.0.1", "webpack-dev-server": "5.2.1", @@ -25473,9 +25473,9 @@ } }, "node_modules/webpack": { - "version": "5.98.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", - "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", + "version": "5.99.5", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.5.tgz", + "integrity": "sha512-q+vHBa6H9qwBLUlHL4Y7L0L1/LlyBKZtS9FHNCQmtayxjI5RKC9yD8gpvLeqGv5lCQp1Re04yi0MF40pf30Pvg==", "dev": true, "license": "MIT", "dependencies": { @@ -43267,9 +43267,9 @@ "dev": true }, "webpack": { - "version": "5.98.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", - "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", + "version": "5.99.5", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.5.tgz", + "integrity": "sha512-q+vHBa6H9qwBLUlHL4Y7L0L1/LlyBKZtS9FHNCQmtayxjI5RKC9yD8gpvLeqGv5lCQp1Re04yi0MF40pf30Pvg==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.7", diff --git a/package.json b/package.json index 35d9ed76d..38449510c 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "typescript": "5.8.3", "typescript-eslint": "8.29.0", "vitest": "3.1.1", - "webpack": "5.98.0", + "webpack": "5.99.5", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "6.0.1", "webpack-dev-server": "5.2.1", From 1decc872356598a0da160cd3036d7e243d9b4afb Mon Sep 17 00:00:00 2001 From: Joel Sprouse Date: Tue, 15 Apr 2025 18:19:45 -0400 Subject: [PATCH 016/645] Translated using Weblate (English (United Kingdom)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_GB/ --- src/strings/en-gb.json | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json index 9fd676af1..2f6ea3c63 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -1490,8 +1490,8 @@ "RemuxHelp2": "Re-mux uses very little processing power with a completely lossless media quality.", "RemuxHelp1": "The media is in an incompatible file container (MKV, AVI, WMV, etc) but both the video stream and audio stream are compatible with the device. The media will be repackaged losslessly on the fly before being sent to the device.", "Remuxing": "Re-muxing", - "AspectRatioFill": "Fill", - "AspectRatioCover": "Cover", + "AspectRatioFill": "Stretch", + "AspectRatioCover": "Zoom", "SyncPlayGroupDefaultTitle": "{0}'s group", "PluginFromRepo": "{0} from repository {1}", "MessageSyncPlayIsDisabled": "Permission required to use Sync Play.", @@ -1651,7 +1651,7 @@ "Digital": "Digital", "MessageUnauthorizedUser": "You are not authorized to access the server at this time. Please contact your server administrator for more information.", "EnableEnhancedNvdecDecoderHelp": "Enhanced NVDEC implementation, disable this option to use CUVID if you encounter decoding errors.", - "EnableSplashScreen": "Enable the splash screen", + "EnableSplashScreen": "Enable the splash screen image", "Bold": "Bold", "HomeVideosPhotos": "Home Videos and Photos", "MediaInfoDvBlSignalCompatibilityId": "DV bl signal compatibility id", @@ -2013,5 +2013,18 @@ "PageNotFound": "This is not the page you are looking for.", "MetadataImagesLoadError": "Failed to load metadata settings", "SettingsPageLoadError": "Failed to load settings page", - "RetryWithGlobalSearch": "Retry with a global search" + "RetryWithGlobalSearch": "Retry with a global search", + "CustomSplashScreenSize": "Custom images should be in a 16x9 aspect ratio at a minimum size of 1920x1080.", + "ImageDeleteFailed": "Image deletion failed", + "ImageUploadCancelled": "Image upload cancelled", + "LabelGroupShowsIntoCollections": "Group shows into collections", + "LabelGroupShowsIntoCollectionsHelp": "Shows in a collection will be displayed as one grouped item when displaying show lists.", + "ReadInputAtNativeFramerate": "Read input at native frame rate", + "StreamCountExceedsLimit": "The number of streams exceeds the limit", + "LimitSegmentLength": "Use shorter HLS segments", + "LimitSegmentLengthHelp": "Enabling this option may help prevent the HLS player from hanging during seeking on certain devices, such as webOS TVs.", + "ReadInputAtNativeFramerateHelp": "Enabling this option may resolve some issues, e.g. live streams stopping prematurely.", + "DeleteCustomImage": "Delete Custom Image", + "ImageUploadFailed": "Image upload failed", + "UploadCustomImage": "Upload Custom Image" } From d51b949dc0fca18878723b80d3ce957fc5f8a709 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Wed, 16 Apr 2025 06:09:03 -0400 Subject: [PATCH 017/645] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index d76b0441b..a82477ef6 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -730,8 +730,8 @@ "EnableNextVideoInfoOverlayHelp": "No final de um vídeo, mostrar informação sobre o próximo vídeo da lista de reprodução.", "EnableNextVideoInfoOverlay": "Mostrar informação sobre o próximo vídeo durante a reprodução", "EnableHardwareEncoding": "Ativar codificação por hardware", - "EnableExternalVideoPlayersHelp": "O menu de um reprodutor externo será mostrado no início da reprodução de vídeo.", - "EnableExternalVideoPlayers": "Reprodutores de vídeo externos", + "EnableExternalVideoPlayersHelp": "O menu do leitor externo surgirá ao iniciar a reprodução de vídeo.", + "EnableExternalVideoPlayers": "Leitores de vídeo externos", "EnableDisplayMirroring": "Duplicação de ecrã", "EnableColorCodedBackgrounds": "User fundos marcados por cores", "EditSubtitles": "Editar legendas", @@ -935,7 +935,7 @@ "HeaderSortBy": "Ordenar por", "LabelOptionalNetworkPathHelp": "Caso a pasta esteja partilhada, fornecer o caminho de rede pode permitir aos clientes aceder diretamente aos ficheiros multimédia. Por exemplo, {0} ou {1}.", "LabelPersonRoleHelp": "Exemplo: motorista da carrinha de gelados", - "LabelPlayer": "Reprodutor", + "LabelPlayer": "Leitor", "LabelServerName": "Nome do servidor", "LabelSize": "Tamanho", "LabelLanNetworks": "Redes locais (LAN)", @@ -1222,7 +1222,7 @@ "NoCreatedLibraries": "Parece que ainda não foi criada nenhuma biblioteca. {0} Deseja criar uma biblioteca agora? {1}", "AskAdminToCreateLibrary": "Peça a um administrador para criar uma biblioteca.", "LabelVideoResolution": "Resolução de vídeo", - "LabelPlayerDimensions": "Dimensões do reprodutor", + "LabelPlayerDimensions": "Dimensões do leitor", "OptionLoginAttemptsBeforeLockoutHelp": "O valor zero significa herdar a definição por defeito de três tentativas para utilizadores comuns e cinco para administradores. Definir este campo como -1 desativa esta funcionalidade.", "OptionDisplayFolderViewHelp": "Mostrar pastas juntamente com outras bibliotecas multimédia. Pode ser útil caso pretenda ter uma vista simples das pastas.", "OptionForceRemoteSourceTranscoding": "Força a transcodificação de fontes multimédia remotas, como a TV em direto", @@ -1301,7 +1301,7 @@ "MediaInfoColorTransfer": "Transferência da cor", "MediaInfoColorSpace": "Espaço de cor", "MediaInfoVideoRange": "Gama de vídeo", - "ButtonPlayer": "Reprodutor", + "ButtonPlayer": "Leitor", "ButtonCast": "Transmitir para dispositivo", "EnableBlurHashHelp": "Imagens que ainda estão a ser descarregadas serão substituídas por um marcador de posição.", "EnableBlurHash": "Ativar marcadores de posição desfocados para imagens", @@ -1376,7 +1376,7 @@ "Movie": "Filme", "MessageSyncPlayErrorMedia": "A ativação do SyncPlay falhou! Erro de média.", "MessageSyncPlayErrorMissingSession": "A ativação do SyncPlay falhou! Sessão em falta.", - "MessageSyncPlayErrorNoActivePlayer": "Não foi encontrado nenhum reprodutor ativo. O SyncPlay foi desativado.", + "MessageSyncPlayErrorNoActivePlayer": "Não foi encontrado nenhum leitor ativo. O SyncPlay foi desativado.", "MessageSyncPlayErrorAccessingGroups": "Ocorreu um erro ao aceder à lista de grupos.", "MessageSyncPlayLibraryAccessDenied": "Conteúdo de acesso restrito.", "MessageSyncPlayJoinGroupDenied": "Não é possível aderir ao grupo.", @@ -1517,7 +1517,7 @@ "HeaderSyncPlaySettings": "Definições de SyncPlay", "HeaderContinueReading": "Continuar a ler", "Framerate": "Taxa de fotogramas", - "ErrorPlayerNotFound": "Não foi possível identificar nenhum reprodutor compatível com o ficheiro pedido.", + "ErrorPlayerNotFound": "Não foi possível identificar nenhum leitor compatível com o ficheiro solicitado.", "Engineer": "Engenheiro de Som", "DisablePlugin": "Desativar", "DisableCustomCss": "Desativar código CSS personalizado fornecido pelo servidor", @@ -1648,7 +1648,7 @@ "EnableEnhancedNvdecDecoderHelp": "Implementação NVDEC melhorada, desativa esta opção e utiliza CUVID no caso de encontrares erros de descodificação.", "Clip": "Média-metragem", "SelectAll": "Selecionar tudo", - "DirectPlayError": "Ocorreu um erro ao iniciar a reprodução directa", + "DirectPlayError": "Ocorreu um erro ao iniciar a reprodução direta", "UnknownAudioStreamInfo": "A informação da faixa de áudio é desconhecida", "UnknownVideoStreamInfo": "A informação da faixa de vídeo é desconhecida", "VideoBitrateNotSupported": "A taxa de bits deste vídeo não é suportada", @@ -1846,7 +1846,7 @@ "LabelAllowContentWithTags": "Permitir items com etiquetas", "PlaybackError.NETWORK_ERROR": "A reprodução falhou devido a um erro de rede.", "PlaybackError.PLAYER_ERROR": "A reprodução falhou devido a um erro fatal do leitor.", - "PlaybackError.FATAL_HLS_ERROR": "Um erro fatal foi encontrado na stream HLS.", + "PlaybackError.FATAL_HLS_ERROR": "Foi encontrado um erro fatal na transmissão HLS.", "Lyric": "Letra", "NonBlockingScan": "Não bloqueante - coloca a geração em fila de espera e depois regressa", "BlockingScan": "Bloqueante - coloca a geração em fila de espera, bloqueia a análise até ser concluída", @@ -2020,6 +2020,6 @@ "LabelGroupShowsIntoCollectionsHelp": "As séries de uma coleção serão apresentadas como um item agrupado quando forem apresentadas listas de séries.", "DisplayLoadError": "Ocorreu um erro ao carregar os dados de configuração do ecrã.", "MetadataImagesLoadError": "Falha ao carregar definições de metadados", - "LimitSegmentLength": "Usar segmentos curtos de HLS", - "LimitSegmentLengthHelp": "Ativar esta opção pode prevenir que o player HLS bloqueie durante a procura em certos dispositivos como TVs webOS." + "LimitSegmentLength": "Utilizar segmentos HLS mais curtos", + "LimitSegmentLengthHelp": "Ativar esta opção pode ajudar a evitar que o leitor HLS bloqueie durante a pesquisa em determinados dispositivos, como as TVs webOS." } From c4032df8ff945648e20c2e93c69c47582545e8c5 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Wed, 16 Apr 2025 06:08:40 -0400 Subject: [PATCH 018/645] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index f93b1dd9a..cef4fa73b 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -195,7 +195,7 @@ "LabelPleaseRestart": "As alterações produzirão efeito depois de recarregar a página web.", "LabelPlayMethod": "Método de reprodução", "LabelPlaylist": "Lista de Reprodução", - "LabelPlayer": "Reprodutor", + "LabelPlayer": "Leitor", "LabelPersonRoleHelp": "Exemplo: motorista da carrinha de gelados", "LabelPersonRole": "Personagem", "LabelPath": "Localização", @@ -748,8 +748,8 @@ "EnableNextVideoInfoOverlayHelp": "No final de um vídeo, mostrar informação sobre o próximo vídeo na lista de reprodução.", "EnableNextVideoInfoOverlay": "Mostrar informação sobre o próximo vídeo durante a reprodução", "EnableHardwareEncoding": "Ativar codificação por hardware", - "EnableExternalVideoPlayersHelp": "O menu de um reprodutor externo será mostrado no início da reprodução de vídeo.", - "EnableExternalVideoPlayers": "Reprodutores de vídeo externos", + "EnableExternalVideoPlayersHelp": "O menu do leitor externo surgirá ao iniciar a reprodução de vídeo.", + "EnableExternalVideoPlayers": "Leitores de vídeo externos", "EnableDisplayMirroring": "Duplicação de ecrã", "EnableColorCodedBackgrounds": "Código de cores para o fundo", "EnableCinemaMode": "Modo cinema", @@ -1114,7 +1114,7 @@ "LabelSortOrder": "Ordem de classificação", "LabelSortBy": "Ordenar por", "LabelRemoteClientBitrateLimitHelp": "Um limite opcional de taxa de bits por fluxo para todos os dispositivos fora da rede. Isso é útil para impedir que os dispositivos solicitem uma taxa de bits mais alta do que a sua conexão à Internet pode suportar. Isso pode resultar no aumento da carga da CPU no servidor para transcodificar vídeos em tempo real para uma taxa de bits mais baixa.", - "LabelPlayerDimensions": "Dimensões do reprodutor", + "LabelPlayerDimensions": "Dimensões do leitor", "LabelParentNumber": "Número pai", "LabelMetadataSavers": "Formatos de gravação dos metadados", "LabelDroppedFrames": "Quadros caídos", @@ -1218,7 +1218,7 @@ "DailyAt": "Diariamente, às {0}", "ClearQueue": "Limpar fila", "Bwdif": "Filtro de Desentrelação Bob Weaver (BWDIF)", - "ButtonPlayer": "Reprodutor", + "ButtonPlayer": "Leitor", "ButtonCast": "Transmitir para o dispositivo", "AllowTonemappingHelp": "O mapeamento de tons pode transformar a gama dinâmica de um vídeo de HDR para SDR, mantendo os detalhes e as cores da imagem, que são informações muito importantes para representar a cena original. Atualmente funciona apenas com vídeos HDR10 de 10 bits, HLG e DoVi. Isso requer o tempo de execução GPGPU correspondente.", "MusicVideos": "Videoclipes", @@ -1338,7 +1338,7 @@ "HeaderSyncPlayTimeSyncSettings": "Sincronização de tempo", "HeaderSyncPlayPlaybackSettings": "Reprodução", "HeaderSyncPlaySettings": "Definições de SyncPlay", - "ErrorPlayerNotFound": "Nenhum player encontrado para a mídia solicitada.", + "ErrorPlayerNotFound": "Não foi possível identificar nenhum leitor compatível com o ficheiro solicitado.", "Engineer": "Engenheiro de som", "DisableCustomCss": "Desativar código CSS personalizado fornecido pelo servidor", "Console": "Consola", @@ -1511,7 +1511,7 @@ "MixedMoviesShows": "Filmes e séries misturados", "MessageSyncPlayIsDisabled": "Requer permissão para utilizar SyncPlay.", "LabelMediaDetails": "Detalhes da mídia", - "MessageSyncPlayErrorNoActivePlayer": "Nenhum tocador ativo encontrado. A Sincronização foi desativada.", + "MessageSyncPlayErrorNoActivePlayer": "Não foi encontrado nenhum leitor ativo. O SyncPlay foi desativado.", "SpecialFeatures": "Faixas especiais", "MessageSyncPlayNoGroupsAvailable": "Não há grupos disponíveis. Começa por reproduzir algo primeiro.", "Smaller": "Menor", @@ -1833,7 +1833,7 @@ "LabelScanBehavior": "Comportamento de análise", "LabelTrickplayThreads": "Threads FFmpeg", "Lyric": "Letra", - "PlaybackError.FATAL_HLS_ERROR": "Um erro fatal foi encontrado na stream HLS.", + "PlaybackError.FATAL_HLS_ERROR": "Foi encontrado um erro fatal na transmissão HLS.", "PlaybackError.MEDIA_DECODE_ERROR": "A reprodução falhou devido a um erro ao descodificar o conteúdo.", "PlaybackError.MEDIA_NOT_SUPPORTED": "A reprodução falhou porque o conteúdo não é suportado por este cliente.", "PlaybackError.NETWORK_ERROR": "A reprodução falhou devido a um erro de rede.", @@ -2016,5 +2016,7 @@ "LabelGroupShowsIntoCollectionsHelp": "As séries de uma coleção serão apresentadas como um item agrupado quando forem apresentadas listas de séries.", "DisplayLoadError": "Ocorreu um erro ao carregar os dados de configuração do ecrã.", "MetadataImagesLoadError": "Falha ao carregar definições de metadados", - "CopyLogSuccess": "Conteúdo do registo copiado com sucesso." + "CopyLogSuccess": "Conteúdo do registo copiado com sucesso.", + "LimitSegmentLength": "Utilizar segmentos HLS mais curtos", + "LimitSegmentLengthHelp": "Ativar esta opção pode ajudar a evitar que o leitor HLS bloqueie durante a pesquisa em determinados dispositivos, como as TVs webOS." } From 4ccaa5c29cf7d060dd39884b629bd569687c7517 Mon Sep 17 00:00:00 2001 From: Kevin Peters Date: Wed, 16 Apr 2025 09:11:10 -0400 Subject: [PATCH 019/645] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/de.json b/src/strings/de.json index f8314768b..f8e7107d3 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -1,7 +1,7 @@ { "Absolute": "Absolut", "AccessRestrictedTryAgainLater": "Der Zugriff ist derzeit eingeschränkt. Bitte versuche es später erneut.", - "Actor": "Darsteller(in)", + "Actor": "Darsteller", "Add": "Hinzufügen", "AddToCollection": "Zu Sammlung hinzufügen", "AddToPlayQueue": "Zu Warteschlange hinzufügen", From 9ba8e0ffb22dcc09d8ee3e37a192a5c9c3bd24d9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Apr 2025 17:29:13 +0000 Subject: [PATCH 020/645] Update material-ui monorepo to v6.4.11 --- package-lock.json | 80 +++++++++++++++++++++++------------------------ package.json | 4 +-- 2 files changed, 42 insertions(+), 42 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2ddfd6131..cdf905649 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,8 +20,8 @@ "@jellyfin/libass-wasm": "4.2.3", "@jellyfin/sdk": "0.0.0-unstable.202504150501", "@jellyfin/ux-web": "1.0.0", - "@mui/icons-material": "6.4.10", - "@mui/material": "6.4.10", + "@mui/icons-material": "6.4.11", + "@mui/material": "6.4.11", "@mui/x-date-pickers": "7.28.3", "@react-hook/resize-observer": "2.0.2", "@tanstack/react-query": "5.72.1", @@ -4329,9 +4329,9 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "6.4.10", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.10.tgz", - "integrity": "sha512-cblGjlM6+xsptwyaALw8RbRIUoqmKxOqLxlk2LkTDhxqUuql1YSOKKLH3w+Yd2QLz28b7MR65sx1OjsRZUfOSQ==", + "version": "6.4.11", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.11.tgz", + "integrity": "sha512-CzAQs9CTzlwbsF9ZYB4o4lLwBv1/qNE264NjuYao+ctAXsmlPtYa8RtER4UsUXSMxNN9Qi+aQdYcKl2sUpnmAw==", "license": "MIT", "funding": { "type": "opencollective", @@ -4339,9 +4339,9 @@ } }, "node_modules/@mui/icons-material": { - "version": "6.4.10", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.4.10.tgz", - "integrity": "sha512-c2KdFl4KZ0QYC+JSDTMCNjcuOL2rVSdIx/beo7FwJDh2e9XqC1MoLCjw6L1Jo40zbArkgJyg3oFORbXcRfgZOA==", + "version": "6.4.11", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.4.11.tgz", + "integrity": "sha512-+jjJGIrB1awNbMv4ZVPPdN/p7O1UKFZ+xqRvNIQ8B1KnlID5hPMPBLM6UUbRF4bu3UDCbu79rn9Nye5LGNzmeA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0" @@ -4354,7 +4354,7 @@ "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@mui/material": "^6.4.10", + "@mui/material": "^6.4.11", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, @@ -4365,14 +4365,14 @@ } }, "node_modules/@mui/material": { - "version": "6.4.10", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.4.10.tgz", - "integrity": "sha512-L1B0+Vg9NFjo3NcfODH3bohl6fIkzjyDBHBHb3Al4QI7owaJrFm2sSDyfz++iatzICug6U6q5tHLQrCLO71xkg==", + "version": "6.4.11", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.4.11.tgz", + "integrity": "sha512-k2D3FLJS+/qD0qnd6ZlAjGFvaaxe1Dl10NyvpeDzIebMuYdn8VqYe6XBgGueEAtnzSJM4V03VD9kb5Fi24dnTA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", - "@mui/core-downloads-tracker": "^6.4.10", - "@mui/system": "^6.4.10", + "@mui/core-downloads-tracker": "^6.4.11", + "@mui/system": "^6.4.11", "@mui/types": "~7.2.24", "@mui/utils": "^6.4.9", "@popperjs/core": "^2.11.8", @@ -4393,7 +4393,7 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@mui/material-pigment-css": "^6.4.10", + "@mui/material-pigment-css": "^6.4.11", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" @@ -4447,9 +4447,9 @@ } }, "node_modules/@mui/styled-engine": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.4.9.tgz", - "integrity": "sha512-qZRWO0cT407NI4ZRjZcH+1SOu8f3JzLHqdMlg52GyEufM9pkSZFnf7xjpwnlvkixcGjco6wLlMD0VB43KRcBuA==", + "version": "6.4.11", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.4.11.tgz", + "integrity": "sha512-74AUmlHXaGNbyUqdK/+NwDJOZqgRQw6BcNvhoWYLq3LGbLTkE+khaJ7soz6cIabE4CPYqO2/QAIU1Z/HEjjpcw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", @@ -4481,14 +4481,14 @@ } }, "node_modules/@mui/system": { - "version": "6.4.10", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.4.10.tgz", - "integrity": "sha512-RyBGQwP3tgo4JEibK+RwVu1a6nQ6y8urMCNsb2aiN/nvTxxumq6P26aoG4GTUf8L4O1sthC4lMXlP4r8ixDkMg==", + "version": "6.4.11", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.4.11.tgz", + "integrity": "sha512-gibtsrZEwnDaT5+I/KloOj/yHluX5G8heknuxBpQOdEQ3Gc0avjSImn5hSeKp8D4thiwZiApuggIjZw1dQguUA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", "@mui/private-theming": "^6.4.9", - "@mui/styled-engine": "^6.4.9", + "@mui/styled-engine": "^6.4.11", "@mui/types": "~7.2.24", "@mui/utils": "^6.4.9", "clsx": "^2.1.1", @@ -28744,26 +28744,26 @@ } }, "@mui/core-downloads-tracker": { - "version": "6.4.10", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.10.tgz", - "integrity": "sha512-cblGjlM6+xsptwyaALw8RbRIUoqmKxOqLxlk2LkTDhxqUuql1YSOKKLH3w+Yd2QLz28b7MR65sx1OjsRZUfOSQ==" + "version": "6.4.11", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.11.tgz", + "integrity": "sha512-CzAQs9CTzlwbsF9ZYB4o4lLwBv1/qNE264NjuYao+ctAXsmlPtYa8RtER4UsUXSMxNN9Qi+aQdYcKl2sUpnmAw==" }, "@mui/icons-material": { - "version": "6.4.10", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.4.10.tgz", - "integrity": "sha512-c2KdFl4KZ0QYC+JSDTMCNjcuOL2rVSdIx/beo7FwJDh2e9XqC1MoLCjw6L1Jo40zbArkgJyg3oFORbXcRfgZOA==", + "version": "6.4.11", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.4.11.tgz", + "integrity": "sha512-+jjJGIrB1awNbMv4ZVPPdN/p7O1UKFZ+xqRvNIQ8B1KnlID5hPMPBLM6UUbRF4bu3UDCbu79rn9Nye5LGNzmeA==", "requires": { "@babel/runtime": "^7.26.0" } }, "@mui/material": { - "version": "6.4.10", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.4.10.tgz", - "integrity": "sha512-L1B0+Vg9NFjo3NcfODH3bohl6fIkzjyDBHBHb3Al4QI7owaJrFm2sSDyfz++iatzICug6U6q5tHLQrCLO71xkg==", + "version": "6.4.11", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.4.11.tgz", + "integrity": "sha512-k2D3FLJS+/qD0qnd6ZlAjGFvaaxe1Dl10NyvpeDzIebMuYdn8VqYe6XBgGueEAtnzSJM4V03VD9kb5Fi24dnTA==", "requires": { "@babel/runtime": "^7.26.0", - "@mui/core-downloads-tracker": "^6.4.10", - "@mui/system": "^6.4.10", + "@mui/core-downloads-tracker": "^6.4.11", + "@mui/system": "^6.4.11", "@mui/types": "~7.2.24", "@mui/utils": "^6.4.9", "@popperjs/core": "^2.11.8", @@ -28793,9 +28793,9 @@ } }, "@mui/styled-engine": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.4.9.tgz", - "integrity": "sha512-qZRWO0cT407NI4ZRjZcH+1SOu8f3JzLHqdMlg52GyEufM9pkSZFnf7xjpwnlvkixcGjco6wLlMD0VB43KRcBuA==", + "version": "6.4.11", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.4.11.tgz", + "integrity": "sha512-74AUmlHXaGNbyUqdK/+NwDJOZqgRQw6BcNvhoWYLq3LGbLTkE+khaJ7soz6cIabE4CPYqO2/QAIU1Z/HEjjpcw==", "requires": { "@babel/runtime": "^7.26.0", "@emotion/cache": "^11.13.5", @@ -28806,13 +28806,13 @@ } }, "@mui/system": { - "version": "6.4.10", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.4.10.tgz", - "integrity": "sha512-RyBGQwP3tgo4JEibK+RwVu1a6nQ6y8urMCNsb2aiN/nvTxxumq6P26aoG4GTUf8L4O1sthC4lMXlP4r8ixDkMg==", + "version": "6.4.11", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.4.11.tgz", + "integrity": "sha512-gibtsrZEwnDaT5+I/KloOj/yHluX5G8heknuxBpQOdEQ3Gc0avjSImn5hSeKp8D4thiwZiApuggIjZw1dQguUA==", "requires": { "@babel/runtime": "^7.26.0", "@mui/private-theming": "^6.4.9", - "@mui/styled-engine": "^6.4.9", + "@mui/styled-engine": "^6.4.11", "@mui/types": "~7.2.24", "@mui/utils": "^6.4.9", "clsx": "^2.1.1", diff --git a/package.json b/package.json index 35d9ed76d..fdd68ad04 100644 --- a/package.json +++ b/package.json @@ -86,8 +86,8 @@ "@jellyfin/libass-wasm": "4.2.3", "@jellyfin/sdk": "0.0.0-unstable.202504150501", "@jellyfin/ux-web": "1.0.0", - "@mui/icons-material": "6.4.10", - "@mui/material": "6.4.10", + "@mui/icons-material": "6.4.11", + "@mui/material": "6.4.11", "@mui/x-date-pickers": "7.28.3", "@react-hook/resize-observer": "2.0.2", "@tanstack/react-query": "5.72.1", From 63a0d983eede4487e1b68e12f13a42f7d43d9ab7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Apr 2025 17:29:25 +0000 Subject: [PATCH 021/645] Update tanstack-query monorepo to v5.72.2 --- package-lock.json | 62 +++++++++++++++++++++++------------------------ package.json | 4 +-- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2ddfd6131..46bafcd78 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,8 +24,8 @@ "@mui/material": "6.4.10", "@mui/x-date-pickers": "7.28.3", "@react-hook/resize-observer": "2.0.2", - "@tanstack/react-query": "5.72.1", - "@tanstack/react-query-devtools": "5.72.1", + "@tanstack/react-query": "5.72.2", + "@tanstack/react-query-devtools": "5.72.2", "abortcontroller-polyfill": "1.7.8", "blurhash": "2.0.5", "classlist.js": "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz", @@ -5416,9 +5416,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.72.1", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.72.1.tgz", - "integrity": "sha512-nOu0EEkZuJ0BZnYgeaEfo44+psq1jBO7/zp3KudixD4dvgOVerrhAhDEKsWx2N7MxB59mjO4r0ddP/VqWGPK+Q==", + "version": "5.72.2", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.72.2.tgz", + "integrity": "sha512-fxl9/0yk3mD/FwTmVEf1/H6N5B975H0luT+icKyX566w6uJG0x6o+Yl+I38wJRCaogiMkstByt+seXfDbWDAcA==", "license": "MIT", "funding": { "type": "github", @@ -5426,9 +5426,9 @@ } }, "node_modules/@tanstack/query-devtools": { - "version": "5.72.1", - "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.72.1.tgz", - "integrity": "sha512-D0vEoQaiVq9ayCqvvxA9XkDq7TIesyPpvgP69arRtt5FQF6n/Hrta4SlkfXC4m9BCvFLlhLDcKGYa2eMQ4ZIIA==", + "version": "5.72.2", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.72.2.tgz", + "integrity": "sha512-mMKnGb+iOhVBcj6jaerCFRpg8pACStdG8hmUBHPtToeZzs4ctjBUL1FajqpVn2WaMxnq8Wya+P3Q5tPFNM9jQw==", "license": "MIT", "funding": { "type": "github", @@ -5436,12 +5436,12 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.72.1", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.72.1.tgz", - "integrity": "sha512-4UEMyRx54xj144D2nDvDIMiXSG5BrqyCJrmyNoGbymNS+VWODcBDFrmRk9p2fe12UGZ4JtKPTNuW2Jg0aisUgQ==", + "version": "5.72.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.72.2.tgz", + "integrity": "sha512-SVNHzyBUYiis+XiCl+8yiPZmMYei2AKYY94wM/zpvB5l1jxqOo82FQTziSJ4pBi96jtYqvYrTMxWynmbQh3XKw==", "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.72.1" + "@tanstack/query-core": "5.72.2" }, "funding": { "type": "github", @@ -5452,19 +5452,19 @@ } }, "node_modules/@tanstack/react-query-devtools": { - "version": "5.72.1", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.72.1.tgz", - "integrity": "sha512-ckNRgABst3MLjpM2nD/CzQToCiaT3jb3Xhtf+GP/0/9ij9SPT/SC+lc3wUDSkT0OupnHobBBF5E1/Xp6B+XZLg==", + "version": "5.72.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.72.2.tgz", + "integrity": "sha512-n53qr9JdHCJTCUba6OvMhwiV2CcsckngOswKEE7nM5pQBa/fW9c43qw8omw1RPT2s+aC7MuwS8fHsWT8g+j6IQ==", "license": "MIT", "dependencies": { - "@tanstack/query-devtools": "5.72.1" + "@tanstack/query-devtools": "5.72.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "^5.72.1", + "@tanstack/react-query": "^5.72.2", "react": "^18 || ^19" } }, @@ -29262,29 +29262,29 @@ } }, "@tanstack/query-core": { - "version": "5.72.1", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.72.1.tgz", - "integrity": "sha512-nOu0EEkZuJ0BZnYgeaEfo44+psq1jBO7/zp3KudixD4dvgOVerrhAhDEKsWx2N7MxB59mjO4r0ddP/VqWGPK+Q==" + "version": "5.72.2", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.72.2.tgz", + "integrity": "sha512-fxl9/0yk3mD/FwTmVEf1/H6N5B975H0luT+icKyX566w6uJG0x6o+Yl+I38wJRCaogiMkstByt+seXfDbWDAcA==" }, "@tanstack/query-devtools": { - "version": "5.72.1", - "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.72.1.tgz", - "integrity": "sha512-D0vEoQaiVq9ayCqvvxA9XkDq7TIesyPpvgP69arRtt5FQF6n/Hrta4SlkfXC4m9BCvFLlhLDcKGYa2eMQ4ZIIA==" + "version": "5.72.2", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.72.2.tgz", + "integrity": "sha512-mMKnGb+iOhVBcj6jaerCFRpg8pACStdG8hmUBHPtToeZzs4ctjBUL1FajqpVn2WaMxnq8Wya+P3Q5tPFNM9jQw==" }, "@tanstack/react-query": { - "version": "5.72.1", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.72.1.tgz", - "integrity": "sha512-4UEMyRx54xj144D2nDvDIMiXSG5BrqyCJrmyNoGbymNS+VWODcBDFrmRk9p2fe12UGZ4JtKPTNuW2Jg0aisUgQ==", + "version": "5.72.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.72.2.tgz", + "integrity": "sha512-SVNHzyBUYiis+XiCl+8yiPZmMYei2AKYY94wM/zpvB5l1jxqOo82FQTziSJ4pBi96jtYqvYrTMxWynmbQh3XKw==", "requires": { - "@tanstack/query-core": "5.72.1" + "@tanstack/query-core": "5.72.2" } }, "@tanstack/react-query-devtools": { - "version": "5.72.1", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.72.1.tgz", - "integrity": "sha512-ckNRgABst3MLjpM2nD/CzQToCiaT3jb3Xhtf+GP/0/9ij9SPT/SC+lc3wUDSkT0OupnHobBBF5E1/Xp6B+XZLg==", + "version": "5.72.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.72.2.tgz", + "integrity": "sha512-n53qr9JdHCJTCUba6OvMhwiV2CcsckngOswKEE7nM5pQBa/fW9c43qw8omw1RPT2s+aC7MuwS8fHsWT8g+j6IQ==", "requires": { - "@tanstack/query-devtools": "5.72.1" + "@tanstack/query-devtools": "5.72.2" } }, "@tanstack/react-table": { diff --git a/package.json b/package.json index 35d9ed76d..e6f79cfc9 100644 --- a/package.json +++ b/package.json @@ -90,8 +90,8 @@ "@mui/material": "6.4.10", "@mui/x-date-pickers": "7.28.3", "@react-hook/resize-observer": "2.0.2", - "@tanstack/react-query": "5.72.1", - "@tanstack/react-query-devtools": "5.72.1", + "@tanstack/react-query": "5.72.2", + "@tanstack/react-query-devtools": "5.72.2", "abortcontroller-polyfill": "1.7.8", "blurhash": "2.0.5", "classlist.js": "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz", From 6994ad8de2d8aafda3b7c62a1a450d7451510356 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Wed, 16 Apr 2025 14:28:55 -0400 Subject: [PATCH 022/645] Update filter icons --- src/controllers/list.html | 4 ++-- src/controllers/livetv.html | 2 +- src/controllers/movies/movies.html | 2 +- src/controllers/music/music.html | 8 ++++---- src/controllers/shows/tvrecommended.html | 4 ++-- src/scripts/libraryBrowser.js | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/controllers/list.html b/src/controllers/list.html index a755ad1c9..9546b035d 100644 --- a/src/controllers/list.html +++ b/src/controllers/list.html @@ -34,13 +34,13 @@ +
diff --git a/src/controllers/movies/movies.html b/src/controllers/movies/movies.html index 31927613a..5791ddf8d 100644 --- a/src/controllers/movies/movies.html +++ b/src/controllers/movies/movies.html @@ -7,7 +7,7 @@
- +
diff --git a/src/controllers/music/music.html b/src/controllers/music/music.html index 5ba1c72d1..f16987c8b 100644 --- a/src/controllers/music/music.html +++ b/src/controllers/music/music.html @@ -16,7 +16,7 @@
- +
@@ -60,7 +60,7 @@
- +
@@ -78,7 +78,7 @@
- +
@@ -101,7 +101,7 @@
- +
diff --git a/src/controllers/shows/tvrecommended.html b/src/controllers/shows/tvrecommended.html index 3b0e18255..26bfcedf8 100644 --- a/src/controllers/shows/tvrecommended.html +++ b/src/controllers/shows/tvrecommended.html @@ -6,7 +6,7 @@
- +
@@ -62,7 +62,7 @@
- +
diff --git a/src/scripts/libraryBrowser.js b/src/scripts/libraryBrowser.js index 8c765f79e..9411109b0 100644 --- a/src/scripts/libraryBrowser.js +++ b/src/scripts/libraryBrowser.js @@ -70,7 +70,7 @@ export function getQueryPagingHtml (options) { } if (options.filterButton) { - html += ''; + html += ''; } html += '
'; From 12931033be4d2659427f54cefaf17a3b605490f2 Mon Sep 17 00:00:00 2001 From: Diogo Ferreira Date: Wed, 16 Apr 2025 22:07:58 -0400 Subject: [PATCH 023/645] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index cef4fa73b..c2950e298 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -453,7 +453,7 @@ "HeaderSubtitleProfiles": "Perfis da Legenda", "HeaderSubtitleProfile": "Perfil da Legenda", "HeaderSubtitleAppearance": "Aparência das Legendas", - "HeaderStopRecording": "Parar gravação", + "HeaderStopRecording": "Parar Gravação", "HeaderStatus": "Estado", "HeaderStartNow": "Iniciar", "HeaderSpecialEpisodeInfo": "Informação do Episódio Especial", @@ -489,7 +489,7 @@ "HeaderProfileInformation": "Informação do Perfil", "HeaderPreferredMetadataLanguage": "Idioma Preferido dos Metadados", "HeaderPluginInstallation": "Instalar Extensão", - "HeaderPleaseSignIn": "Iniciar sessão", + "HeaderPleaseSignIn": "Por favor, inicie sessão", "HeaderPlaybackError": "Erro na reprodução", "HeaderPlayback": "Reprodução de multimédia", "HeaderPlayOn": "Reproduzir em", @@ -822,7 +822,7 @@ "ChannelAccessHelp": "Seleciona os canais para partilhar com este utilizador. Os administradores poderão editar todos os canais utilizando o gestor de metadados.", "ChangingMetadataImageSettingsNewContent": "As alterações às definições de transferência de metadados ou de imagens só se aplicam a novos conteúdos adicionados à tua biblioteca. Para aplicar as alterações aos títulos existentes, terás de atualizar os metadados manualmente.", "Categories": "Categorias", - "CancelSeries": "Cancelar gravação de série", + "CancelSeries": "Cancelar série", "CancelRecording": "Cancelar gravação", "ButtonWebsite": "Website", "ButtonUninstall": "Desinstalar", @@ -973,7 +973,7 @@ "HeaderChapterImages": "Imagens dos capítulos", "HeaderChannelAccess": "Acesso ao canal", "HeaderCancelSeries": "Cancelar gravação de série", - "HeaderCancelRecording": "Cancelar gravação", + "HeaderCancelRecording": "Cancelar Gravação", "HeaderBlockItemsWithNoRating": "Bloquear conteúdo sem informação de classificação etária ou com informação desconhecida", "HeaderAudioSettings": "Definições de áudio", "HeaderAudioBooks": "Livros de Áudio", @@ -2018,5 +2018,6 @@ "MetadataImagesLoadError": "Falha ao carregar definições de metadados", "CopyLogSuccess": "Conteúdo do registo copiado com sucesso.", "LimitSegmentLength": "Utilizar segmentos HLS mais curtos", - "LimitSegmentLengthHelp": "Ativar esta opção pode ajudar a evitar que o leitor HLS bloqueie durante a pesquisa em determinados dispositivos, como as TVs webOS." + "LimitSegmentLengthHelp": "Ativar esta opção pode ajudar a evitar que o leitor HLS bloqueie durante a pesquisa em determinados dispositivos, como as TVs webOS.", + "Retry": "Tentar de novo" } From 9226fbd9eb12d849c2eed945a8cfce74c9fe2bf1 Mon Sep 17 00:00:00 2001 From: Kalpit Shah Date: Thu, 17 Apr 2025 01:13:08 -0400 Subject: [PATCH 024/645] Translated using Weblate (Gujarati) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/gu/ --- src/strings/gu.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/gu.json b/src/strings/gu.json index cd87e5f91..c5bff38cc 100644 --- a/src/strings/gu.json +++ b/src/strings/gu.json @@ -21,5 +21,7 @@ "Alternate": "અન્ય", "AllLanguages": "બધી ભાષાઓ", "AlternateDVD": "અન્ય DVD", - "AllowMediaConversion": "મીડિયા રૂપાંતરણની અનુમતિ આપો" + "AllowMediaConversion": "મીડિયા રૂપાંતરણની અનુમતિ આપો", + "Absolute": "સંપૂર્ણ", + "Add": "ઉમેરો" } From e07e63caa5ac493bbee026f6c72505ffe7c5eb42 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 17 Apr 2025 08:50:54 +0000 Subject: [PATCH 025/645] Update dependency @jellyfin/sdk to v0.0.0-unstable.202504170501 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2ddfd6131..714c30df4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202504150501", + "@jellyfin/sdk": "0.0.0-unstable.202504170501", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.10", "@mui/material": "6.4.10", @@ -4090,9 +4090,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202504150501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504150501.tgz", - "integrity": "sha512-NjiwaNmuZylU+8v7pyOfOhcqWU4/YJ4jA2Sn2p+EITh76TDK2jbRHsdr5FEc26vaFBorKhxAcj77cQdhinXuiA==", + "version": "0.0.0-unstable.202504170501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504170501.tgz", + "integrity": "sha512-Xxy1yky0nxby0/PsJUg+JOtqUMsAEOfCM9z/2dJwR+jvN9/35Lmkt4iRDEzbCWxIw4IfGichwz5O4i1EEdX6KA==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -28579,9 +28579,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202504150501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504150501.tgz", - "integrity": "sha512-NjiwaNmuZylU+8v7pyOfOhcqWU4/YJ4jA2Sn2p+EITh76TDK2jbRHsdr5FEc26vaFBorKhxAcj77cQdhinXuiA==", + "version": "0.0.0-unstable.202504170501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504170501.tgz", + "integrity": "sha512-Xxy1yky0nxby0/PsJUg+JOtqUMsAEOfCM9z/2dJwR+jvN9/35Lmkt4iRDEzbCWxIw4IfGichwz5O4i1EEdX6KA==", "requires": {} }, "@jellyfin/ux-web": { diff --git a/package.json b/package.json index 35d9ed76d..77ac22d7f 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202504150501", + "@jellyfin/sdk": "0.0.0-unstable.202504170501", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.10", "@mui/material": "6.4.10", From ba6c355264737ce8820a4fcd3e4f401dae0ed624 Mon Sep 17 00:00:00 2001 From: The Imp Date: Thu, 17 Apr 2025 10:30:36 -0400 Subject: [PATCH 026/645] Translated using Weblate (Swedish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/ --- src/strings/sv.json | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/strings/sv.json b/src/strings/sv.json index 09af23f71..32af53541 100644 --- a/src/strings/sv.json +++ b/src/strings/sv.json @@ -1097,7 +1097,7 @@ "ErrorAddingXmlTvFile": "Det uppstod ett problem vid läsningen av XMLTV-filen. Kontrollera att filen är tillgänglig och försök igen.", "ErrorAddingListingsToSchedulesDirect": "Det uppstod ett problem när din lista skulle läggas till på ditt Schedules Direct konto. Schedules Direct tillåter bara ett begränsat antal listor per konto. Du kanske behöver logga in på Schedules Direct hemsidan och ta bort andras listningar från ditt konto innan du fortsätter.", "EnableStreamLoopingHelp": "Aktivera enbart detta om direktsändningen enbart innehåller några sekunders data och behöver bli kontinuerligt uppdaterad. Att aktivera denna funktion i onödan kan skapa problem.", - "EnableStreamLooping": "Loopa direktsändningar", + "EnableStreamLooping": "Loopa direktsändningar automatiskt", "Descending": "Fallande", "DefaultMetadataLangaugeDescription": "Detta är dina standardinställningar och de kan ändras individuellt för varje bibliotek.", "ColorTransfer": "Färgöverföring", @@ -1802,7 +1802,7 @@ "EnableLibrary": "Aktivera biblioteket", "PriorityBelowNormal": "Under normal", "PriorityIdle": "Inaktiv", - "Lyric": "Låttext", + "Lyric": "Sångtext", "ChannelResolutionSDPAL": "SD(PAL)", "ChannelResolutionHD": "HD", "ChannelResolutionFullHD": "Full HD", @@ -1820,7 +1820,7 @@ "PlaybackError.MEDIA_NOT_SUPPORTED": "Uppspelning misslyckades då mediet inte stöds av denna klient.", "PlaybackError.NETWORK_ERROR": "Uppspelningen misslyckades på grund av nätverksfel.", "LimitSupportedVideoResolution": "Begränsa maximal videoupplösning", - "Lyrics": "Låttexter", + "Lyrics": "Sångtexter", "PlaybackError.ASS_RENDER_ERROR": "Ett fel uppstod i textrenderaren för ASS/SSA-undertexter.", "PlaybackError.FATAL_HLS_ERROR": "Ett allvarligt fel uppstod i HLS-strömmen.", "PlaybackError.MEDIA_DECODE_ERROR": "Uppspelning misslyckades på grund av ett fel vid media avkodning.", @@ -1829,11 +1829,11 @@ "PlaybackError.SERVER_ERROR": "Uppspelningen misslyckades på grund av ett serverfel.", "PlaybackError.NotAllowed": "Uppspelningen av detta media är inte tillåtet.", "PlaybackError.RateLimitExceeded": "Detta medium kan inte spelas upp just nu på grund av hastighetsbegränsningar.", - "ViewLyrics": "Visa låttexter", + "ViewLyrics": "Visa sångtexter", "LabelAllowContentWithTags": "Tillåt objekt med taggarna", "LimitSupportedVideoResolutionHelp": "Använd 'Maximal tillåten video omkodningsupplösning' som maximal begränsad maximal videoupplösning.", - "HeaderDeleteLyrics": "Ta bort låttexterna", - "HeaderNoLyrics": "Inga låttexter hittades", + "HeaderDeleteLyrics": "Radera sångtexter", + "HeaderNoLyrics": "Inga sångtexter hittades", "Creator": "Skapare", "EnableTrueHd": "Aktivera TrueHD", "NonBlockingScan": "Non Blocking - köar genereringen och återvänder sedan", @@ -1841,7 +1841,7 @@ "LabelSelectPreferredTranscodeVideoAudioCodec": "Föredragen ljudcodec för transkodning vid videouppspelning", "PlaylistPublic": "Tillåt allmän åtkomst", "PlaylistPublicDescription": "Tillåt att denna spellista kan ses av vilken inloggad användare som helst.", - "SaveLyricsIntoMediaFolders": "Spara låttexter i mediemappar", + "SaveLyricsIntoMediaFolders": "Spara sångtexter i mediemappar", "SelectPreferredTranscodeVideoAudioCodecHelp": "Välj den föredragna ljudcodecen att transkoda till för videomaterial. Om den föredragna codecen inte stöds kommer servern att använda den näst bästa tillgängliga codecen.", "LabelEncodingFormatOptions": "Alternativ för kodningsformat", "LabelWidthResolutions": "Breddupplösningar", @@ -1849,7 +1849,7 @@ "LabelExtractTrickplayDuringLibraryScan": "Extrahera trickplay-bilder under biblioteksskanningen", "PlaylistError.AddFailed": "Fel vid tillägg till spellista", "PlaylistError.CreateFailed": "Fel vid skapande av spellista", - "SaveLyricsIntoMediaFoldersHelp": "Att lagra låttexter bredvid ljudfiler gör det möjligt att hantera dem mer lättillgängligt.", + "SaveLyricsIntoMediaFoldersHelp": "Att lagra sångtexter bredvid ljudfiler gör det möjligt att hantera dem mer lättillgängligt.", "LabelProcessPriority": "Processprioritet", "LabelTileWidth": "sektion bredd", "LibraryScanFanoutConcurrency": "Gränsvärde för parallella bibliotekssökuppgifter", @@ -1889,7 +1889,7 @@ "LabelQscaleHelp": "Kvalitetsskalan för bilder som produceras av FFmpeg, där 2 är högsta kvalitet och 31 är lägsta kvalitet.", "LabelImageIntervalHelp": "Intervall av tid (ms) mellan varje ny trickplay-bild.", "LabelQscale": "qscale", - "HeaderLyricDownloads": "Låttextnedladdningar", + "HeaderLyricDownloads": "Sångtextnedladdningar", "AlternateDVD": "Alternativ DVD", "Regional": "Regional", "Alternate": "Alternativ", @@ -1928,7 +1928,7 @@ "PreviewLyrics": "Förhandsgranska sångtext", "EnableHi10p": "Slå på High 10-profilen för H.264", "EnableHi10pHelp": "Slå på detta för att undvika att omkoda H.264 10-bits videos. Slå av detta val om videon visar tomma bildrutor.", - "SearchForLyrics": "Sök efter låttext", + "SearchForLyrics": "Sök efter sångtexter", "HeaderAudioAdvanced": "Advancerat Ljud", "LabelDisableVbrAudioEncoding": "Inaktivera VBR-ljudkodning", "AlwaysRemuxFlacAudioFilesHelp": "Om du har filer som din webbläsare vägrar att spela upp eller där den beräknar tidsstämplar felaktigt, aktivera detta som en lösning.", @@ -2017,5 +2017,9 @@ "LabelGroupShowsIntoCollections": "Gruppera serier i samlingar", "LabelGroupShowsIntoCollectionsHelp": "Serier i en samling visas som ett grupperat föremål när listor av serier visas.", "PageNotFound": "Detta är inte sidan du letar efter.", - "LogLoadFailure": "Kunde inte ladda loggfilen. Den kan fortfarande vara aktivt skriven till." + "LogLoadFailure": "Kunde inte ladda loggfilen. Den kan fortfarande vara aktivt skriven till.", + "LimitSegmentLength": "Använd kortare HLS-segment", + "LimitSegmentLengthHelp": "Aktiveringen av detta alternativ kan bidra till att förhindra att HLS-spelaren hänger sig vid spolning på vissa enheter, så som TV-apparater med webOS.", + "ReadInputAtNativeFramerateHelp": "Aktivering av detta alternativ kan lösa vissa problem, t.ex. att direktsändningar stoppas i förtid.", + "ReadInputAtNativeFramerate": "Läs inmatning i ursprungling bildhastighet" } From 26a0bc44b8d3480747ba30f38763735f42e3df15 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Thu, 17 Apr 2025 10:37:07 -0400 Subject: [PATCH 027/645] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index c2950e298..88767a864 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -453,7 +453,7 @@ "HeaderSubtitleProfiles": "Perfis da Legenda", "HeaderSubtitleProfile": "Perfil da Legenda", "HeaderSubtitleAppearance": "Aparência das Legendas", - "HeaderStopRecording": "Parar Gravação", + "HeaderStopRecording": "Parar gravação", "HeaderStatus": "Estado", "HeaderStartNow": "Iniciar", "HeaderSpecialEpisodeInfo": "Informação do Episódio Especial", @@ -489,7 +489,7 @@ "HeaderProfileInformation": "Informação do Perfil", "HeaderPreferredMetadataLanguage": "Idioma Preferido dos Metadados", "HeaderPluginInstallation": "Instalar Extensão", - "HeaderPleaseSignIn": "Por favor, inicie sessão", + "HeaderPleaseSignIn": "Iniciar sessão", "HeaderPlaybackError": "Erro na reprodução", "HeaderPlayback": "Reprodução de multimédia", "HeaderPlayOn": "Reproduzir em", @@ -822,7 +822,7 @@ "ChannelAccessHelp": "Seleciona os canais para partilhar com este utilizador. Os administradores poderão editar todos os canais utilizando o gestor de metadados.", "ChangingMetadataImageSettingsNewContent": "As alterações às definições de transferência de metadados ou de imagens só se aplicam a novos conteúdos adicionados à tua biblioteca. Para aplicar as alterações aos títulos existentes, terás de atualizar os metadados manualmente.", "Categories": "Categorias", - "CancelSeries": "Cancelar série", + "CancelSeries": "Cancelar gravação de série", "CancelRecording": "Cancelar gravação", "ButtonWebsite": "Website", "ButtonUninstall": "Desinstalar", @@ -973,7 +973,7 @@ "HeaderChapterImages": "Imagens dos capítulos", "HeaderChannelAccess": "Acesso ao canal", "HeaderCancelSeries": "Cancelar gravação de série", - "HeaderCancelRecording": "Cancelar Gravação", + "HeaderCancelRecording": "Cancelar gravação", "HeaderBlockItemsWithNoRating": "Bloquear conteúdo sem informação de classificação etária ou com informação desconhecida", "HeaderAudioSettings": "Definições de áudio", "HeaderAudioBooks": "Livros de Áudio", @@ -2019,5 +2019,5 @@ "CopyLogSuccess": "Conteúdo do registo copiado com sucesso.", "LimitSegmentLength": "Utilizar segmentos HLS mais curtos", "LimitSegmentLengthHelp": "Ativar esta opção pode ajudar a evitar que o leitor HLS bloqueie durante a pesquisa em determinados dispositivos, como as TVs webOS.", - "Retry": "Tentar de novo" + "Retry": "Tentar novamente" } From de246b060eaf8a115ef5ebb35ebff06059fba6c4 Mon Sep 17 00:00:00 2001 From: StableCrimson Date: Thu, 17 Apr 2025 19:12:18 -0500 Subject: [PATCH 028/645] Convert `toast` and `confirm` to TypeScript (#5219) --- CONTRIBUTORS.md | 1 + src/components/confirm/confirm.js | 74 ------------------ src/components/confirm/confirm.ts | 85 +++++++++++++++++++++ src/components/toast/{toast.js => toast.ts} | 16 ++-- 4 files changed, 96 insertions(+), 80 deletions(-) delete mode 100644 src/components/confirm/confirm.js create mode 100644 src/components/confirm/confirm.ts rename src/components/toast/{toast.js => toast.ts} (74%) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 0f89f2747..d53caedaa 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -97,6 +97,7 @@ - [ItsAllAboutTheCode](https://github.com/ItsAllAboutTheCode) - [Jxiced](https://github.com/Jxiced) - [Derek Huber](https://github.com/Derek4aty1) +- [StableCrimson](https://github.com/StableCrimson) ## Emby Contributors diff --git a/src/components/confirm/confirm.js b/src/components/confirm/confirm.js deleted file mode 100644 index ed3562eaf..000000000 --- a/src/components/confirm/confirm.js +++ /dev/null @@ -1,74 +0,0 @@ -import { appRouter } from '../router/appRouter'; -import browser from '../../scripts/browser'; -import dialog from '../dialog/dialog'; -import globalize from '../../lib/globalize'; - -function useNativeConfirm() { - // webOS seems to block modals - // Tizen 2.x seems to block modals - return !browser.web0s - && !(browser.tizenVersion && (browser.tizenVersion < 3 || browser.tizenVersion >= 8)) - && browser.tv - && window.confirm; -} - -async function nativeConfirm(options) { - if (typeof options === 'string') { - options = { - title: '', - text: options - }; - } - - const text = (options.text || '').replaceAll('
', '\n'); - await appRouter.ready(); - const result = window.confirm(text); - - if (result) { - return Promise.resolve(); - } else { - return Promise.reject(); - } -} - -async function customConfirm(text, title) { - let options; - if (typeof text === 'string') { - options = { - title: title, - text: text - }; - } else { - options = text; - } - - const items = []; - - items.push({ - name: options.cancelText || globalize.translate('ButtonCancel'), - id: 'cancel', - type: 'cancel' - }); - - items.push({ - name: options.confirmText || globalize.translate('ButtonOk'), - id: 'ok', - type: options.primary === 'delete' ? 'delete' : 'submit' - }); - - options.buttons = items; - - await appRouter.ready(); - - return dialog.show(options).then(result => { - if (result === 'ok') { - return Promise.resolve(); - } - - return Promise.reject(); - }); -} - -const confirm = useNativeConfirm() ? nativeConfirm : customConfirm; - -export default confirm; diff --git a/src/components/confirm/confirm.ts b/src/components/confirm/confirm.ts new file mode 100644 index 000000000..3b40a8f2b --- /dev/null +++ b/src/components/confirm/confirm.ts @@ -0,0 +1,85 @@ +import dialog from 'components/dialog/dialog'; +import { appRouter } from 'components/router/appRouter'; +import globalize from 'lib/globalize'; +import browser from 'scripts/browser'; + +interface OptionItem { + id: string, + name: string, + type: 'cancel' | 'delete' | 'submit' +} + +interface ConfirmOptions { + title?: string, + text: string + cancelText?: string, + confirmText?: string, + primary?: string + buttons?: OptionItem[] +} + +function shouldUseNativeConfirm() { + // webOS seems to block modals + // Tizen 2.x seems to block modals + return !browser.web0s + && !(browser.tizenVersion && (browser.tizenVersion < 3 || browser.tizenVersion >= 8)) + && browser.tv + && !!window.confirm; +} + +async function nativeConfirm(options: string | ConfirmOptions) { + if (typeof options === 'string') { + options = { + text: options + } as ConfirmOptions; + } + + const text = (options.text || '').replace(//g, '\n'); + await appRouter.ready(); + const result = window.confirm(text); + + if (result) { + return Promise.resolve(); + } else { + return Promise.reject(new Error('Confirm dialog rejected')); + } +} + +async function customConfirm(options: string | ConfirmOptions, title: string = '') { + if (typeof options === 'string') { + options = { + title, + text: options + }; + } + + const items: OptionItem[] = []; + + items.push({ + name: options.cancelText || globalize.translate('ButtonCancel'), + id: 'cancel', + type: 'cancel' + }); + + items.push({ + name: options.confirmText || globalize.translate('ButtonOk'), + id: 'ok', + type: options.primary === 'delete' ? 'delete' : 'submit' + }); + + options.buttons = items; + + await appRouter.ready(); + + return dialog.show(options).then(result => { + if (result === 'ok') { + return Promise.resolve(); + } + + return Promise.reject(new Error('Confirm dialog rejected')); + }); +} + +const confirm = shouldUseNativeConfirm() ? nativeConfirm : customConfirm; + +export default confirm; diff --git a/src/components/toast/toast.js b/src/components/toast/toast.ts similarity index 74% rename from src/components/toast/toast.js rename to src/components/toast/toast.ts index e29cb16bc..7f85757fa 100644 --- a/src/components/toast/toast.js +++ b/src/components/toast/toast.ts @@ -1,6 +1,10 @@ import './toast.scss'; -let toastContainer; +interface Toast { + text: string +} + +let toastContainer: HTMLDivElement; function getToastContainer() { if (!toastContainer) { @@ -12,24 +16,24 @@ function getToastContainer() { return toastContainer; } -function remove(elem) { +function remove(elem: HTMLElement) { setTimeout(function () { - elem.parentNode.removeChild(elem); + elem.parentNode?.removeChild(elem); }, 300); } -function animateRemove(elem) { +function animateRemove(elem: HTMLElement) { setTimeout(function () { elem.classList.add('toastHide'); remove(elem); }, 3300); } -export default function (options) { +export default function (options: string | Toast) { if (typeof options === 'string') { options = { text: options - }; + } as Toast; } const elem = document.createElement('div'); From 907fef8b2e127ae2d9a7e8b27f8083fa0687565f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 18 Apr 2025 00:17:39 +0000 Subject: [PATCH 029/645] Bump http-proxy-middleware from 2.0.7 to 2.0.9 Bumps [http-proxy-middleware](https://github.com/chimurai/http-proxy-middleware) from 2.0.7 to 2.0.9. - [Release notes](https://github.com/chimurai/http-proxy-middleware/releases) - [Changelog](https://github.com/chimurai/http-proxy-middleware/blob/v2.0.9/CHANGELOG.md) - [Commits](https://github.com/chimurai/http-proxy-middleware/compare/v2.0.7...v2.0.9) --- updated-dependencies: - dependency-name: http-proxy-middleware dependency-version: 2.0.9 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 997697b29..248bd1808 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13045,9 +13045,9 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", - "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -34715,9 +34715,9 @@ } }, "http-proxy-middleware": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", - "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", "dev": true, "requires": { "@types/http-proxy": "^1.17.8", From 93a574f9aefd92437ea67765789023f3151dbbe1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 18 Apr 2025 00:18:43 +0000 Subject: [PATCH 030/645] Update dependency hls.js to v1.6.2 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index f7bc5ba51..636f3f86a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,7 +40,7 @@ "flv.js": "1.6.2", "headroom.js": "0.12.0", "history": "5.3.0", - "hls.js": "1.6.1", + "hls.js": "1.6.2", "intersection-observer": "0.12.2", "jellyfin-apiclient": "1.11.0", "jquery": "3.7.1", @@ -12711,9 +12711,9 @@ } }, "node_modules/hls.js": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.1.tgz", - "integrity": "sha512-7GOkcqn0Y9EqU2OJZlzkwxj9Uynuln7URvr7dRjgqNJNZ5UbbjL/v1BjAvQogy57Psdd/ek1u2s6IDEFYlabrA==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.2.tgz", + "integrity": "sha512-rx+pETSCJEDThm/JCm8CuadcAC410cVjb1XVXFNDKFuylaayHk1+tFxhkjvnMDAfqsJHxZXDAJ3Uc2d5xQyWlQ==", "license": "Apache-2.0" }, "node_modules/hoist-non-react-statics": { @@ -34480,9 +34480,9 @@ } }, "hls.js": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.1.tgz", - "integrity": "sha512-7GOkcqn0Y9EqU2OJZlzkwxj9Uynuln7URvr7dRjgqNJNZ5UbbjL/v1BjAvQogy57Psdd/ek1u2s6IDEFYlabrA==" + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.2.tgz", + "integrity": "sha512-rx+pETSCJEDThm/JCm8CuadcAC410cVjb1XVXFNDKFuylaayHk1+tFxhkjvnMDAfqsJHxZXDAJ3Uc2d5xQyWlQ==" }, "hoist-non-react-statics": { "version": "3.3.2", diff --git a/package.json b/package.json index d7a8ccabb..6a9d707d2 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "flv.js": "1.6.2", "headroom.js": "0.12.0", "history": "5.3.0", - "hls.js": "1.6.1", + "hls.js": "1.6.2", "intersection-observer": "0.12.2", "jellyfin-apiclient": "1.11.0", "jquery": "3.7.1", From 8cce936f02d12e1c62ac0e5fa3564738ee04542e Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Fri, 18 Apr 2025 00:28:21 -0400 Subject: [PATCH 031/645] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 2425ae8e1..13a5d130c 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1036,7 +1036,7 @@ "ThemeSongs": "Themamuziek", "ThemeVideos": "Themavideo's", "TheseSettingsAffectSubtitlesOnThisDevice": "Deze instellingen betreffen ondertiteling op dit apparaat", - "ThisWizardWillGuideYou": "Deze helper helpt je door het opzetproces heen. Om te beginnen selecteer je eerst de gewenste taal.", + "ThisWizardWillGuideYou": "Deze wizard helpt je stap voor stap bij het instellen. Voer om te beginnen een servernaam in en kies je voorkeurstaal.", "Thumb": "Miniatuur", "Thursday": "Donderdag", "TitleHardwareAcceleration": "Hardwareversnelling", From ed1e872f83fdedeaee4c63d9438efdbf150d2a79 Mon Sep 17 00:00:00 2001 From: Kityn Date: Fri, 18 Apr 2025 01:23:22 -0400 Subject: [PATCH 032/645] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 47e2486c5..97c81f47a 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -1105,7 +1105,7 @@ "ThemeSongs": "Motywy muzyczne", "ThemeVideos": "Motywy wideo", "TheseSettingsAffectSubtitlesOnThisDevice": "Te ustawienia dotyczą napisów na tym urządzeniu", - "ThisWizardWillGuideYou": "Niniejszy kreator pomoże Ci przejść przez proces instalacji. Najpierw wybierz preferowany przez siebie język.", + "ThisWizardWillGuideYou": "Niniejszy kreator pomoże Ci przejść przez proces instalacji. Najpierw wpisz nazwę serwera i wybierz preferowany język.", "Thumb": "Miniatura", "Thursday": "Czwartek", "TitleHardwareAcceleration": "Akceleracja sprzętowa", From 4d9c974d070325a520777b2789008dc6a342e8fc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 18 Apr 2025 08:38:06 +0000 Subject: [PATCH 033/645] Update dependency @jellyfin/sdk to v0.0.0-unstable.202504180501 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 828d40491..8f960fb1f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202504170501", + "@jellyfin/sdk": "0.0.0-unstable.202504180501", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.11", "@mui/material": "6.4.11", @@ -4091,9 +4091,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202504170501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504170501.tgz", - "integrity": "sha512-Xxy1yky0nxby0/PsJUg+JOtqUMsAEOfCM9z/2dJwR+jvN9/35Lmkt4iRDEzbCWxIw4IfGichwz5O4i1EEdX6KA==", + "version": "0.0.0-unstable.202504180501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504180501.tgz", + "integrity": "sha512-1ZMHCNLLyjJHOk/YVHpopmKmofI/PczR4mLXZuwHHbAD19/plv5OPx53UhPM2k2gwY8LIgO2kMgffJsFBmyxgw==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -28585,9 +28585,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202504170501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504170501.tgz", - "integrity": "sha512-Xxy1yky0nxby0/PsJUg+JOtqUMsAEOfCM9z/2dJwR+jvN9/35Lmkt4iRDEzbCWxIw4IfGichwz5O4i1EEdX6KA==", + "version": "0.0.0-unstable.202504180501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504180501.tgz", + "integrity": "sha512-1ZMHCNLLyjJHOk/YVHpopmKmofI/PczR4mLXZuwHHbAD19/plv5OPx53UhPM2k2gwY8LIgO2kMgffJsFBmyxgw==", "requires": {} }, "@jellyfin/ux-web": { diff --git a/package.json b/package.json index 7e7449a6f..6b758fed1 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202504170501", + "@jellyfin/sdk": "0.0.0-unstable.202504180501", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.11", "@mui/material": "6.4.11", From d49618ca371e9e047c17fe4ccac774e7d453b368 Mon Sep 17 00:00:00 2001 From: Fjuro Date: Fri, 18 Apr 2025 13:42:53 -0400 Subject: [PATCH 034/645] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index 2bbe2a6af..79f3cf12a 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -955,7 +955,7 @@ "Tags": "Tagy", "TellUsAboutYourself": "Řekněte nám něco o sobě", "TheseSettingsAffectSubtitlesOnThisDevice": "Tato nastavení ovlivní titulky na tomto zařízení", - "ThisWizardWillGuideYou": "Tento průvodce Vám pomůže projít procesem nastavení. Pro začátek vyberte jazyk.", + "ThisWizardWillGuideYou": "Tento průvodce Vám pomůže projít procesem nastavení. Pro začátek zadejte název serveru a vyberte preferovaný jazyk.", "Thumb": "Náhled", "Thursday": "Čtvrtek", "TitleHardwareAcceleration": "Hardwarová akcelerace", From 282f834ae7d9e3b42c0838599cee1e5d65f935c7 Mon Sep 17 00:00:00 2001 From: Nero Date: Fri, 18 Apr 2025 18:16:20 -0400 Subject: [PATCH 035/645] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/es.json b/src/strings/es.json index 5bb4e849c..457b86124 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -2022,5 +2022,8 @@ "ImageDeleteFailed": "Error al eliminar la imagen", "ImageUploadCancelled": "Se canceló la carga de la imagen", "ImageUploadFailed": "Falló la carga de la imagen", - "UploadCustomImage": "Cargar imagen personalizada" + "UploadCustomImage": "Cargar imagen personalizada", + "RetryWithGlobalSearch": "Reintentar con una búsqueda global", + "LimitSegmentLength": "Usar segmentos HLS más pequeños", + "LimitSegmentLengthHelp": "Habilitar esta opción puede prevenir que el reproductor HLS se congele mientras se avanza en ciertos dispositivos, como televisores webOS." } From 44553a8ba018b81753cef5f208334910d6c791d7 Mon Sep 17 00:00:00 2001 From: Nero Date: Fri, 18 Apr 2025 21:09:26 -0400 Subject: [PATCH 036/645] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/strings/es.json b/src/strings/es.json index 457b86124..ed99fa70b 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -993,7 +993,7 @@ "Tags": "Etiquetas", "TellUsAboutYourself": "Háblenos acerca de usted", "TheseSettingsAffectSubtitlesOnThisDevice": "Estas opciones afectan a los subtítulos en este dispositivo", - "ThisWizardWillGuideYou": "Este asistente lo guiará en el proceso de instalación. Para comenzar, seleccione su idioma preferido.", + "ThisWizardWillGuideYou": "Este asistente lo guiará en el proceso de instalación. Para comenzar, por favor introduzca un nombre de servidor y seleccione su idioma preferido.", "Thumb": "Miniatura", "Thursday": "Jueves", "TitleHardwareAcceleration": "Aceleración por Hardware", @@ -2025,5 +2025,6 @@ "UploadCustomImage": "Cargar imagen personalizada", "RetryWithGlobalSearch": "Reintentar con una búsqueda global", "LimitSegmentLength": "Usar segmentos HLS más pequeños", - "LimitSegmentLengthHelp": "Habilitar esta opción puede prevenir que el reproductor HLS se congele mientras se avanza en ciertos dispositivos, como televisores webOS." + "LimitSegmentLengthHelp": "Habilitar esta opción puede prevenir que el reproductor HLS se congele mientras se avanza en ciertos dispositivos, como televisores webOS.", + "StreamCountExceedsLimit": "El numero de transmisiones excede el límite" } From ad72b9015cf6f2fe6a7625c7402078dcd953f137 Mon Sep 17 00:00:00 2001 From: Kityn Date: Sat, 19 Apr 2025 02:02:30 -0400 Subject: [PATCH 037/645] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 97c81f47a..31c578410 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -1245,7 +1245,7 @@ "LabelVideoResolution": "Rozdzielczość wideo", "LabelStreamType": "Typ transmisji", "Artist": "Wykonawca", - "AlbumArtist": "Album wykonawcy", + "AlbumArtist": "Wykonawca albumu", "Album": "Album", "Person": "Osoba", "Movie": "Film", @@ -1256,7 +1256,7 @@ "DeinterlaceMethodHelp": "Wybierz metodę usuwania przeplotu używaną podczas transkodowania. Gdy przyśpieszenie sprzętowe wspierające usuwanie przeplotu jest włączone sprzętowe usuwanie przeplotu zostanie użyte zamiast tego ustawienia.", "ClientSettings": "Ustawienia klienta", "ButtonTogglePlaylist": "Lista odtwarzania", - "ButtonSyncPlay": "Odtwarzanie zsynchronizowane", + "ButtonSyncPlay": "SyncPlay", "ClearQueue": "Wyczyść kolejkę", "StopPlayback": "Zatrzymaj odtwarzanie", "ButtonPlayer": "Odtwarzacz", From 988ad425ed09f36bfaca8dfce4ffb19c239a4dd3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 19 Apr 2025 08:52:24 +0000 Subject: [PATCH 038/645] Update dependency @jellyfin/sdk to v0.0.0-unstable.202504190501 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5f821cf11..11692a526 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202504180501", + "@jellyfin/sdk": "0.0.0-unstable.202504190501", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.11", "@mui/material": "6.4.11", @@ -4091,9 +4091,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202504180501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504180501.tgz", - "integrity": "sha512-1ZMHCNLLyjJHOk/YVHpopmKmofI/PczR4mLXZuwHHbAD19/plv5OPx53UhPM2k2gwY8LIgO2kMgffJsFBmyxgw==", + "version": "0.0.0-unstable.202504190501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504190501.tgz", + "integrity": "sha512-vDwxT1j026jNtQ0sZ+YbSR3CJOl2/EfiZVIsmvtANcK/6xa9ludmm9l92lov/DNB5T5zjH2jUIhLniWZ6XD7Nw==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -28585,9 +28585,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202504180501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504180501.tgz", - "integrity": "sha512-1ZMHCNLLyjJHOk/YVHpopmKmofI/PczR4mLXZuwHHbAD19/plv5OPx53UhPM2k2gwY8LIgO2kMgffJsFBmyxgw==", + "version": "0.0.0-unstable.202504190501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504190501.tgz", + "integrity": "sha512-vDwxT1j026jNtQ0sZ+YbSR3CJOl2/EfiZVIsmvtANcK/6xa9ludmm9l92lov/DNB5T5zjH2jUIhLniWZ6XD7Nw==", "requires": {} }, "@jellyfin/ux-web": { diff --git a/package.json b/package.json index 6b758fed1..2c1482bc9 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202504180501", + "@jellyfin/sdk": "0.0.0-unstable.202504190501", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.11", "@mui/material": "6.4.11", From 51f35f591d8563a35ff147e6bc7140e55025c8f4 Mon Sep 17 00:00:00 2001 From: danielcalvar Date: Sat, 19 Apr 2025 09:25:41 -0400 Subject: [PATCH 039/645] Translated using Weblate (Galician) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/gl/ --- src/strings/gl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/gl.json b/src/strings/gl.json index a00865904..531448eb1 100644 --- a/src/strings/gl.json +++ b/src/strings/gl.json @@ -1017,5 +1017,6 @@ "LabelEnableAutomaticPortMapHelp": "Redireccionar automáticamente portos publicos do teu router aos portos locais do teu servidor mediante UPnP. É posible que isto non funcione con algúns modelos de router ou confiugurancións de rede. Os cambios non se aplicarán ata despois de reiniciar o servidor.", "LabelEnableAudioVbr": "Activar a codificación de audio VBR", "LabelEnableAudioVbrHelp": "A taxa de bits variable ofrece unha mellor relación entre a calidade e a taxa media de bits, pero nalgúns casos raros pode causar problemas de compatibilidade e almacenamento no búfer.", - "LabelEnableHardwareDecodingFor": "Activar a decodificación de hardware para" + "LabelEnableHardwareDecodingFor": "Activar a decodificación de hardware para", + "AirPlay": "AirPlay" } From 04e43f880d7733ff5f5acc78a0b50c6afaf3be5f Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Sat, 19 Apr 2025 10:01:15 -0400 Subject: [PATCH 040/645] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index 25dc72204..64832f91d 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -74,7 +74,7 @@ "TabServer": "Máy chủ", "TabUpcoming": "Sắp Công Chiếu", "TellUsAboutYourself": "Cho chúng tôi biết thông tin về bạn", - "ThisWizardWillGuideYou": "Trình hướng dẫn này sẽ giúp hướng dẫn bạn trong quá trình thiết lập. Để bắt đầu, vui lòng lựa chọn ngôn ngữ bạn ưa thích.", + "ThisWizardWillGuideYou": "Trình hướng dẫn này sẽ giúp hướng dẫn bạn trong quá trình thiết lập. Để bắt đầu, vui lòng nhập tên máy chủ và chọn ngôn ngữ ưa thích của bạn.", "UninstallPluginConfirmation": "Bạn có chắc muốn gỡ bỏ {0}?", "HeaderUninstallPlugin": "Gỡ bỏ Plugin", "AccessRestrictedTryAgainLater": "Truy cập hiện đang bị hạn chế. Hãy thử lại sau.", From 5ecf05f8ff3a3f0361cb205017018aea5ea764b0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 19 Apr 2025 16:29:03 +0000 Subject: [PATCH 041/645] Update Linters --- package-lock.json | 287 ++++++++++++++++++++++++++++++++++++++++++---- package.json | 4 +- 2 files changed, 267 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5f821cf11..0c2afdabd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -71,7 +71,7 @@ "@babel/plugin-transform-modules-umd": "7.25.9", "@babel/preset-env": "7.26.9", "@babel/preset-react": "7.26.3", - "@eslint-community/eslint-plugin-eslint-comments": "4.4.1", + "@eslint-community/eslint-plugin-eslint-comments": "4.5.0", "@eslint/js": "9.24.0", "@stylistic/eslint-plugin": "4.2.0", "@stylistic/stylelint-plugin": "3.1.2", @@ -84,7 +84,7 @@ "@types/react-dom": "18.3.6", "@types/react-lazy-load-image-component": "1.6.4", "@types/sortablejs": "1.15.8", - "@typescript-eslint/parser": "8.29.0", + "@typescript-eslint/parser": "8.29.1", "@uupaa/dynamic-import-polyfill": "1.0.2", "@vitest/coverage-v8": "3.1.1", "autoprefixer": "10.4.21", @@ -3653,9 +3653,9 @@ } }, "node_modules/@eslint-community/eslint-plugin-eslint-comments": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-4.4.1.tgz", - "integrity": "sha512-lb/Z/MzbTf7CaVYM9WCFNQZ4L1yi3ev2fsFPF99h31ljhSEyUoyEsKsNWiU+qD1glbYTDJdqgyaLKtyTkkqtuQ==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-4.5.0.tgz", + "integrity": "sha512-MAhuTKlr4y/CE3WYX26raZjy+I/kS2PLKSzvfmDCGrBLTFHOYwqROZdr4XwPgXwX3K9rjzMr4pSmUWGnzsUyMg==", "dev": true, "license": "MIT", "dependencies": { @@ -6005,16 +6005,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.0.tgz", - "integrity": "sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.1.tgz", + "integrity": "sha512-zczrHVEqEaTwh12gWBIJWj8nx+ayDcCJs06yoNMY0kwjMWDM6+kppljY+BxWI06d2Ja+h4+WdufDcwMnnMEWmg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.29.0", - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/typescript-estree": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0", + "@typescript-eslint/scope-manager": "8.29.1", + "@typescript-eslint/types": "8.29.1", + "@typescript-eslint/typescript-estree": "8.29.1", + "@typescript-eslint/visitor-keys": "8.29.1", "debug": "^4.3.4" }, "engines": { @@ -6029,6 +6029,135 @@ "typescript": ">=4.8.4 <5.9.0" } }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.1.tgz", + "integrity": "sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.29.1", + "@typescript-eslint/visitor-keys": "8.29.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.1.tgz", + "integrity": "sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.1.tgz", + "integrity": "sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.29.1", + "@typescript-eslint/visitor-keys": "8.29.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.1.tgz", + "integrity": "sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.29.1", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/scope-manager": { "version": "8.29.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.0.tgz", @@ -24811,6 +24940,31 @@ "typescript": ">=4.8.4 <5.9.0" } }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.0.tgz", + "integrity": "sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.29.0", + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/typescript-estree": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, "node_modules/uc.micro": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", @@ -28305,9 +28459,9 @@ "optional": true }, "@eslint-community/eslint-plugin-eslint-comments": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-4.4.1.tgz", - "integrity": "sha512-lb/Z/MzbTf7CaVYM9WCFNQZ4L1yi3ev2fsFPF99h31ljhSEyUoyEsKsNWiU+qD1glbYTDJdqgyaLKtyTkkqtuQ==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-4.5.0.tgz", + "integrity": "sha512-MAhuTKlr4y/CE3WYX26raZjy+I/kS2PLKSzvfmDCGrBLTFHOYwqROZdr4XwPgXwX3K9rjzMr4pSmUWGnzsUyMg==", "dev": true, "requires": { "escape-string-regexp": "^4.0.0", @@ -29746,16 +29900,90 @@ } }, "@typescript-eslint/parser": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.0.tgz", - "integrity": "sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.1.tgz", + "integrity": "sha512-zczrHVEqEaTwh12gWBIJWj8nx+ayDcCJs06yoNMY0kwjMWDM6+kppljY+BxWI06d2Ja+h4+WdufDcwMnnMEWmg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "8.29.0", - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/typescript-estree": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0", + "@typescript-eslint/scope-manager": "8.29.1", + "@typescript-eslint/types": "8.29.1", + "@typescript-eslint/typescript-estree": "8.29.1", + "@typescript-eslint/visitor-keys": "8.29.1", "debug": "^4.3.4" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.1.tgz", + "integrity": "sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.29.1", + "@typescript-eslint/visitor-keys": "8.29.1" + } + }, + "@typescript-eslint/types": { + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.1.tgz", + "integrity": "sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.1.tgz", + "integrity": "sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.29.1", + "@typescript-eslint/visitor-keys": "8.29.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.1.tgz", + "integrity": "sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.29.1", + "eslint-visitor-keys": "^4.2.0" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true + } } }, "@typescript-eslint/scope-manager": { @@ -42845,6 +43073,21 @@ "@typescript-eslint/eslint-plugin": "8.29.0", "@typescript-eslint/parser": "8.29.0", "@typescript-eslint/utils": "8.29.0" + }, + "dependencies": { + "@typescript-eslint/parser": { + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.0.tgz", + "integrity": "sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "8.29.0", + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/typescript-estree": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0", + "debug": "^4.3.4" + } + } } }, "uc.micro": { diff --git a/package.json b/package.json index 6b758fed1..89ef3efe5 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "@babel/plugin-transform-modules-umd": "7.25.9", "@babel/preset-env": "7.26.9", "@babel/preset-react": "7.26.3", - "@eslint-community/eslint-plugin-eslint-comments": "4.4.1", + "@eslint-community/eslint-plugin-eslint-comments": "4.5.0", "@eslint/js": "9.24.0", "@stylistic/eslint-plugin": "4.2.0", "@stylistic/stylelint-plugin": "3.1.2", @@ -22,7 +22,7 @@ "@types/react-dom": "18.3.6", "@types/react-lazy-load-image-component": "1.6.4", "@types/sortablejs": "1.15.8", - "@typescript-eslint/parser": "8.29.0", + "@typescript-eslint/parser": "8.29.1", "@uupaa/dynamic-import-polyfill": "1.0.2", "@vitest/coverage-v8": "3.1.1", "autoprefixer": "10.4.21", From 22ebdc78a9339f507c5c09acff7213448133b0d4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 19 Apr 2025 16:29:15 +0000 Subject: [PATCH 042/645] Update tanstack-query monorepo to v5.73.3 --- package-lock.json | 62 +++++++++++++++++++++++------------------------ package.json | 4 +-- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5f821cf11..391416ca6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,8 +24,8 @@ "@mui/material": "6.4.11", "@mui/x-date-pickers": "7.28.3", "@react-hook/resize-observer": "2.0.2", - "@tanstack/react-query": "5.72.2", - "@tanstack/react-query-devtools": "5.72.2", + "@tanstack/react-query": "5.73.3", + "@tanstack/react-query-devtools": "5.73.3", "abortcontroller-polyfill": "1.7.8", "blurhash": "2.0.5", "classlist.js": "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz", @@ -5417,9 +5417,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.72.2", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.72.2.tgz", - "integrity": "sha512-fxl9/0yk3mD/FwTmVEf1/H6N5B975H0luT+icKyX566w6uJG0x6o+Yl+I38wJRCaogiMkstByt+seXfDbWDAcA==", + "version": "5.73.3", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.73.3.tgz", + "integrity": "sha512-LUpsgVT3IkvOECdkQ3QD6esczSH71mAzH/LDZ2cu8j6w430v5W0JB1ulzsG8FFwFBd5fm/ePM2DFpg9TucRMgQ==", "license": "MIT", "funding": { "type": "github", @@ -5427,9 +5427,9 @@ } }, "node_modules/@tanstack/query-devtools": { - "version": "5.72.2", - "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.72.2.tgz", - "integrity": "sha512-mMKnGb+iOhVBcj6jaerCFRpg8pACStdG8hmUBHPtToeZzs4ctjBUL1FajqpVn2WaMxnq8Wya+P3Q5tPFNM9jQw==", + "version": "5.73.3", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.73.3.tgz", + "integrity": "sha512-hBQyYwsOuO7QOprK75NzfrWs/EQYjgFA0yykmcvsV62q0t6Ua97CU3sYgjHx0ZvxkXSOMkY24VRJ5uv9f5Ik4w==", "license": "MIT", "funding": { "type": "github", @@ -5437,12 +5437,12 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.72.2", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.72.2.tgz", - "integrity": "sha512-SVNHzyBUYiis+XiCl+8yiPZmMYei2AKYY94wM/zpvB5l1jxqOo82FQTziSJ4pBi96jtYqvYrTMxWynmbQh3XKw==", + "version": "5.73.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.73.3.tgz", + "integrity": "sha512-umsAEsVsSSnrOZrstX/OlctdqkRZm6vPsetmbl241tdNo0jT3s+0bUoof9kCaTsPr/GopPlbJ1OYlrZj4toKzg==", "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.72.2" + "@tanstack/query-core": "5.73.3" }, "funding": { "type": "github", @@ -5453,19 +5453,19 @@ } }, "node_modules/@tanstack/react-query-devtools": { - "version": "5.72.2", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.72.2.tgz", - "integrity": "sha512-n53qr9JdHCJTCUba6OvMhwiV2CcsckngOswKEE7nM5pQBa/fW9c43qw8omw1RPT2s+aC7MuwS8fHsWT8g+j6IQ==", + "version": "5.73.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.73.3.tgz", + "integrity": "sha512-5YizhmYep/A9h5Z+aApHZd0rwNH3FQm6JzUQmdH+f8aG5joi2cRAq+3UakDH6wst2kysReEmW4n7PaMxfCEtRQ==", "license": "MIT", "dependencies": { - "@tanstack/query-devtools": "5.72.2" + "@tanstack/query-devtools": "5.73.3" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "^5.72.2", + "@tanstack/react-query": "^5.73.3", "react": "^18 || ^19" } }, @@ -29268,29 +29268,29 @@ } }, "@tanstack/query-core": { - "version": "5.72.2", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.72.2.tgz", - "integrity": "sha512-fxl9/0yk3mD/FwTmVEf1/H6N5B975H0luT+icKyX566w6uJG0x6o+Yl+I38wJRCaogiMkstByt+seXfDbWDAcA==" + "version": "5.73.3", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.73.3.tgz", + "integrity": "sha512-LUpsgVT3IkvOECdkQ3QD6esczSH71mAzH/LDZ2cu8j6w430v5W0JB1ulzsG8FFwFBd5fm/ePM2DFpg9TucRMgQ==" }, "@tanstack/query-devtools": { - "version": "5.72.2", - "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.72.2.tgz", - "integrity": "sha512-mMKnGb+iOhVBcj6jaerCFRpg8pACStdG8hmUBHPtToeZzs4ctjBUL1FajqpVn2WaMxnq8Wya+P3Q5tPFNM9jQw==" + "version": "5.73.3", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.73.3.tgz", + "integrity": "sha512-hBQyYwsOuO7QOprK75NzfrWs/EQYjgFA0yykmcvsV62q0t6Ua97CU3sYgjHx0ZvxkXSOMkY24VRJ5uv9f5Ik4w==" }, "@tanstack/react-query": { - "version": "5.72.2", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.72.2.tgz", - "integrity": "sha512-SVNHzyBUYiis+XiCl+8yiPZmMYei2AKYY94wM/zpvB5l1jxqOo82FQTziSJ4pBi96jtYqvYrTMxWynmbQh3XKw==", + "version": "5.73.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.73.3.tgz", + "integrity": "sha512-umsAEsVsSSnrOZrstX/OlctdqkRZm6vPsetmbl241tdNo0jT3s+0bUoof9kCaTsPr/GopPlbJ1OYlrZj4toKzg==", "requires": { - "@tanstack/query-core": "5.72.2" + "@tanstack/query-core": "5.73.3" } }, "@tanstack/react-query-devtools": { - "version": "5.72.2", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.72.2.tgz", - "integrity": "sha512-n53qr9JdHCJTCUba6OvMhwiV2CcsckngOswKEE7nM5pQBa/fW9c43qw8omw1RPT2s+aC7MuwS8fHsWT8g+j6IQ==", + "version": "5.73.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.73.3.tgz", + "integrity": "sha512-5YizhmYep/A9h5Z+aApHZd0rwNH3FQm6JzUQmdH+f8aG5joi2cRAq+3UakDH6wst2kysReEmW4n7PaMxfCEtRQ==", "requires": { - "@tanstack/query-devtools": "5.72.2" + "@tanstack/query-devtools": "5.73.3" } }, "@tanstack/react-table": { diff --git a/package.json b/package.json index 6b758fed1..816d7530a 100644 --- a/package.json +++ b/package.json @@ -90,8 +90,8 @@ "@mui/material": "6.4.11", "@mui/x-date-pickers": "7.28.3", "@react-hook/resize-observer": "2.0.2", - "@tanstack/react-query": "5.72.2", - "@tanstack/react-query-devtools": "5.72.2", + "@tanstack/react-query": "5.73.3", + "@tanstack/react-query-devtools": "5.73.3", "abortcontroller-polyfill": "1.7.8", "blurhash": "2.0.5", "classlist.js": "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz", From 86c97dd72cae414d61886a14aac49a8068a5fef7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 19 Apr 2025 17:58:55 +0000 Subject: [PATCH 043/645] Update dependency typescript-eslint to v8.29.1 --- package-lock.json | 401 +++++++++------------------------------------- package.json | 2 +- 2 files changed, 80 insertions(+), 323 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0c2afdabd..fe4d53024 100644 --- a/package-lock.json +++ b/package-lock.json @@ -127,7 +127,7 @@ "stylelint-scss": "6.11.1", "ts-loader": "9.5.2", "typescript": "5.8.3", - "typescript-eslint": "8.29.0", + "typescript-eslint": "8.29.1", "vitest": "3.1.1", "webpack": "5.99.5", "webpack-bundle-analyzer": "4.10.2", @@ -5975,17 +5975,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.0.tgz", - "integrity": "sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.1.tgz", + "integrity": "sha512-ba0rr4Wfvg23vERs3eB+P3lfj2E+2g3lhWcCVukUuhtcdUx5lSIFZlGFEBHKr+3zizDa/TvZTptdNHVZWAkSBg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.29.0", - "@typescript-eslint/type-utils": "8.29.0", - "@typescript-eslint/utils": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0", + "@typescript-eslint/scope-manager": "8.29.1", + "@typescript-eslint/type-utils": "8.29.1", + "@typescript-eslint/utils": "8.29.1", + "@typescript-eslint/visitor-keys": "8.29.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -6029,7 +6029,7 @@ "typescript": ">=4.8.4 <5.9.0" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "node_modules/@typescript-eslint/scope-manager": { "version": "8.29.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.1.tgz", "integrity": "sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA==", @@ -6047,144 +6047,15 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "8.29.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.1.tgz", - "integrity": "sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.29.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.1.tgz", - "integrity": "sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.29.1", - "@typescript-eslint/visitor-keys": "8.29.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.0.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.29.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.1.tgz", - "integrity": "sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.29.1", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.0.tgz", - "integrity": "sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.0.tgz", - "integrity": "sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.1.tgz", + "integrity": "sha512-DkDUSDwZVCYN71xA4wzySqqcZsHKic53A4BLqmrWFFpOpNSoxX233lwGu/2135ymTCR04PoKiEEEvN1gFYg4Tw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.29.0", - "@typescript-eslint/utils": "8.29.0", + "@typescript-eslint/typescript-estree": "8.29.1", + "@typescript-eslint/utils": "8.29.1", "debug": "^4.3.4", "ts-api-utils": "^2.0.1" }, @@ -6201,9 +6072,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.0.tgz", - "integrity": "sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.1.tgz", + "integrity": "sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ==", "dev": true, "license": "MIT", "engines": { @@ -6215,14 +6086,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.0.tgz", - "integrity": "sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.1.tgz", + "integrity": "sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0", + "@typescript-eslint/types": "8.29.1", + "@typescript-eslint/visitor-keys": "8.29.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -6281,16 +6152,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.0.tgz", - "integrity": "sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.1.tgz", + "integrity": "sha512-QAkFEbytSaB8wnmB+DflhUPz6CLbFWE2SnSCrRMEa+KnXIzDYbpsn++1HGvnfAsUY44doDXmvRkO5shlM/3UfA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.29.0", - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/typescript-estree": "8.29.0" + "@typescript-eslint/scope-manager": "8.29.1", + "@typescript-eslint/types": "8.29.1", + "@typescript-eslint/typescript-estree": "8.29.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6305,13 +6176,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.0.tgz", - "integrity": "sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.1.tgz", + "integrity": "sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/types": "8.29.1", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -24918,40 +24789,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.29.0.tgz", - "integrity": "sha512-ep9rVd9B4kQsZ7ZnWCVxUE/xDLUUUsRzE0poAeNu+4CkFErLfuvPt/qtm2EpnSyfvsR0S6QzDFSrPCFBwf64fg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.29.1.tgz", + "integrity": "sha512-f8cDkvndhbQMPcysk6CUSGBWV+g1utqdn71P5YKwMumVMOG/5k7cHq0KyG4O52nB0oKS4aN2Tp5+wB4APJGC+w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.29.0", - "@typescript-eslint/parser": "8.29.0", - "@typescript-eslint/utils": "8.29.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.0.tgz", - "integrity": "sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.29.0", - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/typescript-estree": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0", - "debug": "^4.3.4" + "@typescript-eslint/eslint-plugin": "8.29.1", + "@typescript-eslint/parser": "8.29.1", + "@typescript-eslint/utils": "8.29.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -29883,16 +29729,16 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.0.tgz", - "integrity": "sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.1.tgz", + "integrity": "sha512-ba0rr4Wfvg23vERs3eB+P3lfj2E+2g3lhWcCVukUuhtcdUx5lSIFZlGFEBHKr+3zizDa/TvZTptdNHVZWAkSBg==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.29.0", - "@typescript-eslint/type-utils": "8.29.0", - "@typescript-eslint/utils": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0", + "@typescript-eslint/scope-manager": "8.29.1", + "@typescript-eslint/type-utils": "8.29.1", + "@typescript-eslint/utils": "8.29.1", + "@typescript-eslint/visitor-keys": "8.29.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -29910,118 +29756,44 @@ "@typescript-eslint/typescript-estree": "8.29.1", "@typescript-eslint/visitor-keys": "8.29.1", "debug": "^4.3.4" - }, - "dependencies": { - "@typescript-eslint/scope-manager": { - "version": "8.29.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.1.tgz", - "integrity": "sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "8.29.1", - "@typescript-eslint/visitor-keys": "8.29.1" - } - }, - "@typescript-eslint/types": { - "version": "8.29.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.1.tgz", - "integrity": "sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "8.29.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.1.tgz", - "integrity": "sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g==", - "dev": true, - "requires": { - "@typescript-eslint/types": "8.29.1", - "@typescript-eslint/visitor-keys": "8.29.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.0.1" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "8.29.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.1.tgz", - "integrity": "sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "8.29.1", - "eslint-visitor-keys": "^4.2.0" - } - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "dev": true - }, - "minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true - } } }, "@typescript-eslint/scope-manager": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.0.tgz", - "integrity": "sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.1.tgz", + "integrity": "sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA==", "dev": true, "requires": { - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0" + "@typescript-eslint/types": "8.29.1", + "@typescript-eslint/visitor-keys": "8.29.1" } }, "@typescript-eslint/type-utils": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.0.tgz", - "integrity": "sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.1.tgz", + "integrity": "sha512-DkDUSDwZVCYN71xA4wzySqqcZsHKic53A4BLqmrWFFpOpNSoxX233lwGu/2135ymTCR04PoKiEEEvN1gFYg4Tw==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "8.29.0", - "@typescript-eslint/utils": "8.29.0", + "@typescript-eslint/typescript-estree": "8.29.1", + "@typescript-eslint/utils": "8.29.1", "debug": "^4.3.4", "ts-api-utils": "^2.0.1" } }, "@typescript-eslint/types": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.0.tgz", - "integrity": "sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.1.tgz", + "integrity": "sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.0.tgz", - "integrity": "sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.1.tgz", + "integrity": "sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g==", "dev": true, "requires": { - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0", + "@typescript-eslint/types": "8.29.1", + "@typescript-eslint/visitor-keys": "8.29.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -30057,24 +29829,24 @@ } }, "@typescript-eslint/utils": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.0.tgz", - "integrity": "sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.1.tgz", + "integrity": "sha512-QAkFEbytSaB8wnmB+DflhUPz6CLbFWE2SnSCrRMEa+KnXIzDYbpsn++1HGvnfAsUY44doDXmvRkO5shlM/3UfA==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.29.0", - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/typescript-estree": "8.29.0" + "@typescript-eslint/scope-manager": "8.29.1", + "@typescript-eslint/types": "8.29.1", + "@typescript-eslint/typescript-estree": "8.29.1" } }, "@typescript-eslint/visitor-keys": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.0.tgz", - "integrity": "sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.1.tgz", + "integrity": "sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg==", "dev": true, "requires": { - "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/types": "8.29.1", "eslint-visitor-keys": "^4.2.0" }, "dependencies": { @@ -43065,29 +42837,14 @@ "dev": true }, "typescript-eslint": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.29.0.tgz", - "integrity": "sha512-ep9rVd9B4kQsZ7ZnWCVxUE/xDLUUUsRzE0poAeNu+4CkFErLfuvPt/qtm2EpnSyfvsR0S6QzDFSrPCFBwf64fg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.29.1.tgz", + "integrity": "sha512-f8cDkvndhbQMPcysk6CUSGBWV+g1utqdn71P5YKwMumVMOG/5k7cHq0KyG4O52nB0oKS4aN2Tp5+wB4APJGC+w==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "8.29.0", - "@typescript-eslint/parser": "8.29.0", - "@typescript-eslint/utils": "8.29.0" - }, - "dependencies": { - "@typescript-eslint/parser": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.0.tgz", - "integrity": "sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "8.29.0", - "@typescript-eslint/types": "8.29.0", - "@typescript-eslint/typescript-estree": "8.29.0", - "@typescript-eslint/visitor-keys": "8.29.0", - "debug": "^4.3.4" - } - } + "@typescript-eslint/eslint-plugin": "8.29.1", + "@typescript-eslint/parser": "8.29.1", + "@typescript-eslint/utils": "8.29.1" } }, "uc.micro": { diff --git a/package.json b/package.json index 89ef3efe5..e94b5418a 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "stylelint-scss": "6.11.1", "ts-loader": "9.5.2", "typescript": "5.8.3", - "typescript-eslint": "8.29.0", + "typescript-eslint": "8.29.1", "vitest": "3.1.1", "webpack": "5.99.5", "webpack-bundle-analyzer": "4.10.2", From 94f483e465144eb74a8ca4a2c0d8d5acaa89b615 Mon Sep 17 00:00:00 2001 From: MrPlow Date: Sun, 20 Apr 2025 04:32:04 -0400 Subject: [PATCH 044/645] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/strings/de.json b/src/strings/de.json index f8e7107d3..d83cbeaf5 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -96,7 +96,7 @@ "ColorSpace": "Farbraum", "CommunityRating": "Communitybewertung", "Composer": "Komponist", - "ConfigureDateAdded": "Legen Sie fest, wie die Metadaten für ‚Hinzugefügt am‘ unter Dashboard > Bibliotheken > Anzeige bestimmt werden.", + "ConfigureDateAdded": "Lege fest, wie die Metadaten für ‚Hinzugefügt am‘ unter Dashboard > Bibliotheken > Anzeige bestimmt werden", "ConfirmDeleteImage": "Bild löschen?", "ConfirmDeleteItem": "Das Löschen dieses Objekts löscht die Datei vom Laufwerk und in deiner Medienbibliothek. Bist du wirklich sicher?", "ConfirmDeleteItems": "Das Löschen dieser Objekte löscht die Dateien vom Laufwerk und in deiner Medienbibliothek. Bist du wirklich sicher?", @@ -455,7 +455,7 @@ "LabelDisplayMode": "Bildschirmmodus", "LabelDisplayName": "Anzeigename", "LabelDisplayOrder": "Anzeigereihenfolge", - "LabelDisplaySpecialsWithinSeasons": "Sonderinhalt innerhalb der Staffel, in der er ausgestrahlt wurde, anzeigen", + "LabelDisplaySpecialsWithinSeasons": "Specials in den Staffeln anzeigen, in den sie ausgestrahlt wurden", "LabelDownMixAudioScale": "Audioverstärkung beim Heruntermischen", "LabelDownMixAudioScaleHelp": "Lautstärke beim Heruntermischen erhöhen. Setze den Wert auf 1, um die Originallautstärke zu erhalten.", "LabelDownloadLanguages": "Herunterzuladende Sprachen", @@ -668,7 +668,7 @@ "LabelTrackNumber": "Liednummer", "LabelTranscodingTempPathHelp": "Wähle einen eigenen Pfad für transkodierte Dateien. Lasse das Feld frei, um den Standardspeicherort zu nutzen.", "LabelTranscodingThreadCount": "Anzahl der Transkodierungsthreads", - "LabelTranscodingThreadCountHelp": "Legt die maximale Anzahl von Transkodierungs-Threads fest. Das Reduzieren der Thread-Anzahl verringert die CPU-Auslastung, verhindert aber möglicherweise eine ausreichend schnelle Transkodierung für eine störungsfrei Wiedergabe.", + "LabelTranscodingThreadCountHelp": "Legt die maximale Anzahl von Transkodierungs-Threads fest. Das Reduzieren der Thread-Anzahl verringert die CPU-Auslastung, verhindert aber möglicherweise eine ausreichend schnelle Transkodierung für eine störungsfreie Wiedergabe.", "LabelTriggerType": "Auslöser-Typ", "LabelTunerIpAddress": "IP-Adresse des Tuners", "LabelTunerType": "Typ des Tuners", @@ -1039,7 +1039,7 @@ "ThemeSongs": "Titelsongs", "ThemeVideos": "Titelvideos", "TheseSettingsAffectSubtitlesOnThisDevice": "Diese Einstellungen beeinflussen Untertitel auf diesem Gerät", - "ThisWizardWillGuideYou": "Dieser Assistent wird dich durch den Einrichtungsprozess führen. Um zu beginnen, wähle bitte deine bevorzugte Sprache.", + "ThisWizardWillGuideYou": "Dieser Assistent wird dich durch den Einrichtungsprozess führen. Um zu beginnen, gebe bitte einen Servernamen ein wähle deine bevorzugte Sprache.", "Thursday": "Donnerstag", "TitleHardwareAcceleration": "Hardwarebeschleunigung", "TitleHostingSettings": "Hosting-Einstellungen", @@ -1157,7 +1157,7 @@ "OptionProtocolHls": "HTTP-Live-Streaming (HLS)", "OptionProtocolHttp": "HTTP", "OptionRegex": "Reguläre Ausdrücke", - "OptionSpecialEpisode": "Special Features", + "OptionSpecialEpisode": "Specials", "OptionTrackName": "Titel", "Screenshots": "Bildschirmfotos", "Studios": "Studios", @@ -2020,7 +2020,7 @@ "LabelGroupShowsIntoCollectionsHelp": "Serien in einer Sammlung werden als ein gruppiertes Element bei der Anzeige von Serienlisten dargestellt.", "ImageDeleteFailed": "Bild konnte nicht gelöscht werden", "LabelGroupShowsIntoCollections": "Serien in Kollektionen gruppieren", - "UploadCustomImage": "Benutzerdefinitiertes Bild hochladen", + "UploadCustomImage": "Benutzerdefiniertes Bild hochladen", "ReadInputAtNativeFramerateHelp": "Durch Aktivieren dieser Option können Probleme wie das vorzeitige Stoppen von Live-Streams behoben werden.", "LimitSegmentLength": "Kürzere HLS-Segmente verwenden", "LimitSegmentLengthHelp": "Durch Aktivieren dieser Option kann verhindert werden, dass der HLS-Player während der Suche auf bestimmten Geräten, beispielsweise webOS-Fernsehern, hängen bleibt.", From 3cef560d08a12598f9c033bb3adcc2b7c27e3130 Mon Sep 17 00:00:00 2001 From: myrad2267 Date: Sun, 20 Apr 2025 03:57:50 -0400 Subject: [PATCH 045/645] Translated using Weblate (French (Canada)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr_CA/ --- src/strings/fr-ca.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/fr-ca.json b/src/strings/fr-ca.json index d946b1dd6..f5b72e00f 100644 --- a/src/strings/fr-ca.json +++ b/src/strings/fr-ca.json @@ -60,7 +60,7 @@ "Subtitles": "Sous-titres", "Sunday": "Dimanche", "TellUsAboutYourself": "Parlez-nous de vous", - "ThisWizardWillGuideYou": "Cet assistant vous guidera dans le processus de configuration. Pour commencer, merci de sélectionner votre langue préférée.", + "ThisWizardWillGuideYou": "Cet assistant vous guidera dans le processus de configuration. Pour commencer, merci d'entrer votre nom et de sélectionner votre langue préférée.", "Thursday": "Jeudi", "TrackCount": "{0} pistes", "Tuesday": "Mardi", From 487085e0dd219a9a0a765b1847ded3969689ab33 Mon Sep 17 00:00:00 2001 From: myrad2267 Date: Sun, 20 Apr 2025 03:57:07 -0400 Subject: [PATCH 046/645] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 8704c6581..53fe51ab6 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1087,7 +1087,7 @@ "ThemeSongs": "Thèmes musicaux", "ThemeVideos": "Génériques", "TheseSettingsAffectSubtitlesOnThisDevice": "Ces paramètres affectent les sous-titres de cet appareil", - "ThisWizardWillGuideYou": "Cet assistant vous guidera dans le processus de configuration. Pour commencer, merci de sélectionner votre langue préférée.", + "ThisWizardWillGuideYou": "Cet assistant vous guidera dans le processus de configuration. Pour commencer, merci d'entrer votre nom et de sélectionner votre langue préférée.", "Thumb": "Vignettes", "Thursday": "Jeudi", "TitleHardwareAcceleration": "Accélération Matérielle", From fffcfcdf8c91cbf55724eebb96c881c3fd4b0998 Mon Sep 17 00:00:00 2001 From: Sepzilla <162247150+Sepzilla@users.noreply.github.com> Date: Sun, 20 Apr 2025 05:56:43 -0400 Subject: [PATCH 047/645] Translated using Weblate (Persian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fa/ --- src/strings/fa.json | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/strings/fa.json b/src/strings/fa.json index 2193167e2..584659dbe 100644 --- a/src/strings/fa.json +++ b/src/strings/fa.json @@ -30,7 +30,7 @@ "HeaderUsers": "کاربران", "LabelAudioLanguagePreference": "اولویت زبان صدا", "LabelContentType": "نوع محتوا", - "LabelCountry": "کشور", + "LabelCountry": "کشور/منطقه", "LabelCurrentPassword": "رمز فعلی", "LabelCustomCertificatePath": "مسیر اختصاصی گواهینامه SSL", "LabelCustomCertificatePathHelp": "پچ به فایل PKCS #12 حاوی یک گواهینامه و کلید خصوصی است تا پشتیبانی از TLS را در یک دامنه شخصی فعال کند.", @@ -648,7 +648,7 @@ "LabelSeriesRecordingPath": "مسیر ضبط سریال", "LabelSelectFolderGroups": "به طور خودکار محتواهای پوشه‌های زیر به 'فیلم' ، 'موسیقی' و' تلویزیون' گروه بندی شوند", "LabelSeasonNumber": "شماره فصل", - "ConfigureDateAdded": "چگونگی تنظیم 'تاریخ اضافه شده' در ابرداده را در پیش‌خوان > کتابخانه > تنظیمات NFO مشخص کنید", + "ConfigureDateAdded": "تنظیم کردن فراداده‌ی «تاریخ اضافه شده» در پیش‌خوان > کتابخانه‌ها > نمایش", "CinemaModeConfigurationHelp": "حالت سینما تجربه تئاتر گونه را مستقیم به اتاق نشیمن شما می‌آورد با قابلیت پخش تریلرها و پیش نمایش‌ها قبل از سایر ویژگی‌های اصلی.", "NoSubtitleSearchResultsFound": "نتیجه‌ای یافت نشد.", "MessageNoPluginConfiguration": "این افزونه هیچ تنظیماتی برای پیکربندی ندارد.", @@ -1641,7 +1641,7 @@ "ChannelResolutionHD": "HD", "ChannelResolutionFullHD": "Full HD", "ChannelResolutionUHD4K": "UHD (4K)", - "SelectAudioNormalizationHelp": "تنظیم صدا تِرَک - حجم صدای هر تِرَک صدا را به گونه‌ای تنظیم می‌کند که همه با بلندی یکسانی پخش شوند. تنظیم صدای آلبوم - تنها حجم صدای تِرَک‌های یک آلبوم را با حفظ دامنه داینامیک آن آلبوم، تنظیم می‌کند.", + "SelectAudioNormalizationHelp": "بهرهٔ قطعه - صدای هر قطعه را به گونه‌ای تنظیم می‌کند که همه با بلندی یکسانی پخش شوند. بهرهٔ آلبوم - فقط بلندیهٔ صدای قطعه‌های یک آلبوم را تنظیم می‌کند، بدون تغییردادن بازه دینامیک آلبوم. انتخاب ‌کردن بین «خاموش» یا دیگر گزینه‌ها نیاز به شروع دوباره‌ی پخش کنونی دارد.", "Colorist": "رنگارنگ", "ConfirmDeleteSeries": "حذف این سریال تمام {0} قسمت‌های آن را هم از فهرست رسانه و هم فایل‌هایش را از محل ذخیره‌سازی آن، حذف خواهد کرد. آیا مطمئنید که می‌خواهید ادامه دهید؟", "CoverArtist": "عکس هنرمند", @@ -1730,5 +1730,11 @@ "Retry": "تلاش مجدد", "RenderPgsSubtitle": "نمایش آزمایشی زیرنویس PGS", "RememberAudioSelections": "تنظیم ترک صدا بر اساس آیتم قبلی", - "PreviousChapter": "بخش قبلی" + "PreviousChapter": "بخش قبلی", + "ImageDeleteFailed": "تصویر حذف نشد", + "DeleteCustomImage": "حذف تصویر مخصوص", + "LabelStereoDownmixAlgorithm": "الگوریتم کاهش میکس ِ(داون‌میکس) استریو", + "CustomSplashScreenSize": "تصاویر مخصوص باید به نسبت-تصویر ۱۶x۹ و‌‌ حداقل به اندازهٔ ۱۹۲۰x۱۰۸۰ باشند.", + "ImageUploadCancelled": "بارگذاری تصویر لغو شد", + "ImageUploadFailed": "تصویر بارگذاری نشد" } From cb9e3ad26bc6e9f598abe39dbe9d98b02bf9237d Mon Sep 17 00:00:00 2001 From: MrPlow Date: Sun, 20 Apr 2025 06:38:59 -0400 Subject: [PATCH 048/645] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 60 ++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/src/strings/de.json b/src/strings/de.json index d83cbeaf5..f11dfe6a8 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -44,7 +44,7 @@ "BoxRear": "Box (Rückseite)", "Browse": "Durchsuchen", "MessageBrowsePluginCatalog": "Durchsuche unseren Katalog, um alle verfügbaren Plugins anzuzeigen.", - "BurnSubtitlesHelp": "Legt fest, ob der Server die Untertitel einbrennen soll. Deaktivieren verbessert die Serverperformance immens. Wähle Auto, um bildbasierte Formate (z.B. VobSub, PGS, SUB, IDX, etc.) sowie bestimmte ASS- oder SSA-Untertitel einbrennen zu lassen.", + "BurnSubtitlesHelp": "Legt fest, ob der Server die Untertitel einbrennen soll. Deaktivieren verbessert die Performance immens. Wähle Auto, um bildbasierte Formate (z.B. VobSub, PGS, SUB, IDX, etc.) sowie bestimmte ASS- oder SSA-Untertitel einbrennen zu lassen.", "ButtonAddMediaLibrary": "Medienbibliothek hinzufügen", "ButtonAddScheduledTaskTrigger": "Auslöser hinzufügen", "ButtonAddServer": "Server hinzufügen", @@ -91,15 +91,15 @@ "ChannelNameOnly": "Nur Kanal {0}", "ChannelNumber": "Kanalnummer", "Channels": "Kanäle", - "CinemaModeConfigurationHelp": "Der Kinomodus bringt mit der Fähigkeit, Trailer und benutzerdefinierte Intros vor dem Hauptfilm abzuspielen, das Kinoerlebnis direkt in dein Wohnzimmer.", + "CinemaModeConfigurationHelp": "Der Kinomodus bringt das Kinoerlebnis direkt in dein Wohnzimmer. Trailer und benutzerdefinierte Intros können vor dem Hauptfilm abgespielt werden.", "Collections": "Sammlungen", "ColorSpace": "Farbraum", "CommunityRating": "Communitybewertung", "Composer": "Komponist", "ConfigureDateAdded": "Lege fest, wie die Metadaten für ‚Hinzugefügt am‘ unter Dashboard > Bibliotheken > Anzeige bestimmt werden", "ConfirmDeleteImage": "Bild löschen?", - "ConfirmDeleteItem": "Das Löschen dieses Objekts löscht die Datei vom Laufwerk und in deiner Medienbibliothek. Bist du wirklich sicher?", - "ConfirmDeleteItems": "Das Löschen dieser Objekte löscht die Dateien vom Laufwerk und in deiner Medienbibliothek. Bist du wirklich sicher?", + "ConfirmDeleteItem": "Das Löschen dieses Objekts löscht die Datei vom Laufwerk und aus deiner Medienbibliothek. Bist du wirklich sicher?", + "ConfirmDeleteItems": "Das Löschen dieser Objekte löscht die Dateien vom Laufwerk und aus deiner Medienbibliothek. Bist du wirklich sicher?", "ConfirmDeletion": "Löschen bestätigen", "ConfirmEndPlayerSession": "Möchtest du Jellyfin auf {0} beenden?", "Connect": "Verbinden", @@ -117,17 +117,17 @@ "Delete": "Löschen", "DeleteDeviceConfirmation": "Sind Sie sicher, dass Sie dieses Gerät löschen möchten? Es wird wieder angezeigt, wenn sich ein Benutzer das nächste Mal damit anmeldet.", "DeleteImage": "Bild löschen", - "DeleteImageConfirmation": "Bist du dir sicher, dass du dieses Bild löschen willst?", + "DeleteImageConfirmation": "Bist du sicher, dass du dieses Bild löschen willst?", "DeleteMedia": "Medien löschen", "DeleteUser": "Benutzer löschen", - "DeleteUserConfirmation": "Bist du dir sicher, dass du diesen Benutzer löschen willst?", + "DeleteUserConfirmation": "Bist du sicher, dass du diesen Benutzer löschen willst?", "Depressed": "Gedrückt", "Descending": "Absteigend", "DetectingDevices": "Suche Geräte", "DeviceAccessHelp": "Dies wird nur auf Geräte angewendet, die eindeutig identifiziert werden können, und verhindert nicht den Web-Zugriff. Gefilterter Zugriff auf Geräte verhindert die Nutzung neuer Geräte solange, bis der Zugriff für diese freigegeben wird.", "DirectPlaying": "Direktes Abspielen", "DirectStreamHelp1": "Der Videostream ist mit dem Abspielgerät kompatibel, hat jedoch ein inkompatibles Audioformat (DTS, Dolby TrueHD usw.) oder eine inkompatible Anzahl von Audiokanälen. Der Videostream wird im laufenden Betrieb verlustfrei neu verpackt, bevor er an das Gerät gesendet wird. Nur der Audiostream wird transkodiert.", - "DirectStreamHelp2": "Die durch direktes Streaming verbrauchte Rechenleistung hängt normalerweise vom Audioprofil ab. Nur der Videostream ist verlustfrei.", + "DirectStreamHelp2": "Die durch direktes Streaming verbrauchte Energie hängt gewöhnlich vom Audioprofil ab. Nur der Videostream ist verlustfrei.", "DirectStreaming": "Direktes Streaming", "Director": "Regisseur", "Directors": "Regisseure", @@ -135,7 +135,7 @@ "Disconnect": "Verbindung trennen", "Display": "Anzeige", "DisplayInMyMedia": "Auf Startbildschirm anzeigen", - "DisplayInOtherHomeScreenSections": "Bereiche wie 'Neueste Medien' oder 'Weiterschauen' auf dem Startbildschirm anzeigen", + "DisplayInOtherHomeScreenSections": "Bereiche wie 'Kürzlich hinzugefügte Medien' oder 'Weiterschauen' auf dem Startbildschirm anzeigen", "DisplayMissingEpisodesWithinSeasons": "Fehlende Folgen innerhalb von Staffeln anzeigen", "DisplayMissingEpisodesWithinSeasonsHelp": "Dies muss in den Servereinstellungen auch für TV-Bibliotheken aktiviert werden.", "DisplayModeHelp": "Wähle den für die Oberfläche zu verwendenden Layoutstil.", @@ -143,13 +143,13 @@ "Down": "Runter", "DownloadsValue": "{0} Downloads", "DrmChannelsNotImported": "Verschlüsselte Kanäle werden nicht importiert.", - "DropShadow": "Schatten", + "DropShadow": "Schatten werfen", "EasyPasswordHelp": "Die vereinfachte PIN-Eingabe wird für Offline-Zugriffe über unterstützte Clients verwendet. Sie kann ebenso für ein einfaches Einloggen über das eigene Netzwerk verwendet werden.", "Edit": "Bearbeiten", "EditImages": "Bilder bearbeiten", "EditMetadata": "Metadaten bearbeiten", "EditSubtitles": "Untertitel bearbeiten", - "EnableBackdropsHelp": "Zeige während des Blätterns durch die Bibliothek passenden Hintergründe auf einigen Seiten an.", + "EnableBackdropsHelp": "Die Hintergründe hinter einigen Seiten anzeigen während durch die Bibliothek geblättert wird.", "EnableCinemaMode": "Kinomodus", "EnableColorCodedBackgrounds": "Farbige Hintergründe", "EnableDisplayMirroring": "Displayspiegelung", @@ -157,12 +157,12 @@ "EnableExternalVideoPlayersHelp": "Ein Menü für externe Videoplayer wird beim Starten der Videowiedergabe angezeigt.", "EnableHardwareEncoding": "Hardwarekodierung aktivieren", "EnableNextVideoInfoOverlay": "Zeige Informationen zum nächsten Video während der Wiedergabe", - "EnableNextVideoInfoOverlayHelp": "Blendet Informationen über das nächste abzuspielende Video der aktuellen Wiedergabeliste am Ende des laufenden Videos ein.", - "EnablePhotos": "Die Fotos anzeigen", + "EnableNextVideoInfoOverlayHelp": "Blendet am Ende eines Videos Informationen über das nächste abzuspielende Video der aktuellen Wiedergabeliste ein.", + "EnablePhotos": "Fotos anzeigen", "EnablePhotosHelp": "Bilder werden erkannt und neben anderen Mediendateien angezeigt.", "EnableStreamLooping": "Live-Streams automatisch verknüpfen", "EnableStreamLoopingHelp": "Aktivieren, wenn Live Streams nur Daten für ein paar Sekunden enthalten und ständig angefragt werden müssen. Kann zu Problemen führen, falls die Option nicht zwingend notwendig ist.", - "EnableThemeSongsHelp": "Die Titelmusiken im Hintergrund abspielen, während du die Bibliothek durchblätterst.", + "EnableThemeSongsHelp": "Titelmusiken im Hintergrund abspielen, während du die Bibliothek durchblätterst.", "EnableThemeVideosHelp": "Titelvideos im Hintergrund abspielen, während du die Bibliothek durchblätterst.", "Ended": "Beendet", "EndsAtValue": "Endet um {0}", @@ -1322,8 +1322,8 @@ "EnableDetailsBanner": "Detailbanner", "ShowMore": "Mehr anzeigen", "ShowLess": "Weniger anzeigen", - "EnableBlurHashHelp": "Bilder, die noch nicht fertig geladen wurden, werden mit einem verschwommenen Platzhalter dargestellt.", - "EnableBlurHash": "Verschwommene Platzhalter für Bilder zulassen", + "EnableBlurHashHelp": "Bilder die noch geladen werden, werden mit einem Platzhalter abgebildet.", + "EnableBlurHash": "Verschwommene Platzhalter für Bilder aktivieren", "EnableFasterAnimations": "Schnellere Animationen", "EnableDecodingColorDepth10Vp9": "10-Bit-Hardware-Dekodierung für VP9 aktivieren", "EnableDecodingColorDepth10Hevc": "10-Bit-Hardware-Dekodierung für HEVC aktivieren", @@ -1377,7 +1377,7 @@ "LabelColorSpace": "Farbraum", "MediaInfoColorSpace": "Farbraum", "VideoAudio": "Videoton", - "AllowTonemappingHelp": "Tone-Mapping kann den Dynamikumfang eines Videos von HDR nach SDR wandeln und dabei die für die Darstellung der Originalszene sehr wichtigen Bilddetails und Farben beibehalten. Dies funktioniert zurzeit nur bei 10bit HDR10, HLG und Dolby-Vision Videos und benötigt die entsprechende GPGPU-Laufzeitumgebung.", + "AllowTonemappingHelp": "Tone-Mapping kann den Dynamikumfang eines Videos von HDR nach SDR wandeln und dabei die für die Darstellung der Originalszene sehr wichtigen Bilddetails und Farben beibehalten. Dies funktioniert derzeit nur bei 10bit HDR10, HLG und DoVi-Videos. Erfordert die entsprechende GPGPU-Laufzeitumgebung.", "TonemappingRangeHelp": "Wähle den Ausgabefarbraum aus. Auto ist derselbe wie der Eingabefarbraum.", "TonemappingAlgorithmHelp": "Das Tone-Mapping kann fein abgestimmt werden. Wenn du mit diesen Optionen nicht vertraut bist, behalte einfach den Standardwert bei. Der empfohlene Wert ist \"BT.2390\".", "LabelTonemappingAlgorithm": "Wähle den zu verwendenden Tone-Mapping-Algorithmus aus", @@ -1425,7 +1425,7 @@ "OptionAllowContentDownloadHelp": "Benutzer können Medien herunterladen und auf ihren Geräten speichern. Dies ist nicht dasselbe wie eine Synchronisierungsfunktion. Buchbibliotheken benötigen diese Funktion, um ordnungsgemäß zu funktionieren.", "OptionAllowContentDownload": "Mediendownloads zulassen", "HeaderDeleteDevices": "Alle Geräte löschen", - "DeleteDevicesConfirmation": "Bist du dir sicher, dass du alle Geräte löschen willst? Alle anderen Sitzungen werden abgemeldet. Die Geräte erscheinen wieder, sobald sich ein Benutzer das nächste Mal von ihnen anmeldet.", + "DeleteDevicesConfirmation": "Bist du sicher, dass du alle Geräte löschen willst? Alle anderen Sitzungen werden abgemeldet. Die Geräte erscheinen wieder, sobald sich ein Benutzer das nächste Mal von ihnen anmeldet.", "DeleteAll": "Alle löschen", "EnableFallbackFontHelp": "Benutzerdefinierte, alternative Schriftarten aktivieren. Dies kann Probleme mit inkorrekt dargestellten Untertiteln vermeiden.", "EnableFallbackFont": "Ausweichschriftarten aktivieren", @@ -1757,7 +1757,7 @@ "LogLevel.None": "Nichts", "HeaderEpisodesStatus": "Episodenstatus", "AllowSegmentDeletion": "Segmente löschen", - "AllowSegmentDeletionHelp": "Alte Segmente löschen, nachdem sie vom Client heruntergeladen wurden. Damit muss nicht die gesamte transkodierte Datei auf der Festplatte zwischengespeichert werden. Deaktivieren Sie diese Option, wenn bei der Wiedergabe Probleme auftreten.", + "AllowSegmentDeletionHelp": "Alte Segmente löschen, nachdem sie vom Client heruntergeladen wurden. Damit muss nicht die gesamte transkodierte Datei auf der Festplatte zwischengespeichert werden. Deaktiviere diese Option, wenn bei der Wiedergabe Probleme auftreten.", "LabelThrottleDelaySeconds": "Drosseln nach", "LabelThrottleDelaySecondsHelp": "Zeit in Sekunden, nach der die Transkodierung gedrosselt wird. Muss groß genug sein, damit der Client einen gesunden Puffer aufrechterhalten kann. Funktioniert nur wenn \"Transkodierung drosseln\" aktiviert ist.", "LabelSegmentKeepSeconds": "Zeit, wie lange Segmente behalten werden", @@ -1779,14 +1779,14 @@ "LabelBackdropScreensaverIntervalHelp": "Die Zeit in Sekunden zwischen dem Wechsel verschiedener Hintergrundbilder im Bildschirmschoner.", "SearchResultsEmpty": "Entschuldigung! Es konnten keine Ergebnisse für „{0}“ gefunden werden", "LabelTrackGain": "Titel Gain", - "SelectAudioNormalizationHelp": "Track Gain - passt die Lautstärke der einzelnen Tracks an, so dass sie mit der gleichen Lautstärke wiedergegeben werden. Albumverstärkung - passt nur die Lautstärke aller Titel eines Albums an, wobei der Dynamikbereich des Albums erhalten bleibt. Um zwischen „Aus“ und anderen Optionen zu wechseln, muss die aktuelle Wiedergabe neu gestartet werden.", - "LabelAlbumGain": "Albumlautstärke", + "SelectAudioNormalizationHelp": "Titel Gain - passt die Lautstärke der einzelnen Tracks an, damit sie mit der gleichen Lautstärke wiedergegeben werden. Album Gain - passt nur die Lautstärke aller Titel eines Albums an, wobei der Dynamikbereich des Albums erhalten bleibt. Um zwischen „Aus“ und anderen Optionen zu wechseln, muss die aktuelle Wiedergabe neu gestartet werden.", + "LabelAlbumGain": "Album Gain", "LabelSelectAudioNormalization": "Audio Normalisierung", "HeaderAllRecordings": "Alle Aufnahmen", "LabelBuildVersion": "Build-Version", "LabelServerVersion": "Server-Version", "LabelWebVersion": "Web-Version", - "ButtonEditUser": "Editiere Benutzer", + "ButtonEditUser": "Benutzer bearbeiten", "DlnaMovedMessage": "Die DLNA-Funktion wurde in ein Plugin verschoben.", "DeleteName": "Löschen {0}", "AllowSubtitleManagement": "Erlaube diesem Nutzer Untertitel zu bearbeiten", @@ -1805,7 +1805,7 @@ "EnableLibrary": "Aktiviert die Bibliothek", "EnableLibraryHelp": "Mit dem deaktivieren der Bibliothek ist sie für keinen Benutzer mehr sichtbar.", "PlaybackError.ASS_RENDER_ERROR": "Beim rendern der ASS/SSA Untertitel ist ein Fehler aufgetreten.", - "ConfirmDeleteSeries": "Das löschen dieser Serie wird alle {0} Folgen aus deiner Medienbibliothek und dem Dateisystem löschen. Bist du sicher das du fortfahren möchtest?", + "ConfirmDeleteSeries": "Das Löschen dieser Serie wird alle {0} Folgen aus dem Dateisystem und von deiner Medienbibliothek löschen. Bist du sicher das du fortfahren möchtest?", "DeleteEntireSeries": "Lösche {0} Folgen", "DeleteSeries": "Lösche Serien", "DeleteEpisode": "Lösche Folge", @@ -1862,7 +1862,7 @@ "LabelTrickplayAccelEncoding": "Hardwarebeschleunigte MJPEG-Enkodierung aktivieren", "LabelTrickplayAccelEncodingHelp": "Derzeit nur auf QSV, VA-API, VideoToolbox und RKMPP verfügbar, diese Option hat keine Auswirkungen auf andere Methoden zur Hardwarebeschleunigung.", "Lyrics": "Songtexte", - "ConfirmDeleteLyrics": "Das Löschen dieses Songtextes löscht die Datei vom Laufwerk und in deiner Medienbibliothek. Bist du wirklich sicher?", + "ConfirmDeleteLyrics": "Das Löschen dieses Songtextes löscht die Datei vom Laufwerk und aus deiner Medienbibliothek. Bist du wirklich sicher?", "DeleteLyrics": "Songtexte löschen", "ErrorDeletingLyrics": "Es trat ein Fehler beim Löschen der Songtexte vom Server auf. Bitte stelle sicher, dass Jellyfin die notwendigen Zugriffsrechte besitzt.", "HeaderDeleteLyrics": "Songtexte löschen", @@ -1874,8 +1874,8 @@ "Editor": "Bearbeiter", "EnableTrueHdHelp": "Aktiviere diese Funktion nur, wenn dein Gerät TrueHD unterstützt oder an einen kompatiblen Audioreceiver angeschlossen ist. Andernfalls kann es zu Wiedergabefehlern kommen.", "EnableDts": "DTS zulassen (DCA)", - "EnableDtsHelp": "Aktiviere diese Funktion nur, wenn dein Gerät DTS unterstützt oder an einen kompatiblen Audioempfänger angeschlossen ist. Andernfalls kann es zu Wiedergabefehlern kommen.", - "EnableTrueHd": "TrueHD zulassen", + "EnableDtsHelp": "Aktiviere diese Funktion nur, wenn dein Gerät DTS unterstützt oder an einen kompatiblen Audioreceiver angeschlossen ist. Andernfalls kann es zu Wiedergabefehlern kommen.", + "EnableTrueHd": "TrueHD aktivieren", "Illustrator": "Illustrator", "HeaderLyricDownloads": "Lyrik Downloads", "LabelSelectPreferredTranscodeVideoAudioCodec": "Bevorzugter Transcode-Audiocodec bei der Videowiedergabe", @@ -1935,15 +1935,15 @@ "EnableHi10p": "H.264 High 10 Profil aktivieren", "EnableHi10pHelp": "Aktivieren, um die Transkodierung von H.264-Videos zu verhindern. Deaktivieren, wenn die Videos nur leere Frames zeigen.", "LabelDisableVbrAudioEncoding": "VBR-Audiocodierung deaktivieren", - "AlwaysRemuxFlacAudioFilesHelp": "Wenn du Dateien hast, welche dein Browser verweigert abzuspielen oder ungenaue Zeitstempel berechnet, aktiviere diese Behelfslösung.", + "AlwaysRemuxFlacAudioFilesHelp": "Wenn du Dateien hast, welche dein Browser nicht abspielt oder bei denen ungenaue Zeitstempel berechnet werden, aktiviere diese Behelfslösung.", "AlwaysRemuxMp3AudioFilesHelp": "Wenn du Dateien hast, bei welchen dein Browser ungenaue Zeitstempel berechnet, aktiviere diese Behelfslösung.", - "DisableVbrAudioEncodingHelp": "Verhindern Sie, dass der Server Audio mit VBR für diesen Client kodiert.", + "DisableVbrAudioEncodingHelp": "Verhindern, dass der Server Audio mit VBR für diesen Client kodiert.", "HeaderAudioAdvanced": "Erweiterter Ton", "LabelAlwaysRemuxFlacAudioFiles": "FLAC-Audiodateien immer wieder neu mischen", "LabelAlwaysRemuxMp3AudioFiles": "MP3-Audiodateien immer wieder neu mischen", "LabelAllowFmp4TranscodingContainer": "fMP4-Transkodierungscontainer zulassen", "FallbackMaxStreamingBitrateHelp": "Die maximale Streaming-Bitrate wird als Fallback verwendet, wenn ffprobe die Bitrate des Quellstreams nicht ermitteln kann. Dadurch wird verhindert, dass Clients eine zu hohe Transcodierungs-Bitrate anfordern, was zu einem Ausfall des Players und einer Überlastung des Encoders führen könnte.", - "AllowFmp4TranscodingContainerHelp": "Erlauben Sie den fMP4-Transcodierungscontainer für diesen Tuner, um HEVC- und HDR-Inhalte zu aktivieren. Nicht alle Tuner sind mit diesem Container kompatibel. Deaktivieren Sie dies, wenn bei der Wiedergabe Probleme auftreten.", + "AllowFmp4TranscodingContainerHelp": "Erlauben Sie den fMP4-Transcodierungscontainer für diesen Tuner, um HEVC- und HDR-Inhalte zu aktivieren. Nicht alle Tuner sind mit diesem Container kompatibel. Deaktiviere dies, wenn bei der Wiedergabe Probleme auftreten.", "AllowStreamSharingHelp": "Erlauben Sie Jellyfin, den MPEG-Stream vom Tuner zu duplizieren und diesen duplizierten Stream an seine Clients weiterzugeben. Dies ist nützlich, wenn der Tuner eine Gesamtstreamanzahlbegrenzung hat, kann aber auch zu Wiedergabeproblemen führen.", "RenderPgsSubtitleHelp": "Legen Sie fest, ob der Client PGS-Untertitel rendern soll, anstatt eingebaute Untertitel zu verwenden. Dadurch kann eine serverseitige Transkodierung vermieden und die clientseitige Rendering-Leistung verbessert werden.", "LabelAllowStreamSharing": "Stream-Sharing zulassen", @@ -1994,14 +1994,14 @@ "HeaderNextVideo": "Nächstes Video", "LabelMediaSegmentProviders": "Mediensegment Providers", "MediaSegmentProvidersHelp": "Aktiviere und Ordne die Mediensegmentanbieter in einer Benutzerdefinierten Reihenfolge.", - "CustomSubtitleStylingHelp": "Dieser Modus wechselt je nach Gerätetyp automatisch zwischen den nativen und benutzerdefinierten Untertitel-Styling-Mechanismen.", + "CustomSubtitleStylingHelp": "Untertitle-Stile funktionieren auf den meisten Geräten, sind aber mit zusätzlichem Leistungsmehraufwand verbunden.", "LabelSubtitleStyling": "Untertitelstil", "Native": "Nativ", "NativeSubtitleStylingHelp": "Das Untertitel-Styling funktioniert auf einigen Geräten nicht. Allerdings ist damit kein Leistungsaufwand verbunden.", "AutoSubtitleStylingHelp": "In diesem Modus wird je nach Gerätetyp automatisch zwischen dem nativen und dem benutzerdefinierten Untertitel-Styling umgeschaltet.", "Custom": "benutzerdefiniert", "LibraryNameInvalid": "Der Bibliotheksname darf nicht leer sein.", - "DeleteServerConfirmation": "Bist du sicher, dass du diesen Server löschen möchtest?", + "DeleteServerConfirmation": "Bist du sicher, dass du diesen Server löschen willst?", "LabelDevice": "Gerät", "LastActive": "Zuletzt aktiv", "CopyLogSuccess": "Protokollinhalte erfolgreich kopiert.", From bdd8f12e45d97519e1e5f9972ebcfcbcdebeaa21 Mon Sep 17 00:00:00 2001 From: Sepzilla <162247150+Sepzilla@users.noreply.github.com> Date: Sun, 20 Apr 2025 06:18:07 -0400 Subject: [PATCH 049/645] Translated using Weblate (Persian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fa/ --- src/strings/fa.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/strings/fa.json b/src/strings/fa.json index 584659dbe..91d007f77 100644 --- a/src/strings/fa.json +++ b/src/strings/fa.json @@ -743,7 +743,7 @@ "LabelDisplaySpecialsWithinSeasons": "نمایش قسمت های ویژه در فصل هایی که در آنها پخش شده", "LabelDownMixAudioScale": "بهبود صدا هنگام کاهش توزیع کانال های صوتی", "LabelDownMixAudioScaleHelp": "بهبود صدا هنگام کاهش توزیع کانال های صوتی. مقدار را روی ۱ تنظیم کنید تا مقدار اصلی صدا حفظ شود.", - "LabelDownloadLanguages": "بارگیری زبان های", + "LabelDownloadLanguages": "بارگیری زبان ها", "LabelDropImageHere": "تصویر را بکشید اینجا، یا برای مرور کلیک کنید.", "LabelDroppedFrames": "فریم های از دست رفته", "LabelDropShadow": "سایه انداختن", @@ -1600,7 +1600,7 @@ "MessageNoFavoritesAvailable": "هیچ مورد علاقه ای در حال حاضر در دسترس نیست.", "HeaderPerformance": "کارایی", "IgnoreDtsHelp": "غیر فعال کردن این گزینه ممکن است برخی اشکالات را رفع کند، مثل نبودن صدا بر روی کانال هایی که جریان صدا و تصویر جداگانه دارند.", - "LabelDummyChapterDurationHelp": "وقفه استخراج تصاویر فصل به ثانیه.", + "LabelDummyChapterDurationHelp": "وقفهٔ بین بخش ‌های الکی. برای توقف تولید بخش‌های الکی، به صفر بزارید. عوض کردن این هیچ تاثیری بر بخش‌هایی که تولید شده‌اند نخواهد داشت.", "HeaderDummyChapter": "تصاویر فصل", "EnableAudioNormalization": "معمول سازی صوت", "AllowCollectionManagement": "به این کاربر اجازه مدیریت مجموعه را بده", @@ -1736,5 +1736,7 @@ "LabelStereoDownmixAlgorithm": "الگوریتم کاهش میکس ِ(داون‌میکس) استریو", "CustomSplashScreenSize": "تصاویر مخصوص باید به نسبت-تصویر ۱۶x۹ و‌‌ حداقل به اندازهٔ ۱۹۲۰x۱۰۸۰ باشند.", "ImageUploadCancelled": "بارگذاری تصویر لغو شد", - "ImageUploadFailed": "تصویر بارگذاری نشد" + "ImageUploadFailed": "تصویر بارگذاری نشد", + "LabelEnableAudioVbr": "فعال‌کردن رمزگذاریِ وی‌بی‌آر(VBR)", + "LabelChapterImageResolutionHelp": "وضوح تصویر عکس بخش. عوض کردن این هیچ اثری بر بخش‌هایی که تولیدشده‌اند نخواهد داشت." } From ea0f97ded4dd98be4eddc6fc172896621ec0e82c Mon Sep 17 00:00:00 2001 From: myrad2267 Date: Sun, 20 Apr 2025 07:37:53 -0400 Subject: [PATCH 050/645] Translated using Weblate (French (Canada)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr_CA/ --- src/strings/fr-ca.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/fr-ca.json b/src/strings/fr-ca.json index f5b72e00f..a12ea192d 100644 --- a/src/strings/fr-ca.json +++ b/src/strings/fr-ca.json @@ -5,10 +5,10 @@ "ButtonCancel": "Annuler", "ButtonGotIt": "J'ai compris", "ButtonQuickStartGuide": "Guide de démarrage rapide", - "ButtonSignOut": "Sign out", + "ButtonSignOut": "Se déconnecter", "ConfirmDeleteItem": "Supprimer cet élément l'effacera à la fois du système de fichiers et de votre médiathèque. Êtes-vous sûr de vouloir continuer?", "Delete": "Supprimer", - "Disconnect": "Se déconnecter", + "Disconnect": "Déconnecter", "Download": "Télécharger", "Edit": "Modifier", "EnableDisplayMirroring": "Duplication d'écran", From 855ef0d66ad8dc39cfae53684256dd850aaa7b4c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 20 Apr 2025 13:14:09 +0000 Subject: [PATCH 051/645] Update dependency jsdom to v26.1.0 --- package-lock.json | 69 ++++++++++++++++++++++++++--------------------- package.json | 2 +- 2 files changed, 39 insertions(+), 32 deletions(-) diff --git a/package-lock.json b/package-lock.json index 286e2fe12..a08413a5b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -109,7 +109,7 @@ "globals": "16.0.0", "html-loader": "5.1.0", "html-webpack-plugin": "5.6.3", - "jsdom": "26.0.0", + "jsdom": "26.1.0", "mini-css-extract-plugin": "2.9.2", "postcss": "8.5.3", "postcss-loader": "8.1.1", @@ -7088,7 +7088,8 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "peer": true }, "node_modules/atob": { "version": "2.1.2", @@ -8377,6 +8378,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "peer": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -9275,10 +9277,11 @@ } }, "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", + "dev": true, + "license": "MIT" }, "node_modules/decode-uri-component": { "version": "0.2.2", @@ -9493,6 +9496,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "peer": true, "engines": { "node": ">=0.4.0" } @@ -11992,6 +11996,7 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", "license": "MIT", + "peer": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -14306,16 +14311,15 @@ } }, "node_modules/jsdom": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.0.0.tgz", - "integrity": "sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==", + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "dev": true, "license": "MIT", "dependencies": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", - "decimal.js": "^10.4.3", - "form-data": "^4.0.1", + "decimal.js": "^10.5.0", "html-encoding-sniffer": "^4.0.0", "http-proxy-agent": "^7.0.2", "https-proxy-agent": "^7.0.6", @@ -14325,12 +14329,12 @@ "rrweb-cssom": "^0.8.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^5.0.0", + "tough-cookie": "^5.1.1", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^3.1.1", "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.1.0", + "whatwg-url": "^14.1.1", "ws": "^8.18.0", "xml-name-validator": "^5.0.0" }, @@ -24402,9 +24406,9 @@ } }, "node_modules/tough-cookie": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", - "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -30492,7 +30496,8 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "peer": true }, "atob": { "version": "2.1.2", @@ -31396,6 +31401,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "peer": true, "requires": { "delayed-stream": "~1.0.0" } @@ -31983,9 +31989,9 @@ } }, "decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", "dev": true }, "decode-uri-component": { @@ -32134,7 +32140,8 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "peer": true }, "delegates": { "version": "1.0.0", @@ -33964,6 +33971,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "peer": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -35539,15 +35547,14 @@ } }, "jsdom": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.0.0.tgz", - "integrity": "sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==", + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "dev": true, "requires": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", - "decimal.js": "^10.4.3", - "form-data": "^4.0.1", + "decimal.js": "^10.5.0", "html-encoding-sniffer": "^4.0.0", "http-proxy-agent": "^7.0.2", "https-proxy-agent": "^7.0.6", @@ -35557,12 +35564,12 @@ "rrweb-cssom": "^0.8.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^5.0.0", + "tough-cookie": "^5.1.1", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^3.1.1", "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.1.0", + "whatwg-url": "^14.1.1", "ws": "^8.18.0", "xml-name-validator": "^5.0.0" } @@ -42573,9 +42580,9 @@ "dev": true }, "tough-cookie": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", - "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", "dev": true, "requires": { "tldts": "^6.1.32" diff --git a/package.json b/package.json index 90a6b48a2..23c3eb79f 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "globals": "16.0.0", "html-loader": "5.1.0", "html-webpack-plugin": "5.6.3", - "jsdom": "26.0.0", + "jsdom": "26.1.0", "mini-css-extract-plugin": "2.9.2", "postcss": "8.5.3", "postcss-loader": "8.1.1", From 28f8528b2b5a25b6665039dfa48d6b16314044c2 Mon Sep 17 00:00:00 2001 From: MrPlow Date: Sun, 20 Apr 2025 08:06:02 -0400 Subject: [PATCH 052/645] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/strings/de.json b/src/strings/de.json index f11dfe6a8..b881831b3 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -171,7 +171,7 @@ "ErrorAddingMediaPathToVirtualFolder": "Ein Fehler trat beim Hinzufügen eines Medienverzeichnisses auf. Bitte stelle sicher, dass der Pfad gültig ist und Jellyfin die notwendigen Zugriffsrechte besitzt.", "ErrorAddingTunerDevice": "Es trat ein Fehler beim Hinzufügen eines Tuners auf. Bitte stelle sicher, dass dieser erreichbar ist und versuche es erneut.", "ErrorAddingXmlTvFile": "Fehler beim Zugriff auf die XMLTV-Datei. Bitte stelle sicher, dass die Datei existiert und versuche es erneut.", - "ErrorDeletingItem": "Fehler beim Löschen des Objekts vom Server. Bitte stelle sicher, dass Jellyfin Schreibzugriff auf den Dateiordner hat und versuche es erneut.", + "ErrorDeletingItem": "Fehler beim Löschen des Objekts vom Server. Bitte stelle sicher, dass Jellyfin Schreibzugriff auf den Medienordner hat und versuche es erneut.", "ErrorGettingTvLineups": "Fehler beim Herunterladen des Fernsehprogramms. Bitte stelle sicher, dass deine Informationen korrekt sind und versuche es erneut.", "ErrorStartHourGreaterThanEnd": "Die Endzeit muss nach der Startzeit liegen.", "ErrorPleaseSelectLineup": "Bitte wähle ein TV-Programm und versuche es erneut. Wenn keine Programme verfügbar sind prüfe bitte Benutzername, Passwort und Postleitzahl.", @@ -179,15 +179,15 @@ "EveryNDays": "Alle {0} Tage", "ExitFullscreen": "Vollbild verlassen", "ExtraLarge": "Extragroß", - "ExtractChapterImagesHelp": "Die Extraktion von Kapitelbildern ermöglicht es Jellyfin-Apps eine grafische Szenenauswahl anzubieten. Sie kann sehr langsam und rechenintensiv sein und erfordert ggf. einige Gigabyte an freiem Speicherplatz. Diese Aufgabe wird ausgeführt, wenn neue Videos erkannt werden und wiederkehrend jede Nacht. Es wird nicht empfohlen diese Aufgabe in Zeiten hoher Serverauslastung zu starten.", - "FFmpegSavePathNotFound": "Wir konnten kein FFmpeg in dem von Dir angegebenen Verzeichnis finden. FFprobe wird ebenso benötigt und muss sich im gleichen Verzeichnis befinden. Diese Komponenten sind normalerweise in einem Paket kombiniert und kommen zusammen in einem Download. Bitte prüfe das Verzeichnis und versuche es erneut.", + "ExtractChapterImagesHelp": "Die Extraktion von Kapitelbildern ermöglicht es Clients eine grafische Szenenauswahl anzubieten. Sie kann langsam und rechenintensiv sein und erfordert ggf. einige Gigabytes Speicherplatz. Diese Aufgabe wird ausgeführt, wenn neue Videos erkannt werden und wiederkehrend jede Nacht. Es ist nicht empfohlen, diese Aufgabe während hoher Serverauslastung zu starten.", + "FFmpegSavePathNotFound": "Wir können FFmpeg in dem von Dir angegebenen Verzeichnis nicht finden. FFprobe wird ebenso benötigt und muss sich im gleichen Verzeichnis befinden. Diese Komponenten sind normalerweise im selben Download enthalten. Bitte prüfe das Verzeichnis und versuche es erneut.", "FastForward": "Vorwärts spulen", "Favorite": "Favorit", "Favorites": "Favoriten", "FetchingData": "Zusätzliche Daten abrufen", "File": "Datei", "FileNotFound": "Datei nicht gefunden.", - "FileReadCancelled": "Dateiimport wurde abgebrochen.", + "FileReadCancelled": "Das Lesen der Datei wurde abgebrochen.", "FileReadError": "Beim Lesen der Datei ist ein Fehler aufgetreten.", "Filters": "Filter", "Folders": "Verzeichnisse", @@ -1872,7 +1872,7 @@ "CoverArtist": "Cover-Künstler", "Creator": "Ersteller", "Editor": "Bearbeiter", - "EnableTrueHdHelp": "Aktiviere diese Funktion nur, wenn dein Gerät TrueHD unterstützt oder an einen kompatiblen Audioreceiver angeschlossen ist. Andernfalls kann es zu Wiedergabefehlern kommen.", + "EnableTrueHdHelp": "Nur aktivieren, wenn dein Gerät TrueHD unterstützt oder an einen kompatiblen Audioreceiver angeschlossen ist. Andernfalls kann es zu Wiedergabefehlern kommen.", "EnableDts": "DTS zulassen (DCA)", "EnableDtsHelp": "Aktiviere diese Funktion nur, wenn dein Gerät DTS unterstützt oder an einen kompatiblen Audioreceiver angeschlossen ist. Andernfalls kann es zu Wiedergabefehlern kommen.", "EnableTrueHd": "TrueHD aktivieren", From 0c51a335a419adead64b95cb27a91093c92ff7fd Mon Sep 17 00:00:00 2001 From: MrPlow Date: Sun, 20 Apr 2025 10:31:03 -0400 Subject: [PATCH 053/645] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 46 ++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/strings/de.json b/src/strings/de.json index b881831b3..5eb5b3e12 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -218,12 +218,12 @@ "HeaderAllowMediaDeletionFrom": "Erlaube Medienlöschung von", "HeaderApiKey": "API-Schlüssel", "HeaderApiKeys": "API-Schlüssel", - "HeaderApiKeysHelp": "Externe Applikationen benötigen einen API-Schlüssel, um mit dem Server zu kommunizieren. API-Schlüssel werden beim Anmelden mit einem normalen Benutzerkonto oder durch eine manuelle Freigabe vergeben.", + "HeaderApiKeysHelp": "Externe Applikationen benötigen einen API-Schlüssel, um mit dem Server zu kommunizieren zu können. Schlüssel werden durch Anmeldung mit einem normalen Benutzerkonto oder durch manuelle Freigabe vergeben.", "HeaderAppearsOn": "Erscheint auf", "HeaderAudioBooks": "Hörbücher", "HeaderAudioSettings": "Audioeinstellungen", "HeaderBlockItemsWithNoRating": "Blockiere Inhalte mit keiner oder nicht erkannter Altersfreigabe", - "HeaderBranding": "Branding / CSS", + "HeaderBranding": "Branding", "HeaderCancelRecording": "Aufnahme abbrechen", "HeaderCancelSeries": "Serie abbrechen", "HeaderCastAndCrew": "Besetzung & Mitwirkende", @@ -243,7 +243,7 @@ "HeaderContinueWatching": "Weiterschauen", "HeaderCustomDlnaProfiles": "Benutzerdefinierte Profile", "HeaderDateIssued": "Erstellungsdatum", - "HeaderDefaultRecordingSettings": "Standardaufnahmeeinstellungen", + "HeaderDefaultRecordingSettings": "Standard-Aufnahmeeinstellungen", "HeaderDeleteDevice": "Gerät löschen", "HeaderDeleteItem": "Objekt löschen", "HeaderDeleteItems": "Objekte löschen", @@ -258,13 +258,13 @@ "HeaderDownloadSync": "Herunterladen & Synchronisieren", "HeaderEasyPinCode": "Einfacher Easy PIN Code", "HeaderEditImages": "Bilder bearbeiten", - "HeaderEnabledFields": "Felder aktivieren", - "HeaderEnabledFieldsHelp": "Deaktiviere Felder, um das Ändern von Daten zu verhindern.", + "HeaderEnabledFields": "Aktivierte Felder", + "HeaderEnabledFieldsHelp": "Deaktiviere ein Feld, um es zu Sperren das Ändern von Daten zu verhindern.", "HeaderError": "Fehler", "HeaderExternalIds": "Externe IDs", "HeaderFeatureAccess": "Funktionszugriff", "HeaderFetchImages": "Bilder abrufen", - "HeaderFetcherSettings": "Quellen-Einstellungen", + "HeaderFetcherSettings": "Abruf-Einstellungen", "HeaderForKids": "Für Kinder", "HeaderFrequentlyPlayed": "Oft abgespielt", "HeaderGuideProviders": "Fernsehprogramm-Anbieter", @@ -272,7 +272,7 @@ "HeaderIdentificationCriteriaHelp": "Gib mindestens ein Identifikationskriterium an.", "HeaderIdentificationHeader": "Identfikations-Header", "HeaderIdentifyItemHelp": "Gib ein oder mehrere Suchkriterien ein. Entferne Kriterien, um die Suchergebnisse zu erweitern.", - "HeaderImageOptions": "Bild-Einstellungen", + "HeaderImageOptions": "Bild-Optionen", "HeaderImageSettings": "Bild-Einstellungen", "HeaderInstall": "Installieren", "HeaderInstantMix": "Sofortmix", @@ -301,7 +301,7 @@ "HeaderMyMediaSmall": "Meine Medien (Klein)", "HeaderNewApiKey": "Neuer API-Schlüssel", "HeaderNewDevices": "Neue Geräte", - "HeaderNextEpisodePlayingInValue": "Nächste Episode in {0}", + "HeaderNextEpisodePlayingInValue": "Nächste Episode beginnt in {0}", "HeaderNextVideoPlayingInValue": "Nächstes Video wird abgespielt in {0}", "HeaderOnNow": "Gerade läuft", "HeaderOtherItems": "Andere Inhalte", @@ -378,7 +378,7 @@ "Help": "Hilfe", "Hide": "Verbergen", "HideWatchedContentFromLatestMedia": "Gesehene Inhalte in 'Neueste Medien' ausblenden", - "HttpsRequiresCert": "Um HTTPS für externe Verbindungen zu erzwingen, benötigst du ein vertrauenswürdiges SSL-Zertifikat, z.B. von Let's Encrypt. Bitte stelle entweder ein Zertifikat bereit, oder deaktiviere sichere Verbindungen.", + "HttpsRequiresCert": "Um HTTPS für externe Verbindungen zu aktivieren, benötigst du ein vertrauenswürdiges SSL-Zertifikat, z.B. von Let's Encrypt. Bitte stelle entweder ein Zertifikat bereit, oder deaktiviere sichere Verbindungen.", "Identify": "Identifizieren", "Images": "Bilder", "ImportFavoriteChannelsHelp": "Nur auf dem Tuner favorisierte Kanäle werden importiert.", @@ -427,14 +427,14 @@ "LabelChannels": "Kanäle", "LabelCollection": "Sammlung", "LabelCommunityRating": "Community Bewertung", - "LabelContentType": "Typ des Inhalts", + "LabelContentType": "Inhaltstyp", "LabelCountry": "Land/Region", "LabelCriticRating": "Kritikerbewertung", "LabelCurrentPassword": "Aktuelles Passwort", "LabelCustomCertificatePath": "Benutzerdefinierter Pfad zum SSL-Zertifikat", "LabelCustomCertificatePathHelp": "Pfad zu einer PKCS-#12-Datei, die ein Zertifikat und einen privaten Schlüssel enthält, um TLS-Unterstützung für eine eigene Domain zu aktivieren.", "LabelCustomCss": "Benutzerdefinierter CSS-Code", - "LabelCustomCssHelp": "Wende deinen eigenen, benutzerdefinierten CSS-Code für Theming/Branding auf die Weboberfläche an.", + "LabelCustomCssHelp": "Wende deinen benutzerdefinierten CSS-Code für Theming/Branding auf die Weboberfläche an.", "LabelCustomDeviceDisplayNameHelp": "Lege einen individuellen Anzeigenamen fest oder lasse das Feld leer, um den vom Gerät übermittelten Namen zu nutzen.", "LabelCustomRating": "Eigene Bewertung", "LabelDashboardTheme": "Server-Dashboard-Theme", @@ -452,7 +452,7 @@ "LabelDiscNumber": "Disknummer", "LabelDisplayLanguage": "Anzeigesprache", "LabelDisplayLanguageHelp": "Die Übersetzung von Jellyfin ist ein laufendes Projekt.", - "LabelDisplayMode": "Bildschirmmodus", + "LabelDisplayMode": "Anzeigemodus", "LabelDisplayName": "Anzeigename", "LabelDisplayOrder": "Anzeigereihenfolge", "LabelDisplaySpecialsWithinSeasons": "Specials in den Staffeln anzeigen, in den sie ausgestrahlt wurden", @@ -1283,7 +1283,7 @@ "SaveChanges": "Änderungen speichern", "LabelRequireHttpsHelp": "Wenn dies ausgewählt ist, leitet der Server alle Anfragen über HTTP an HTTPS weiter. Dies hat keinen Effekt, falls der Server nicht auf HTTPS hört.", "LabelRequireHttps": "HTTPS erforderlich", - "LabelEnableHttpsHelp": "Beobachtet den konfigurierten HTTPS-Port. Damit dies geschehen kann, muss ein gültiges Zertifikat bereitgestellt werden.", + "LabelEnableHttpsHelp": "Hören auf dem konfigurierten HTTPS-Port. Damit dies geschehen kann, muss ein gültiges Zertifikat bereitgestellt werden.", "LabelEnableHttps": "HTTPS aktivieren", "HeaderServerAddressSettings": "Server-Adresseinstellungen", "HeaderRemoteAccessSettings": "Fernzugriffs-Einstellungen", @@ -1697,14 +1697,14 @@ "SaveRecordingImages": "EPG-Bilder der Aufnahme speichern", "SaveRecordingImagesHelp": "Speichere Bilder von EPG-Anbietern zusammen mit den Medien.", "SecondarySubtitles": "Sekundäre Untertitel", - "HeaderDummyChapter": "Kapitel Bilder", + "HeaderDummyChapter": "Kapitelbilder", "HeaderRecordingMetadataSaving": "Aufzeichnung von Metadaten", "LabelDummyChapterDuration": "Intervall", "LabelDummyChapterDurationHelp": "Das Intervall zwischen Dummy-Kapiteln. Auf 0 setzen, um die Erzeugung von Dummy-Kapiteln zu deaktivieren. Eine Änderung dieses Wertes hat keine Auswirkung auf bestehende Dummy-Kapitel.", "LabelDummyChapterCount": "Limit", "LabelDummyChapterCountHelp": "Die maximale Anzahl von Kapitelbildern, die für jede Mediendatei extrahiert werden.", "LabelChapterImageResolution": "Auflösung", - "LabelChapterImageResolutionHelp": "Die Auflösung der extrahierten Kapitelbilder.", + "LabelChapterImageResolutionHelp": "Die Auflösung der extrahierten Kapitelbilder. Eine Änderung hat keine Auswirkung auf existierende Dummy-Kapitel.", "SubtitleBlack": "Schwarz", "SubtitleBlue": "Blau", "SubtitleCyan": "Cyan", @@ -1809,7 +1809,7 @@ "DeleteEntireSeries": "Lösche {0} Folgen", "DeleteSeries": "Lösche Serien", "DeleteEpisode": "Lösche Folge", - "HeaderDeleteSeries": "Lösche Serien", + "HeaderDeleteSeries": "Serien löschen", "LabelAllowContentWithTags": "Erlaube Einträge mit Tags", "Lyric": "Songtext", "LimitSupportedVideoResolution": "Limitiert die maximale Videoauflösung", @@ -1866,7 +1866,7 @@ "DeleteLyrics": "Songtexte löschen", "ErrorDeletingLyrics": "Es trat ein Fehler beim Löschen der Songtexte vom Server auf. Bitte stelle sicher, dass Jellyfin die notwendigen Zugriffsrechte besitzt.", "HeaderDeleteLyrics": "Songtexte löschen", - "HeaderNoLyrics": "Keine Songtexte gefunden", + "HeaderNoLyrics": "Keine Liedtexte gefunden", "ViewLyrics": "Songtexte ansehen", "Author": "Autor", "CoverArtist": "Cover-Künstler", @@ -1877,7 +1877,7 @@ "EnableDtsHelp": "Aktiviere diese Funktion nur, wenn dein Gerät DTS unterstützt oder an einen kompatiblen Audioreceiver angeschlossen ist. Andernfalls kann es zu Wiedergabefehlern kommen.", "EnableTrueHd": "TrueHD aktivieren", "Illustrator": "Illustrator", - "HeaderLyricDownloads": "Lyrik Downloads", + "HeaderLyricDownloads": "Liedtexte Downloads", "LabelSelectPreferredTranscodeVideoAudioCodec": "Bevorzugter Transcode-Audiocodec bei der Videowiedergabe", "Translator": "Übersetzer", "LibraryScanFanoutConcurrency": "Limit der Parallelen Aufgaben für das Scanen der Bibliotheken", @@ -1917,8 +1917,8 @@ "SearchForLyrics": "Songtext suchen", "EditLyrics": "Songtext bearbeiten", "HeaderAddLyrics": "Songtext hinzufügen", - "HeaderPreviewLyrics": "Songtextvorschau anzeigen", - "HeaderUploadLyrics": "Songtext hochladen", + "HeaderPreviewLyrics": "Liedtextvorschau anzeigen", + "HeaderUploadLyrics": "Liedtext hochladen", "LabelDuration": "Dauer", "LabelIsSynced": "Ist synchronisiert", "NoLyricsSearchResultsFound": "Kein Songtext gefunden.", @@ -1927,7 +1927,7 @@ "LabelTrickplayKeyFrameOnlyExtraction": "Nur Bilder von Schlüsselbildern erzeugen", "MoveToBottom": "Nach unten bewegen", "MoveToTop": "Nach oben bewegen", - "LabelDropLyricsHere": "Text hier ablegen, oder klicke zum Durchsuchen.", + "LabelDropLyricsHere": "Text hier ablegen, oder klicken zum Durchsuchen.", "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extrahiert nur Schlüsselbilder für eine deutlich schnellere Verarbeitung mit weniger genauem Timing. Wenn der konfigurierte Hardware-Decoder diesen Modus nicht unterstützt, wird stattdessen der Software-Decoder verwendet.", "Reset": "Zurücksetzen", "LibraryInvalidItemIdError": "Die Bibliothek ist in einem ungültigen Zustand und kann nicht verändert werden. Dies ist möglicherweise ein Bug: Der Pfad in der Datenbank ist nicht der richtige Pfad im Dateisystem.", @@ -1939,8 +1939,8 @@ "AlwaysRemuxMp3AudioFilesHelp": "Wenn du Dateien hast, bei welchen dein Browser ungenaue Zeitstempel berechnet, aktiviere diese Behelfslösung.", "DisableVbrAudioEncodingHelp": "Verhindern, dass der Server Audio mit VBR für diesen Client kodiert.", "HeaderAudioAdvanced": "Erweiterter Ton", - "LabelAlwaysRemuxFlacAudioFiles": "FLAC-Audiodateien immer wieder neu mischen", - "LabelAlwaysRemuxMp3AudioFiles": "MP3-Audiodateien immer wieder neu mischen", + "LabelAlwaysRemuxFlacAudioFiles": "FLAC-Audiodateien immer remuxen", + "LabelAlwaysRemuxMp3AudioFiles": "MP3-Audiodateien immer remuxen", "LabelAllowFmp4TranscodingContainer": "fMP4-Transkodierungscontainer zulassen", "FallbackMaxStreamingBitrateHelp": "Die maximale Streaming-Bitrate wird als Fallback verwendet, wenn ffprobe die Bitrate des Quellstreams nicht ermitteln kann. Dadurch wird verhindert, dass Clients eine zu hohe Transcodierungs-Bitrate anfordern, was zu einem Ausfall des Players und einer Überlastung des Encoders führen könnte.", "AllowFmp4TranscodingContainerHelp": "Erlauben Sie den fMP4-Transcodierungscontainer für diesen Tuner, um HEVC- und HDR-Inhalte zu aktivieren. Nicht alle Tuner sind mit diesem Container kompatibel. Deaktiviere dies, wenn bei der Wiedergabe Probleme auftreten.", From af2a3db846e9689dd25eb745994ddcac3ce27377 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Apr 2025 05:12:08 +0000 Subject: [PATCH 054/645] Update dependency @jellyfin/sdk to v0.0.0-unstable.202504210502 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 286e2fe12..71c10d3ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202504190501", + "@jellyfin/sdk": "0.0.0-unstable.202504210502", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.11", "@mui/material": "6.4.11", @@ -4091,9 +4091,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202504190501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504190501.tgz", - "integrity": "sha512-vDwxT1j026jNtQ0sZ+YbSR3CJOl2/EfiZVIsmvtANcK/6xa9ludmm9l92lov/DNB5T5zjH2jUIhLniWZ6XD7Nw==", + "version": "0.0.0-unstable.202504210502", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504210502.tgz", + "integrity": "sha512-CfJ7HXpfSZBToo8Vx1QW+mVodrnRnBQ1ssXTcS6EI0ZXp+xLhHoKkB4K0KgkEkYjJ1EOn5mZ+ITifyoV15Ivzg==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -28585,9 +28585,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202504190501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504190501.tgz", - "integrity": "sha512-vDwxT1j026jNtQ0sZ+YbSR3CJOl2/EfiZVIsmvtANcK/6xa9ludmm9l92lov/DNB5T5zjH2jUIhLniWZ6XD7Nw==", + "version": "0.0.0-unstable.202504210502", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504210502.tgz", + "integrity": "sha512-CfJ7HXpfSZBToo8Vx1QW+mVodrnRnBQ1ssXTcS6EI0ZXp+xLhHoKkB4K0KgkEkYjJ1EOn5mZ+ITifyoV15Ivzg==", "requires": {} }, "@jellyfin/ux-web": { diff --git a/package.json b/package.json index 90a6b48a2..f3c82e9d6 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202504190501", + "@jellyfin/sdk": "0.0.0-unstable.202504210502", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.11", "@mui/material": "6.4.11", From c01efe7e2fcfffad254dbb217d389d871ad1d62c Mon Sep 17 00:00:00 2001 From: MrPlow Date: Mon, 21 Apr 2025 01:44:22 -0400 Subject: [PATCH 055/645] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 102 ++++++++++++++++++++++---------------------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/src/strings/de.json b/src/strings/de.json index 5eb5b3e12..aa1f540df 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -498,7 +498,7 @@ "LabelGroupMoviesIntoCollectionsHelp": "Filme in einer Sammlung werden bei der Anzeige von Filmlisten als ein gruppiertes Element angezeigt.", "LabelEncoderPreset": "Kodierungsvoreinstellung", "LabelHardwareAccelerationType": "Hardwarebeschleunigung", - "LabelHardwareAccelerationTypeHelp": "Hardwarebeschleunigung benötigt zusätzliche Einstellungen.", + "LabelHardwareAccelerationTypeHelp": "Hardwarebeschleunigung erfordert zusätzliche Konfiguration.", "LabelHomeNetworkQuality": "Qualität des Heimnetzwerk", "LabelHomeScreenSectionValue": "Startseitenbereich {0}", "LabelHttpsPort": "Lokale HTTPS-Portnummer", @@ -516,8 +516,8 @@ "LabelKidsCategories": "Kinderkategorien", "LabelKodiMetadataDateFormat": "Format des Veröffentlichungsdatums", "LabelKodiMetadataDateFormatHelp": "Alle Daten innerhalb von NFO-Dateien werden mit diesem Format verarbeitet.", - "LabelKodiMetadataEnableExtraThumbs": "Kopiere Extra-Fanart- nach Extra-Vorschau-Feld", - "LabelKodiMetadataEnableExtraThumbsHelp": "Beim Downloaden von Bildern können diese sowohl als Extrafanart als auch als Extrathumb gespeichert werden, um maximale Kompatibilität mit Kodi zu erzielen.", + "LabelKodiMetadataEnableExtraThumbs": "Kopiere extrafanart nach extrathumbs Feld", + "LabelKodiMetadataEnableExtraThumbsHelp": "Beim Downloaden von Bildern können diese sowohl als extrafanart als auch als extrathumb gespeichert werden, um maximale Kompatibilität mit Kodi zu erzielen.", "LabelKodiMetadataEnablePathSubstitution": "Pfadersetzung aktivieren", "LabelKodiMetadataEnablePathSubstitutionHelp": "Aktiviert die Pfadersetzung für Bildpfade. Es werden die Einstellungen des Servers zur Pfadersetzung verwendet.", "LabelKodiMetadataSaveImagePaths": "Bildpfade in NFO-Dateien speichern", @@ -539,7 +539,7 @@ "LabelMaxChromecastBitrate": "Google Cast Streaming-Qualität", "LabelMaxParentalRating": "Maximal erlaubte Altersfreigabe", "LabelMaxResumePercentage": "Maximale Prozent für Wiederaufnahme", - "LabelMaxResumePercentageHelp": "Titel werden als vollständig gesehen markiert, wenn sie nach dieser Zeit gestoppt werden.", + "LabelMaxResumePercentageHelp": "Titel gelten als vollständig abgespielt, wenn sie nach dieser Zeit gestoppt werden.", "LabelMaxScreenshotsPerItem": "Maximale Anzahl von Screenshots pro Element:", "LabelMaxStreamingBitrate": "Maximale Streaming-Qualität", "LabelMaxStreamingBitrateHelp": "Wähle die maximale Bitrate während des Streamens.", @@ -612,10 +612,10 @@ "LabelPublicHttpPortHelp": "Die öffentliche Portnummer sollte einem lokalen HTTP-Port zugewiesen werden.", "LabelPublicHttpsPort": "Öffentliche HTTPS-Portnummer", "LabelPublicHttpsPortHelp": "Die öffentliche Portnummer sollte einem lokalen HTTPS-Port zugewiesen werden.", - "LabelReasonForTranscoding": "Grund für die Transkodierung", + "LabelReasonForTranscoding": "Grund für Transkodierung", "LabelRecord": "Aufnahme", "LabelRecordingPath": "Standardaufnahmepfad", - "LabelRecordingPathHelp": "Legt das Verzeichnis für Aufnahmen fest. Wird es leer gelassen, wird das Daten-Verzeichnis des Servers verwendet.", + "LabelRecordingPathHelp": "Gebe das Verzeichnis zum Speichern von Aufnahmen an. Wird es leer gelassen, wird das Datenverzeichnis des Servers verwendet.", "LabelRefreshMode": "Aktualisierungsmodus", "LabelReleaseDate": "Veröffentlichungsdatum", "LabelRemoteClientBitrateLimit": "Bitratenlimit für Internet-Streaming (Mbit/s)", @@ -641,12 +641,12 @@ "LabelSkipIfAudioTrackPresent": "Überspringen, falls der Ton bereits der herunterladbaren Sprache entspricht", "LabelSkipIfAudioTrackPresentHelp": "Entferne den Haken, um sicherzustellen das alle Videos Untertitel haben, unabhängig von der Audiosprache.", "LabelSkipIfGraphicalSubsPresent": "Überspringen, falls das Video bereits eingebettete Untertitel enthält", - "LabelSkipIfGraphicalSubsPresentHelp": "Das Vorhalten von textbasierten Untertiteln führt zu einer effizienteren Anzeige und verringert die Wahrscheinlichkeit einer Videotranskodierung.", + "LabelSkipIfGraphicalSubsPresentHelp": "Das Vorhalten von textbasierten Untertiteln führt zu einer effizienteren Auslieferung und verringert die Wahrscheinlichkeit einer Videotranskodierung.", "LabelSonyAggregationFlags": "Sony Aggregation Flags", "LabelSonyAggregationFlagsHelp": "Legt den Inhalt des 'aggregationFlags'-Elements im 'urn:schemas-sonycom:av' Namensraum fest.", "LabelSortBy": "Sortiert nach", "LabelSortOrder": "Sortierreihenfolge", - "LabelSortTitle": "Sortiertitel", + "LabelSortTitle": "Sortieren nach Titel", "LabelSource": "Quelle", "LabelSpecialSeasonsDisplayName": "Anzeigename für Serien-Specials", "LabelSportsCategories": "Sportkategorie", @@ -694,10 +694,10 @@ "LabelZipCode": "PLZ", "LabelffmpegPath": "FFmpeg-Verzeichnis", "LabelffmpegPathHelp": "Verzeichnis zur FFmpeg-Applikationsdatei oder zum Ordner, der FFmpeg enthält.", - "LanNetworksHelp": "Komma separierte Liste von IP-Adressen oder IP/Netzmasken die als lokale Netzwerke behandelt werden sollen, um Bandbreitenlimitationen auszusetzen. Wenn gesetzt, werden alle anderen IP-Adressen als extern behandelt und unterliegen den Bandbreitenlimitationen für externe Verbindungen. Wenn leer, wird nur das Subnetz des Servers als lokales Netzwerk behandelt.", + "LanNetworksHelp": "Komma getrennte Liste von IP-Adressen oder IP/Netzmasken die als lokale Netzwerke behandelt werden sollen, um Bandbreitenbegrenzungen umzusetzen. Wenn gesetzt, werden alle anderen IP-Adressen als extern behandelt und unterliegen den Bandbreitenbegrenzungen für externe Verbindungen. Wenn leer, wird nur das Subnetz des Servers als lokales Netzwerk behandelt.", "Large": "Groß", "LatestFromLibrary": "Kürzlich hinzugefügt in {0}", - "LearnHowYouCanContribute": "Erfahre, wie du unterstützen kannst.", + "LearnHowYouCanContribute": "Erfahre, wie du dich beteiligen kannst.", "LibraryAccessHelp": "Wähle die Bibliotheken aus, die du mit diesem Benutzer teilen möchtest. Administratoren können den Metadaten-Manager verwenden, um alle Ordner zu bearbeiten.", "List": "Liste", "LiveBroadcasts": "Liveübertragungen", @@ -709,7 +709,7 @@ "MaxParentalRatingHelp": "Inhalte mit einer höheren Bewertung werden dem Benutzer nicht angezeigt.", "MediaInfoAnamorphic": "Anamorph", "MediaInfoAspectRatio": "Seitenverhältnis", - "MediaInfoBitDepth": "Bit-Tiefe", + "MediaInfoBitDepth": "Bittiefe", "MediaInfoChannels": "Kanäle", "MediaInfoDefault": "Standard", "MediaInfoExternal": "Extern", @@ -728,20 +728,20 @@ "MediaIsBeingConverted": "Das Medium wird in ein Format konvertiert, das mit dem Abspielgerät kompatibel ist.", "Menu": "Menü", "MessageAlreadyInstalled": "Diese Version ist bereits installiert.", - "MessageAreYouSureDeleteSubtitles": "Bist du dir sicher, dass du diese Untertitel-Datei löschen willst?", - "MessageAreYouSureYouWishToRemoveMediaFolder": "Bist du dir sicher dieses Medienverzeichnis entfernen zu wollen?", - "MessageConfirmDeleteGuideProvider": "Bist du dir sicher, dass du diesen Programm-Anbieter löschen willst?", - "MessageConfirmDeleteTunerDevice": "Bist du dir sicher, dass du dieses Gerät löschen willst?", + "MessageAreYouSureDeleteSubtitles": "Bist du sicher, dass du diese Untertitel-Datei löschen willst?", + "MessageAreYouSureYouWishToRemoveMediaFolder": "Bist du sicher, dass du dieses Medienverzeichnis entfernen möchtest?", + "MessageConfirmDeleteGuideProvider": "Bist du sicher, dass du diesen Programm-Anbieter löschen willst?", + "MessageConfirmDeleteTunerDevice": "Bist du sicher, dass du dieses Gerät löschen willst?", "MessageConfirmProfileDeletion": "Bist du dir sicher, dass du dieses Profil löschen willst?", "MessageConfirmRecordingCancellation": "Aufnahme abbrechen?", - "MessageConfirmRemoveMediaLocation": "Bist du dir sicher, dass du diese Medienquelle entfernen willst?", + "MessageConfirmRemoveMediaLocation": "Bist du sicher, dass du diese Medienquelle entfernen willst?", "MessageConfirmRestart": "Willst du Jellyfin wirklich neu starten?", - "MessageConfirmRevokeApiKey": "Bist du dir sicher, dass du diesen API-Schlüssel löschen willst? Die Verbindung der Anwendung zu diesem Server wird sofort unterbrochen werden.", + "MessageConfirmRevokeApiKey": "Bist du sicher, dass du diesen API-Schlüssel löschen willst? Die Verbindung der Anwendung zu diesem Server wird sofort unterbrochen werden.", "MessageConfirmShutdown": "Willst du den Server wirklich herunterfahren?", "MessageContactAdminToResetPassword": "Bitte kontaktiere deinen Systemadministrator, um dein Passwort zurücksetzen zu lassen.", "MessageCreateAccountAt": "Erstelle ein Konto bei {0}", - "MessageDeleteTaskTrigger": "Bist du dir sicher, dass du diesen Aufgabenauslöser entfernen möchtest?", - "MessageDirectoryPickerBSDInstruction": "Für BSD musst du ggf. Speicherplatz in deinem 'FreeNAS Jail' so konfigurieren, dass Jellyfin auf deine Medien zugreifen kann.", + "MessageDeleteTaskTrigger": "Bist du sicher, dass du diesen Aufgabenauslöser entfernen möchtest?", + "MessageDirectoryPickerBSDInstruction": "Für BSD musst du ggf. Speicherplatz in deinem 'FreeNAS Jail' so konfigurieren, damit Jellyfin auf deine Medien zugreifen kann.", "MessageDirectoryPickerLinuxInstruction": "Für Linux auf Arch Linux, CentOS, Debian, Fedora, openSUSE oder Ubuntu muss der Servicebenutzer mindestens lesenden Zugriff auf die Speicherorte der Medien besitzen.", "MessageDownloadQueued": "Download eingereiht.", "MessageEnablingOptionLongerScans": "Die Aktivierung dieser Option kann erheblich längere Bibliotheks-Scans verursachen.", @@ -763,7 +763,7 @@ "MessagePleaseEnsureInternetMetadata": "Bitte sicherstellen, dass das Herunterladen von Metadaten aus dem Internet aktiviert ist.", "MessagePleaseWait": "Bitte warten, dies kann eine Minute dauern.", "MessagePluginConfigurationRequiresLocalAccess": "Melde dich bitte direkt an deinem lokalen Server an, um dieses Plugin einzurichten.", - "MessagePluginInstallDisclaimer": "WARNUNG: Mit dem Installieren eines Drittanbieterplugins entstehen Risiken. Es könnte nicht stabilen oder bösartigen Code enthalten und kann jederzeit von seinem Entwickler verändert werden. Installiere daher nur Plugins von Entwicklern, denen du vertraust. Sei dir den möglichen Auswirkungen bewusst, die eine Installation haben kann, einschließlich Anfragen an externe Dienste, verlängerte Bibliotheksscans oder zusätzliche Hintergrundverarbeitungen.", + "MessagePluginInstallDisclaimer": "WARNUNG: Das Installieren eines Drittanbieterplugins birgt Risiken. Es könnte instabilen oder bösartigen Code enthalten und kann jederzeit verändert werden. Installiere daher nur Plugins von Entwicklern, denen du vertraust. Sei dir den möglichen Auswirkungen bewusst, die eine Installation haben kann, einschließlich Anfragen an externe Dienste, verlängerte Scans von Bibliotheken oder zusätzliche Hintergrundverarbeitungen.", "MessageReenableUser": "Siehe unten zur Reaktivierung", "MessageTheFollowingLocationWillBeRemovedFromLibrary": "Die folgenden Medienverzeichnisse werden aus der Bibliothek entfernt", "MessageUnableToConnectToServer": "Wir können gerade keine Verbindung zum gewählten Server herstellen. Bitte stelle sicher, dass dieser läuft und versuche es erneut.", @@ -786,8 +786,8 @@ "MySubtitles": "Meine Untertitel", "Never": "Niemals", "NewCollection": "Neue Sammlung", - "NewCollectionHelp": "Sammlungen ermöglichen personallisierte Gruppen von Filmen oder anderen Medien.", - "NewCollectionNameExample": "Beispiel: Star Wars Collection", + "NewCollectionHelp": "Sammlungen ermöglichen personalisierte Gruppen von Filmen oder anderen Medien.", + "NewCollectionNameExample": "Beispiel: Star Wars Sammlung", "NewEpisodes": "Neue Episoden", "NewEpisodesOnly": "Nur neue Episoden", "News": "Nachrichten", @@ -809,10 +809,10 @@ "OptionAdminUsers": "Administratoren", "OptionAllUsers": "Alle Benutzer", "OptionAllowAudioPlaybackTranscoding": "Audio-Wiedergabe, die Transkodierung benötigt, zulassen", - "OptionAllowBrowsingLiveTv": "Live TV Zugriff zulassen", + "OptionAllowBrowsingLiveTv": "Live-TV Zugriff zulassen", "OptionAllowContentDownloading": "Erlaube Mediendownload und Synchronisation", "OptionAllowLinkSharing": "Teilen in sozialen Netzwerken zulassen", - "OptionAllowLinkSharingHelp": "Es werden nur Webseiten mit Medieninformationen geteilt. Mediendateien werden niemals öffentlich geteilt. Die geteilten Inhalte sind nur begrenzt zugänglich und werden nach {0} Tagen ungültig.", + "OptionAllowLinkSharingHelp": "Es werden nur Webseiten mit Medieninformationen geteilt. Mediendateien werden niemals öffentlich geteilt. Geteilte Inhalte sind zeitlich begrenzt und laufen nach {0} Tagen ab.", "OptionAllowManageLiveTv": "Live-TV Aufnahmeplanung zulassen", "OptionAllowMediaPlayback": "Medienwiedergabe zulassen", "OptionAllowMediaPlaybackTranscodingHelp": "Das Einschränken der Transkodierung kann bei nicht unterstützten Medienformaten Abspielfehler in Clients hervorrufen.", @@ -825,7 +825,7 @@ "OptionAllowVideoPlaybackTranscoding": "Video-Wiedergabe, die Transkodierung benötigt, zulassen", "OptionAutomaticallyGroupSeries": "Automatisches Zusammenführen von Serieninhalten, die über mehrere Ordner verteilt sind", "OptionAutomaticallyGroupSeriesHelp": "Inhalte einer Serie in verschiedenen Ordnern werden innerhalb einer Bibliothek als eine Serie angezeigt.", - "OptionCommunityRating": "Community Bewertung", + "OptionCommunityRating": "Community-Bewertung", "OptionCriticRating": "Kritikerbewertung", "OptionCustomUsers": "Benutzerdefiniert", "OptionDaily": "Täglich", @@ -846,7 +846,7 @@ "OptionEnableAccessToAllChannels": "Zugriff auf alle Kanäle zulassen", "OptionEnableAccessToAllLibraries": "Zugriff auf alle Bibliotheken zulassen", "OptionEnableExternalContentInSuggestions": "Externe Inhalte in Empfehlungen aktivieren", - "OptionEnableExternalContentInSuggestionsHelp": "Erlaube Internet Trailer und Live TV Sendungen in Empfehlungen.", + "OptionEnableExternalContentInSuggestionsHelp": "Erlaube Internet Trailer und Live-TV Sendungen in Empfehlungen.", "OptionEnableForAllTuners": "Für alle Tuner aktivieren", "OptionEnableM2tsMode": "M2TS Modus aktivieren", "OptionEnableM2tsModeHelp": "Aktiviere M2TS-Modus beim Kodieren in MPEG-TS.", @@ -873,11 +873,11 @@ "OptionPlainVideoItems": "Alle Videos als reine Videodateien anzeigen", "OptionPlainVideoItemsHelp": "Alle Videos werden in DIDL als \"object.item.videoItem\" angezeigt, anstatt eines spezifischen Typs wie beispielsweise \"object.item.videoItem.movie\".", "OptionPlayCount": "Wiedergabezähler", - "OptionPremiereDate": "Premiere", + "OptionPremiereDate": "Premierendatum", "OptionReleaseDate": "Veröffentlichungsdatum", "OptionReportByteRangeSeekingWhenTranscoding": "Melde, dass der Server bei der Transkodierung Bytesuche unterstützt", "OptionReportByteRangeSeekingWhenTranscodingHelp": "Dies wird für manche Abspielgeräte benötigt, auf denen die Zeitsuche nicht gut funktioniert.", - "OptionRequirePerfectSubtitleMatch": "Nur Untertitel mit einem perfekten Ergebnis zu meinen Videos herunterladen", + "OptionRequirePerfectSubtitleMatch": "Nur Untertitel herunterladen, die perfekt zu den Videodateien passen", "OptionRequirePerfectSubtitleMatchHelp": "Perfektes Ergebnis wählt beim Filtern nur Untertitel, welche getestet und für deine exakte Videodatei verifiziert wurden. Die Abwahl dieser Option erhöht die Chance, dass Untertitel heruntergeladen werden, die Möglichkeit falscher Untertitel oder dass Text an falschen Positionen angezeigt wird ist aber ebenfalls größer.", "OptionResElement": "'res'-Element", "OptionResumable": "Fortsetzbar", @@ -885,7 +885,7 @@ "OptionSaveMetadataAsHiddenHelp": "Diese Änderung betrifft nur neu gespeicherte Metadaten. Schon gespeicherte Metadaten werden erst aktualisiert, wenn der Server diese erneut speichert.", "OptionTvdbRating": "TheTVDB-Bewertung", "OptionUnairedEpisode": "Nicht ausgestrahlte Episoden", - "OptionWakeFromSleep": "Aufwachen nach dem Schlafen", + "OptionWakeFromSleep": "Aufwachen vom Schlafen", "OptionWeekdays": "An Wochentagen", "OptionWeekends": "An Wochenenden", "OptionWeekly": "Wöchentlich", @@ -941,7 +941,7 @@ "Record": "Aufnehmen", "RecordSeries": "Serie aufnehmen", "RecordingCancelled": "Aufnahme abgebrochen.", - "MessageChangeRecordingPath": "Das Ändern des Aufnahmeverzeichnisses wird alte Aufnahmen nicht automatisch verschieben. Wenn du das möchtest, musst du es selbst tun.", + "MessageChangeRecordingPath": "Das Ändern des Aufnahmeverzeichnisses wird vorhandene Aufnahmen nicht automatisch verschieben. Wenn gewünscht, musst du sie selbst verschieben.", "RecordingScheduled": "Aufnahme geplant.", "Recordings": "Aufnahmen", "Refresh": "Aktualisieren", @@ -1228,7 +1228,7 @@ "SubtitleOffset": "Untertitelzeitversatz", "PlaybackData": "Wiedergabeinformationen", "MusicVideo": "Musikvideo", - "MusicLibraryHelp": "Überprüfe den {0}Musikbenennungsguide{1}.", + "MusicLibraryHelp": "Überprüfe den {0}Musikbenennungsleitfaden{1}.", "OptionRandom": "Zufällig", "TabNetworking": "Netzwerk", "ButtonSplit": "Teilen", @@ -1240,14 +1240,14 @@ "LabelPlayerDimensions": "Playerabmessungen", "LabelDroppedFrames": "Ausgelassene Frames", "LabelCorruptedFrames": "Fehlerhafte Frames", - "OptionForceRemoteSourceTranscoding": "Transkodieren von externen Medienquellen erzwingen (z.B. LiveTV)", + "OptionForceRemoteSourceTranscoding": "Transkodieren von externen Medienquellen erzwingen (z.B. Live-TV)", "AskAdminToCreateLibrary": "Bitte einen Administrator, eine Bibliothek zu erstellen.", "NoCreatedLibraries": "Sieht so aus als hättest du bis jetzt keine Bibliothek erstellt. {0}Möchtest du jetzt eine Bibliothek erstellen?{1}", "AllowFfmpegThrottling": "Transkodierung drosseln", "PlaybackErrorNoCompatibleStream": "Dieser Client ist nicht mit den Medien kompatibel und der Server sendet kein kompatibles Medienformat.", "AllowFfmpegThrottlingHelp": "Wenn eine Transkodierung oder ein Remux weit genug über die aktuelle Abspielposition fortgeschritten ist, pausiere sie, sodass weniger Ressourcen verbraucht werden. Dies ist am nützlichsten, wenn wenig übersprungen wird. Bei Wiedergabeproblemen sollte diese Option deaktiviert werden.", "ClientSettings": "Client-Einstellungen", - "OnApplicationStartup": "Beim Starten der Applikation", + "OnApplicationStartup": "Beim Start der Anwendung", "EveryXHours": "Alle {0} Stunden", "EveryHour": "Stündlich", "EveryXMinutes": "Alle {0} Minuten", @@ -1492,11 +1492,11 @@ "MessageSyncPlayIsDisabled": "Berechtigung erforderlich für die Nutzung von SyncPlay.", "LabelSyncPlayTimeSyncOffset": "Zeitversatz", "LabelSyncPlayTimeSyncDevice": "Zeitsynchronisierung mit", - "LabelSyncPlayResumePlaybackDescription": "Lokale Wiedergabe wiederherstellen", + "LabelSyncPlayResumePlaybackDescription": "Gruppen-Wiedergabe wieder beitreten", "LabelSyncPlayResumePlayback": "Lokale Wiedergabe fortsetzen", "LabelSyncPlayHaltPlaybackDescription": "Und ignoriere aktuelle Änderungen der Wiedergabeliste", "LabelSyncPlayHaltPlayback": "Lokale Wiedergabe stoppen", - "LabelMaxAudiobookResumeHelp": "Titel werden als vollständig abgespielt angenommen, wenn beim Stoppen die verbleibende Dauer kleiner als dieser Wert ist.", + "LabelMaxAudiobookResumeHelp": "Titel gelten als vollständig abgespielt, wenn sie gestoppt werden und die verbleibende Dauer geringer als dieser Wert ist.", "MessageChromecastConnectionError": "Dein Google-Cast-Empfänger kann sich nicht mit dem Jellyfin-Server verbinden. Bitte überprüfe die Verbindung und versuche es erneut.", "MessagePlaybackError": "Es gab einen Fehler während dem Abspielen dieser Datei auf deinem Google Cast-Empfänger.", "LabelMinAudiobookResumeHelp": "Titel gelten bis zu diesem Zeitpunkt als nicht abgespielt.", @@ -1718,7 +1718,7 @@ "Featurette": "Hinter den Kulissen", "Short": "Kurzfilm", "LabelParallelImageEncodingLimit": "Limit der parallelen Bildkodierung", - "LabelParallelImageEncodingLimitHelp": "Maximale Anzahl von Bildkodierungen, die parallel ausgeführt werden dürfen. Wenn Sie diesen Wert auf 0 lassen, wird ein Limit auf Grundlage der Kernanzahl Ihres Systems festgelegt.", + "LabelParallelImageEncodingLimitHelp": "Maximale Anzahl von Bildkodierungen, die parallel ausgeführt werden dürfen. Lässt Du diesen Wert leer, wird ein Limit auf Grundlage der Kernanzahl deines Systems festgelegt.", "HeaderPerformance": "Leistung", "LabelEnableAudioVbr": "Aktiviere Audiokodierung mit variabler Bitrate (VBR)", "LabelEnableAudioVbrHelp": "Eine variable Bitrate bietet bessere Qualität im Vergleich zu einer konstanten, kann jedoch in manchen Fällen zu Problemen beim Buffering und der Kompatibilität führen.", @@ -1730,7 +1730,7 @@ "UserMenu": "Benutzermenü", "Studio": "Studio", "AllowCollectionManagement": "Dieser Benutzer darf Sammlungen verwalten", - "PasswordRequiredForAdmin": "Für Admin Konten wird ein Passwort benötigt.", + "PasswordRequiredForAdmin": "Für Admin-Konten wird ein Passwort benötigt.", "LabelEnableLUFSScan": "LUFS-Scan aktivieren", "LabelSyncPlayNoGroups": "Keine Gruppen verfügbar", "LabelEnableLUFSScanHelp": "Clients können die Audio-Wiedergabe normalisieren, um die selbe Lautstärke für mehrere Stücke zu bekommen. Dies verlängert den Bibliotheks-Scan und benötigt mehr Ressourcen.", @@ -1804,18 +1804,18 @@ "BlockContentWithTagsHelp": "Medien mit mindestens einem der spezifizierten Tags verstecken.", "EnableLibrary": "Aktiviert die Bibliothek", "EnableLibraryHelp": "Mit dem deaktivieren der Bibliothek ist sie für keinen Benutzer mehr sichtbar.", - "PlaybackError.ASS_RENDER_ERROR": "Beim rendern der ASS/SSA Untertitel ist ein Fehler aufgetreten.", + "PlaybackError.ASS_RENDER_ERROR": "Beim Rendern der ASS/SSA-Untertitel ist ein Fehler aufgetreten.", "ConfirmDeleteSeries": "Das Löschen dieser Serie wird alle {0} Folgen aus dem Dateisystem und von deiner Medienbibliothek löschen. Bist du sicher das du fortfahren möchtest?", "DeleteEntireSeries": "Lösche {0} Folgen", "DeleteSeries": "Lösche Serien", "DeleteEpisode": "Lösche Folge", "HeaderDeleteSeries": "Serien löschen", "LabelAllowContentWithTags": "Erlaube Einträge mit Tags", - "Lyric": "Songtext", - "LimitSupportedVideoResolution": "Limitiert die maximale Videoauflösung", + "Lyric": "Liedtext", + "LimitSupportedVideoResolution": "Maximale unterstützte Videoauflösung limitieren", "LabelEncodingFormatOptions": "Codierungsformat-Optionen", "EncodingFormatHelp": "Wähl die Videokodierung, in die Jellyfin transcodieren soll. Jellyfin wird die Softwarecodierung verwenden, wenn die Hardwarebeschleunigung für das ausgewählte Format nicht verfügbar ist. Die H264-Codierung wird immer aktiviert sein.", - "LimitSupportedVideoResolutionHelp": "Benutze \"Maximal erlaubte Auflösung der Videotranskodierung\" als maximal unterstützte Videoauflösung.", + "LimitSupportedVideoResolutionHelp": "\"Maximal erlaubte Auflösung der Videotranskodierung\" als maximal unterstützte Videoauflösung verwenden.", "AllowMjpegEncoding": "Codierung im MJPEG-Format zulassen (wird bei der Trickplay-Erstellung verwendet)", "Trickplay": "Trickplay", "LabelTrickplayAccel": "Hardware-Dekoder aktivieren", @@ -1848,20 +1848,20 @@ "LabelExtractTrickplayDuringLibraryScan": "Extrahieren von Trickplay-Bildern beim Scannen der Bibliothek", "LabelExtractTrickplayDuringLibraryScanHelp": "Trickplay-Bilder erzeugen, wenn Videos während der Bibliothekssuche importiert werden. Andernfalls werden sie während der geplanten Aufgabe \"Trickplay-Bilder\" extrahiert. Wenn die Generierung auf nicht blockierend eingestellt ist, hat dies keinen Einfluss auf die Zeit, die eine Bibliotheksüberprüfung dauert.", "EnableSmoothScroll": "Flüssiges Scrollen aktivieren", - "PlaybackError.MEDIA_NOT_SUPPORTED": "Die Wiedergabe ist fehlgeschlagen, weil die Medien von diesem Client nicht unterstützt wird.", + "PlaybackError.MEDIA_NOT_SUPPORTED": "Die Wiedergabe ist fehlgeschlagen, weil die Medien von diesem Client nicht unterstützt werden.", "PlaybackError.FATAL_HLS_ERROR": "Im HLS-Stream ist ein schwerwiegender Fehler aufgetreten.", "PlaybackError.MEDIA_DECODE_ERROR": "Die Wiedergabe ist aufgrund eines Fehlers bei der Dekodierung der Medien fehlgeschlagen.", "PlaybackError.NETWORK_ERROR": "Die Wiedergabe ist aufgrund eines Netzwerkfehlers fehlgeschlagen.", "PlaybackError.NO_MEDIA_ERROR": "Es konnte keine gültige Medienquelle für die Wiedergabe gefunden werden.", "PlaybackError.SERVER_ERROR": "Die Wiedergabe ist aufgrund eines Serverfehlers fehlgeschlagen.", "PlaybackError.NotAllowed": "Die Wiedergabe dieser Medien ist nicht erlaubt.", - "PlaybackError.RateLimitExceeded": "Dieses Medium kann derzeit aufgrund von Beschränkungen nicht abgespielt werden.", + "PlaybackError.RateLimitExceeded": "Diese Medien können derzeit aufgrund von Beschränkungen nicht abgespielt werden.", "PlaybackError.PLAYER_ERROR": "Die Wiedergabe ist aufgrund eines schwerwiegenden Player-Fehlers fehlgeschlagen.", "NonBlockingScan": "Non Blocking - reiht Erstellung ein, kehrt dann zurück", "BlockingScan": "Blocking - reiht Erstellung ein, blockiert Scan bis fertig", "LabelTrickplayAccelEncoding": "Hardwarebeschleunigte MJPEG-Enkodierung aktivieren", "LabelTrickplayAccelEncodingHelp": "Derzeit nur auf QSV, VA-API, VideoToolbox und RKMPP verfügbar, diese Option hat keine Auswirkungen auf andere Methoden zur Hardwarebeschleunigung.", - "Lyrics": "Songtexte", + "Lyrics": "Liedtexte", "ConfirmDeleteLyrics": "Das Löschen dieses Songtextes löscht die Datei vom Laufwerk und aus deiner Medienbibliothek. Bist du wirklich sicher?", "DeleteLyrics": "Songtexte löschen", "ErrorDeletingLyrics": "Es trat ein Fehler beim Löschen der Songtexte vom Server auf. Bitte stelle sicher, dass Jellyfin die notwendigen Zugriffsrechte besitzt.", @@ -1921,7 +1921,7 @@ "HeaderUploadLyrics": "Liedtext hochladen", "LabelDuration": "Dauer", "LabelIsSynced": "Ist synchronisiert", - "NoLyricsSearchResultsFound": "Kein Songtext gefunden.", + "NoLyricsSearchResultsFound": "Kein Liedtext gefunden.", "PreviewLyrics": "Songtextvorschau anzeigen", "AllowTonemappingSoftwareHelp": "Tone-Mapping kann den Dynamikbereich eines Videos von HDR in SDR umwandeln und dabei Bilddetails und Farben beibehalten, die für die Darstellung der ursprünglichen Szene sehr wichtig sind. Funktioniert derzeit nur mit 10bit HDR10-,HLG- und DoVi-Videos.", "LabelTrickplayKeyFrameOnlyExtraction": "Nur Bilder von Schlüsselbildern erzeugen", @@ -1949,8 +1949,8 @@ "LabelAllowStreamSharing": "Stream-Sharing zulassen", "LabelFallbackMaxStreamingBitrate": "Maximale Fallback-Stream-Bitrate (Mbps)", "VideoCodecTagNotSupported": "Das Video-Codec-Tag wird nicht unterstützt", - "LabelLyricDownloaders": "Songtext-Downloader", - "LyricDownloadersHelp": "Aktivieren und ordnen Sie Ihre bevorzugten Songtext-Downloader nach der Priorität.", + "LabelLyricDownloaders": "Liedtext-Downloader", + "LyricDownloadersHelp": "Aktivieren und ordnen Sie Ihre bevorzugten Liedtext-Downloader nach der Priorität.", "ReplaceTrickplayImages": "Ersetzen vorhandener Trickplay-Bilder", "LabelSaveTrickplayLocally": "Trickplay-Bilder bei den Medien speichern", "LabelSaveTrickplayLocallyHelp": "Wenn Sie Trickplay-Bilder in Medienordnern speichern, werden sie bei Ihren Medien abgelegt und ermöglichen so eine einfache Migration und den Zugriff.", @@ -1976,8 +1976,8 @@ "HeaderMediaSegmentActions": "Medien-Segmentierungs-Aktionen", "HeaderNewPlaylist": "Neue Wiedergabeliste", "LabelMediaSegmentsType": "{0} Segmente", - "LabelQsvDevice": "QSV Gerät", - "LabelQsvDeviceHelp": "Wählt das Gerät für Intel QSV auf einem multi-GPU System aus. Unter Linux ist dies der Renderknoten, z.B. /dev/dri/renderD128. Unter Windows ist dies der Geräte-Index, beginnend bei 0. Leerlassen, außer du weißt was du tust.", + "LabelQsvDevice": "QSV-Gerät", + "LabelQsvDeviceHelp": "Wählt das Gerät für Intel QSV auf einem Multi-GPU System aus. Unter Linux ist dies der Renderknoten, z.B. /dev/dri/renderD128. Unter Windows ist dies der Geräte-Index, beginnend bei 0. Leerlassen, außer du weißt was du tust.", "MediaSegmentAction.None": "Keine", "MediaSegmentAction.Skip": "Überspringen", "MediaSegmentType.Commercial": "Werbung", @@ -2011,13 +2011,13 @@ "DisplayLoadError": "Ein Fehler trat während des Ladens der Konfigurationsdaten auf.", "MetadataImagesLoadError": "Einstellungen für Metadaten konnten nicht geladen werden", "HeaderPageNotFound": "Seite nicht gefunden", - "PageNotFound": "Dies ist nicht die Seite, die Sie suchen.", + "PageNotFound": "Dies ist nicht die Seite, die du suchst.", "SettingsPageLoadError": "Einstellungsseite konnte nicht geladen werden", "StreamCountExceedsLimit": "Die Anzahl der Streams überschreitet das Limit", "RetryWithGlobalSearch": "Erneuter Versuch mit einer globalen Suche", "CustomSplashScreenSize": "Benutzerdefinierte Bilder sollten das Seitenverhältnis 16x9 und eine Mindestgröße von 1920x1080 haben.", "DeleteCustomImage": "Benutzerdefiniertes Bild gelöscht", - "LabelGroupShowsIntoCollectionsHelp": "Serien in einer Sammlung werden als ein gruppiertes Element bei der Anzeige von Serienlisten dargestellt.", + "LabelGroupShowsIntoCollectionsHelp": "Serien in einer Sammlung werden bei der Anzeige von Serienlisten als ein gruppiertes Element dargestellt.", "ImageDeleteFailed": "Bild konnte nicht gelöscht werden", "LabelGroupShowsIntoCollections": "Serien in Kollektionen gruppieren", "UploadCustomImage": "Benutzerdefiniertes Bild hochladen", From b7190d28a042c9882279ed571d3bdfeb4d71d3d1 Mon Sep 17 00:00:00 2001 From: MrPlow Date: Mon, 21 Apr 2025 02:02:42 -0400 Subject: [PATCH 056/645] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 78 ++++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/src/strings/de.json b/src/strings/de.json index aa1f540df..0b9253dab 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -914,7 +914,7 @@ "PlayNextEpisodeAutomatically": "Nächste Episode automatisch abspielen", "Played": "Gespielt", "Playlists": "Wiedergabelisten", - "PleaseAddAtLeastOneFolder": "Bitte füge mindestens ein Verzeichnis zur Bibliothek durch Klicken der \"Hinzufügen\"-Schaltfläche hinzu.", + "PleaseAddAtLeastOneFolder": "Bitte füge der Bibliothek mindestens ein Verzeichnis durch Klicken der \"+\"-Schaltfläche im 'Ordner'-Bereich hinzu.", "PleaseConfirmPluginInstallation": "Bitte bestätige mit OK, dass du den oben stehenden Text gelesen hast und die Installation des Plugins fortführen möchtest.", "PleaseEnterNameOrId": "Bitte gib einen Namen oder eine externe ID an.", "PleaseRestartServerName": "Bitte Jellyfin auf {0} neustarten.", @@ -965,7 +965,7 @@ "Saturday": "Samstag", "Save": "Speichern", "SaveSubtitlesIntoMediaFolders": "Untertitel in den Medienverzeichnissen speichern", - "SaveSubtitlesIntoMediaFoldersHelp": "Das Speichern der Untertitel neben den Videodateien macht die Verwaltung deutlich leichter.", + "SaveSubtitlesIntoMediaFoldersHelp": "Das Speichern der Untertitel zusammen mit den Videodateien ermöglicht eine einfachere Verwaltung.", "ScanForNewAndUpdatedFiles": "Nach neuen und aktualisierten Dateien scannen", "ScanLibrary": "Bibliothek scannen", "Schedule": "Zeitplan", @@ -982,7 +982,7 @@ "SeriesRecordingScheduled": "Serienaufnahme geplant.", "SeriesSettings": "Serieneinstellungen", "SeriesYearToPresent": "{0}-Heute", - "ServerNameIsRestarting": "Jellyfin-Server auf {0} startet neu.", + "ServerNameIsRestarting": "Der Server auf {0} startet neu.", "ServerNameIsShuttingDown": "Der Server auf {0} fährt herunter.", "ServerRestartNeededAfterPluginInstall": "Jellyfin muss nach der Installation des Plugins neu gestartet werden.", "ServerUpdateNeeded": "Dieser Server muss aktualisiert werden. Um die neueste Version herunterzuladen, besuche bitte {0}", @@ -995,9 +995,9 @@ "ShowTitle": "Titel anzeigen", "ShowYear": "Jahr anzeigen", "Shows": "Serien", - "Shuffle": "Zufallswiedergabe", + "Shuffle": "Zufällig", "SimultaneousConnectionLimitHelp": "Die maximale Anzahl der parallel erlaubten Streams. 0 für kein Limit.", - "SkipEpisodesAlreadyInMyLibrary": "Nehme keine Episoden auf, die schon in meiner Bibliothek verfügbar sind", + "SkipEpisodesAlreadyInMyLibrary": "Keine Episoden aufnehmen, die schon in meiner Bibliothek sind", "SkipEpisodesAlreadyInMyLibraryHelp": "Wenn verfügbar, werden Episoden mittels Staffel- und Episodennummer verglichen.", "Small": "Klein", "SmallCaps": "Kapitälchen", @@ -1056,7 +1056,7 @@ "Unrated": "Nicht bewertet", "Up": "Hoch", "Upload": "Hochladen", - "UserAgentHelp": "Stelle einen benutzerdefinierten 'User-Agent' HTTP header zur Verfügung.", + "UserAgentHelp": "Stelle einen benutzerdefinierten 'User-Agent' HTTP-Header zur Verfügung.", "UserProfilesIntro": "Jellyfin bietet Unterstützung für Benutzerprofile mit eigenen Ansichtseinstellungen, Wiedergabepositionen und Altersfreigaben.", "ValueAlbumCount": "{0} Alben", "ValueConditions": "Bedingungen: {0}", @@ -1084,11 +1084,11 @@ "WizardCompleted": "Das ist jetzt erst mal alles. Jellyfin sammelt nun Informationen über deine Medienbibliothek. Schau dir doch ein paar unserer Apps an und klicke dann auf Fertig um das Dashboard anzuzeigen.", "Writer": "Drehbuch", "XmlDocumentAttributeListHelp": "Diese Attribute werden für das Stammelement jeder XML-Antwort angewendet.", - "XmlTvKidsCategoriesHelp": "Programme mit diesen Kategorien werden als Kinderprogramme angezeigt. Separiere mehrere mit '|'.", - "XmlTvMovieCategoriesHelp": "Programme mit diesen Kategorien werden als Filme angezeigt. Separiere mehrere mit '|'.", - "XmlTvNewsCategoriesHelp": "Programme mit diesen Kategorien werden als Nachrichtenprogramme angezeigt. Separiere mehrere mit '|'.", - "XmlTvPathHelp": "Ein Pfad zu einer XMLTV Datei. Jellyfin wird diese Datei periodisch auf Updates prüfen und lesen. Du bist für das Erstellen und updaten verantwortlich.", - "XmlTvSportsCategoriesHelp": "Programme mit diesen Kategorien werden als Sport Programme angezeigt. Separiere mehrere mit '|'.", + "XmlTvKidsCategoriesHelp": "Programme mit diesen Kategorien werden als Kinderprogramme angezeigt. Trenne mehrere mit '|'.", + "XmlTvMovieCategoriesHelp": "Programme mit diesen Kategorien werden als Filme angezeigt. Trenne mehrere mit '|'.", + "XmlTvNewsCategoriesHelp": "Programme mit diesen Kategorien werden als Nachrichtenprogramme angezeigt. Trenne mehrere mit '|'.", + "XmlTvPathHelp": "Ein Pfad zu einer XMLTV-Datei. Jellyfin wird diese Datei lesen und periodisch auf Updates prüfen. Du bist für das Erstellen und Updaten der Datei verantwortlich.", + "XmlTvSportsCategoriesHelp": "Programme mit diesen Kategorien werden als Sportprogramme angezeigt. Trenne mehrere mit '|'.", "Yes": "Ja", "Yesterday": "Gestern", "Alerts": "Warnhinweise", @@ -1171,7 +1171,7 @@ "ValueAudioCodec": "Audiocodec: {0}", "ValueCodec": "Codec: {0}", "ValueContainer": "Container: {0}", - "ValueDiscNumber": "Disk {0}", + "ValueDiscNumber": "Disc {0}", "ValueVideoCodec": "Videocodec: {0}", "LabelTag": "Tag", "LabelTagline": "Slogan", @@ -1225,7 +1225,7 @@ "MessageNoServersAvailable": "Die automatische Serversuche konnte keinen Server finden.", "LabelPlayer": "Player", "MediaInfoCodecTag": "Codec-Tag", - "SubtitleOffset": "Untertitelzeitversatz", + "SubtitleOffset": "Untertitel-Zeitversatz", "PlaybackData": "Wiedergabeinformationen", "MusicVideo": "Musikvideo", "MusicLibraryHelp": "Überprüfe den {0}Musikbenennungsleitfaden{1}.", @@ -1267,7 +1267,7 @@ "AlbumArtist": "Albumkünstler", "Album": "Album", "BoxSet": "Box Set", - "Yadif": "Noch ein Zeilenentflechtungs Filter", + "Yadif": "Noch ein Zeilenentflechtungsfilter (YADIF)", "LabelLibraryPageSizeHelp": "Setzt die Anzahl der auf einer Seite angezeigten Objekte. Auf 0 setzen, um alle Elemente auf einer Seite anzuzeigen.", "LabelLibraryPageSize": "Größe der Bibliotheksseiten", "DeinterlaceMethodHelp": "Wähle die Deinterlacing-Methode zum Transkodieren von Inhalten im Zeilensprungverfahren (Interlace). Sofern bei unterstützten Geräten Deinterlacing durch Hardwarebeschleunigung aktiviert ist, wird der Hardware-Deinterlacer anstelle dieser Einstellung verwendet.", @@ -1379,7 +1379,7 @@ "VideoAudio": "Videoton", "AllowTonemappingHelp": "Tone-Mapping kann den Dynamikumfang eines Videos von HDR nach SDR wandeln und dabei die für die Darstellung der Originalszene sehr wichtigen Bilddetails und Farben beibehalten. Dies funktioniert derzeit nur bei 10bit HDR10, HLG und DoVi-Videos. Erfordert die entsprechende GPGPU-Laufzeitumgebung.", "TonemappingRangeHelp": "Wähle den Ausgabefarbraum aus. Auto ist derselbe wie der Eingabefarbraum.", - "TonemappingAlgorithmHelp": "Das Tone-Mapping kann fein abgestimmt werden. Wenn du mit diesen Optionen nicht vertraut bist, behalte einfach den Standardwert bei. Der empfohlene Wert ist \"BT.2390\".", + "TonemappingAlgorithmHelp": "Tone-Mapping kann fein abgestimmt werden. Wenn du mit diesen Optionen nicht vertraut bist, behalte einfach den Standardwert. Der empfohlene Wert ist \"BT.2390\".", "LabelTonemappingAlgorithm": "Wähle den zu verwendenden Tone-Mapping-Algorithmus aus", "LabelKnownProxies": "Bekannte Proxys", "KnownProxiesHelp": "Kommagetrennte Liste von IP-Adressen oder Hostnamen bekannter Proxys, die bei der Verbindung mit dieser Jellyfin-Instanz verwendet werden. Dies ist erforderlich, um die X-Forwarded-For-Header korrekt verwenden zu können. Erfordert nach dem Speichern einen Neustart.", @@ -1408,7 +1408,7 @@ "QuickConnectDeactivated": "Quick Connect wurde deaktiviert, bevor der Login verifiziert werden konnte", "QuickConnectAuthorizeFail": "Unbekannter Quick Connect-Code", "QuickConnectAuthorizeSuccess": "Das Gerät wurde erfolgreich authentifiziert!", - "QuickConnectAuthorizeCode": "Login Code {0} eingeben", + "QuickConnectAuthorizeCode": "Code {0} zum Login eingeben", "QuickConnectActivationSuccessful": "Erfolgreich aktiviert", "EnableQuickConnect": "Quick Connect auf diesem Server aktivieren", "QuickConnect": "Quick Connect", @@ -1431,7 +1431,7 @@ "EnableFallbackFont": "Ausweichschriftarten aktivieren", "LabelFallbackFontPathHelp": "Diese Schriftarten werden von einigen Clients zur Darstellung von Untertiteln verwendet. Weitere Informationen hierzu finden Sie in der Dokumentation.", "LabelFallbackFontPath": "Verzeichnis für Ausweichschriftarten", - "HeaderSelectFallbackFontPathHelp": "Suche oder gib das Verzeichnis für Ausweichschriftarten zum Rendern von ASS/SSA Untertiteln an.", + "HeaderSelectFallbackFontPathHelp": "Suche oder gib das Verzeichnis für Ausweichschriftarten zum Rendern von ASS/SSA-Untertiteln an.", "HeaderSelectFallbackFontPath": "Verzeichnis für Ausweichschriftarten auswählen", "YoutubeDenied": "Angefordertes Video darf nicht in eingebetteten Playern abgespielt werden.", "YoutubeNotFound": "Video nicht gefunden.", @@ -1441,7 +1441,7 @@ "LabelSelectMono": "Mono", "LabelSelectAudioChannels": "Kanäle", "LabelAllowedAudioChannels": "Maximal erlaubte Audio-Kanäle", - "LabelPlaybackInfo": "Abspielinformationen", + "LabelPlaybackInfo": "Wiedergabe-Informationen", "LabelIsForced": "Erzwungen", "LabelH265Crf": "CRF für Kodierung in H.265", "LabelEnableIP6Help": "Aktiviert die IPv6-Funktionalität.", @@ -1471,11 +1471,11 @@ "AllowHevcEncoding": "Kodierung im HEVC-Format zulassen", "PreferFmp4HlsContainerHelp": "Bevorzugen Sie die Verwendung von fMP4 als Standardcontainer für HLS, um das direkte Streamen von HEVC- und AV1-Inhalten auf unterstützten Geräten zu ermöglichen.", "PreferFmp4HlsContainer": "Bevorzuge fMP4-HLS als Mediencontainer", - "LabelDirectStreamingInfo": "Direkte Streaming-Informationen", + "LabelDirectStreamingInfo": "Direct Streaming-Informationen", "LabelTranscodingInfo": "Transkodierungsinfo", "LabelVideoInfo": "Videoinformationen", "LabelAudioInfo": "Audioinformationen", - "RemuxHelp2": "Remux verbraucht sehr wenig Rechenleistung bei einer völlig verlustfreien Medienqualität.", + "RemuxHelp2": "Remuxen verbraucht sehr wenig Rechenleistung bei einer völlig verlustfreien Medienqualität.", "RemuxHelp1": "Das Medium befindet sich in einem inkompatiblen Dateicontainer (MKV, AVI, WMV, usw.), aber sowohl Video- als auch der Audiostream sind mit dem Gerät kompatibel. Die Medien werden verlustfrei im laufenden Betrieb neu verpackt, bevor sie an das Gerät gesendet werden.", "PluginFromRepo": "{0} aus dem Repository {1}", "LabelUDPPortRangeHelp": "Beschränkt Jellyfin auf die Verwendung dieses Portbereichs beim Herstellen von UDP-Verbindungen. (Standard ist 1024 - 645535).
Hinweis: Für bestimmte Funktionen sind feste Ports erforderlich, die möglicherweise außerhalb dieses Bereichs liegen.", @@ -1483,8 +1483,8 @@ "LabelHDHomerunPortRangeHelp": "Beschränkt den HDHomeRun UDP-Portbereich zu diesem Wert. (Standard ist 1024 - 65535).", "LabelHDHomerunPortRange": "HDHomeRun Portbereich", "LabelSyncPlayInfo": "SyncPlay-Info", - "LabelOriginalMediaInfo": "Originale Medieninformation", - "Remuxing": "Remuxing", + "LabelOriginalMediaInfo": "Original Medium-Information", + "Remuxing": "Remuxen", "LabelRemuxingInfo": "Remux-Information", "AspectRatioCover": "Ausfüllen", "AspectRatioFill": "Strecken", @@ -1562,7 +1562,7 @@ "SetUsingLastTracksHelp": "Versucht, die am besten übereinstimmende Untertitel-/Audiospur basierend auf dem letzten Video auszuwählen.", "SetUsingLastTracks": "Untertitel/Audiospuren basierend auf vorherigem Element einstellen", "PreviousChapter": "Vorheriges Kapitel", - "PlaybackErrorPlaceHolder": "Dies ist ein Platzhalter für physische Medien, die Jellyfin nicht abspielen kann. Bitte lege eine Disc zum Abspielen ein.", + "PlaybackErrorPlaceHolder": "Dies ist ein Platzhalter für physische Medien, die Jellyfin nicht abspielen kann. Bitte lege die Disc zum Abspielen ein.", "NextChapter": "Nächstes Kapitel", "LabelSyncPlaySettingsSkipToSyncHelp": "Sync-Korrekturmethode, die darin besteht, zur geschätzten Wiedergabeposition zu springen. Sync-Korrektur muss aktiviert sein.", "LabelSyncPlaySettingsSkipToSync": "SkipToSync aktivieren", @@ -1590,7 +1590,7 @@ "TypeOptionPluralSeason": "Staffeln", "TypeOptionPluralMusicVideo": "Musikvideos", "TypeOptionPluralMusicArtist": "Musik-Interpreten", - "TypeOptionPluralMusicAlbum": "Musik-Alben", + "TypeOptionPluralMusicAlbum": "Musikalben", "TypeOptionPluralMovie": "Filme", "TypeOptionPluralEpisode": "Episoden", "TypeOptionPluralBoxSet": "Sammlungen", @@ -1611,7 +1611,7 @@ "UnknownVideoStreamInfo": "Die Video-Stream-Info ist unbekannt", "UnknownAudioStreamInfo": "Die Audio-Stream-Info ist unbekannt", "ContainerBitrateExceedsLimit": "Die Bitrate des Videos übersteigt das Limit", - "PreferSystemNativeHwDecoder": "Präferiere Betriebssystem-native DXVA- oder VA-API-Hardware-Dekoder", + "PreferSystemNativeHwDecoder": "Bevorzuge betriebssystemnative DXVA- oder VA-API-Hardwaredekoder", "SelectAll": "Alles auswählen", "ButtonExitApp": "Anwendung schließen", "ThemeSong": "Titellied", @@ -1649,7 +1649,7 @@ "MessageUnauthorizedUser": "Du bist aktuell nicht berechtigt, auf den Server zuzugreifen. Bitte kontaktiere den Serveradministrator für weitere Informationen.", "StoryArc": "Handlungsstrang", "Digital": "Digital", - "EnableEnhancedNvdecDecoderHelp": "Verbesserte NVDEC-Implementierung, deaktivieren, falls es zu Dekodierungsfehlern kommt.", + "EnableEnhancedNvdecDecoderHelp": "Verbesserte NVDEC-Implementierung, deaktivieren um CUVID zu nutzen, falls es zu Dekodierungsfehlern kommt.", "HomeVideosPhotos": "Heimvideos und -bilder", "Bold": "Fett", "LabelTextWeight": "Schriftstärke", @@ -1665,9 +1665,9 @@ "LabelVppTonemappingBrightnessHelp": "Wende Helligkeitsverstärkung für VPP-Tone-Mapping an. Der empfohlene Wert ist 16.", "LabelVppTonemappingBrightness": "VPP-Tone-Mapping-Helligkeitsverstärkung", "ScreenResolution": "Bildschirmauflösung", - "RememberSubtitleSelectionsHelp": "Versuche den zum letzten Video ähnlichsten Untertitel zu setzen.", - "RememberSubtitleSelections": "Setze den Untertitel auf Basis des letzten Objekts", - "RememberAudioSelectionsHelp": "Versuchen die ähnlichste Tonspur zum letzten Video zu setzen.", + "RememberSubtitleSelectionsHelp": "Versuchen, den zum letzten Video ähnlichsten Untertitel auszuwählen.", + "RememberSubtitleSelections": "Untertitel auf Basis des letzten Objekts auswählen", + "RememberAudioSelectionsHelp": "Versuchen, die zum letzten Video ähnlichste Tonspur auszuwählen.", "RememberAudioSelections": "Tonspur auf Basis des letzten Objekt auswählen", "LabelMaxVideoResolution": "Maximal erlaubte Auflösung der Videotranskodierung", "VideoRangeTypeNotSupported": "Der Dynamikumfang des Videos wird nicht unterstützt", @@ -1715,7 +1715,7 @@ "SubtitleRed": "Rot", "SubtitleWhite": "Weiß", "SubtitleYellow": "Gelb", - "Featurette": "Hinter den Kulissen", + "Featurette": "Featurette", "Short": "Kurzfilm", "LabelParallelImageEncodingLimit": "Limit der parallelen Bildkodierung", "LabelParallelImageEncodingLimitHelp": "Maximale Anzahl von Bildkodierungen, die parallel ausgeführt werden dürfen. Lässt Du diesen Wert leer, wird ein Limit auf Grundlage der Kernanzahl deines Systems festgelegt.", @@ -1742,7 +1742,7 @@ "HeaderConfirmRepositoryInstallation": "Plugin-Repository-Installation bestätigen", "LabelDeveloper": "Entwickler", "MessageRepositoryInstallDisclaimer": "WARNUNG: Eine Drittanbieterquelle für Plugins kann instabilen oder schadhaften Code beinhalten und kann sich zu jedem Zeitpunkt ändern. Bitte installiere nur Quellen von Autoren, denen du vertraust.", - "PleaseConfirmRepositoryInstallation": "Bitte klicke auf OK um zu bestätigen, dass du den obigen Text gelesen hast und mit Plugin-Quellen-Installation fortfahren willst.", + "PleaseConfirmRepositoryInstallation": "Bitte klicke auf OK um zu bestätigen, dass du obiges gelesen hast und mit Plugin-Repository-Installation fortfahren willst.", "Unknown": "Unbekannt", "LabelDate": "Datum", "LabelLevel": "Level", @@ -1768,7 +1768,7 @@ "ListView": "Listenansicht", "GoHome": "Startseite", "AiTranslated": "KI-übersetzt", - "MachineTranslated": "maschinenübersetzt", + "MachineTranslated": "Maschinenübersetzt", "AllowAv1Encoding": "Kodierung im AV1-Format erlauben", "LabelIsHearingImpaired": "Für Hörgeschädigte (SDH)", "LabelBackdropScreensaverInterval": "Hintergrund-Bildschirmschoner-Intervall", @@ -1777,7 +1777,7 @@ "HearingImpairedShort": "BaFa/SDH", "HeaderGuestCast": "Gast Stars", "LabelBackdropScreensaverIntervalHelp": "Die Zeit in Sekunden zwischen dem Wechsel verschiedener Hintergrundbilder im Bildschirmschoner.", - "SearchResultsEmpty": "Entschuldigung! Es konnten keine Ergebnisse für „{0}“ gefunden werden", + "SearchResultsEmpty": "Entschuldigung! Keine Ergebnisse für „{0}“ gefunden", "LabelTrackGain": "Titel Gain", "SelectAudioNormalizationHelp": "Titel Gain - passt die Lautstärke der einzelnen Tracks an, damit sie mit der gleichen Lautstärke wiedergegeben werden. Album Gain - passt nur die Lautstärke aller Titel eines Albums an, wobei der Dynamikbereich des Albums erhalten bleibt. Um zwischen „Aus“ und anderen Optionen zu wechseln, muss die aktuelle Wiedergabe neu gestartet werden.", "LabelAlbumGain": "Album Gain", @@ -1836,13 +1836,13 @@ "LabelTileWidthHelp": "Maximale Anzahl von Bildern pro Kachel in X-Richtung.", "LabelTileHeight": "Kachelhöhe", "LabelTileHeightHelp": "Maximale Anzahl von Bildern pro Kachel in Y-Richtung.", - "LabelJpegQuality": "JPEG Qualität", + "LabelJpegQuality": "JPEG-Qualität", "LabelJpegQualityHelp": "Die JPEG-Komprimierungsqualität für Trickplay-Bilder.", "LabelQscale": "Qscale", "LabelQscaleHelp": "Die Qualitätsskala der von ffmpeg ausgegebenen Bilder, wobei 2 die höchste und 31 die niedrigste Qualität darstellt.", "ExtractTrickplayImagesHelp": "Trickplay-Bilder ähneln den Kapitelbildern, mit dem Unterschied, dass sie sich über die gesamte Länge des Inhalts erstrecken und beim Scrubbing von Videos als Vorschau angezeigt werden.", "LabelImageIntervalHelp": "Zeitintervall (ms) zwischen jedem neuen Trickplay Bild.", - "LabelTrickplayThreads": "FFmpeg Threads", + "LabelTrickplayThreads": "FFmpeg-Threads", "LabelTrickplayThreadsHelp": "Die Anzahl der Threads, die an das Argument '-threads' von ffmpeg übergeben wird.", "OptionExtractTrickplayImage": "Extrahieren von Trickplay-Bildern aktivieren", "LabelExtractTrickplayDuringLibraryScan": "Extrahieren von Trickplay-Bildern beim Scannen der Bibliothek", @@ -1860,14 +1860,14 @@ "NonBlockingScan": "Non Blocking - reiht Erstellung ein, kehrt dann zurück", "BlockingScan": "Blocking - reiht Erstellung ein, blockiert Scan bis fertig", "LabelTrickplayAccelEncoding": "Hardwarebeschleunigte MJPEG-Enkodierung aktivieren", - "LabelTrickplayAccelEncodingHelp": "Derzeit nur auf QSV, VA-API, VideoToolbox und RKMPP verfügbar, diese Option hat keine Auswirkungen auf andere Methoden zur Hardwarebeschleunigung.", + "LabelTrickplayAccelEncodingHelp": "Derzeit nur auf QSV, VA-API, VideoToolbox und RKMPP verfügbar. Diese Option hat keine Auswirkungen auf andere Methoden zur Hardwarebeschleunigung.", "Lyrics": "Liedtexte", "ConfirmDeleteLyrics": "Das Löschen dieses Songtextes löscht die Datei vom Laufwerk und aus deiner Medienbibliothek. Bist du wirklich sicher?", "DeleteLyrics": "Songtexte löschen", "ErrorDeletingLyrics": "Es trat ein Fehler beim Löschen der Songtexte vom Server auf. Bitte stelle sicher, dass Jellyfin die notwendigen Zugriffsrechte besitzt.", "HeaderDeleteLyrics": "Songtexte löschen", "HeaderNoLyrics": "Keine Liedtexte gefunden", - "ViewLyrics": "Songtexte ansehen", + "ViewLyrics": "Liedtexte ansehen", "Author": "Autor", "CoverArtist": "Cover-Künstler", "Creator": "Ersteller", @@ -1914,7 +1914,7 @@ "PluginUninstallError": "Beim Deinstallieren des Plugins ist ein Fehler aufgetreten.", "AndOtherArtists": "{0} und {1} andere Künstler.", "PasswordMissingSaveError": "Neues Passwort kann nicht leer sein.", - "SearchForLyrics": "Songtext suchen", + "SearchForLyrics": "Liedtext suchen", "EditLyrics": "Songtext bearbeiten", "HeaderAddLyrics": "Songtext hinzufügen", "HeaderPreviewLyrics": "Liedtextvorschau anzeigen", @@ -1922,7 +1922,7 @@ "LabelDuration": "Dauer", "LabelIsSynced": "Ist synchronisiert", "NoLyricsSearchResultsFound": "Kein Liedtext gefunden.", - "PreviewLyrics": "Songtextvorschau anzeigen", + "PreviewLyrics": "Liedtextvorschau anzeigen", "AllowTonemappingSoftwareHelp": "Tone-Mapping kann den Dynamikbereich eines Videos von HDR in SDR umwandeln und dabei Bilddetails und Farben beibehalten, die für die Darstellung der ursprünglichen Szene sehr wichtig sind. Funktioniert derzeit nur mit 10bit HDR10-,HLG- und DoVi-Videos.", "LabelTrickplayKeyFrameOnlyExtraction": "Nur Bilder von Schlüsselbildern erzeugen", "MoveToBottom": "Nach unten bewegen", From bfb71e8b3d0c6b58fc862a7ca4c5923913e5f44a Mon Sep 17 00:00:00 2001 From: Sepzilla <162247150+Sepzilla@users.noreply.github.com> Date: Mon, 21 Apr 2025 02:57:09 -0400 Subject: [PATCH 057/645] Translated using Weblate (Persian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fa/ --- src/strings/fa.json | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/strings/fa.json b/src/strings/fa.json index 91d007f77..9a8089c32 100644 --- a/src/strings/fa.json +++ b/src/strings/fa.json @@ -68,7 +68,7 @@ "TabProfiles": "پروفایل ها", "TabUpcoming": "بزودی", "TellUsAboutYourself": "در مورد خودتان به ما بگویید", - "ThisWizardWillGuideYou": "این عمل برای انجام تنظیمات به شما کمک می‌کند. برای شروع، لطفا زبان مورد نظر خود را انتخاب کنید.", + "ThisWizardWillGuideYou": "این برنامه دستیاری برای مراحل نصب کردن است. برای شروع، لطفا نامی برای سرور وارد کرده و زبان مورد نظر خود را انتخاب کنید.", "UserProfilesIntro": "Jellyfin دارای پشتیبانی داخلی از پروفایل کاربران می باشد. با فعال سازی هر کاربر، او می تواند تنظیمات ، وضعیت پخش و کنترل والدین خاص خودش را داشته باشد.", "WelcomeToProject": "به Jellyfin خوش آمدید!", "WizardCompleted": "همه چیزی که فعلا می‌خواهیم همین است. جمع آوری اطلاعات کتابخانه‌های شما هم اکنون توسط Jellyfin آغاز شده است. اپلیکیشن‌های ما را امتحان کنید و سپس بر روی پایان کلیک کنید تا پیشخوان سرور را مشاهده نمایید.", @@ -421,13 +421,13 @@ "Uniform": "یکپارچه", "Tuesday": "سه‌شنبه", "Transcoding": "کدگذاری", - "Trailers": "تریلرها", + "Trailers": "پیش نمایش‌ها", "TrackCount": "{0} آهنگ", "TitlePlayback": "پخش", "TitleHostingSettings": "تنظیمات میزبانی", "TitleHardwareAcceleration": "شتاب سخت افزاری", - "Thursday": "پنج‌شنبه", - "Thumb": "بندانگشتی", + "Thursday": "پنجشنبه", + "Thumb": "انگشت شصت", "ThemeVideos": "تم ویدیوها", "ThemeSongs": "آهنگ‌های تم", "TagsValue": "برچسب‌ها: {0}", @@ -1319,7 +1319,7 @@ "SyncPlayAccessHelp": "ویژگی SyncPlay امکان همگام سازی پخش با سایر دستگاه ها را فراهم می کند. سطح دسترسی این کاربر به SyncPlay را انتخاب کنید.", "SystemDlnaProfilesHelp": "", "TabContainers": "محفظه ها", - "TvLibraryHelp": "", + "TvLibraryHelp": "راهنمای{1} نامگذاری تلویزیون{0} را برّسی کنید.", "UserAgentHelp": "", "ValueContainer": "محفظه: {0}", "EnableBlurHash": "فعال سازی مکان نگهدارهای تار شده برای تصاویر", @@ -1374,9 +1374,9 @@ "Video": "ویدئو", "UseDoubleRateDeinterlacingHelp": "این تنظیم در هنگام deinterlacing از میزان فیلد استفاده می کند ، که اغلب به آن bob deinterlacing گفته می شود ، که نرخ فریم فیلم را دو برابر می کند تا حرکتی کامل مانند آنچه را که هنگام مشاهده فیلم بهم پیوسته در تلویزیون مشاهده می کنید فراهم کند.", "UseDoubleRateDeinterlacing": "هنگام پاک کردن صفحه ، نرخ فریم را دو برابر کنید", - "TonemappingRangeHelp": "محدوده رنگ خروجی را انتخاب کنید. خودکار همان محدوده ورودی است.", - "TonemappingAlgorithmHelp": "نگاشت تن را می توان دقیق تنظیم کرد. اگر با این گزینه ها آشنا نیستید ، فقط پیش فرض را نگه دارید. مقدار پیشنهادی 'BT.2390' است.", - "ThumbCard": "کارت شست", + "TonemappingRangeHelp": "حدود نمایش رنگ را انتخاب کنید. خودکار همان حدود داخلی است.", + "TonemappingAlgorithmHelp": "نگاشت تن را می توان دقیق تنظیم کرد. اگر با این گزینه ها آشنا نیستید ، پیش فرض را نگه دارید. تنظیمِ پیشنهادی 'BT.2390' است.", + "ThumbCard": "کارت شصت", "TabRepositories": "مخازن", "SyncPlayGroupDefaultTitle": "گروه {0}", "SubtitleVerticalPositionHelp": "شماره خطی که متن ظاهر می شود. اعداد مثبت از بالا به پایین نشان می دهد. اعداد منفی نشانگر پایین به بالا هستند.", @@ -1509,7 +1509,7 @@ "DeleteDevicesConfirmation": "آیا مطمئن هستید که می خواهید همه دستگاه ها را حذف کنید؟ تمام جلسات دیگر از سیستم خارج می شوند. بار دیگر که کاربر وارد سیستم شود ، دستگاه ها دوباره ظاهر می شوند.", "Bwdif": "BWDIF", "ButtonUseQuickConnect": "از اتصال سریع استفاده کنید", - "Track": "شیار", + "Track": "قطعه", "TypeOptionPluralVideo": "ویدیوها", "TypeOptionPluralMovie": "فیلم ها", "TypeOptionPluralEpisode": "قسمت‌ها", @@ -1738,5 +1738,6 @@ "ImageUploadCancelled": "بارگذاری تصویر لغو شد", "ImageUploadFailed": "تصویر بارگذاری نشد", "LabelEnableAudioVbr": "فعال‌کردن رمزگذاریِ وی‌بی‌آر(VBR)", - "LabelChapterImageResolutionHelp": "وضوح تصویر عکس بخش. عوض کردن این هیچ اثری بر بخش‌هایی که تولیدشده‌اند نخواهد داشت." + "LabelChapterImageResolutionHelp": "وضوح تصویر عکس بخش. عوض کردن این هیچ اثری بر بخش‌هایی که تولیدشده‌اند نخواهد داشت.", + "Translator": "ترجمه‌گر" } From 6ed01c497f37329a27496d18ea0ceef34f342466 Mon Sep 17 00:00:00 2001 From: LK HO Date: Mon, 21 Apr 2025 02:09:07 -0400 Subject: [PATCH 058/645] Translated using Weblate (Chinese (Traditional Han script, Hong Kong)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant_HK/ --- src/strings/zh-hk.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/strings/zh-hk.json b/src/strings/zh-hk.json index c96aa8c28..d0c46c50e 100644 --- a/src/strings/zh-hk.json +++ b/src/strings/zh-hk.json @@ -218,7 +218,7 @@ "TabServer": "伺服器", "TabUpcoming": "即將發佈", "TellUsAboutYourself": "介紹一下自己", - "ThisWizardWillGuideYou": "此教學協助您完成安裝過程。首先,請選擇您的語言。", + "ThisWizardWillGuideYou": "此教學協助您完成安裝過程。首先,請輸入伺服器名稱及選擇您的語言。", "Thursday": "星期四", "Tuesday": "星期二", "UserProfilesIntro": "Jellyfin 支援用戶對帳戶的顯示、播放狀態和家長監護功能設定進行修改。", @@ -1299,5 +1299,6 @@ "HeaderPageNotFound": "找不到頁面", "PageNotFound": "這不是你要找的頁面。", "PasswordMatchError": "密碼和確認密碼必須一致。", - "PasswordRequiredForAdmin": "管理員帳戶必須設定密碼。" + "PasswordRequiredForAdmin": "管理員帳戶必須設定密碼。", + "Thumb": "縮圖" } From 09e82bc9f3bc900a4e4c4b4647f0963e821d1af7 Mon Sep 17 00:00:00 2001 From: Anrijs Vitolins Date: Mon, 21 Apr 2025 03:02:58 -0400 Subject: [PATCH 059/645] Translated using Weblate (Latvian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/lv/ --- src/strings/lv.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/lv.json b/src/strings/lv.json index e88862159..cc08e6f18 100644 --- a/src/strings/lv.json +++ b/src/strings/lv.json @@ -1559,7 +1559,7 @@ "SubtitleMagenta": "Purpursarkans", "SubtitleVerticalPositionHelp": "Rindas numurs, kurā parādās teksts. Pozitīvie skaitļi norāda no augšas uz leju. Negatīvi skaitļi norāda uz augšupejošu tekstu.", "TheseSettingsAffectSubtitlesOnThisDevice": "Šie iestatījumi ietekmē subtitrus šajā ierīcē", - "ThisWizardWillGuideYou": "Šis vednis palīdzēs jums veikt iestatīšanas procesu. Lai sāktu, izvēlieties vēlamo valodu.", + "ThisWizardWillGuideYou": "Šis vednis palīdzēs jums veikt uzstādīšanas procesu. Lai sāktu, ievadiet servera vārdu un izvēlieties vēlamo valodu.", "EnableVppTonemapping": "Iespējot VPP toņu kartēšanu", "AudioCodecNotSupported": "Audio kodeks netiek atbalstīts", "AudioChannelsNotSupported": "Audio kanālu skaits netiek atbalstīts", From 3b2c0a526661a8b721929c4917c05f0712748f89 Mon Sep 17 00:00:00 2001 From: GolanGitHub Date: Mon, 21 Apr 2025 07:06:43 -0400 Subject: [PATCH 060/645] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/es.json b/src/strings/es.json index ed99fa70b..5870de605 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -993,7 +993,7 @@ "Tags": "Etiquetas", "TellUsAboutYourself": "Háblenos acerca de usted", "TheseSettingsAffectSubtitlesOnThisDevice": "Estas opciones afectan a los subtítulos en este dispositivo", - "ThisWizardWillGuideYou": "Este asistente lo guiará en el proceso de instalación. Para comenzar, por favor introduzca un nombre de servidor y seleccione su idioma preferido.", + "ThisWizardWillGuideYou": "Este asistente lo guiará durante el proceso de configuración. Para comenzar, por favor ingrese un nombre de servidor y seleccione su idioma preferido.", "Thumb": "Miniatura", "Thursday": "Jueves", "TitleHardwareAcceleration": "Aceleración por Hardware", From 423161d5514ecdef2d10061a87c20b5a1465d908 Mon Sep 17 00:00:00 2001 From: Gallyam Biktashev Date: Mon, 21 Apr 2025 06:32:48 -0400 Subject: [PATCH 061/645] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index c638654d0..bb476ebc0 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -1118,7 +1118,7 @@ "ThemeSongs": "Тематические мелодии", "ThemeVideos": "Тематические видео", "TheseSettingsAffectSubtitlesOnThisDevice": "Эти параметры влияют на субтитры на данном устройстве", - "ThisWizardWillGuideYou": "Этот помощник проведёт вас через все фазы установки и настройки. Сначала выберите предпочитаемый язык.", + "ThisWizardWillGuideYou": "Этот помощник проведёт вас через все фазы установки и настройки. Сначала укажите имя сервера и выберите предпочитаемый язык.", "Thumb": "Эскиз", "Thursday": "четверг", "TitleHardwareAcceleration": "Аппаратное ускорение", From 785ce73858067a6711a78cd22299b2cfca8c6f41 Mon Sep 17 00:00:00 2001 From: Pere Date: Mon, 21 Apr 2025 11:56:19 -0400 Subject: [PATCH 062/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 015081f02..ef5f6ade1 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -556,7 +556,7 @@ "Tags": "Etiquetes", "TellUsAboutYourself": "Explica'ns sobre tu", "TheseSettingsAffectSubtitlesOnThisDevice": "Aquestes preferències afecten els subtítols d'aquest dispositiu", - "ThisWizardWillGuideYou": "Aquest assistent us guiarà durant el procés d'instal·lació. Per començar, seleccioneu el vostre idioma preferit.", + "ThisWizardWillGuideYou": "Aquest assistent us guiarà durant el procés d'instal·lació. Per començar, si us plau, entreu el nom del servidor i seleccioneu el vostre idioma preferit.", "Thursday": "Dijous", "TitlePlayback": "Reproducció", "TrackCount": "{0} pistes", From a5f6be85f5ad4ca412dcebf5053aa31c74074e86 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Mon, 21 Apr 2025 13:57:26 -0400 Subject: [PATCH 063/645] Use local copy of connection manager --- src/apiclient.d.ts | 1 - src/components/ServerConnections.js | 3 +- .../jellyfin-apiclient/connectionManager.js | 903 ++++++++++++++++++ 3 files changed, 905 insertions(+), 2 deletions(-) create mode 100644 src/lib/jellyfin-apiclient/connectionManager.js diff --git a/src/apiclient.d.ts b/src/apiclient.d.ts index c2bc4a051..fdb5df58c 100644 --- a/src/apiclient.d.ts +++ b/src/apiclient.d.ts @@ -1,4 +1,3 @@ -// TODO: Move to jellyfin-apiclient /* eslint-disable @typescript-eslint/no-explicit-any */ declare module 'jellyfin-apiclient' { import type { diff --git a/src/components/ServerConnections.js b/src/components/ServerConnections.js index 38692998f..ec56cf7bb 100644 --- a/src/components/ServerConnections.js +++ b/src/components/ServerConnections.js @@ -2,9 +2,10 @@ // eslint-disable-next-line @typescript-eslint/no-unused-vars import { Api } from '@jellyfin/sdk'; import { MINIMUM_VERSION } from '@jellyfin/sdk/lib/versions'; -import { ConnectionManager, Credentials, ApiClient } from 'jellyfin-apiclient'; +import { Credentials, ApiClient } from 'jellyfin-apiclient'; import { appHost } from './apphost'; +import ConnectionManager from 'lib/jellyfin-apiclient/connectionManager'; import Dashboard from '../utils/dashboard'; import Events from '../utils/events.ts'; import { setUserInfo } from '../scripts/settings/userSettings'; diff --git a/src/lib/jellyfin-apiclient/connectionManager.js b/src/lib/jellyfin-apiclient/connectionManager.js new file mode 100644 index 000000000..5ec514b18 --- /dev/null +++ b/src/lib/jellyfin-apiclient/connectionManager.js @@ -0,0 +1,903 @@ +import { ApiClient } from 'jellyfin-apiclient'; + +import events from 'utils/events'; + +const defaultTimeout = 20000; + +const ConnectionMode = { + Local: 0, + Remote: 1, + Manual: 2 +}; + +function getServerAddress(server, mode) { + switch (mode) { + case ConnectionMode.Local: + return server.LocalAddress; + case ConnectionMode.Manual: + return server.ManualAddress; + case ConnectionMode.Remote: + return server.RemoteAddress; + default: + return server.ManualAddress || server.LocalAddress || server.RemoteAddress; + } +} + +function paramsToString(params) { + const values = []; + + for (const key in params) { + const value = params[key]; + + if (value !== null && value !== undefined && value !== '') { + values.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`); + } + } + return values.join('&'); +} + +function resolveFailure(instance, resolve) { + resolve({ + State: 'Unavailable' + }); +} + +function mergeServers(credentialProvider, list1, list2) { + for (let i = 0, length = list2.length; i < length; i++) { + credentialProvider.addOrUpdateServer(list1, list2[i]); + } + + return list1; +} + +function updateServerInfo(server, systemInfo) { + server.Name = systemInfo.ServerName; + + if (systemInfo.Id) { + server.Id = systemInfo.Id; + } + if (systemInfo.LocalAddress) { + server.LocalAddress = systemInfo.LocalAddress; + } +} + +function getEmbyServerUrl(baseUrl, handler) { + return `${baseUrl}/${handler}`; +} + +function getFetchPromise(request) { + const headers = request.headers || {}; + + if (request.dataType === 'json') { + headers.accept = 'application/json'; + } + + const fetchRequest = { + headers, + method: request.type, + credentials: 'same-origin' + }; + + let contentType = request.contentType; + + if (request.data) { + if (typeof request.data === 'string') { + fetchRequest.body = request.data; + } else { + fetchRequest.body = paramsToString(request.data); + + contentType = contentType || 'application/x-www-form-urlencoded; charset=UTF-8'; + } + } + + if (contentType) { + headers['Content-Type'] = contentType; + } + + if (!request.timeout) { + return fetch(request.url, fetchRequest); + } + + return fetchWithTimeout(request.url, fetchRequest, request.timeout); +} + +function fetchWithTimeout(url, options, timeoutMs) { + console.log(`fetchWithTimeout: timeoutMs: ${timeoutMs}, url: ${url}`); + + return new Promise((resolve, reject) => { + const timeout = setTimeout(reject, timeoutMs); + + options = options || {}; + options.credentials = 'same-origin'; + + fetch(url, options).then( + (response) => { + clearTimeout(timeout); + + console.log(`fetchWithTimeout: succeeded connecting to url: ${url}`); + + resolve(response); + }, + (error) => { + clearTimeout(timeout); + + console.log(`fetchWithTimeout: timed out connecting to url: ${url}`, error); + + reject(); + } + ); + }); +} + +function ajax(request) { + if (!request) { + throw new Error('Request cannot be null'); + } + + request.headers = request.headers || {}; + + console.log(`ConnectionManager requesting url: ${request.url}`); + + return getFetchPromise(request).then( + (response) => { + console.log(`ConnectionManager response status: ${response.status}, url: ${request.url}`); + + if (response.status < 400) { + if (request.dataType === 'json' || request.headers.accept === 'application/json') { + return response.json(); + } else { + return response; + } + } else { + return Promise.reject(response); + } + }, + (err) => { + console.log(`ConnectionManager request failed to url: ${request.url}`); + throw err; + } + ); +} + +function replaceAll(originalString, strReplace, strWith) { + const reg = new RegExp(strReplace, 'ig'); + return originalString.replace(reg, strWith); +} + +function normalizeAddress(address) { + // Attempt to correct bad input + address = address.trim(); + + // Seeing failures in iOS when protocol isn't lowercase + address = replaceAll(address, 'Http:', 'http:'); + address = replaceAll(address, 'Https:', 'https:'); + + return address; +} + +function stringEqualsIgnoreCase(str1, str2) { + return (str1 || '').toLowerCase() === (str2 || '').toLowerCase(); +} + +function compareVersions(a, b) { + // -1 a is smaller + // 1 a is larger + // 0 equal + a = a.split('.'); + b = b.split('.'); + + for (let i = 0, length = Math.max(a.length, b.length); i < length; i++) { + const aVal = parseInt(a[i] || '0', 10); + const bVal = parseInt(b[i] || '0', 10); + + if (aVal < bVal) { + return -1; + } + + if (aVal > bVal) { + return 1; + } + } + + return 0; +} + +export default class ConnectionManager { + constructor(credentialProvider, appName, appVersion, deviceName, deviceId, capabilities) { + console.log('Begin ConnectionManager constructor'); + + const self = this; + this._apiClients = []; + + self._minServerVersion = '3.2.33'; + + self.appVersion = () => appVersion; + + self.appName = () => appName; + + self.capabilities = () => capabilities; + + self.deviceId = () => deviceId; + + self.credentialProvider = () => credentialProvider; + + self.getServerInfo = (id) => { + const servers = credentialProvider.credentials().Servers; + + return servers.filter((s) => s.Id === id)[0]; + }; + + self.getLastUsedServer = () => { + const servers = credentialProvider.credentials().Servers; + + servers.sort((a, b) => (b.DateLastAccessed || 0) - (a.DateLastAccessed || 0)); + + if (!servers.length) { + return null; + } + + return servers[0]; + }; + + self.addApiClient = (apiClient) => { + self._apiClients.push(apiClient); + + const existingServers = credentialProvider + .credentials() + .Servers.filter( + (s) => + stringEqualsIgnoreCase(s.ManualAddress, apiClient.serverAddress()) + || stringEqualsIgnoreCase(s.LocalAddress, apiClient.serverAddress()) + || stringEqualsIgnoreCase(s.RemoteAddress, apiClient.serverAddress()) + ); + + const existingServer = existingServers.length ? existingServers[0] : apiClient.serverInfo(); + existingServer.DateLastAccessed = new Date().getTime(); + existingServer.LastConnectionMode = ConnectionMode.Manual; + existingServer.ManualAddress = apiClient.serverAddress(); + + if (apiClient.manualAddressOnly) { + existingServer.manualAddressOnly = true; + } + + apiClient.serverInfo(existingServer); + + apiClient.onAuthenticated = (instance, result) => onAuthenticated(instance, result, {}, true); + + if (!existingServers.length) { + const credentials = credentialProvider.credentials(); + credentials.Servers = [existingServer]; + credentialProvider.credentials(credentials); + } + + events.trigger(self, 'apiclientcreated', [apiClient]); + }; + + self.clearData = () => { + console.log('connection manager clearing data'); + + const credentials = credentialProvider.credentials(); + credentials.Servers = []; + credentialProvider.credentials(credentials); + }; + + self._getOrAddApiClient = (server, serverUrl) => { + let apiClient = self.getApiClient(server.Id); + + if (!apiClient) { + apiClient = new ApiClient(serverUrl, appName, appVersion, deviceName, deviceId); + + self._apiClients.push(apiClient); + + apiClient.serverInfo(server); + + apiClient.onAuthenticated = (instance, result) => { + return onAuthenticated(instance, result, {}, true); + }; + + events.trigger(self, 'apiclientcreated', [apiClient]); + } + + console.log('returning instance from getOrAddApiClient'); + return apiClient; + }; + + self.getOrCreateApiClient = (serverId) => { + const credentials = credentialProvider.credentials(); + const servers = credentials.Servers.filter((s) => stringEqualsIgnoreCase(s.Id, serverId)); + + if (!servers.length) { + throw new Error(`Server not found: ${serverId}`); + } + + const server = servers[0]; + + return self._getOrAddApiClient(server, getServerAddress(server, server.LastConnectionMode)); + }; + + function onAuthenticated(apiClient, result, options, saveCredentials) { + const credentials = credentialProvider.credentials(); + const servers = credentials.Servers.filter((s) => s.Id === result.ServerId); + + const server = servers.length ? servers[0] : apiClient.serverInfo(); + + if (options.updateDateLastAccessed !== false) { + server.DateLastAccessed = new Date().getTime(); + } + server.Id = result.ServerId; + + if (saveCredentials) { + server.UserId = result.User.Id; + server.AccessToken = result.AccessToken; + } else { + server.UserId = null; + server.AccessToken = null; + } + + credentialProvider.addOrUpdateServer(credentials.Servers, server); + credentialProvider.credentials(credentials); + + // set this now before updating server info, otherwise it won't be set in time + apiClient.enableAutomaticBitrateDetection = options.enableAutomaticBitrateDetection; + + apiClient.serverInfo(server); + apiClient.setAuthenticationInfo(result.AccessToken, result.User.Id); + afterConnected(apiClient, options); + + return onLocalUserSignIn(server, apiClient.serverAddress(), result.User); + } + + function afterConnected(apiClient, options = {}) { + if (options.reportCapabilities !== false) { + apiClient.reportCapabilities(capabilities); + } + apiClient.enableAutomaticBitrateDetection = options.enableAutomaticBitrateDetection; + + if (options.enableWebSocket !== false) { + console.log('calling apiClient.ensureWebSocket'); + + apiClient.ensureWebSocket(); + } + } + + function onLocalUserSignIn(server, serverUrl, user) { + // Ensure this is created so that listeners of the event can get the apiClient instance + self._getOrAddApiClient(server, serverUrl); + + // This allows the app to have a single hook that fires before any other + const promise = self.onLocalUserSignedIn ? self.onLocalUserSignedIn.call(self, user) : Promise.resolve(); + + return promise.then(() => { + events.trigger(self, 'localusersignedin', [user]); + }); + } + + function validateAuthentication(server, serverUrl) { + return ajax({ + type: 'GET', + url: getEmbyServerUrl(serverUrl, 'System/Info'), + dataType: 'json', + headers: { + 'X-MediaBrowser-Token': server.AccessToken + } + }).then( + (systemInfo) => { + updateServerInfo(server, systemInfo); + return Promise.resolve(); + }, + () => { + server.UserId = null; + server.AccessToken = null; + return Promise.resolve(); + } + ); + } + + function getImageUrl(localUser) { + if (localUser && localUser.PrimaryImageTag) { + const apiClient = self.getApiClient(localUser); + + const url = apiClient.getUserImageUrl(localUser.Id, { + tag: localUser.PrimaryImageTag, + type: 'Primary' + }); + + return { + url, + supportsParams: true + }; + } + + return { + url: null, + supportsParams: false + }; + } + + self.user = (apiClient) => + new Promise((resolve) => { + let localUser; + + function onLocalUserDone() { + if (apiClient && apiClient.getCurrentUserId()) { + apiClient.getCurrentUser().then((u) => { + localUser = u; + const image = getImageUrl(localUser); + + resolve({ + localUser, + name: localUser ? localUser.Name : null, + imageUrl: image.url, + supportsImageParams: image.supportsParams + }); + }); + } + } + + if (apiClient && apiClient.getCurrentUserId()) { + onLocalUserDone(); + } + }); + + self.logout = () => { + const promises = []; + + for (let i = 0, length = self._apiClients.length; i < length; i++) { + const apiClient = self._apiClients[i]; + + if (apiClient.accessToken()) { + promises.push(logoutOfServer(apiClient)); + } + } + + return Promise.all(promises).then(() => { + const credentials = credentialProvider.credentials(); + + const servers = credentials.Servers.filter((u) => u.UserLinkType !== 'Guest'); + + for (let j = 0, numServers = servers.length; j < numServers; j++) { + const server = servers[j]; + + server.UserId = null; + server.AccessToken = null; + server.ExchangeToken = null; + } + }); + }; + + function logoutOfServer(apiClient) { + const serverInfo = apiClient.serverInfo() || {}; + + const logoutInfo = { + serverId: serverInfo.Id + }; + + return apiClient.logout().then( + () => { + events.trigger(self, 'localusersignedout', [logoutInfo]); + }, + () => { + events.trigger(self, 'localusersignedout', [logoutInfo]); + } + ); + } + + self.getSavedServers = () => { + const credentials = credentialProvider.credentials(); + + const servers = credentials.Servers.slice(0); + + servers.sort((a, b) => (b.DateLastAccessed || 0) - (a.DateLastAccessed || 0)); + + return servers; + }; + + self.getAvailableServers = () => { + console.log('Begin getAvailableServers'); + + // Clone the array + const credentials = credentialProvider.credentials(); + + return Promise.all([findServers()]).then((responses) => { + const foundServers = responses[0]; + const servers = credentials.Servers.slice(0); + mergeServers(credentialProvider, servers, foundServers); + + servers.sort((a, b) => (b.DateLastAccessed || 0) - (a.DateLastAccessed || 0)); + credentials.Servers = servers; + credentialProvider.credentials(credentials); + + return servers; + }); + }; + + function findServers() { + return new Promise((resolve) => { + const onFinish = function (foundServers) { + const servers = foundServers.map((foundServer) => { + const info = { + Id: foundServer.Id, + LocalAddress: convertEndpointAddressToManualAddress(foundServer) || foundServer.Address, + Name: foundServer.Name + }; + info.LastConnectionMode = info.ManualAddress ? ConnectionMode.Manual : ConnectionMode.Local; + return info; + }); + resolve(servers); + }; + + if (window && window.NativeShell && typeof window.NativeShell.findServers === 'function') { + window.NativeShell.findServers(1e3).then(onFinish, function () { + onFinish([]); + }); + } else { + resolve([]); + } + }); + } + + function convertEndpointAddressToManualAddress(info) { + if (info.Address && info.EndpointAddress) { + let address = info.EndpointAddress.split(':')[0]; + + // Determine the port, if any + const parts = info.Address.split(':'); + if (parts.length > 1) { + const portString = parts[parts.length - 1]; + + if (!isNaN(parseInt(portString, 10))) { + address += `:${portString}`; + } + } + + return normalizeAddress(address); + } + + return null; + } + + self.connectToServers = (servers, options) => { + console.log(`Begin connectToServers, with ${servers.length} servers`); + + const firstServer = servers.length ? servers[0] : null; + // See if we have any saved credentials and can auto sign in + if (firstServer) { + return self.connectToServer(firstServer, options).then((result) => { + if (result.State === 'Unavailable') { + result.State = 'ServerSelection'; + } + + console.log('resolving connectToServers with result.State: ' + result.State); + return result; + }); + } + + return Promise.resolve({ + Servers: servers, + State: 'ServerSelection' + }); + }; + + function getTryConnectPromise(url, connectionMode, state, resolve, reject) { + console.log('getTryConnectPromise ' + url); + + ajax({ + url: getEmbyServerUrl(url, 'system/info/public'), + timeout: defaultTimeout, + type: 'GET', + dataType: 'json' + }).then( + (result) => { + if (!state.resolved) { + state.resolved = true; + + console.log('Reconnect succeeded to ' + url); + resolve({ + url: url, + connectionMode: connectionMode, + data: result + }); + } + }, + () => { + console.log('Reconnect failed to ' + url); + + if (!state.resolved) { + state.rejects++; + if (state.rejects >= state.numAddresses) { + reject(); + } + } + } + ); + } + + function tryReconnect(serverInfo) { + const addresses = []; + const addressesStrings = []; + + // the timeouts are a small hack to try and ensure the remote address doesn't resolve first + + // manualAddressOnly is used for the local web app that always connects to a fixed address + if ( + !serverInfo.manualAddressOnly + && serverInfo.LocalAddress + && addressesStrings.indexOf(serverInfo.LocalAddress) === -1 + ) { + addresses.push({ + url: serverInfo.LocalAddress, + mode: ConnectionMode.Local, + timeout: 0 + }); + addressesStrings.push(addresses[addresses.length - 1].url); + } + if (serverInfo.ManualAddress && addressesStrings.indexOf(serverInfo.ManualAddress) === -1) { + addresses.push({ + url: serverInfo.ManualAddress, + mode: ConnectionMode.Manual, + timeout: 100 + }); + addressesStrings.push(addresses[addresses.length - 1].url); + } + if ( + !serverInfo.manualAddressOnly + && serverInfo.RemoteAddress + && addressesStrings.indexOf(serverInfo.RemoteAddress) === -1 + ) { + addresses.push({ + url: serverInfo.RemoteAddress, + mode: ConnectionMode.Remote, + timeout: 200 + }); + addressesStrings.push(addresses[addresses.length - 1].url); + } + + console.log('tryReconnect: ' + addressesStrings.join('|')); + + return new Promise((resolve, reject) => { + const state = {}; + state.numAddresses = addresses.length; + state.rejects = 0; + + addresses.forEach((url) => { + setTimeout(() => { + if (!state.resolved) { + getTryConnectPromise(url.url, url.mode, state, resolve, reject); + } + }, url.timeout); + }); + }); + } + + self.connectToServer = (server, options) => { + console.log('begin connectToServer'); + + return new Promise((resolve) => { + options = options || {}; + + tryReconnect(server).then( + (result) => { + const serverUrl = result.url; + const connectionMode = result.connectionMode; + result = result.data; + + if (compareVersions(self.minServerVersion(), result.Version) === 1) { + console.log('minServerVersion requirement not met. Server version: ' + result.Version); + resolve({ + State: 'ServerUpdateNeeded', + Servers: [server] + }); + } else if (server.Id && result.Id !== server.Id) { + console.log( + 'http request succeeded, but found a different server Id than what was expected' + ); + resolveFailure(self, resolve); + } else { + onSuccessfulConnection(server, result, connectionMode, serverUrl, true, resolve, options); + } + }, + () => { + resolveFailure(self, resolve); + } + ); + }); + }; + + function onSuccessfulConnection(server, systemInfo, connectionMode, serverUrl, verifyLocalAuthentication, resolve, options = {}) { + const credentials = credentialProvider.credentials(); + + if (options.enableAutoLogin === false) { + server.UserId = null; + server.AccessToken = null; + } else if (server.AccessToken && verifyLocalAuthentication) { + void validateAuthentication(server, serverUrl).then(function () { + onSuccessfulConnection(server, systemInfo, connectionMode, serverUrl, false, resolve, options); + }); + return; + } + + updateServerInfo(server, systemInfo); + + server.LastConnectionMode = connectionMode; + + if (options.updateDateLastAccessed !== false) { + server.DateLastAccessed = new Date().getTime(); + } + credentialProvider.addOrUpdateServer(credentials.Servers, server); + credentialProvider.credentials(credentials); + + const result = { + Servers: [] + }; + + result.ApiClient = self._getOrAddApiClient(server, serverUrl); + + result.ApiClient.setSystemInfo(systemInfo); + result.SystemInfo = systemInfo; + + result.State = server.AccessToken && options.enableAutoLogin !== false ? 'SignedIn' : 'ServerSignIn'; + + result.Servers.push(server); + + // set this now before updating server info, otherwise it won't be set in time + result.ApiClient.enableAutomaticBitrateDetection = options.enableAutomaticBitrateDetection; + + result.ApiClient.updateServerInfo(server, serverUrl); + result.ApiClient.setAuthenticationInfo(server.AccessToken, server.UserId); + + const resolveActions = function () { + resolve(result); + + events.trigger(self, 'connected', [result]); + }; + + if (result.State === 'SignedIn') { + afterConnected(result.ApiClient, options); + + result.ApiClient.getCurrentUser().then((user) => { + onLocalUserSignIn(server, serverUrl, user).then(resolveActions, resolveActions); + }, resolveActions); + } else { + resolveActions(); + } + } + + function tryConnectToAddress(address, options) { + const server = { + ManualAddress: address, + LastConnectionMode: ConnectionMode.Manual + }; + + return self.connectToServer(server, options).then((result) => { + // connectToServer never rejects, but resolves with State='Unavailable' + if (result.State === 'Unavailable') { + return Promise.reject(); + } + return result; + }); + } + + self.connectToAddress = function (address, options) { + if (!address) { + return Promise.reject(); + } + + address = normalizeAddress(address); + + const urls = []; + + if (/^[^:]+:\/\//.test(address)) { + // Protocol specified - connect as is + urls.push(address); + } else { + urls.push(`https://${address}`); + urls.push(`http://${address}`); + } + + let i = 0; + + function onFail() { + console.log(`connectToAddress ${urls[i]} failed`); + + if (++i < urls.length) { + return tryConnectToAddress(urls[i], options).catch(onFail); + } + + return Promise.resolve({ + State: 'Unavailable' + }); + } + + return tryConnectToAddress(urls[i], options).catch(onFail); + }; + + self.deleteServer = (serverId) => { + if (!serverId) { + throw new Error('null serverId'); + } + + let server = credentialProvider.credentials().Servers.filter((s) => s.Id === serverId); + server = server.length ? server[0] : null; + + return new Promise((resolve) => { + function onDone() { + const credentials = credentialProvider.credentials(); + + credentials.Servers = credentials.Servers.filter((s) => s.Id !== serverId); + + credentialProvider.credentials(credentials); + resolve(); + } + + if (!server.ConnectServerId) { + onDone(); + } + }); + }; + } + + connect(options) { + console.log('Begin connect'); + + return this.getAvailableServers().then((servers) => { + return this.connectToServers(servers, options); + }); + } + + handleMessageReceived(msg) { + const serverId = msg.ServerId; + if (serverId) { + const apiClient = this.getApiClient(serverId); + if (apiClient) { + if (typeof msg.Data === 'string') { + try { + msg.Data = JSON.parse(msg.Data); + } catch (err) { + console.log('unable to parse json content: ' + err); + } + } + + apiClient.handleMessageReceived(msg); + } + } + } + + getApiClients() { + const servers = this.getSavedServers(); + + for (let i = 0, length = servers.length; i < length; i++) { + const server = servers[i]; + if (server.Id) { + this._getOrAddApiClient(server, getServerAddress(server, server.LastConnectionMode)); + } + } + + return this._apiClients; + } + + getApiClient(item) { + if (!item) { + throw new Error('item or serverId cannot be null'); + } + + // Accept string + object + if (item.ServerId) { + item = item.ServerId; + } + + return this._apiClients.filter((a) => { + const serverInfo = a.serverInfo(); + + // We have to keep this hack in here because of the addApiClient method + return !serverInfo || serverInfo.Id === item; + })[0]; + } + + minServerVersion(val) { + if (val) { + this._minServerVersion = val; + } + + return this._minServerVersion; + } +} From 72d214f99de86aaf4a4213190ea68bc6f91f3253 Mon Sep 17 00:00:00 2001 From: MontejoJorge Date: Mon, 21 Apr 2025 18:13:12 +0200 Subject: [PATCH 064/645] fix renderUpcoming func --- src/controllers/shows/tvupcoming.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/controllers/shows/tvupcoming.js b/src/controllers/shows/tvupcoming.js index 65db7731e..e916c6d67 100644 --- a/src/controllers/shows/tvupcoming.js +++ b/src/controllers/shows/tvupcoming.js @@ -66,15 +66,13 @@ function renderUpcoming(elem, items) { } if (dateText != currentGroupName) { - if (currentGroup.length) { - groups.push({ - name: currentGroupName, - items: currentGroup - }); - } - currentGroupName = dateText; currentGroup = [item]; + + groups.push({ + name: currentGroupName, + items: currentGroup + }); } else { currentGroup.push(item); } From 0d049c6ba6beaad95d02bf7e0521ff7f6ed55a6c Mon Sep 17 00:00:00 2001 From: MontejoJorge Date: Mon, 21 Apr 2025 20:39:26 +0200 Subject: [PATCH 065/645] do not initialize currentGroupName --- src/controllers/shows/tvupcoming.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/shows/tvupcoming.js b/src/controllers/shows/tvupcoming.js index e916c6d67..53d9aaf5a 100644 --- a/src/controllers/shows/tvupcoming.js +++ b/src/controllers/shows/tvupcoming.js @@ -45,7 +45,7 @@ function enableScrollX() { function renderUpcoming(elem, items) { const groups = []; - let currentGroupName = ''; + let currentGroupName; let currentGroup = []; for (let i = 0, length = items.length; i < length; i++) { From 3188c1bc6bc2c2142a9583f73aef319949fdf551 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Mon, 21 Apr 2025 16:39:32 -0400 Subject: [PATCH 066/645] Fix type errors and use ConnectionState enum --- src/apiclient.d.ts | 2 +- src/components/ConnectionRequired.tsx | 2 +- src/controllers/session/addServer/index.js | 2 +- src/controllers/session/selectServer/index.js | 2 +- .../jellyfin-apiclient/connectionManager.js | 34 ++++++++++--------- src/lib/jellyfin-apiclient/connectionMode.ts | 5 +++ .../jellyfin-apiclient/connectionState.ts} | 2 +- 7 files changed, 28 insertions(+), 21 deletions(-) create mode 100644 src/lib/jellyfin-apiclient/connectionMode.ts rename src/{utils/jellyfin-apiclient/ConnectionState.ts => lib/jellyfin-apiclient/connectionState.ts} (88%) diff --git a/src/apiclient.d.ts b/src/apiclient.d.ts index fdb5df58c..f250ccfce 100644 --- a/src/apiclient.d.ts +++ b/src/apiclient.d.ts @@ -67,7 +67,7 @@ declare module 'jellyfin-apiclient' { UtcTimeResponse, VirtualFolderInfo } from '@jellyfin/sdk/lib/generated-client'; - import { ConnectionState } from './utils/jellyfin-apiclient/ConnectionState'; + import type { ConnectionState } from 'lib/jellyfin-apiclient/connectionState'; class ApiClient { constructor(serverAddress: string, appName: string, appVersion: string, deviceName: string, deviceId: string); diff --git a/src/components/ConnectionRequired.tsx b/src/components/ConnectionRequired.tsx index 61c7cbcd8..305aeb7db 100644 --- a/src/components/ConnectionRequired.tsx +++ b/src/components/ConnectionRequired.tsx @@ -3,7 +3,7 @@ import { Outlet, useLocation, useNavigate } from 'react-router-dom'; import type { ApiClient, ConnectResponse } from 'jellyfin-apiclient'; import globalize from 'lib/globalize'; -import { ConnectionState } from 'utils/jellyfin-apiclient/ConnectionState'; +import { ConnectionState } from 'lib/jellyfin-apiclient/connectionState'; import alert from './alert'; import Loading from './loading/LoadingComponent'; diff --git a/src/controllers/session/addServer/index.js b/src/controllers/session/addServer/index.js index 3e10dd629..251d7ae67 100644 --- a/src/controllers/session/addServer/index.js +++ b/src/controllers/session/addServer/index.js @@ -4,7 +4,7 @@ import globalize from '../../../lib/globalize'; import '../../../elements/emby-button/emby-button'; import Dashboard from '../../../utils/dashboard'; import ServerConnections from '../../../components/ServerConnections'; -import { ConnectionState } from '../../../utils/jellyfin-apiclient/ConnectionState.ts'; +import { ConnectionState } from '../../../lib/jellyfin-apiclient/connectionState'; function handleConnectionResult(page, result) { loading.hide(); diff --git a/src/controllers/session/selectServer/index.js b/src/controllers/session/selectServer/index.js index 577c897ba..7770b64cb 100644 --- a/src/controllers/session/selectServer/index.js +++ b/src/controllers/session/selectServer/index.js @@ -19,7 +19,7 @@ import '../../../elements/emby-button/emby-button'; import Dashboard from '../../../utils/dashboard'; import ServerConnections from '../../../components/ServerConnections'; import alert from '../../../components/alert'; -import { ConnectionState } from '../../../utils/jellyfin-apiclient/ConnectionState.ts'; +import { ConnectionState } from '../../../lib/jellyfin-apiclient/connectionState'; import { getDefaultBackgroundClass } from '../../../components/cardbuilder/cardBuilderUtils'; const enableFocusTransform = !browser.slow && !browser.edge; diff --git a/src/lib/jellyfin-apiclient/connectionManager.js b/src/lib/jellyfin-apiclient/connectionManager.js index 5ec514b18..e7d60e41d 100644 --- a/src/lib/jellyfin-apiclient/connectionManager.js +++ b/src/lib/jellyfin-apiclient/connectionManager.js @@ -2,13 +2,10 @@ import { ApiClient } from 'jellyfin-apiclient'; import events from 'utils/events'; -const defaultTimeout = 20000; +import { ConnectionMode } from './connectionMode'; +import { ConnectionState } from './connectionState'; -const ConnectionMode = { - Local: 0, - Remote: 1, - Manual: 2 -}; +const defaultTimeout = 20000; function getServerAddress(server, mode) { switch (mode) { @@ -38,7 +35,7 @@ function paramsToString(params) { function resolveFailure(instance, resolve) { resolve({ - State: 'Unavailable' + State: ConnectionState.Unavailable }); } @@ -563,8 +560,8 @@ export default class ConnectionManager { // See if we have any saved credentials and can auto sign in if (firstServer) { return self.connectToServer(firstServer, options).then((result) => { - if (result.State === 'Unavailable') { - result.State = 'ServerSelection'; + if (result.State === ConnectionState.Unavailable) { + result.State = ConnectionState.ServerSelection; } console.log('resolving connectToServers with result.State: ' + result.State); @@ -574,7 +571,7 @@ export default class ConnectionManager { return Promise.resolve({ Servers: servers, - State: 'ServerSelection' + State: ConnectionState.ServerSelection }); }; @@ -684,7 +681,7 @@ export default class ConnectionManager { if (compareVersions(self.minServerVersion(), result.Version) === 1) { console.log('minServerVersion requirement not met. Server version: ' + result.Version); resolve({ - State: 'ServerUpdateNeeded', + State: ConnectionState.ServerUpdateNeeded, Servers: [server] }); } else if (server.Id && result.Id !== server.Id) { @@ -735,7 +732,7 @@ export default class ConnectionManager { result.ApiClient.setSystemInfo(systemInfo); result.SystemInfo = systemInfo; - result.State = server.AccessToken && options.enableAutoLogin !== false ? 'SignedIn' : 'ServerSignIn'; + result.State = server.AccessToken && options.enableAutoLogin !== false ? ConnectionState.SignedIn : ConnectionState.ServerSignIn; result.Servers.push(server); @@ -751,7 +748,7 @@ export default class ConnectionManager { events.trigger(self, 'connected', [result]); }; - if (result.State === 'SignedIn') { + if (result.State === ConnectionState.SignedIn) { afterConnected(result.ApiClient, options); result.ApiClient.getCurrentUser().then((user) => { @@ -769,8 +766,8 @@ export default class ConnectionManager { }; return self.connectToServer(server, options).then((result) => { - // connectToServer never rejects, but resolves with State='Unavailable' - if (result.State === 'Unavailable') { + // connectToServer never rejects, but resolves with State=ConnectionState.Unavailable + if (result.State === ConnectionState.Unavailable) { return Promise.reject(); } return result; @@ -804,7 +801,7 @@ export default class ConnectionManager { } return Promise.resolve({ - State: 'Unavailable' + State: ConnectionState.Unavailable }); } @@ -875,6 +872,11 @@ export default class ConnectionManager { return this._apiClients; } + /** + * Gets the ApiClient for a given BaseItem or ServerId. + * @param {import('@jellyfin/sdk/lib/generated-client').BaseItemDto | string | undefined} item + * @returns {ApiClient} + */ getApiClient(item) { if (!item) { throw new Error('item or serverId cannot be null'); diff --git a/src/lib/jellyfin-apiclient/connectionMode.ts b/src/lib/jellyfin-apiclient/connectionMode.ts new file mode 100644 index 000000000..934ce3594 --- /dev/null +++ b/src/lib/jellyfin-apiclient/connectionMode.ts @@ -0,0 +1,5 @@ +export const enum ConnectionMode { + Local = 0, + Remote = 1, + Manual = 2 +} diff --git a/src/utils/jellyfin-apiclient/ConnectionState.ts b/src/lib/jellyfin-apiclient/connectionState.ts similarity index 88% rename from src/utils/jellyfin-apiclient/ConnectionState.ts rename to src/lib/jellyfin-apiclient/connectionState.ts index 134a7ffce..03ff95dc5 100644 --- a/src/utils/jellyfin-apiclient/ConnectionState.ts +++ b/src/lib/jellyfin-apiclient/connectionState.ts @@ -1,7 +1,7 @@ /** * Server state values for a connected server used by jellyfin-apiclient. */ -export enum ConnectionState { +export const enum ConnectionState { SignedIn = 'SignedIn', ServerSignIn = 'ServerSignIn', ServerSelection = 'ServerSelection', From 8554b3ea9198f43c2f20741ffb1ad1b94af93b0a Mon Sep 17 00:00:00 2001 From: TrulsElg Date: Mon, 21 Apr 2025 16:04:21 -0400 Subject: [PATCH 067/645] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)=20Translation:=20Jellyfin/Jellyfin=20Web=20Tr?= =?UTF-8?q?anslate-URL:=20https://translate.jellyfin.org/projects/jellyfin?= =?UTF-8?q?/jellyfin-web/nb=5FNO/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/strings/nb.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/strings/nb.json b/src/strings/nb.json index 6b64461c8..e62641d02 100644 --- a/src/strings/nb.json +++ b/src/strings/nb.json @@ -1590,7 +1590,7 @@ "Mixer": "Mikser", "MediaInfoTitle": "Tittel", "Lyricist": "Tekstforfatter", - "Larger": "Stor", + "Larger": "Større", "LabelSyncPlaySettingsSkipToSyncHelp": "Synkroniseringskorrigeringsmetode som består i å søke til den estimerte posisjonen. Synkroniseringskorrigering må være aktivert.", "LabelSyncPlaySettingsSkipToSync": "Aktiver SkipToSync", "LabelSyncPlaySettingsSpeedToSyncHelp": "Synkroniseringsmetode som består i å øke hastigheten på avspillingen. Synkroniseringskorrigering må være aktivert.", @@ -2007,5 +2007,6 @@ "LabelSubtitleStyling": "Undertekstiling", "Native": "Innebygd", "Retry": "Prøv igjen", - "MetadataImagesLoadError": "Kunne ikke laste inn metadata-innstillinger" + "MetadataImagesLoadError": "Kunne ikke laste inn metadata-innstillinger", + "LimitSegmentLength": "Bruk kortere HLS segmenter" } From 06e0007564c5b2b1f25952c7e8265ca29e4f4aca Mon Sep 17 00:00:00 2001 From: whaliin Date: Mon, 21 Apr 2025 15:27:00 -0400 Subject: [PATCH 068/645] Translated using Weblate (Swedish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/ --- src/strings/sv.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/sv.json b/src/strings/sv.json index 32af53541..1dd51349e 100644 --- a/src/strings/sv.json +++ b/src/strings/sv.json @@ -1032,7 +1032,7 @@ "ThemeSongs": "Signaturmelodier", "ThemeVideos": "Vinjettvideor", "TheseSettingsAffectSubtitlesOnThisDevice": "Dessa inställningar påverkar undertexter på den här enheten", - "ThisWizardWillGuideYou": "Den här guiden hjälper dig att göra de första inställningarna. För att börja var vänlig välj önskat språk.", + "ThisWizardWillGuideYou": "Den här guiden hjälper dig att göra de första inställningarna. För att börja var vänlig ange ett servernamn och välj önskat språk.", "Thumb": "Miniatyr", "Thursday": "Torsdag", "TitleHardwareAcceleration": "Hårdvaruacceleration", From f688c1f223cc8ebd91be910519798af01cb08659 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Mon, 21 Apr 2025 17:33:29 -0400 Subject: [PATCH 069/645] Cleanup utility function in connection manager --- .../jellyfin-apiclient/connectionManager.js | 193 +++--------------- src/lib/jellyfin-apiclient/connectionMode.ts | 1 + .../utils/compareVersions.ts | 22 ++ src/plugins/htmlAudioPlayer/plugin.js | 2 +- .../fetchhelper.js => utils/fetch.js} | 0 src/utils/string.ts | 8 + 6 files changed, 55 insertions(+), 171 deletions(-) create mode 100644 src/lib/jellyfin-apiclient/utils/compareVersions.ts rename src/{components/fetchhelper.js => utils/fetch.js} (100%) diff --git a/src/lib/jellyfin-apiclient/connectionManager.js b/src/lib/jellyfin-apiclient/connectionManager.js index e7d60e41d..57786c3e9 100644 --- a/src/lib/jellyfin-apiclient/connectionManager.js +++ b/src/lib/jellyfin-apiclient/connectionManager.js @@ -1,11 +1,14 @@ import { ApiClient } from 'jellyfin-apiclient'; import events from 'utils/events'; +import { ajax } from 'utils/fetch'; +import { equalsIgnoreCase } from 'utils/string'; import { ConnectionMode } from './connectionMode'; import { ConnectionState } from './connectionState'; +import { compareVersions } from './utils/compareVersions'; -const defaultTimeout = 20000; +const DEFAULT_CONNECTION_TIMEOUT = 20000; function getServerAddress(server, mode) { switch (mode) { @@ -20,185 +23,29 @@ function getServerAddress(server, mode) { } } -function paramsToString(params) { - const values = []; - - for (const key in params) { - const value = params[key]; - - if (value !== null && value !== undefined && value !== '') { - values.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`); - } - } - return values.join('&'); -} - -function resolveFailure(instance, resolve) { - resolve({ - State: ConnectionState.Unavailable - }); -} - -function mergeServers(credentialProvider, list1, list2) { - for (let i = 0, length = list2.length; i < length; i++) { - credentialProvider.addOrUpdateServer(list1, list2[i]); - } - - return list1; -} - function updateServerInfo(server, systemInfo) { server.Name = systemInfo.ServerName; if (systemInfo.Id) { server.Id = systemInfo.Id; } + if (systemInfo.LocalAddress) { server.LocalAddress = systemInfo.LocalAddress; } } -function getEmbyServerUrl(baseUrl, handler) { - return `${baseUrl}/${handler}`; -} - -function getFetchPromise(request) { - const headers = request.headers || {}; - - if (request.dataType === 'json') { - headers.accept = 'application/json'; - } - - const fetchRequest = { - headers, - method: request.type, - credentials: 'same-origin' - }; - - let contentType = request.contentType; - - if (request.data) { - if (typeof request.data === 'string') { - fetchRequest.body = request.data; - } else { - fetchRequest.body = paramsToString(request.data); - - contentType = contentType || 'application/x-www-form-urlencoded; charset=UTF-8'; - } - } - - if (contentType) { - headers['Content-Type'] = contentType; - } - - if (!request.timeout) { - return fetch(request.url, fetchRequest); - } - - return fetchWithTimeout(request.url, fetchRequest, request.timeout); -} - -function fetchWithTimeout(url, options, timeoutMs) { - console.log(`fetchWithTimeout: timeoutMs: ${timeoutMs}, url: ${url}`); - - return new Promise((resolve, reject) => { - const timeout = setTimeout(reject, timeoutMs); - - options = options || {}; - options.credentials = 'same-origin'; - - fetch(url, options).then( - (response) => { - clearTimeout(timeout); - - console.log(`fetchWithTimeout: succeeded connecting to url: ${url}`); - - resolve(response); - }, - (error) => { - clearTimeout(timeout); - - console.log(`fetchWithTimeout: timed out connecting to url: ${url}`, error); - - reject(); - } - ); - }); -} - -function ajax(request) { - if (!request) { - throw new Error('Request cannot be null'); - } - - request.headers = request.headers || {}; - - console.log(`ConnectionManager requesting url: ${request.url}`); - - return getFetchPromise(request).then( - (response) => { - console.log(`ConnectionManager response status: ${response.status}, url: ${request.url}`); - - if (response.status < 400) { - if (request.dataType === 'json' || request.headers.accept === 'application/json') { - return response.json(); - } else { - return response; - } - } else { - return Promise.reject(response); - } - }, - (err) => { - console.log(`ConnectionManager request failed to url: ${request.url}`); - throw err; - } - ); -} - -function replaceAll(originalString, strReplace, strWith) { - const reg = new RegExp(strReplace, 'ig'); - return originalString.replace(reg, strWith); -} - function normalizeAddress(address) { // Attempt to correct bad input address = address.trim(); // Seeing failures in iOS when protocol isn't lowercase - address = replaceAll(address, 'Http:', 'http:'); - address = replaceAll(address, 'Https:', 'https:'); + address = address.replace('Http:', 'http:'); + address = address.replace('Https:', 'https:'); return address; } -function stringEqualsIgnoreCase(str1, str2) { - return (str1 || '').toLowerCase() === (str2 || '').toLowerCase(); -} - -function compareVersions(a, b) { - // -1 a is smaller - // 1 a is larger - // 0 equal - a = a.split('.'); - b = b.split('.'); - - for (let i = 0, length = Math.max(a.length, b.length); i < length; i++) { - const aVal = parseInt(a[i] || '0', 10); - const bVal = parseInt(b[i] || '0', 10); - - if (aVal < bVal) { - return -1; - } - - if (aVal > bVal) { - return 1; - } - } - - return 0; -} - export default class ConnectionManager { constructor(credentialProvider, appName, appVersion, deviceName, deviceId, capabilities) { console.log('Begin ConnectionManager constructor'); @@ -243,9 +90,9 @@ export default class ConnectionManager { .credentials() .Servers.filter( (s) => - stringEqualsIgnoreCase(s.ManualAddress, apiClient.serverAddress()) - || stringEqualsIgnoreCase(s.LocalAddress, apiClient.serverAddress()) - || stringEqualsIgnoreCase(s.RemoteAddress, apiClient.serverAddress()) + equalsIgnoreCase(s.ManualAddress, apiClient.serverAddress()) + || equalsIgnoreCase(s.LocalAddress, apiClient.serverAddress()) + || equalsIgnoreCase(s.RemoteAddress, apiClient.serverAddress()) ); const existingServer = existingServers.length ? existingServers[0] : apiClient.serverInfo(); @@ -301,7 +148,7 @@ export default class ConnectionManager { self.getOrCreateApiClient = (serverId) => { const credentials = credentialProvider.credentials(); - const servers = credentials.Servers.filter((s) => stringEqualsIgnoreCase(s.Id, serverId)); + const servers = credentials.Servers.filter((s) => equalsIgnoreCase(s.Id, serverId)); if (!servers.length) { throw new Error(`Server not found: ${serverId}`); @@ -372,7 +219,7 @@ export default class ConnectionManager { function validateAuthentication(server, serverUrl) { return ajax({ type: 'GET', - url: getEmbyServerUrl(serverUrl, 'System/Info'), + url: `${serverUrl}/System/Info`, dataType: 'json', headers: { 'X-MediaBrowser-Token': server.AccessToken @@ -498,7 +345,9 @@ export default class ConnectionManager { return Promise.all([findServers()]).then((responses) => { const foundServers = responses[0]; const servers = credentials.Servers.slice(0); - mergeServers(credentialProvider, servers, foundServers); + foundServers.forEach(server => { + credentialProvider.addOrUpdateServer(servers, server); + }); servers.sort((a, b) => (b.DateLastAccessed || 0) - (a.DateLastAccessed || 0)); credentials.Servers = servers; @@ -579,8 +428,8 @@ export default class ConnectionManager { console.log('getTryConnectPromise ' + url); ajax({ - url: getEmbyServerUrl(url, 'system/info/public'), - timeout: defaultTimeout, + url: `${url}/System/Info/Public`, + timeout: DEFAULT_CONNECTION_TIMEOUT, type: 'GET', dataType: 'json' }).then( @@ -688,13 +537,17 @@ export default class ConnectionManager { console.log( 'http request succeeded, but found a different server Id than what was expected' ); - resolveFailure(self, resolve); + resolve({ + State: ConnectionState.Unavailable + }); } else { onSuccessfulConnection(server, result, connectionMode, serverUrl, true, resolve, options); } }, () => { - resolveFailure(self, resolve); + resolve({ + State: ConnectionState.Unavailable + }); } ); }); diff --git a/src/lib/jellyfin-apiclient/connectionMode.ts b/src/lib/jellyfin-apiclient/connectionMode.ts index 934ce3594..d915ed5d4 100644 --- a/src/lib/jellyfin-apiclient/connectionMode.ts +++ b/src/lib/jellyfin-apiclient/connectionMode.ts @@ -1,3 +1,4 @@ +/** The mode used to connect to a server. */ export const enum ConnectionMode { Local = 0, Remote = 1, diff --git a/src/lib/jellyfin-apiclient/utils/compareVersions.ts b/src/lib/jellyfin-apiclient/utils/compareVersions.ts new file mode 100644 index 000000000..82b8ee00f --- /dev/null +++ b/src/lib/jellyfin-apiclient/utils/compareVersions.ts @@ -0,0 +1,22 @@ +export function compareVersions(a: string = '', b: string = '') { + // -1 a is smaller + // 1 a is larger + // 0 equal + const aParts = a.split('.'); + const bParts = b.split('.'); + + for (let i = 0, length = Math.max(aParts.length, bParts.length); i < length; i++) { + const aVal = parseInt(aParts[i] || '0', 10); + const bVal = parseInt(bParts[i] || '0', 10); + + if (aVal < bVal) { + return -1; + } + + if (aVal > bVal) { + return 1; + } + } + + return 0; +} diff --git a/src/plugins/htmlAudioPlayer/plugin.js b/src/plugins/htmlAudioPlayer/plugin.js index 029cdeca8..b3900aad3 100644 --- a/src/plugins/htmlAudioPlayer/plugin.js +++ b/src/plugins/htmlAudioPlayer/plugin.js @@ -69,7 +69,7 @@ function enableHlsPlayer(url, item, mediaSource, mediaType) { // issue head request to get content type return new Promise(function (resolve, reject) { - import('../../components/fetchhelper').then((fetchHelper) => { + import('../../utils/fetch').then((fetchHelper) => { fetchHelper.ajax({ url: url, type: 'HEAD' diff --git a/src/components/fetchhelper.js b/src/utils/fetch.js similarity index 100% rename from src/components/fetchhelper.js rename to src/utils/fetch.js diff --git a/src/utils/string.ts b/src/utils/string.ts index b3a858e6f..1f7c5aec5 100644 --- a/src/utils/string.ts +++ b/src/utils/string.ts @@ -1,3 +1,11 @@ +/** + * Checks if two string are equal ignoring case. + * @param str1 The first string. + * @param str2 The second string. + * @returns True if the strings are equal ignoring case. + */ +export const equalsIgnoreCase = (str1 = '', str2 = '') => str1.toLowerCase() === str2.toLowerCase(); + /** * Checks if a string is empty or contains only whitespace. * @param {string} value The string to test. From 3eb26fb41687ab30fff55093fac9ed87b49d62c7 Mon Sep 17 00:00:00 2001 From: MontejoJorge Date: Mon, 21 Apr 2025 23:34:18 +0200 Subject: [PATCH 070/645] refactor: forgotPassword page to react component --- src/apps/stable/routes/asyncRoutes/index.ts | 1 + src/apps/stable/routes/asyncRoutes/public.ts | 5 + src/apps/stable/routes/legacyRoutes/public.ts | 7 -- src/apps/stable/routes/routes.tsx | 3 +- .../routes/session/forgotPassword/index.tsx | 117 ++++++++++++++++++ .../session/forgotPassword/index.html | 24 ---- .../session/forgotPassword/index.js | 56 --------- 7 files changed, 125 insertions(+), 88 deletions(-) create mode 100644 src/apps/stable/routes/asyncRoutes/public.ts create mode 100644 src/apps/stable/routes/session/forgotPassword/index.tsx delete mode 100644 src/controllers/session/forgotPassword/index.html delete mode 100644 src/controllers/session/forgotPassword/index.js diff --git a/src/apps/stable/routes/asyncRoutes/index.ts b/src/apps/stable/routes/asyncRoutes/index.ts index e5abc8565..3e37e3b9d 100644 --- a/src/apps/stable/routes/asyncRoutes/index.ts +++ b/src/apps/stable/routes/asyncRoutes/index.ts @@ -1 +1,2 @@ export * from './user'; +export * from './public'; diff --git a/src/apps/stable/routes/asyncRoutes/public.ts b/src/apps/stable/routes/asyncRoutes/public.ts new file mode 100644 index 000000000..9c8b28e31 --- /dev/null +++ b/src/apps/stable/routes/asyncRoutes/public.ts @@ -0,0 +1,5 @@ +import { AsyncRoute } from '../../../../components/router/AsyncRoute'; + +export const ASYNC_PUBLIC_ROUTES: AsyncRoute[] = [ + { path: 'forgotpassword', page: 'session/forgotPassword' } +]; diff --git a/src/apps/stable/routes/legacyRoutes/public.ts b/src/apps/stable/routes/legacyRoutes/public.ts index abf6439bc..7b491625c 100644 --- a/src/apps/stable/routes/legacyRoutes/public.ts +++ b/src/apps/stable/routes/legacyRoutes/public.ts @@ -22,13 +22,6 @@ export const LEGACY_PUBLIC_ROUTES: LegacyRoute[] = [ view: 'session/login/index.html' } }, - { - path: 'forgotpassword', - pageProps: { - controller: 'session/forgotPassword/index', - view: 'session/forgotPassword/index.html' - } - }, { path: 'forgotpasswordpin', pageProps: { diff --git a/src/apps/stable/routes/routes.tsx b/src/apps/stable/routes/routes.tsx index bcd328ace..317479829 100644 --- a/src/apps/stable/routes/routes.tsx +++ b/src/apps/stable/routes/routes.tsx @@ -9,7 +9,7 @@ import FallbackRoute from 'components/router/FallbackRoute'; import AppLayout from '../AppLayout'; -import { ASYNC_USER_ROUTES } from './asyncRoutes'; +import { ASYNC_PUBLIC_ROUTES, ASYNC_USER_ROUTES } from './asyncRoutes'; import { LEGACY_PUBLIC_ROUTES, LEGACY_USER_ROUTES } from './legacyRoutes'; export const STABLE_APP_ROUTES: RouteObject[] = [ @@ -33,6 +33,7 @@ export const STABLE_APP_ROUTES: RouteObject[] = [ /* Public routes */ element: , children: [ + ...ASYNC_PUBLIC_ROUTES.map(toAsyncPageRoute), ...LEGACY_PUBLIC_ROUTES.map(toViewManagerPageRoute), /* Fallback route for invalid paths */ { diff --git a/src/apps/stable/routes/session/forgotPassword/index.tsx b/src/apps/stable/routes/session/forgotPassword/index.tsx new file mode 100644 index 000000000..eff26d340 --- /dev/null +++ b/src/apps/stable/routes/session/forgotPassword/index.tsx @@ -0,0 +1,117 @@ +import React, { useCallback, useState } from 'react'; +import Page from 'components/Page'; +import { useNavigate } from 'react-router-dom'; +import globalize from 'lib/globalize'; +import Button from 'elements/emby-button/Button'; +import Input from 'elements/emby-input/Input'; +import ServerConnections from 'components/ServerConnections'; +import { useMutation } from '@tanstack/react-query'; +import Dashboard from 'utils/dashboard'; + +export const ForgotPasswordPage = () => { + const navigate = useNavigate(); + const [username, setUsername] = useState(''); + + const apiClient = ServerConnections.currentApiClient(); + + const forgotPasswordMutation = useMutation({ + mutationFn: (enteredUsername: string) => { + if (!apiClient) { + throw new Error('API client is not available'); + } + return apiClient.ajax({ + type: 'POST', + url: apiClient.getUrl('Users/ForgotPassword'), + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify({ + EnteredUsername: enteredUsername + }) + }); + }, + onSuccess: (result) => { + if (result.Action == 'ContactAdmin') { + Dashboard.alert({ + message: globalize.translate('MessageContactAdminToResetPassword'), + title: globalize.translate('ButtonForgotPassword') + }); + } + + if (result.Action == 'InNetworkRequired') { + Dashboard.alert({ + message: globalize.translate('MessageForgotPasswordInNetworkRequired'), + title: globalize.translate('ButtonForgotPassword') + }); + } + + if (result.Action == 'PinCode') { + navigate('/forgotpasswordpin'); + } + } + }); + + const handleCancel = useCallback(() => { + navigate(-1); + }, [navigate]); + + const handleSubmit = useCallback(async (e: React.FormEvent) => { + e.preventDefault(); + forgotPasswordMutation.mutate(username); + }, [username, forgotPasswordMutation]); + + const handleUsernameChange = useCallback((e: React.ChangeEvent) => { + setUsername(e.target.value); + }, []); + + return ( + +
+ +
+

{globalize.translate('ButtonForgotPassword')}

+ +
+ +
+ {globalize.translate('LabelForgotPasswordUsernameHelp')} +
+
+ +
+
+
+ +
+
+ ); +}; + +export default ForgotPasswordPage; diff --git a/src/controllers/session/forgotPassword/index.html b/src/controllers/session/forgotPassword/index.html deleted file mode 100644 index 31e92c2c5..000000000 --- a/src/controllers/session/forgotPassword/index.html +++ /dev/null @@ -1,24 +0,0 @@ -
-
-
-
-

${ButtonForgotPassword}

- -
- -
${LabelForgotPasswordUsernameHelp}
-
- -
- - - -
-
-
-
-
diff --git a/src/controllers/session/forgotPassword/index.js b/src/controllers/session/forgotPassword/index.js deleted file mode 100644 index d94dac455..000000000 --- a/src/controllers/session/forgotPassword/index.js +++ /dev/null @@ -1,56 +0,0 @@ -import globalize from 'lib/globalize'; -import Dashboard from 'utils/dashboard'; - -function processForgotPasswordResult(result) { - if (result.Action == 'ContactAdmin') { - Dashboard.alert({ - message: globalize.translate('MessageContactAdminToResetPassword'), - title: globalize.translate('ButtonForgotPassword') - }); - return; - } - - if (result.Action == 'InNetworkRequired') { - Dashboard.alert({ - message: globalize.translate('MessageForgotPasswordInNetworkRequired'), - title: globalize.translate('ButtonForgotPassword') - }); - return; - } - - if (result.Action == 'PinCode') { - let msg = globalize.translate('MessageForgotPasswordFileCreated'); - msg += '
'; - msg += '
'; - msg += 'Enter PIN here to finish Password Reset
'; - msg += '
'; - msg += result.PinFile; - msg += '
'; - Dashboard.alert({ - message: msg, - title: globalize.translate('ButtonForgotPassword'), - callback: function () { - Dashboard.navigate('forgotpasswordpin'); - } - }); - } -} - -export default function (view) { - function onSubmit(e) { - ApiClient.ajax({ - type: 'POST', - url: ApiClient.getUrl('Users/ForgotPassword'), - dataType: 'json', - contentType: 'application/json', - data: JSON.stringify({ - EnteredUsername: view.querySelector('#txtName').value - }) - }).then(processForgotPasswordResult); - e.preventDefault(); - return false; - } - - view.querySelector('form').addEventListener('submit', onSubmit); -} - From 79156322fc6dd54090d11f58b287de3f37d99a57 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Mon, 21 Apr 2025 17:38:42 -0400 Subject: [PATCH 071/645] Move minimum version assignment to connection manager --- src/components/ServerConnections.js | 4 ---- src/lib/jellyfin-apiclient/connectionManager.js | 4 +++- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/components/ServerConnections.js b/src/components/ServerConnections.js index ec56cf7bb..630bc6364 100644 --- a/src/components/ServerConnections.js +++ b/src/components/ServerConnections.js @@ -1,7 +1,6 @@ // NOTE: This is used for jsdoc return type // eslint-disable-next-line @typescript-eslint/no-unused-vars import { Api } from '@jellyfin/sdk'; -import { MINIMUM_VERSION } from '@jellyfin/sdk/lib/versions'; import { Credentials, ApiClient } from 'jellyfin-apiclient'; import { appHost } from './apphost'; @@ -38,9 +37,6 @@ class ServerConnections extends ConnectionManager { this.localApiClient = null; this.firstConnection = null; - // Set the apiclient minimum version to match the SDK - this._minServerVersion = MINIMUM_VERSION; - Events.on(this, 'localusersignedout', (_e, logoutInfo) => { setUserInfo(null, null); // Ensure the updated credentials are persisted to storage diff --git a/src/lib/jellyfin-apiclient/connectionManager.js b/src/lib/jellyfin-apiclient/connectionManager.js index 57786c3e9..144a4b61d 100644 --- a/src/lib/jellyfin-apiclient/connectionManager.js +++ b/src/lib/jellyfin-apiclient/connectionManager.js @@ -1,3 +1,4 @@ +import { MINIMUM_VERSION } from '@jellyfin/sdk/lib/versions'; import { ApiClient } from 'jellyfin-apiclient'; import events from 'utils/events'; @@ -53,7 +54,8 @@ export default class ConnectionManager { const self = this; this._apiClients = []; - self._minServerVersion = '3.2.33'; + // Set the minimum version to match the SDK + self._minServerVersion = MINIMUM_VERSION; self.appVersion = () => appVersion; From 110f442916be92657efd9788ab59587ad8fdf694 Mon Sep 17 00:00:00 2001 From: nextlooper42 Date: Mon, 21 Apr 2025 18:52:54 -0400 Subject: [PATCH 072/645] Translated using Weblate (Slovak) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/ --- src/strings/sk.json | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/strings/sk.json b/src/strings/sk.json index 8f9359d60..f17aec4e0 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -673,7 +673,7 @@ "TabScheduledTasks": "Naplánované úlohy", "TabUpcoming": "Čoskoro", "TellUsAboutYourself": "Povedzte nám niečo o sebe", - "ThisWizardWillGuideYou": "Tento sprievodca Vám pomôže dokončiť proces inštalácie. Na úvod vyberte Vami preferovaný jazyk.", + "ThisWizardWillGuideYou": "Tento sprievodca Vám pomôže prejsť procesom nastavenia. Na začiatku zadajte názov servera a vyberte preferovaný jazyk.", "Thursday": "Štvrtok", "TitleHardwareAcceleration": "Hardvérová akcelerácia", "TrackCount": "{0} stôp", @@ -1444,14 +1444,14 @@ "YoutubeBadRequest": "Zlá požiadavka.", "LabelSelectStereo": "Stereo", "LabelSelectMono": "Mono", - "AspectRatioCover": "Obal", + "AspectRatioCover": "Priblížiť", "VideoAudio": "Video Zvuk", "Video": "Video", "AllowTonemappingHelp": "Mapovanie tónov umožňuje zmeniť dynamický rozsah videa z HDR na SDR bez straty dôležitých informácií pôvodného obrazu, ako sú detaily a farby. Táto funkcia v súčasnosti funguje len pre videá, ktoré obsahujú 10-bitové HDR10, HLG alebo Dolby Vision a vyžaduje GPGPU runtime.", "LabelTonemappingThresholdHelp": "Parametre algoritmu mapovania tónov sú prispôsobené jednotlivým scénam. A tento prah sa používa na zistenie, či sa scéna zmenila alebo nie. Pokiaľ rozdiel medzi súčasnou priemernou svetlosťou snímku a priebežným priemerom tento prah prekročí, bude priemerná a vrchná svetlosť scény prepočítaná. Doporučené a predvolené hodnoty sú 0.8 a 0.2.", "LabelUDPPortRangeHelp": "Obmedzí UDP pripojenie Jellyfinu na tento rozsah. (Predvolená hodnota je 1024 - 65535).
Poznámka: Niektoré funkcie vyžadujú určité porty, ktoré sa môžu nachádzať mimo tohto rozsahu.", "Remuxing": "Remuxovanie", - "AspectRatioFill": "Vyplniť", + "AspectRatioFill": "Roztiahnuť", "EnableFallbackFontHelp": "Povoliť vlastné alternatívne fonty. Toto môže vyriešiť problémy s nesprávnym vykreslením titulkov.", "EnableFallbackFont": "Povoliť záložné fonty", "LabelFallbackFontPathHelp": "Tieto písma používajú niektorí klienti na vykresľovanie titulkov. Viac informácií nájdete v dokumentácii.", @@ -1653,7 +1653,7 @@ "HomeVideosPhotos": "Domáce videá a fotky", "Bold": "Tučné", "LabelTextWeight": "Hrúbka textu", - "EnableSplashScreen": "Povoliť úvodnú obrazovku", + "EnableSplashScreen": "Povoliť obrázok úvodnej obrazovky", "MediaInfoDvBlSignalCompatibilityId": "ID kompatibility signálu DV bl", "MediaInfoBlPresentFlag": "Prednastavený príznak DV bl", "MediaInfoElPresentFlag": "Prednastavený príznak DV el", @@ -2014,5 +2014,17 @@ "PageNotFound": "Toto nie je stránka, ktorú hľadáš.", "SettingsPageLoadError": "Nepodarilo sa načítať stránku s nastaveniami", "StreamCountExceedsLimit": "Počet streamov prekračuje limit", - "RetryWithGlobalSearch": "Skúsiť globálne vyhľadávanie" + "RetryWithGlobalSearch": "Skúsiť globálne vyhľadávanie", + "UploadCustomImage": "Nahrať vlastný obrázok", + "CustomSplashScreenSize": "Vlastné obrázky by mali mať pomer strán 16x9 a minimálne rozlíšenie 1920x1080.", + "ReadInputAtNativeFramerateHelp": "Povolenie tejto možnosti môže vyriešiť niektoré problémy, napr. predčasné zastavenie živých streamov.", + "DeleteCustomImage": "Odstrániť vlastný obrázok", + "LimitSegmentLengthHelp": "Povolenie tejto možnosti môže pomôcť zabrániť tomu, aby sa prehrávač HLS počas posúvania vo videu na niektorých zariadeniach, ako sú napríklad televízory so systémom webOS, zasekával.", + "ReadInputAtNativeFramerate": "Natívna snímková frekvencia pri načítaní vstupu", + "ImageDeleteFailed": "Odstránenie obrázka sa nepodarilo", + "ImageUploadCancelled": "Nahrávanie obrázku bolo zrušené", + "ImageUploadFailed": "Nahrávanie obrázku zlyhalo", + "LimitSegmentLength": "Použiť kratšie segmenty HLS", + "LabelGroupShowsIntoCollections": "Zoskupiť seriály do kolekcií", + "LabelGroupShowsIntoCollectionsHelp": "Seriály v kolekcii budú zobrazené ako jedna zoskupená položka v zozname seriálov." } From abfc14d745f25db354b606bfc094f2588857df8f Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 22 Apr 2025 02:37:12 -0400 Subject: [PATCH 073/645] Update subtitle position styling (#6766) --- .../subtitlesettings/subtitleappearancehelper.js | 9 +++++---- src/plugins/htmlVideoPlayer/plugin.js | 10 ++++++++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/components/subtitlesettings/subtitleappearancehelper.js b/src/components/subtitlesettings/subtitleappearancehelper.js index 5f146056e..cfc0437b7 100644 --- a/src/components/subtitlesettings/subtitleappearancehelper.js +++ b/src/components/subtitlesettings/subtitleappearancehelper.js @@ -101,13 +101,14 @@ function getTextStyles(settings, preview) { if (!preview) { const pos = parseInt(settings.verticalPosition, 10); const lineHeight = 1.35; // FIXME: It is better to read this value from element - const line = Math.abs(pos * lineHeight); if (pos < 0) { - list.push({ name: 'min-height', value: `${line}em` }); + const margin = Math.abs(pos + 1) * lineHeight; + list.push({ name: 'margin-bottom', value: `${margin}em` }); list.push({ name: 'margin-top', value: '' }); } else { - list.push({ name: 'min-height', value: '' }); - list.push({ name: 'margin-top', value: `${line}em` }); + const margin = pos * lineHeight; + list.push({ name: 'margin-bottom', value: '' }); + list.push({ name: 'margin-top', value: `${margin}em` }); } } diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index 5afc9d182..4b6e0c9a7 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -1532,10 +1532,16 @@ export class HtmlVideoPlayer { // in safari, the cues need to be added before setting the track mode to showing for (const trackEvent of data.TrackEvents) { const TrackCue = window.VTTCue || window.TextTrackCue; - const cue = new TrackCue(trackEvent.StartPositionTicks / 10000000, trackEvent.EndPositionTicks / 10000000, normalizeTrackEventText(trackEvent.Text, false)); + const text = normalizeTrackEventText(trackEvent.Text, false); + const cue = new TrackCue(trackEvent.StartPositionTicks / 10000000, trackEvent.EndPositionTicks / 10000000, text); if (cue.line === 'auto') { - cue.line = cueLine; + if (cueLine < 0) { + const lineCount = (text.match(/\n/g) || []).length; + cue.line = cueLine - lineCount; + } else { + cue.line = cueLine; + } } trackElement.addCue(cue); From a505fb4d30d877ed422e3f8dfb22f6af7ad9b5bb Mon Sep 17 00:00:00 2001 From: MontejoJorge Date: Tue, 22 Apr 2025 10:47:46 +0200 Subject: [PATCH 074/645] show alert and globalize message --- .../stable/routes/session/forgotPassword/index.tsx | 14 +++++++++++++- src/strings/en-us.json | 1 + src/strings/es.json | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/apps/stable/routes/session/forgotPassword/index.tsx b/src/apps/stable/routes/session/forgotPassword/index.tsx index eff26d340..55a0c3ff6 100644 --- a/src/apps/stable/routes/session/forgotPassword/index.tsx +++ b/src/apps/stable/routes/session/forgotPassword/index.tsx @@ -45,7 +45,19 @@ export const ForgotPasswordPage = () => { } if (result.Action == 'PinCode') { - navigate('/forgotpasswordpin'); + let msg = globalize.translate('MessageForgotPasswordFileCreated'); + msg += '

'; + msg += globalize.translate('MessageForgotPasswordPinReset'); + msg += '

'; + msg += result.PinFile; + msg += '
'; + Dashboard.alert({ + message: msg, + title: globalize.translate('ButtonForgotPassword'), + callback: function () { + navigate('forgotpasswordpin'); + } + }); } } }); diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 9f6e69f1c..62d49a750 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1127,6 +1127,7 @@ "MessageEnablingOptionLongerScans": "Enabling this option may result in significantly longer library scans.", "MessageFileReadError": "There was an error reading the file. Please try again.", "MessageForgotPasswordFileCreated": "The following file has been created on your server and contains instructions on how to proceed", + "MessageForgotPasswordPinReset": "Enter PIN here to finish Password reset", "MessageForgotPasswordInNetworkRequired": "Please try again within your home network to initiate the password reset process.", "MessageGetInstalledPluginsError": "An error occurred while getting the list of currently installed plugins.", "MessageImageFileTypeAllowed": "Only JPEG and PNG files are supported.", diff --git a/src/strings/es.json b/src/strings/es.json index 5870de605..803721341 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -714,6 +714,7 @@ "MessageEnablingOptionLongerScans": "Activar esta opción implicará escaneos de la biblioteca más largos.", "MessageFileReadError": "Ha habido un error leyendo el fichero. Por favor, inténtalo más tarde.", "MessageForgotPasswordFileCreated": "Se ha creado el siguiente archivo en tu servidor y contiene instrucciones de cómo proceder", + "MessageForgotPasswordPinReset": "Introdice el PIN aqui para finalizar el reseteo de contraseña", "MessageForgotPasswordInNetworkRequired": "Por favor, inténtalo de nuevo desde tu red de casa para iniciar el proceso de restablecimiento de la contraseña.", "MessageInvalidForgotPasswordPin": "Has introducido un código PIN inválido o expirado. Por favor, inténtalo de nuevo.", "MessageInvalidUser": "Usuario o contraseña inválidos. Por favor, inténtalo otra vez.", From 5bcbcfbe126a2cc303e08de685eb6bd23463a6fa Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 22 Apr 2025 08:26:43 -0400 Subject: [PATCH 075/645] Move server connections to lib --- src/apps/dashboard/controllers/dashboard.js | 2 +- src/apps/dashboard/routes/branding/index.tsx | 2 +- .../dashboard/routes/libraries/display.tsx | 2 +- .../dashboard/routes/libraries/metadata.tsx | 2 +- src/apps/dashboard/routes/libraries/nfo.tsx | 2 +- src/apps/dashboard/routes/logs/index.tsx | 2 +- src/apps/dashboard/routes/playback/resume.tsx | 2 +- .../dashboard/routes/playback/streaming.tsx | 2 +- .../dashboard/routes/playback/trickplay.tsx | 2 +- src/apps/dashboard/routes/settings/index.tsx | 2 +- .../routes/users/parentalcontrol.tsx | 2 +- .../stable/features/playback/utils/image.ts | 2 +- .../playback/utils/mediaSegmentManager.ts | 2 +- src/apps/wizard/controllers/finish/index.js | 2 +- src/apps/wizard/controllers/library.js | 2 +- src/apps/wizard/controllers/remote/index.js | 2 +- src/apps/wizard/controllers/settings/index.js | 2 +- src/apps/wizard/controllers/start/index.js | 2 +- src/apps/wizard/controllers/user/index.js | 2 +- src/components/ConnectionRequired.tsx | 2 +- src/components/ServerContentPage.tsx | 6 +++--- src/components/activitylog.js | 2 +- src/components/backdrop/backdrop.js | 2 +- src/components/cardbuilder/cardBuilder.js | 2 +- .../cardbuilder/chaptercardbuilder.js | 3 ++- src/components/channelMapper/channelMapper.js | 2 +- .../collectionEditor/collectionEditor.js | 2 +- .../displaySettings/displaySettings.js | 2 +- src/components/filterdialog/filterdialog.js | 2 +- src/components/filtermenu/filtermenu.js | 2 +- src/components/groupedcards.js | 2 +- src/components/guide/guide.js | 2 +- .../homeScreenSettings/homeScreenSettings.js | 2 +- .../homesections/sections/activeRecordings.ts | 2 +- .../homesections/sections/liveTv.ts | 2 +- .../homesections/sections/nextUp.ts | 2 +- .../homesections/sections/recentlyAdded.ts | 4 ++-- .../homesections/sections/resume.ts | 2 +- .../imageDownloader/imageDownloader.js | 2 +- src/components/imageUploader/imageUploader.js | 3 ++- src/components/imageeditor/imageeditor.js | 2 +- src/components/itemContextMenu.js | 2 +- src/components/itemHelper.js | 2 +- src/components/itemMediaInfo/itemMediaInfo.js | 2 +- .../itemidentifier/itemidentifier.js | 2 +- src/components/listview/listview.js | 2 +- src/components/lyricseditor/lyricseditor.js | 2 +- .../lyricsuploader/lyricsuploader.js | 2 +- .../metadataEditor/metadataEditor.js | 3 ++- src/components/multiSelect/multiSelect.js | 2 +- src/components/notifications/notifications.js | 2 +- src/components/nowPlayingBar/nowPlayingBar.js | 2 +- .../playback/displayMirrorManager.ts | 2 +- src/components/playback/playbackmanager.js | 4 ++-- src/components/playback/playersettingsmenu.js | 4 ++-- .../playbackSettings/playbackSettings.js | 2 +- src/components/playerstats/playerstats.js | 3 ++- .../playlisteditor/playlisteditor.ts | 2 +- src/components/pluginManager.js | 2 +- .../recordingcreator/recordingbutton.js | 3 ++- .../recordingcreator/recordingcreator.js | 3 ++- .../recordingcreator/recordingeditor.js | 3 ++- .../recordingcreator/recordingfields.js | 3 ++- .../recordingcreator/recordinghelper.js | 4 ++-- .../recordingcreator/seriesrecordingeditor.js | 3 ++- src/components/refreshdialog/refreshdialog.js | 3 ++- src/components/remotecontrol/remotecontrol.js | 3 ++- src/components/router/appRouter.js | 4 ++-- src/components/shortcuts.js | 2 +- src/components/slideshow/slideshow.js | 3 ++- .../subtitleeditor/subtitleeditor.js | 3 ++- .../subtitlesettings/subtitlesettings.js | 3 ++- .../subtitleuploader/subtitleuploader.js | 3 ++- src/components/themeMediaPlayer.js | 2 +- src/components/upnextdialog/upnextdialog.js | 3 ++- .../userdatabuttons/userdatabuttons.js | 3 ++- src/controllers/favorites.js | 2 +- src/controllers/hometab.js | 3 ++- src/controllers/itemDetails/index.js | 5 ++--- src/controllers/list.js | 2 +- src/controllers/lyrics.js | 2 +- src/controllers/playback/video/index.js | 2 +- src/controllers/session/addServer/index.js | 15 +++++++------- src/controllers/session/login/index.js | 5 +++-- src/controllers/session/selectServer/index.js | 4 ++-- .../emby-itemscontainer.js | 7 ++++--- .../emby-playstatebutton.js | 2 +- .../emby-ratingbutton/emby-ratingbutton.js | 2 +- src/hooks/useApi.tsx | 6 +++--- src/index.jsx | 5 ++--- .../jellyfin-apiclient}/ServerConnections.js | 10 +++++----- src/plugins/backdropScreensaver/plugin.js | 6 +++--- src/plugins/bookPlayer/plugin.js | 2 +- src/plugins/chromecastPlayer/plugin.js | 2 +- src/plugins/comicsPlayer/plugin.js | 2 +- src/plugins/htmlVideoPlayer/plugin.js | 2 +- src/plugins/pdfPlayer/plugin.js | 2 +- src/plugins/photoPlayer/plugin.js | 4 ++-- src/plugins/playAccessValidation/plugin.js | 8 ++++---- src/plugins/sessionPlayer/plugin.js | 2 +- src/plugins/syncPlay/plugin.ts | 2 +- src/plugins/syncPlay/ui/groupSelectionMenu.js | 2 +- src/scripts/autoBackdrops.js | 2 +- src/scripts/autoThemes.js | 6 +++--- src/scripts/autocast.js | 6 +++--- src/scripts/deleteHelper.js | 11 +++++----- src/scripts/itemsByName.js | 13 ++++++------ src/scripts/libraryMenu.js | 2 +- src/scripts/playlistViewer.js | 2 +- src/scripts/screensavermanager.js | 11 +++++----- src/scripts/serverNotifications.js | 20 +++++++++---------- src/scripts/taskbutton.js | 10 +++++----- src/utils/dashboard.js | 2 +- 113 files changed, 198 insertions(+), 176 deletions(-) rename src/{components => lib/jellyfin-apiclient}/ServerConnections.js (94%) diff --git a/src/apps/dashboard/controllers/dashboard.js b/src/apps/dashboard/controllers/dashboard.js index 334fb7e3e..8b6167182 100644 --- a/src/apps/dashboard/controllers/dashboard.js +++ b/src/apps/dashboard/controllers/dashboard.js @@ -17,12 +17,12 @@ import imageHelper from 'utils/image'; import indicators from 'components/indicators/indicators'; import taskButton from 'scripts/taskbutton'; import Dashboard from 'utils/dashboard'; -import ServerConnections from 'components/ServerConnections'; import alert from 'components/alert'; import confirm from 'components/confirm/confirm'; import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUtils'; import { getSystemInfoQuery } from 'hooks/useSystemInfo'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { toApi } from 'utils/jellyfin-apiclient/compat'; import { queryClient } from 'utils/query/queryClient'; diff --git a/src/apps/dashboard/routes/branding/index.tsx b/src/apps/dashboard/routes/branding/index.tsx index 3d2d8d2c7..e124aba01 100644 --- a/src/apps/dashboard/routes/branding/index.tsx +++ b/src/apps/dashboard/routes/branding/index.tsx @@ -18,10 +18,10 @@ import { getBrandingOptionsQuery, QUERY_KEY, useBrandingOptions } from 'apps/das import Loading from 'components/loading/LoadingComponent'; import Image from 'components/Image'; import Page from 'components/Page'; -import ServerConnections from 'components/ServerConnections'; import { SPLASHSCREEN_URL } from 'constants/branding'; import { useApi } from 'hooks/useApi'; import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { queryClient } from 'utils/query/queryClient'; import { ActionData } from 'types/actionData'; diff --git a/src/apps/dashboard/routes/libraries/display.tsx b/src/apps/dashboard/routes/libraries/display.tsx index d83f8d588..8dd377e94 100644 --- a/src/apps/dashboard/routes/libraries/display.tsx +++ b/src/apps/dashboard/routes/libraries/display.tsx @@ -12,11 +12,11 @@ import TextField from '@mui/material/TextField'; import Typography from '@mui/material/Typography'; import Loading from 'components/loading/LoadingComponent'; import Page from 'components/Page'; -import ServerConnections from 'components/ServerConnections'; import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api'; import { QUERY_KEY as CONFIG_QUERY_KEY, useConfiguration } from 'hooks/useConfiguration'; import { QUERY_KEY as NAMED_CONFIG_QUERY_KEY, NamedConfiguration, useNamedConfiguration } from 'hooks/useNamedConfiguration'; import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; import { ActionData } from 'types/actionData'; import { queryClient } from 'utils/query/queryClient'; diff --git a/src/apps/dashboard/routes/libraries/metadata.tsx b/src/apps/dashboard/routes/libraries/metadata.tsx index 4ac74a960..ae611329b 100644 --- a/src/apps/dashboard/routes/libraries/metadata.tsx +++ b/src/apps/dashboard/routes/libraries/metadata.tsx @@ -12,9 +12,9 @@ import { useCultures } from 'apps/dashboard/features/libraries/api/useCultures'; import { getImageResolutionOptions } from 'apps/dashboard/features/libraries/utils/metadataOptions'; import Loading from 'components/loading/LoadingComponent'; import Page from 'components/Page'; -import ServerConnections from 'components/ServerConnections'; import { QUERY_KEY, useConfiguration } from 'hooks/useConfiguration'; import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import React from 'react'; import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; import { ActionData } from 'types/actionData'; diff --git a/src/apps/dashboard/routes/libraries/nfo.tsx b/src/apps/dashboard/routes/libraries/nfo.tsx index 8d42be829..65d3bbe10 100644 --- a/src/apps/dashboard/routes/libraries/nfo.tsx +++ b/src/apps/dashboard/routes/libraries/nfo.tsx @@ -12,11 +12,11 @@ import TextField from '@mui/material/TextField'; import Typography from '@mui/material/Typography'; import Loading from 'components/loading/LoadingComponent'; import Page from 'components/Page'; -import ServerConnections from 'components/ServerConnections'; import SimpleAlert from 'components/SimpleAlert'; import { QUERY_KEY, useNamedConfiguration } from 'hooks/useNamedConfiguration'; import { useUsers } from 'hooks/useUsers'; import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import React, { useCallback, useState } from 'react'; import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; import { ActionData } from 'types/actionData'; diff --git a/src/apps/dashboard/routes/logs/index.tsx b/src/apps/dashboard/routes/logs/index.tsx index 84af1b244..68027807f 100644 --- a/src/apps/dashboard/routes/logs/index.tsx +++ b/src/apps/dashboard/routes/logs/index.tsx @@ -3,6 +3,7 @@ import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-a import Loading from 'components/loading/LoadingComponent'; import Page from 'components/Page'; import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import Alert from '@mui/material/Alert'; import Box from '@mui/material/Box'; import Button from '@mui/material/Button'; @@ -12,7 +13,6 @@ import Checkbox from '@mui/material/Checkbox'; import TextField from '@mui/material/TextField'; import Typography from '@mui/material/Typography'; import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; -import ServerConnections from 'components/ServerConnections'; import { useServerLogs } from 'apps/dashboard/features/logs/api/useServerLogs'; import { useConfiguration } from 'hooks/useConfiguration'; import type { ServerConfiguration } from '@jellyfin/sdk/lib/generated-client/models/server-configuration'; diff --git a/src/apps/dashboard/routes/playback/resume.tsx b/src/apps/dashboard/routes/playback/resume.tsx index f711ac82d..520c15eaf 100644 --- a/src/apps/dashboard/routes/playback/resume.tsx +++ b/src/apps/dashboard/routes/playback/resume.tsx @@ -1,6 +1,7 @@ import React from 'react'; import Page from 'components/Page'; import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import Alert from '@mui/material/Alert'; import Box from '@mui/material/Box'; import Button from '@mui/material/Button'; @@ -11,7 +12,6 @@ import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'rea import { ActionData } from 'types/actionData'; import { QUERY_KEY, useConfiguration } from 'hooks/useConfiguration'; import Loading from 'components/loading/LoadingComponent'; -import ServerConnections from 'components/ServerConnections'; import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api'; import { queryClient } from 'utils/query/queryClient'; diff --git a/src/apps/dashboard/routes/playback/streaming.tsx b/src/apps/dashboard/routes/playback/streaming.tsx index fdb75b834..d3d5a3f56 100644 --- a/src/apps/dashboard/routes/playback/streaming.tsx +++ b/src/apps/dashboard/routes/playback/streaming.tsx @@ -1,6 +1,7 @@ import React from 'react'; import Page from 'components/Page'; import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import Alert from '@mui/material/Alert'; import Box from '@mui/material/Box'; import Button from '@mui/material/Button'; @@ -8,7 +9,6 @@ import Stack from '@mui/material/Stack'; import TextField from '@mui/material/TextField'; import Typography from '@mui/material/Typography'; import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; -import ServerConnections from 'components/ServerConnections'; import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api'; import { QUERY_KEY, useConfiguration } from 'hooks/useConfiguration'; import Loading from 'components/loading/LoadingComponent'; diff --git a/src/apps/dashboard/routes/playback/trickplay.tsx b/src/apps/dashboard/routes/playback/trickplay.tsx index 02591d216..05984a0d7 100644 --- a/src/apps/dashboard/routes/playback/trickplay.tsx +++ b/src/apps/dashboard/routes/playback/trickplay.tsx @@ -1,6 +1,7 @@ import React from 'react'; import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; import { QUERY_KEY, useConfiguration } from 'hooks/useConfiguration'; import Page from 'components/Page'; @@ -16,7 +17,6 @@ import MenuItem from '@mui/material/MenuItem'; import TextField from '@mui/material/TextField'; import Button from '@mui/material/Button'; import Alert from '@mui/material/Alert'; -import ServerConnections from 'components/ServerConnections'; import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api'; import { TrickplayScanBehavior } from '@jellyfin/sdk/lib/generated-client/models/trickplay-scan-behavior'; import { ProcessPriorityClass } from '@jellyfin/sdk/lib/generated-client/models/process-priority-class'; diff --git a/src/apps/dashboard/routes/settings/index.tsx b/src/apps/dashboard/routes/settings/index.tsx index 2e4a31d0f..9ad2486a0 100644 --- a/src/apps/dashboard/routes/settings/index.tsx +++ b/src/apps/dashboard/routes/settings/index.tsx @@ -11,6 +11,7 @@ import Page from 'components/Page'; import { QUERY_KEY, useConfiguration } from 'hooks/useConfiguration'; import { useSystemInfo } from 'hooks/useSystemInfo'; import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import React, { useCallback, useEffect, useState } from 'react'; import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; import SearchIcon from '@mui/icons-material/Search'; @@ -21,7 +22,6 @@ import Checkbox from '@mui/material/Checkbox'; import Button from '@mui/material/Button'; import Link from '@mui/material/Link'; import DirectoryBrowser from 'components/directorybrowser/directorybrowser'; -import ServerConnections from 'components/ServerConnections'; import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api'; import { queryClient } from 'utils/query/queryClient'; import { ActionData } from 'types/actionData'; diff --git a/src/apps/dashboard/routes/users/parentalcontrol.tsx b/src/apps/dashboard/routes/users/parentalcontrol.tsx index 2e4954259..9129421fb 100644 --- a/src/apps/dashboard/routes/users/parentalcontrol.tsx +++ b/src/apps/dashboard/routes/users/parentalcontrol.tsx @@ -17,7 +17,7 @@ import CheckBoxElement from '../../../../elements/CheckBoxElement'; import SelectElement from '../../../../elements/SelectElement'; import Page from '../../../../components/Page'; import prompt from '../../../../components/prompt/prompt'; -import ServerConnections from 'components/ServerConnections'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; type NamedItem = { name: string; diff --git a/src/apps/stable/features/playback/utils/image.ts b/src/apps/stable/features/playback/utils/image.ts index 4bac595af..d35f678ee 100644 --- a/src/apps/stable/features/playback/utils/image.ts +++ b/src/apps/stable/features/playback/utils/image.ts @@ -1,7 +1,7 @@ import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind'; import { ImageType } from '@jellyfin/sdk/lib/generated-client/models/image-type'; -import ServerConnections from 'components/ServerConnections'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import type { ItemDto } from 'types/base/models/item-dto'; interface ImageOptions { diff --git a/src/apps/stable/features/playback/utils/mediaSegmentManager.ts b/src/apps/stable/features/playback/utils/mediaSegmentManager.ts index 129eda65f..85b5b8309 100644 --- a/src/apps/stable/features/playback/utils/mediaSegmentManager.ts +++ b/src/apps/stable/features/playback/utils/mediaSegmentManager.ts @@ -4,8 +4,8 @@ import { MediaSegmentType } from '@jellyfin/sdk/lib/generated-client/models/medi import { getMediaSegmentsApi } from '@jellyfin/sdk/lib/utils/api/media-segments-api'; import type { PlaybackManager } from 'components/playback/playbackmanager'; -import ServerConnections from 'components/ServerConnections'; import { TICKS_PER_MILLISECOND, TICKS_PER_SECOND } from 'constants/time'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { currentSettings as userSettings } from 'scripts/settings/userSettings'; import type { PlayerState } from 'types/playbackStopInfo'; import type { Event } from 'utils/events'; diff --git a/src/apps/wizard/controllers/finish/index.js b/src/apps/wizard/controllers/finish/index.js index 4408da2dd..05770cc15 100644 --- a/src/apps/wizard/controllers/finish/index.js +++ b/src/apps/wizard/controllers/finish/index.js @@ -1,5 +1,5 @@ import loading from 'components/loading/loading'; -import ServerConnections from 'components/ServerConnections'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; function onFinish() { loading.show(); diff --git a/src/apps/wizard/controllers/library.js b/src/apps/wizard/controllers/library.js index ccdc42b13..598fb29a5 100644 --- a/src/apps/wizard/controllers/library.js +++ b/src/apps/wizard/controllers/library.js @@ -3,8 +3,8 @@ import escapeHtml from 'escape-html'; import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUtils'; import confirm from 'components/confirm/confirm'; import loading from 'components/loading/loading'; -import ServerConnections from 'components/ServerConnections'; import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import dom from 'scripts/dom'; import taskButton from 'scripts/taskbutton'; import Dashboard, { pageClassOn, pageIdOn } from 'utils/dashboard'; diff --git a/src/apps/wizard/controllers/remote/index.js b/src/apps/wizard/controllers/remote/index.js index f836f1fa9..441d67ea1 100644 --- a/src/apps/wizard/controllers/remote/index.js +++ b/src/apps/wizard/controllers/remote/index.js @@ -1,5 +1,5 @@ import loading from 'components/loading/loading'; -import ServerConnections from 'components/ServerConnections'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import Dashboard from 'utils/dashboard'; import 'elements/emby-checkbox/emby-checkbox'; diff --git a/src/apps/wizard/controllers/settings/index.js b/src/apps/wizard/controllers/settings/index.js index f118d83ce..605910235 100644 --- a/src/apps/wizard/controllers/settings/index.js +++ b/src/apps/wizard/controllers/settings/index.js @@ -1,5 +1,5 @@ import loading from 'components/loading/loading'; -import ServerConnections from 'components/ServerConnections'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import Dashboard from 'utils/dashboard'; import 'elements/emby-button/emby-button'; diff --git a/src/apps/wizard/controllers/start/index.js b/src/apps/wizard/controllers/start/index.js index 4bd9d68a9..0311f5da6 100644 --- a/src/apps/wizard/controllers/start/index.js +++ b/src/apps/wizard/controllers/start/index.js @@ -1,5 +1,5 @@ import loading from 'components/loading/loading'; -import ServerConnections from 'components/ServerConnections'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import Dashboard from 'utils/dashboard'; import dom from 'scripts/dom'; diff --git a/src/apps/wizard/controllers/user/index.js b/src/apps/wizard/controllers/user/index.js index 1a13a790b..034f5e27e 100644 --- a/src/apps/wizard/controllers/user/index.js +++ b/src/apps/wizard/controllers/user/index.js @@ -1,7 +1,7 @@ import loading from 'components/loading/loading'; -import ServerConnections from 'components/ServerConnections'; import toast from 'components/toast/toast'; import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import Dashboard from 'utils/dashboard'; import 'styles/dashboard.scss'; diff --git a/src/components/ConnectionRequired.tsx b/src/components/ConnectionRequired.tsx index 305aeb7db..ec4e83907 100644 --- a/src/components/ConnectionRequired.tsx +++ b/src/components/ConnectionRequired.tsx @@ -4,10 +4,10 @@ import type { ApiClient, ConnectResponse } from 'jellyfin-apiclient'; import globalize from 'lib/globalize'; import { ConnectionState } from 'lib/jellyfin-apiclient/connectionState'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import alert from './alert'; import Loading from './loading/LoadingComponent'; -import ServerConnections from './ServerConnections'; enum AccessLevel { /** Requires a user with administrator access */ diff --git a/src/components/ServerContentPage.tsx b/src/components/ServerContentPage.tsx index 2880e9a30..152d23cb8 100644 --- a/src/components/ServerContentPage.tsx +++ b/src/components/ServerContentPage.tsx @@ -1,10 +1,10 @@ import { FunctionComponent, useEffect } from 'react'; import { useLocation } from 'react-router-dom'; -import ServerConnections from './ServerConnections'; import viewManager from './viewManager/viewManager'; -import globalize from '../lib/globalize'; -import type { RestoreViewFailResponse } from '../types/viewManager'; +import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import type { RestoreViewFailResponse } from 'types/viewManager'; interface ServerContentPageProps { view: string diff --git a/src/components/activitylog.js b/src/components/activitylog.js index 36f17c880..4afc28fdb 100644 --- a/src/components/activitylog.js +++ b/src/components/activitylog.js @@ -1,12 +1,12 @@ import escapeHtml from 'escape-html'; import Events from '../utils/events.ts'; import globalize from '../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import dom from '../scripts/dom'; import { formatRelative } from 'date-fns'; import serverNotifications from '../scripts/serverNotifications'; import '../elements/emby-button/emby-button'; import './listview/listview.scss'; -import ServerConnections from './ServerConnections'; import alert from './alert'; import { getLocale } from '../utils/dateFnsLocale.ts'; import { toBoolean } from '../utils/string.ts'; diff --git a/src/components/backdrop/backdrop.js b/src/components/backdrop/backdrop.js index f99a46a5b..14d71298e 100644 --- a/src/components/backdrop/backdrop.js +++ b/src/components/backdrop/backdrop.js @@ -1,9 +1,9 @@ import isEqual from 'lodash-es/isEqual'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import browser from '../../scripts/browser'; import { playbackManager } from '../playback/playbackmanager'; import dom from '../../scripts/dom'; import * as userSettings from '../../scripts/settings/userSettings'; -import ServerConnections from '../ServerConnections'; import './backdrop.scss'; diff --git a/src/components/cardbuilder/cardBuilder.js b/src/components/cardbuilder/cardBuilder.js index 1f7da1655..6882a8409 100644 --- a/src/components/cardbuilder/cardBuilder.js +++ b/src/components/cardbuilder/cardBuilder.js @@ -12,6 +12,7 @@ import browser from 'scripts/browser'; import datetime from 'scripts/datetime'; import dom from 'scripts/dom'; import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { getBackdropShape, getPortraitShape, getSquareShape } from 'utils/card'; import { getItemTypeIcon, getLibraryIcon } from 'utils/image'; @@ -22,7 +23,6 @@ import itemHelper from '../itemHelper'; import layoutManager from '../layoutManager'; import { playbackManager } from '../playback/playbackmanager'; import { appRouter } from '../router/appRouter'; -import ServerConnections from '../ServerConnections'; import itemShortcuts from '../shortcuts'; import 'elements/emby-button/paper-icon-button-light'; diff --git a/src/components/cardbuilder/chaptercardbuilder.js b/src/components/cardbuilder/chaptercardbuilder.js index 21535adc8..5249e00a4 100644 --- a/src/components/cardbuilder/chaptercardbuilder.js +++ b/src/components/cardbuilder/chaptercardbuilder.js @@ -5,11 +5,12 @@ */ import escapeHtml from 'escape-html'; + +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import datetime from '../../scripts/datetime'; import imageLoader from '../images/imageLoader'; import layoutManager from '../layoutManager'; import browser from '../../scripts/browser'; -import ServerConnections from '../ServerConnections'; const enableFocusTransform = !browser.slow && !browser.edge; diff --git a/src/components/channelMapper/channelMapper.js b/src/components/channelMapper/channelMapper.js index 762ca0b75..0195aa47c 100644 --- a/src/components/channelMapper/channelMapper.js +++ b/src/components/channelMapper/channelMapper.js @@ -3,6 +3,7 @@ import dom from '../../scripts/dom'; import dialogHelper from '../dialogHelper/dialogHelper'; import loading from '../loading/loading'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import actionsheet from '../actionSheet/actionSheet'; import '../../elements/emby-input/emby-input'; import '../../elements/emby-button/paper-icon-button-light'; @@ -10,7 +11,6 @@ import '../../elements/emby-button/emby-button'; import '../listview/listview.scss'; import 'material-design-icons-iconfont'; import '../formdialog.scss'; -import ServerConnections from '../ServerConnections'; export default class ChannelMapper { constructor(options) { diff --git a/src/components/collectionEditor/collectionEditor.js b/src/components/collectionEditor/collectionEditor.js index 703c60df7..ff4a69abd 100644 --- a/src/components/collectionEditor/collectionEditor.js +++ b/src/components/collectionEditor/collectionEditor.js @@ -5,6 +5,7 @@ import loading from '../loading/loading'; import layoutManager from '../layoutManager'; import { appRouter } from '../router/appRouter'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import '../../elements/emby-button/emby-button'; import '../../elements/emby-button/paper-icon-button-light'; import '../../elements/emby-checkbox/emby-checkbox'; @@ -13,7 +14,6 @@ import '../../elements/emby-select/emby-select'; import 'material-design-icons-iconfont'; import '../formdialog.scss'; import '../../styles/flexstyles.scss'; -import ServerConnections from '../ServerConnections'; import toast from '../toast/toast'; let currentServerId; diff --git a/src/components/displaySettings/displaySettings.js b/src/components/displaySettings/displaySettings.js index 354ef54d0..aea0137b4 100644 --- a/src/components/displaySettings/displaySettings.js +++ b/src/components/displaySettings/displaySettings.js @@ -6,6 +6,7 @@ import { appHost } from '../apphost'; import focusManager from '../focusManager'; import datetime from '../../scripts/datetime'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import loading from '../loading/loading'; import skinManager from '../../scripts/themeManager'; import { PluginType } from '../../types/plugin.ts'; @@ -14,7 +15,6 @@ import '../../elements/emby-select/emby-select'; import '../../elements/emby-checkbox/emby-checkbox'; import '../../elements/emby-button/emby-button'; import '../../elements/emby-textarea/emby-textarea'; -import ServerConnections from '../ServerConnections'; import toast from '../toast/toast'; import template from './displaySettings.template.html'; diff --git a/src/components/filterdialog/filterdialog.js b/src/components/filterdialog/filterdialog.js index e52dcebc9..02a0828da 100644 --- a/src/components/filterdialog/filterdialog.js +++ b/src/components/filterdialog/filterdialog.js @@ -1,12 +1,12 @@ import dom from '../../scripts/dom'; import dialogHelper from '../dialogHelper/dialogHelper'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import union from 'lodash-es/union'; import Events from '../../utils/events.ts'; import '../../elements/emby-checkbox/emby-checkbox'; import '../../elements/emby-collapse/emby-collapse'; import './style.scss'; -import ServerConnections from '../ServerConnections'; import template from './filterdialog.template.html'; import { stopMultiSelect } from '../../components/multiSelect/multiSelect'; diff --git a/src/components/filtermenu/filtermenu.js b/src/components/filtermenu/filtermenu.js index 5d7609f9f..e1891caeb 100644 --- a/src/components/filtermenu/filtermenu.js +++ b/src/components/filtermenu/filtermenu.js @@ -5,6 +5,7 @@ import dialogHelper from '../dialogHelper/dialogHelper'; import inputManager from '../../scripts/inputManager'; import layoutManager from '../layoutManager'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import * as userSettings from '../../scripts/settings/userSettings'; import '../../elements/emby-checkbox/emby-checkbox'; import '../../elements/emby-input/emby-input'; @@ -14,7 +15,6 @@ import '../../elements/emby-select/emby-select'; import 'material-design-icons-iconfont'; import '../formdialog.scss'; import '../../styles/flexstyles.scss'; -import ServerConnections from '../ServerConnections'; import template from './filtermenu.template.html'; function onSubmit(e) { diff --git a/src/components/groupedcards.js b/src/components/groupedcards.js index 9167dc3ec..1594353ba 100644 --- a/src/components/groupedcards.js +++ b/src/components/groupedcards.js @@ -1,7 +1,7 @@ +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import dom from '../scripts/dom'; import { appRouter } from './router/appRouter'; import Dashboard from '../utils/dashboard'; -import ServerConnections from './ServerConnections'; function onGroupedCardClick(e, card) { const itemId = card.getAttribute('data-id'); diff --git a/src/components/guide/guide.js b/src/components/guide/guide.js index 0b72fc023..ccb1ba06c 100644 --- a/src/components/guide/guide.js +++ b/src/components/guide/guide.js @@ -2,6 +2,7 @@ import escapeHtml from 'escape-html'; import inputManager from '../../scripts/inputManager'; import browser from '../../scripts/browser'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import Events from '../../utils/events.ts'; import scrollHelper from '../../scripts/scrollHelper'; import serverNotifications from '../../scripts/serverNotifications'; @@ -25,7 +26,6 @@ import '../../elements/emby-tabs/emby-tabs'; import '../../elements/emby-scroller/emby-scroller'; import '../../styles/flexstyles.scss'; import 'webcomponents.js/webcomponents-lite'; -import ServerConnections from '../ServerConnections'; import template from './tvguide.template.html'; function showViewSettings(instance) { diff --git a/src/components/homeScreenSettings/homeScreenSettings.js b/src/components/homeScreenSettings/homeScreenSettings.js index 74b5c82ce..ea4aefe08 100644 --- a/src/components/homeScreenSettings/homeScreenSettings.js +++ b/src/components/homeScreenSettings/homeScreenSettings.js @@ -2,6 +2,7 @@ import escapeHtml from 'escape-html'; import { getUserViewsQuery } from 'hooks/useUserViews'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { toApi } from 'utils/jellyfin-apiclient/compat'; import { queryClient } from 'utils/query/queryClient'; @@ -15,7 +16,6 @@ import dom from '../../scripts/dom'; import '../listview/listview.scss'; import '../../elements/emby-select/emby-select'; import '../../elements/emby-checkbox/emby-checkbox'; -import ServerConnections from '../ServerConnections'; import toast from '../toast/toast'; import template from './homeScreenSettings.template.html'; import { LibraryTab } from '../../types/libraryTab.ts'; diff --git a/src/components/homesections/sections/activeRecordings.ts b/src/components/homesections/sections/activeRecordings.ts index 45989f298..c4bf5f9b1 100644 --- a/src/components/homesections/sections/activeRecordings.ts +++ b/src/components/homesections/sections/activeRecordings.ts @@ -1,9 +1,9 @@ import type { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base-item-dto'; import type { ApiClient } from 'jellyfin-apiclient'; -import ServerConnections from 'components/ServerConnections'; import cardBuilder from 'components/cardbuilder/cardBuilder'; import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import type { SectionContainerElement, SectionOptions } from './section'; diff --git a/src/components/homesections/sections/liveTv.ts b/src/components/homesections/sections/liveTv.ts index e09f812fd..140723e7f 100644 --- a/src/components/homesections/sections/liveTv.ts +++ b/src/components/homesections/sections/liveTv.ts @@ -5,8 +5,8 @@ import type { ApiClient } from 'jellyfin-apiclient'; import { appRouter } from 'components/router/appRouter'; import cardBuilder from 'components/cardbuilder/cardBuilder'; import layoutManager from 'components/layoutManager'; -import ServerConnections from 'components/ServerConnections'; import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { getBackdropShape } from 'utils/card'; import type { SectionContainerElement, SectionOptions } from './section'; diff --git a/src/components/homesections/sections/nextUp.ts b/src/components/homesections/sections/nextUp.ts index fbf1443e2..0ab23c4bb 100644 --- a/src/components/homesections/sections/nextUp.ts +++ b/src/components/homesections/sections/nextUp.ts @@ -4,8 +4,8 @@ import type { ApiClient } from 'jellyfin-apiclient'; import cardBuilder from 'components/cardbuilder/cardBuilder'; import layoutManager from 'components/layoutManager'; import { appRouter } from 'components/router/appRouter'; -import ServerConnections from 'components/ServerConnections'; import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import type { UserSettings } from 'scripts/settings/userSettings'; import { getBackdropShape } from 'utils/card'; diff --git a/src/components/homesections/sections/recentlyAdded.ts b/src/components/homesections/sections/recentlyAdded.ts index 27d16d161..f0b71b943 100644 --- a/src/components/homesections/sections/recentlyAdded.ts +++ b/src/components/homesections/sections/recentlyAdded.ts @@ -5,11 +5,11 @@ import { CollectionType } from '@jellyfin/sdk/lib/generated-client/models/collec import escapeHtml from 'escape-html'; import type { ApiClient } from 'jellyfin-apiclient'; +import cardBuilder from 'components/cardbuilder/cardBuilder'; import layoutManager from 'components/layoutManager'; import { appRouter } from 'components/router/appRouter'; import globalize from 'lib/globalize'; -import ServerConnections from 'components/ServerConnections'; -import cardBuilder from 'components/cardbuilder/cardBuilder'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { getBackdropShape, getPortraitShape, getSquareShape } from 'utils/card'; import type { SectionContainerElement, SectionOptions } from './section'; diff --git a/src/components/homesections/sections/resume.ts b/src/components/homesections/sections/resume.ts index 249cad2d0..c58ee4a71 100644 --- a/src/components/homesections/sections/resume.ts +++ b/src/components/homesections/sections/resume.ts @@ -2,9 +2,9 @@ import type { BaseItemDto } from '@jellyfin/sdk/lib/generated-client/models/base import type { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind'; import type { ApiClient } from 'jellyfin-apiclient'; -import ServerConnections from 'components/ServerConnections'; import cardBuilder from 'components/cardbuilder/cardBuilder'; import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import type { UserSettings } from 'scripts/settings/userSettings'; import { getBackdropShape, getPortraitShape } from 'utils/card'; diff --git a/src/components/imageDownloader/imageDownloader.js b/src/components/imageDownloader/imageDownloader.js index cd05ec57e..5c82419f8 100644 --- a/src/components/imageDownloader/imageDownloader.js +++ b/src/components/imageDownloader/imageDownloader.js @@ -7,12 +7,12 @@ import browser from '../../scripts/browser'; import layoutManager from '../layoutManager'; import scrollHelper from '../../scripts/scrollHelper'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import '../../elements/emby-checkbox/emby-checkbox'; import '../../elements/emby-button/paper-icon-button-light'; import '../../elements/emby-button/emby-button'; import '../formdialog.scss'; import '../cardbuilder/card.scss'; -import ServerConnections from '../ServerConnections'; import template from './imageDownloader.template.html'; const enableFocusTransform = !browser.slow && !browser.edge; diff --git a/src/components/imageUploader/imageUploader.js b/src/components/imageUploader/imageUploader.js index cc211fde9..b4e84c00e 100644 --- a/src/components/imageUploader/imageUploader.js +++ b/src/components/imageUploader/imageUploader.js @@ -10,11 +10,12 @@ import loading from '../loading/loading'; import scrollHelper from '../../scripts/scrollHelper'; import layoutManager from '../layoutManager'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; + import '../../elements/emby-button/emby-button'; import '../../elements/emby-select/emby-select'; import '../formdialog.scss'; import './style.scss'; -import ServerConnections from '../ServerConnections'; import toast from '../toast/toast'; import template from './imageUploader.template.html'; diff --git a/src/components/imageeditor/imageeditor.js b/src/components/imageeditor/imageeditor.js index c975cdd7d..ab9f1ae93 100644 --- a/src/components/imageeditor/imageeditor.js +++ b/src/components/imageeditor/imageeditor.js @@ -4,6 +4,7 @@ import dom from '../../scripts/dom'; import layoutManager from '../layoutManager'; import focusManager from '../focusManager'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import scrollHelper from '../../scripts/scrollHelper'; import imageLoader from '../images/imageLoader'; import browser from '../../scripts/browser'; @@ -13,7 +14,6 @@ import '../formdialog.scss'; import '../../elements/emby-button/emby-button'; import '../../elements/emby-button/paper-icon-button-light'; import './imageeditor.scss'; -import ServerConnections from '../ServerConnections'; import alert from '../alert'; import confirm from '../confirm/confirm'; import template from './imageeditor.template.html'; diff --git a/src/components/itemContextMenu.js b/src/components/itemContextMenu.js index adba9ab0e..9b1368ceb 100644 --- a/src/components/itemContextMenu.js +++ b/src/components/itemContextMenu.js @@ -2,12 +2,12 @@ import browser from '../scripts/browser'; import { copy } from '../scripts/clipboard'; import dom from '../scripts/dom'; import globalize from '../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import actionsheet from './actionSheet/actionSheet'; import { appHost } from './apphost'; import { appRouter } from './router/appRouter'; import itemHelper, { canEditPlaylist } from './itemHelper'; import { playbackManager } from './playback/playbackmanager'; -import ServerConnections from './ServerConnections'; import toast from './toast/toast'; import * as userSettings from '../scripts/settings/userSettings'; import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind'; diff --git a/src/components/itemHelper.js b/src/components/itemHelper.js index 2a93c36e7..c1e87dea1 100644 --- a/src/components/itemHelper.js +++ b/src/components/itemHelper.js @@ -7,7 +7,7 @@ import { getPlaylistsApi } from '@jellyfin/sdk/lib/utils/api/playlists-api'; import { appHost } from './apphost'; import globalize from 'lib/globalize'; -import ServerConnections from './ServerConnections'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { toApi } from 'utils/jellyfin-apiclient/compat'; export function getDisplayName(item, options = {}) { diff --git a/src/components/itemMediaInfo/itemMediaInfo.js b/src/components/itemMediaInfo/itemMediaInfo.js index f77395abf..95e2af29f 100644 --- a/src/components/itemMediaInfo/itemMediaInfo.js +++ b/src/components/itemMediaInfo/itemMediaInfo.js @@ -11,6 +11,7 @@ import toast from '../toast/toast'; import { copy } from '../../scripts/clipboard'; import dom from '../../scripts/dom'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import itemHelper from '../../components/itemHelper'; import loading from '../loading/loading'; import '../../elements/emby-select/emby-select'; @@ -20,7 +21,6 @@ import '../../elements/emby-button/paper-icon-button-light'; import '../formdialog.scss'; import 'material-design-icons-iconfont'; import '../../styles/flexstyles.scss'; -import ServerConnections from '../ServerConnections'; import template from './itemMediaInfo.template.html'; // Do not add extra spaces between tags - they will be copied into the result diff --git a/src/components/itemidentifier/itemidentifier.js b/src/components/itemidentifier/itemidentifier.js index 506c1c284..2cfebb1f8 100644 --- a/src/components/itemidentifier/itemidentifier.js +++ b/src/components/itemidentifier/itemidentifier.js @@ -8,6 +8,7 @@ import escapeHtml from 'escape-html'; import dialogHelper from '../dialogHelper/dialogHelper'; import loading from '../loading/loading'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import scrollHelper from '../../scripts/scrollHelper'; import layoutManager from '../layoutManager'; import focusManager from '../focusManager'; @@ -18,7 +19,6 @@ import '../../elements/emby-button/paper-icon-button-light'; import '../formdialog.scss'; import 'material-design-icons-iconfont'; import '../cardbuilder/card.scss'; -import ServerConnections from '../ServerConnections'; import toast from '../toast/toast'; import template from './itemidentifier.template.html'; import datetime from '../../scripts/datetime'; diff --git a/src/components/listview/listview.js b/src/components/listview/listview.js index 916b9a44a..d501c3180 100644 --- a/src/components/listview/listview.js +++ b/src/components/listview/listview.js @@ -10,12 +10,12 @@ import mediaInfo from '../mediainfo/mediainfo'; import indicators from '../indicators/indicators'; import layoutManager from '../layoutManager'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import datetime from '../../scripts/datetime'; import cardBuilder from '../cardbuilder/cardBuilder'; import './listview.scss'; import '../../elements/emby-ratingbutton/emby-ratingbutton'; import '../../elements/emby-playstatebutton/emby-playstatebutton'; -import ServerConnections from '../ServerConnections'; import { getDefaultBackgroundClass } from '../cardbuilder/cardBuilderUtils'; import markdownIt from 'markdown-it'; import DOMPurify from 'dompurify'; diff --git a/src/components/lyricseditor/lyricseditor.js b/src/components/lyricseditor/lyricseditor.js index f2e37175f..9fcbde190 100644 --- a/src/components/lyricseditor/lyricseditor.js +++ b/src/components/lyricseditor/lyricseditor.js @@ -5,6 +5,7 @@ import { toApi } from 'utils/jellyfin-apiclient/compat'; import dialogHelper from '../dialogHelper/dialogHelper'; import layoutManager from '../layoutManager'; import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import loading from '../loading/loading'; import focusManager from '../focusManager'; import dom from '../../scripts/dom'; @@ -16,7 +17,6 @@ import 'material-design-icons-iconfont'; import './lyricseditor.scss'; import '../../elements/emby-button/emby-button'; import '../../styles/flexstyles.scss'; -import ServerConnections from '../ServerConnections'; import toast from '../toast/toast'; import template from './lyricseditor.template.html'; import templatePreview from './lyricspreview.template.html'; diff --git a/src/components/lyricsuploader/lyricsuploader.js b/src/components/lyricsuploader/lyricsuploader.js index 6d6030a7b..85b5fc692 100644 --- a/src/components/lyricsuploader/lyricsuploader.js +++ b/src/components/lyricsuploader/lyricsuploader.js @@ -3,12 +3,12 @@ import escapeHtml from 'escape-html'; import { getLyricsApi } from '@jellyfin/sdk/lib/utils/api/lyrics-api'; import { toApi } from 'utils/jellyfin-apiclient/compat'; import dialogHelper from '../../components/dialogHelper/dialogHelper'; -import ServerConnections from '../ServerConnections'; import dom from '../../scripts/dom'; import loading from '../../components/loading/loading'; import scrollHelper from '../../scripts/scrollHelper'; import layoutManager from '../layoutManager'; import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import template from './lyricsuploader.template.html'; import toast from '../toast/toast'; import '../../elements/emby-button/emby-button'; diff --git a/src/components/metadataEditor/metadataEditor.js b/src/components/metadataEditor/metadataEditor.js index 4dea1b00d..912ffef1d 100644 --- a/src/components/metadataEditor/metadataEditor.js +++ b/src/components/metadataEditor/metadataEditor.js @@ -6,6 +6,8 @@ import datetime from '../../scripts/datetime'; import loading from '../loading/loading'; import focusManager from '../focusManager'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; + import '../../elements/emby-checkbox/emby-checkbox'; import '../../elements/emby-input/emby-input'; import '../../elements/emby-select/emby-select'; @@ -17,7 +19,6 @@ import '../formdialog.scss'; import '../../styles/clearbutton.scss'; import '../../styles/flexstyles.scss'; import './style.scss'; -import ServerConnections from '../ServerConnections'; import toast from '../toast/toast'; import { appRouter } from '../router/appRouter'; import template from './metadataEditor.template.html'; diff --git a/src/components/multiSelect/multiSelect.js b/src/components/multiSelect/multiSelect.js index efcb17265..1a0800ae1 100644 --- a/src/components/multiSelect/multiSelect.js +++ b/src/components/multiSelect/multiSelect.js @@ -2,9 +2,9 @@ import browser from '../../scripts/browser'; import { appHost } from '../apphost'; import loading from '../loading/loading'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import dom from '../../scripts/dom'; import './multiSelect.scss'; -import ServerConnections from '../ServerConnections'; import alert from '../alert'; import confirm from '../confirm/confirm'; import itemHelper from '../itemHelper'; diff --git a/src/components/notifications/notifications.js b/src/components/notifications/notifications.js index 9c8982b51..609f96ace 100644 --- a/src/components/notifications/notifications.js +++ b/src/components/notifications/notifications.js @@ -2,8 +2,8 @@ import serverNotifications from '../../scripts/serverNotifications'; import { playbackManager } from '../playback/playbackmanager'; import Events from '../../utils/events.ts'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { getItems } from '../../utils/jellyfin-apiclient/getItems.ts'; -import ServerConnections from '../../components/ServerConnections'; import NotificationIcon from './notificationicon.png'; diff --git a/src/components/nowPlayingBar/nowPlayingBar.js b/src/components/nowPlayingBar/nowPlayingBar.js index c16b167d0..72f6375d4 100644 --- a/src/components/nowPlayingBar/nowPlayingBar.js +++ b/src/components/nowPlayingBar/nowPlayingBar.js @@ -1,6 +1,7 @@ import { getImageUrl } from 'apps/stable/features/playback/utils/image'; import { getItemTextLines } from 'apps/stable/features/playback/utils/itemText'; import { appRouter, isLyricsPage } from 'components/router/appRouter'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import datetime from '../../scripts/datetime'; import Events from '../../utils/events.ts'; @@ -14,7 +15,6 @@ import globalize from 'lib/globalize'; import itemContextMenu from '../itemContextMenu'; import '../../elements/emby-button/paper-icon-button-light'; import '../../elements/emby-ratingbutton/emby-ratingbutton'; -import ServerConnections from '../ServerConnections'; import appFooter from '../appFooter/appFooter'; import itemShortcuts from '../shortcuts'; import './nowPlayingBar.scss'; diff --git a/src/components/playback/displayMirrorManager.ts b/src/components/playback/displayMirrorManager.ts index 00856421f..cda68897a 100644 --- a/src/components/playback/displayMirrorManager.ts +++ b/src/components/playback/displayMirrorManager.ts @@ -1,5 +1,5 @@ -import ServerConnections from 'components/ServerConnections'; import { getItemQuery } from 'hooks/useItem'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { toApi } from 'utils/jellyfin-apiclient/compat'; import { queryClient } from 'utils/query/queryClient'; diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index f4e8ec02c..d181e2619 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -1,3 +1,4 @@ +import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind.js'; import { PlaybackErrorCode } from '@jellyfin/sdk/lib/generated-client/models/playback-error-code.js'; import { getMediaInfoApi } from '@jellyfin/sdk/lib/utils/api/media-info-api'; import { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type'; @@ -14,7 +15,6 @@ import * as userSettings from '../../scripts/settings/userSettings'; import globalize from '../../lib/globalize'; import loading from '../loading/loading'; import { appHost } from '../apphost'; -import ServerConnections from '../ServerConnections'; import alert from '../alert'; import { PluginType } from '../../types/plugin.ts'; import { includesAny } from '../../utils/container.ts'; @@ -24,10 +24,10 @@ import { getItemBackdropImageUrl } from '../../utils/jellyfin-apiclient/backdrop import { PlayerEvent } from 'apps/stable/features/playback/constants/playerEvent'; import { bindMediaSegmentManager } from 'apps/stable/features/playback/utils/mediaSegmentManager'; import { bindMediaSessionSubscriber } from 'apps/stable/features/playback/utils/mediaSessionSubscriber'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { MediaError } from 'types/mediaError'; import { getMediaError } from 'utils/mediaError'; import { toApi } from 'utils/jellyfin-apiclient/compat'; -import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind.js'; import { bindSkipSegment } from './skipsegment.ts'; const UNLIMITED_ITEMS = -1; diff --git a/src/components/playback/playersettingsmenu.js b/src/components/playback/playersettingsmenu.js index dc92de54d..8c6134969 100644 --- a/src/components/playback/playersettingsmenu.js +++ b/src/components/playback/playersettingsmenu.js @@ -1,8 +1,8 @@ import actionsheet from '../actionSheet/actionSheet'; import { playbackManager } from '../playback/playbackmanager'; -import globalize from '../../lib/globalize'; +import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import qualityoptions from '../qualityOptions'; -import ServerConnections from '../ServerConnections'; function showQualityMenu(player, btn) { const videoStream = playbackManager.currentMediaSource(player).MediaStreams.filter(function (stream) { diff --git a/src/components/playbackSettings/playbackSettings.js b/src/components/playbackSettings/playbackSettings.js index f15627a3e..e67647fcd 100644 --- a/src/components/playbackSettings/playbackSettings.js +++ b/src/components/playbackSettings/playbackSettings.js @@ -3,6 +3,7 @@ import escapeHTML from 'escape-html'; import { MediaSegmentAction } from 'apps/stable/features/playback/constants/mediaSegmentAction'; import { getId, getMediaSegmentAction } from 'apps/stable/features/playback/utils/mediaSegmentSettings'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import appSettings from '../../scripts/settings/appSettings'; import { appHost } from '../apphost'; @@ -12,7 +13,6 @@ import qualityoptions from '../qualityOptions'; import globalize from '../../lib/globalize'; import loading from '../loading/loading'; import Events from '../../utils/events.ts'; -import ServerConnections from '../ServerConnections'; import toast from '../toast/toast'; import template from './playbackSettings.template.html'; diff --git a/src/components/playerstats/playerstats.js b/src/components/playerstats/playerstats.js index 663c1932e..b67a7c863 100644 --- a/src/components/playerstats/playerstats.js +++ b/src/components/playerstats/playerstats.js @@ -1,13 +1,14 @@ import '../../elements/emby-button/paper-icon-button-light'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import Events from '../../utils/events.ts'; import layoutManager from '../layoutManager'; import { playbackManager } from '../playback/playbackmanager'; import playMethodHelper from '../playback/playmethodhelper'; import { pluginManager } from '../pluginManager'; import { PluginType } from '../../types/plugin.ts'; + import './playerstats.scss'; -import ServerConnections from '../ServerConnections'; function init(instance) { const parent = document.createElement('div'); diff --git a/src/components/playlisteditor/playlisteditor.ts b/src/components/playlisteditor/playlisteditor.ts index 629790695..99836cf9c 100644 --- a/src/components/playlisteditor/playlisteditor.ts +++ b/src/components/playlisteditor/playlisteditor.ts @@ -8,6 +8,7 @@ import escapeHtml from 'escape-html'; import toast from 'components/toast/toast'; import dom from 'scripts/dom'; import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { currentSettings as userSettings } from 'scripts/settings/userSettings'; import { PluginType } from 'types/plugin'; import { toApi } from 'utils/jellyfin-apiclient/compat'; @@ -19,7 +20,6 @@ import layoutManager from '../layoutManager'; import { playbackManager } from '../playback/playbackmanager'; import { pluginManager } from '../pluginManager'; import { appRouter } from '../router/appRouter'; -import ServerConnections from '../ServerConnections'; import 'elements/emby-button/emby-button'; import 'elements/emby-input/emby-input'; diff --git a/src/components/pluginManager.js b/src/components/pluginManager.js index ce42c806d..811e82a74 100644 --- a/src/components/pluginManager.js +++ b/src/components/pluginManager.js @@ -8,8 +8,8 @@ import { appRouter } from './router/appRouter'; import * as inputManager from '../scripts/inputManager'; import toast from '../components/toast/toast'; import confirm from '../components/confirm/confirm'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import * as dashboard from '../utils/dashboard'; -import ServerConnections from '../components/ServerConnections'; // TODO: replace with each plugin version const cacheParam = new Date().getTime(); diff --git a/src/components/recordingcreator/recordingbutton.js b/src/components/recordingcreator/recordingbutton.js index f2d5376ea..b78e3b9f9 100644 --- a/src/components/recordingcreator/recordingbutton.js +++ b/src/components/recordingcreator/recordingbutton.js @@ -1,9 +1,10 @@ +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import dom from '../../scripts/dom'; import recordingHelper from './recordinghelper'; + import '../../elements/emby-button/paper-icon-button-light'; import '../../elements/emby-button/emby-button'; import './recordingfields.scss'; -import ServerConnections from '../ServerConnections'; function onRecordingButtonClick() { const item = this.item; diff --git a/src/components/recordingcreator/recordingcreator.js b/src/components/recordingcreator/recordingcreator.js index d69043f60..cc040aa64 100644 --- a/src/components/recordingcreator/recordingcreator.js +++ b/src/components/recordingcreator/recordingcreator.js @@ -1,5 +1,6 @@ import dialogHelper from '../dialogHelper/dialogHelper'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import layoutManager from '../layoutManager'; import mediaInfo from '../mediainfo/mediainfo'; import loading from '../loading/loading'; @@ -8,6 +9,7 @@ import datetime from '../../scripts/datetime'; import imageLoader from '../images/imageLoader'; import RecordingFields from './recordingfields'; import Events from '../../utils/events.ts'; + import '../../elements/emby-button/emby-button'; import '../../elements/emby-button/paper-icon-button-light'; import '../../elements/emby-checkbox/emby-checkbox'; @@ -16,7 +18,6 @@ import '../../elements/emby-input/emby-input'; import '../formdialog.scss'; import './recordingcreator.scss'; import 'material-design-icons-iconfont'; -import ServerConnections from '../ServerConnections'; import { playbackManager } from '../playback/playbackmanager'; import template from './recordingcreator.template.html'; diff --git a/src/components/recordingcreator/recordingeditor.js b/src/components/recordingcreator/recordingeditor.js index 442fe8663..af71d102d 100644 --- a/src/components/recordingcreator/recordingeditor.js +++ b/src/components/recordingcreator/recordingeditor.js @@ -1,9 +1,11 @@ import dialogHelper from '../dialogHelper/dialogHelper'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import layoutManager from '../layoutManager'; import loading from '../loading/loading'; import scrollHelper from '../../scripts/scrollHelper'; + import '../../styles/scrollstyles.scss'; import '../../elements/emby-button/emby-button'; import '../../elements/emby-collapse/emby-collapse'; @@ -13,7 +15,6 @@ import '../formdialog.scss'; import './recordingcreator.scss'; import 'material-design-icons-iconfont'; import '../../styles/flexstyles.scss'; -import ServerConnections from '../ServerConnections'; import template from './recordingeditor.template.html'; let currentDialog; diff --git a/src/components/recordingcreator/recordingfields.js b/src/components/recordingcreator/recordingfields.js index 19249218b..b443698d1 100644 --- a/src/components/recordingcreator/recordingfields.js +++ b/src/components/recordingcreator/recordingfields.js @@ -1,14 +1,15 @@ import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import Events from '../../utils/events.ts'; import serverNotifications from '../../scripts/serverNotifications'; import loading from '../loading/loading'; import dom from '../../scripts/dom'; import recordingHelper from './recordinghelper'; + import '../../elements/emby-button/emby-button'; import '../../elements/emby-button/paper-icon-button-light'; import './recordingfields.scss'; import '../../styles/flexstyles.scss'; -import ServerConnections from '../ServerConnections'; import toast from '../toast/toast'; import template from './recordingfields.template.html'; diff --git a/src/components/recordingcreator/recordinghelper.js b/src/components/recordingcreator/recordinghelper.js index 3c593a18a..55aa52c0c 100644 --- a/src/components/recordingcreator/recordinghelper.js +++ b/src/components/recordingcreator/recordinghelper.js @@ -1,6 +1,6 @@ -import globalize from '../../lib/globalize'; +import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import loading from '../loading/loading'; -import ServerConnections from '../ServerConnections'; import toast from '../toast/toast'; import confirm from '../confirm/confirm'; import dialog from '../dialog/dialog'; diff --git a/src/components/recordingcreator/seriesrecordingeditor.js b/src/components/recordingcreator/seriesrecordingeditor.js index 30c8e3936..ccc2d6940 100644 --- a/src/components/recordingcreator/seriesrecordingeditor.js +++ b/src/components/recordingcreator/seriesrecordingeditor.js @@ -1,9 +1,11 @@ import dialogHelper from '../dialogHelper/dialogHelper'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import layoutManager from '../layoutManager'; import loading from '../loading/loading'; import scrollHelper from '../../scripts/scrollHelper'; import datetime from '../../scripts/datetime'; + import '../../styles/scrollstyles.scss'; import '../../elements/emby-button/emby-button'; import '../../elements/emby-checkbox/emby-checkbox'; @@ -14,7 +16,6 @@ import '../formdialog.scss'; import './recordingcreator.scss'; import 'material-design-icons-iconfont'; import '../../styles/flexstyles.scss'; -import ServerConnections from '../ServerConnections'; import template from './seriesrecordingeditor.template.html'; let currentDialog; diff --git a/src/components/refreshdialog/refreshdialog.js b/src/components/refreshdialog/refreshdialog.js index 65997a31a..67f4bd4a4 100644 --- a/src/components/refreshdialog/refreshdialog.js +++ b/src/components/refreshdialog/refreshdialog.js @@ -3,6 +3,8 @@ import dialogHelper from '../dialogHelper/dialogHelper'; import loading from '../loading/loading'; import layoutManager from '../layoutManager'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; + import '../../elements/emby-input/emby-input'; import '../../elements/emby-button/emby-button'; import '../../elements/emby-button/paper-icon-button-light'; @@ -10,7 +12,6 @@ import '../../elements/emby-checkbox/emby-checkbox'; import '../../elements/emby-select/emby-select'; import 'material-design-icons-iconfont'; import '../formdialog.scss'; -import ServerConnections from '../ServerConnections'; import toast from '../toast/toast'; function getEditorHtml() { diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index b4344b5f1..76beb45ab 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -11,9 +11,11 @@ import { playbackManager } from '../playback/playbackmanager'; import Events from '../../utils/events.ts'; import { appHost } from '../apphost'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import layoutManager from '../layoutManager'; import * as userSettings from '../../scripts/settings/userSettings'; import itemContextMenu from '../itemContextMenu'; + import '../cardbuilder/card.scss'; import '../../elements/emby-button/emby-button'; import '../../elements/emby-button/paper-icon-button-light'; @@ -21,7 +23,6 @@ import '../../elements/emby-itemscontainer/emby-itemscontainer'; import './remotecontrol.scss'; import '../../elements/emby-ratingbutton/emby-ratingbutton'; import '../../elements/emby-slider/emby-slider'; -import ServerConnections from '../ServerConnections'; import toast from '../toast/toast'; import { appRouter } from '../router/appRouter'; import { getDefaultBackgroundClass } from '../cardbuilder/cardBuilderUtils'; diff --git a/src/components/router/appRouter.js b/src/components/router/appRouter.js index 29f3cf4f4..23013117b 100644 --- a/src/components/router/appRouter.js +++ b/src/components/router/appRouter.js @@ -4,12 +4,12 @@ import { setBackdropTransparency } from '../backdrop/backdrop'; import globalize from '../../lib/globalize'; import itemHelper from '../itemHelper'; import loading from '../loading/loading'; -import ServerConnections from '../ServerConnections'; import alert from '../alert'; -import { queryClient } from 'utils/query/queryClient'; import { getItemQuery } from 'hooks/useItem'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { toApi } from 'utils/jellyfin-apiclient/compat'; +import { queryClient } from 'utils/query/queryClient'; import { history } from 'RootAppRouter'; /** Pages of "no return" (when "Go back" should behave differently, probably quitting the application). */ diff --git a/src/components/shortcuts.js b/src/components/shortcuts.js index d76fa0c81..82386c503 100644 --- a/src/components/shortcuts.js +++ b/src/components/shortcuts.js @@ -8,9 +8,9 @@ import { playbackManager } from './playback/playbackmanager'; import inputManager from '../scripts/inputManager'; import { appRouter } from './router/appRouter'; import globalize from '../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import dom from '../scripts/dom'; import recordingHelper from './recordingcreator/recordinghelper'; -import ServerConnections from './ServerConnections'; import toast from './toast/toast'; import * as userSettings from '../scripts/settings/userSettings'; import { toApi } from 'utils/jellyfin-apiclient/compat'; diff --git a/src/components/slideshow/slideshow.js b/src/components/slideshow/slideshow.js index 522a6f738..6b223c140 100644 --- a/src/components/slideshow/slideshow.js +++ b/src/components/slideshow/slideshow.js @@ -3,16 +3,17 @@ * @module components/slideshow/slideshow */ import dialogHelper from '../dialogHelper/dialogHelper'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import inputManager from '../../scripts/inputManager'; import layoutManager from '../layoutManager'; import focusManager from '../focusManager'; import browser from '../../scripts/browser'; import { appHost } from '../apphost'; import dom from '../../scripts/dom'; + import './style.scss'; import 'material-design-icons-iconfont'; import '../../elements/emby-button/paper-icon-button-light'; -import ServerConnections from '../ServerConnections'; import screenfull from 'screenfull'; import { randomInt } from '../../utils/number.ts'; diff --git a/src/components/subtitleeditor/subtitleeditor.js b/src/components/subtitleeditor/subtitleeditor.js index 106ef0b56..2941f0078 100644 --- a/src/components/subtitleeditor/subtitleeditor.js +++ b/src/components/subtitleeditor/subtitleeditor.js @@ -3,10 +3,12 @@ import { appHost } from '../apphost'; import dialogHelper from '../dialogHelper/dialogHelper'; import layoutManager from '../layoutManager'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import * as userSettings from '../../scripts/settings/userSettings'; import loading from '../loading/loading'; import focusManager from '../focusManager'; import dom from '../../scripts/dom'; + import '../../elements/emby-select/emby-select'; import '../listview/listview.scss'; import '../../elements/emby-button/paper-icon-button-light'; @@ -15,7 +17,6 @@ import 'material-design-icons-iconfont'; import './subtitleeditor.scss'; import '../../elements/emby-button/emby-button'; import '../../styles/flexstyles.scss'; -import ServerConnections from '../ServerConnections'; import toast from '../toast/toast'; import confirm from '../confirm/confirm'; import template from './subtitleeditor.template.html'; diff --git a/src/components/subtitlesettings/subtitlesettings.js b/src/components/subtitlesettings/subtitlesettings.js index 0ae3d6e9d..b335b877e 100644 --- a/src/components/subtitlesettings/subtitlesettings.js +++ b/src/components/subtitlesettings/subtitlesettings.js @@ -1,4 +1,5 @@ import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { appHost } from '../apphost'; import appSettings from '../../scripts/settings/appSettings'; import focusManager from '../focusManager'; @@ -8,6 +9,7 @@ import subtitleAppearanceHelper from './subtitleappearancehelper'; import settingsHelper from '../settingshelper'; import dom from '../../scripts/dom'; import Events from '../../utils/events.ts'; + import '../listview/listview.scss'; import '../../elements/emby-select/emby-select'; import '../../elements/emby-slider/emby-slider'; @@ -15,7 +17,6 @@ import '../../elements/emby-input/emby-input'; import '../../elements/emby-checkbox/emby-checkbox'; import '../../styles/flexstyles.scss'; import './subtitlesettings.scss'; -import ServerConnections from '../ServerConnections'; import toast from '../toast/toast'; import template from './subtitlesettings.template.html'; diff --git a/src/components/subtitleuploader/subtitleuploader.js b/src/components/subtitleuploader/subtitleuploader.js index dc13ada07..9b363576f 100644 --- a/src/components/subtitleuploader/subtitleuploader.js +++ b/src/components/subtitleuploader/subtitleuploader.js @@ -3,14 +3,15 @@ import escapeHtml from 'escape-html'; import { getSubtitleApi } from '@jellyfin/sdk/lib/utils/api/subtitle-api'; import { toApi } from 'utils/jellyfin-apiclient/compat'; import dialogHelper from '../../components/dialogHelper/dialogHelper'; -import ServerConnections from '../ServerConnections'; import dom from '../../scripts/dom'; import loading from '../../components/loading/loading'; import scrollHelper from '../../scripts/scrollHelper'; import layoutManager from '../layoutManager'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import template from './subtitleuploader.template.html'; import toast from '../toast/toast'; + import '../../elements/emby-button/emby-button'; import '../../elements/emby-select/emby-select'; import '../formdialog.scss'; diff --git a/src/components/themeMediaPlayer.js b/src/components/themeMediaPlayer.js index fe25704ce..33a50dc70 100644 --- a/src/components/themeMediaPlayer.js +++ b/src/components/themeMediaPlayer.js @@ -3,6 +3,7 @@ import { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type' import { getLibraryApi } from '@jellyfin/sdk/lib/utils/api/library-api'; import { getItemQuery } from 'hooks/useItem'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { currentSettings as userSettings } from 'scripts/settings/userSettings'; import { ItemKind } from 'types/base/models/item-kind'; import Events from 'utils/events.ts'; @@ -10,7 +11,6 @@ import { toApi } from 'utils/jellyfin-apiclient/compat'; import { queryClient } from 'utils/query/queryClient'; import { playbackManager } from './playback/playbackmanager'; -import ServerConnections from './ServerConnections'; let currentOwnerId; let currentThemeIds = []; diff --git a/src/components/upnextdialog/upnextdialog.js b/src/components/upnextdialog/upnextdialog.js index 74a0fc5ba..061fac20b 100644 --- a/src/components/upnextdialog/upnextdialog.js +++ b/src/components/upnextdialog/upnextdialog.js @@ -5,8 +5,9 @@ import mediaInfo from '../mediainfo/mediainfo'; import layoutManager from '../layoutManager'; import focusManager from '../focusManager'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import itemHelper from '../itemHelper'; -import ServerConnections from '../ServerConnections'; + import './upnextdialog.scss'; import '../../elements/emby-button/emby-button'; import '../../styles/flexstyles.scss'; diff --git a/src/components/userdatabuttons/userdatabuttons.js b/src/components/userdatabuttons/userdatabuttons.js index 50b8b69e2..16ab8b755 100644 --- a/src/components/userdatabuttons/userdatabuttons.js +++ b/src/components/userdatabuttons/userdatabuttons.js @@ -1,11 +1,12 @@ import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import dom from '../../scripts/dom'; import itemHelper from '../itemHelper'; + import '../../elements/emby-button/paper-icon-button-light'; import 'material-design-icons-iconfont'; import '../../elements/emby-button/emby-button'; import './userdatabuttons.scss'; -import ServerConnections from '../ServerConnections'; const userDataMethods = { markPlayed: markPlayed, diff --git a/src/controllers/favorites.js b/src/controllers/favorites.js index ccc689fc2..84d79ea38 100644 --- a/src/controllers/favorites.js +++ b/src/controllers/favorites.js @@ -2,9 +2,9 @@ import cardBuilder from 'components/cardbuilder/cardBuilder'; import focusManager from 'components/focusManager'; import layoutManager from 'components/layoutManager'; import { appRouter } from 'components/router/appRouter'; -import ServerConnections from 'components/ServerConnections'; import dom from 'scripts/dom'; import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { getBackdropShape, getPortraitShape, getSquareShape } from 'utils/card'; import { ItemSortBy } from '@jellyfin/sdk/lib/generated-client/models/item-sort-by'; diff --git a/src/controllers/hometab.js b/src/controllers/hometab.js index 9b5c08707..aeabb131f 100644 --- a/src/controllers/hometab.js +++ b/src/controllers/hometab.js @@ -2,8 +2,9 @@ import * as userSettings from '../scripts/settings/userSettings'; import loading from '../components/loading/loading'; import focusManager from '../components/focusManager'; import homeSections from '../components/homesections/homesections'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; + import '../elements/emby-itemscontainer/emby-itemscontainer'; -import ServerConnections from '../components/ServerConnections'; class HomeTab { constructor(view, params) { diff --git a/src/controllers/itemDetails/index.js b/src/controllers/itemDetails/index.js index c3f37a155..1c4088d31 100644 --- a/src/controllers/itemDetails/index.js +++ b/src/controllers/itemDetails/index.js @@ -21,12 +21,12 @@ import loading from 'components/loading/loading'; import { playbackManager } from 'components/playback/playbackmanager'; import { appRouter } from 'components/router/appRouter'; import itemShortcuts from 'components/shortcuts'; -import ServerConnections from 'components/ServerConnections'; +import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import browser from 'scripts/browser'; import datetime from 'scripts/datetime'; import dom from 'scripts/dom'; import { download } from 'scripts/fileDownloader'; -import globalize from 'lib/globalize'; import libraryMenu from 'scripts/libraryMenu'; import * as userSettings from 'scripts/settings/userSettings'; import { getPortraitShape, getSquareShape } from 'utils/card'; @@ -1379,7 +1379,6 @@ function renderChildren(page, item) { if (item.Type == 'MusicAlbum') { let showArtist = false; for (const track of result.Items) { - // eslint-disable-next-line sonarjs/no-alphabetical-sort if (!isEqual(track.ArtistItems.map(x => x.Id).sort(), track.AlbumArtists.map(x => x.Id).sort())) { showArtist = true; break; diff --git a/src/controllers/list.js b/src/controllers/list.js index 479c647c2..b1a772cb6 100644 --- a/src/controllers/list.js +++ b/src/controllers/list.js @@ -8,9 +8,9 @@ import AlphaNumericShortcuts from '../scripts/alphanumericshortcuts'; import libraryBrowser from '../scripts/libraryBrowser'; import { playbackManager } from '../components/playback/playbackmanager'; import AlphaPicker from '../components/alphaPicker/alphaPicker'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import '../elements/emby-itemscontainer/emby-itemscontainer'; import '../elements/emby-scroller/emby-scroller'; -import ServerConnections from '../components/ServerConnections'; import LibraryMenu from '../scripts/libraryMenu'; import { CollectionType } from '@jellyfin/sdk/lib/generated-client/models/collection-type'; import { ItemSortBy } from '@jellyfin/sdk/lib/generated-client/models/item-sort-by'; diff --git a/src/controllers/lyrics.js b/src/controllers/lyrics.js index 6272f7fcc..98aa74e8a 100644 --- a/src/controllers/lyrics.js +++ b/src/controllers/lyrics.js @@ -4,12 +4,12 @@ import autoFocuser from 'components/autoFocuser'; import { appRouter } from '../components/router/appRouter'; import layoutManager from 'components/layoutManager'; import { playbackManager } from '../components/playback/playbackmanager'; -import ServerConnections from '../components/ServerConnections'; import scrollManager from 'components/scrollManager'; import focusManager from 'components/focusManager'; import keyboardNavigation from 'scripts/keyboardNavigation'; import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import LibraryMenu from 'scripts/libraryMenu'; import Events from 'utils/events'; diff --git a/src/controllers/playback/video/index.js b/src/controllers/playback/video/index.js index b143df9d4..192c1b9f1 100644 --- a/src/controllers/playback/video/index.js +++ b/src/controllers/playback/video/index.js @@ -19,10 +19,10 @@ import '../../../elements/emby-slider/emby-slider'; import '../../../elements/emby-button/paper-icon-button-light'; import '../../../elements/emby-ratingbutton/emby-ratingbutton'; import '../../../styles/videoosd.scss'; -import ServerConnections from '../../../components/ServerConnections'; import shell from '../../../scripts/shell'; import SubtitleSync from '../../../components/subtitlesync/subtitlesync'; import { appRouter } from '../../../components/router/appRouter'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import LibraryMenu from '../../../scripts/libraryMenu'; import { setBackdropTransparency, TRANSPARENCY_LEVEL } from '../../../components/backdrop/backdrop'; import { pluginManager } from '../../../components/pluginManager'; diff --git a/src/controllers/session/addServer/index.js b/src/controllers/session/addServer/index.js index 251d7ae67..bf76d5099 100644 --- a/src/controllers/session/addServer/index.js +++ b/src/controllers/session/addServer/index.js @@ -1,10 +1,11 @@ -import appSettings from '../../../scripts/settings/appSettings'; -import loading from '../../../components/loading/loading'; -import globalize from '../../../lib/globalize'; -import '../../../elements/emby-button/emby-button'; -import Dashboard from '../../../utils/dashboard'; -import ServerConnections from '../../../components/ServerConnections'; -import { ConnectionState } from '../../../lib/jellyfin-apiclient/connectionState'; +import loading from 'components/loading/loading'; +import globalize from 'lib/globalize'; +import { ConnectionState } from 'lib/jellyfin-apiclient/connectionState'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import appSettings from 'scripts/settings/appSettings'; +import Dashboard from 'utils/dashboard'; + +import 'elements/emby-button/emby-button'; function handleConnectionResult(page, result) { loading.hide(); diff --git a/src/controllers/session/login/index.js b/src/controllers/session/login/index.js index 4c241389a..dca448018 100644 --- a/src/controllers/session/login/index.js +++ b/src/controllers/session/login/index.js @@ -11,12 +11,13 @@ import globalize from '../../../lib/globalize'; import '../../../components/cardbuilder/card.scss'; import '../../../elements/emby-checkbox/emby-checkbox'; import Dashboard from '../../../utils/dashboard'; -import ServerConnections from '../../../components/ServerConnections'; import toast from '../../../components/toast/toast'; import dialogHelper from '../../../components/dialogHelper/dialogHelper'; import baseAlert from '../../../components/alert'; -import './login.scss'; import { getDefaultBackgroundClass } from '../../../components/cardbuilder/cardBuilderUtils'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; + +import './login.scss'; const enableFocusTransform = !browser.slow && !browser.edge; diff --git a/src/controllers/session/selectServer/index.js b/src/controllers/session/selectServer/index.js index 7770b64cb..0b05409e1 100644 --- a/src/controllers/session/selectServer/index.js +++ b/src/controllers/session/selectServer/index.js @@ -17,10 +17,10 @@ import '../../../elements/emby-itemscontainer/emby-itemscontainer'; import '../../../components/cardbuilder/card.scss'; import '../../../elements/emby-button/emby-button'; import Dashboard from '../../../utils/dashboard'; -import ServerConnections from '../../../components/ServerConnections'; import alert from '../../../components/alert'; -import { ConnectionState } from '../../../lib/jellyfin-apiclient/connectionState'; import { getDefaultBackgroundClass } from '../../../components/cardbuilder/cardBuilderUtils'; +import { ConnectionState } from 'lib/jellyfin-apiclient/connectionState'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; const enableFocusTransform = !browser.slow && !browser.edge; diff --git a/src/elements/emby-itemscontainer/emby-itemscontainer.js b/src/elements/emby-itemscontainer/emby-itemscontainer.js index dd40a8053..1c6948f9c 100644 --- a/src/elements/emby-itemscontainer/emby-itemscontainer.js +++ b/src/elements/emby-itemscontainer/emby-itemscontainer.js @@ -1,3 +1,6 @@ +import 'webcomponents.js/webcomponents-lite'; +import Sortable from 'sortablejs'; + import itemShortcuts from '../../components/shortcuts'; import inputManager from '../../scripts/inputManager'; import { playbackManager } from '../../components/playback/playbackmanager'; @@ -7,11 +10,9 @@ import browser from '../../scripts/browser'; import dom from '../../scripts/dom'; import loading from '../../components/loading/loading'; import focusManager from '../../components/focusManager'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import serverNotifications from '../../scripts/serverNotifications'; import Events from '../../utils/events.ts'; -import 'webcomponents.js/webcomponents-lite'; -import ServerConnections from '../../components/ServerConnections'; -import Sortable from 'sortablejs'; const ItemsContainerPrototype = Object.create(HTMLDivElement.prototype); diff --git a/src/elements/emby-playstatebutton/emby-playstatebutton.js b/src/elements/emby-playstatebutton/emby-playstatebutton.js index 1e83bb055..40dd6cccd 100644 --- a/src/elements/emby-playstatebutton/emby-playstatebutton.js +++ b/src/elements/emby-playstatebutton/emby-playstatebutton.js @@ -1,8 +1,8 @@ import serverNotifications from '../../scripts/serverNotifications'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import Events from '../../utils/events.ts'; import EmbyButtonPrototype from '../../elements/emby-button/emby-button'; -import ServerConnections from '../../components/ServerConnections'; function addNotificationEvent(instance, name, handler) { const localHandler = handler.bind(instance); diff --git a/src/elements/emby-ratingbutton/emby-ratingbutton.js b/src/elements/emby-ratingbutton/emby-ratingbutton.js index a0621afea..6241d09df 100644 --- a/src/elements/emby-ratingbutton/emby-ratingbutton.js +++ b/src/elements/emby-ratingbutton/emby-ratingbutton.js @@ -1,8 +1,8 @@ import serverNotifications from '../../scripts/serverNotifications'; import globalize from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import Events from '../../utils/events.ts'; import EmbyButtonPrototype from '../emby-button/emby-button'; -import ServerConnections from '../../components/ServerConnections'; function addNotificationEvent(instance, name, handler) { const localHandler = handler.bind(instance); diff --git a/src/hooks/useApi.tsx b/src/hooks/useApi.tsx index 20614091b..a0c899e2d 100644 --- a/src/hooks/useApi.tsx +++ b/src/hooks/useApi.tsx @@ -3,9 +3,9 @@ import type { UserDto } from '@jellyfin/sdk/lib/generated-client'; import type { ApiClient, Event } from 'jellyfin-apiclient'; import React, { type FC, type PropsWithChildren, createContext, useContext, useEffect, useMemo, useState } from 'react'; -import ServerConnections from '../components/ServerConnections'; -import events from '../utils/events'; -import { toApi } from '../utils/jellyfin-apiclient/compat'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import events from 'utils/events'; +import { toApi } from 'utils/jellyfin-apiclient/compat'; export interface JellyfinApiContext { __legacyApiClient__?: ApiClient diff --git a/src/index.jsx b/src/index.jsx index 66df6e33e..bf426c000 100644 --- a/src/index.jsx +++ b/src/index.jsx @@ -5,7 +5,7 @@ import React from 'react'; import { createRoot } from 'react-dom/client'; // NOTE: We need to import this first to initialize the connection -import ServerConnections from './components/ServerConnections'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { appHost } from './components/apphost'; import autoFocuser from './components/autoFocuser'; @@ -23,7 +23,6 @@ import { pageClassOn, serverAddress } from './utils/dashboard'; import Events from './utils/events'; import RootApp from './RootApp'; -import { history } from 'RootAppRouter'; // Import the button webcomponent for use throughout the site // NOTE: This is a bit of a hack, files should ensure the component is imported before use @@ -206,7 +205,7 @@ async function renderApp() { const root = createRoot(container); root.render( - + ); } diff --git a/src/components/ServerConnections.js b/src/lib/jellyfin-apiclient/ServerConnections.js similarity index 94% rename from src/components/ServerConnections.js rename to src/lib/jellyfin-apiclient/ServerConnections.js index 630bc6364..31e73531d 100644 --- a/src/components/ServerConnections.js +++ b/src/lib/jellyfin-apiclient/ServerConnections.js @@ -3,12 +3,12 @@ import { Api } from '@jellyfin/sdk'; import { Credentials, ApiClient } from 'jellyfin-apiclient'; -import { appHost } from './apphost'; +import { appHost } from 'components/apphost'; import ConnectionManager from 'lib/jellyfin-apiclient/connectionManager'; -import Dashboard from '../utils/dashboard'; -import Events from '../utils/events.ts'; -import { setUserInfo } from '../scripts/settings/userSettings'; -import appSettings from '../scripts/settings/appSettings'; +import appSettings from 'scripts/settings/appSettings'; +import { setUserInfo } from 'scripts/settings/userSettings'; +import Dashboard from 'utils/dashboard'; +import Events from 'utils/events.ts'; import { toApi } from 'utils/jellyfin-apiclient/compat'; const normalizeImageOptions = options => { diff --git a/src/plugins/backdropScreensaver/plugin.js b/src/plugins/backdropScreensaver/plugin.js index 1058be5be..1b0c5bfb7 100644 --- a/src/plugins/backdropScreensaver/plugin.js +++ b/src/plugins/backdropScreensaver/plugin.js @@ -1,7 +1,7 @@ -import ServerConnections from '../../components/ServerConnections'; -import { PluginType } from '../../types/plugin.ts'; -import * as userSettings from '../../scripts/settings/userSettings'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import * as userSettings from 'scripts/settings/userSettings'; +import { PluginType } from 'types/plugin.ts'; class BackdropScreensaver { constructor() { diff --git a/src/plugins/bookPlayer/plugin.js b/src/plugins/bookPlayer/plugin.js index 733519cb3..9ad4e8526 100644 --- a/src/plugins/bookPlayer/plugin.js +++ b/src/plugins/bookPlayer/plugin.js @@ -3,10 +3,10 @@ import 'material-design-icons-iconfont'; import loading from '../../components/loading/loading'; import keyboardnavigation from '../../scripts/keyboardNavigation'; import dialogHelper from '../../components/dialogHelper/dialogHelper'; -import ServerConnections from '../../components/ServerConnections'; import Screenfull from 'screenfull'; import TableOfContents from './tableOfContents'; import { translateHtml } from '../../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import browser from 'scripts/browser'; import * as userSettings from '../../scripts/settings/userSettings'; import TouchHelper from 'scripts/touchHelper'; diff --git a/src/plugins/chromecastPlayer/plugin.js b/src/plugins/chromecastPlayer/plugin.js index 868f02691..ed85eedab 100644 --- a/src/plugins/chromecastPlayer/plugin.js +++ b/src/plugins/chromecastPlayer/plugin.js @@ -3,8 +3,8 @@ import * as userSettings from '../../scripts/settings/userSettings'; import { playbackManager } from '../../components/playback/playbackmanager'; import globalize from '../../lib/globalize'; import CastSenderApi from './castSenderApi'; -import ServerConnections from '../../components/ServerConnections'; import alert from '../../components/alert'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { PluginType } from '../../types/plugin.ts'; import Events from '../../utils/events.ts'; import { getItems } from '../../utils/jellyfin-apiclient/getItems.ts'; diff --git a/src/plugins/comicsPlayer/plugin.js b/src/plugins/comicsPlayer/plugin.js index 0e8f599a1..8c84b121f 100644 --- a/src/plugins/comicsPlayer/plugin.js +++ b/src/plugins/comicsPlayer/plugin.js @@ -3,7 +3,7 @@ import loading from '../../components/loading/loading'; import dialogHelper from '../../components/dialogHelper/dialogHelper'; import keyboardnavigation from '../../scripts/keyboardNavigation'; import { appRouter } from '../../components/router/appRouter'; -import ServerConnections from '../../components/ServerConnections'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import * as userSettings from '../../scripts/settings/userSettings'; import { PluginType } from '../../types/plugin.ts'; diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index 5afc9d182..5c48b5ff8 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -29,7 +29,7 @@ import { import itemHelper from '../../components/itemHelper'; import Screenfull from 'screenfull'; import globalize from '../../lib/globalize'; -import ServerConnections from '../../components/ServerConnections'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import profileBuilder, { canPlaySecondaryAudio } from '../../scripts/browserDeviceProfile'; import { getIncludeCorsCredentials } from '../../scripts/settings/webSettings'; import { setBackdropTransparency, TRANSPARENCY_LEVEL } from '../../components/backdrop/backdrop'; diff --git a/src/plugins/pdfPlayer/plugin.js b/src/plugins/pdfPlayer/plugin.js index c42869865..1c040602f 100644 --- a/src/plugins/pdfPlayer/plugin.js +++ b/src/plugins/pdfPlayer/plugin.js @@ -1,9 +1,9 @@ -import ServerConnections from '../../components/ServerConnections'; import loading from '../../components/loading/loading'; import keyboardnavigation from '../../scripts/keyboardNavigation'; import dialogHelper from '../../components/dialogHelper/dialogHelper'; import dom from '../../scripts/dom'; import { appRouter } from '../../components/router/appRouter'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { PluginType } from '../../types/plugin.ts'; import Events from '../../utils/events.ts'; diff --git a/src/plugins/photoPlayer/plugin.js b/src/plugins/photoPlayer/plugin.js index 44aa79b82..397739314 100644 --- a/src/plugins/photoPlayer/plugin.js +++ b/src/plugins/photoPlayer/plugin.js @@ -1,5 +1,5 @@ -import ServerConnections from '../../components/ServerConnections'; -import { PluginType } from '../../types/plugin.ts'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { PluginType } from 'types/plugin.ts'; export default class PhotoPlayer { constructor() { diff --git a/src/plugins/playAccessValidation/plugin.js b/src/plugins/playAccessValidation/plugin.js index 0a3ab4a85..5202bf231 100644 --- a/src/plugins/playAccessValidation/plugin.js +++ b/src/plugins/playAccessValidation/plugin.js @@ -1,7 +1,7 @@ -import globalize from '../../lib/globalize'; -import ServerConnections from '../../components/ServerConnections'; -import alert from '../../components/alert'; -import { PluginType } from '../../types/plugin.ts'; +import alert from 'components/alert'; +import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { PluginType } from 'types/plugin.ts'; function showErrorMessage() { return alert(globalize.translate('MessagePlayAccessRestricted')); diff --git a/src/plugins/sessionPlayer/plugin.js b/src/plugins/sessionPlayer/plugin.js index 32c24ce7e..0e55d599f 100644 --- a/src/plugins/sessionPlayer/plugin.js +++ b/src/plugins/sessionPlayer/plugin.js @@ -1,6 +1,6 @@ import { playbackManager } from '../../components/playback/playbackmanager'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import serverNotifications from '../../scripts/serverNotifications'; -import ServerConnections from '../../components/ServerConnections'; import { PluginType } from '../../types/plugin.ts'; import Events from '../../utils/events.ts'; import isEqual from 'lodash-es/isEqual'; diff --git a/src/plugins/syncPlay/plugin.ts b/src/plugins/syncPlay/plugin.ts index 33d99aa75..a32c64ec3 100644 --- a/src/plugins/syncPlay/plugin.ts +++ b/src/plugins/syncPlay/plugin.ts @@ -1,5 +1,5 @@ import { playbackManager } from '../../components/playback/playbackmanager'; -import ServerConnections from '../../components/ServerConnections'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import Events from '../../utils/events'; import SyncPlay from './core'; import SyncPlayNoActivePlayer from './ui/players/NoActivePlayer'; diff --git a/src/plugins/syncPlay/ui/groupSelectionMenu.js b/src/plugins/syncPlay/ui/groupSelectionMenu.js index ec224c64b..543d83977 100644 --- a/src/plugins/syncPlay/ui/groupSelectionMenu.js +++ b/src/plugins/syncPlay/ui/groupSelectionMenu.js @@ -5,7 +5,7 @@ import actionsheet from '../../../components/actionSheet/actionSheet'; import globalize from '../../../lib/globalize'; import playbackPermissionManager from './playbackPermissionManager'; import { pluginManager } from '../../../components/pluginManager'; -import ServerConnections from '../../../components/ServerConnections'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { PluginType } from '../../../types/plugin.ts'; import Events from '../../../utils/events.ts'; diff --git a/src/scripts/autoBackdrops.js b/src/scripts/autoBackdrops.js index 0ba53e242..4083e4602 100644 --- a/src/scripts/autoBackdrops.js +++ b/src/scripts/autoBackdrops.js @@ -4,8 +4,8 @@ import libraryMenu from './libraryMenu'; import { pageClassOn } from '../utils/dashboard'; import { queryClient } from 'utils/query/queryClient'; import { getBrandingOptionsQuery } from 'apps/dashboard/features/branding/api/useBrandingOptions'; -import ServerConnections from 'components/ServerConnections'; import { SPLASHSCREEN_URL } from 'constants/branding'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; const cache = {}; diff --git a/src/scripts/autoThemes.js b/src/scripts/autoThemes.js index b7c2fdf0d..673efa56f 100644 --- a/src/scripts/autoThemes.js +++ b/src/scripts/autoThemes.js @@ -1,8 +1,8 @@ import * as userSettings from './settings/userSettings'; import skinManager from './themeManager'; -import ServerConnections from '../components/ServerConnections'; -import { pageClassOn } from '../utils/dashboard'; -import Events from '../utils/events.ts'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { pageClassOn } from 'utils/dashboard'; +import Events from 'utils/events.ts'; // Set the default theme when loading skinManager.setTheme(userSettings.theme()) diff --git a/src/scripts/autocast.js b/src/scripts/autocast.js index 65d7b19de..87462f07c 100644 --- a/src/scripts/autocast.js +++ b/src/scripts/autocast.js @@ -1,6 +1,6 @@ -import ServerConnections from 'components/ServerConnections'; -import { playbackManager } from '../components/playback/playbackmanager'; -import Events from '../utils/events.ts'; +import { playbackManager } from 'components/playback/playbackmanager'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import Events from 'utils/events.ts'; export function enable(enabled) { console.debug('[autocast] %s cast player', enabled ? 'enabling' : 'disabling'); diff --git a/src/scripts/deleteHelper.js b/src/scripts/deleteHelper.js index e482737c5..d9afa4d01 100644 --- a/src/scripts/deleteHelper.js +++ b/src/scripts/deleteHelper.js @@ -1,11 +1,12 @@ -import globalize from 'lib/globalize'; -import alert from '../components/alert'; -import confirm from '../components/confirm/confirm'; -import { appRouter } from '../components/router/appRouter'; -import ServerConnections from '../components/ServerConnections'; import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind'; +import alert from 'components/alert'; +import confirm from 'components/confirm/confirm'; +import { appRouter } from 'components/router/appRouter'; +import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; + function alertText(options) { return alert(options); } diff --git a/src/scripts/itemsByName.js b/src/scripts/itemsByName.js index 936c7b877..6b4cbefca 100644 --- a/src/scripts/itemsByName.js +++ b/src/scripts/itemsByName.js @@ -1,10 +1,11 @@ -import listView from '../components/listview/listview'; -import cardBuilder from '../components/cardbuilder/cardBuilder'; -import imageLoader from '../components/images/imageLoader'; +import listView from 'components/listview/listview'; +import cardBuilder from 'components/cardbuilder/cardBuilder'; +import imageLoader from 'components/images/imageLoader'; import globalize from 'lib/globalize'; -import '../elements/emby-itemscontainer/emby-itemscontainer'; -import '../elements/emby-button/emby-button'; -import ServerConnections from '../components/ServerConnections'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; + +import 'elements/emby-itemscontainer/emby-itemscontainer'; +import 'elements/emby-button/emby-button'; function renderItems(page, item) { const sections = []; diff --git a/src/scripts/libraryMenu.js b/src/scripts/libraryMenu.js index fe93f8bd7..cecd63381 100644 --- a/src/scripts/libraryMenu.js +++ b/src/scripts/libraryMenu.js @@ -20,10 +20,10 @@ import { pluginManager } from '../components/pluginManager'; import groupSelectionMenu from '../plugins/syncPlay/ui/groupSelectionMenu'; import browser from './browser'; import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import imageHelper from '../utils/image'; import { getMenuLinks } from '../scripts/settings/webSettings'; import Dashboard, { pageClassOn } from '../utils/dashboard'; -import ServerConnections from '../components/ServerConnections'; import { PluginType } from '../types/plugin.ts'; import Events from '../utils/events.ts'; import { getParameterByName } from '../utils/url.ts'; diff --git a/src/scripts/playlistViewer.js b/src/scripts/playlistViewer.js index 524086312..ff8e22506 100644 --- a/src/scripts/playlistViewer.js +++ b/src/scripts/playlistViewer.js @@ -1,7 +1,7 @@ import { getPlaylistsApi } from '@jellyfin/sdk/lib/utils/api/playlists-api'; -import ServerConnections from 'components/ServerConnections'; import listView from 'components/listview/listview'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import { toApi } from 'utils/jellyfin-apiclient/compat'; function getFetchPlaylistItemsFn(apiClient, itemId) { diff --git a/src/scripts/screensavermanager.js b/src/scripts/screensavermanager.js index fccc2751a..f085b1a91 100644 --- a/src/scripts/screensavermanager.js +++ b/src/scripts/screensavermanager.js @@ -1,10 +1,11 @@ -import { playbackManager } from '../components/playback/playbackmanager'; -import { pluginManager } from '../components/pluginManager'; +import { playbackManager } from 'components/playback/playbackmanager'; +import { pluginManager } from 'components/pluginManager'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { PluginType } from 'types/plugin.ts'; +import Events from 'utils/events.ts'; + import inputManager from './inputManager'; import * as userSettings from './settings/userSettings'; -import ServerConnections from '../components/ServerConnections'; -import { PluginType } from '../types/plugin.ts'; -import Events from '../utils/events.ts'; import './screensavermanager.scss'; diff --git a/src/scripts/serverNotifications.js b/src/scripts/serverNotifications.js index 00088ef29..2b0d231b8 100644 --- a/src/scripts/serverNotifications.js +++ b/src/scripts/serverNotifications.js @@ -1,13 +1,13 @@ -import { playbackManager } from '../components/playback/playbackmanager'; -import { pluginManager } from '../components/pluginManager'; -import inputManager from '../scripts/inputManager'; -import focusManager from '../components/focusManager'; -import { appRouter } from '../components/router/appRouter'; -import ServerConnections from '../components/ServerConnections'; -import toast from '../components/toast/toast'; -import alert from '../components/alert'; -import Events from '../utils/events.ts'; -import { PluginType } from '../types/plugin.ts'; +import alert from 'components/alert'; +import focusManager from 'components/focusManager'; +import { playbackManager } from 'components/playback/playbackmanager'; +import { pluginManager } from 'components/pluginManager'; +import { appRouter } from 'components/router/appRouter'; +import toast from 'components/toast/toast'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import inputManager from 'scripts/inputManager'; +import Events from 'utils/events.ts'; +import { PluginType } from 'types/plugin.ts'; const serverNotifications = {}; diff --git a/src/scripts/taskbutton.js b/src/scripts/taskbutton.js index 0bc9c0ab8..bb2066fce 100644 --- a/src/scripts/taskbutton.js +++ b/src/scripts/taskbutton.js @@ -1,10 +1,10 @@ -import serverNotifications from '../scripts/serverNotifications'; -import globalize from '../lib/globalize'; -import ServerConnections from '../components/ServerConnections'; -import Events from '../utils/events.ts'; +import globalize from 'lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import serverNotifications from 'scripts/serverNotifications'; +import Events from 'utils/events.ts'; -import '../elements/emby-button/emby-button'; +import 'elements/emby-button/emby-button'; function taskbutton(options) { function pollTasks() { diff --git a/src/utils/dashboard.js b/src/utils/dashboard.js index 9b468730d..666951acb 100644 --- a/src/utils/dashboard.js +++ b/src/utils/dashboard.js @@ -1,10 +1,10 @@ -import ServerConnections from '../components/ServerConnections'; import toast from '../components/toast/toast'; import loading from '../components/loading/loading'; import { appRouter } from '../components/router/appRouter'; import baseAlert from '../components/alert'; import baseConfirm from '../components/confirm/confirm'; import globalize from '../lib/globalize'; +import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; import * as webSettings from '../scripts/settings/webSettings'; import datetime from '../scripts/datetime'; import { setBackdropTransparency } from '../components/backdrop/backdrop'; From 953073cd28b4cccc128672f514e15cb3bd58f616 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 22 Apr 2025 08:48:34 -0400 Subject: [PATCH 076/645] Use index file for apiclient lib imports --- src/apiclient.d.ts | 2 +- src/apps/dashboard/controllers/dashboard.js | 2 +- src/apps/dashboard/routes/branding/index.tsx | 2 +- src/apps/dashboard/routes/libraries/display.tsx | 2 +- src/apps/dashboard/routes/libraries/metadata.tsx | 2 +- src/apps/dashboard/routes/libraries/nfo.tsx | 2 +- src/apps/dashboard/routes/logs/index.tsx | 2 +- src/apps/dashboard/routes/playback/resume.tsx | 2 +- src/apps/dashboard/routes/playback/streaming.tsx | 2 +- src/apps/dashboard/routes/playback/trickplay.tsx | 2 +- src/apps/dashboard/routes/settings/index.tsx | 2 +- src/apps/dashboard/routes/users/parentalcontrol.tsx | 2 +- src/apps/stable/features/playback/utils/image.ts | 2 +- src/apps/stable/features/playback/utils/mediaSegmentManager.ts | 2 +- src/apps/wizard/controllers/finish/index.js | 2 +- src/apps/wizard/controllers/library.js | 2 +- src/apps/wizard/controllers/remote/index.js | 2 +- src/apps/wizard/controllers/settings/index.js | 2 +- src/apps/wizard/controllers/start/index.js | 2 +- src/apps/wizard/controllers/user/index.js | 2 +- src/components/ConnectionRequired.tsx | 3 +-- src/components/ServerContentPage.tsx | 2 +- src/components/activitylog.js | 2 +- src/components/backdrop/backdrop.js | 2 +- src/components/cardbuilder/cardBuilder.js | 2 +- src/components/cardbuilder/chaptercardbuilder.js | 2 +- src/components/channelMapper/channelMapper.js | 2 +- src/components/collectionEditor/collectionEditor.js | 2 +- src/components/displaySettings/displaySettings.js | 2 +- src/components/filterdialog/filterdialog.js | 2 +- src/components/filtermenu/filtermenu.js | 2 +- src/components/groupedcards.js | 2 +- src/components/guide/guide.js | 2 +- src/components/homeScreenSettings/homeScreenSettings.js | 2 +- src/components/homesections/sections/activeRecordings.ts | 2 +- src/components/homesections/sections/liveTv.ts | 2 +- src/components/homesections/sections/nextUp.ts | 2 +- src/components/homesections/sections/recentlyAdded.ts | 2 +- src/components/homesections/sections/resume.ts | 2 +- src/components/imageDownloader/imageDownloader.js | 2 +- src/components/imageUploader/imageUploader.js | 2 +- src/components/imageeditor/imageeditor.js | 2 +- src/components/itemContextMenu.js | 2 +- src/components/itemHelper.js | 2 +- src/components/itemMediaInfo/itemMediaInfo.js | 2 +- src/components/itemidentifier/itemidentifier.js | 2 +- src/components/listview/listview.js | 2 +- src/components/lyricseditor/lyricseditor.js | 2 +- src/components/lyricsuploader/lyricsuploader.js | 2 +- src/components/metadataEditor/metadataEditor.js | 2 +- src/components/multiSelect/multiSelect.js | 2 +- src/components/notifications/notifications.js | 2 +- src/components/nowPlayingBar/nowPlayingBar.js | 2 +- src/components/playback/displayMirrorManager.ts | 2 +- src/components/playback/playbackmanager.js | 2 +- src/components/playback/playersettingsmenu.js | 2 +- src/components/playbackSettings/playbackSettings.js | 2 +- src/components/playerstats/playerstats.js | 2 +- src/components/playlisteditor/playlisteditor.ts | 2 +- src/components/pluginManager.js | 2 +- src/components/recordingcreator/recordingbutton.js | 2 +- src/components/recordingcreator/recordingcreator.js | 2 +- src/components/recordingcreator/recordingeditor.js | 2 +- src/components/recordingcreator/recordingfields.js | 2 +- src/components/recordingcreator/recordinghelper.js | 2 +- src/components/recordingcreator/seriesrecordingeditor.js | 2 +- src/components/refreshdialog/refreshdialog.js | 2 +- src/components/remotecontrol/remotecontrol.js | 2 +- src/components/router/appRouter.js | 2 +- src/components/shortcuts.js | 2 +- src/components/slideshow/slideshow.js | 2 +- src/components/subtitleeditor/subtitleeditor.js | 2 +- src/components/subtitlesettings/subtitlesettings.js | 2 +- src/components/subtitleuploader/subtitleuploader.js | 2 +- src/components/themeMediaPlayer.js | 2 +- src/components/upnextdialog/upnextdialog.js | 2 +- src/components/userdatabuttons/userdatabuttons.js | 2 +- src/controllers/favorites.js | 2 +- src/controllers/hometab.js | 2 +- src/controllers/itemDetails/index.js | 2 +- src/controllers/list.js | 2 +- src/controllers/lyrics.js | 2 +- src/controllers/playback/video/index.js | 2 +- src/controllers/session/addServer/index.js | 3 +-- src/controllers/session/login/index.js | 2 +- src/controllers/session/selectServer/index.js | 3 +-- src/elements/emby-itemscontainer/emby-itemscontainer.js | 2 +- src/elements/emby-playstatebutton/emby-playstatebutton.js | 2 +- src/elements/emby-ratingbutton/emby-ratingbutton.js | 2 +- src/hooks/useApi.tsx | 2 +- src/index.jsx | 2 +- src/lib/jellyfin-apiclient/ServerConnections.js | 3 ++- src/lib/jellyfin-apiclient/index.ts | 3 +++ src/plugins/backdropScreensaver/plugin.js | 2 +- src/plugins/bookPlayer/plugin.js | 2 +- src/plugins/chromecastPlayer/plugin.js | 2 +- src/plugins/comicsPlayer/plugin.js | 2 +- src/plugins/htmlVideoPlayer/plugin.js | 2 +- src/plugins/pdfPlayer/plugin.js | 2 +- src/plugins/photoPlayer/plugin.js | 2 +- src/plugins/playAccessValidation/plugin.js | 2 +- src/plugins/sessionPlayer/plugin.js | 2 +- src/plugins/syncPlay/plugin.ts | 2 +- src/plugins/syncPlay/ui/groupSelectionMenu.js | 2 +- src/scripts/autoBackdrops.js | 2 +- src/scripts/autoThemes.js | 2 +- src/scripts/autocast.js | 2 +- src/scripts/deleteHelper.js | 2 +- src/scripts/itemsByName.js | 2 +- src/scripts/libraryMenu.js | 2 +- src/scripts/playlistViewer.js | 2 +- src/scripts/screensavermanager.js | 2 +- src/scripts/serverNotifications.js | 2 +- src/scripts/taskbutton.js | 2 +- src/utils/dashboard.js | 2 +- 115 files changed, 118 insertions(+), 117 deletions(-) create mode 100644 src/lib/jellyfin-apiclient/index.ts diff --git a/src/apiclient.d.ts b/src/apiclient.d.ts index f250ccfce..0d8729e7d 100644 --- a/src/apiclient.d.ts +++ b/src/apiclient.d.ts @@ -67,7 +67,7 @@ declare module 'jellyfin-apiclient' { UtcTimeResponse, VirtualFolderInfo } from '@jellyfin/sdk/lib/generated-client'; - import type { ConnectionState } from 'lib/jellyfin-apiclient/connectionState'; + import type { ConnectionState } from 'lib/jellyfin-apiclient'; class ApiClient { constructor(serverAddress: string, appName: string, appVersion: string, deviceName: string, deviceId: string); diff --git a/src/apps/dashboard/controllers/dashboard.js b/src/apps/dashboard/controllers/dashboard.js index 8b6167182..2388ac717 100644 --- a/src/apps/dashboard/controllers/dashboard.js +++ b/src/apps/dashboard/controllers/dashboard.js @@ -22,7 +22,7 @@ import confirm from 'components/confirm/confirm'; import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUtils'; import { getSystemInfoQuery } from 'hooks/useSystemInfo'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { toApi } from 'utils/jellyfin-apiclient/compat'; import { queryClient } from 'utils/query/queryClient'; diff --git a/src/apps/dashboard/routes/branding/index.tsx b/src/apps/dashboard/routes/branding/index.tsx index e124aba01..26595a50d 100644 --- a/src/apps/dashboard/routes/branding/index.tsx +++ b/src/apps/dashboard/routes/branding/index.tsx @@ -21,7 +21,7 @@ import Page from 'components/Page'; import { SPLASHSCREEN_URL } from 'constants/branding'; import { useApi } from 'hooks/useApi'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { queryClient } from 'utils/query/queryClient'; import { ActionData } from 'types/actionData'; diff --git a/src/apps/dashboard/routes/libraries/display.tsx b/src/apps/dashboard/routes/libraries/display.tsx index 8dd377e94..9cd0852c9 100644 --- a/src/apps/dashboard/routes/libraries/display.tsx +++ b/src/apps/dashboard/routes/libraries/display.tsx @@ -16,7 +16,7 @@ import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-a import { QUERY_KEY as CONFIG_QUERY_KEY, useConfiguration } from 'hooks/useConfiguration'; import { QUERY_KEY as NAMED_CONFIG_QUERY_KEY, NamedConfiguration, useNamedConfiguration } from 'hooks/useNamedConfiguration'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; import { ActionData } from 'types/actionData'; import { queryClient } from 'utils/query/queryClient'; diff --git a/src/apps/dashboard/routes/libraries/metadata.tsx b/src/apps/dashboard/routes/libraries/metadata.tsx index ae611329b..122072d4e 100644 --- a/src/apps/dashboard/routes/libraries/metadata.tsx +++ b/src/apps/dashboard/routes/libraries/metadata.tsx @@ -14,7 +14,7 @@ import Loading from 'components/loading/LoadingComponent'; import Page from 'components/Page'; import { QUERY_KEY, useConfiguration } from 'hooks/useConfiguration'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import React from 'react'; import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; import { ActionData } from 'types/actionData'; diff --git a/src/apps/dashboard/routes/libraries/nfo.tsx b/src/apps/dashboard/routes/libraries/nfo.tsx index 65d3bbe10..326834a83 100644 --- a/src/apps/dashboard/routes/libraries/nfo.tsx +++ b/src/apps/dashboard/routes/libraries/nfo.tsx @@ -16,7 +16,7 @@ import SimpleAlert from 'components/SimpleAlert'; import { QUERY_KEY, useNamedConfiguration } from 'hooks/useNamedConfiguration'; import { useUsers } from 'hooks/useUsers'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import React, { useCallback, useState } from 'react'; import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; import { ActionData } from 'types/actionData'; diff --git a/src/apps/dashboard/routes/logs/index.tsx b/src/apps/dashboard/routes/logs/index.tsx index 68027807f..b5d8b0967 100644 --- a/src/apps/dashboard/routes/logs/index.tsx +++ b/src/apps/dashboard/routes/logs/index.tsx @@ -3,7 +3,7 @@ import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-a import Loading from 'components/loading/LoadingComponent'; import Page from 'components/Page'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import Alert from '@mui/material/Alert'; import Box from '@mui/material/Box'; import Button from '@mui/material/Button'; diff --git a/src/apps/dashboard/routes/playback/resume.tsx b/src/apps/dashboard/routes/playback/resume.tsx index 520c15eaf..6bd23a8ce 100644 --- a/src/apps/dashboard/routes/playback/resume.tsx +++ b/src/apps/dashboard/routes/playback/resume.tsx @@ -1,7 +1,7 @@ import React from 'react'; import Page from 'components/Page'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import Alert from '@mui/material/Alert'; import Box from '@mui/material/Box'; import Button from '@mui/material/Button'; diff --git a/src/apps/dashboard/routes/playback/streaming.tsx b/src/apps/dashboard/routes/playback/streaming.tsx index d3d5a3f56..b3be899d6 100644 --- a/src/apps/dashboard/routes/playback/streaming.tsx +++ b/src/apps/dashboard/routes/playback/streaming.tsx @@ -1,7 +1,7 @@ import React from 'react'; import Page from 'components/Page'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import Alert from '@mui/material/Alert'; import Box from '@mui/material/Box'; import Button from '@mui/material/Button'; diff --git a/src/apps/dashboard/routes/playback/trickplay.tsx b/src/apps/dashboard/routes/playback/trickplay.tsx index 05984a0d7..d44814771 100644 --- a/src/apps/dashboard/routes/playback/trickplay.tsx +++ b/src/apps/dashboard/routes/playback/trickplay.tsx @@ -1,7 +1,7 @@ import React from 'react'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; import { QUERY_KEY, useConfiguration } from 'hooks/useConfiguration'; import Page from 'components/Page'; diff --git a/src/apps/dashboard/routes/settings/index.tsx b/src/apps/dashboard/routes/settings/index.tsx index 9ad2486a0..f86614600 100644 --- a/src/apps/dashboard/routes/settings/index.tsx +++ b/src/apps/dashboard/routes/settings/index.tsx @@ -11,7 +11,7 @@ import Page from 'components/Page'; import { QUERY_KEY, useConfiguration } from 'hooks/useConfiguration'; import { useSystemInfo } from 'hooks/useSystemInfo'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import React, { useCallback, useEffect, useState } from 'react'; import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; import SearchIcon from '@mui/icons-material/Search'; diff --git a/src/apps/dashboard/routes/users/parentalcontrol.tsx b/src/apps/dashboard/routes/users/parentalcontrol.tsx index 9129421fb..c171719b0 100644 --- a/src/apps/dashboard/routes/users/parentalcontrol.tsx +++ b/src/apps/dashboard/routes/users/parentalcontrol.tsx @@ -17,7 +17,7 @@ import CheckBoxElement from '../../../../elements/CheckBoxElement'; import SelectElement from '../../../../elements/SelectElement'; import Page from '../../../../components/Page'; import prompt from '../../../../components/prompt/prompt'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; type NamedItem = { name: string; diff --git a/src/apps/stable/features/playback/utils/image.ts b/src/apps/stable/features/playback/utils/image.ts index d35f678ee..4497846d9 100644 --- a/src/apps/stable/features/playback/utils/image.ts +++ b/src/apps/stable/features/playback/utils/image.ts @@ -1,7 +1,7 @@ import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind'; import { ImageType } from '@jellyfin/sdk/lib/generated-client/models/image-type'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import type { ItemDto } from 'types/base/models/item-dto'; interface ImageOptions { diff --git a/src/apps/stable/features/playback/utils/mediaSegmentManager.ts b/src/apps/stable/features/playback/utils/mediaSegmentManager.ts index 85b5b8309..a3bf7e939 100644 --- a/src/apps/stable/features/playback/utils/mediaSegmentManager.ts +++ b/src/apps/stable/features/playback/utils/mediaSegmentManager.ts @@ -5,7 +5,7 @@ import { getMediaSegmentsApi } from '@jellyfin/sdk/lib/utils/api/media-segments- import type { PlaybackManager } from 'components/playback/playbackmanager'; import { TICKS_PER_MILLISECOND, TICKS_PER_SECOND } from 'constants/time'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { currentSettings as userSettings } from 'scripts/settings/userSettings'; import type { PlayerState } from 'types/playbackStopInfo'; import type { Event } from 'utils/events'; diff --git a/src/apps/wizard/controllers/finish/index.js b/src/apps/wizard/controllers/finish/index.js index 05770cc15..bea7e28e7 100644 --- a/src/apps/wizard/controllers/finish/index.js +++ b/src/apps/wizard/controllers/finish/index.js @@ -1,5 +1,5 @@ import loading from 'components/loading/loading'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; function onFinish() { loading.show(); diff --git a/src/apps/wizard/controllers/library.js b/src/apps/wizard/controllers/library.js index 598fb29a5..dfa0f17e4 100644 --- a/src/apps/wizard/controllers/library.js +++ b/src/apps/wizard/controllers/library.js @@ -4,7 +4,7 @@ import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUti import confirm from 'components/confirm/confirm'; import loading from 'components/loading/loading'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import dom from 'scripts/dom'; import taskButton from 'scripts/taskbutton'; import Dashboard, { pageClassOn, pageIdOn } from 'utils/dashboard'; diff --git a/src/apps/wizard/controllers/remote/index.js b/src/apps/wizard/controllers/remote/index.js index 441d67ea1..7b35e2cb6 100644 --- a/src/apps/wizard/controllers/remote/index.js +++ b/src/apps/wizard/controllers/remote/index.js @@ -1,5 +1,5 @@ import loading from 'components/loading/loading'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import Dashboard from 'utils/dashboard'; import 'elements/emby-checkbox/emby-checkbox'; diff --git a/src/apps/wizard/controllers/settings/index.js b/src/apps/wizard/controllers/settings/index.js index 605910235..765530a2b 100644 --- a/src/apps/wizard/controllers/settings/index.js +++ b/src/apps/wizard/controllers/settings/index.js @@ -1,5 +1,5 @@ import loading from 'components/loading/loading'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import Dashboard from 'utils/dashboard'; import 'elements/emby-button/emby-button'; diff --git a/src/apps/wizard/controllers/start/index.js b/src/apps/wizard/controllers/start/index.js index 0311f5da6..9081a6c52 100644 --- a/src/apps/wizard/controllers/start/index.js +++ b/src/apps/wizard/controllers/start/index.js @@ -1,5 +1,5 @@ import loading from 'components/loading/loading'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import Dashboard from 'utils/dashboard'; import dom from 'scripts/dom'; diff --git a/src/apps/wizard/controllers/user/index.js b/src/apps/wizard/controllers/user/index.js index 034f5e27e..a9255754f 100644 --- a/src/apps/wizard/controllers/user/index.js +++ b/src/apps/wizard/controllers/user/index.js @@ -1,7 +1,7 @@ import loading from 'components/loading/loading'; import toast from 'components/toast/toast'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import Dashboard from 'utils/dashboard'; import 'styles/dashboard.scss'; diff --git a/src/components/ConnectionRequired.tsx b/src/components/ConnectionRequired.tsx index ec4e83907..e84e86de4 100644 --- a/src/components/ConnectionRequired.tsx +++ b/src/components/ConnectionRequired.tsx @@ -3,8 +3,7 @@ import { Outlet, useLocation, useNavigate } from 'react-router-dom'; import type { ApiClient, ConnectResponse } from 'jellyfin-apiclient'; import globalize from 'lib/globalize'; -import { ConnectionState } from 'lib/jellyfin-apiclient/connectionState'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ConnectionState, ServerConnections } from 'lib/jellyfin-apiclient'; import alert from './alert'; import Loading from './loading/LoadingComponent'; diff --git a/src/components/ServerContentPage.tsx b/src/components/ServerContentPage.tsx index 152d23cb8..2400e4fd1 100644 --- a/src/components/ServerContentPage.tsx +++ b/src/components/ServerContentPage.tsx @@ -3,7 +3,7 @@ import { useLocation } from 'react-router-dom'; import viewManager from './viewManager/viewManager'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import type { RestoreViewFailResponse } from 'types/viewManager'; interface ServerContentPageProps { diff --git a/src/components/activitylog.js b/src/components/activitylog.js index 4afc28fdb..cde6c81da 100644 --- a/src/components/activitylog.js +++ b/src/components/activitylog.js @@ -1,7 +1,7 @@ import escapeHtml from 'escape-html'; import Events from '../utils/events.ts'; import globalize from '../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import dom from '../scripts/dom'; import { formatRelative } from 'date-fns'; import serverNotifications from '../scripts/serverNotifications'; diff --git a/src/components/backdrop/backdrop.js b/src/components/backdrop/backdrop.js index 14d71298e..cc7346d5f 100644 --- a/src/components/backdrop/backdrop.js +++ b/src/components/backdrop/backdrop.js @@ -1,5 +1,5 @@ import isEqual from 'lodash-es/isEqual'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import browser from '../../scripts/browser'; import { playbackManager } from '../playback/playbackmanager'; import dom from '../../scripts/dom'; diff --git a/src/components/cardbuilder/cardBuilder.js b/src/components/cardbuilder/cardBuilder.js index 6882a8409..b44b6e104 100644 --- a/src/components/cardbuilder/cardBuilder.js +++ b/src/components/cardbuilder/cardBuilder.js @@ -12,7 +12,7 @@ import browser from 'scripts/browser'; import datetime from 'scripts/datetime'; import dom from 'scripts/dom'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { getBackdropShape, getPortraitShape, getSquareShape } from 'utils/card'; import { getItemTypeIcon, getLibraryIcon } from 'utils/image'; diff --git a/src/components/cardbuilder/chaptercardbuilder.js b/src/components/cardbuilder/chaptercardbuilder.js index 5249e00a4..f8fa94e6a 100644 --- a/src/components/cardbuilder/chaptercardbuilder.js +++ b/src/components/cardbuilder/chaptercardbuilder.js @@ -6,7 +6,7 @@ import escapeHtml from 'escape-html'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import datetime from '../../scripts/datetime'; import imageLoader from '../images/imageLoader'; import layoutManager from '../layoutManager'; diff --git a/src/components/channelMapper/channelMapper.js b/src/components/channelMapper/channelMapper.js index 0195aa47c..91caf81c9 100644 --- a/src/components/channelMapper/channelMapper.js +++ b/src/components/channelMapper/channelMapper.js @@ -3,7 +3,7 @@ import dom from '../../scripts/dom'; import dialogHelper from '../dialogHelper/dialogHelper'; import loading from '../loading/loading'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import actionsheet from '../actionSheet/actionSheet'; import '../../elements/emby-input/emby-input'; import '../../elements/emby-button/paper-icon-button-light'; diff --git a/src/components/collectionEditor/collectionEditor.js b/src/components/collectionEditor/collectionEditor.js index ff4a69abd..a8981f2b3 100644 --- a/src/components/collectionEditor/collectionEditor.js +++ b/src/components/collectionEditor/collectionEditor.js @@ -5,7 +5,7 @@ import loading from '../loading/loading'; import layoutManager from '../layoutManager'; import { appRouter } from '../router/appRouter'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import '../../elements/emby-button/emby-button'; import '../../elements/emby-button/paper-icon-button-light'; import '../../elements/emby-checkbox/emby-checkbox'; diff --git a/src/components/displaySettings/displaySettings.js b/src/components/displaySettings/displaySettings.js index aea0137b4..21eef9f28 100644 --- a/src/components/displaySettings/displaySettings.js +++ b/src/components/displaySettings/displaySettings.js @@ -6,7 +6,7 @@ import { appHost } from '../apphost'; import focusManager from '../focusManager'; import datetime from '../../scripts/datetime'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import loading from '../loading/loading'; import skinManager from '../../scripts/themeManager'; import { PluginType } from '../../types/plugin.ts'; diff --git a/src/components/filterdialog/filterdialog.js b/src/components/filterdialog/filterdialog.js index 02a0828da..1e192372f 100644 --- a/src/components/filterdialog/filterdialog.js +++ b/src/components/filterdialog/filterdialog.js @@ -1,7 +1,7 @@ import dom from '../../scripts/dom'; import dialogHelper from '../dialogHelper/dialogHelper'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import union from 'lodash-es/union'; import Events from '../../utils/events.ts'; import '../../elements/emby-checkbox/emby-checkbox'; diff --git a/src/components/filtermenu/filtermenu.js b/src/components/filtermenu/filtermenu.js index e1891caeb..a77e7d110 100644 --- a/src/components/filtermenu/filtermenu.js +++ b/src/components/filtermenu/filtermenu.js @@ -5,7 +5,7 @@ import dialogHelper from '../dialogHelper/dialogHelper'; import inputManager from '../../scripts/inputManager'; import layoutManager from '../layoutManager'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import * as userSettings from '../../scripts/settings/userSettings'; import '../../elements/emby-checkbox/emby-checkbox'; import '../../elements/emby-input/emby-input'; diff --git a/src/components/groupedcards.js b/src/components/groupedcards.js index 1594353ba..1756280ed 100644 --- a/src/components/groupedcards.js +++ b/src/components/groupedcards.js @@ -1,4 +1,4 @@ -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import dom from '../scripts/dom'; import { appRouter } from './router/appRouter'; import Dashboard from '../utils/dashboard'; diff --git a/src/components/guide/guide.js b/src/components/guide/guide.js index ccb1ba06c..20795ea2d 100644 --- a/src/components/guide/guide.js +++ b/src/components/guide/guide.js @@ -2,7 +2,7 @@ import escapeHtml from 'escape-html'; import inputManager from '../../scripts/inputManager'; import browser from '../../scripts/browser'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import Events from '../../utils/events.ts'; import scrollHelper from '../../scripts/scrollHelper'; import serverNotifications from '../../scripts/serverNotifications'; diff --git a/src/components/homeScreenSettings/homeScreenSettings.js b/src/components/homeScreenSettings/homeScreenSettings.js index ea4aefe08..d330c8f22 100644 --- a/src/components/homeScreenSettings/homeScreenSettings.js +++ b/src/components/homeScreenSettings/homeScreenSettings.js @@ -2,7 +2,7 @@ import escapeHtml from 'escape-html'; import { getUserViewsQuery } from 'hooks/useUserViews'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { toApi } from 'utils/jellyfin-apiclient/compat'; import { queryClient } from 'utils/query/queryClient'; diff --git a/src/components/homesections/sections/activeRecordings.ts b/src/components/homesections/sections/activeRecordings.ts index c4bf5f9b1..72ab3dfe6 100644 --- a/src/components/homesections/sections/activeRecordings.ts +++ b/src/components/homesections/sections/activeRecordings.ts @@ -3,7 +3,7 @@ import type { ApiClient } from 'jellyfin-apiclient'; import cardBuilder from 'components/cardbuilder/cardBuilder'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import type { SectionContainerElement, SectionOptions } from './section'; diff --git a/src/components/homesections/sections/liveTv.ts b/src/components/homesections/sections/liveTv.ts index 140723e7f..4b8b17cbd 100644 --- a/src/components/homesections/sections/liveTv.ts +++ b/src/components/homesections/sections/liveTv.ts @@ -6,7 +6,7 @@ import { appRouter } from 'components/router/appRouter'; import cardBuilder from 'components/cardbuilder/cardBuilder'; import layoutManager from 'components/layoutManager'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { getBackdropShape } from 'utils/card'; import type { SectionContainerElement, SectionOptions } from './section'; diff --git a/src/components/homesections/sections/nextUp.ts b/src/components/homesections/sections/nextUp.ts index 0ab23c4bb..539472bbf 100644 --- a/src/components/homesections/sections/nextUp.ts +++ b/src/components/homesections/sections/nextUp.ts @@ -5,7 +5,7 @@ import cardBuilder from 'components/cardbuilder/cardBuilder'; import layoutManager from 'components/layoutManager'; import { appRouter } from 'components/router/appRouter'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import type { UserSettings } from 'scripts/settings/userSettings'; import { getBackdropShape } from 'utils/card'; diff --git a/src/components/homesections/sections/recentlyAdded.ts b/src/components/homesections/sections/recentlyAdded.ts index f0b71b943..5f35ba303 100644 --- a/src/components/homesections/sections/recentlyAdded.ts +++ b/src/components/homesections/sections/recentlyAdded.ts @@ -9,7 +9,7 @@ import cardBuilder from 'components/cardbuilder/cardBuilder'; import layoutManager from 'components/layoutManager'; import { appRouter } from 'components/router/appRouter'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { getBackdropShape, getPortraitShape, getSquareShape } from 'utils/card'; import type { SectionContainerElement, SectionOptions } from './section'; diff --git a/src/components/homesections/sections/resume.ts b/src/components/homesections/sections/resume.ts index c58ee4a71..bb9215b2b 100644 --- a/src/components/homesections/sections/resume.ts +++ b/src/components/homesections/sections/resume.ts @@ -4,7 +4,7 @@ import type { ApiClient } from 'jellyfin-apiclient'; import cardBuilder from 'components/cardbuilder/cardBuilder'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import type { UserSettings } from 'scripts/settings/userSettings'; import { getBackdropShape, getPortraitShape } from 'utils/card'; diff --git a/src/components/imageDownloader/imageDownloader.js b/src/components/imageDownloader/imageDownloader.js index 5c82419f8..b4ddaf85d 100644 --- a/src/components/imageDownloader/imageDownloader.js +++ b/src/components/imageDownloader/imageDownloader.js @@ -7,7 +7,7 @@ import browser from '../../scripts/browser'; import layoutManager from '../layoutManager'; import scrollHelper from '../../scripts/scrollHelper'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import '../../elements/emby-checkbox/emby-checkbox'; import '../../elements/emby-button/paper-icon-button-light'; import '../../elements/emby-button/emby-button'; diff --git a/src/components/imageUploader/imageUploader.js b/src/components/imageUploader/imageUploader.js index b4e84c00e..1f26dbff3 100644 --- a/src/components/imageUploader/imageUploader.js +++ b/src/components/imageUploader/imageUploader.js @@ -10,7 +10,7 @@ import loading from '../loading/loading'; import scrollHelper from '../../scripts/scrollHelper'; import layoutManager from '../layoutManager'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import '../../elements/emby-button/emby-button'; import '../../elements/emby-select/emby-select'; diff --git a/src/components/imageeditor/imageeditor.js b/src/components/imageeditor/imageeditor.js index ab9f1ae93..ab5f7832d 100644 --- a/src/components/imageeditor/imageeditor.js +++ b/src/components/imageeditor/imageeditor.js @@ -4,7 +4,7 @@ import dom from '../../scripts/dom'; import layoutManager from '../layoutManager'; import focusManager from '../focusManager'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import scrollHelper from '../../scripts/scrollHelper'; import imageLoader from '../images/imageLoader'; import browser from '../../scripts/browser'; diff --git a/src/components/itemContextMenu.js b/src/components/itemContextMenu.js index 9b1368ceb..959b391d8 100644 --- a/src/components/itemContextMenu.js +++ b/src/components/itemContextMenu.js @@ -2,7 +2,7 @@ import browser from '../scripts/browser'; import { copy } from '../scripts/clipboard'; import dom from '../scripts/dom'; import globalize from '../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import actionsheet from './actionSheet/actionSheet'; import { appHost } from './apphost'; import { appRouter } from './router/appRouter'; diff --git a/src/components/itemHelper.js b/src/components/itemHelper.js index c1e87dea1..fa8aadbdd 100644 --- a/src/components/itemHelper.js +++ b/src/components/itemHelper.js @@ -7,7 +7,7 @@ import { getPlaylistsApi } from '@jellyfin/sdk/lib/utils/api/playlists-api'; import { appHost } from './apphost'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { toApi } from 'utils/jellyfin-apiclient/compat'; export function getDisplayName(item, options = {}) { diff --git a/src/components/itemMediaInfo/itemMediaInfo.js b/src/components/itemMediaInfo/itemMediaInfo.js index 95e2af29f..70c35e848 100644 --- a/src/components/itemMediaInfo/itemMediaInfo.js +++ b/src/components/itemMediaInfo/itemMediaInfo.js @@ -11,7 +11,7 @@ import toast from '../toast/toast'; import { copy } from '../../scripts/clipboard'; import dom from '../../scripts/dom'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import itemHelper from '../../components/itemHelper'; import loading from '../loading/loading'; import '../../elements/emby-select/emby-select'; diff --git a/src/components/itemidentifier/itemidentifier.js b/src/components/itemidentifier/itemidentifier.js index 2cfebb1f8..b374e47da 100644 --- a/src/components/itemidentifier/itemidentifier.js +++ b/src/components/itemidentifier/itemidentifier.js @@ -8,7 +8,7 @@ import escapeHtml from 'escape-html'; import dialogHelper from '../dialogHelper/dialogHelper'; import loading from '../loading/loading'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import scrollHelper from '../../scripts/scrollHelper'; import layoutManager from '../layoutManager'; import focusManager from '../focusManager'; diff --git a/src/components/listview/listview.js b/src/components/listview/listview.js index d501c3180..5b6c54c2b 100644 --- a/src/components/listview/listview.js +++ b/src/components/listview/listview.js @@ -10,7 +10,7 @@ import mediaInfo from '../mediainfo/mediainfo'; import indicators from '../indicators/indicators'; import layoutManager from '../layoutManager'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import datetime from '../../scripts/datetime'; import cardBuilder from '../cardbuilder/cardBuilder'; import './listview.scss'; diff --git a/src/components/lyricseditor/lyricseditor.js b/src/components/lyricseditor/lyricseditor.js index 9fcbde190..bb393ea48 100644 --- a/src/components/lyricseditor/lyricseditor.js +++ b/src/components/lyricseditor/lyricseditor.js @@ -5,7 +5,7 @@ import { toApi } from 'utils/jellyfin-apiclient/compat'; import dialogHelper from '../dialogHelper/dialogHelper'; import layoutManager from '../layoutManager'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import loading from '../loading/loading'; import focusManager from '../focusManager'; import dom from '../../scripts/dom'; diff --git a/src/components/lyricsuploader/lyricsuploader.js b/src/components/lyricsuploader/lyricsuploader.js index 85b5fc692..6755e4fc0 100644 --- a/src/components/lyricsuploader/lyricsuploader.js +++ b/src/components/lyricsuploader/lyricsuploader.js @@ -8,7 +8,7 @@ import loading from '../../components/loading/loading'; import scrollHelper from '../../scripts/scrollHelper'; import layoutManager from '../layoutManager'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import template from './lyricsuploader.template.html'; import toast from '../toast/toast'; import '../../elements/emby-button/emby-button'; diff --git a/src/components/metadataEditor/metadataEditor.js b/src/components/metadataEditor/metadataEditor.js index 912ffef1d..6dc155a84 100644 --- a/src/components/metadataEditor/metadataEditor.js +++ b/src/components/metadataEditor/metadataEditor.js @@ -6,7 +6,7 @@ import datetime from '../../scripts/datetime'; import loading from '../loading/loading'; import focusManager from '../focusManager'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import '../../elements/emby-checkbox/emby-checkbox'; import '../../elements/emby-input/emby-input'; diff --git a/src/components/multiSelect/multiSelect.js b/src/components/multiSelect/multiSelect.js index 1a0800ae1..95e59d9ca 100644 --- a/src/components/multiSelect/multiSelect.js +++ b/src/components/multiSelect/multiSelect.js @@ -2,7 +2,7 @@ import browser from '../../scripts/browser'; import { appHost } from '../apphost'; import loading from '../loading/loading'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import dom from '../../scripts/dom'; import './multiSelect.scss'; import alert from '../alert'; diff --git a/src/components/notifications/notifications.js b/src/components/notifications/notifications.js index 609f96ace..9edd0ec18 100644 --- a/src/components/notifications/notifications.js +++ b/src/components/notifications/notifications.js @@ -2,7 +2,7 @@ import serverNotifications from '../../scripts/serverNotifications'; import { playbackManager } from '../playback/playbackmanager'; import Events from '../../utils/events.ts'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { getItems } from '../../utils/jellyfin-apiclient/getItems.ts'; import NotificationIcon from './notificationicon.png'; diff --git a/src/components/nowPlayingBar/nowPlayingBar.js b/src/components/nowPlayingBar/nowPlayingBar.js index 72f6375d4..0184cec0b 100644 --- a/src/components/nowPlayingBar/nowPlayingBar.js +++ b/src/components/nowPlayingBar/nowPlayingBar.js @@ -1,7 +1,7 @@ import { getImageUrl } from 'apps/stable/features/playback/utils/image'; import { getItemTextLines } from 'apps/stable/features/playback/utils/itemText'; import { appRouter, isLyricsPage } from 'components/router/appRouter'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import datetime from '../../scripts/datetime'; import Events from '../../utils/events.ts'; diff --git a/src/components/playback/displayMirrorManager.ts b/src/components/playback/displayMirrorManager.ts index cda68897a..63d7059f8 100644 --- a/src/components/playback/displayMirrorManager.ts +++ b/src/components/playback/displayMirrorManager.ts @@ -1,5 +1,5 @@ import { getItemQuery } from 'hooks/useItem'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { toApi } from 'utils/jellyfin-apiclient/compat'; import { queryClient } from 'utils/query/queryClient'; diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index d181e2619..b3c519111 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -24,7 +24,7 @@ import { getItemBackdropImageUrl } from '../../utils/jellyfin-apiclient/backdrop import { PlayerEvent } from 'apps/stable/features/playback/constants/playerEvent'; import { bindMediaSegmentManager } from 'apps/stable/features/playback/utils/mediaSegmentManager'; import { bindMediaSessionSubscriber } from 'apps/stable/features/playback/utils/mediaSessionSubscriber'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { MediaError } from 'types/mediaError'; import { getMediaError } from 'utils/mediaError'; import { toApi } from 'utils/jellyfin-apiclient/compat'; diff --git a/src/components/playback/playersettingsmenu.js b/src/components/playback/playersettingsmenu.js index 8c6134969..5b0aca301 100644 --- a/src/components/playback/playersettingsmenu.js +++ b/src/components/playback/playersettingsmenu.js @@ -1,7 +1,7 @@ import actionsheet from '../actionSheet/actionSheet'; import { playbackManager } from '../playback/playbackmanager'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import qualityoptions from '../qualityOptions'; function showQualityMenu(player, btn) { diff --git a/src/components/playbackSettings/playbackSettings.js b/src/components/playbackSettings/playbackSettings.js index e67647fcd..0050e0c66 100644 --- a/src/components/playbackSettings/playbackSettings.js +++ b/src/components/playbackSettings/playbackSettings.js @@ -3,7 +3,7 @@ import escapeHTML from 'escape-html'; import { MediaSegmentAction } from 'apps/stable/features/playback/constants/mediaSegmentAction'; import { getId, getMediaSegmentAction } from 'apps/stable/features/playback/utils/mediaSegmentSettings'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import appSettings from '../../scripts/settings/appSettings'; import { appHost } from '../apphost'; diff --git a/src/components/playerstats/playerstats.js b/src/components/playerstats/playerstats.js index b67a7c863..97d4a7afd 100644 --- a/src/components/playerstats/playerstats.js +++ b/src/components/playerstats/playerstats.js @@ -1,6 +1,6 @@ import '../../elements/emby-button/paper-icon-button-light'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import Events from '../../utils/events.ts'; import layoutManager from '../layoutManager'; import { playbackManager } from '../playback/playbackmanager'; diff --git a/src/components/playlisteditor/playlisteditor.ts b/src/components/playlisteditor/playlisteditor.ts index 99836cf9c..c9d9ac5af 100644 --- a/src/components/playlisteditor/playlisteditor.ts +++ b/src/components/playlisteditor/playlisteditor.ts @@ -8,7 +8,7 @@ import escapeHtml from 'escape-html'; import toast from 'components/toast/toast'; import dom from 'scripts/dom'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { currentSettings as userSettings } from 'scripts/settings/userSettings'; import { PluginType } from 'types/plugin'; import { toApi } from 'utils/jellyfin-apiclient/compat'; diff --git a/src/components/pluginManager.js b/src/components/pluginManager.js index 811e82a74..7f9d57dd1 100644 --- a/src/components/pluginManager.js +++ b/src/components/pluginManager.js @@ -8,7 +8,7 @@ import { appRouter } from './router/appRouter'; import * as inputManager from '../scripts/inputManager'; import toast from '../components/toast/toast'; import confirm from '../components/confirm/confirm'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import * as dashboard from '../utils/dashboard'; // TODO: replace with each plugin version diff --git a/src/components/recordingcreator/recordingbutton.js b/src/components/recordingcreator/recordingbutton.js index b78e3b9f9..90e266f7e 100644 --- a/src/components/recordingcreator/recordingbutton.js +++ b/src/components/recordingcreator/recordingbutton.js @@ -1,4 +1,4 @@ -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import dom from '../../scripts/dom'; import recordingHelper from './recordinghelper'; diff --git a/src/components/recordingcreator/recordingcreator.js b/src/components/recordingcreator/recordingcreator.js index cc040aa64..14a4c6d0d 100644 --- a/src/components/recordingcreator/recordingcreator.js +++ b/src/components/recordingcreator/recordingcreator.js @@ -1,6 +1,6 @@ import dialogHelper from '../dialogHelper/dialogHelper'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import layoutManager from '../layoutManager'; import mediaInfo from '../mediainfo/mediainfo'; import loading from '../loading/loading'; diff --git a/src/components/recordingcreator/recordingeditor.js b/src/components/recordingcreator/recordingeditor.js index af71d102d..e35d98024 100644 --- a/src/components/recordingcreator/recordingeditor.js +++ b/src/components/recordingcreator/recordingeditor.js @@ -1,7 +1,7 @@ import dialogHelper from '../dialogHelper/dialogHelper'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import layoutManager from '../layoutManager'; import loading from '../loading/loading'; import scrollHelper from '../../scripts/scrollHelper'; diff --git a/src/components/recordingcreator/recordingfields.js b/src/components/recordingcreator/recordingfields.js index b443698d1..a1d3103c8 100644 --- a/src/components/recordingcreator/recordingfields.js +++ b/src/components/recordingcreator/recordingfields.js @@ -1,5 +1,5 @@ import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import Events from '../../utils/events.ts'; import serverNotifications from '../../scripts/serverNotifications'; import loading from '../loading/loading'; diff --git a/src/components/recordingcreator/recordinghelper.js b/src/components/recordingcreator/recordinghelper.js index 55aa52c0c..a251590a3 100644 --- a/src/components/recordingcreator/recordinghelper.js +++ b/src/components/recordingcreator/recordinghelper.js @@ -1,5 +1,5 @@ import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import loading from '../loading/loading'; import toast from '../toast/toast'; import confirm from '../confirm/confirm'; diff --git a/src/components/recordingcreator/seriesrecordingeditor.js b/src/components/recordingcreator/seriesrecordingeditor.js index ccc2d6940..6580b03af 100644 --- a/src/components/recordingcreator/seriesrecordingeditor.js +++ b/src/components/recordingcreator/seriesrecordingeditor.js @@ -1,6 +1,6 @@ import dialogHelper from '../dialogHelper/dialogHelper'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import layoutManager from '../layoutManager'; import loading from '../loading/loading'; import scrollHelper from '../../scripts/scrollHelper'; diff --git a/src/components/refreshdialog/refreshdialog.js b/src/components/refreshdialog/refreshdialog.js index 67f4bd4a4..721ba36e6 100644 --- a/src/components/refreshdialog/refreshdialog.js +++ b/src/components/refreshdialog/refreshdialog.js @@ -3,7 +3,7 @@ import dialogHelper from '../dialogHelper/dialogHelper'; import loading from '../loading/loading'; import layoutManager from '../layoutManager'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import '../../elements/emby-input/emby-input'; import '../../elements/emby-button/emby-button'; diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index 76beb45ab..a2d32ed24 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -11,7 +11,7 @@ import { playbackManager } from '../playback/playbackmanager'; import Events from '../../utils/events.ts'; import { appHost } from '../apphost'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import layoutManager from '../layoutManager'; import * as userSettings from '../../scripts/settings/userSettings'; import itemContextMenu from '../itemContextMenu'; diff --git a/src/components/router/appRouter.js b/src/components/router/appRouter.js index 23013117b..032ddfaf1 100644 --- a/src/components/router/appRouter.js +++ b/src/components/router/appRouter.js @@ -7,7 +7,7 @@ import loading from '../loading/loading'; import alert from '../alert'; import { getItemQuery } from 'hooks/useItem'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { toApi } from 'utils/jellyfin-apiclient/compat'; import { queryClient } from 'utils/query/queryClient'; import { history } from 'RootAppRouter'; diff --git a/src/components/shortcuts.js b/src/components/shortcuts.js index 82386c503..1ff18ef23 100644 --- a/src/components/shortcuts.js +++ b/src/components/shortcuts.js @@ -8,7 +8,7 @@ import { playbackManager } from './playback/playbackmanager'; import inputManager from '../scripts/inputManager'; import { appRouter } from './router/appRouter'; import globalize from '../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import dom from '../scripts/dom'; import recordingHelper from './recordingcreator/recordinghelper'; import toast from './toast/toast'; diff --git a/src/components/slideshow/slideshow.js b/src/components/slideshow/slideshow.js index 6b223c140..49bf8dc1e 100644 --- a/src/components/slideshow/slideshow.js +++ b/src/components/slideshow/slideshow.js @@ -3,7 +3,7 @@ * @module components/slideshow/slideshow */ import dialogHelper from '../dialogHelper/dialogHelper'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import inputManager from '../../scripts/inputManager'; import layoutManager from '../layoutManager'; import focusManager from '../focusManager'; diff --git a/src/components/subtitleeditor/subtitleeditor.js b/src/components/subtitleeditor/subtitleeditor.js index 2941f0078..fa4d71e84 100644 --- a/src/components/subtitleeditor/subtitleeditor.js +++ b/src/components/subtitleeditor/subtitleeditor.js @@ -3,7 +3,7 @@ import { appHost } from '../apphost'; import dialogHelper from '../dialogHelper/dialogHelper'; import layoutManager from '../layoutManager'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import * as userSettings from '../../scripts/settings/userSettings'; import loading from '../loading/loading'; import focusManager from '../focusManager'; diff --git a/src/components/subtitlesettings/subtitlesettings.js b/src/components/subtitlesettings/subtitlesettings.js index b335b877e..ee8b2c3ed 100644 --- a/src/components/subtitlesettings/subtitlesettings.js +++ b/src/components/subtitlesettings/subtitlesettings.js @@ -1,5 +1,5 @@ import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { appHost } from '../apphost'; import appSettings from '../../scripts/settings/appSettings'; import focusManager from '../focusManager'; diff --git a/src/components/subtitleuploader/subtitleuploader.js b/src/components/subtitleuploader/subtitleuploader.js index 9b363576f..f70726577 100644 --- a/src/components/subtitleuploader/subtitleuploader.js +++ b/src/components/subtitleuploader/subtitleuploader.js @@ -8,7 +8,7 @@ import loading from '../../components/loading/loading'; import scrollHelper from '../../scripts/scrollHelper'; import layoutManager from '../layoutManager'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import template from './subtitleuploader.template.html'; import toast from '../toast/toast'; diff --git a/src/components/themeMediaPlayer.js b/src/components/themeMediaPlayer.js index 33a50dc70..c8c267532 100644 --- a/src/components/themeMediaPlayer.js +++ b/src/components/themeMediaPlayer.js @@ -3,7 +3,7 @@ import { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type' import { getLibraryApi } from '@jellyfin/sdk/lib/utils/api/library-api'; import { getItemQuery } from 'hooks/useItem'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { currentSettings as userSettings } from 'scripts/settings/userSettings'; import { ItemKind } from 'types/base/models/item-kind'; import Events from 'utils/events.ts'; diff --git a/src/components/upnextdialog/upnextdialog.js b/src/components/upnextdialog/upnextdialog.js index 061fac20b..7bb40943d 100644 --- a/src/components/upnextdialog/upnextdialog.js +++ b/src/components/upnextdialog/upnextdialog.js @@ -5,7 +5,7 @@ import mediaInfo from '../mediainfo/mediainfo'; import layoutManager from '../layoutManager'; import focusManager from '../focusManager'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import itemHelper from '../itemHelper'; import './upnextdialog.scss'; diff --git a/src/components/userdatabuttons/userdatabuttons.js b/src/components/userdatabuttons/userdatabuttons.js index 16ab8b755..453664e39 100644 --- a/src/components/userdatabuttons/userdatabuttons.js +++ b/src/components/userdatabuttons/userdatabuttons.js @@ -1,5 +1,5 @@ import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import dom from '../../scripts/dom'; import itemHelper from '../itemHelper'; diff --git a/src/controllers/favorites.js b/src/controllers/favorites.js index 84d79ea38..b926859f0 100644 --- a/src/controllers/favorites.js +++ b/src/controllers/favorites.js @@ -4,7 +4,7 @@ import layoutManager from 'components/layoutManager'; import { appRouter } from 'components/router/appRouter'; import dom from 'scripts/dom'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { getBackdropShape, getPortraitShape, getSquareShape } from 'utils/card'; import { ItemSortBy } from '@jellyfin/sdk/lib/generated-client/models/item-sort-by'; diff --git a/src/controllers/hometab.js b/src/controllers/hometab.js index aeabb131f..15aefabb8 100644 --- a/src/controllers/hometab.js +++ b/src/controllers/hometab.js @@ -2,7 +2,7 @@ import * as userSettings from '../scripts/settings/userSettings'; import loading from '../components/loading/loading'; import focusManager from '../components/focusManager'; import homeSections from '../components/homesections/homesections'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import '../elements/emby-itemscontainer/emby-itemscontainer'; diff --git a/src/controllers/itemDetails/index.js b/src/controllers/itemDetails/index.js index 1c4088d31..122b6a7c3 100644 --- a/src/controllers/itemDetails/index.js +++ b/src/controllers/itemDetails/index.js @@ -22,7 +22,7 @@ import { playbackManager } from 'components/playback/playbackmanager'; import { appRouter } from 'components/router/appRouter'; import itemShortcuts from 'components/shortcuts'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import browser from 'scripts/browser'; import datetime from 'scripts/datetime'; import dom from 'scripts/dom'; diff --git a/src/controllers/list.js b/src/controllers/list.js index b1a772cb6..2c3d09019 100644 --- a/src/controllers/list.js +++ b/src/controllers/list.js @@ -8,7 +8,7 @@ import AlphaNumericShortcuts from '../scripts/alphanumericshortcuts'; import libraryBrowser from '../scripts/libraryBrowser'; import { playbackManager } from '../components/playback/playbackmanager'; import AlphaPicker from '../components/alphaPicker/alphaPicker'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import '../elements/emby-itemscontainer/emby-itemscontainer'; import '../elements/emby-scroller/emby-scroller'; import LibraryMenu from '../scripts/libraryMenu'; diff --git a/src/controllers/lyrics.js b/src/controllers/lyrics.js index 98aa74e8a..36ae408bc 100644 --- a/src/controllers/lyrics.js +++ b/src/controllers/lyrics.js @@ -9,7 +9,7 @@ import focusManager from 'components/focusManager'; import keyboardNavigation from 'scripts/keyboardNavigation'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import LibraryMenu from 'scripts/libraryMenu'; import Events from 'utils/events'; diff --git a/src/controllers/playback/video/index.js b/src/controllers/playback/video/index.js index 192c1b9f1..e0d51005f 100644 --- a/src/controllers/playback/video/index.js +++ b/src/controllers/playback/video/index.js @@ -22,7 +22,7 @@ import '../../../styles/videoosd.scss'; import shell from '../../../scripts/shell'; import SubtitleSync from '../../../components/subtitlesync/subtitlesync'; import { appRouter } from '../../../components/router/appRouter'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import LibraryMenu from '../../../scripts/libraryMenu'; import { setBackdropTransparency, TRANSPARENCY_LEVEL } from '../../../components/backdrop/backdrop'; import { pluginManager } from '../../../components/pluginManager'; diff --git a/src/controllers/session/addServer/index.js b/src/controllers/session/addServer/index.js index bf76d5099..68b14e890 100644 --- a/src/controllers/session/addServer/index.js +++ b/src/controllers/session/addServer/index.js @@ -1,7 +1,6 @@ import loading from 'components/loading/loading'; import globalize from 'lib/globalize'; -import { ConnectionState } from 'lib/jellyfin-apiclient/connectionState'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ConnectionState, ServerConnections } from 'lib/jellyfin-apiclient'; import appSettings from 'scripts/settings/appSettings'; import Dashboard from 'utils/dashboard'; diff --git a/src/controllers/session/login/index.js b/src/controllers/session/login/index.js index dca448018..e99d14da4 100644 --- a/src/controllers/session/login/index.js +++ b/src/controllers/session/login/index.js @@ -15,7 +15,7 @@ import toast from '../../../components/toast/toast'; import dialogHelper from '../../../components/dialogHelper/dialogHelper'; import baseAlert from '../../../components/alert'; import { getDefaultBackgroundClass } from '../../../components/cardbuilder/cardBuilderUtils'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import './login.scss'; diff --git a/src/controllers/session/selectServer/index.js b/src/controllers/session/selectServer/index.js index 0b05409e1..3ed198677 100644 --- a/src/controllers/session/selectServer/index.js +++ b/src/controllers/session/selectServer/index.js @@ -19,8 +19,7 @@ import '../../../elements/emby-button/emby-button'; import Dashboard from '../../../utils/dashboard'; import alert from '../../../components/alert'; import { getDefaultBackgroundClass } from '../../../components/cardbuilder/cardBuilderUtils'; -import { ConnectionState } from 'lib/jellyfin-apiclient/connectionState'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ConnectionState, ServerConnections } from 'lib/jellyfin-apiclient'; const enableFocusTransform = !browser.slow && !browser.edge; diff --git a/src/elements/emby-itemscontainer/emby-itemscontainer.js b/src/elements/emby-itemscontainer/emby-itemscontainer.js index 1c6948f9c..e1657d095 100644 --- a/src/elements/emby-itemscontainer/emby-itemscontainer.js +++ b/src/elements/emby-itemscontainer/emby-itemscontainer.js @@ -10,7 +10,7 @@ import browser from '../../scripts/browser'; import dom from '../../scripts/dom'; import loading from '../../components/loading/loading'; import focusManager from '../../components/focusManager'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import serverNotifications from '../../scripts/serverNotifications'; import Events from '../../utils/events.ts'; diff --git a/src/elements/emby-playstatebutton/emby-playstatebutton.js b/src/elements/emby-playstatebutton/emby-playstatebutton.js index 40dd6cccd..f41a14352 100644 --- a/src/elements/emby-playstatebutton/emby-playstatebutton.js +++ b/src/elements/emby-playstatebutton/emby-playstatebutton.js @@ -1,6 +1,6 @@ import serverNotifications from '../../scripts/serverNotifications'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import Events from '../../utils/events.ts'; import EmbyButtonPrototype from '../../elements/emby-button/emby-button'; diff --git a/src/elements/emby-ratingbutton/emby-ratingbutton.js b/src/elements/emby-ratingbutton/emby-ratingbutton.js index 6241d09df..40b581c7b 100644 --- a/src/elements/emby-ratingbutton/emby-ratingbutton.js +++ b/src/elements/emby-ratingbutton/emby-ratingbutton.js @@ -1,6 +1,6 @@ import serverNotifications from '../../scripts/serverNotifications'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import Events from '../../utils/events.ts'; import EmbyButtonPrototype from '../emby-button/emby-button'; diff --git a/src/hooks/useApi.tsx b/src/hooks/useApi.tsx index a0c899e2d..b8bd88b42 100644 --- a/src/hooks/useApi.tsx +++ b/src/hooks/useApi.tsx @@ -3,7 +3,7 @@ import type { UserDto } from '@jellyfin/sdk/lib/generated-client'; import type { ApiClient, Event } from 'jellyfin-apiclient'; import React, { type FC, type PropsWithChildren, createContext, useContext, useEffect, useMemo, useState } from 'react'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import events from 'utils/events'; import { toApi } from 'utils/jellyfin-apiclient/compat'; diff --git a/src/index.jsx b/src/index.jsx index bf426c000..8d57c445f 100644 --- a/src/index.jsx +++ b/src/index.jsx @@ -5,7 +5,7 @@ import React from 'react'; import { createRoot } from 'react-dom/client'; // NOTE: We need to import this first to initialize the connection -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { appHost } from './components/apphost'; import autoFocuser from './components/autoFocuser'; diff --git a/src/lib/jellyfin-apiclient/ServerConnections.js b/src/lib/jellyfin-apiclient/ServerConnections.js index 31e73531d..bae007970 100644 --- a/src/lib/jellyfin-apiclient/ServerConnections.js +++ b/src/lib/jellyfin-apiclient/ServerConnections.js @@ -4,13 +4,14 @@ import { Api } from '@jellyfin/sdk'; import { Credentials, ApiClient } from 'jellyfin-apiclient'; import { appHost } from 'components/apphost'; -import ConnectionManager from 'lib/jellyfin-apiclient/connectionManager'; import appSettings from 'scripts/settings/appSettings'; import { setUserInfo } from 'scripts/settings/userSettings'; import Dashboard from 'utils/dashboard'; import Events from 'utils/events.ts'; import { toApi } from 'utils/jellyfin-apiclient/compat'; +import ConnectionManager from './connectionManager'; + const normalizeImageOptions = options => { if (!options.quality && (options.maxWidth || options.width || options.maxHeight || options.height || options.fillWidth || options.fillHeight)) { options.quality = 90; diff --git a/src/lib/jellyfin-apiclient/index.ts b/src/lib/jellyfin-apiclient/index.ts new file mode 100644 index 000000000..ce919d85f --- /dev/null +++ b/src/lib/jellyfin-apiclient/index.ts @@ -0,0 +1,3 @@ +export { ConnectionMode } from './connectionMode'; +export { ConnectionState } from './connectionState'; +export { default as ServerConnections } from './ServerConnections'; diff --git a/src/plugins/backdropScreensaver/plugin.js b/src/plugins/backdropScreensaver/plugin.js index 1b0c5bfb7..fc22fbb4b 100644 --- a/src/plugins/backdropScreensaver/plugin.js +++ b/src/plugins/backdropScreensaver/plugin.js @@ -1,5 +1,5 @@ -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import * as userSettings from 'scripts/settings/userSettings'; import { PluginType } from 'types/plugin.ts'; diff --git a/src/plugins/bookPlayer/plugin.js b/src/plugins/bookPlayer/plugin.js index 9ad4e8526..1e0ad2a00 100644 --- a/src/plugins/bookPlayer/plugin.js +++ b/src/plugins/bookPlayer/plugin.js @@ -6,7 +6,7 @@ import dialogHelper from '../../components/dialogHelper/dialogHelper'; import Screenfull from 'screenfull'; import TableOfContents from './tableOfContents'; import { translateHtml } from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import browser from 'scripts/browser'; import * as userSettings from '../../scripts/settings/userSettings'; import TouchHelper from 'scripts/touchHelper'; diff --git a/src/plugins/chromecastPlayer/plugin.js b/src/plugins/chromecastPlayer/plugin.js index ed85eedab..a7c149ac4 100644 --- a/src/plugins/chromecastPlayer/plugin.js +++ b/src/plugins/chromecastPlayer/plugin.js @@ -4,7 +4,7 @@ import { playbackManager } from '../../components/playback/playbackmanager'; import globalize from '../../lib/globalize'; import CastSenderApi from './castSenderApi'; import alert from '../../components/alert'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { PluginType } from '../../types/plugin.ts'; import Events from '../../utils/events.ts'; import { getItems } from '../../utils/jellyfin-apiclient/getItems.ts'; diff --git a/src/plugins/comicsPlayer/plugin.js b/src/plugins/comicsPlayer/plugin.js index 8c84b121f..24d12f0c0 100644 --- a/src/plugins/comicsPlayer/plugin.js +++ b/src/plugins/comicsPlayer/plugin.js @@ -3,7 +3,7 @@ import loading from '../../components/loading/loading'; import dialogHelper from '../../components/dialogHelper/dialogHelper'; import keyboardnavigation from '../../scripts/keyboardNavigation'; import { appRouter } from '../../components/router/appRouter'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import * as userSettings from '../../scripts/settings/userSettings'; import { PluginType } from '../../types/plugin.ts'; diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index 5c48b5ff8..efd19e3f8 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -29,7 +29,7 @@ import { import itemHelper from '../../components/itemHelper'; import Screenfull from 'screenfull'; import globalize from '../../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import profileBuilder, { canPlaySecondaryAudio } from '../../scripts/browserDeviceProfile'; import { getIncludeCorsCredentials } from '../../scripts/settings/webSettings'; import { setBackdropTransparency, TRANSPARENCY_LEVEL } from '../../components/backdrop/backdrop'; diff --git a/src/plugins/pdfPlayer/plugin.js b/src/plugins/pdfPlayer/plugin.js index 1c040602f..f77c01364 100644 --- a/src/plugins/pdfPlayer/plugin.js +++ b/src/plugins/pdfPlayer/plugin.js @@ -3,7 +3,7 @@ import keyboardnavigation from '../../scripts/keyboardNavigation'; import dialogHelper from '../../components/dialogHelper/dialogHelper'; import dom from '../../scripts/dom'; import { appRouter } from '../../components/router/appRouter'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { PluginType } from '../../types/plugin.ts'; import Events from '../../utils/events.ts'; diff --git a/src/plugins/photoPlayer/plugin.js b/src/plugins/photoPlayer/plugin.js index 397739314..7fcec8294 100644 --- a/src/plugins/photoPlayer/plugin.js +++ b/src/plugins/photoPlayer/plugin.js @@ -1,4 +1,4 @@ -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { PluginType } from 'types/plugin.ts'; export default class PhotoPlayer { diff --git a/src/plugins/playAccessValidation/plugin.js b/src/plugins/playAccessValidation/plugin.js index 5202bf231..cae96f8c3 100644 --- a/src/plugins/playAccessValidation/plugin.js +++ b/src/plugins/playAccessValidation/plugin.js @@ -1,6 +1,6 @@ import alert from 'components/alert'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { PluginType } from 'types/plugin.ts'; function showErrorMessage() { diff --git a/src/plugins/sessionPlayer/plugin.js b/src/plugins/sessionPlayer/plugin.js index 0e55d599f..40681ae81 100644 --- a/src/plugins/sessionPlayer/plugin.js +++ b/src/plugins/sessionPlayer/plugin.js @@ -1,5 +1,5 @@ import { playbackManager } from '../../components/playback/playbackmanager'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import serverNotifications from '../../scripts/serverNotifications'; import { PluginType } from '../../types/plugin.ts'; import Events from '../../utils/events.ts'; diff --git a/src/plugins/syncPlay/plugin.ts b/src/plugins/syncPlay/plugin.ts index a32c64ec3..41f5715ab 100644 --- a/src/plugins/syncPlay/plugin.ts +++ b/src/plugins/syncPlay/plugin.ts @@ -1,5 +1,5 @@ import { playbackManager } from '../../components/playback/playbackmanager'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import Events from '../../utils/events'; import SyncPlay from './core'; import SyncPlayNoActivePlayer from './ui/players/NoActivePlayer'; diff --git a/src/plugins/syncPlay/ui/groupSelectionMenu.js b/src/plugins/syncPlay/ui/groupSelectionMenu.js index 543d83977..1b6a3d963 100644 --- a/src/plugins/syncPlay/ui/groupSelectionMenu.js +++ b/src/plugins/syncPlay/ui/groupSelectionMenu.js @@ -5,7 +5,7 @@ import actionsheet from '../../../components/actionSheet/actionSheet'; import globalize from '../../../lib/globalize'; import playbackPermissionManager from './playbackPermissionManager'; import { pluginManager } from '../../../components/pluginManager'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { PluginType } from '../../../types/plugin.ts'; import Events from '../../../utils/events.ts'; diff --git a/src/scripts/autoBackdrops.js b/src/scripts/autoBackdrops.js index 4083e4602..8c0283740 100644 --- a/src/scripts/autoBackdrops.js +++ b/src/scripts/autoBackdrops.js @@ -5,7 +5,7 @@ import { pageClassOn } from '../utils/dashboard'; import { queryClient } from 'utils/query/queryClient'; import { getBrandingOptionsQuery } from 'apps/dashboard/features/branding/api/useBrandingOptions'; import { SPLASHSCREEN_URL } from 'constants/branding'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; const cache = {}; diff --git a/src/scripts/autoThemes.js b/src/scripts/autoThemes.js index 673efa56f..3a842261a 100644 --- a/src/scripts/autoThemes.js +++ b/src/scripts/autoThemes.js @@ -1,6 +1,6 @@ import * as userSettings from './settings/userSettings'; import skinManager from './themeManager'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { pageClassOn } from 'utils/dashboard'; import Events from 'utils/events.ts'; diff --git a/src/scripts/autocast.js b/src/scripts/autocast.js index 87462f07c..ac86286e2 100644 --- a/src/scripts/autocast.js +++ b/src/scripts/autocast.js @@ -1,5 +1,5 @@ import { playbackManager } from 'components/playback/playbackmanager'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import Events from 'utils/events.ts'; export function enable(enabled) { diff --git a/src/scripts/deleteHelper.js b/src/scripts/deleteHelper.js index d9afa4d01..3f9fc8979 100644 --- a/src/scripts/deleteHelper.js +++ b/src/scripts/deleteHelper.js @@ -5,7 +5,7 @@ import alert from 'components/alert'; import confirm from 'components/confirm/confirm'; import { appRouter } from 'components/router/appRouter'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; function alertText(options) { return alert(options); diff --git a/src/scripts/itemsByName.js b/src/scripts/itemsByName.js index 6b4cbefca..e60d468d0 100644 --- a/src/scripts/itemsByName.js +++ b/src/scripts/itemsByName.js @@ -2,7 +2,7 @@ import listView from 'components/listview/listview'; import cardBuilder from 'components/cardbuilder/cardBuilder'; import imageLoader from 'components/images/imageLoader'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import 'elements/emby-itemscontainer/emby-itemscontainer'; import 'elements/emby-button/emby-button'; diff --git a/src/scripts/libraryMenu.js b/src/scripts/libraryMenu.js index cecd63381..c4c6c6d4d 100644 --- a/src/scripts/libraryMenu.js +++ b/src/scripts/libraryMenu.js @@ -20,7 +20,7 @@ import { pluginManager } from '../components/pluginManager'; import groupSelectionMenu from '../plugins/syncPlay/ui/groupSelectionMenu'; import browser from './browser'; import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import imageHelper from '../utils/image'; import { getMenuLinks } from '../scripts/settings/webSettings'; import Dashboard, { pageClassOn } from '../utils/dashboard'; diff --git a/src/scripts/playlistViewer.js b/src/scripts/playlistViewer.js index ff8e22506..2bb15930d 100644 --- a/src/scripts/playlistViewer.js +++ b/src/scripts/playlistViewer.js @@ -1,7 +1,7 @@ import { getPlaylistsApi } from '@jellyfin/sdk/lib/utils/api/playlists-api'; import listView from 'components/listview/listview'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { toApi } from 'utils/jellyfin-apiclient/compat'; function getFetchPlaylistItemsFn(apiClient, itemId) { diff --git a/src/scripts/screensavermanager.js b/src/scripts/screensavermanager.js index f085b1a91..d0b5ef1b9 100644 --- a/src/scripts/screensavermanager.js +++ b/src/scripts/screensavermanager.js @@ -1,6 +1,6 @@ import { playbackManager } from 'components/playback/playbackmanager'; import { pluginManager } from 'components/pluginManager'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import { PluginType } from 'types/plugin.ts'; import Events from 'utils/events.ts'; diff --git a/src/scripts/serverNotifications.js b/src/scripts/serverNotifications.js index 2b0d231b8..0f9353dcf 100644 --- a/src/scripts/serverNotifications.js +++ b/src/scripts/serverNotifications.js @@ -4,7 +4,7 @@ import { playbackManager } from 'components/playback/playbackmanager'; import { pluginManager } from 'components/pluginManager'; import { appRouter } from 'components/router/appRouter'; import toast from 'components/toast/toast'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import inputManager from 'scripts/inputManager'; import Events from 'utils/events.ts'; import { PluginType } from 'types/plugin.ts'; diff --git a/src/scripts/taskbutton.js b/src/scripts/taskbutton.js index bb2066fce..8a4979b60 100644 --- a/src/scripts/taskbutton.js +++ b/src/scripts/taskbutton.js @@ -1,6 +1,6 @@ import globalize from 'lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import serverNotifications from 'scripts/serverNotifications'; import Events from 'utils/events.ts'; diff --git a/src/utils/dashboard.js b/src/utils/dashboard.js index 666951acb..8c5d849eb 100644 --- a/src/utils/dashboard.js +++ b/src/utils/dashboard.js @@ -4,7 +4,7 @@ import { appRouter } from '../components/router/appRouter'; import baseAlert from '../components/alert'; import baseConfirm from '../components/confirm/confirm'; import globalize from '../lib/globalize'; -import ServerConnections from 'lib/jellyfin-apiclient/ServerConnections'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; import * as webSettings from '../scripts/settings/webSettings'; import datetime from '../scripts/datetime'; import { setBackdropTransparency } from '../components/backdrop/backdrop'; From 608434fd51977c9dc2770bc57dc270ccc4c3e40f Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 22 Apr 2025 09:53:46 -0400 Subject: [PATCH 077/645] Update README for lib/jellyfin-apiclient --- README.md | 45 +++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index f8fee50ee..4d054ac37 100644 --- a/README.md +++ b/README.md @@ -81,28 +81,29 @@ Jellyfin Web is the frontend used for most of the clients available for end user . └── src ├── apps - │   ├── dashboard # Admin dashboard app - │   ├── experimental # New experimental app - │   ├── stable # Classic (stable) app - │   └── wizard # Startup wizard app - ├── assets # Static assets - ├── components # Higher order visual components and React components - ├── constants # Common constant values - ├── controllers # Legacy page views and controllers 🧹 ❌ - ├── elements # Basic webcomponents and React equivalents 🧹 - ├── hooks # Custom React hooks - ├── lib # Reusable libraries - │   ├── globalize # Custom localization library - │   ├── legacy # Polyfills for legacy browsers - │   ├── navdrawer # Navigation drawer library for classic layout - │   └── scroller # Content scrolling library - ├── plugins # Client plugins (features dynamically loaded at runtime) - ├── scripts # Random assortment of visual components and utilities 🐉 ❌ - ├── strings # Translation files (only commit changes to en-us.json) - ├── styles # Common app Sass stylesheets - ├── themes # Sass and MUI themes - ├── types # Common TypeScript interfaces/types - └── utils # Utility functions + │   ├── dashboard # Admin dashboard app + │   ├── experimental # New experimental app + │   ├── stable # Classic (stable) app + │   └── wizard # Startup wizard app + ├── assets # Static assets + ├── components # Higher order visual components and React components + ├── constants # Common constant values + ├── controllers # Legacy page views and controllers 🧹 ❌ + ├── elements # Basic webcomponents and React equivalents 🧹 + ├── hooks # Custom React hooks + ├── lib # Reusable libraries + │   ├── globalize # Custom localization library + │   ├── jellyfin-apiclient # Supporting code for the deprecated apiclient package + │   ├── legacy # Polyfills for legacy browsers + │   ├── navdrawer # Navigation drawer library for classic layout + │   └── scroller # Content scrolling library + ├── plugins # Client plugins (features dynamically loaded at runtime) + ├── scripts # Random assortment of visual components and utilities 🐉 ❌ + ├── strings # Translation files (only commit changes to en-us.json) + ├── styles # Common app Sass stylesheets + ├── themes # Sass and MUI themes + ├── types # Common TypeScript interfaces/types + └── utils # Utility functions ``` - ❌ — Deprecated, do **not** create new files here From 83092b7ca621f1eaae26019aef7031f39d93b2ce Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 22 Apr 2025 12:38:34 -0400 Subject: [PATCH 078/645] Update authorization header in connection manager --- src/lib/jellyfin-apiclient/connectionManager.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/lib/jellyfin-apiclient/connectionManager.js b/src/lib/jellyfin-apiclient/connectionManager.js index 144a4b61d..bc39f1d5e 100644 --- a/src/lib/jellyfin-apiclient/connectionManager.js +++ b/src/lib/jellyfin-apiclient/connectionManager.js @@ -1,3 +1,4 @@ +import { getAuthorizationHeader } from '@jellyfin/sdk/lib/utils'; import { MINIMUM_VERSION } from '@jellyfin/sdk/lib/versions'; import { ApiClient } from 'jellyfin-apiclient'; @@ -224,7 +225,17 @@ export default class ConnectionManager { url: `${serverUrl}/System/Info`, dataType: 'json', headers: { - 'X-MediaBrowser-Token': server.AccessToken + 'Authorization': getAuthorizationHeader( + { + name: appName, + version: appVersion + }, + { + id: deviceId, + name: deviceName + }, + server.AccessToken + ) } }).then( (systemInfo) => { From f0896776550bf74aa75c1ac482bc6bfacd2eb35c Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 22 Apr 2025 12:50:00 -0400 Subject: [PATCH 079/645] Update authorization header in connection manager --- src/lib/jellyfin-apiclient/connectionManager.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lib/jellyfin-apiclient/connectionManager.js b/src/lib/jellyfin-apiclient/connectionManager.js index bc39f1d5e..15d6c8591 100644 --- a/src/lib/jellyfin-apiclient/connectionManager.js +++ b/src/lib/jellyfin-apiclient/connectionManager.js @@ -1,3 +1,4 @@ +import { AUTHORIZATION_HEADER } from '@jellyfin/sdk/lib/api'; import { getAuthorizationHeader } from '@jellyfin/sdk/lib/utils'; import { MINIMUM_VERSION } from '@jellyfin/sdk/lib/versions'; import { ApiClient } from 'jellyfin-apiclient'; @@ -225,7 +226,7 @@ export default class ConnectionManager { url: `${serverUrl}/System/Info`, dataType: 'json', headers: { - 'Authorization': getAuthorizationHeader( + [AUTHORIZATION_HEADER]: getAuthorizationHeader( { name: appName, version: appVersion From 1f76a661337c8af82ba8072176cbd2ba88d44ae9 Mon Sep 17 00:00:00 2001 From: Fawrrax Date: Tue, 22 Apr 2025 12:54:06 -0400 Subject: [PATCH 080/645] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index 6667c81d7..276fc7630 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -145,7 +145,7 @@ "ColorTransfer": "Värien siirto", "CommunityRating": "Yhteisön arvosana", "Composer": "Säveltäjä", - "ConfigureDateAdded": "Määritä miten 'Lisäyspäivä' tunnistetaan kohdasta Hallintapaneeli > Kirjastot > NFO-asetukset", + "ConfigureDateAdded": "Määritä miten 'Lisäyspäivä' tunnistetaan kohdasta Hallintapaneeli > Kirjastot > Näytä", "ConfirmDeleteImage": "Poista kuva?", "ConfirmDeleteItem": "Tämän kohteen poistaminen poistaa sen sekä tiedostojärjestelmästä että mediakirjastosta. Haluatko varmasti jatkaa?", "ConfirmDeleteItems": "Näiden kohteiden poistaminen poistaa ne sekä tiedostojärjestelmästä että mediakirjastosta. Haluatko varmasti jatkaa?", @@ -646,7 +646,7 @@ "EveryXHours": "{0} tunnin välein", "EveryXMinutes": "{0} minuutin välein", "EveryHour": "Tunnin välein", - "LastSeen": "Viimeksi nähty {0}", + "LastSeen": "Viimeksi aktiivinen {0}", "Yadif": "YADIF", "Writer": "Kirjoittaja", "WelcomeToProject": "Tervetuloa Jellyfiniin!", @@ -793,7 +793,7 @@ "LabelMessageText": "Viestin sisältö", "LabelMaxScreenshotsPerItem": "Kuvakaappausten enimmäismäärä per kohde:", "LabelLoginDisclaimerHelp": "Kirjautumissivun alareunassa näytettävä viesti.", - "LabelLockItemToPreventChanges": "Lukitse tämä kohde estääksesi tulevat muutokset", + "LabelLockItemToPreventChanges": "Lukitse tämä kohde estääksesi tulevat metatietojen muutokset", "LabelLocalHttpServerPortNumberHelp": "HTTP-palvelimen TCP-portin numero.", "LabelLocalHttpServerPortNumber": "Paikallisen HTTP-portin numero", "LabelKodiMetadataSaveImagePaths": "Tallenna kuvien tiedostosijainnit NFO-tiedostoihin", @@ -1026,7 +1026,7 @@ "HeaderAccessScheduleHelp": "Rajoita käyttö tiettyihin aikoihin luomalla käyttöaikataulu.", "HardwareAccelerationWarning": "Laitteistokiihdytyksen käyttöönotto voi joissain ympäristöissä aiheuttaa epävakautta. Varmista, että käyttöjärjestelmän ja näytönohjaimen ajurit ovat ajan tasalla. Mikäli huomaat videotoistossa ongelmia käyttöönoton jälkeen, palauta \"Ei mitään\" -asetus.", "EncoderPresetHelp": "Nopeampi asetus parantaa transkoodauksen nopeutta kuvanlaadun kustannuksella, ja hitaampi kuvanlaatua nopeuden kustannuksella.", - "H264CrfHelp": "Constant Rate Factor (CRF) on x264 -enkooderin kuvanlaadun vakioasetus. Voit valita arvon lukujen 0 ja 51 väliltä, jossa matalammat arvot tarkoittavat parempaa kuvanlaatua (suurempien tiedostokokojen hinnalla). Järkevät arvot ovat väliltä 18-28. Oletusarvo x264:lle on 23, joten voit käyttää sitä lähtökohtana.", + "H264CrfHelp": "Constant Rate Factor (CRF) on x264 ja x265 -ohjelmistoenkooderien kuvanlaadun vakioasetus. Voit valita arvon lukujen 0 ja 51 väliltä, jossa matalammat arvot tarkoittavat parempaa kuvanlaatua (suurempien tiedostokokojen hinnalla). Järkevät arvot ovat väliltä 18-28. Oletusarvo x264:lle on 23, joten voit käyttää sitä lähtökohtana. Laitteistoenkooderit eivät käytä näitä asetuksia.", "GuideProviderSelectListings": "Valitse luettelot", "GuideProviderLogin": "Kirjaudu", "GuestStar": "Vieraileva näyttelijä", @@ -1278,11 +1278,11 @@ "LabelTonemappingThresholdHelp": "Sävykartoitusalgoritmin parametrit on hienosäädetty kohtauskohtaisesti ja raja-arvon avulla havaitaan onko kohtaus muuttunut vai ei. Jos nykyisen kehyksen keskimääräinen kirkkaus ja tämän hetkisen keskiarvon välimatka ylittää kynnysarvon, lasketaan kohtauksen kirkkauden keski- ja huippuarvo uudelleen. Suositellut ja oletusarvot ovat 0.8 ja 0.2.", "LabelTonemappingThreshold": "Sävykartoituksen raja-arvo", "LabelTonemappingRange": "Sävykartoituksen alue", - "LabelTonemappingPeakHelp": "Korvaa signal-/nominal-/reference-huiput tällä arvolla. Hyödyllinen silloin kun näytön metatiedoissa ilmoitettu huipputieto ei ole luotettava tai kun sävykartoitetaan matalammalta alueelta korkeammalle. Suositeltu arvo on 100 ja oletusarvo on 0.", + "LabelTonemappingPeakHelp": "Korvaa metatiedoissa ilmoitetun input signaalin arvon tällä huippuarvolla. Suositeltu arvo on 100 (1000nit).", "LabelTonemappingPeak": "Sävykartoituksen huippu", "LabelTonemappingParamHelp": "Säädä sävykartoitusalgoritmia. Suositeltu ja oletusarvo on NaN. Tyypillisesti jätetään tyhjäksi.", "LabelTonemappingParam": "Sävykartoituksen parametrit", - "LabelTonemappingDesatHelp": "Vähentää tämän tason ylittävien värien kylläisyyttä. Auttaa estämään ylikorostuneita värejä muuntamalla väriavaruuden ulkopuoliset värit tasaisesti kohti valkoista. Korkeampi arvo säilyttää enemmän värejä. Suositus- ja oletusarvot ovat 0 ja 0,5.", + "LabelTonemappingDesatHelp": "Vähentää tämän kirkkaustason ylittävien värien kylläisyyttä. Suositeltu arvo on 0 (poista käytöstä).", "LabelTonemappingDesat": "Sävykartoituksen kylläisyys", "LabelTonemappingAlgorithm": "Valitse käytettävä sävykartoitusalgoritmi", "LabelSyncPlayTimeSyncOffset": "Aika poikkeama", @@ -1715,7 +1715,7 @@ "MediaInfoBlPresentFlag": "DV BL havaittu", "MediaInfoRpuPresentFlag": "DV RPU havaittu", "MediaInfoDvVersionMinor": "DV-väliversio", - "LabelParallelImageEncodingLimitHelp": "Rinnakkain suoritettavien kuvaenkoodauksien enimmäismäärä. Asettamalla arvoksi \"0\" rajoitus asetetaan automaattisesti järjestelmän perusteella.", + "LabelParallelImageEncodingLimitHelp": "Rinnakkain suoritettavien kuvaenkoodauksien enimmäismäärä. Jättämällä arvon tyhjäksi rajoitus asetetaan automaattisesti järjestelmän perusteella.", "HeaderPerformance": "Suorituskyky", "LabelParallelImageEncodingLimit": "Rinnakkaisten kuvaenkoodauksien rajoitus", "LabelEnableAudioVbr": "Käytä vaihtelevaa bittinopeutta äänen pakkaamiseen", @@ -1775,7 +1775,7 @@ "BackdropScreensaver": "Backdrop-näytönsäästäjä", "LogoScreensaver": "Logo-näytönsäästäjä", "LabelIsHearingImpaired": "Kuulorajoitteisille (SDH)", - "SelectAudioNormalizationHelp": "Kappalekohtainen vahvistus – jokaisen kappaleen äänenvoimakkuus pyritään säätämään samalle tasolle. Albumikohtainen vahvistus – kappaleiden äänenvoimakkuus pyritään tasaamaan albumikohtaisesti albumikohtaisen dynamiikan säilyttämiseksi.", + "SelectAudioNormalizationHelp": "Kappalekohtainen vahvistus – jokaisen kappaleen äänenvoimakkuus pyritään säätämään samalle tasolle. Albumikohtainen vahvistus – kappaleiden äänenvoimakkuus pyritään tasaamaan albumikohtaisesti albumikohtaisen dynamiikan säilyttämiseksi. Asetuksen vaihtaminen voi edellyttää nykyisen toiston käynnistämistä uudelleen.", "LabelAlbumGain": "Albumikohtainen vahvistus", "LabelSelectAudioNormalization": "Äänenvoimakkuuden normalisointi", "LabelTrackGain": "Kappelkohtainen vahvistus", @@ -1925,7 +1925,7 @@ "SelectPreferredTranscodeVideoAudioCodecHelp": "Valitse ensisijainen äänikoodekki videomateriaalin transkoodaamiseen. Jos ensisijainen koodekki ei ole tuettu, serveri käyttää seuraavaksi parasta koodekkia.", "LabelTrickplayAccelEncoding": "Käyttöönota rautakiihdytetty MJPEG enkoodaus", "LabelTrickplayAccelEncodingHelp": "Tällä hetkellä ainoastaan käytettävissä QSV, VA-API, VideoToolbox ja RKMPP. Tällä valinnalla ei ole vaikutusta muihin rautakiihdytysmetodeihin.", - "HeaderVideoAdvanced": "Edistynyt video", + "HeaderVideoAdvanced": "Video (edistynyt)", "PlaylistPublicDescription": "Salli tämän soittolistan katsominen jokaiselle kirjautuneelle käyttäjälle.", "DateModified": "Muokkauspäivämäärä", "AlwaysBurnInSubtitleWhenTranscoding": "Polta tekstit aina muunnettaessa", @@ -1992,5 +1992,26 @@ "DeleteServerConfirmation": "Haluatko varmasti poistaa tämän palvelimen?", "LabelDevice": "Laite", "MetadataImagesLoadError": "Metadata-asetusten lataus epäonnistui", - "LibraryNameInvalid": "Kirjastolla tulee olla nimi." + "LibraryNameInvalid": "Kirjastolla tulee olla nimi.", + "AutoSubtitleStylingHelp": "Tämä tila vaihtaa automaattisesti natiivien ja mukautettujen tekstitystyylien välillä päätelaitteesta riippuen.", + "Custom": "Mukautettu", + "CustomSubtitleStylingHelp": "Tekstityksien tyylit toimivat useimmilla laitteilla, mutta kuormittavat suorituskykyä.", + "DisplayLoadError": "Virhe ladattaessa näytön konfiguraatiotietoja.", + "LastActive": "Viimeksi aktiivinen", + "MessageCancelSeriesTimerError": "Virhe peruessa sarjan ajastinta", + "MetadataNfoLoadError": "Metatietojen NFO-asetusten lataaminen epäonnistui", + "Native": "Natiivi", + "LabelMediaSegmentProviders": "Median osioiden tarjoajat", + "LabelSubtitleStyling": "Tekstityksien tyyli", + "MessageCancelTimerError": "Virhe peruessa ajastinta", + "LabelGroupShowsIntoCollections": "Kokoa sarjat kokoelmiksi", + "LabelGroupShowsIntoCollectionsHelp": "Kokoelmissa olevat sarjat näytetään yhtenä kohteena sarjalistauksissa.", + "LimitSegmentLength": "Käytä lyhyempiä HLS segmenttejä", + "LimitSegmentLengthHelp": "Tämän asetuksen käyttöön ottaminen voi ehkäistä HLS soittimen jämähtämistä kelattaessa tietyillä laitteilla, kuten webOS TV:llä.", + "MediaSegmentProvidersHelp": "Ota käyttöön ja järjestä halutut mediaosioiden tarjoajat tärkeysjärjestykseen.", + "CustomSplashScreenSize": "Mukautetut kuvat tulee olla 16x9 näyttösuhteessa ja minimissään 1920x1080 resoluutiolla.", + "DeleteCustomImage": "Poista mukautettu kuva", + "ImageDeleteFailed": "Kuvan poistaminen epäonnistui", + "ImageUploadCancelled": "Kuvan lähetys peruttiin", + "ImageUploadFailed": "Kuvan lähetys epäonnistui" } From ddd4d0143bca145849a6f8e473829bb7b47eff6f Mon Sep 17 00:00:00 2001 From: Fawrrax Date: Wed, 23 Apr 2025 02:31:01 -0400 Subject: [PATCH 081/645] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index 276fc7630..4c4a0d1b1 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -34,7 +34,7 @@ "SettingsSaved": "Asetukset tallennettu.", "TabProfiles": "Profiilit", "TellUsAboutYourself": "Kerro meille itsestäsi", - "ThisWizardWillGuideYou": "Tämä työkalu auttaa sinua asennusprosessin aikana. Valitse kieli aloittaaksesi.", + "ThisWizardWillGuideYou": "Tämä työkalu auttaa sinua asennusprosessin aikana. Anna palvelimen nimi ja valitse kieli aloittaaksesi.", "UninstallPluginConfirmation": "Haluatko varmasti poistaa lisäosan '{0}'?", "HeaderUninstallPlugin": "Poista lisäosa", "Absolute": "Ehdoton", @@ -353,7 +353,7 @@ "HeaderSubtitleDownloads": "Tekstitysten lataus", "HeaderSpecialEpisodeInfo": "Erikoisjakson tiedot", "HeaderSortOrder": "Lajittelujärjestys", - "HeaderSetupLibrary": "Aseta mediakirjastosi", + "HeaderSetupLibrary": "Määritä mediakirjastosi", "HeaderSeriesStatus": "Sarjan tila", "HeaderSeriesOptions": "Sarjan asetukset", "HeaderSelectTranscodingPath": "Valitse transkoodauksen väliakaistiedostojen sijainti", @@ -647,7 +647,7 @@ "EveryXMinutes": "{0} minuutin välein", "EveryHour": "Tunnin välein", "LastSeen": "Viimeksi aktiivinen {0}", - "Yadif": "YADIF", + "Yadif": "Yet Another DeInterlacing Filter (YADIF)", "Writer": "Kirjoittaja", "WelcomeToProject": "Tervetuloa Jellyfiniin!", "Wednesday": "Keskiviikko", @@ -1545,8 +1545,8 @@ "LabelVideoInfo": "Videon tiedot", "LabelAudioInfo": "Äänen tiedot", "LabelPlaybackInfo": "Toiston tiedot", - "AspectRatioFill": "Täyttö", - "AspectRatioCover": "Kansi", + "AspectRatioFill": "Täytä", + "AspectRatioCover": "Suurenna", "EnableFallbackFontHelp": "Käytä omia vaihtoehtoisia fontteja. Tämän avulla voidaan välttää tekstitysten renderöintiongelmia.", "EnableFallbackFont": "Käytä varmistusfontteja", "WriteAccessRequired": "Jellyfin tarvitsee kirjoitusoikeuden tähän kansioon. Varmista kirjoitusoikeus ja yritä uudelleen.", @@ -1646,12 +1646,12 @@ "PreferSystemNativeHwDecoder": "Suosi käyttöjärjestelmän natiiveja DXVA- ja VA-API-laitteistodekoodereita", "ContainerBitrateExceedsLimit": "Videon bittinopeus ylittää rajoituksen", "AudioBitDepthNotSupported": "Äänen bittisyvyyttä ei tueta", - "EnableEnhancedNvdecDecoderHelp": "Kokeellinen NVDEC-toteutus, jota ei tule käyttää, jollei dekoodausvirheitä esiinny.", + "EnableEnhancedNvdecDecoderHelp": "Parannettu NVDEC-toteutus. Kytke tämä asetus pois päältä käyttääksesi CUVID:ia jos dekoodausvirheitä esiintyy.", "PersonRole": "roolissa {0}", "HomeVideosPhotos": "Kotivideot ja valokuvat", "Bold": "Lihavoitu", "LabelTextWeight": "Tekstin vahvuus", - "EnableSplashScreen": "Käytä aloitusruutua", + "EnableSplashScreen": "Ota käyttöön aloitusruudun kuva", "MediaInfoDvLevel": "DV-taso", "MediaInfoDvProfile": "DV-profiili", "MediaInfoDoViTitle": "DV-nimike", @@ -1827,7 +1827,7 @@ "PlaybackError.NotAllowed": "Tämän median toisto ei ole sallittua.", "EnableVideoToolboxTonemapping": "Ota käyttöön VideoToolbox Tone mapping", "AllowMjpegEncoding": "Salli enkoodaus MJPEG formaattiin (käytetään trickplay luomisessa)", - "LabelTrickplayAccel": "Ota käyttöön laitteistokiihdytys", + "LabelTrickplayAccel": "Ota käyttöön laitteistodekoodaus", "LabelTrickplayAccelHelp": "Varmista, että otat käyttöön \"Salli MPEG enkoodaus' Transkoodausasetuksissa jos laitteistosi tukee sitä.", "LabelScanBehaviorHelp": "Oletuskäyttäytyminen on ei-blokkaava, joka lisää median kirjastoon ennen trickplay luontia. Blokkaus varmistaa, että trickplay-tiedostot luodaan ennen kuin media lisätään kirjastoon, mutta tekee skannauksista merkittävästi pitempiä.", "PriorityIdle": "Toimeton", @@ -1882,7 +1882,7 @@ "EnableTrueHd": "Ota TrueHD käyttöön", "HeaderNextItem": "Seuraava {0}", "HeaderNextItemPlayingInValue": "Seuraavaksi {0} jonka alkuun {1}", - "LabelTrickplayKeyFrameOnlyExtraction": "Luo kuvia ainoastaan avainkehyksistä", + "LabelTrickplayKeyFrameOnlyExtraction": "Luo kuvia ainoastaan avainruuduista", "PasswordMissingSaveError": "Uusi salasana ei voi olla tyhjä.", "SearchForLyrics": "Etsi sanoituksia", "LabelSelectPreferredTranscodeVideoCodec": "Ensisijainen transkoodaava videokoodekki", @@ -1903,7 +1903,7 @@ "LabelNoChangelog": "Tälle julkaisuversiolle ei ole saatavilla muutoshistoriaa.", "LabelIsSynced": "On synkronisoitu", "NoLyricsSearchResultsFound": "Kappaleen sanoja ei löytynyt.", - "PluginLoadRepoError": "Virhe haettaessa lisäosan tietoja sen säilytyspaikasta.", + "PluginLoadRepoError": "Virhe haettaessa lisäosan tietoja ohjelmavarastosta.", "PluginUninstallError": "Virhe poistettaessa lisäosaa.", "PreviewLyrics": "Esikatsele kappaleen sanoja", "PluginEnableError": "Virhe lisäosan käyttöönotossa.", @@ -1919,11 +1919,11 @@ "LabelSelectPreferredTranscodeVideoAudioCodec": "Ensisijainen transkoodattu äänikoodekki videotoistossa", "AllowTonemappingSoftwareHelp": "Sävykartoitus voi muuttaa videon dynaamista aluetta HDR:stä SDR:ään säilyttäen silti kuvan yksityiskohdat ja värin, jotka ovat erittäin tärkeitä alkuperäisen kohtauksen tiedon säilyttämiseksi. Tällä hetkellä se toimii ainoastaan 10bit HDR10, -HLG, ja DoVi-videoiden kanssa.", "Editor": "Ohjaus", - "Letterer": "Kirjoittaja", + "Letterer": "Tekstaaja", "LibraryScanFanoutConcurrencyHelp": "Samanaikaisten suoritettavien kirjastoskannausten maksimimäärä. Mikäli tämä arvo on jätetty tyhjäksi, määrä valitaan järjestelmän prosessorin säikeiden lukumäärän mukaan. VAROITUS: Tämän arvon asettaminen liian korkeaksi voi aiheuttaa ongelmia verkkotiedostojärjestelmissä. Jos koet ongelmatilanteista, laske tätä numeroa.", "SaveLyricsIntoMediaFoldersHelp": "Sanoitusten tallentaminen äänitiedoston kanssa samaan sijaintiin helpottaa niiden hallintaa.", "SelectPreferredTranscodeVideoAudioCodecHelp": "Valitse ensisijainen äänikoodekki videomateriaalin transkoodaamiseen. Jos ensisijainen koodekki ei ole tuettu, serveri käyttää seuraavaksi parasta koodekkia.", - "LabelTrickplayAccelEncoding": "Käyttöönota rautakiihdytetty MJPEG enkoodaus", + "LabelTrickplayAccelEncoding": "Ota käyttöön laitteistokiihdytetty MJPEG enkoodaus", "LabelTrickplayAccelEncodingHelp": "Tällä hetkellä ainoastaan käytettävissä QSV, VA-API, VideoToolbox ja RKMPP. Tällä valinnalla ei ole vaikutusta muihin rautakiihdytysmetodeihin.", "HeaderVideoAdvanced": "Video (edistynyt)", "PlaylistPublicDescription": "Salli tämän soittolistan katsominen jokaiselle kirjautuneelle käyttäjälle.", @@ -2013,5 +2013,16 @@ "DeleteCustomImage": "Poista mukautettu kuva", "ImageDeleteFailed": "Kuvan poistaminen epäonnistui", "ImageUploadCancelled": "Kuvan lähetys peruttiin", - "ImageUploadFailed": "Kuvan lähetys epäonnistui" + "ImageUploadFailed": "Kuvan lähetys epäonnistui", + "RetryWithGlobalSearch": "Yritä uudelleen globaalilla haulla", + "StreamCountExceedsLimit": "Lähetyksien määrä ylittää raja-arvon", + "UploadCustomImage": "Lähetä mukautettu kuva", + "UseCustomTagDelimitersHelp": "Leikkaa artisti/genre tagit mukautetulla merkillä.", + "ReadInputAtNativeFramerate": "Lue syöte natiivilla ruudunpäivitysnopeudella", + "ReadInputAtNativeFramerateHelp": "Tämän asetuksen käyttöön ottaminen voi ratkaista joitain ongelmia, esim. suoratoiston ennenaikaisen pysähtymisen.", + "UseCustomTagDelimiters": "Käytä mukautettua tagien erotinta", + "SettingsPageLoadError": "Asetukset-sivun lataaminen epäonnistui", + "NativeSubtitleStylingHelp": "Tekstityksen tyylit eivät toimi kaikilla laitteilla, mutta ei aiheuta ylimääräistä kuormaa.", + "VideoCodecTagNotSupported": "Videokoodekin tagi ei ole tuettu", + "LogLoadFailure": "Logitiedoston lataaminen epäonnistui. Se saattaa olla kirjoituksen kohteena." } From 215af526ec6e39dff8ccae94ef0ab9c47603ed03 Mon Sep 17 00:00:00 2001 From: Thales Wittee Date: Wed, 23 Apr 2025 05:42:14 -0400 Subject: [PATCH 082/645] Translated using Weblate (Portuguese (Brazil)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/ --- src/strings/pt-br.json | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/strings/pt-br.json b/src/strings/pt-br.json index 88f683915..0ff03ad03 100644 --- a/src/strings/pt-br.json +++ b/src/strings/pt-br.json @@ -104,7 +104,7 @@ "ColorTransfer": "Transferência de cor", "CommunityRating": "Avaliação da comunidade", "Composer": "Compositor", - "ConfigureDateAdded": "Configure como os metadados são determinados para 'Data adicionada' em \"Painel > Bibliotecas > Configurações de NFO\"", + "ConfigureDateAdded": "Configure como os metadados são determinados para 'Data adicionada' em \"Painel > Bibliotecas > Exibição\"", "ConfirmDeleteImage": "Excluir imagem?", "ConfirmDeleteItem": "Ao excluir este item, você o excluirá do sistema de arquivos e também da biblioteca de mídias. Deseja realmente continuar?", "ConfirmDeleteItems": "Ao excluir estes itens, você os excluirá do sistema de arquivos e de sua biblioteca de mídias. Deseja realmente continuar?", @@ -1988,5 +1988,12 @@ "LabelMediaSegmentProviders": "Provedores de segmento de mídia", "HeaderNextEpisode": "Próximo episódio", "HeaderNextVideo": "Próximo vídeo", - "MediaSegmentProvidersHelp": "Habilite e classifique seus provedores de segmentos de mídia preferidos em ordem de prioridade." + "MediaSegmentProvidersHelp": "Habilite e classifique seus provedores de segmentos de mídia preferidos em ordem de prioridade.", + "CustomSubtitleStylingHelp": "A personalização das legendas funcionará na maioria dos dispositivos, mas pode acarretar um custo adicional de desempenho.", + "CustomSplashScreenSize": "Imagens personalizadas devem ter uma proporção de 16x9 com um tamanho mínimo de 1920x1080.", + "DeleteCustomImage": "Excluir Imagem Personalizada", + "CopyLogSuccess": "Conteúdo do log copiado com sucesso.", + "AutoSubtitleStylingHelp": "Este modo alternará automaticamente entre os mecanismos de estilo de legenda nativo e personalizado com base no tipo do seu dispositivo.", + "Custom": "Personalizado", + "DeleteServerConfirmation": "Você tem certeza que deseja excluir este servidor?" } From cb2c64c6d5db5f993c25e963245a61e104543c4b Mon Sep 17 00:00:00 2001 From: Josh Patra Date: Wed, 23 Apr 2025 04:22:45 -0400 Subject: [PATCH 083/645] Translated using Weblate (English (Pirate)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en@pirate/ --- src/strings/pr.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/pr.json b/src/strings/pr.json index 8547d5635..f0019627d 100644 --- a/src/strings/pr.json +++ b/src/strings/pr.json @@ -101,5 +101,7 @@ "AllComplexFormats": "All Fancy Codecs (ARR, SSA, BootySub, Pirate GoldS, Swabby, Charts, …)", "AllowFfmpegThrottling": "Rein in Code Scurvy", "Channels": "Channels", - "AllowCollectionManagement": "Permit this scallywag to handle treasures" + "AllowCollectionManagement": "Permit this scallywag to handle treasures", + "Absolute": "Abs'lute", + "AgeValue": "({0} summers gone by)" } From 5259baecb965808a904304d96bfb7911b7f9b7ed Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 23 Apr 2025 14:35:47 +0000 Subject: [PATCH 084/645] Update CI dependencies --- .github/workflows/__codeql.yml | 6 +++--- .github/workflows/__package.yml | 2 +- .github/workflows/__quality_checks.yml | 2 +- .github/workflows/pull_request.yml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/__codeql.yml b/.github/workflows/__codeql.yml index a6151df9c..9494bc7ad 100644 --- a/.github/workflows/__codeql.yml +++ b/.github/workflows/__codeql.yml @@ -26,15 +26,15 @@ jobs: show-progress: false - name: Initialize CodeQL 🛠️ - uses: github/codeql-action/init@45775bd8235c68ba998cffa5171334d58593da47 # v3.28.15 + uses: github/codeql-action/init@28deaeda66b76a05916b6923827895f2b14ab387 # v3.28.16 with: queries: security-and-quality languages: ${{ matrix.language }} - name: Autobuild 📦 - uses: github/codeql-action/autobuild@45775bd8235c68ba998cffa5171334d58593da47 # v3.28.15 + uses: github/codeql-action/autobuild@28deaeda66b76a05916b6923827895f2b14ab387 # v3.28.16 - name: Perform CodeQL Analysis 🧪 - uses: github/codeql-action/analyze@45775bd8235c68ba998cffa5171334d58593da47 # v3.28.15 + uses: github/codeql-action/analyze@28deaeda66b76a05916b6923827895f2b14ab387 # v3.28.16 with: category: '/language:${{matrix.language}}' diff --git a/.github/workflows/__package.yml b/.github/workflows/__package.yml index b3af5861d..3be087499 100644 --- a/.github/workflows/__package.yml +++ b/.github/workflows/__package.yml @@ -19,7 +19,7 @@ jobs: ref: ${{ inputs.commit || github.sha }} - name: Setup node environment - uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version: 20 cache: npm diff --git a/.github/workflows/__quality_checks.yml b/.github/workflows/__quality_checks.yml index 5bc0c2e1b..013f81240 100644 --- a/.github/workflows/__quality_checks.yml +++ b/.github/workflows/__quality_checks.yml @@ -48,7 +48,7 @@ jobs: show-progress: false - name: Setup node environment ⚙️ - uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version: 20 cache: npm diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index fe43dc99f..6f874a5f2 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -85,7 +85,7 @@ jobs: ref: ${{ github.event.pull_request.head.sha }} - name: Setup node environment - uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version: 20 cache: npm From 08c19fd59ae16318ce952228e89c04e3df6dffcc Mon Sep 17 00:00:00 2001 From: Rasko Date: Wed, 23 Apr 2025 09:28:47 -0400 Subject: [PATCH 085/645] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)=20Translation:=20Jellyfin/Jellyfin=20Web=20Tr?= =?UTF-8?q?anslate-URL:=20https://translate.jellyfin.org/projects/jellyfin?= =?UTF-8?q?/jellyfin-web/nb=5FNO/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/strings/nb.json | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/strings/nb.json b/src/strings/nb.json index e62641d02..dda8582ce 100644 --- a/src/strings/nb.json +++ b/src/strings/nb.json @@ -890,7 +890,7 @@ "TabUpcoming": "Kommende", "Tags": "Tagger", "TellUsAboutYourself": "Fortell oss litt om deg selv", - "ThisWizardWillGuideYou": "Denne veiviseren vil hjelpe deg gjennom installasjonsprosessen. Velg ønsket språk for å komme i gang.", + "ThisWizardWillGuideYou": "Denne veiviseren vil hjelpe deg gjennom installasjonsprosessen. Velg et navn på serveren og ønsket språk for å komme i gang.", "Thursday": "Torsdag", "TitleHardwareAcceleration": "Maskinvareakselerasjon", "TitleHostingSettings": "Vertsinnstillinger", @@ -1437,8 +1437,8 @@ "RemuxHelp2": "Ompakking bruker svært lite prosessorkraft og fører ikke til tap av kvalitet på mediet.", "RemuxHelp1": "Mediet er i en inkompatibel mediabeholder (MKV, AVI, WMV osv.), men både videostrømmen og lydstrømmen er kompatibel med enheten. Mediet vil pakkes om fortløpende uten kvalitetstap før det sendes til enheten.", "Remuxing": "Ompakking", - "AspectRatioFill": "Fyll", - "AspectRatioCover": "Dekk", + "AspectRatioFill": "Strekk", + "AspectRatioCover": "Zoom", "EnableFallbackFontHelp": "Aktiver egendefinerte alternative skrifttyper. Dette kan hjelpe med å unngå problemer ved gjengivelse av undertekster.", "EnableFallbackFont": "Aktiver skrifttyper å falle tilbake på", "LabelFallbackFontPathHelp": "Disse skrifttypene er brukt av noen klienter for å vise undertekster. Referer til dokumentasjonen for mer informasjon.", @@ -1954,7 +1954,7 @@ "LabelCustomTagDelimiters": "Egendefinert skilletegn for tagger", "LabelCustomTagDelimitersHelp": "Tegn som skal behandles som skilletegn for å separere tagger.", "LabelDelimiterWhitelist": "Hviteliste for skilletegn", - "LabelDelimiterWhitelistHelp": "Objekter som skal ekskluderes fra tagdeling. Ett objekt per linje.", + "LabelDelimiterWhitelistHelp": "Elementer som skal ekskluderes fra tagdeling. Ett element per linje.", "PreferNonstandardArtistsTag": "Foretrekk ARTISTER-tag om tilgjengelig", "PreferNonstandardArtistsTagHelp": "Bruk ikke-standard ARTISTS-taggen istedenfor ARTIST-taggen når den er tilgjengelig.", "UseCustomTagDelimiters": "Bruk egendefinert skilletegn for tagger", @@ -2008,5 +2008,16 @@ "Native": "Innebygd", "Retry": "Prøv igjen", "MetadataImagesLoadError": "Kunne ikke laste inn metadata-innstillinger", - "LimitSegmentLength": "Bruk kortere HLS segmenter" + "LimitSegmentLength": "Bruk kortere HLS segmenter", + "UploadCustomImage": "Last opp egendefinert bilde", + "ReadInputAtNativeFramerateHelp": "Aktivering av denne innstillingen kan løse noen problemer som f. eks. direktesendinger som avsluttes for tidlig.", + "CustomSplashScreenSize": "Egendefinerte bilder bør være i en 16x9 størrelsesforhold med en minimumstørrelse på 1920x1080.", + "DeleteCustomImage": "Slett egendefinert bilde", + "ImageDeleteFailed": "Sletting av bilde mislykket", + "ImageUploadCancelled": "Opplastning av bilde avbrutt", + "ImageUploadFailed": "Opplastning av bilde mislykket", + "RetryWithGlobalSearch": "Prøv på nytt med globalt søk", + "LimitSegmentLengthHelp": "Aktivering av denne innstillingen kan hindre HLS-spilleren fra å henge seg opp ved spoling på enkelte enheter som f. eks. webOS TV-er.", + "LabelGroupShowsIntoCollections": "Grupper serier inn i samlinger", + "LabelGroupShowsIntoCollectionsHelp": "Serier i en samling vil vises som ett samlet element når serielister vises." } From a1a8ce1eaf4ac5cd62ee0bda1883790a5400ead4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=84=A1=E6=83=85=E5=A4=A9?= Date: Wed, 23 Apr 2025 15:03:22 -0400 Subject: [PATCH 086/645] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index ece36dc6c..e80c1b2e2 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1057,7 +1057,7 @@ "ThemeSongs": "主题曲", "ThemeVideos": "主题视频", "TheseSettingsAffectSubtitlesOnThisDevice": "这些设置仅影响该设备的字幕显示", - "ThisWizardWillGuideYou": "该向导将指导你完成安装过程。首先,请选择你的语言。", + "ThisWizardWillGuideYou": "此向导将引导您完成设置过程。首先,请输入服务器名称并选择您的首选语言。", "Thumb": "缩略图", "Thursday": "星期四", "TitleHardwareAcceleration": "硬件加速", From e0b7c8c332cfdd4d2c8c38cd951fdf49ba6c65b2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 24 Apr 2025 05:10:55 +0000 Subject: [PATCH 087/645] Update dependency @jellyfin/sdk to v0.0.0-unstable.202504240501 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 71c10d3ca..30548be78 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202504210502", + "@jellyfin/sdk": "0.0.0-unstable.202504240501", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.11", "@mui/material": "6.4.11", @@ -4091,9 +4091,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202504210502", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504210502.tgz", - "integrity": "sha512-CfJ7HXpfSZBToo8Vx1QW+mVodrnRnBQ1ssXTcS6EI0ZXp+xLhHoKkB4K0KgkEkYjJ1EOn5mZ+ITifyoV15Ivzg==", + "version": "0.0.0-unstable.202504240501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504240501.tgz", + "integrity": "sha512-oFcPhQz2BbzWjAVDhAAP4mUn2Y4OQOgLPqJCSot94EF1VPZXPDklkgSSrvgC/vb8k82juoB8zRrv+UEQCB6seQ==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -28585,9 +28585,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202504210502", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504210502.tgz", - "integrity": "sha512-CfJ7HXpfSZBToo8Vx1QW+mVodrnRnBQ1ssXTcS6EI0ZXp+xLhHoKkB4K0KgkEkYjJ1EOn5mZ+ITifyoV15Ivzg==", + "version": "0.0.0-unstable.202504240501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202504240501.tgz", + "integrity": "sha512-oFcPhQz2BbzWjAVDhAAP4mUn2Y4OQOgLPqJCSot94EF1VPZXPDklkgSSrvgC/vb8k82juoB8zRrv+UEQCB6seQ==", "requires": {} }, "@jellyfin/ux-web": { diff --git a/package.json b/package.json index f3c82e9d6..874b9cea1 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202504210502", + "@jellyfin/sdk": "0.0.0-unstable.202504240501", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.11", "@mui/material": "6.4.11", From 1d7ba48218e087513e64eea275ac84fc3a410f81 Mon Sep 17 00:00:00 2001 From: vinyk19 Date: Thu, 24 Apr 2025 07:31:39 -0400 Subject: [PATCH 088/645] Translated using Weblate (Danish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/da/ --- src/strings/da.json | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/strings/da.json b/src/strings/da.json index 8b63a784e..d7a5f7c3b 100644 --- a/src/strings/da.json +++ b/src/strings/da.json @@ -876,7 +876,7 @@ "TabScheduledTasks": "Planlagte opgaver", "TabUpcoming": "Kommende", "TellUsAboutYourself": "Fortæl os lidt om dig selv", - "ThisWizardWillGuideYou": "Denne guide vil hjælpe dig igennem opsætningen. For at begynde, vælg venligst dit fortrukne sprog.", + "ThisWizardWillGuideYou": "Denne guide vil hjælpe dig igennem opsætningsprocessen. For at starte, indtast venligst et servernavn og vælg dit foretrukne sprog.", "Thursday": "Torsdag", "TitleHardwareAcceleration": "Hardwareacceleration", "TitleHostingSettings": "Værts-indstillinger", @@ -1866,7 +1866,7 @@ "Inker": "Maler", "Penciller": "Tegner", "Letterer": "Skrift fra", - "LibraryScanFanoutConcurrencyHelp": "Maks. antal parallelle opgaver under biblioteks-scanninger. Hvis du indstiller dette til 0, vil der vælges en grænse baseret på dit systems kerneantal. ADVARSEL: Indstilles dette tal for højt, kan det forårsage problemer med netværksfilsystemer; hvis du oplever problemer, skal du sænke dette tal.", + "LibraryScanFanoutConcurrencyHelp": "Maksimalt antal parallelle opgaver under biblioteks­scanning. Hvis feltet efterlades tomt, vælges en grænse baseret på antallet af kerner i systemet. ADVARSEL: Et for højt tal kan give problemer med netværksfilsystemer – sænk tallet, hvis du oplever problemer.", "Lyrics": "Sangtekster", "PlaylistError.AddFailed": "Fejl ved tilføjelse til afspilningsliste", "PlaylistError.CreateFailed": "Fejl ved oprettelse af afspilningsliste", @@ -2010,5 +2010,19 @@ "DeleteCustomImage": "Slet brugerdefineret billede", "ImageUploadCancelled": "Billedupload annulleret", "ImageDeleteFailed": "Billedsletning mislykkedes", - "ImageUploadFailed": "Billedupload mislykkedes" + "ImageUploadFailed": "Billedupload mislykkedes", + "StreamCountExceedsLimit": "Antallet af streams overskrider grænsen", + "LimitSegmentLengthHelp": "Aktivering af denne indstilling kan hjælpe med at forhindre, at HLS-afspilleren fryser ved søgning på visse enheder, f.eks. webOS-tv.", + "MetadataImagesLoadError": "Kunne ikke indlæse metadata-indstillinger", + "MetadataNfoLoadError": "Kunne ikke indlæse metadata-NFO-indstillinger", + "Native": "Oprindelig", + "UploadCustomImage": "Upload brugerdefineret billede", + "SettingsPageLoadError": "Kunne ikke indlæse indstillingsside", + "ReadInputAtNativeFramerate": "Læs input ved den oprindelige billedfrekvens", + "ReadInputAtNativeFramerateHelp": "Aktivering af denne indstilling kan løse nogle problemer, f.eks. at live streams stopper for tidligt.", + "RetryWithGlobalSearch": "Prøv igen med en global søgning", + "PageNotFound": "Dette er ikke den side, du leder efter.", + "LogLoadFailure": "Kunne ikke indlæse logfilen. Den kan stadig blive skrevet til aktivt.", + "LabelGroupShowsIntoCollectionsHelp": "Serier i en samling vises som ét samlet element, når serielister vises.", + "LimitSegmentLength": "Brug kortere HLS-segmenter" } From 2ca88c8e675b6f2aaba995e9e65017f4a669e7eb Mon Sep 17 00:00:00 2001 From: r-w-code Date: Thu, 24 Apr 2025 07:16:48 -0400 Subject: [PATCH 089/645] Translated using Weblate (English (United Kingdom)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/en_GB/ --- src/strings/en-gb.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json index 2f6ea3c63..8975fd9b1 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -398,7 +398,7 @@ "TitleHostingSettings": "Hosting Settings", "TitleHardwareAcceleration": "Hardware Acceleration", "Thursday": "Thursday", - "ThisWizardWillGuideYou": "This wizard will help guide you through the setup process. To begin, please select your preferred language.", + "ThisWizardWillGuideYou": "This wizard will help guide you through the setup process. To begin, please enter a server name and select your preferred language.", "TheseSettingsAffectSubtitlesOnThisDevice": "These settings affect subtitles on this device", "TabServer": "Server", "TabScheduledTasks": "Scheduled Tasks", From 05335d35616a9f9b1fef6f369ae4f806ea9ce05d Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Thu, 24 Apr 2025 12:41:57 -0400 Subject: [PATCH 090/645] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index a82477ef6..8916bd72b 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -585,7 +585,7 @@ "TabServer": "Servidor", "TabUpcoming": "Próximos", "TellUsAboutYourself": "Fale-nos sobre si", - "ThisWizardWillGuideYou": "Este assistente irá ajudá-lo durante o processo de configuração. Para começar, selecione o idioma.", + "ThisWizardWillGuideYou": "Este assistente irá ajudar-te durante o processo de configuração. Para começar, introduz o nome do servidor e seleciona o teu idioma.", "Thursday": "Quinta", "TitlePlayback": "Reprodução", "TrackCount": "{0} faixas", @@ -834,7 +834,7 @@ "MessagePluginConfigurationRequiresLocalAccess": "Para configurar esta extensão, inicia sessão localmente no servidor.", "HeaderPluginInstallation": "Instalação de extensão", "MessagePluginInstalled": "A extensão foi instalada com sucesso. O servidor terá que reiniciar para aplicar as alterações.", - "PleaseRestartServerName": "Por favor, reinicie o Jellyfin no {0}.", + "PleaseRestartServerName": "Por favor, reinicia o Jellyfin no {0}.", "PleaseConfirmPluginInstallation": "Por favor clique em OK para confirmar que leu o conteúdo acima, e que deseja prosseguir com a instalação da extensão.", "PleaseAddAtLeastOneFolder": "Por favor, adicione pelo menos uma pasta a esta Biblioteca, utilizando para isso o botão '+' na secção 'Pastas'.", "Played": "Reproduzido", From 8cde855daa9bac7304ce056e551fa4d7eb04ccf9 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Thu, 24 Apr 2025 12:52:09 -0400 Subject: [PATCH 091/645] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 88767a864..17c07c953 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -30,7 +30,7 @@ "TrackCount": "{0} faixas", "TitlePlayback": "Reprodução", "Thursday": "Quinta", - "ThisWizardWillGuideYou": "Este assistente ajudá-lo-á durante o processo de configuração. Para começar, selecione o idioma.", + "ThisWizardWillGuideYou": "Este assistente irá ajudar-te durante o processo de configuração. Para começar, introduz o nome do servidor e seleciona o teu idioma.", "TellUsAboutYourself": "Fale-nos sobre si", "TabUpcoming": "Próximos", "TabStreaming": "Transmissão", @@ -110,7 +110,7 @@ "Producer": "Produtor", "MessagePluginInstalled": "A extensão foi instalada com sucesso. O servidor necessitará de ser reiniciado para aplicar as alterações.", "PleaseSelectTwoItems": "Por favor selecione pelo menos dois itens.", - "PleaseRestartServerName": "Por favor, reinicie o Servidor Jellyfin - {0}.", + "PleaseRestartServerName": "Por favor, reinicia o Jellyfin no {0}.", "PleaseEnterNameOrId": "Introduz um nome ou um ID externo.", "PleaseConfirmPluginInstallation": "Por favor clique em OK para confirmar que leu o conteúdo acima e que deseja prosseguir com a instalação da extensão.", "PleaseAddAtLeastOneFolder": "Por favor, adicione pelo menos uma pasta a esta Biblioteca, utilizando o botão Adicionar.", @@ -291,7 +291,7 @@ "LabelH264Crf": "CRF para codificação H.264", "LabelGroupMoviesIntoCollectionsHelp": "Ao mostrar listas de filmes, aqueles que pertençam a uma coleção serão apresentados como um único item agrupado.", "LabelGroupMoviesIntoCollections": "Agrupar filmes em coleções", - "LabelServerNameHelp": "Esse nome será usado para identificar o servidor e será o padrão para o hostname do servidor.", + "LabelServerNameHelp": "Este nome será utilizado para identificar o servidor. Hostname do servidor usado por defeito.", "LabelFriendlyName": "Nome amigável", "LabelFormat": "Formato", "LabelForgotPasswordUsernameHelp": "Introduz o teu nome de utilizador, se te lembrares dele.", @@ -1160,8 +1160,8 @@ "ShowYear": "Exibir ano", "ShowTitle": "Exibir título", "SettingsWarning": "Mudar estes valores pode causar instabilidade ou falhas de conexão. Se tiver problemas, recomendamos restaurar os valores originais.", - "ServerNameIsShuttingDown": "O servidor Jellyfin - {0} está a desligar.", - "ServerNameIsRestarting": "O servidor Jellyfin - {0} está a reiniciar.", + "ServerNameIsShuttingDown": "O servidor {0} está a desligar.", + "ServerNameIsRestarting": "O servidor {0} está a reiniciar.", "SeriesYearToPresent": "{0} - Atualmente", "SeriesCancelled": "Série cancelada.", "SelectAdminUsername": "Seleciona um nome de utilizador para a conta de administrador.", @@ -1250,7 +1250,7 @@ "LabelSSDPTracingFilter": "Filtro SSDP", "LabelRepositoryUrlHelp": "A localização do manifesto do repositório que você deseja incluir.", "LabelRepositoryUrl": "URL do Repositório", - "LabelRepositoryNameHelp": "Um nome personalizado para distinguir este repositório de qualquer outro adicionado ao seu servidor.", + "LabelRepositoryNameHelp": "Nome personalizado para distinguir este repositório de outros presentes no servidor.", "LabelRepositoryName": "Nome do Repositório", "LabelQuickConnectCode": "Código de Ligação Rápida", "LabelPublishedServerUriHelp": "Substituir o URI utilizado pelo Jellyfin, com base na interface, ou no endereço IP do cliente. Por exemplo: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, ou all=https://jellyfin.example.com", From 5d1b1e266a4f5d8e861a16991f35b83de993eb02 Mon Sep 17 00:00:00 2001 From: Gallyam Biktashev Date: Thu, 24 Apr 2025 15:45:58 -0400 Subject: [PATCH 092/645] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index bb476ebc0..6be97fb0d 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -522,7 +522,7 @@ "LabelEvent": "Событие", "LabelEveryXMinutes": "Каждые", "LabelExtractChaptersDuringLibraryScan": "Извлекать изображения сцен в процессе сканирования медиатеки", - "LabelExtractChaptersDuringLibraryScanHelp": "Генерируются изображения сцен при импорте видео в процессе сканирования медиатеки. В противном случае, они будут извлечены в процессе назначенной задачи «Изображения сцен», позволяя регулярному сканированию медиатеки завершаться быстрее.", + "LabelExtractChaptersDuringLibraryScanHelp": "Генерировать изображения разделов при импорте видео в процессе сканирования медиатеки. Иначе они будут извлекаться в процессе запланированной задачи «Изображения сцен», позволяя регулярному сканированию медиатеки завершаться быстрее.", "LabelFailed": "Неудачно", "LabelFileOrUrl": "Файл или URL", "LabelFinish": "Завершение", @@ -914,7 +914,7 @@ "OptionEstimateContentLength": "Рассчитывать длительность содержания при перекодировании", "OptionEveryday": "Ежедневно", "OptionExternallyDownloaded": "Внешние загружаемые", - "OptionExtractChapterImage": "Включить извлечение изображений сцен", + "OptionExtractChapterImage": "Включить извлечение изображений разделов", "OptionHasThemeSong": "Тематическая мелодия", "OptionHasThemeVideo": "Тематическое видео", "OptionHideUser": "Скрыть этого пользователя с экрана входа", @@ -1701,7 +1701,7 @@ "LabelParallelImageEncodingLimit": "Ограничение на параллельное кодирование изображений", "LabelParallelImageEncodingLimitHelp": "Максимальное количество кодировок изображений, которые разрешено выполнять параллельно. Оставив это значение пустым, вы выберете ограничение, основанное на количестве ядер вашей системы.", "HeaderPerformance": "Производительность", - "LabelDummyChapterDurationHelp": "Интервал между изображениями разделов. Установите значение 0, чтобы отключить генерацию изображений разделов. Изменение этого параметра не повлияет на существующие изображения разделов.", + "LabelDummyChapterDurationHelp": "Интервал между виртуальным разделами. Установите значение 0 для отключения генерации виртуальных разделов. Изменение этого параметра не повлияет на существующие виртуальные разделы.", "LabelChapterImageResolutionHelp": "Разрешение созданных изображений разделов. Изменение этого параметра не повлияет на существующие изображения разделов.", "ResolutionMatchSource": "Соответствовать источнику", "MenuOpen": "Открыть Меню", From 20816d4edbadb035dede0617cf5447275697f876 Mon Sep 17 00:00:00 2001 From: Nyanmisaka <799610810@qq.com> Date: Fri, 25 Apr 2025 15:06:22 -0400 Subject: [PATCH 093/645] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index e80c1b2e2..50a1d8a58 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1603,9 +1603,9 @@ "Cursive": "草书", "ContainerBitrateExceedsLimit": "视频比特率超过限制", "PreferSystemNativeHwDecoder": "首选系统原生的 DXVA 或 VA-API 硬件解码器", - "EnableIntelLowPowerH264HwEncoder": "启用低电压模式的 Intel H.264 硬件编码器", - "EnableIntelLowPowerHevcHwEncoder": "启用低电压模式的 Intel HEVC 硬件编码器", - "IntelLowPowerEncHelp": "低电压模式编码能节省不必要的 CPU-GPU 同步。Linux 中使用前必须配置好 i915 HuC 固件。", + "EnableIntelLowPowerH264HwEncoder": "启用低功耗模式的 Intel H.264 硬件编码器", + "EnableIntelLowPowerHevcHwEncoder": "启用低功耗模式的 Intel HEVC 硬件编码器", + "IntelLowPowerEncHelp": "低功耗模式编码能避免不必要的 CPU-GPU 同步。在 Linux 中使用前必须配置好 i915 HuC 固件。", "LabelHardwareEncodingOptions": "硬件编码选项", "DirectPlayError": "启动直接播放时出错", "UnknownAudioStreamInfo": "音频流信息未知", From 424e617bb6b8d91611651ce893e95b5eb8b4f9cf Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Sat, 26 Apr 2025 03:03:47 -0400 Subject: [PATCH 094/645] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index 8916bd72b..96d7361cd 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -713,7 +713,7 @@ "FormatValue": "Formato: {0}", "Filters": "Filtros", "File": "Ficheiro", - "Favorite": "Favoritos", + "Favorite": "Favorito", "FFmpegSavePathNotFound": "Não conseguimos encontrar o FFmpeg na localização que introduziste. O FFprobe também é necessário e deve estar na mesma pasta. Estes componentes são, por norma, instalados em conjunto. Por favor, verifica a localização e tenta novamente.", "Extras": "Extras", "ExtraLarge": "Extra grande", From b468f0dbeba60180965e31f627c4b0e85890115b Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Sat, 26 Apr 2025 03:03:59 -0400 Subject: [PATCH 095/645] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 17c07c953..afc97ac23 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -722,7 +722,7 @@ "File": "Ficheiro", "Features": "Funcionalidades", "Favorites": "Favoritos", - "Favorite": "Favoritos", + "Favorite": "Favorito", "FastForward": "Avanço rápido", "FFmpegSavePathNotFound": "Não conseguimos encontrar o FFmpeg na localização que introduziste. O FFprobe também é necessário e deve estar na mesma pasta. Estes componentes são, por norma, instalados em conjunto. Por favor, verifica a localização e tenta novamente.", "Extras": "Extras", From 3b1ed1ace2bded0c4aefb0d65a2949f709e2a319 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 22 Apr 2025 17:23:06 -0400 Subject: [PATCH 096/645] Update server update required handling --- src/components/ConnectionErrorPage.tsx | 45 ++++++++++++++++++++++++++ src/components/ConnectionRequired.tsx | 42 +++++++++++------------- src/strings/en-us.json | 1 + 3 files changed, 65 insertions(+), 23 deletions(-) create mode 100644 src/components/ConnectionErrorPage.tsx diff --git a/src/components/ConnectionErrorPage.tsx b/src/components/ConnectionErrorPage.tsx new file mode 100644 index 000000000..2b7278eca --- /dev/null +++ b/src/components/ConnectionErrorPage.tsx @@ -0,0 +1,45 @@ +import React, { FC, useEffect, useState } from 'react'; + +import Page from 'components/Page'; +import globalize from 'lib/globalize'; +import { ConnectionState } from 'lib/jellyfin-apiclient'; + +interface ConnectionErrorPageProps { + state: ConnectionState +} + +const ConnectionErrorPage: FC = ({ + state +}) => { + const [ title, setTitle ] = useState(); + const [ htmlMessage, setHtmlMessage ] = useState(); + + useEffect(() => { + if (state === ConnectionState.ServerUpdateNeeded) { + setTitle(globalize.translate('HeaderUpdateRequired')); + setHtmlMessage(globalize.translate( + 'ServerUpdateNeeded', + 'jellyfin.org/downloads/server' + )); + } + }, [ state ]); + + if (!title) return; + + return ( + +
+

{title}

+ {htmlMessage && ( +

+ )} +

+
+ ); +}; + +export default ConnectionErrorPage; diff --git a/src/components/ConnectionRequired.tsx b/src/components/ConnectionRequired.tsx index e84e86de4..290a6c8d5 100644 --- a/src/components/ConnectionRequired.tsx +++ b/src/components/ConnectionRequired.tsx @@ -2,10 +2,9 @@ import React, { FunctionComponent, useCallback, useEffect, useState } from 'reac import { Outlet, useLocation, useNavigate } from 'react-router-dom'; import type { ApiClient, ConnectResponse } from 'jellyfin-apiclient'; -import globalize from 'lib/globalize'; import { ConnectionState, ServerConnections } from 'lib/jellyfin-apiclient'; -import alert from './alert'; +import ConnectionErrorPage from './ConnectionErrorPage'; import Loading from './loading/LoadingComponent'; enum AccessLevel { @@ -56,8 +55,16 @@ const ConnectionRequired: FunctionComponent = ({ const navigate = useNavigate(); const location = useLocation(); + const [ errorState, setErrorState ] = useState(); const [ isLoading, setIsLoading ] = useState(true); + const navigateIfNotThere = useCallback((route: BounceRoutes) => { + // If we try to navigate to the current route, just set isLoading = false + if (location.pathname === route) setIsLoading(false); + // Otherwise navigate to the route + else navigate(route); + }, [ location.pathname, navigate ]); + const bounce = useCallback(async (connectionResponse: ConnectResponse) => { switch (connectionResponse.State) { case ConnectionState.SignedIn: @@ -77,31 +84,14 @@ const ConnectionRequired: FunctionComponent = ({ return; case ConnectionState.ServerSelection: // Bounce to select server page - if (location.pathname === BounceRoutes.SelectServer) { - setIsLoading(false); - } else { - console.debug('[ConnectionRequired] redirecting to select server page'); - navigate(BounceRoutes.SelectServer); - } - return; - case ConnectionState.ServerUpdateNeeded: - // Show update needed message and bounce to select server page - try { - await alert({ - text: globalize.translate('ServerUpdateNeeded', 'https://github.com/jellyfin/jellyfin'), - html: globalize.translate('ServerUpdateNeeded', 'https://github.com/jellyfin/jellyfin') - }); - } catch (ex) { - console.warn('[ConnectionRequired] failed to show alert', ex); - } - console.debug('[ConnectionRequired] server update required, redirecting to select server page'); - navigate(BounceRoutes.SelectServer); + console.debug('[ConnectionRequired] redirecting to select server page'); + navigateIfNotThere(BounceRoutes.SelectServer); return; } console.warn('[ConnectionRequired] unhandled connection state', connectionResponse.State); // eslint-disable-next-line react-hooks/exhaustive-deps - }, [location.pathname, navigate]); + }, [ navigateIfNotThere, location.pathname, navigate ]); const handleWizard = useCallback(async (firstConnection: ConnectResponse | null) => { const apiClient = firstConnection?.ApiClient || ServerConnections.currentApiClient(); @@ -194,7 +184,9 @@ const ConnectionRequired: FunctionComponent = ({ console.debug('[ConnectionRequired] connection state', firstConnection?.State); ServerConnections.firstConnection = true; - if (level === AccessLevel.Wizard) { + if (firstConnection?.State === ConnectionState.ServerUpdateNeeded) { + setErrorState(firstConnection.State); + } else if (level === AccessLevel.Wizard) { handleWizard(firstConnection) .catch(err => { console.error('[ConnectionRequired] could not validate wizard status', err); @@ -217,6 +209,10 @@ const ConnectionRequired: FunctionComponent = ({ }); }, [handleIncompleteWizard, handleWizard, level, validateUserAccess]); + if (errorState) { + return ; + } + if (isLoading) { return ; } diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 9f6e69f1c..ab5b5f05c 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -538,6 +538,7 @@ "HeaderTypeText": "Enter Text", "HeaderUninstallPlugin": "Uninstall Plugin", "HeaderUpcomingOnTV": "Upcoming On TV", + "HeaderUpdateRequired": "Update Required", "HeaderUploadImage": "Upload Image", "HeaderUploadLyrics": "Upload Lyrics", "HeaderUploadSubtitle": "Upload Subtitle", From 4914b2e49ff9c5e70f12598e8c3eeedf2ef204ec Mon Sep 17 00:00:00 2001 From: Christos Mak Date: Sun, 27 Apr 2025 04:47:09 -0400 Subject: [PATCH 097/645] Translated using Weblate (Greek) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/el/ --- src/strings/el.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/strings/el.json b/src/strings/el.json index 788d021a7..d83d3c91b 100644 --- a/src/strings/el.json +++ b/src/strings/el.json @@ -1709,7 +1709,7 @@ "LabelSegmentKeepSeconds": "Χρόνος που θα κρατηθούν τα τμήματα", "BackdropScreensaver": "Φόντο προφύλαξης οθόνης", "GridView": "Προβολή Πλέγματος", - "LabelBackdropScreensaverInterval": "Διάστημα Φόντου Προφύλαξης Οθόνης", + "LabelBackdropScreensaverInterval": "Διάρκεια Προφύλαξης Οθόνης", "LabelBackdropScreensaverIntervalHelp": "Ο χρόνος σε δευτερόλεπτα μεταξύ διαφορετικών φόντων όταν χρησιμοποιείται το φόντο προφύλαξης οθόνης.", "LabelEnableLUFSScan": "Ενεργοποίηση σάρωσης LUFS", "LabelMediaDetails": "Λεπτομέρειες πολυμέσων", @@ -1971,5 +1971,6 @@ "DeleteCustomImage": "Διαγραφή προσαρμοσμένης εικόνας", "ImageDeleteFailed": "Η διαγραφή εικόνας απέτυχε", "ImageUploadCancelled": "Η φόρτωση της εικόνας ακυρώθηκε", - "ImageUploadFailed": "Η φόρτωση της εικόνας απέτυχε" + "ImageUploadFailed": "Η φόρτωση της εικόνας απέτυχε", + "LimitSegmentLength": "Χρήση μικρότερων τμημάτων HLS" } From 9d856bb9b33e10ff90631f8763a27e00a485c589 Mon Sep 17 00:00:00 2001 From: yoga sree jagadam Date: Sun, 27 Apr 2025 05:37:20 -0400 Subject: [PATCH 098/645] Translated using Weblate (Telugu) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/te/ --- src/strings/te.json | 49 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/src/strings/te.json b/src/strings/te.json index 8957d7fbb..e06a9937f 100644 --- a/src/strings/te.json +++ b/src/strings/te.json @@ -1010,7 +1010,7 @@ "HeaderAccessSchedule": "యాక్సెస్ షెడ్యూల్", "HardwareAccelerationWarning": "హార్డ్వేర్ త్వరణాన్ని ప్రారంభించడం కొన్ని పరిసరాలలో అస్థిరతకు కారణం కావచ్చు. మీ ఆపరేటింగ్ సిస్టమ్ మరియు వీడియో డ్రైవర్లు పూర్తిగా తాజాగా ఉన్నాయని నిర్ధారించుకోండి. దీన్ని ప్రారంభించిన తర్వాత మీకు వీడియో ప్లే చేయడంలో ఇబ్బంది ఉంటే, మీరు సెట్టింగ్‌ను తిరిగి ఏమీలేదు.", "HDPrograms": "HD ప్రోగ్రామ్‌లు", - "H264CrfHelp": "స్థిరమైన రేటు కారకం (CRF) అనేది x264 మరియు x265 ఎన్‌కోడర్ కోసం డిఫాల్ట్ నాణ్యత సెట్టింగ్. మీరు 0 మరియు 51 మధ్య విలువలను సెట్ చేయవచ్చు, ఇక్కడ తక్కువ విలువలు మంచి నాణ్యతను కలిగిస్తాయి (అధిక ఫైల్ పరిమాణాల ఖర్చుతో). సేన్ విలువలు 18 మరియు 28 మధ్య ఉన్నాయి. X264 యొక్క డిఫాల్ట్ 23, మరియు x265 కొరకు 28, కాబట్టి మీరు దీన్ని ప్రారంభ బిందువుగా ఉపయోగించవచ్చు.", + "H264CrfHelp": "స్థిరమైన రేటు కారకం (సిఆర్ఎఫ్) అనేది x264 మరియు x265 ఎన్‌కోడర్ కోసం డిఫాల్ట్ నాణ్యత సెట్టింగ్. మీరు 0 మరియు 51 మధ్య విలువలను సెట్ చేయవచ్చు, ఇక్కడ తక్కువ విలువలు మంచి నాణ్యతను కలిగిస్తాయి (అధిక ఫైల్ పరిమాణాల ఖర్చుతో). సేన్ విలువలు 18 మరియు 28 మధ్య ఉన్నాయి. X264 యొక్క డిఫాల్ట్ 23, మరియు x265 కొరకు 28, కాబట్టి మీరు దీన్ని ప్రారంభ బిందువుగా ఉపయోగించవచ్చు.", "GuideProviderSelectListings": "జాబితాలను ఎంచుకోండి", "GuideProviderLogin": "ప్రవేశించండి", "Guide": "గైడ్", @@ -1572,5 +1572,50 @@ "DownloadAll": "అన్నీ డౌన్‌లోడ్ చేసుకోండి", "EnableCardLayout": "దృశ్య కార్డ్‌బాక్స్‌ను ప్రదర్శించు", "EnableHi10pHelp": "H.264 10-బిట్ వీడియోలను ట్రాన్స్‌కోడ్ చేయకుండా ఉండటానికి ప్రారంభించండి. వీడియో ఖాళీ ఫ్రేమ్‌లను ప్రదర్శిస్తే ఈ ఎంపికను నిలిపివేయండి.", - "EnableRewatchingNextUpHelp": "'తదుపరిది' విభాగాలలో ఇప్పటికే చూసిన ఎపిసోడ్‌లను చూపించడాన్ని ప్రారంభించండి." + "EnableRewatchingNextUpHelp": "'తదుపరిది' విభాగాలలో ఇప్పటికే చూసిన ఎపిసోడ్‌లను చూపించడాన్ని ప్రారంభించండి.", + "CustomSplashScreenSize": "కస్టమ్ చిత్రాలు కనీసం 1920x1080 సైజులో 16x9 ఆస్పెక్ట్ రేషియోలో ఉండాలి.", + "CustomSubtitleStylingHelp": "ఉపశీర్షిక స్టైలింగ్ చాలా పరికరాల్లో పని చేస్తుంది, కానీ అదనపు పనితీరు ఓవర్‌హెడ్‌తో వస్తుంది.", + "DateModified": "సవరించిన తేదీ", + "DeleteLyrics": "సాహిత్యాన్ని తొలగించు", + "DirectPlayHelp": "సోర్స్ ఫైల్ ఈ క్లయింట్‌తో పూర్తిగా అనుకూలంగా ఉంది మరియు సెషన్ ఎటువంటి మార్పులు లేకుండా ఫైల్‌ను స్వీకరిస్తోంది.", + "EnableTrueHdHelp": "మీ పరికరం ట్రూహెచ్‌డి కి మద్దతు ఇస్తే లేదా అనుకూలమైన ఆడియో రిసీవర్‌కు కనెక్ట్ చేయబడి ఉంటే మాత్రమే ప్రారంభించండి, లేకుంటే అది ప్లేబ్యాక్ వైఫల్యానికి కారణం కావచ్చు.", + "ErrorPlayerNotFound": "అభ్యర్థించిన మీడియా కోసం ప్లేయర్ కనుగొనబడలేదు.", + "FallbackMaxStreamingBitrateHelp": "ffprobe సోర్స్ స్ట్రీమ్ బిట్రేట్‌ను నిర్ణయించలేనప్పుడు గరిష్ట స్ట్రీమింగ్ బిట్రేట్‌ను ఫాల్‌బ్యాక్‌గా ఉపయోగిస్తారు. ఇది క్లయింట్‌లు అధిక ట్రాన్స్‌కోడింగ్ బిట్రేట్‌ను అభ్యర్థించకుండా నిరోధించడంలో సహాయపడుతుంది, దీని వలన ప్లేయర్ విఫలమవడానికి మరియు ఎన్‌కోడర్ ఓవర్‌లోడ్ కావడానికి కారణం కావచ్చు.", + "HeaderNextVideo": "తదుపరి వీడియో", + "Framerate": "ఫ్రేమ్‌రేట్", + "HeaderLyricDownloads": "సాహిత్యం డౌన్‌లోడ్", + "HeaderMediaSegmentActions": "మీడియా విభాగం చర్యలు", + "HeaderNoLyrics": "సాహిత్యం కనుగొనబడలేదు", + "HeaderAudioAdvanced": "ఆడియో అధునాతనం", + "HeaderGuestCast": "అతిథి నటులు", + "HeaderNextEpisode": "తదుపరి ఎపిసోడ్", + "DisablePlugin": "నిలిపివేయండి", + "HeaderDeleteSeries": "సిరీస్‌ను తొలగించు", + "HeaderDeleteLyrics": "సాహిత్యాన్ని తొలగించు", + "HeaderEpisodesStatus": "ఎపిసోడ్‌ల స్థితి", + "DeleteCustomImage": "కస్టమ్ చిత్రంను తొలగించండి", + "Digital": "డిజిటల్", + "GoHome": "హోమ్ కి వెళ్ళు", + "GoogleCastUnsupported": "గూగుల్ కాస్ట్ మద్దతు లేదు", + "GridView": "గ్రిడ్ వీక్షణ", + "HeaderConfirmRepositoryInstallation": "ప్లగిన్ రిపోజిటరీ ఇన్‌స్టాలేషన్‌ను నిర్ధారించండి", + "HeaderAddLyrics": "సాహిత్యాన్ని జోడించండి", + "HeaderPageNotFound": "పేజీ కనుగొనబడలేదు", + "DisableVbrAudioEncodingHelp": "ఈ క్లయింట్ కోసం విబిఆర్ తో ఆడియోను ఎన్కోడ్ చేయకుండా సర్వర్‌ను నిరోధించండి.", + "HeaderPerformance": "ప్రదర్శన", + "HeaderEditPlaylist": "ప్లేజాబితాను సవరించు", + "DisplayLoadError": "డిస్ప్లే కాన్ఫిగరేషన్ డేటాను లోడ్ చేస్తున్నప్పుడు లోపం సంభవించింది.", + "DlnaMovedMessage": "డిఎల్ఎన్ఎ కార్యాచరణ ప్లగిన్‌కి తరలించబడింది.", + "HeaderAllRecordings": "అన్ని రికార్డింగ్‌లు", + "HeaderDummyChapter": "అధ్యాయ చిత్రాలు", + "DeleteEntireSeries": "{0} ఎపిసోడ్‌లను తొలగించండి", + "DeleteSeries": "సిరీస్‌ను తొలగించు", + "DeleteEpisode": "ఎపిసోడ్‌ను తొలగించు", + "DeleteName": "తొలగించు {0}", + "EnablePlugin": "ప్రారంభించు", + "ErrorDeletingLyrics": "సర్వర్ నుండి లిరిక్స్ తొలగించడంలో లోపం ఏర్పడింది. దయచేసి జెల్లీఫిన్ మీడియా ఫోల్డర్‌కు రైట్ యాక్సెస్ కలిగి ఉందో లేదో తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి.", + "DeleteServerConfirmation": "మీరు ఈ సర్వర్‌ను తొలగించాలనుకుంటున్నారా?", + "HeaderNewPlaylist": "కొత్త ప్లేజాబితా", + "Experimental": "ప్రయోగాత్మకమైనది", + "HeaderContinueReading": "చదవడం కొనసాగించు" } From 4d23589f2d3fe776dcaad43bc85bc7fa47aa4aed Mon Sep 17 00:00:00 2001 From: yoga sree jagadam Date: Sun, 27 Apr 2025 06:13:40 -0400 Subject: [PATCH 099/645] Translated using Weblate (Telugu) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/te/ --- src/strings/te.json | 191 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 181 insertions(+), 10 deletions(-) diff --git a/src/strings/te.json b/src/strings/te.json index e06a9937f..91a137415 100644 --- a/src/strings/te.json +++ b/src/strings/te.json @@ -401,12 +401,12 @@ "MessageReenableUser": "తిరిగి ప్రారంభించటానికి క్రింద చూడండి", "MessagePluginInstallError": "ప్లగ్‌ఇన్‌ను ఇన్‌స్టాల్ చేస్తున్నప్పుడు లోపం సంభవించింది.", "MessagePluginInstalled": "ప్లగ్ఇన్ విజయవంతంగా వ్యవస్థాపించబడింది. మార్పులు అమలులోకి రావడానికి సర్వర్ పున ar ప్రారంభించబడాలి.", - "MessagePluginInstallDisclaimer": "అదనపు ఫీచర్లు మరియు ప్రయోజనాలతో మీ అనుభవాన్ని మెరుగుపరచడానికి కమ్యూనిటీ సభ్యులు నిర్మించిన ప్లగిన్లు గొప్ప మార్గం. ఇన్‌స్టాల్ చేయడానికి ముందు, దయచేసి మీ సర్వర్‌లో ఎక్కువ లైబ్రరీ స్కాన్లు, అదనపు నేపథ్య ప్రాసెసింగ్ మరియు సిస్టమ్ స్థిరత్వం తగ్గడం వంటి వాటి గురించి తెలుసుకోండి.", + "MessagePluginInstallDisclaimer": "హెచ్చరిక: మూడవ పక్ష ప్లగిన్‌ను ఇన్‌స్టాల్ చేయడం వల్ల ప్రమాదాలు ఉంటాయి. ఇది అస్థిరమైన లేదా హానికరమైన కోడ్‌ను కలిగి ఉండవచ్చు మరియు ఎప్పుడైనా మారవచ్చు. మీరు విశ్వసించే రచయితల నుండి మాత్రమే ప్లగిన్‌లను ఇన్‌స్టాల్ చేయండి మరియు బాహ్య సేవా ప్రశ్నలు, సుదీర్ఘ లైబ్రరీ స్కాన్‌లు లేదా అదనపు నేపథ్య ప్రాసెసింగ్‌తో సహా దాని సంభావ్య ప్రభావాల గురించి దయచేసి తెలుసుకోండి.", "MessagePluginConfigurationRequiresLocalAccess": "ఈ ప్లగ్‌ఇన్‌ను కాన్ఫిగర్ చేయడానికి దయచేసి మీ స్థానిక సర్వర్‌కు నేరుగా సైన్ ఇన్ చేయండి.", "MessagePleaseWait": "దయచేసి వేచి ఉండండి. దీనికి ఒక నిమిషం పట్టవచ్చు.", "MessagePleaseEnsureInternetMetadata": "దయచేసి ఇంటర్నెట్ మెటాడేటా డౌన్‌లోడ్ ప్రారంభించబడిందని నిర్ధారించుకోండి.", "MessagePlayAccessRestricted": "ఈ కంటెంట్ యొక్క ప్లేబ్యాక్ ప్రస్తుతం పరిమితం చేయబడింది. దయచేసి మరింత సమాచారం కోసం మీ సర్వర్ నిర్వాహకుడిని సంప్రదించండి.", - "MessagePasswordResetForUsers": "కింది వినియోగదారులు వారి పాస్వర్డ్లను రీసెట్ చేసారు. రీసెట్ చేయడానికి ఉపయోగించిన పిన్ కోడ్‌లతో వారు ఇప్పుడు సైన్ ఇన్ చేయవచ్చు.", + "MessagePasswordResetForUsers": "కింది వినియోగదారుల పాస్‌వర్డ్‌లు రీసెట్ చేయబడ్డాయి. రీసెట్ చేయడానికి ఉపయోగించిన పిన్ కోడ్‌లతో వారు ఇప్పుడు సైన్ ఇన్ చేయవచ్చు.", "MessageNoTrailersFound": "ఇంటర్నెట్ ట్రెయిలర్ల లైబ్రరీని జోడించడం ద్వారా మీ చలన చిత్ర అనుభవాన్ని మెరుగుపరచడానికి ట్రైలర్స్ ఛానెల్‌ను ఇన్‌స్టాల్ చేయండి.", "MessageNothingHere": "ఇక్కడ ఏమి లేదు.", "MessageNoServersAvailable": "ఆటోమేటిక్ సర్వర్ డిస్కవరీని ఉపయోగించి సర్వర్లు కనుగొనబడలేదు.", @@ -497,7 +497,7 @@ "LeaveBlankToNotSetAPassword": "పాస్‌వర్డ్‌ను సెట్ చేయడానికి మీరు ఈ ఫీల్డ్‌ను ఖాళీగా ఉంచవచ్చు.", "LearnHowYouCanContribute": "మీరు ఎలా సహకరించగలరో తెలుసుకోండి.", "LatestFromLibrary": "తాజా {0}", - "LastSeen": "చివరిగా చూసినది {0}", + "LastSeen": "చివరి కార్యాచరణ {0}", "Large": "పెద్దది", "LanNetworksHelp": "బ్యాండ్‌విడ్త్ పరిమితులను అమలు చేసేటప్పుడు స్థానిక నెట్‌వర్క్‌లో పరిగణించబడే నెట్‌వర్క్‌ల కోసం కామాతో వేరు చేయబడిన IP చిరునామాలు లేదా నెట్‌వర్క్‌ల కోసం IP / నెట్‌మాస్క్ ఎంట్రీలు. సెట్ చేస్తే, అన్ని ఇతర IP చిరునామాలు బాహ్య నెట్‌వర్క్‌లో ఉన్నట్లు పరిగణించబడతాయి మరియు బాహ్య బ్యాండ్‌విడ్త్ పరిమితులకు లోబడి ఉంటాయి. ఖాళీగా ఉంచినట్లయితే, సర్వర్ యొక్క సబ్నెట్ మాత్రమే స్థానిక నెట్‌వర్క్‌లో పరిగణించబడుతుంది.", "LabelZipCode": "పిన్ కోడ్", @@ -569,11 +569,11 @@ "LabelTonemappingThresholdHelp": "టోన్ మ్యాపింగ్ అల్గోరిథం పారామితులు ప్రతి సన్నివేశానికి చక్కగా ట్యూన్ చేయబడతాయి. మరియు సన్నివేశం మారిందా లేదా అని గుర్తించడానికి ఒక ప్రవేశాన్ని ఉపయోగిస్తారు. ప్రస్తుత ఫ్రేమ్ సగటు ప్రకాశం మరియు ప్రస్తుత నడుస్తున్న సగటు మధ్య దూరం ప్రవేశ విలువను మించి ఉంటే, మేము దృశ్య సగటు మరియు గరిష్ట ప్రకాశాన్ని తిరిగి లెక్కిస్తాము. సిఫార్సు చేయబడిన మరియు డిఫాల్ట్ విలువలు 0.8 మరియు 0.2.", "LabelTonemappingThreshold": "టోన్ మ్యాపింగ్ ప్రవేశ", "LabelTonemappingRange": "టోన్ మ్యాపింగ్ పరిధి", - "LabelTonemappingPeakHelp": "ఈ విలువతో సిగ్నల్ / నామమాత్ర / సూచన శిఖరాన్ని భర్తీ చేయండి. ప్రదర్శన మెటాడేటాలో పొందుపరిచిన గరిష్ట సమాచారం నమ్మదగినది కానప్పుడు లేదా తక్కువ పరిధి నుండి అధిక శ్రేణికి టోన్ మ్యాపింగ్ చేసినప్పుడు ఉపయోగపడుతుంది. సిఫార్సు చేయబడిన మరియు డిఫాల్ట్ విలువలు 100 మరియు 0.", + "LabelTonemappingPeakHelp": "బదులుగా ఈ పీక్ విలువతో ఇన్‌పుట్ సిగ్నల్ కోసం ఎంబెడెడ్ మెటాడేటా విలువను ఓవర్‌రైడ్ చేయండి. డిఫాల్ట్ విలువ 100 (1000nit).", "LabelTonemappingPeak": "టోన్ మ్యాపింగ్ శిఖరం", "LabelTonemappingParamHelp": "టోన్ మ్యాపింగ్ అల్గోరిథం ట్యూన్ చేయండి. సిఫార్సు చేయబడిన మరియు డిఫాల్ట్ విలువలు NaN. సాధారణంగా దీన్ని ఖాళీగా ఉంచండి.", "LabelTonemappingParam": "టోన్ మ్యాపింగ్ పారామ్", - "LabelTonemappingDesatHelp": "ఈ స్థాయి ప్రకాశం మించిన ముఖ్యాంశాల కోసం డీసట్రేషన్‌ను వర్తించండి. అధిక పరామితి, మరింత రంగు సమాచారం భద్రపరచబడుతుంది. ఈ సెట్టింగ్ సూపర్-హైలైట్‌ల కోసం అసహజంగా ఎగిరిన రంగులను నిరోధించడానికి సహాయపడుతుంది (బదులుగా సజావుగా) తెల్లగా మారుతుంది. ఇది వెలుపల రంగుల గురించి సమాచారాన్ని తగ్గించే ఖర్చుతో చిత్రాలను మరింత సహజంగా భావిస్తుంది. సిఫార్సు చేయబడిన మరియు డిఫాల్ట్ విలువలు 0 మరియు 0.5.", + "LabelTonemappingDesatHelp": "ఈ ప్రకాశం స్థాయిని మించిన హైలైట్‌ల కోసం డీసాచురేషన్‌ను వర్తింపజేయండి. సిఫార్సు చేయబడిన విలువ 0 (నిలిపివేయండి).", "LabelTonemappingDesat": "టోన్ మ్యాపింగ్ డెసాట్", "LabelTonemappingAlgorithm": "ఉపయోగించడానికి టోన్ మ్యాపింగ్ అల్గోరిథం ఎంచుకోండి", "LabelTitle": "శీర్షిక", @@ -733,7 +733,7 @@ "LabelCriticRating": "విమర్శనాత్మక రేటింగ్", "LabelCreateHttpPortMapHelp": "HTTPS ట్రాఫిక్‌తో పాటు HTTP ట్రాఫిక్ కోసం నియమాన్ని రూపొందించడానికి ఆటోమేటిక్ పోర్ట్ మ్యాపింగ్‌ను అనుమతించండి.", "LabelCreateHttpPortMap": "HTTP ట్రాఫిక్ మరియు HTTPS కోసం ఆటోమేటిక్ పోర్ట్ మ్యాపింగ్‌ను ప్రారంభించండి.", - "LabelCountry": "దేశం", + "LabelCountry": "దేశం/ప్రాంతం", "LabelCorruptedFrames": "పాడైన ఫ్రేమ్‌లు", "LabelContentType": "కంటెంట్ రకం", "LabelCommunityRating": "సంఘం రేటింగ్", @@ -844,7 +844,7 @@ "LabelAudioBitDepth": "ఆడియో బిట్ లోతు", "LabelArtistsHelp": "బహుళ కళాకారులను సెమికోలన్‌తో వేరు చేయండి.", "LabelArtists": "కళాకారులు", - "LabelAppNameExample": "ఉదాహరణ: సిక్‌బియర్డ్, సోనార్", + "LabelAppNameExample": "API కీలను గుర్తించడానికి మానవులు చదవగలిగే పేరు. ఈ సెట్టింగ్ కార్యాచరణను ప్రభావితం చేయదు.", "LabelAppName": "అనువర్తనం పేరు", "LabelAllowHWTranscoding": "హార్డ్వేర్ ట్రాన్స్కోడింగ్ను అనుమతించండి", "LabelAllowedRemoteAddressesMode": "రిమోట్ IP చిరునామా ఫిల్టర్ మోడ్", @@ -1076,7 +1076,7 @@ "LabelRecord": "రికార్డ్", "LabelReasonForTranscoding": "ట్రాన్స్‌కోడింగ్‌కు కారణం", "LabelQuickConnectCode": "త్వరిత కనెక్ట్ కోడ్", - "LabelPublishedServerUriHelp": "ఇంటర్ఫేస్ లేదా క్లయింట్ IP చిరునామా ఆధారంగా జెల్లీఫిన్ ఉపయోగించే URI ని భర్తీ చేయండి.", + "LabelPublishedServerUriHelp": "ఇంటర్‌ఫేస్ లేదా క్లయింట్ ఐపీ చిరునామా ఆధారంగా జెల్లీఫిన్ ఉపయోగించే యుఆర్ఐని ఓవర్‌రైడ్ చేయండి. ఉదాహరణకు: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, లేదా all=https://jellyfin.example.com", "LabelPublishedServerUri": "ప్రచురించిన సర్వర్ URI లు", "LabelPublicHttpsPortHelp": "స్థానిక పోర్ట్ నంబర్‌ను స్థానిక హెచ్‌టిటిపిఎస్ పోర్ట్‌కు మ్యాప్ చేయాలి.", "LabelPublicHttpsPort": "పబ్లిక్ HTTPS పోర్ట్ సంఖ్య", @@ -1177,7 +1177,7 @@ "LabelLogs": "లాగ్‌లు", "LabelLoginDisclaimerHelp": "లాగిన్ పేజీ దిగువన ప్రదర్శించబడే సందేశం.", "LabelLoginDisclaimer": "లాగిన్ నిరాకరణ", - "LabelLockItemToPreventChanges": "భవిష్యత్తులో మార్పులను నివారించడానికి ఈ అంశాన్ని లాక్ చేయండి", + "LabelLockItemToPreventChanges": "భవిష్యత్తులో మెటాడేటా మార్పులను నిరోధించడానికి ఈ అంశాన్ని లాక్ చేయండి", "LabelLocalHttpServerPortNumberHelp": "HTTP సర్వర్ కోసం TCP పోర్ట్ సంఖ్య.", "LabelLocalHttpServerPortNumber": "స్థానిక HTTP పోర్ట్ సంఖ్య", "LabelLineup": "లైనప్", @@ -1617,5 +1617,176 @@ "DeleteServerConfirmation": "మీరు ఈ సర్వర్‌ను తొలగించాలనుకుంటున్నారా?", "HeaderNewPlaylist": "కొత్త ప్లేజాబితా", "Experimental": "ప్రయోగాత్మకమైనది", - "HeaderContinueReading": "చదవడం కొనసాగించు" + "HeaderContinueReading": "చదవడం కొనసాగించు", + "LabelSelectPreferredTranscodeVideoAudioCodec": "వీడియో ప్లేబ్యాక్‌లో ప్రాధాన్య ట్రాన్స్‌కోడ్ ఆడియో కోడెక్", + "LabelDeveloper": "డెవలపర్", + "MediaSegmentType.Commercial": "వాణిజ్య", + "MetadataNfoLoadError": "మెటాడేటా ఎన్ఎఫ్ఓ సెట్టింగ్‌లను లోడ్ చేయడంలో విఫలమైంది", + "HeaderPreviewLyrics": "సాహిత్యాన్ని పరిదృశ్యం చేయండి", + "HeaderRecordingMetadataSaving": "మెటాడేటా రికార్డింగ్", + "HeaderSyncPlaySettings": "సమకాలీకరణ సెట్టింగ్‌లు", + "HeaderSyncPlayTimeSyncSettings": "సమయ సమకాలీకరణ", + "HeaderSyncPlayPlaybackSettings": "ప్లేబ్యాక్", + "HeaderUploadLyrics": "సాహిత్యాన్ని అప్‌లోడ్ చేయండి", + "IgnoreDtsHelp": "ఈ ఎంపికను నిలిపివేయడం వలన కొన్ని సమస్యలు పరిష్కరించబడవచ్చు, ఉదా. ప్రత్యేక ఆడియో మరియు వీడియో స్ట్రీమ్‌లు ఉన్న ఛానెల్‌లలో ఆడియో లేకపోవడం.", + "ImageDeleteFailed": "చిత్రం తొలగింపు విఫలమైంది", + "LabelAlbumGain": "ఆల్బమ్ లాభం", + "ImageUploadFailed": "చిత్రం అప్‌లోడ్ విఫలమైంది", + "LabelAllowContentWithTags": "ట్యాగ్‌లతో ఉన్న అంశాలను అనుమతించు", + "LabelAllowStreamSharing": "స్ట్రీమ్ షేరింగ్‌ను అనుమతించండి", + "LabelAutomaticallyAddToCollection": "సేకరణకు స్వయంచాలకంగా జోడించు", + "LabelSelectAudioNormalization": "ఆడియో సాధారణీకరణ", + "LabelIsSynced": "సమకాలీకరించబడింది", + "LabelParallelImageEncodingLimitHelp": "సమాంతరంగా అమలు చేయడానికి అనుమతించబడిన గరిష్ట సంఖ్యలో చిత్రం ఎన్‌కోడింగ్‌లు. దీన్ని ఖాళీగా ఉంచడం వలన మీ వ్యవస్థ కోర్ గణన ఆధారంగా పరిమితిని ఎంచుకుంటారు.", + "LabelBackdropScreensaverIntervalHelp": "బ్యాక్‌డ్రాప్ స్క్రీన్‌సేవర్‌ను ఉపయోగిస్తున్నప్పుడు వివిధ బ్యాక్‌డ్రాప్‌ల మధ్య సమయం సెకన్లలో.", + "LabelDevice": "పరికరం", + "LabelCustomTagDelimitersHelp": "ట్యాగ్‌లను వేరు చేయడానికి అక్షరాలను డీలిమిటర్‌లుగా పరిగణించాలి.", + "LabelHardwareEncoding": "హార్డ్‌వేర్ ఎన్‌కోడింగ్", + "LabelDate": "తేదీ", + "LabelDelimiterWhitelistHelp": "ట్యాగ్ విభజన నుండి మినహాయించాల్సిన అంశాలు. ప్రతి పంక్తికి ఒక అంశం.", + "LabelDisableVbrAudioEncoding": "విబిఆర్ ఆడియో ఎన్‌కోడింగ్‌ను నిలిపివేయండి", + "LabelDropLyricsHere": "సాహిత్యాన్ని ఇక్కడ వదలండి లేదా బ్రౌజ్ చేయడానికి క్లిక్ చేయండి.", + "LabelChapterImageResolutionHelp": "సంగ్రహించబడిన అధ్యాయ చిత్రాల స్పష్టత. దీన్ని మార్చడం వలన ఇప్పటికే ఉన్న నకిలీ అధ్యాయాలపై ఎటువంటి ప్రభావం ఉండదు.", + "LabelEnableAudioVbrHelp": "వేరియబుల్ బిట్రేట్ సగటు బిట్రేట్ నిష్పత్తికి మెరుగైన నాణ్యతను అందిస్తుంది, కానీ కొన్ని అరుదైన సందర్భాల్లో బఫరింగ్ మరియు అనుకూలత సమస్యలను కలిగించవచ్చు.", + "LabelNoChangelog": "ఈ విడుదలకు ఎలాంటి చేంజ్‌లాగ్ అందించబడలేదు.", + "LabelEnableLUFSScan": "లూఫ్స్ స్కాన్‌ను ప్రారంభించండి", + "LabelMaxDaysForNextUpHelp": "ఒక షో చూడకుండా 'తదుపరిది' జాబితాలో గరిష్టంగా ఎన్ని రోజులు ఉండాలో సెట్ చేయండి.", + "LabelEnableLUFSScanHelp": "ట్రాక్‌లలో సమాన శబ్దాన్ని పొందడానికి క్లయింట్‌లు ఆడియో ప్లేబ్యాక్‌ను సాధారణీకరించవచ్చు. ఇది లైబ్రరీ స్కాన్‌లను ఎక్కువసేపు చేస్తుంది మరియు ఎక్కువ వనరులను తీసుకుంటుంది.", + "LabelFallbackMaxStreamingBitrate": "ఫాల్‌బ్యాక్ గరిష్ట స్ట్రీమ్ బిట్రేట్ (Mbps)", + "LabelMaxVideoResolution": "అనుమతించబడిన గరిష్ట వీడియో ట్రాన్స్‌కోడింగ్ స్పష్టత", + "LabelMediaDetails": "మీడియా వివరాలు", + "LabelMediaSegmentProviders": "మీడియా భాగం ప్రొవైడర్లు", + "LabelLocalCustomCss": "ఈ క్లయింట్‌కు మాత్రమే వర్తించే స్టైలింగ్ కోసం అనుకూల సిఎస్ఎస్ కోడ్. మీరు సర్వర్ అనుకూల సిఎస్ఎస్ కోడ్‌ను నిలిపివేయాలనుకోవచ్చు.", + "LabelQsvDevice": "క్యూఎస్‌వి పరికరం", + "LabelSortName": "పేరును క్రమబద్ధీకరించు", + "LabelQsvDeviceHelp": "బహుళ-జిపియు వ్యవస్థలో ఇంటెల్ క్యూఎస్‌వి కోసం పరికరాన్ని పేర్కొనండి. లైనక్స్లో, ఇది రెండర్ నోడ్, ఉదా., /dev/dri/renderD128. విండోస్లో, ఇది 0 నుండి ప్రారంభమయ్యే పరికర సూచిక. మీరు ఏమి చేస్తున్నారో మీకు తెలియకపోతే ఖాళీగా వదిలేయండి.", + "Larger": "పెద్దది", + "LabelSaveTrickplayLocally": "మీడియా పక్కన ట్రిక్‌ప్లే చిత్రాలను సేవ్ చేయండి", + "LabelSaveTrickplayLocallyHelp": "ట్రిక్‌ప్లే చిత్రాలను మీడియా ఫోల్డర్‌లలో సేవ్ చేయడం వలన వాటిని సులభంగా తరలించడం మరియు యాక్సెస్ చేయడం కోసం మీ మీడియా పక్కన ఉంచుతారు.", + "LabelScreensaverTime": "స్క్రీన్‌సేవర్ సమయం", + "Bold": "బోల్డ్", + "LabelScreensaverTimeHelp": "స్క్రీన్‌సేవర్‌ను ప్రారంభించడానికి సెకన్లలో పట్టే నిష్క్రియాత్మక సమయం.", + "LabelSyncPlaySettingsDescription": "సింక్‌ప్లే ప్రాధాన్యతలను మార్చండి", + "LabelSyncPlaySettingsSyncCorrectionHelp": "మీడియాను వేగవంతం చేయడం ద్వారా లేదా అంచనా వేసిన స్థానానికి చేరుకోవడం ద్వారా ప్లేబ్యాక్ యొక్క యాక్టివ్ సింక్‌ను ప్రారంభించండి. భారీగా నత్తిగా మాట్లాడటం జరిగితే దీన్ని నిలిపివేయండి.", + "LabelSyncPlaySettingsMinDelaySpeedToSync": "స్పీడ్‌టుసింక్ కనీస ఆలస్యం", + "LabelSyncPlaySettingsMinDelaySpeedToSyncHelp": "కనీస ప్లేబ్యాక్ ఆలస్యం (msలో) ఆ తర్వాత స్పీడ్‌టుసింక్ ప్లేబ్యాక్ స్థానాన్ని సరిచేయడానికి ప్రయత్నిస్తుంది.", + "LabelSyncPlaySettingsMaxDelaySpeedToSyncHelp": "గరిష్ట ప్లేబ్యాక్ ఆలస్యం (msలో), ఆ తర్వాత స్పీడ్‌టుసింక్ బదులుగా స్కిప్‌టోసింక్ ఉపయోగించబడుతుంది.", + "LabelSyncPlaySettingsSpeedToSyncDuration": "స్పీడ్‌టుసింక్ వ్యవధి", + "LimitSegmentLength": "చిన్నహెచ్‌ఎల్‌ఎస్ విభాగాలను ఉపయోగించండి", + "LabelSyncPlaySettingsSpeedToSyncDurationHelp": "ప్లేబ్యాక్ స్థానాన్ని సరిచేయడానికి స్పీడ్‌టుసింక్ ఉపయోగించే మిల్లీసెకన్ల మొత్తం.", + "LabelSyncPlaySettingsMinDelaySkipToSyncHelp": "కనీస ప్లేబ్యాక్ ఆలస్యం (msలో) ఆ తర్వాత స్కిప్‌టోసింక్ ప్లేబ్యాక్ స్థానాన్ని సరిచేయడానికి ప్రయత్నిస్తుంది.", + "LabelSyncPlaySettingsSpeedToSyncHelp": "ప్లేబ్యాక్‌ను వేగవంతం చేయడంలో ఉండే సింక్ కరెక్షన్ పద్ధతి. సింక్ కరెక్షన్‌ను తప్పనిసరిగా ప్రారంభించాలి.", + "LogLevel.Warning": "హెచ్చరిక", + "MediaSegmentType.Recap": "రీక్యాప్", + "LabelSelectPreferredTranscodeVideoCodec": "ప్రాధాన్య ట్రాన్స్‌కోడ్ వీడియో కోడెక్", + "LastActive": "చివరిగా యాక్టివ్‌గా ఉన్న సమయం", + "LibraryScanFanoutConcurrency": "సమాంతర లైబ్రరీ స్కాన్ పనుల పరిమితి", + "LibraryScanFanoutConcurrencyHelp": "లైబ్రరీ స్కాన్‌ల సమయంలో సమాంతర పనుల గరిష్ట సంఖ్య. దీన్ని ఖాళీగా ఉంచడం వల్ల మీ సిస్టమ్ కోర్ కౌంట్ ఆధారంగా పరిమితిని ఎంచుకుంటారు. హెచ్చరిక: ఈ సంఖ్యను చాలా ఎక్కువగా సెట్ చేయడం వల్ల నెట్‌వర్క్ ఫైల్ సిస్టమ్‌లతో సమస్యలు తలెత్తవచ్చు; మీరు సమస్యలను ఎదుర్కొంటే ఈ సంఖ్యను తగ్గించండి.", + "LibraryInvalidItemIdError": "లైబ్రరీ చెల్లని స్థితిలో ఉంది మరియు సవరించబడదు. మీరు బహుశా ఒక బగ్‌ను ఎదుర్కొంటున్నారు: డేటాబేస్‌లోని మార్గం ఫైల్‌సిస్టమ్‌లో సరైన మార్గం కాదు.", + "MediaSegmentAction.AskToSkip": "దాటవేయమని అడగండి", + "LimitSegmentLengthHelp": "ఈ ఎంపికను ప్రారంభించడం వలన వెబ్‌ఓఎస్ టీవీలు వంటి కొన్ని పరికరాల్లో సీకింగ్ సమయంలో హెచ్‌ఎల్‌ఎస్ ప్లేయర్ హ్యాంగ్ అవ్వకుండా నిరోధించవచ్చు.", + "LimitSupportedVideoResolutionHelp": "గరిష్ట మద్దతు ఉన్న వీడియో రిజల్యూషన్‌గా 'గరిష్టంగా అనుమతించబడిన వీడియో ట్రాన్స్‌కోడింగ్ రిజల్యూషన్'ని ఉపయోగించండి.", + "MediaInfoTitle": "శీర్షిక", + "LogLevel.Trace": "ట్రేస్", + "LogLevel.Information": "సమాచారం", + "MediaInfoRotation": "భ్రమణం", + "Mixer": "మిక్సర్", + "LogLevel.None": "ఏదీ లేదు", + "MediaSegmentProvidersHelp": "మీకు ఇష్టమైన మీడియా భాగం ప్రొవైడర్లను ప్రాధాన్యత క్రమంలో ప్రారంభించండి మరియు ర్యాంక్ చేయండి.", + "MenuClose": "మెనూ మూసివేయి", + "Lyrics": "సాహిత్యం", + "MessageNoFavoritesAvailable": "ప్రస్తుతం ఇష్టమైనవి ఏవీ అందుబాటులో లేవు.", + "MenuOpen": "మెనూ తెరవండి", + "MessageCancelTimerError": "టైమర్‌ను రద్దు చేస్తున్నప్పుడు లోపం సంభవించింది", + "MessageRenameMediaFolder": "మీడియా లైబ్రరీ పేరు మార్చడం వలన మొత్తం మెటాడేటా పోతుంది, జాగ్రత్తగా కొనసాగండి.", + "MessageRepositoryInstallDisclaimer": "హెచ్చరిక: మూడవ పక్ష ప్లగిన్ రిపోజిటరీని ఇన్‌స్టాల్ చేయడం వలన ప్రమాదాలు ఉంటాయి. ఇది అస్థిరమైన లేదా హానికరమైన కోడ్‌ను కలిగి ఉండవచ్చు మరియు ఎప్పుడైనా మారవచ్చు. మీరు విశ్వసించే రచయితల నుండి మాత్రమే రిపోజిటరీలను ఇన్‌స్టాల్ చేయండి.", + "MessageSent": "సందేశం పంపబడింది.", + "MoveToTop": "పైకి తరలించు", + "MessageUnauthorizedUser": "ఈ సమయంలో సర్వర్‌ను యాక్సెస్ చేయడానికి మీకు అధికారం లేదు. దయచేసి మరిన్ని వివరాల కోసం మీ సర్వర్ నిర్వాహకుడిని సంప్రదించండి.", + "NativeSubtitleStylingHelp": "కొన్ని పరికరాల్లో ఉపశీర్షిక స్టైలింగ్ పనిచేయదు. అయితే, దీనికి ఎటువంటి పనితీరు ఓవర్ హెడ్ ఉండదు.", + "OptionDateShowAdded": "తేదీ ప్రదర్శన జోడించబడింది", + "PageNotFound": "ఇది మీరు వెతుకుతున్న పేజీ కాదు.", + "PasswordRequiredForAdmin": "నిర్వాహక ఖాతాలకు పాస్‌వర్డ్ అవసరం.", + "PasswordMissingSaveError": "కొత్త పాస్‌వర్డ్ ఖాళీగా ఉండకూడదు.", + "HeaderVideoAdvanced": "వీడియో అధునాతనం", + "LabelStereoDownmixAlgorithm": "స్టీరియో డౌన్‌మిక్స్ అల్గోరిథం", + "MessageNoItemsAvailable": "ప్రస్తుతం ఏ వస్తువులు అందుబాటులో లేవు.", + "MessageCancelSeriesTimerError": "సిరీస్ టైమర్‌ను రద్దు చేస్తున్నప్పుడు లోపం సంభవించింది", + "HomeVideosPhotos": "హోమ్ వీడియోలు మరియు ఫోటోలు", + "IgnoreDts": "డిటిఎస్ (డీకోడింగ్ టైమ్‌స్టాంప్)ను విస్మరించండి", + "LabelInstalled": "ఇన్‌స్టాల్ చేయబడింది", + "LabelRepository": "రిపోజిటరీ", + "LabelSyncPlaySettingsExtraTimeOffset": "అదనపు సమయం ఆఫ్‌సెట్", + "LabelWebVersion": "వెబ్ వెర్షన్", + "Localization": "స్థానికీకరణ", + "MoveToBottom": "దిగువకు తరలించు", + "LabelOriginalName": "అసలు పేరు", + "ImageUploadCancelled": "చిత్రం అప్‌లోడ్ రద్దు చేయబడింది", + "LabelParallelImageEncodingLimit": "సమాంతర చిత్రం ఎన్‌కోడింగ్ పరిమితి", + "LabelSlowResponseTime": "ప్రతిస్పందన నెమ్మదిగా పరిగణించబడే సమయం msలో", + "LogLevel.Critical": "క్లిష్టమైనది", + "MediaSegmentType.Preview": "ప్రివ్యూ", + "LogLevel.Error": "లోపం", + "MediaSegmentType.Intro": "పరిచయం", + "NextChapter": "తదుపరి అధ్యాయం", + "LabelAllowFmp4TranscodingContainer": "ఎఫ్‌ఎమ్‌పి 4 ట్రాన్స్‌కోడింగ్ కంటైనర్‌ను అనుమతించండి", + "LabelAlwaysRemuxFlacAudioFiles": "FLAC ఆడియో ఫైల్‌లను ఎల్లప్పుడూ రీమక్స్ చేయండి", + "LabelBackdropScreensaverInterval": "బ్యాక్‌డ్రాప్ స్క్రీన్‌సేవర్ విరామం", + "LabelSyncPlaySettingsMaxDelaySpeedToSync": "స్పీడ్‌టుసింక్ గరిష్ట ఆలస్యం", + "LabelSyncPlaySettingsSkipToSync": "స్కిప్‌టోసింక్ ని ప్రారంభించండి", + "Illustrator": "చిత్రకారుడు", + "LogLevel.Debug": "డీబగ్", + "Letterer": "అక్షరం", + "Penciller": "పెన్సిలర్", + "OtherArtist": "ఇతర కళాకారుడు", + "LabelSyncPlaySettingsSkipToSyncHelp": "అంచనా వేసిన స్థానానికి చేరుకోవడంలో ఉండే సమకాలీకరణ దిద్దుబాటు పద్ధతి. సమకాలీకరణ దిద్దుబాటును తప్పనిసరిగా ప్రారంభించాలి.", + "LabelSystem": "వ్యవస్థ", + "LabelServerVersion": "సర్వర్ వెర్షన్", + "ListView": "జాబితా వీక్షణ", + "Inker": "ఇంకర్", + "NoLyricsSearchResultsFound": "సాహిత్యం కనుగొనబడలేదు.", + "LabelAudioTagSettings": "ఆడియో ట్యాగ్ సెట్టింగ్‌లు", + "LabelCustomTagDelimiters": "కస్టమ్ ట్యాగ్ డీలిమిటర్", + "LabelDelimiterWhitelist": "డీలిమిటర్ వైట్‌లిస్ట్", + "LabelMaxDaysForNextUp": "'తదుపరిది'లో గరిష్ట రోజులు", + "LabelAlwaysRemuxMp3AudioFiles": "MP3 ఆడియో ఫైళ్ళను ఎల్లప్పుడూ రీమక్స్ చేయండి", + "LabelLyricDownloaders": "లిరిక్ డౌన్‌లోడర్లు", + "LyricDownloadersHelp": "మీకు ఇష్టమైన లిరిక్ డౌన్‌లోడ్‌లను ప్రాధాన్యత క్రమంలో ప్రారంభించండి మరియు ర్యాంక్ చేయండి.", + "MediaSegmentType.Outro": "ఔట్రో", + "LabelGroupShowsIntoCollections": "సమూహ ప్రదర్శనలను సేకరణలలోకి మార్చడం", + "LabelGroupShowsIntoCollectionsHelp": "ప్రదర్శన జాబితాలను ప్రదర్శించేటప్పుడు సేకరణలోని ప్రదర్శనలు ఒక సమూహ అంశంగా ప్రదర్శించబడతాయి.", + "LabelSyncPlaySettingsMinDelaySkipToSync": "స్కిప్‌టోసింక్ కనీస ఆలస్యం", + "LabelSyncPlaySettingsSyncCorrection": "సమకాలీకరణ దిద్దుబాటు", + "LabelMediaSegmentsType": "{0} విభాగాలు", + "LabelSlowResponseEnabled": "సర్వర్ సమాధానం ఇవ్వడంలో నెమ్మదిగా ఉంటే హెచ్చరిక సందేశాన్ని లాగ్ చేయండి", + "MediaSegmentSkipPrompt": "{0} దాటవేయి", + "LabelNotInstalled": "ఇన్‌స్టాల్ చేయబడలేదు", + "ItemDetails": "వస్తువు వివరాలు", + "LabelLevel": "స్థాయి", + "LabelSyncPlaySettingsSpeedToSync": "స్పీడ్‌టుసింక్ ని ప్రారంభించండి", + "MediaSegmentAction.Skip": "దాటవేయి", + "MediaSegmentAction.None": "ఏదీ లేదు", + "MixedMoviesShows": "మిశ్రమ సినిమాలు మరియు కార్యక్రమాలు", + "LabelBuildVersion": "నిర్మించు వెర్షన్", + "LabelDuration": "వ్యవధి", + "LabelSubtitleStyling": "ఉపశీర్షిక శైలి", + "LabelSyncPlayNoGroups": "సమూహాలు అందుబాటులో లేవు", + "LogoScreensaver": "లోగో స్క్రీన్‌సేవర్", + "Lyricist": "గీత రచయిత", + "LimitSupportedVideoResolution": "గరిష్ట మద్దతు ఉన్న వీడియో స్పష్టతను పరిమితం చేయండి", + "LabelEnableAudioVbr": "విబిఆర్ ఆడియో ఎన్‌కోడింగ్‌ను ప్రారంభించండి", + "LabelEnablePlugin": "ప్లగిన్‌ను ప్రారంభించు", + "MessageSplitVersionsError": "వెర్షన్‌లను విభజించేటప్పుడు ఎర్రర్ సంభవించింది", + "Native": "స్థానికం", + "OriginalAirDate": "అసలు ప్రసార తేదీ", + "Lyric": "లిరిక్", + "MetadataImagesLoadError": "మెటాడేటా సెట్టింగ్‌లను లోడ్ చేయడంలో విఫలమైంది", + "LabelSyncPlaySettingsExtraTimeOffsetHelp": "సమయ సమకాలీకరణ కోసం ఎంచుకున్న పరికరంతో సమయ ఆఫ్‌సెట్‌ను (msలో) మాన్యువల్‌గా సర్దుబాటు చేయండి. జాగ్రత్తగా సర్దుబాటు చేయండి.", + "LabelTextWeight": "టెక్స్ట్ బరువు", + "OptionDateEpisodeAdded": "తేదీ ఎపిసోడ్ జోడించబడింది", + "LabelDummyChapterDuration": "విరామం", + "LabelChapterImageResolution": "స్పష్టత", + "LabelDummyChapterDurationHelp": "డమ్మీ అధ్యాయాల మధ్య విరామం. డమ్మీ అధ్యాయాల జనరేషన్‌ను నిలిపివేయడానికి 0కి సెట్ చేయండి. దీన్ని మార్చడం వల్ల ఇప్పటికే ఉన్న డమ్మీ అధ్యాయాలపై ఎటువంటి ప్రభావం ఉండదు.", + "MoviesAndShows": "సినిమాలు మరియు షోలు", + "LibraryNameInvalid": "లైబ్రరీ పేరు ఖాళీగా ఉండకూడదు." } From 2240e4b47d6bdfcfa74363f1a6516644c12abbf5 Mon Sep 17 00:00:00 2001 From: Christos Mak Date: Sun, 27 Apr 2025 08:11:19 -0400 Subject: [PATCH 100/645] Translated using Weblate (Greek) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/el/ --- src/strings/el.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/el.json b/src/strings/el.json index d83d3c91b..60eba2914 100644 --- a/src/strings/el.json +++ b/src/strings/el.json @@ -1972,5 +1972,8 @@ "ImageDeleteFailed": "Η διαγραφή εικόνας απέτυχε", "ImageUploadCancelled": "Η φόρτωση της εικόνας ακυρώθηκε", "ImageUploadFailed": "Η φόρτωση της εικόνας απέτυχε", - "LimitSegmentLength": "Χρήση μικρότερων τμημάτων HLS" + "LimitSegmentLength": "Χρήση μικρότερων τμημάτων HLS", + "PreferNonstandardArtistsTag": "Προτίμηση της ετικέτας ARTISTS εάν είναι διαθέσιμη", + "Penciller": "Στυλογράφος", + "Native": "Εγγενές" } From 901429c576152e5e81c35b54b239aa7579c2ef16 Mon Sep 17 00:00:00 2001 From: RikyR Date: Sun, 27 Apr 2025 09:11:51 -0400 Subject: [PATCH 101/645] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/strings/it.json b/src/strings/it.json index d18d81a33..c841f1ed2 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -1045,7 +1045,7 @@ "ThemeSongs": "Temi canzoni", "ThemeVideos": "Temi video", "TheseSettingsAffectSubtitlesOnThisDevice": "Queste impostazioni influenzano i sottotitoli di questo dispositivo", - "ThisWizardWillGuideYou": "Questa procedura ti guiderà attraverso il processo di installazione. Per iniziare, per favore scegli la tua lingua preferita.", + "ThisWizardWillGuideYou": "Questa procedura ti guiderà attraverso il processo di installazione. Per iniziare, per favore inserisci il nome del server e scegli la tua lingua preferita.", "Thumb": "Miniatura", "Thursday": "Giovedì", "TitleHardwareAcceleration": "Accelerazione Hardware", @@ -2014,5 +2014,13 @@ "PageNotFound": "Questa non è la pagina che stai cercando.", "SettingsPageLoadError": "Errore nel caricamento della pagina di configurazione", "RetryWithGlobalSearch": "Riprova con la ricerca globale", - "StreamCountExceedsLimit": "Il numero di flussi supera il limite" + "StreamCountExceedsLimit": "Il numero di flussi supera il limite", + "ReadInputAtNativeFramerate": "Lettura dell'ingresso alla frequenza di fotogrammi nativa", + "ReadInputAtNativeFramerateHelp": "Abilitando questa opzione potresti risolvere alcuni problemi, ad esempio l'interruzione anticipata delle dirette streaming.", + "CustomSplashScreenSize": "Le immagini personalizzate devono avere un formato 16x9 e una dimensione minima di 1920x1080.", + "DeleteCustomImage": "Elimina l'immagine personalizzata", + "ImageUploadCancelled": "Caricamento immagine annullato", + "ImageUploadFailed": "Caricamento immagine non riuscito", + "ImageDeleteFailed": "Eliminazione immagine non riuscita", + "UploadCustomImage": "Carica immagine personalizzata" } From 46febba85b6f077eb73f53e78f780f6d7c4a1b22 Mon Sep 17 00:00:00 2001 From: yoga sree jagadam Date: Sun, 27 Apr 2025 08:23:26 -0400 Subject: [PATCH 102/645] Translated using Weblate (Telugu) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/te/ --- src/strings/te.json | 107 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 106 insertions(+), 1 deletion(-) diff --git a/src/strings/te.json b/src/strings/te.json index 91a137415..c1e4e1ba1 100644 --- a/src/strings/te.json +++ b/src/strings/te.json @@ -1788,5 +1788,110 @@ "LabelChapterImageResolution": "స్పష్టత", "LabelDummyChapterDurationHelp": "డమ్మీ అధ్యాయాల మధ్య విరామం. డమ్మీ అధ్యాయాల జనరేషన్‌ను నిలిపివేయడానికి 0కి సెట్ చేయండి. దీన్ని మార్చడం వల్ల ఇప్పటికే ఉన్న డమ్మీ అధ్యాయాలపై ఎటువంటి ప్రభావం ఉండదు.", "MoviesAndShows": "సినిమాలు మరియు షోలు", - "LibraryNameInvalid": "లైబ్రరీ పేరు ఖాళీగా ఉండకూడదు." + "LibraryNameInvalid": "లైబ్రరీ పేరు ఖాళీగా ఉండకూడదు.", + "VideoResolutionNotSupported": "వీడియో స్పష్టతకు మద్దతు లేదు", + "PreferSystemNativeHwDecoder": "ఓఎస్ నేటివ్ డిఎక్స్‌విఎ లేదా విఎ-ఏపీఐ హార్డ్‌వేర్ డీకోడర్‌లను ఇష్టపడండి", + "EnableVppTonemapping": "వీపీపీ టోన్ మ్యాపింగ్‌ను ప్రారంభించండి", + "EnableVideoToolboxTonemapping": "వీడియోటూల్‌బాక్స్ టోన్ మ్యాపింగ్‌ను ప్రారంభించండి", + "EnableEnhancedNvdecDecoder": "మెరుగుపరచబడిన ఎన్విడిఇసి డీకోడర్‌ను ప్రారంభించండి", + "AudioBitrateNotSupported": "ఆడియో బిట్రేట్‌కు మద్దతు లేదు", + "AllowVppTonemappingHelp": "పూర్తి ఇంటెల్ డ్రైవర్ ఆధారిత టోన్-మ్యాపింగ్. ప్రస్తుతం హెచ్‌డిఆర్10 వీడియోలతో కొన్ని హార్డ్‌వేర్‌లపై మాత్రమే పనిచేస్తుంది. మరొక ఓపెన్‌సిఎల్ అమలుతో పోలిస్తే దీనికి అధిక ప్రాధాన్యత ఉంది.", + "AllowVideoToolboxTonemappingHelp": "వీడియోటూల్‌బాక్స్ ద్వారా అందించబడిన హార్డ్‌వేర్-యాక్సిలరేటెడ్ టోన్-మ్యాపింగ్. ఇది హెచ్‌డిఆర్10, హెచ్‌డిఆర్10+ మరియు హెచ్‌ఎల్‌జితో సహా చాలా హెచ్‌డిఆర్ ఫార్మాట్‌లతో పనిచేస్తుంది, కానీ డాల్బీ విజన్ ప్రొఫైల్ 5తో పనిచేయదు. మరొక మెటల్ అమలుతో పోలిస్తే దీనికి అధిక ప్రాధాన్యత ఉంది.", + "EnableGamepadHelp": "కనెక్ట్ చేయబడిన ఏవైనా కంట్రోలర్‌ల నుండి ఇన్‌పుట్ వినండి. (అవసరం: 'టీవీ' డిస్‌ప్లే మోడ్)", + "VideoLevelNotSupported": "వీడియో కోడెక్ స్థాయికి మద్దతు లేదు", + "VideoProfileNotSupported": "వీడియో కోడెక్ ప్రొఫైల్‌కు మద్దతు లేదు", + "EnableIntelLowPowerHevcHwEncoder": "ఇంటెల్ తక్కువ-శక్తి హెవిసి హార్డ్‌వేర్ ఎన్‌కోడర్‌ను ప్రారంభించండి", + "IntelLowPowerEncHelp": "తక్కువ-పవర్ ఎన్‌కోడింగ్ అనవసరమైన సీపీయూ-జిపియు సమకాలీకరణను ఉంచగలదు. లైనక్స్లో i915 హెచ్‌యుసి ఫర్మ్‌వేర్ కాన్ఫిగర్ చేయబడకపోతే వాటిని నిలిపివేయాలి.", + "EnableEnhancedNvdecDecoderHelp": "మెరుగైన ఎన్విడిఇసి అమలు, మీరు డీకోడింగ్ లోపాలను ఎదుర్కొంటే క్యూవిడ్ని ఉపయోగించడానికి ఈ ఎంపికను నిలిపివేయండి.", + "LabelHardwareEncodingOptions": "హార్డ్‌వేర్ ఎన్‌కోడింగ్ ఎంపికలు", + "MediaInfoDvProfile": "డివి ప్రొఫైల్", + "MediaInfoBlPresentFlag": "డివి బిఎల్ ప్రీసెట్ ఫ్లాగ్", + "EncodingFormatHelp": "జెల్లీఫిన్ ట్రాన్స్‌కోడ్ చేయాల్సిన వీడియో ఎన్‌కోడింగ్‌ను ఎంచుకోండి. ఎంచుకున్న ఫార్మాట్‌కు హార్డ్‌వేర్ త్వరణం అందుబాటులో లేనప్పుడు జెల్లీఫిన్ సాఫ్ట్‌వేర్ ఎన్‌కోడింగ్‌ను ఉపయోగిస్తుంది. H264 ఎన్‌కోడింగ్ ఎల్లప్పుడూ ప్రారంభించబడుతుంది.", + "UnknownVideoStreamInfo": "వీడియో స్ట్రీమ్ సమాచారం తెలియదు", + "Trickplay": "ట్రిక్‌ప్లే", + "Short": "చిన్నది", + "HearingImpairedShort": "హై/ఎస్డీహెచ్", + "LabelIsHearingImpaired": "వినికిడి లోపం ఉన్నవారికి (ఎస్డీహెచ్)", + "BlockingScan": "బ్లాకింగ్ - క్యూల జనరేషన్, పూర్తయ్యే వరకు స్కాన్‌ను బ్లాక్ చేస్తుంది", + "BehindTheScenes": "తెర వెనుక", + "LabelTrickplayAccel": "హార్డ్‌వేర్ డీకోడింగ్‌ను ప్రారంభించండి", + "TonemappingModeHelp": "టోన్ మ్యాపింగ్ మోడ్‌ను ఎంచుకోండి. మీరు హైలైట్‌లను పూర్తిగా కోల్పోతున్నట్లు అనిపిస్తే, ఆర్‌జిబి మోడ్‌కి మారడానికి ప్రయత్నించండి.", + "PlaybackError.SERVER_ERROR": "సర్వర్ లోపం కారణంగా ప్లేబ్యాక్ విఫలమైంది.", + "ForeignPartsOnly": "బలవంతంగా/విదేశీ భాగాలు మాత్రమే", + "LabelTrickplayAccelEncoding": "హార్డ్‌వేర్ యాక్సిలరేటెడ్ ఎంజెపిఇజి ఎన్‌కోడింగ్‌ను ప్రారంభించండి", + "LabelTrickplayAccelEncodingHelp": "ప్రస్తుతం క్యూఎస్‌వి, విఎ-ఏపీఐ, వీడియోటూల్‌బాక్స్ మరియు ఆర్‌కెఎంపిపి లలో మాత్రమే అందుబాటులో ఉంది, ఈ ఎంపిక ఇతర హార్డ్‌వేర్ త్వరణ పద్ధతులపై ఎటువంటి ప్రభావాన్ని చూపదు.", + "LabelTrickplayKeyFrameOnlyExtraction": "కీ ఫ్రేమ్‌ల నుండి మాత్రమే చిత్రాలను రూపొందించండి", + "LabelTrickplayKeyFrameOnlyExtractionHelp": "తక్కువ ఖచ్చితమైన సమయంతో గణనీయంగా వేగవంతమైన ప్రాసెసింగ్ కోసం మాత్రమే కీ ఫ్రేమ్‌లను సంగ్రహించండి. కాన్ఫిగర్ చేయబడిన హార్డ్‌వేర్ డీకోడర్ ఈ మోడ్‌కు మద్దతు ఇవ్వకపోతే, బదులుగా సాఫ్ట్‌వేర్ డీకోడర్‌ను ఉపయోగిస్తుంది.", + "LabelScanBehaviorHelp": "డిఫాల్ట్ ప్రవర్తన నాన్ బ్లాకింగ్, ఇది ట్రిక్‌ప్లే జనరేషన్ పూర్తయ్యే ముందు లైబ్రరీకి మీడియాను జోడిస్తుంది. బ్లాక్ చేయడం వలన లైబ్రరీకి మీడియా జోడించబడే ముందు ట్రిక్‌ప్లే ఫైల్‌లు జనరేట్ అయ్యేలా చేస్తుంది, కానీ స్కాన్‌లు చాలా ఎక్కువసేపు ఉంటాయి.", + "PriorityBelowNormal": "సాధారణం కంటే తక్కువ", + "PlaybackError.ASS_RENDER_ERROR": "యాస్/ఎస్ఎస్ఏ ఉపశీర్షిక రెండరర్‌లో ఒక ఎర్రర్ ఎదురైంది.", + "PlaybackError.MEDIA_DECODE_ERROR": "మీడియాను డీకోడ్ చేయడంలో లోపం కారణంగా ప్లేబ్యాక్ విఫలమైంది.", + "PlaybackError.MEDIA_NOT_SUPPORTED": "ఈ క్లయింట్ మీడియాకు మద్దతు ఇవ్వనందున ప్లేబ్యాక్ విఫలమైంది.", + "PlaybackError.NETWORK_ERROR": "నెట్‌వర్క్ లోపం కారణంగా ప్లేబ్యాక్ విఫలమైంది.", + "PlaybackError.FATAL_HLS_ERROR": "హెచ్‌ఎల్‌ఎస్ స్ట్రీమ్‌లో ఒక ప్రాణాంతకమైన లోపం ఎదురైంది.", + "LabelVppTonemappingContrast": "వీపీపీ టోన్ మ్యాపింగ్ కాంట్రాస్ట్ గెయిన్", + "InterlacedVideoNotSupported": "ఇంటర్లేస్డ్ వీడియోకు మద్దతు లేదు", + "VideoRangeTypeNotSupported": "వీడియో పరిధి రకానికి మద్దతు లేదు", + "Controls": "నియంత్రణలు", + "AudioChannelsNotSupported": "ఆడియో ఛానెల్‌ల సంఖ్యకు మద్దతు లేదు", + "AudioBitDepthNotSupported": "ఆడియో బిట్ డెప్త్ కు మద్దతు లేదు", + "LabelEncodingFormatOptions": "ఎన్‌కోడింగ్ ఫార్మాట్ ఎంపికలు", + "AudioIsExternal": "ఆడియో స్ట్రీమ్ బాహ్యమైనది", + "VideoBitrateNotSupported": "వీడియో బిట్రేట్‌కు మద్దతు లేదు", + "DeletedScene": "తొలగించబడిన దృశ్యం", + "Trailer": "ట్రైలర్", + "Sample": "నమూనా", + "MediaInfoDoViTitle": "డివి టైటిల్", + "MediaInfoDvVersionMinor": "డివి వెర్షన్ మైనర్", + "MediaInfoDvLevel": "డివి స్థాయి", + "MediaInfoRpuPresentFlag": "డివి ఆర్‌పియు ప్రీసెట్ ఫ్లాగ్", + "LabelTonemappingMode": "టోన్ మ్యాపింగ్ మోడ్", + "Unknown": "తెలియదు", + "AllowAv1Encoding": "AV1 ఫార్మాట్‌లో ఎన్‌కోడింగ్‌ను అనుమతించండి", + "EnableIntelLowPowerH264HwEncoder": "ఇంటెల్ తక్కువ-శక్తి H.264 హార్డ్‌వేర్ ఎన్‌కోడర్‌ను ప్రారంభించండి", + "MediaInfoVideoRangeType": "వీడియో పరిధి రకం", + "MediaInfoDvVersionMajor": "డివి వెర్షన్ మేజర్", + "PriorityHigh": "అధిక", + "PriorityAboveNormal": "సాధారణం కంటే ఎక్కువ", + "PriorityNormal": "సాధారణం", + "LabelVppTonemappingBrightnessHelp": "వీపీపీ టోన్ మ్యాపింగ్‌లో బ్రైట్‌నెస్ గెయిన్‌ను వర్తింపజేయండి. సిఫార్సు చేయబడిన విలువ 16.", + "VideoCodecNotSupported": "వీడియో కోడెక్‌కు మద్దతు లేదు", + "SubtitleCodecNotSupported": "ఉపశీర్షిక కోడెక్‌కు మద్దతు లేదు", + "SecondaryAudioNotSupported": "ద్వితీయ ఆడియో ట్రాక్‌లకు మద్దతు లేదు", + "Scene": "దృశ్యం", + "Interview": "ఇంటర్వ్యూ", + "Unreleased": "ఇంకా విడుదల కాలేదు", + "VideoBitDepthNotSupported": "వీడియో యొక్క బిట్ డెప్త్‌కు మద్దతు లేదు", + "Featurette": "ఫీచర్", + "LabelVppTonemappingContrastHelp": "వీపీపీ టోన్ మ్యాపింగ్‌లో కాంట్రాస్ట్ గెయిన్‌ను వర్తింపజేయండి. సిఫార్సు చేయబడిన విలువ 1.", + "AiTranslated": "AI అనువదించబడింది", + "LabelVppTonemappingBrightness": "వీపీపీ టోన్ మ్యాపింగ్ బ్రైట్‌నెస్ గెయిన్", + "Select": "ఎంచుకోండి", + "VideoCodecTagNotSupported": "వీడియో కోడెక్ ట్యాగ్‌కు మద్దతు లేదు", + "AudioProfileNotSupported": "ఆడియో కోడెక్ ప్రొఫైల్‌కు మద్దతు లేదు", + "DirectPlayError": "డైరెక్ట్ ప్లేబ్యాక్‌ను ప్రారంభించడంలో లోపం ఉంది", + "SelectAll": "అన్నీ ఎంచుకోండి", + "PlaybackError.PLAYER_ERROR": "ప్రాణాంతకమైన ప్లేయర్ లోపం కారణంగా ప్లేబ్యాక్ విఫలమైంది.", + "PlaybackError.NO_MEDIA_ERROR": "ప్లే చేయడానికి చెల్లుబాటు అయ్యే మీడియా సోర్స్ దొరకలేదు.", + "MachineTranslated": "యంత్ర అనువాదం", + "AudioCodecNotSupported": "ఆడియో కోడెక్‌కు మద్దతు లేదు", + "LabelScanBehavior": "స్కాన్ ప్రవర్తన", + "ContainerNotSupported": "కంటైనర్‌కు మద్దతు లేదు", + "AnamorphicVideoNotSupported": "అనమార్ఫిక్ వీడియోకు మద్దతు లేదు", + "ThemeSong": "థీమ్ పాట", + "MediaInfoDvBlSignalCompatibilityId": "డివి బిఎల్ సిగ్నల్ అనుకూలత ఐడి", + "NonBlockingScan": "నాన్ బ్లాకింగ్ - క్యూ జనరేషన్, ఆపై తిరిగి వస్తుంది", + "AudioSampleRateNotSupported": "ఆడియో నమూనా రేటుకు మద్దతు లేదు", + "ContainerBitrateExceedsLimit": "వీడియో బిట్రేట్ పరిమితిని మించిపోయింది", + "PriorityIdle": "ఖాళీగా ఉంది", + "Clip": "క్లిప్", + "PlaybackError.NotAllowed": "ఈ మీడియా ప్లేబ్యాక్ అనుమతించబడదు.", + "UnknownAudioStreamInfo": "ఆడియో స్ట్రీమ్ సమాచారం తెలియదు", + "ThemeVideo": "థీమ్ వీడియో", + "LabelVideoRangeType": "వీడియో పరిధి రకం", + "MediaInfoElPresentFlag": "డివి ఎల్ ప్రీసెట్ ఫ్లాగ్", + "EnableSplashScreen": "స్ప్లాష్ స్క్రీన్ చిత్రాన్ని ప్రారంభించండి", + "RefFramesNotSupported": "రిఫరెన్స్ ఫ్రేమ్‌లకు మద్దతు లేదు", + "LabelEnableGamepad": "గేమ్‌ప్యాడ్‌ను ప్రారంభించండి", + "VideoFramerateNotSupported": "వీడియో ఫ్రేమ్‌రేట్‌కు మద్దతు లేదు" } From 4f3a985bf7531561e1e479859794c0e330859184 Mon Sep 17 00:00:00 2001 From: Christos Mak Date: Sun, 27 Apr 2025 12:24:42 -0400 Subject: [PATCH 103/645] Translated using Weblate (Greek) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/el/ --- src/strings/el.json | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/strings/el.json b/src/strings/el.json index 60eba2914..b72f9df4a 100644 --- a/src/strings/el.json +++ b/src/strings/el.json @@ -864,7 +864,7 @@ "SeriesYearToPresent": "{0} - Εώς σήμερα", "ServerNameIsRestarting": "Ο διακομιστής {0} επανεκκινείται.", "ServerNameIsShuttingDown": "Ο διακομιστής {0} τερματίζεται.", - "ServerRestartNeededAfterPluginInstall": "Θα πρέπει να γίνει επανεκκίνηση του Jellyfin μετά την εγκατάσταση ενός plugin.", + "ServerRestartNeededAfterPluginInstall": "Θα πρέπει να γίνει επανεκκίνηση του Jellyfin μετά την εγκατάσταση του plugin.", "ServerUpdateNeeded": "Αυτός ο server πρέπει να ενημερωθεί. Για να κάνετε λήψη της τελευταίας έκδοσης, επισκεφθείτε την {0}", "Settings": "Ρυθμίσεις", "SettingsSaved": "Οι ρυθμίσεις αποθηκεύτηκαν.", @@ -924,7 +924,7 @@ "ThemeSongs": "Θεματικά τραγούδια", "ThemeVideos": "Θεματικά βίντεο", "TheseSettingsAffectSubtitlesOnThisDevice": "Αυτές οι ρυθμίσεις επηρεάζουν τους υπότιτλους αυτής της συσκευής", - "ThisWizardWillGuideYou": "Αυτός ο οδηγός θα σας καθοδηγήσει στη διαδικασία εγκατάστασης. Για να ξεκινήσετε, παρακαλούμε επιλέξτε τη γλώσσα που προτιμάτε.", + "ThisWizardWillGuideYou": "Αυτός ο οδηγός θα σας βοηθήσει να ολοκληρώσετε την εγκατάσταση. Για να ξεκινήσετε, παρακαλούμε επιλέξτε τη γλώσσα που προτιμάτε.", "Thursday": "Πέμπτη", "TitleHardwareAcceleration": "Επιτάχυνση υλικού", "TitlePlayback": "Αναπαραγωγή", @@ -1975,5 +1975,18 @@ "LimitSegmentLength": "Χρήση μικρότερων τμημάτων HLS", "PreferNonstandardArtistsTag": "Προτίμηση της ετικέτας ARTISTS εάν είναι διαθέσιμη", "Penciller": "Στυλογράφος", - "Native": "Εγγενές" + "Native": "Εγγενές", + "SaveRecordingImages": "Αποθήκευση εικόνων εγγραφής EPG", + "StreamCountExceedsLimit": "Ο αριθμός των ροών υπερβαίνει το όριο", + "RetryWithGlobalSearch": "Επανάληψη με συνολική αναζήτηση", + "SaveLyricsIntoMediaFoldersHelp": "Η αποθήκευση των στίχων μαζί με τα αρχεία ήχου θα επιτρέψει την ευκολότερη διαχείρισή τους.", + "SaveRecordingNFOHelp": "Αποθήκευση μεταδεδομένων από τον πάροχο καταλόγων EPG μαζί με τα μέσα ενημέρωσης.", + "UploadCustomImage": "Ανέβασμα προσαρμοσμένης εικόνας", + "Translator": "Μεταφραστής", + "UseCustomTagDelimiters": "Χρήση προσαρμοσμένου διαχωριστικού ετικέτας", + "Regional": "Περιφερειακή", + "SaveLyricsIntoMediaFolders": "Αποθήκευση στίχων σε φακέλους πολυμέσων", + "SearchForLyrics": "Αναζήτηση στίχων", + "Studio": "Στούντιο", + "SaveRecordingImagesHelp": "Αποθήκευση εικόνων από τον πάροχο καταλόγων EPG μαζί με τα μέσα ενημέρωσης." } From 1a2cb0cf07cb5903e772d6a0e6505424dfeb727e Mon Sep 17 00:00:00 2001 From: lazyphoton Date: Sun, 27 Apr 2025 13:23:40 -0400 Subject: [PATCH 104/645] Translated using Weblate (Spanish (Latin America)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_419/ --- src/strings/es_419.json | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/strings/es_419.json b/src/strings/es_419.json index 4670075b6..d2d237a5a 100644 --- a/src/strings/es_419.json +++ b/src/strings/es_419.json @@ -1213,7 +1213,7 @@ "ConfirmDeleteItems": "Eliminar estos elementos los eliminará tanto del sistema como de tu biblioteca de medios. ¿Estás seguro de querer continuar?", "ConfirmDeleteItem": "Eliminar este elemento lo eliminará tanto del sistema como de tu biblioteca de medios. ¿Estás seguro de querer continuar?", "ConfirmDeleteImage": "¿Eliminar imagen?", - "ConfigureDateAdded": "Configure como los metadatos para 'Fecha de adición' en el Panel de control > Bibliotecas > Configuración de NFO", + "ConfigureDateAdded": "Configure cómo los metadatos para 'Fecha de adición' se determinan en el Panel de control > Bibliotecas > Configuración de NFO", "Composer": "Compositor", "CommunityRating": "Calificación de la comunidad", "ColorTransfer": "Transferencia de color", @@ -1418,7 +1418,7 @@ "LabelQuickConnectCode": "Código de «Conexión rápida»", "LabelKnownProxies": "Proxies conocidos", "LabelIconMaxResHelp": "Resolución maxima de los iconos por medio de la función 'upnp:icon'.", - "EnableAutoCast": "Establecer como Predeterminado", + "EnableAutoCast": "Establecer como predeterminado", "OptionMaxActiveSessionsHelp": "fijar esto en 0 desactivará esta característica.", "OptionMaxActiveSessions": "Determina el número máximo de sesiones que puede tener cada usuario de forma simultnea.", "LabelUserMaxActiveSessions": "Límite de sesiones simultaneas", @@ -1508,7 +1508,7 @@ "DisablePlugin": "Deshabilitar", "EnablePlugin": "Habilitar", "Framerate": "Cuadros por segundo", - "DirectPlayHelp": "El archivo de origen es totalmente compatible con este cliente y la sesión esta recibiendo el archivo sin modificaciones.", + "DirectPlayHelp": "El archivo de origen es totalmente compatible con este cliente y la sesión está recibiendo el archivo sin modificaciones.", "HeaderContinueReading": "Continuar leyendo", "EnableGamepadHelp": "Esperando por entrada desde cualquier controlador conectado. (Requiere: ‘TV’ Modo Pantalla)", "LabelEnableGamepad": "Habilitar Gamepad", @@ -1640,7 +1640,7 @@ "NotificationsMovedMessage": "La funcionalidad de notificaciones se ha movido al plugin de Webhooks.", "MessageRenameMediaFolder": "Renombrar una librería de medios provoca que los metadatos guardados se pierdan, proceder con caución.", "NextChapter": "Proxima escena", - "SelectAudioNormalizationHelp": "Ganancia de pista - ajusta el volumen de cada pista para que la reproducción suene en la misma intensidad. Ganancia de Album - ajusta el volumen de todas las pistas del album, manteniendo el rango dinámico del mismo.", + "SelectAudioNormalizationHelp": "Ganancia de pista - ajusta el volumen de cada pista para que la reproducción suene con la misma intensidad. Ganancia de Album - ajusta el volumen de todas las pistas del album, manteniendo el rango dinámico del mismo.", "LabelAlbumGain": "Ganancia de Album", "LabelSelectAudioNormalization": "Normalización de Audio", "PasswordRequiredForAdmin": "Una contraseña es requerida para las cuentas de administrador.", @@ -1724,5 +1724,25 @@ "PlaybackError.FATAL_HLS_ERROR": "Se encontró un error fatal en la transmisión HLS.", "PreferEmbeddedExtrasTitlesOverFileNames": "Preferir los títulos incrustados en lugar de los nombres de archivo para los extras", "AllowVideoToolboxTonemappingHelp": "El mapeo de tonos acelerado por hardware proporcionado por VideoToolbox. Funciona con la mayoría de los formatos HDR, incluyendo HDR10, HDR10+ y HLG, pero no funciona con Dolby Vision Perfil 5. Tiene una mayor prioridad en comparación con otra implementación en Metal.", - "HeaderMediaSegmentActions": "Acciones de segmentos de medios" + "HeaderMediaSegmentActions": "Acciones de segmentos de medios", + "DisplayLoadError": "Se produjo un error al cargar los datos de configuración de visualización.", + "AutoSubtitleStylingHelp": "Este modo cambiará automáticamente entre los mecanismos nativos y personalizados de estilo de subtítulos según el tipo de dispositivo.", + "Custom": "Personalizado", + "Colorist": "Colorista", + "CopyLogSuccess": "Contenido del registro copiado correctamente.", + "CustomSubtitleStylingHelp": "El estilo de subtítulos funcionará en la mayoría de los dispositivos, pero implica una carga adicional de rendimiento.", + "DisableVbrAudioEncodingHelp": "Evita que el servidor codifique el audio con VBR para este cliente.", + "DlnaMovedMessage": "La funcionalidad DLNA se ha movido a un plugin.", + "DateModified": "Fecha de modificación", + "EnableDtsHelp": "Activa esta opción solo si tu dispositivo es compatible con DTS o está conectado a un receptor de audio compatible, de lo contrario, podría fallar la reproducción.", + "EditLyrics": "Editar letras", + "Anime": "Anime", + "Editor": "Editor", + "DeleteServerConfirmation": "¿Estás seguro de querer eliminar este servidor?", + "EnableHi10p": "Activar perfil H.264 High 10", + "CustomSplashScreenSize": "Las imágenes personalizadas deben tener una relación de aspecto de 16:9 y un tamaño mínimo de 1920x1080.", + "DeleteCustomImage": "Borrar imagen personalizada", + "DeleteEpisode": "Borrar episodio", + "DeleteName": "Borrar {0}", + "EnableDts": "Activar DTS (DCA)" } From 4e2b6290aaa4d2f99e0b190088b1bd0d89ee4ff8 Mon Sep 17 00:00:00 2001 From: yoga sree jagadam Date: Sun, 27 Apr 2025 12:18:04 -0400 Subject: [PATCH 105/645] Translated using Weblate (Telugu) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/te/ --- src/strings/te.json | 129 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 121 insertions(+), 8 deletions(-) diff --git a/src/strings/te.json b/src/strings/te.json index c1e4e1ba1..bff96499c 100644 --- a/src/strings/te.json +++ b/src/strings/te.json @@ -28,7 +28,7 @@ "LabelSelectAudioChannels": "ఛానెల్‌లు", "LabelAllowedAudioChannels": "గరిష్టంగా అనుమతించబడిన ఆడియో ఛానెల్‌లు", "AllowHevcEncoding": "HEVC ఆకృతిలో ఎన్‌కోడింగ్‌ను అనుమతించండి", - "PreferFmp4HlsContainerHelp": "HLS కోసం డిఫాల్ట్ కంటైనర్‌గా fMP4 ను ఉపయోగించడానికి ఇష్టపడండి, మద్దతు ఉన్న పరికరాల్లో HEVC కంటెంట్‌ను ప్రత్యక్షంగా ప్రసారం చేయడం సాధ్యపడుతుంది.", + "PreferFmp4HlsContainerHelp": "హెచ్‌ఎల్‌ఎస్ కోసం ఎఫ్‌ఎంపి4 ను డిఫాల్ట్ కంటైనర్‌గా ఉపయోగించడానికి ఇష్టపడండి, దీని వలన మద్దతు ఉన్న పరికరాల్లో హెచ్‌ఈవీసీ మరియు ఎవి1 కంటెంట్‌ను డైరెక్ట్ స్ట్రీమ్ చేయడం సాధ్యపడుతుంది.", "PreferFmp4HlsContainer": "FMP4-HLS మీడియా కంటైనర్‌కు ప్రాధాన్యత ఇవ్వండి", "LabelSyncPlayInfo": "సమకాలీకరణ సమాచారం", "LabelOriginalMediaInfo": "అసలు మీడియా సమాచారం", @@ -41,17 +41,17 @@ "RemuxHelp2": "పూర్తిగా నష్టపోని మీడియా నాణ్యతతో రీమక్స్ చాలా తక్కువ ప్రాసెసింగ్ శక్తిని ఉపయోగిస్తుంది.", "RemuxHelp1": "మీడియా అననుకూల ఫైల్ కంటైనర్‌లో ఉంది (MKV, AVI, WMV, మొదలైనవి) కానీ వీడియో స్ట్రీమ్ మరియు ఆడియో స్ట్రీమ్ రెండూ పరికరానికి అనుకూలంగా ఉంటాయి. పరికరానికి పంపే ముందు మీడియా ఎగిరిపోకుండా నష్టపోకుండా ప్యాక్ చేయబడుతుంది.", "Remuxing": "రీమక్సింగ్", - "AspectRatioFill": "పూరించండి", - "AspectRatioCover": "కవర్", + "AspectRatioFill": "సాగదీయండి", + "AspectRatioCover": "జూమ్", "EnableFallbackFontHelp": "అనుకూల ప్రత్యామ్నాయ ఫాంట్‌లను ప్రారంభించండి. ఇది తప్పు ఉపశీర్షిక రెండరింగ్ సమస్యను నివారించవచ్చు.", "EnableFallbackFont": "ఫాల్‌బ్యాక్ ఫాంట్‌లను ప్రారంభించండి", - "LabelFallbackFontPathHelp": "ASS / SSA ఉపశీర్షికలను అందించడానికి ఫాల్‌బ్యాక్ ఫాంట్‌లను కలిగి ఉన్న మార్గాన్ని పేర్కొనండి. గరిష్టంగా అనుమతించబడిన మొత్తం ఫాంట్ పరిమాణం 20 MB. తేలికపాటి మరియు వెబ్-స్నేహపూర్వక ఫాంట్ ఫార్మాట్‌లైన వోఫ్ 2 సిఫార్సు చేయబడింది.", + "LabelFallbackFontPathHelp": "ఈ ఫాంట్‌లను కొంతమంది క్లయింట్‌లు సబ్‌టైటిల్‌లను రెండర్ చేయడానికి ఉపయోగిస్తారు. మరిన్ని వివరాల కోసం దయచేసి డాక్యుమెంటేషన్‌ను చూడండి.", "LabelFallbackFontPath": "ఫాల్‌బ్యాక్ ఫాంట్ ఫోల్డర్ మార్గం", "HeaderSelectFallbackFontPathHelp": "ASS / SSA ఉపశీర్షికలను రెండరింగ్ చేయడానికి ఉపయోగించడానికి ఫాల్‌బ్యాక్ ఫాంట్ ఫోల్డర్ యొక్క మార్గాన్ని బ్రౌజ్ చేయండి లేదా నమోదు చేయండి.", "HeaderSelectFallbackFontPath": "ఫాల్‌బ్యాక్ ఫాంట్ ఫోల్డర్ మార్గం ఎంచుకోండి", "Yesterday": "నిన్న", "Yes": "అవును", - "Yadif": "YADIF", + "Yadif": "మరో డీఇంటర్‌లేసింగ్ ఫిల్టర్ (YADIF)", "XmlTvSportsCategoriesHelp": "ఈ వర్గాలతో కూడిన కార్యక్రమాలు క్రీడా కార్యక్రమాలుగా ప్రదర్శించబడతాయి. '|' తో బహుళాలను వేరు చేయండి.", "XmlTvPathHelp": "XMLTV ఫైల్‌కు మార్గం. జెల్లీఫిన్ ఈ ఫైల్‌ను చదివి ఎప్పటికప్పుడు నవీకరణల కోసం తనిఖీ చేస్తుంది. ఫైల్‌ను సృష్టించడం మరియు నవీకరించడం మీ బాధ్యత.", "XmlTvNewsCategoriesHelp": "ఈ వర్గాలతో కూడిన కార్యక్రమాలు వార్తా కార్యక్రమాలుగా ప్రదర్శించబడతాయి. '|' తో బహుళాలను వేరు చేయండి.", @@ -121,7 +121,7 @@ "Thursday": "గురువారం", "ThumbCard": "బొటనవేలు కార్డు", "Thumb": "బొటనవేలు", - "ThisWizardWillGuideYou": "ఈ విజర్డ్ సెటప్ ప్రాసెస్ ద్వారా మీకు మార్గనిర్దేశం చేస్తుంది. ప్రారంభించడానికి, దయచేసి మీకు ఇష్టమైన భాషను ఎంచుకోండి.", + "ThisWizardWillGuideYou": "ఈ విజార్డ్ సెటప్ ప్రక్రియ ద్వారా మీకు మార్గనిర్దేశం చేస్తుంది. ప్రారంభించడానికి, దయచేసి సర్వర్ పేరును నమోదు చేసి, మీకు నచ్చిన భాషను ఎంచుకోండి.", "TheseSettingsAffectSubtitlesOnThisDevice": "ఈ సెట్టింగ్‌లు ఈ పరికరంలోని ఉపశీర్షికలను ప్రభావితం చేస్తాయి", "ThemeVideos": "థీమ్ వీడియోలు", "ThemeSongs": "థీమ్ పాటలు", @@ -175,7 +175,7 @@ "SettingsSaved": "సెట్టింగులు సేవ్ చేయబడ్డాయి.", "Settings": "సెట్టింగులు", "ServerUpdateNeeded": "ఈ సర్వర్ నవీకరించబడాలి. తాజా అప్డేట్ డౌన్‌లోడ్ చేయడానికి, దయచేసి {0}ని సందర్శించండి", - "ServerRestartNeededAfterPluginInstall": "ప్లగ్‌ఇన్‌ను ఇన్‌స్టాల్ చేసిన తర్వాత జెల్లీఫిన్ పున ar ప్రారంభించాలి.", + "ServerRestartNeededAfterPluginInstall": "ప్లగిన్‌ను ఇన్‌స్టాల్ చేసిన తర్వాత జెల్లీఫిన్‌ను రీస్టార్ట్ చేయాల్సి ఉంటుంది.", "ServerNameIsShuttingDown": "{0} వద్ద సర్వర్ షట్ డౌన్ అవుతోంది.", "ServerNameIsRestarting": "{0} వద్ద సర్వర్ పునఃప్రారంభించబడుతోంది.", "SeriesYearToPresent": "{0} - ప్రస్తుతం", @@ -1893,5 +1893,118 @@ "EnableSplashScreen": "స్ప్లాష్ స్క్రీన్ చిత్రాన్ని ప్రారంభించండి", "RefFramesNotSupported": "రిఫరెన్స్ ఫ్రేమ్‌లకు మద్దతు లేదు", "LabelEnableGamepad": "గేమ్‌ప్యాడ్‌ను ప్రారంభించండి", - "VideoFramerateNotSupported": "వీడియో ఫ్రేమ్‌రేట్‌కు మద్దతు లేదు" + "VideoFramerateNotSupported": "వీడియో ఫ్రేమ్‌రేట్‌కు మద్దతు లేదు", + "PlaybackError.RateLimitExceeded": "రేట్ పరిమితుల కారణంగా ఈ సమయంలో ఈ మీడియాను ప్లే చేయడం సాధ్యం కాదు.", + "PlaylistError.CreateFailed": "ప్లేజాబితాను సృష్టించడంలో లోపం ఏర్పడింది", + "PlaylistError.UpdateFailed": "ప్లేజాబితాను నవీకరించడంలో లోపం ఏర్పడింది", + "PluginEnableError": "ప్లగిన్‌ను ప్రారంభించేటప్పుడు లోపం సంభవించింది.", + "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "ఎక్స్‌ట్రాలు తరచుగా పేరెంట్ లాగానే ఎంబెడెడ్ పేరును కలిగి ఉంటాయి, ఏమైనప్పటికీ వాటి కోసం ఎంబెడెడ్ శీర్షికలను ఉపయోగించడానికి దీన్ని తనిఖీ చేయండి.", + "PreferNonstandardArtistsTagHelp": "అందుబాటులో ఉన్నప్పుడు ARTIST ట్యాగ్‌కు బదులుగా ప్రామాణికం కాని ARTISTS ట్యాగ్‌ను ఉపయోగించండి.", + "AllowEmbeddedSubtitlesHelp": "మీడియా కంటైనర్లలో ప్యాక్ చేయబడిన ఉపశీర్షికలను నిలిపివేయండి. పూర్తి లైబ్రరీ రిఫ్రెష్ అవసరం.", + "AllowEmbeddedSubtitles": "వివిధ రకాల ఎంబెడెడ్ ఉపశీర్షికలను నిలిపివేయండి", + "AllowEmbeddedSubtitlesAllowAllOption": "అన్నీ అనుమతించు", + "RememberSubtitleSelections": "మునుపటి అంశం ఆధారంగా ఉపశీర్షిక ట్రాక్‌ను సెట్ చేయండి", + "PreviewLyrics": "సాహిత్యాన్ని పరిదృశ్యం చేయండి", + "RetryWithGlobalSearch": "గ్లోబల్ శోధనతో మళ్ళీ ప్రయత్నించండి", + "PreviousChapter": "మునుపటి అధ్యాయం", + "ReleaseGroup": "విడుదల సమూహం", + "RememberAudioSelections": "మునుపటి అంశం ఆధారంగా ఆడియో ట్రాక్‌ను సెట్ చేయండి", + "Reset": "తిరిగి నిర్దారించు", + "RememberAudioSelectionsHelp": "ఆడియో ట్రాక్‌ను చివరి వీడియోకు దగ్గరగా ఉండేలా సెట్ చేయడానికి ప్రయత్నించండి.", + "RememberSubtitleSelectionsHelp": "చివరి వీడియోకు దగ్గరగా ఉన్న సబ్‌టైటిల్ ట్రాక్‌ను సెట్ చేయడానికి ప్రయత్నించండి.", + "RenderPgsSubtitleHelp": "క్లయింట్ బర్న్డ్ ఇన్ సబ్‌టైటిల్స్‌ని ఉపయోగించడానికి బదులుగా PGS సబ్‌టైటిల్స్‌ని రెండర్ చేయాలా వద్దా అని నిర్ణయించండి. ఇది క్లయింట్-సైడ్ రెండరింగ్ పనితీరుకు బదులుగా సర్వర్-సైడ్ ట్రాన్స్‌కోడింగ్‌ను నివారించవచ్చు.", + "SaveLyricsIntoMediaFoldersHelp": "ఆడియో ఫైళ్ల పక్కన సాహిత్యాన్ని నిల్వ చేయడం వల్ల వాటిని మరింత సులభంగా నిర్వహించవచ్చు.", + "SavePassword": "పాస్‌వర్డ్‌ను సేవ్ చేయండి", + "SaveRecordingNFO": "ఎన్ఎఫ్ఓలో రికార్డింగ్ ఇపిజి మెటాడేటాను సేవ్ చేయండి", + "SaveRecordingNFOHelp": "సైడ్ మీడియాతో పాటు ఇపిజి లిస్టింగ్ ప్రొవైడర్ నుండి మెటాడేటాను సేవ్ చేయండి.", + "SaveRecordingImages": "రికార్డింగ్ ఇపిజి చిత్రాలను సేవ్ చేయండి", + "SaveRecordingImagesHelp": "సైడ్ మీడియాతో పాటు ఇపిజి లిస్టింగ్ ప్రొవైడర్ నుండి చిత్రాలను సేవ్ చేయండి.", + "StoryArc": "స్టోరీ ఆర్క్", + "SelectPreferredTranscodeVideoCodecHelp": "ట్రాన్స్‌కోడ్ చేయడానికి ప్రాధాన్య వీడియో కోడెక్‌ను ఎంచుకోండి. ప్రాధాన్య కోడెక్‌కు మద్దతు లేకపోతే, సర్వర్ తదుపరి అందుబాటులో ఉన్న ఉత్తమ కోడెక్‌ను ఉపయోగిస్తుంది.", + "SelectPreferredTranscodeVideoAudioCodecHelp": "వీడియో కంటెంట్ కోసం ట్రాన్స్‌కోడ్ చేయడానికి ప్రాధాన్య ఆడియో కోడెక్‌ను ఎంచుకోండి. ప్రాధాన్య కోడెక్‌కు మద్దతు లేకపోతే, సర్వర్ తదుపరి అందుబాటులో ఉన్న ఉత్తమ కోడెక్‌ను ఉపయోగిస్తుంది.", + "ShowParentImages": "సిరీస్ చిత్రాలను చూపించు", + "StreamCountExceedsLimit": "స్ట్రీమ్‌ల సంఖ్య పరిమితిని మించిపోయింది", + "SubtitleLightGray": "లేత బూడిద రంగు", + "SubtitleGreen": "ఆకుపచ్చ", + "Track": "ట్రాక్", + "TypeOptionPluralMusicArtist": "సంగీత కళాకారులు", + "TypeOptionPluralAudio": "ఆడియోలు", + "UnknownError": "తెలియని లోపం సంభవించింది.", + "LabelImageInterval": "చిత్ర విరామం", + "UseEpisodeImagesInNextUp": "'తదుపరిది' మరియు 'చూడటం కొనసాగించు' విభాగాలలో ఎపిసోడ్ చిత్రాలను ఉపయోగించండి", + "LabelProcessPriority": "ప్రక్రియ ప్రాధాన్యత", + "LabelWidthResolutionsHelp": "ట్రిక్‌ప్లే చిత్రాలు రూపొందించబడే వెడల్పుల (px) కామాతో వేరు చేయబడిన జాబితా. అన్ని చిత్రాలు మూలానికి అనులోమానుపాతంలో రూపొందించబడాలి, కాబట్టి 16:9 వీడియోలో 320 వెడల్పు 320x180 చుట్టూ ముగుస్తుంది.", + "PluginUninstallError": "ప్లగిన్‌ను అన్‌ఇన్‌స్టాల్ చేస్తున్నప్పుడు లోపం సంభవించింది.", + "LabelProcessPriorityHelp": "దీన్ని తక్కువగా లేదా ఎక్కువగా సెట్ చేయడం వలన సీపీయూ ఇతర ప్రక్రియలకు సంబంధించి ffmpeg ట్రిక్‌ప్లే జనరేషన్ ప్రాసెస్‌కు ఎలా ప్రాధాన్యత ఇస్తుందో నిర్ణయిస్తుంది. ట్రిక్‌ప్లే చిత్రాలను ఉత్పత్తి చేస్తున్నప్పుడు మీరు మందగమనాన్ని గమనించినప్పటికీ వాటి జనరేషన్‌ను పూర్తిగా ఆపకూడదనుకుంటే, థ్రెడ్ కౌంట్‌తో పాటు దీన్ని తగ్గించడానికి ప్రయత్నించండి.", + "LabelJpegQuality": "జెపిఇజి నాణ్యత", + "LabelTileWidthHelp": "X దిశలో ప్రతి టైల్‌కు గరిష్ట సంఖ్యలో చిత్రాలు.", + "LabelTrickplayThreadsHelp": "ffmpeg యొక్క '-థ్రెడ్‌లు' ఆర్గ్యుమెంట్‌కు పాస్ చేయాల్సిన థ్రెడ్‌ల సంఖ్య.", + "LabelExtractTrickplayDuringLibraryScanHelp": "లైబ్రరీ స్కాన్ సమయంలో వీడియోలు దిగుమతి అయినప్పుడు ట్రిక్‌ప్లే చిత్రాలను రూపొందించండి. లేకపోతే, ట్రిక్‌ప్లే చిత్రాల షెడ్యూల్ చేయబడిన పని సమయంలో అవి సంగ్రహించబడతాయి. జనరేషన్‌ను నాన్-బ్లాకింగ్‌కు సెట్ చేస్తే లైబ్రరీ స్కాన్ పూర్తి కావడానికి పట్టే సమయాన్ని ఇది ప్రభావితం చేయదు.", + "SettingsPageLoadError": "సెట్టింగ్‌ల పేజీని లోడ్ చేయడంలో విఫలమైంది", + "ReadInputAtNativeFramerate": "నేటివ్ ఫ్రేమ్ రేట్‌లో ఇన్‌పుట్‌ను చదవండి", + "ReadInputAtNativeFramerateHelp": "ఈ ఎంపికను ప్రారంభించడం వలన కొన్ని సమస్యలు పరిష్కరించబడవచ్చు, ఉదా. ప్రత్యక్ష ప్రసారాలు ముందుగానే ఆగిపోవడం.", + "PlaybackErrorPlaceHolder": "ఇది జెల్లీఫిన్ ప్లే చేయలేని భౌతిక మీడియా కోసం ఒక ప్లేస్‌హోల్డర్. ప్లే చేయడానికి డిస్క్‌ను చొప్పించండి.", + "PreferNonstandardArtistsTag": "అందుబాటులో ఉంటే ARTISTS ట్యాగ్‌కు ప్రాధాన్యత ఇవ్వండి", + "TypeOptionPluralEpisode": "ఎపిసోడ్‌లు", + "TextSent": "టెక్స్ట్ పంపబడింది.", + "LabelExtractTrickplayDuringLibraryScan": "లైబ్రరీ స్కాన్ సమయంలో ట్రిక్‌ప్లే చిత్రాలను సంగ్రహించండి", + "Studio": "స్టూడియో", + "SubtitleBlack": "నలుపు", + "SaveLyricsIntoMediaFolders": "సాహిత్యాన్ని మీడియా ఫోల్డర్లలో సేవ్ చేయండి", + "ScreenResolution": "స్క్రీన్ స్పష్టత", + "SubtitleRed": "ఎరుపు", + "SubtitleGray": "బూడిద రంగు", + "TypeOptionPluralVideo": "వీడియోలు", + "TypeOptionPluralSeries": "టీవీ కార్యక్రమాలు", + "LabelTileHeight": "టైల్ ఎత్తు", + "SubtitleCyan": "నీలి నీలం", + "SubtitleBlue": "నీలం", + "LabelJpegQualityHelp": "ట్రిక్‌ప్లే చిత్రాల కోసం జెపిఇజి కంప్రెషన్ నాణ్యత.", + "Print": "ప్రింట్", + "PlaylistPublicDescription": "ఈ ప్లేజాబితాను లాగిన్ అయిన ఏ యూజర్ అయినా వీక్షించడానికి అనుమతించండి.", + "PlaylistError.AddFailed": "ప్లేజాబితాకు జోడించడంలో లోపం", + "UploadCustomImage": "కస్టమ్ ఇమేజ్‌ను అప్‌లోడ్ చేయండి", + "SubtitleMagenta": "మెజెంటా", + "UseEpisodeImagesInNextUpHelp": "'తదుపరిది' మరియు 'చూడటం కొనసాగించు' విభాగాలు షో యొక్క ప్రాథమిక థంబ్‌నెయిల్‌కు బదులుగా ఎపిసోడ్ చిత్రాలను థంబ్‌నెయిల్‌లుగా ఉపయోగిస్తాయి.", + "PleaseConfirmRepositoryInstallation": "పైన పేర్కొన్నది చదివారని మరియు ప్లగిన్ రిపోజిటరీ ఇన్‌స్టాలేషన్‌తో కొనసాగాలనుకుంటున్నారని నిర్ధారించడానికి దయచేసి సరే క్లిక్ చేయండి.", + "PluginDisableError": "ప్లగిన్‌ను నిలిపివేస్తున్నప్పుడు లోపం సంభవించింది.", + "StereoDownmixAlgorithmHelp": "మల్టీ-ఛానల్ ఆడియోను స్టీరియోకు డౌన్‌మిక్స్ చేయడానికి ఉపయోగించే అల్గోరిథం.", + "TypeOptionPluralBoxSet": "బాక్స్ సెట్లు", + "Translator": "అనువదించు", + "PlaylistPublic": "పబ్లిక్ యాక్సెస్‌ను అనుమతించండి", + "PluginLoadConfigError": "ప్లగిన్ ఆకృతీకరణ పేజీలను పొందుతున్నప్పుడు లోపం సంభవించింది.", + "Regional": "ప్రాంతీయ", + "PreferEmbeddedExtrasTitlesOverFileNames": "అదనపు లక్షణాల కోసం ఫైల్ పేర్ల కంటే ఎంబెడెడ్ శీర్షికలను ఇష్టపడండి", + "SubtitleWhite": "తెలుపు", + "SubtitleYellow": "పసుపు", + "ResolutionMatchSource": "మూలాన్ని సరిపోల్చండి", + "UserMenu": "వినియోగదారు మెనూ", + "SecondarySubtitles": "ద్వితీయ ఉపశీర్షికలు", + "UseCustomTagDelimiters": "కస్టమ్ ట్యాగ్ డీలిమిటర్‌ని ఉపయోగించండి", + "UseCustomTagDelimitersHelp": "కస్టమ్ అక్షరాలతో కళాకారుడు/శైలి ట్యాగ్‌లను విభజించండి.", + "LabelWidthResolutions": "వెడల్పు రిజల్యూషన్‌లు", + "LabelQscale": "క్యూస్కేల్", + "ExtractTrickplayImagesHelp": "ట్రిక్‌ప్లే చిత్రాలు చాప్టర్ చిత్రాల మాదిరిగానే ఉంటాయి, కానీ అవి కంటెంట్ మొత్తం పొడవునా విస్తరించి ఉంటాయి మరియు వీడియోలను స్క్రబ్ చేస్తున్నప్పుడు ప్రివ్యూను చూపించడానికి ఉపయోగించబడతాయి.", + "SearchForLyrics": "సాహిత్యం కోసం శోధించండి", + "LabelTileWidth": "టైల్ వెడల్పు", + "SearchResultsEmpty": "క్షమించండి! \"{0}\" కోసం ఫలితాలు కనుగొనబడలేదు", + "LogLoadFailure": "లాగ్ ఫైల్‌ను లోడ్ చేయడంలో విఫలమైంది. ఇది ఇప్పటికీ చురుకుగా వ్రాయబడి ఉండవచ్చు.", + "LabelTileHeightHelp": "Y దిశలో ప్రతి టైల్‌కు గరిష్ట సంఖ్యలో చిత్రాలు.", + "LabelQscaleHelp": "ffmpeg ద్వారా చిత్రాల అవుట్‌పుట్ యొక్క నాణ్యత స్కేల్, 2 అత్యధిక నాణ్యత మరియు 31 అత్యల్ప నాణ్యత.", + "LabelTrickplayThreads": "FFmpeg థ్రెడ్‌లు", + "RenderPgsSubtitle": "ప్రయోగాత్మక పీజీఎస్ ఉపశీర్షిక రెండరింగ్", + "LabelImageIntervalHelp": "ప్రతి కొత్త ట్రిక్‌ప్లే చిత్రం మధ్య సమయ విరామం (ms).", + "Typewriter": "టైప్‌రైటర్", + "OptionExtractTrickplayImage": "ట్రిక్‌ప్లే ఇమేజ్ సంగ్రహణను ప్రారంభించండి", + "AllowEmbeddedSubtitlesAllowImageOption": "చిత్రాన్ని అనుమతించు", + "AllowEmbeddedSubtitlesAllowTextOption": "టెక్స్ట్‌ను అనుమతించు", + "ViewLyrics": "సాహిత్యాన్ని వీక్షించండి", + "Retry": "మళ్ళీ ప్రయత్నించండి", + "Remixer": "రీమిక్సర్", + "Production": "ఉత్పత్తి", + "ReplaceTrickplayImages": "ఇప్పటికే ఉన్న ట్రిక్‌ప్లే చిత్రాలను భర్తీ చేయండి", + "TypeOptionPluralMusicAlbum": "సంగీత ఆల్బమ్‌లు", + "LabelTrackGain": "ట్రాక్ లాభం", + "AllowEmbeddedSubtitlesAllowNoneOption": "ఎవరినీ అనుమతించవద్దు", + "PluginLoadRepoError": "రిపోజిటరీ నుండి ప్లగిన్ వివరాలను పొందుతున్నప్పుడు లోపం సంభవించింది." } From f78ac5b88874db9093ef24beb4284fd5c5375513 Mon Sep 17 00:00:00 2001 From: Sami Heino Date: Mon, 28 Apr 2025 04:07:37 -0400 Subject: [PATCH 106/645] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index 4c4a0d1b1..99d3b2429 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -243,7 +243,7 @@ "Album": "Albumi", "Played": "Toistetut", "PlayFromBeginning": "Toista alusta", - "PlayNext": "Toista seuraava", + "PlayNext": "Toista seuraavaksi", "Play": "Toista", "PinCodeResetConfirmation": "Haluatko varmasti poistaa Helppo PIN -koodin?", "People": "Ihmiset", From ce41095ba97b92732d5a65004b6a1e9b35f750fb Mon Sep 17 00:00:00 2001 From: besart-hajdari Date: Mon, 28 Apr 2025 04:53:26 -0400 Subject: [PATCH 107/645] Translated using Weblate (Albanian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sq/ --- src/strings/sq.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/sq.json b/src/strings/sq.json index 0a33f7a97..79de1cc9b 100644 --- a/src/strings/sq.json +++ b/src/strings/sq.json @@ -584,5 +584,7 @@ "HeaderSyncPlaySelectGroup": "Bashkohuni një grupi", "DirectStreamHelp2": "Energjia e konsumuar nga transmetimi i drejtpërdrejtë zakonisht varet nga profili i audios. Vetëm transmetimi i videove është pa humbje.", "EnableDetailsBannerHelp": "Shfaqni një imazh baneri në krye të faqes së artikullit.", - "AirPlay": "AirPlay" + "AirPlay": "AirPlay", + "AllowContentWithTagsHelp": "Shfaq vetëm median që ka të paktën një nga etiketat e specifikuara.", + "AllowSubtitleManagement": "Lejoje këtë përdorues të redaktojë titrat" } From 01c4cacd38565c842b52d0f464dd8f4373bac23e Mon Sep 17 00:00:00 2001 From: Francesco Lo Faro Date: Mon, 28 Apr 2025 12:13:37 -0400 Subject: [PATCH 108/645] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/it.json b/src/strings/it.json index c841f1ed2..04d6d9672 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -2022,5 +2022,9 @@ "ImageUploadCancelled": "Caricamento immagine annullato", "ImageUploadFailed": "Caricamento immagine non riuscito", "ImageDeleteFailed": "Eliminazione immagine non riuscita", - "UploadCustomImage": "Carica immagine personalizzata" + "UploadCustomImage": "Carica immagine personalizzata", + "LabelGroupShowsIntoCollectionsHelp": "Le serie in una collezione verranno mostrate come un elemento di gruppo quando vengono mostrate le liste di serie.", + "LimitSegmentLength": "Usa segmenti HLS più corti", + "LimitSegmentLengthHelp": "Abilitare questa opzione può aiutare ad evitare che il lettore HLS si blocchi mentre si ricerca su alcuni dispositivi, come le TV webOS.", + "LabelGroupShowsIntoCollections": "Raggruppa le serie in collezioni" } From c31dbc21c07c6f9414242760e57d6bc80a5db9b4 Mon Sep 17 00:00:00 2001 From: Dan Tsivinsky Date: Mon, 28 Apr 2025 11:19:42 -0400 Subject: [PATCH 109/645] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index 6be97fb0d..c6b60fb74 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -2024,5 +2024,7 @@ "LabelGroupShowsIntoCollections": "Группировать сериалы в коллекции", "LabelGroupShowsIntoCollectionsHelp": "Сериалы в коллекции будут отображаться как один элемент при отображении списка сериалов.", "ReadInputAtNativeFramerate": "Вычитывать данные в исходной частоте кадров", - "ReadInputAtNativeFramerateHelp": "Включение этой опции может исправить некоторые проблемы, например, остановку прямых трансляций." + "ReadInputAtNativeFramerateHelp": "Включение этой опции может исправить некоторые проблемы, например, остановку прямых трансляций.", + "LimitSegmentLength": "Используйте короткие HLS сегменты", + "LimitSegmentLengthHelp": "Включение этой опции может помочь предотвратить зависание HLS-плеера во время перемотки на некоторых устройствах, например, на телевизорах с webOS." } From 412a141323fa7410c012b905c9700be2e3a9263e Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Mon, 28 Apr 2025 15:31:45 -0400 Subject: [PATCH 110/645] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index 96d7361cd..346af3195 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -1674,7 +1674,7 @@ "Scene": "Cena", "Interview": "Entrevista", "DeletedScene": "Cenas removidas", - "BehindTheScenes": "Nos bastidores", + "BehindTheScenes": "Bastidores", "DownloadAll": "Transferir tudo", "MessageNoItemsAvailable": "Nenhum item disponível atualmente.", "MessageNoFavoritesAvailable": "Não existem favoritos atualmente disponíveis.", From f9f1f11406f9e0444874c6b1dd97815e3ac012d8 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Mon, 28 Apr 2025 15:16:18 -0400 Subject: [PATCH 111/645] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index afc97ac23..450b89890 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1342,7 +1342,7 @@ "Engineer": "Engenheiro de som", "DisableCustomCss": "Desativar código CSS personalizado fornecido pelo servidor", "Console": "Consola", - "Conductor": "Condutor", + "Conductor": "Maestro", "Casual": "Casual", "ButtonBackspace": "Retrocesso", "GoogleCastUnsupported": "Google Cast não compatível", @@ -1729,7 +1729,7 @@ "DirectPlayError": "Ocorreu um erro ao iniciar a reprodução direta", "Short": "Curto", "Clip": "Clipe", - "BehindTheScenes": "Por trás das cenas", + "BehindTheScenes": "Bastidores", "DeletedScene": "Cena deletada", "Interview": "Entrevista", "LabelVideoRangeType": "Tipo de gama de vídeo", @@ -1741,7 +1741,7 @@ "AllowAv1Encoding": "Permitir codificação no formato AV1", "AiTranslated": "IA traduzida", "MachineTranslated": "Traduzido automaticamente", - "AnamorphicVideoNotSupported": "O vídeo anamórfico não é compatível", + "AnamorphicVideoNotSupported": "Vídeos anamórficos não são suportados", "InterlacedVideoNotSupported": "Vídeo entrelaçado não é compatível", "EnableEnhancedNvdecDecoderHelp": "Implementação NVDEC melhorada, desativa esta opção e utiliza CUVID no caso de encontrares erros de descodificação.", "AudioChannelsNotSupported": "O número de canais de áudio não é suportado", From f4e6a9d90e155697be7322b3336bcf14a7514903 Mon Sep 17 00:00:00 2001 From: Ahmed Moussa Date: Tue, 29 Apr 2025 02:29:51 -0400 Subject: [PATCH 112/645] Translated using Weblate (Arabic) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ar/ --- src/strings/ar.json | 127 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 123 insertions(+), 4 deletions(-) diff --git a/src/strings/ar.json b/src/strings/ar.json index 3608e3499..2c884445e 100644 --- a/src/strings/ar.json +++ b/src/strings/ar.json @@ -1129,7 +1129,7 @@ "PackageInstallFailed": "{0} (الإصدار {1}) فشل تثبيت.", "PackageInstallCompleted": "اكتمل تثبيت {0} (الإصدار {1}).", "PackageInstallCancelled": "تم إلغاء تثبيت {0} (الإصدار {1}).", - "Overview": "ملخص", + "Overview": "نظرة عامة", "OptionRequirePerfectSubtitleMatchHelp": "سيؤدي طلب التطابق التام إلى تصفية الترجمات المصاحبة لتشمل فقط تلك التي تم اختبارها والتحقق منها بملف الفيديو الخاص بك بالضبط. سيؤدي إلغاء تحديد هذا إلى زيادة احتمالية تنزيل الترجمات المصاحبة ، لكنني سأزيد من فرص نص الترجمة الخاطئ أو غير الصحيح.", "OptionRegex": "ريجكس", "OptionRandom": "عشوائي", @@ -1433,7 +1433,7 @@ "LabelPersonRoleHelp": "مثال: سائق شاحنة الآيس كريم", "LabelPersonRole": "دور", "LabelPasswordResetProvider": "مزود إعادة تعيين كلمة المرور", - "LabelOverview": "ملخص", + "LabelOverview": "نظرة عامة", "LabelOriginalTitle": "العنوان الأصلي", "LabelOriginalName": "الاسم الاصلي", "LabelOriginalAspectRatio": "النسبة البعدينية الأصلية", @@ -1596,7 +1596,7 @@ "LabelTonemappingThresholdHelp": "يتم ضبط معلمات خوارزمية تعيين النغمة لكل مشهد. ويتم استخدام عتبة لاكتشاف ما إذا كان المشهد قد تغير أم لا. إذا تجاوزت المسافة بين متوسط سطوع الإطار الحالي ومتوسط التشغيل الحالي قيمة عتبة ، فسنقوم بإعادة حساب متوسط سطوع المشهد وذروة السطوع. القيم الموصي بها والافتراضية هي 0.8 و 0.2.", "LabelTonemappingThreshold": "حد تعيين النغمة", "LabelTonemappingRange": "نطاق تعيين النغمة", - "LabelTonemappingPeakHelp": "تجاوز الإشارة / الذروة الاسمية / المرجعية بهذه القيمة. يكون مفيدًا عندما تكون معلومات الذروة المضمنة في البيانات الوصفية للعرض غير موثوقة أو عند تعيين درجة اللون من نطاق أقل إلى نطاق أعلى. القيم الموصي بها والافتراضية هي 100 و 0.", + "LabelTonemappingPeakHelp": "تجاوز قيمة البيانات الوصفية المضمنة لإشارة الإدخال بقيمة الذروة هذه بدلاً من ذلك. القيمة الافتراضية هي 100 (1000nit).", "LabelTonemappingPeak": "ذروة رسم الخرائط", "Cursive": "متّصل", "LabelHardwareEncodingOptions": "خيارات ترميز الأجهزة", @@ -1858,5 +1858,124 @@ "LabelLevel": "المستوى", "LabelDropLyricsHere": "ضع الكلمات هنا, أو إضغط على تفصح.", "LabelInstalled": "مثبت", - "LabelQsvDevice": "جهاز QSV" + "LabelQsvDevice": "جهاز QSV", + "CustomSplashScreenSize": "يجب أن تكون الصور المخصصة بنسبة عرض إلى ارتفاع 16 × 9 بحجم لا يقل عن 1920 × 1080.", + "ImageUploadFailed": "فشل تحميل الصورة", + "LabelDelimiterWhitelistHelp": "العناصر التي سيتم استبعادها من تقسيم العلامات. عنصر واحد لكل سطر.", + "LabelFallbackMaxStreamingBitrate": "معدل البت الأقصى للبث الاحتياطي (ميغابت في الثانية)", + "LabelMediaSegmentProviders": "مزودو مقاطع الوسائط", + "LabelMediaSegmentsType": "{0} مقطع/مقاطع", + "LabelParallelImageEncodingLimitHelp": "الحد الأقصى لعدد ترميزات الصور المسموح بتشغيلها بالتوازي. سيؤدي ترك هذا فارغًا إلى اختيار حد يستند إلى عدد النواة الأساسية لأنظمتك.", + "LabelQsvDeviceHelp": "حدد الجهاز الخاص ب Intel QSV على نظام متعدد وحدات معالجة الرسومات. في نظام Linux، هذا هو عقدة التصيير، على سبيل المثال، /dev/dri/renderD128. في نظام ويندوز، هذا هو فهرس الجهاز بدءًا من 0. اتركه فارغًا إلا إذا كنت تعرف ما تفعله.", + "LabelScreensaverTime": "مهلة شاشة التوقف", + "LabelSaveTrickplayLocally": "حفظ صور المعاينة السريعة بجوار الوسائط", + "PlaylistError.CreateFailed": "خطأ في إنشاء قائمة التشغيل", + "PlaylistError.UpdateFailed": "خطأ أثناء تحديث قائمة التشغيل", + "LabelScreensaverTimeHelp": "مقدار الوقت بالثواني من عدم النشاط المطلوب لبدء تشغيل شاشة التوقف.", + "LogLevel.Debug": "تنقيح", + "LibraryScanFanoutConcurrencyHelp": "الحد الأقصى لعدد المهام المتوازية أثناء عمليات مسح المكتبة. سيؤدي ترك هذا الرقم فارغاً إلى اختيار حد استناداً إلى عدد النواة في أنظمتك. تحذير: قد يتسبب تعيين هذا الرقم عالٍ جداً في حدوث مشاكل مع أنظمة ملفات الشبكة؛ إذا واجهت مشاكل قم بتخفيض هذا الرقم.", + "LimitSegmentLengthHelp": "قد يساعد تمكين هذا الخيار في منع تعليق مشغل HLS أثناء البحث على أجهزة معينة، مثل أجهزة تلفاز webOS.", + "PlaybackError.ASS_RENDER_ERROR": "تمت مواجهة خطأ في عارض الترجمة ASS/SSA.", + "LimitSupportedVideoResolution": "تحديد الحد الأقصى لدقة الفيديو المدعومة", + "SelectPreferredTranscodeVideoCodecHelp": "حدد برنامج ترميز الفيديو المفضل لتحويل الترميز إليه. إذا كان برنامج الترميز المفضل غير مدعوم، سيستخدم الخادم أفضل برنامج ترميز متاح تالياً.", + "ListView": "عرض القائمة", + "NativeSubtitleStylingHelp": "لن يعمل تصميم الترجمة على بعض الأجهزة. ومع ذلك، فإنه لا يترافق معه أي عبء على الأداء.", + "PasswordMissingSaveError": "لا يمكن أن تكون كلمة المرور الجديدة فارغة.", + "PlaylistPublicDescription": "السماح بعرض قائمة التشغيل هذه من قبل أي مستخدم قام بتسجيل الدخول.", + "PleaseConfirmRepositoryInstallation": "يُرجى النقر فوق موافق لتأكيد أنك قرأت ما ورد أعلاه وترغب في متابعة تثبيت المكونات الإضافات.", + "PluginLoadConfigError": "حدث خطأ أثناء الحصول على صفحات تكوين المكون الإضافي.", + "PreferEmbeddedExtrasTitlesOverFileNames": "تفضيل العناوين المضمنة على أسماء الملفات للإضافات", + "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "غالبًا ما يكون للإضافات نفس الاسم المضمن مثل الأصل، تحقق من ذلك لاستخدام العناوين المضمنة لها على أي حال.", + "PreviewLyrics": "معاينة كلمات الأغاني", + "ReadInputAtNativeFramerate": "قراءة المدخلات بمعدل الإطارات الأصلي", + "RenderPgsSubtitleHelp": "تحديد ما إذا كان يجب على العميل عرض ترجمات PGS بدلاً من استخدام الترجمات المنسوخة في الترجمة. يمكن أن يؤدي ذلك إلى تجنب تحويل الترميز من جانب الخادم مقابل أداء العرض من جانب العميل.", + "SaveRecordingNFOHelp": "حفظ البيانات الوصفية من مزود قوائم EPG إلى جانب الوسائط.", + "SaveLyricsIntoMediaFolders": "حفظ كلمات الأغاني في مجلدات الوسائط", + "SaveLyricsIntoMediaFoldersHelp": "سيسمح تخزين كلمات الأغاني بجوار الملفات الصوتية بإدارتها بسهولة أكبر.", + "SaveRecordingNFO": "حفظ البيانات الوصفية لتسجيل EPG في ملف NFO", + "NonBlockingScan": "عدم الحجب - التوليد في قائمة الانتظار، ثم الإرجاع", + "LabelScanBehaviorHelp": "السلوك الافتراضي هو عدم الحجب، والذي سيضيف الوسائط إلى المكتبة قبل أن يتم إنشاء صور المعاينة السريعة. سيضمن الحظر إنشاء صور المعاينة السريعة قبل إضافة الوسائط إلى المكتبة، ولكنه سيجعل عمليات المسح أطول بكثير.", + "LabelProcessPriorityHelp": "سيحدد ضبط هذا الأمر على مستوى أقل أو أعلى كيفية إعطاء وحدة المعالجة المركزية الأولوية لعملية توليد صور المعاينة السريعة ffmpeg بالنسبة للعمليات الأخرى. إذا لاحظتَ تباطؤًا أثناء توليد صور المعاينة السريعة ولكنك لا تريد إيقاف توليدها بالكامل، حاول خفض هذا الأمر وكذلك عدد خيوط وحدة المعالجة المركزية.", + "LabelImageIntervalHelp": "الفاصل الزمني (مللي ثانية) بين كل صور معاينة سريعة جديدة.", + "LabelWidthResolutionsHelp": "قائمة مفصولة بفاصلة للعرض (بكسل) التي سيتم إنشاء صور المعاينة السريعة بها. يجب أن يتم توليد جميع الصور بشكل متناسب مع المصدر، لذا فإن عرض 320 على فيديو 16:9 ينتهي بعرض 320 × 180 تقريبًا.", + "LabelTileHeight": "ارتفاع القالب", + "LabelTrickplayThreads": "خيوط FFmpeg", + "LabelTrickplayThreadsHelp": "عدد الخيوط التي يجب تمريرها إلى وسيطة ”threads-“ في ffmpeg.", + "OptionExtractTrickplayImage": "تمكين استخراج صور المعاينة السريعة", + "LabelGroupShowsIntoCollectionsHelp": "سيتم عرض العروض التليفزيونية كعنصر واحد مجمّع عند عرض قوائم العروض.", + "LabelGroupShowsIntoCollections": "تجميع البرامج التلفزيونية في مجموعات", + "LabelCustomTagDelimitersHelp": "الأحرف التي سيتم التعامل معها كمحددات لفصل العلامات.", + "LabelDelimiterWhitelist": "القائمة البيضاء للمحددات", + "LabelRepository": "مستودع", + "LabelSubtitleStyling": "تنسيق الترجمة النصية", + "MoveToBottom": "انتقل إلى الأسفل", + "ReplaceTrickplayImages": "استبدال صور المعاينة السريعة الموجودة", + "RetryWithGlobalSearch": "إعادة المحاولة باستخدام بحث شامل", + "Reset": "إعادة تعيين", + "SearchForLyrics": "البحث عن كلمات الأغاني", + "LabelSelectPreferredTranscodeVideoCodec": "برنامج ترميز الفيديو المفضل لتحويل الترميز", + "Letterer": "حرفي", + "LimitSupportedVideoResolutionHelp": "استخدم ”الدقة القصوى المسموح بها لتحويل ترميز الفيديو“ كحد أقصى لدقة الفيديو المدعومة.", + "LogLevel.Trace": "تتبع", + "MediaSegmentProvidersHelp": "قم بتمكين وترتيب موفري قطاع الوسائط المفضلين لديك حسب الأولوية.", + "MessageCancelSeriesTimerError": "حدث خطأ أثناء إلغاء المؤقت المتسلسل", + "MessageCancelTimerError": "حدث خطأ أثناء إلغاء المؤقت", + "MetadataNfoLoadError": "فشل في تحميل إعدادات NFO للبيانات الوصفية", + "MoveToTop": "انتقل إلى الأعلى", + "PageNotFound": "هذه ليست الصفحة التي تبحث عنها.", + "MediaSegmentAction.AskToSkip": "اطلب التخطي", + "ResolutionMatchSource": "تطابق المصدر", + "BlockingScan": "الحجب - إنشاء قوائم الانتظار، وحجب الفحص حتى اكتماله", + "LabelWidthResolutions": "دقة العرض", + "LabelQscale": "مقياس الجودة", + "LabelQscaleHelp": "مقياس جودة الصور التي يُخرجها ffmpeg، حيث يمثل الرقم 2 أعلى جودة والرقم 31 أدنى جودة.", + "SaveRecordingImagesHelp": "حفظ الصور من مزود قوائم EPG إلى جانب الوسائط.", + "LabelParallelImageEncodingLimit": "حد ترميز الصور المتوازية", + "LastActive": "آخر نشاط", + "LyricDownloadersHelp": "قم بتمكين وترتيب أدوات تنزيل الأغاني المفضلة لديك حسب الأولوية.", + "MediaSegmentSkipPrompt": "تخطي {0}", + "MediaSegmentType.Intro": "مقدمة", + "MessageRepositoryInstallDisclaimer": "تحذير: تنطوي عملية تثبيت مستودع ملحقات الطرف الثالث على مخاطر. قد تحتوي على تعليمات برمجية غير مستقرة أو ضارة، وقد تتغير في أي وقت. قم فقط بتثبيت المستودعات من المطورين الذين تثق بهم.", + "PlaybackError.MEDIA_DECODE_ERROR": "فشل التشغيل بسبب خطأ في فك تشفير الوسائط.", + "PlaybackError.FATAL_HLS_ERROR": "حدث خطأ فادح في دفق HLS.", + "PlaybackError.RateLimitExceeded": "لا يمكن تشغيل هذه الوسائط في الوقت الحالي بسبب حدود المعدل.", + "PlaylistError.AddFailed": "خطأ أثناء الإضافة إلى قائمة التشغيل", + "PluginUninstallError": "حدث خطأ أثناء إلغاء تثبيت المكون الاضافي.", + "PreferNonstandardArtistsTag": "يفضل علامة الفنانين إذا كانت متوفرة", + "SaveRecordingImages": "حفظ تسجيل صور EPG", + "LabelSaveTrickplayLocallyHelp": "إن حفظ صور المعاينة السريعة في مجلدات الوسائط سيضعها بجوار وسائطك، مما يسهل عملية النقل والوصول إليها.", + "LibraryScanFanoutConcurrency": "حد مهام مسح المكتبة الموازية", + "LimitSegmentLength": "استخدام مقاطع HLS أقصر", + "Lyrics": "كلمات", + "MediaSegmentType.Outro": "الخاتمة", + "MediaSegmentType.Preview": "معاينة", + "MediaSegmentType.Recap": "ملخص", + "MessageSplitVersionsError": "حدث خطأ أثناء تقسيم الإصدارات", + "MoviesAndShows": "الأفلام و المسلسلات التلفزيونية", + "Native": "اصلي", + "PluginLoadRepoError": "حدث خطأ أثناء الحصول على تفاصيل المكون الإضافي من المستودع.", + "ReadInputAtNativeFramerateHelp": "قد يؤدي تمكين هذا الخيار إلى حل بعض المشكلات، مثل توقف البث المباشر قبل الأوان.", + "Regional": "إقليمي", + "LabelImageInterval": "الفاصل الزمني للصور", + "LabelTileHeightHelp": "الحد الأقصى لعدد الصور لكل لوحة في اتجاه المحور العمودي/الرأسي.", + "LibraryInvalidItemIdError": "المكتبة في حالة غير صالحة ولا يمكن تحريرها. من المحتمل أنك تواجه خطأ: المسار في قاعدة البيانات ليس هو المسار الصحيح على نظام الملفات.", + "PluginEnableError": "حدث خطأ أثناء تمكين المكون الإضافي.", + "LabelTileWidthHelp": "العدد الأقصى للصور لكل بلاطة في اتجاه المحور الأفقي.", + "RenderPgsSubtitle": "عرض ترجمة PGS التجريبي", + "MediaInfoRotation": "الدوران", + "DeleteCustomImage": "حذف الصورة المخصصة", + "ImageDeleteFailed": "فشل حذف الصورة", + "ImageUploadCancelled": "تم إلغاء تحميل الصور", + "PluginDisableError": "حدث خطأ أثناء تعطيل المكون الإضافي.", + "PreferNonstandardArtistsTagHelp": "استخدم علامة الفنانين غير القياسية بدلاً من علامة الفنان عند توفرها.", + "PlaylistPublic": "السماح بالوصول العام", + "Lyric": "كلمات غنائية", + "MetadataImagesLoadError": "فشل تحميل إعدادات البيانات الوصفية", + "LabelTileWidth": "عرض القالب", + "LabelJpegQualityHelp": "جودة ضغط JPEG لصور المعاينة السريعة.", + "MediaSegmentAction.Skip": "تخطي", + "MediaSegmentType.Commercial": "تجاري", + "MediaSegmentAction.None": "لا يوجد شيء", + "NoLyricsSearchResultsFound": "لم يتم العثور على كلمات الأغنية.", + "LibraryNameInvalid": "لا يمكن أن يكون اسم المكتبة فارغاً." } From 66b21c5925e268b0d26150d1507d0eaa9814cadd Mon Sep 17 00:00:00 2001 From: "Thadah D. Denyse" Date: Tue, 29 Apr 2025 03:57:22 -0400 Subject: [PATCH 113/645] Translated using Weblate (Basque) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/eu/ --- src/strings/eu.json | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/strings/eu.json b/src/strings/eu.json index 0f4f73f2c..d145ce989 100644 --- a/src/strings/eu.json +++ b/src/strings/eu.json @@ -959,7 +959,7 @@ "Large": "Handia", "LanNetworksHelp": "Banda-zabaleraren murrizketak ezartzean sare lokalean kontuan hartuko diren sareetarako IP helbideen zerrenda, komen edo IP/sare-maskara helbideko sarreren bidez bereizita. Ezartzen bada, gainerako IP helbide guztiak kanpoko sarean hartuko dira kontuan, eta kanpoko banda-zabaleraren murrizketei lotuta egongo dira. Hutsik utziz gero, zerbitzariaren azpisarea sare lokalean dagoela baino ez da ulertuko.", "LabelZipCode": "Posta kodea", - "LabelYoureDone": "Kito!", + "LabelYoureDone": "Amaitu duzu!", "LabelYear": "Urtea", "LabelXDlnaDocHelp": "X_DLNADOC elementuaren edukia zehazten du izen espazioan: schemas-dlna-org: device-1-0.", "LabelXDlnaDoc": "X-DLNA doc", @@ -1635,7 +1635,7 @@ "AllowSegmentDeletion": "Ezabatu segmentuak", "AllowSegmentDeletionHelp": "Ezabatu segmentu zaharrak bezeroak deskargatu ondoren. Honela, bihurtutako fitxategi osoa diskoan gordetzea saihesten da. Desgaitu erreproduzitzeko arazoak badituzu.", "LabelThrottleDelaySeconds": "Throttle buruan", - "LabelThrottleDelaySecondsHelp": "Denbora segundotan transkodetzailea geldiarazten hasiko den. Bezeroak buffer osasuntsu bat mantentzeko bezain handia izan behar da. Bakarrik funtzionatzen du throttling onartua baldin badago.", + "LabelThrottleDelaySecondsHelp": "Transkodetzailea mugatuko den denbora segundotan. Bezeroak buffer osasuntsu bat mantentzeko bezain handia izan behar du. Mugaketa gaituta dagoenean bakarrik funtzionatzen du.", "LabelSegmentKeepSeconds": "Segmentuak gordetzeko denbora..", "AirPlay": "AirPlay", "AllowContentWithTagsHelp": "Erakutsi zehaztutako etiketetik gutxienez bat duen serieen media.", @@ -1653,5 +1653,11 @@ "LabelExtractTrickplayDuringLibraryScanHelp": "Sortu trickplay irudiak liburutegia eskaneatzean bideoak inportatzen direnean. Bestela, trickplay irudiak programatutako zeregin bezala erauziko dira. Sorkuntza blokeatzen ez bada, horrek ez du eragingo liburutegiko eskaneatzea burutzeko denboran.", "AllowTonemappingSoftwareHelp": "Tonu-mapatzeak bideo baten barruti dinamikoa HDRtik SDRra alda dezake, irudiaren xehetasunak eta koloreak mantenduz, jatorrizko eszena irudikatzeko oso informazio garrantzitsua baita. Gaur egun 10 biteko HDR10, HLG eta DoVi bideoekin bakarrik funtzionatzen du.", "MessageRepositoryInstallDisclaimer": "OHARRA: hirugarrenen pluginen biltegi bat instalatzeak arriskuak dakartza. Kode ezegonkorra edo gaiztoa izan dezake eta edozein unetan alda daiteke. Instalatu fidagarriak diren egileen biltegiak soilik.", - "EncodingFormatHelp": "Hautatu Jellyfin-ek transkodetu behar duen bideo-kodeketa. Jellyfin-ek software-kodeketa erabiliko du hautatutako formaturako hardware-azelerazioa erabilgarri ez dagoenean. H264 kodeketa gaituta egongo da beti." + "EncodingFormatHelp": "Hautatu Jellyfin-ek transkodetu behar duen bideo-kodeketa. Jellyfin-ek software-kodeketa erabiliko du hautatutako formaturako hardware-azelerazioa erabilgarri ez dagoenean. H264 kodeketa gaituta egongo da beti.", + "LabelTrickplayKeyFrameOnlyExtractionHelp": "Gako-fotogramak soilik atera, prozesaketa askoz azkarragoa lortzeko, denbora-zehaztasuna gutxituz. Konfiguratutako hardware deskodetzaileak modu hau onartzen ez badu, software deskodetzailea erabiliko da horren ordez.", + "ExtractTrickplayImagesHelp": "Trickplay irudiak kapitulu-irudien antzekoak dira, baina edukiaren luzera osoa hartzen dute eta bideoetan zehar mugitzean aurrebista bat erakusteko erabiltzen dira.", + "SelectPreferredTranscodeVideoAudioCodecHelp": "Hautatu audio kodek hobetsia bideo edukia transkodetzeko. Kodek hobetsia ez bada onartzen, zerbitzariak eskuragarri dagoen hurrengo kodekik onena erabiliko du.", + "LabelParallelImageEncodingLimitHelp": "Paraleloan exekutatzeko baimendutako irudi-kodeketa kopuru maximoa. Hutsik uzten baduzu, zure sistemaren nukleo kopuruan oinarritutako muga bat aukeratuko da.", + "AllowFmp4TranscodingContainerHelp": "Baimendu sintonizatzaile honetarako fMP4 transkodetze edukiontziari HEVC eta HDR edukiak gaitzea. Sintonizatzaile guztiak ez dira bateragarriak edukiontzi honekin. Desgaitu hau erreprodukzio arazoak badituzu.", + "LibraryInvalidItemIdError": "Liburutegia egoera baliogabean dago eta ezin da editatu. Baliteke akats bat izatea: datu-baseko bide-izena ez da fitxategi-sistemako bide-izen zuzena." } From 95aeeb172b067b4536fbdc534708056b69b914ce Mon Sep 17 00:00:00 2001 From: Ahmed Moussa Date: Tue, 29 Apr 2025 04:01:11 -0400 Subject: [PATCH 114/645] Translated using Weblate (Arabic) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ar/ --- src/strings/ar.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/ar.json b/src/strings/ar.json index 2c884445e..6d8d02c14 100644 --- a/src/strings/ar.json +++ b/src/strings/ar.json @@ -1977,5 +1977,9 @@ "MediaSegmentType.Commercial": "تجاري", "MediaSegmentAction.None": "لا يوجد شيء", "NoLyricsSearchResultsFound": "لم يتم العثور على كلمات الأغنية.", - "LibraryNameInvalid": "لا يمكن أن يكون اسم المكتبة فارغاً." + "LibraryNameInvalid": "لا يمكن أن يكون اسم المكتبة فارغاً.", + "ExtractTrickplayImagesHelp": "تتشابه صور المعاينة السريعة مع صور الفصول، باستثناء أنها تمتد على طول المحتوى بالكامل وتستخدم لإظهار معاينة عند التنظيف من خلال مقاطع الفيديو.", + "LabelExtractTrickplayDuringLibraryScanHelp": "إنشاء صور المعاينة السريعة عندما يتم استيراد مقاطع الفيديو أثناء فحص المكتبة. خلاف ذلك، سيتم استخراجها أثناء المهمة المجدولة لصور المعاينة السريعة. إذا تم تعيين الإنشاء على عدم الحظر، فلن يؤثر ذلك على الوقت الذي يستغرقه فحص المكتبة حتى يكتمل.", + "LogLoadFailure": "فشل تحميل ملف السجل. قد لا يزال من يتم الكتابة إليه بشكل نشط.", + "LabelExtractTrickplayDuringLibraryScan": "استخراج صور المعاينة السريعة أثناء فحص المكتبة" } From fd9f754740c8742aabc35077ecd2669a7254f425 Mon Sep 17 00:00:00 2001 From: "Thadah D. Denyse" Date: Tue, 29 Apr 2025 04:01:36 -0400 Subject: [PATCH 115/645] Translated using Weblate (Basque) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/eu/ --- src/strings/eu.json | 64 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 53 insertions(+), 11 deletions(-) diff --git a/src/strings/eu.json b/src/strings/eu.json index d145ce989..918a906c0 100644 --- a/src/strings/eu.json +++ b/src/strings/eu.json @@ -1,5 +1,5 @@ { - "ThisWizardWillGuideYou": "Laguntzaile horrek instalazio-prozesuan gidatuko du. Hasteko, aukeratu zure hizkuntza hobetsia.", + "ThisWizardWillGuideYou": "Laguntzaile honek konfigurazio prozesuan zehar gidatuko zaitu. Hasteko, idatzi zerbitzari-izen bat eta hautatu zure hizkuntza lehenetsia.", "LabelPreferredSubtitleLanguage": "Azpitituluen hizkuntza hobetsia", "LabelPreferredDisplayLanguage": "Bistaratze hizkuntza hobetsia", "LabelMetadataDownloadLanguage": "Deskargatzeko hizkuntza hobetsia", @@ -65,7 +65,7 @@ "LabelSelectAudioChannels": "Kanalak", "LabelAllowedAudioChannels": "Baimendutako gehieneko audio-kanalak", "AllowHevcEncoding": "HEVC formatuan kodetzea baimentzea", - "PreferFmp4HlsContainerHelp": "Hobetsi fMP4 erabiltzea HLSrako edukiontzi lehenetsi gisa, HEVC eduki zuzena gailu bateragarrietan transmititu ahal izateko.", + "PreferFmp4HlsContainerHelp": "Hobetsi fMP4 erabiltzea HLSrako edukiontzi lehenetsi gisa, HEVC eta AV1 eduki zuzena gailu bateragarrietan transmititu ahal izateko.", "PreferFmp4HlsContainer": "Hobetsi fMP4-HLS multimedia-edukiontzia", "LabelSyncPlayInfo": "SyncPlay informazioa", "LabelOriginalMediaInfo": "Jatorrizko multimedia informazioa", @@ -82,7 +82,7 @@ "AspectRatioCover": "Azala", "EnableFallbackFontHelp": "Iturri alternatibo pertsonalizatuak aktibatzea. Horrek azpitituluak oker errenderizatzearen arazoa saihets dezake.", "EnableFallbackFont": "Iturri alternatiboak aktibatzea", - "LabelFallbackFontPathHelp": "ASS/SSA azpitituluak renderizatzeko iturri alternatiboak dituen bidea zehazten du. Iturriaren gehieneko tamaina 20 MB-koa da. Iturri arineko formatuak eta web bateragarriak, hala nola woff2 gomendatzen dira.", + "LabelFallbackFontPathHelp": "Letra-tipo hauek bezero batzuek erabiltzen dituzte azpitituluak errendatzeko. Informazio gehiago lortzeko, jo dokumentaziora.", "LabelFallbackFontPath": "Iturrien karpeta alternatiboaren helbidea", "HeaderSelectFallbackFontPathHelp": "Bilatu edo idatzi ASS/SSA azpitituluak errenderizatzeko erabilitako iturri karpeta alternatiboaren helbidea.", "HeaderSelectFallbackFontPath": "Hautatu iturri alternatiboen karpeta", @@ -451,7 +451,7 @@ "MessagePleaseWait": "Mesedez, itxaron.", "MessagePleaseEnsureInternetMetadata": "Ziurtatu metadatuak Internetetik deskargatzea aktibatuta dagoela.", "MessagePlayAccessRestricted": "Eduki horren erreprodukzioa mugatuta dago. Informazio gehiago nahi izanez gero, jarri harremanetan zerbitzari honen administratzailearekin.", - "MessagePasswordResetForUsers": "Hurrengo erabiltzaileei pasahitzak berrezarri dizkie. Orain saioa has dezakete berrezartzeko erabili ziren PIN kodeekin.", + "MessagePasswordResetForUsers": "Erabiltzaile hauen pasahitzak berrezarri dira. Orain berrezarpena egiteko erabilitako PIN kodeekin saioa has dezakete.", "MessageNoTrailersFound": "Trailerren kanala instalatu zure esperientzia zinematografikoa hobetzeko, Interneteko trailerren liburutegi bat gehituz.", "MessageNothingHere": "Hemen ezer ez.", "MessageNoServersAvailable": "Ez da zerbitzaririk aurkitu zerbitzarien detekzio automatikoa erabilita.", @@ -546,7 +546,7 @@ "LabelRecord": "Grabatu", "LabelReasonForTranscoding": "Bihurketa egiteko arrazoia", "LabelQuickConnectCode": "Konexio azkarreko kodea", - "LabelPublishedServerUriHelp": "Jellyfinek erabilitako URIa ezeztatzen du, bezeroaren interfazearen edo IP helbidearen arabera.", + "LabelPublishedServerUriHelp": "Jellyfinek erabiltzen duen URIa gainidatzi, interfazearen edo bezeroaren IP helbidearen arabera. Adibidez: internal=http://jellyfin.adibidea.com, external=https://jellyfin.adibidea.com edo all=https://jellyfin.adibidea.com", "LabelPublishedServerUri": "Argitaratutako zerbitzariaren URI", "LabelPublicHttpsPortHelp": "https tokiko portuarekin lotu behar den portu publikoa.", "LabelPublicHttpsPort": "https portu publikoa", @@ -872,7 +872,7 @@ "LabelAudioBitDepth": "Audio-biten sakonera", "LabelArtistsHelp": "Artista ugari puntu eta koma erabiliz bereiztea.", "LabelArtists": "Artistak", - "LabelAppNameExample": "Adibidea: Sickbeard, Sonarr", + "LabelAppNameExample": "API gakoak identifikatzeko gizakiek irakur dezaketen izen bat. Ezarpen honek ez du funtzionaltasunean eragingo.", "LabelAppName": "Aplikazioaren izena", "LabelAllowHWTranscoding": "Baimendu hardware bidezko transkodetzea", "LabelAllowedRemoteAddressesMode": "Urruneko IP direkzio-iragazkiaren modua", @@ -1005,11 +1005,11 @@ "LabelTonemappingThresholdHelp": "Tonuak mapatzeko algoritmoaren parametroak eszena bakoitzean egokitzen dira. Atalase bat erabiltzen da eszena aldatu den ala ez antzemateko. Batez besteko distira egungo fotogramaren eta hurrengoaren arteko atalasetik ateratzen bada, batez besteko eta moko distiraren balioak kalkulatuko dira berriro. 0.8 eta 0.2 balio lehenetsiak gomendatzen dira.", "LabelTonemappingThreshold": "Tonuaren mapaketaren atalasea", "LabelTonemappingRange": "Tonuaren mapaketa-tartea", - "LabelTonemappingPeakHelp": "Balio hori duten erreferentziazko tontorrak ez dira kontuan hartuko. Erabilgarria da irudi-metadatuetan txertatutako moko-informazioa fidagarria ez denean edo tonuen mapaketa maila baxu batetik maila altuago batera egiten denean. 100 eta 0 balio lehenetsiak gomendatzen dira.", + "LabelTonemappingPeakHelp": "Gainditu sarrera-seinalearen metadatu txertatuaren balioa gailur-balio honekin. Balio lehenetsia 100 da (1000 nit).", "LabelTonemappingPeak": "Tonuaren mapaketaren pikoa", "LabelTonemappingParamHelp": "Tonua mapatzeko algoritmoa doitzea. Gomendatutako eta aurrez zehaztutako balioa NaN da. Normalean, utzi hutsik.", "LabelTonemappingParam": "Tonuaren mapaketaren parametroak", - "LabelTonemappingDesatHelp": "Distira-maila hori gainditzen duten aberastasunei saturazioa kentzea. Parametroa zenbat eta gorago, orduan eta kolore-informazio gehiago gordeko da. Doikuntza horri esker, erraz itzaltzen diren kolore altuak pixkanaka zurira aldatzen dira. Horren ondorioz, irudiak naturalagoak dira, tartetik kanpo dauden koloreei buruzko informazioa murriztearen truke. 0 eta 0.5 balio lehenetsiak gomendatzen dira.", + "LabelTonemappingDesatHelp": "Aplikatu desaturazioa distira-maila hori gainditzen duten argi-izpietarako. Gomendatutako balioa 0 da (desgaitu).", "LabelTonemappingDesat": "Tonuen mapaketa gaingabetua", "LabelTonemappingAlgorithm": "Hautatu tonuak mapatzeko algoritmoa", "LabelTitle": "Izenburua", @@ -1402,7 +1402,7 @@ "DirectStreaming": "Zuzeneko streaminga", "DirectStreamHelp2": "Zuzeneko transmisioak kontsumitutako energia audio-profilaren araberakoa izaten da. Bideo transmisioak bakarrik ez du galerarik.", "DirectStreamHelp1": "Bideo-transmisioa bateragarria da gailuarekin, baina audio-formatu bateraezina du (DTS, Dolby TrueHD, etab.) edo audio-kanalen kopurua. Bideo-transmisioa berriro paketatuko da, martxan galerarik gabe, gailura bidali aurretik. Audio-transmisioa baino ez da transkodetuko.", - "DirectPlayHelp": "Jatorrizko fitxategia guztiz bateragarria da bezero honekin, eta saioa fitxategia jasotzen ari da aldaketarik gabe.", + "DirectPlayHelp": "Iturburu-fitxategia bezero honekin guztiz bateragarria da eta saioak fitxategia aldaketarik gabe jasotzen ari du.", "DirectPlaying": "Zuzeneko erreprodukzioa", "Directors": "Zuzendariak", "Director": "Zuzendaria", @@ -1447,7 +1447,7 @@ "ConfirmDeleteItems": "Elementu horiek ezabatzean, artxibo-sistematik zein multimedia-liburutegitik ezabatuko dira. Ziur zaude jarraitu nahi duzula?", "ConfirmDeleteItem": "Elementu hori ezabatzean, artxibo-sistematik zein multimedia-liburutegitik ezabatuko da. Ziur zaude jarraitu nahi duzula?", "ConfirmDeleteImage": "Irudia ezabatu?", - "ConfigureDateAdded": "Konfiguratu nola zehaztuko den eranskinaren data liburutegiaren konfiguraziopeko panelean", + "ConfigureDateAdded": "Konfiguratu 'Gehitze-data'-ren metadatuak nola zehazten diren Hasiera > Liburutegiak > Erakutsi atalean", "Conductor": "Orkestra-zuzendaria", "Composer": "Konpositorea", "CommunityRating": "Komunitatearen puntuazioa", @@ -1659,5 +1659,47 @@ "SelectPreferredTranscodeVideoAudioCodecHelp": "Hautatu audio kodek hobetsia bideo edukia transkodetzeko. Kodek hobetsia ez bada onartzen, zerbitzariak eskuragarri dagoen hurrengo kodekik onena erabiliko du.", "LabelParallelImageEncodingLimitHelp": "Paraleloan exekutatzeko baimendutako irudi-kodeketa kopuru maximoa. Hutsik uzten baduzu, zure sistemaren nukleo kopuruan oinarritutako muga bat aukeratuko da.", "AllowFmp4TranscodingContainerHelp": "Baimendu sintonizatzaile honetarako fMP4 transkodetze edukiontziari HEVC eta HDR edukiak gaitzea. Sintonizatzaile guztiak ez dira bateragarriak edukiontzi honekin. Desgaitu hau erreprodukzio arazoak badituzu.", - "LibraryInvalidItemIdError": "Liburutegia egoera baliogabean dago eta ezin da editatu. Baliteke akats bat izatea: datu-baseko bide-izena ez da fitxategi-sistemako bide-izen zuzena." + "LibraryInvalidItemIdError": "Liburutegia egoera baliogabean dago eta ezin da editatu. Baliteke akats bat izatea: datu-baseko bide-izena ez da fitxategi-sistemako bide-izen zuzena.", + "RenderPgsSubtitleHelp": "Zehaztu bezeroak PGS azpitituluak errendatu behar dituen azpititulu errendatuen ordez. Horrek zerbitzariaren aldeko transkodifikazioa saihestu dezake bezeroaren aldeko errendatze-errendimenduaren truke.", + "ConfirmDeleteSeries": "Telesail hau ezabatzeak fitxategi-sistematik eta zure multimedia liburutegitik {0} atal GUZTIAK ezabatuko ditu. Ziur jarraitu nahi duzula?", + "SelectPreferredTranscodeVideoCodecHelp": "Hautatu transkodetzeko bideo kodek hobetsia. Kodek hobetsia ez bada onartzen, zerbitzariak eskuragarri duen hurrengo kodek onena erabiliko du.", + "IntelLowPowerEncHelp": "Energia gutxiko kodeketak beharrezkoa ez den CPU-GPU sinkronizazioa mantendu dezake. Linuxen desgaitu egin behar dira i915 HuC firmwarea konfiguratuta ez badago.", + "AlwaysRemuxFlacAudioFilesHelp": "Zure arakatzaileak erreproduzitzea ukatzen dituen fitxategiak badituzu edo denbora-zigiluak gaizki kalkulatzen baditu, gaitu hau konponbide gisa.", + "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Gehigarriek askotan gurasoaren izen txertatu bera izaten dute, markatu hau hala ere izenburu txertatuak erabiltzeko.", + "PleaseConfirmRepositoryInstallation": "Mesedez, egin klik Ados botoian goikoa irakurri duzula eta plugin biltegiaren instalazioarekin jarraitu nahi duzula berresteko.", + "AutoSubtitleStylingHelp": "Modu honek automatikoki aldatuko du azpitituluen estilo-mekanismo natibo eta pertsonalizatuen artean, zure gailu motaren arabera.", + "NativeSubtitleStylingHelp": "Azpitituluen estiloak ez du funtzionatuko gailu batzuetan. Hala ere, ez dator errendimendu-gainkargarekin.", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Transkodetzea abiarazten denean azpititulu guztiak grabatu. Horrek azpitituluen sinkronizazioa bermatzen du transkodetu ondoren, baina transkodetze-abiadura murrizten du.", + "AlwaysRemuxMp3AudioFilesHelp": "Zure arakatzaileak denbora-zigiluak oker kalkulatzen dituen fitxategiak badituzu, gaitu hau konponbide gisa.", + "CustomSplashScreenSize": "Irudi pertsonalizatuek 16x9ko alderdi-erlazioa eta gutxienez 1920x1080ko tamaina izan behar dute.", + "LabelBackdropScreensaverIntervalHelp": "Atzeko planoaren pantaila-babeslea erabiltzean atzeko plano desberdinen arteko denbora segundotan.", + "RememberAudioSelectionsHelp": "Saiatu audio-pista azken bideoaren antzekoena ezartzen.", + "SaveLyricsIntoMediaFoldersHelp": "Audio fitxategien ondoan letrak gordetzeak errazago kudeatzen utziko du.", + "MessageRenameMediaFolder": "Multimedia liburutegi baten izena aldatzeak metadatu guztiak galtzea eragingo du, kontuz erabili aukera hau.", + "LabelScreensaverTimeHelp": "Pantaila-babeslea abiarazteko behar den jarduerarik gabeko denbora segundotan.", + "CustomSubtitleStylingHelp": "Azpitituluen estiloak gailu gehienetan funtzionatuko du, baina errendimendu-gastu gehigarria dakar.", + "LabelVppTonemappingBrightnessHelp": "Aplikatu distira-irabazia VPP tonu-mapeatzean. Gomendatutako balioa 16 da.", + "LabelVppTonemappingContrastHelp": "Aplikatu kontraste-irabazia VPP tonu-mapeatzean. Gomendatutako balioa 1 da.", + "LogLoadFailure": "Erregistro-fitxategia kargatzeak huts egin du. Baliteke oraindik aktiboki idazten ari izatea bertan.", + "LabelSegmentKeepSecondsHelp": "Bezeroak deskargatu ondoren segmentuak gorde behar diren denbora segundotan. Segmentuak ezabatzeko aukera gaituta badago bakarrik funtzionatzen du.", + "ConfirmDeleteLyrics": "Letra hauek ezabatzeak fitxategi-sistematik eta zure multimedia liburutegitik ezabatuko ditu. Ziur jarraitu nahi duzula?", + "EnableDtsHelp": "Gaitu hau soilik zure gailuak DTS onartzen badu edo audio hargailu bateragarri batera konektatuta badago; bestela, erreprodukzioak huts egin dezake.", + "EnableTrueHdHelp": "Gaitu hau soilik zure gailuak TrueHD onartzen badu edo audio hargailu bateragarri batera konektatuta badago; bestela, erreprodukzioak huts egin dezake.", + "EnableEnhancedNvdecDecoderHelp": "NVDEC inplementazio hobetua, desgaitu aukera hau CUVID erabiltzeko deskodetze-erroreak izanez gero.", + "LabelEnableLUFSScanHelp": "Bezeroek audio erreprodukzioa normalizatu dezakete pista guztietan ozentasun berdina lortzeko. Horrek liburutegiko eskaneatzeak luzeagoak egingo ditu eta baliabide gehiago beharko ditu.", + "EnableHi10pHelp": "Gaitu H.264 10 biteko bideoak transkodetzea saihesteko. Desgaitu aukera hau bideoak fotograma hutsak erakusten badira.", + "ErrorDeletingLyrics": "Errorea gertatu da letrak zerbitzaritik ezabatzean. Mesedez, egiaztatu Jellyfinek multimedia karpetan idazteko baimena duela eta saiatu berriro.", + "LabelEnableAudioVbrHelp": "Bit-tasa aldakorrak kalitate hobea eskaintzen du batez besteko bit-tasaren aldean, baina kasu bakan batzuetan buffering eta bateragarritasun arazoak sor ditzake.", + "LabelGroupShowsIntoCollectionsHelp": "Bilduma bateko saioak elementu multzokatu bakar gisa bistaratuko dira saioaren zerrendak bistaratzean.", + "IgnoreDtsHelp": "Aukera hau desgaitzeak arazo batzuk konpondu ditzake, adibidez, audio eta bideo jario bereiziak dituzten kanaletan audioa galtzea.", + "LimitSegmentLengthHelp": "Aukera hau gaitzeak HLS erreproduzitzailea zenbait gailutan, hala nola webOS telebistetan, bilaketan blokeatzea eragotzi dezake.", + "RememberSubtitleSelectionsHelp": "Saiatu azpitituluen pista azken bideoaren antzekoena ezartzen.", + "TonemappingModeHelp": "Hautatu tonu-mapatze modua. Argi-izpiak lehertuta badaude, saiatu RGB modura aldatzen.", + "LabelTrickplayAccelEncodingHelp": "Gaur egun QSV, VA-API, VideoToolbox eta RKMPP-n bakarrik eskuragarri, aukera honek ez du eraginik beste hardware azelerazio metodoetan.", + "AllowEmbeddedSubtitlesHelp": "Desgaitu multimedia edukiontzietan dauden azpitituluak. Liburutegia guztiz freskatzea eskatzen du.", + "LabelSaveTrickplayLocallyHelp": "Trickplay irudiak multimedia karpetetan gordetzeak zure multimedia ondoan jarriko ditu migrazio eta sarbide errazak izan ditzaten.", + "LabelTrickplayThreadsHelp": "ffmpeg-en '-threads' argumentura pasatuko diren hari kopurua.", + "LabelQscaleHelp": "ffmpeg-ek sortutako irudien kalitate-eskala, 2 kalitate handiena izanik eta 31 baxuena.", + "LabelDummyChapterDurationHelp": "Kapitulu faltsuen arteko tartea. 0ra ezarri kapitulu faltsuen sorrera desgaitzeko. Hau aldatzeak ez du eraginik izango dauden kapitulu faltsuetan.", + "LabelChapterImageResolutionHelp": "Ateratako kapitulu-irudien bereizmena. Hau aldatzeak ez du eraginik izango dauden kapitulu faltsuetan." } From 72b127e54b15d13768043cb9bd2db07f51f9962c Mon Sep 17 00:00:00 2001 From: Acrotos Date: Tue, 29 Apr 2025 08:54:09 -0400 Subject: [PATCH 116/645] Translated using Weblate (Romanian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/ --- src/strings/ro.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/strings/ro.json b/src/strings/ro.json index 6a62b4568..ba647e34e 100644 --- a/src/strings/ro.json +++ b/src/strings/ro.json @@ -136,7 +136,7 @@ "TabProfiles": "Profile", "TabUpcoming": "Urmează să apară", "TellUsAboutYourself": "Spune-ne despre tine", - "ThisWizardWillGuideYou": "Acest asistent vă va ghida prin procesul de configurare. Pentru a începe, vă rugăm să selectați limba preferată.", + "ThisWizardWillGuideYou": "Acest asistent vă va ghida prin procesul de configurare. Introduceți numele de server și selectați limba preferată pentru a începe.", "Thursday": "Joi", "Tuesday": "Marți", "UserProfilesIntro": "Jellyfin include suport pentru profile de utilizator cu setări de afișare granulare, starea redării și control parental.", @@ -2024,5 +2024,7 @@ "ImageUploadCancelled": "Încărcarea imaginii anulată", "ImageUploadFailed": "Încărcarea imaginii a eșuat", "LabelGroupShowsIntoCollections": "Grupează serialele în colecții", - "LabelGroupShowsIntoCollectionsHelp": "Serialele dintr-o colecție vor fi afișate ca un singur element grupat în lista de seriale." + "LabelGroupShowsIntoCollectionsHelp": "Serialele dintr-o colecție vor fi afișate ca un singur element grupat în lista de seriale.", + "LimitSegmentLengthHelp": "Activarea acestei opțiuni poate ajuta la prevenirea blocării playerului HLS în timpul căutării pe anumite dispozitive, cum ar fi televizoarele webOS.", + "LimitSegmentLength": "Utilizați segment HLS redus" } From da7135e77a4404e23d060c0a2ae952de967647bc Mon Sep 17 00:00:00 2001 From: "Thadah D. Denyse" Date: Tue, 29 Apr 2025 09:21:28 -0400 Subject: [PATCH 117/645] Translated using Weblate (Basque) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/eu/ --- src/strings/eu.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/eu.json b/src/strings/eu.json index 918a906c0..3e00f4362 100644 --- a/src/strings/eu.json +++ b/src/strings/eu.json @@ -1701,5 +1701,8 @@ "LabelTrickplayThreadsHelp": "ffmpeg-en '-threads' argumentura pasatuko diren hari kopurua.", "LabelQscaleHelp": "ffmpeg-ek sortutako irudien kalitate-eskala, 2 kalitate handiena izanik eta 31 baxuena.", "LabelDummyChapterDurationHelp": "Kapitulu faltsuen arteko tartea. 0ra ezarri kapitulu faltsuen sorrera desgaitzeko. Hau aldatzeak ez du eraginik izango dauden kapitulu faltsuetan.", - "LabelChapterImageResolutionHelp": "Ateratako kapitulu-irudien bereizmena. Hau aldatzeak ez du eraginik izango dauden kapitulu faltsuetan." + "LabelChapterImageResolutionHelp": "Ateratako kapitulu-irudien bereizmena. Hau aldatzeak ez du eraginik izango dauden kapitulu faltsuetan.", + "ReadInputAtNativeFramerateHelp": "Aukera hau gaitzeak arazo batzuk konpondu ditzake, adibidez, zuzeneko erreprodukzioak azkarregi gelditzea.", + "PlaybackError.RateLimitExceeded": "Une honetan ezin da multimedia hau erreproduzitu abiadura-mugak direla eta.", + "MediaSegmentProvidersHelp": "Gaitu eta sailkatu nahiago dituzun multimedia-segmentu hornitzaileak lehentasunaren arabera." } From d190fdb27c600a298867aa72a9377828a064e2dd Mon Sep 17 00:00:00 2001 From: Nicholas Jorgenson Date: Tue, 29 Apr 2025 16:06:43 -0400 Subject: [PATCH 118/645] Fix lazy loading on the genre pages (#6799) * Fix genre tab from sorting shows randomly * Fix loading elements that have already been loaded * Fix lazyLoader for show and movie genre tabs * Reduce time window in which callback may be executed again --- .../lazyLoader/lazyLoaderIntersectionObserver.js | 8 ++++---- src/controllers/movies/moviegenres.js | 8 +++++++- src/controllers/shows/tvgenres.js | 8 +++++++- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/components/lazyLoader/lazyLoaderIntersectionObserver.js b/src/components/lazyLoader/lazyLoaderIntersectionObserver.js index 81378710f..8a3835d89 100644 --- a/src/components/lazyLoader/lazyLoaderIntersectionObserver.js +++ b/src/components/lazyLoader/lazyLoaderIntersectionObserver.js @@ -7,10 +7,10 @@ export class LazyLoader { createObserver() { const callback = this.options.callback; - const observer = new IntersectionObserver( - (entries) => { + const newObserver = new IntersectionObserver( + (entries, observer) => { entries.forEach(entry => { - callback(entry); + callback(entry, observer); }); }, { @@ -18,7 +18,7 @@ export class LazyLoader { threshold: 0 }); - this.observer = observer; + this.observer = newObserver; } addElements(elements) { diff --git a/src/controllers/movies/moviegenres.js b/src/controllers/movies/moviegenres.js index 9a45f59e0..b9fa8bc50 100644 --- a/src/controllers/movies/moviegenres.js +++ b/src/controllers/movies/moviegenres.js @@ -52,8 +52,14 @@ export default function (view, params, tabContent) { return !layoutManager.desktop; } - const fillItemsContainer = (entry) => { + const fillItemsContainer = (entry, observer) => { + if (!entry.isIntersecting) { + return; + } + const elem = entry.target; + observer.unobserve(elem); + const id = elem.getAttribute('data-id'); const viewStyle = this.getCurrentViewStyle(); let limit = viewStyle == 'Thumb' || viewStyle == 'ThumbCard' ? 5 : 9; diff --git a/src/controllers/shows/tvgenres.js b/src/controllers/shows/tvgenres.js index c1c360a83..6c5982627 100644 --- a/src/controllers/shows/tvgenres.js +++ b/src/controllers/shows/tvgenres.js @@ -52,8 +52,14 @@ export default function (view, params, tabContent) { return !layoutManager.desktop; } - function fillItemsContainer(entry) { + function fillItemsContainer(entry, observer) { + if (!entry.isIntersecting) { + return; + } + const elem = entry.target; + observer.unobserve(elem); + const id = elem.getAttribute('data-id'); const viewStyle = self.getCurrentViewStyle(); let limit = viewStyle == 'Thumb' || viewStyle == 'ThumbCard' ? 5 : 9; From 96ba9bf8bec778b0c5a7cc8e18689f6d262d8e23 Mon Sep 17 00:00:00 2001 From: "Thadah D. Denyse" Date: Tue, 29 Apr 2025 15:58:48 -0400 Subject: [PATCH 119/645] Translated using Weblate (Basque) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/eu/ --- src/strings/eu.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/strings/eu.json b/src/strings/eu.json index 3e00f4362..20948906f 100644 --- a/src/strings/eu.json +++ b/src/strings/eu.json @@ -1704,5 +1704,12 @@ "LabelChapterImageResolutionHelp": "Ateratako kapitulu-irudien bereizmena. Hau aldatzeak ez du eraginik izango dauden kapitulu faltsuetan.", "ReadInputAtNativeFramerateHelp": "Aukera hau gaitzeak arazo batzuk konpondu ditzake, adibidez, zuzeneko erreprodukzioak azkarregi gelditzea.", "PlaybackError.RateLimitExceeded": "Une honetan ezin da multimedia hau erreproduzitu abiadura-mugak direla eta.", - "MediaSegmentProvidersHelp": "Gaitu eta sailkatu nahiago dituzun multimedia-segmentu hornitzaileak lehentasunaren arabera." + "MediaSegmentProvidersHelp": "Gaitu eta sailkatu nahiago dituzun multimedia-segmentu hornitzaileak lehentasunaren arabera.", + "LabelDelimiterWhitelistHelp": "Etiketa zatitzetik kanpo utzi beharreko elementuak. Elementu bat lerro bakoitzeko.", + "PluginLoadRepoError": "Errore bat gertatu da pluginaren xehetasunak biltegitik lortzean.", + "PlaylistPublicDescription": "Baimendu erreprodukzio-zerrenda hau saioa hasitako edozein erabiltzailek ikustea.", + "DisableVbrAudioEncodingHelp": "Eragotzi zerbitzariari bezero honentzat VBR-rekin audioa kodetzea.", + "PlaybackError.MEDIA_NOT_SUPPORTED": "Erreprodukzioak huts egin du bezero honek ez duelako multimedia onartzen.", + "LimitSupportedVideoResolutionHelp": "Erabili 'Bideoa transkodetzeko gehienezko bereizmena' onartutako bideo bereizmen maximo gisa.", + "LyricDownloadersHelp": "Gaitu eta sailkatu zure letra deskargatzaile gogokoenak lehentasunaren arabera." } From 8047483a7cd2d41558bcfce79b85d239f74e1317 Mon Sep 17 00:00:00 2001 From: MontejoJorge Date: Tue, 29 Apr 2025 22:43:37 +0200 Subject: [PATCH 120/645] use the TS SDK as @viown suggested --- .../routes/session/forgotPassword/index.tsx | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/apps/stable/routes/session/forgotPassword/index.tsx b/src/apps/stable/routes/session/forgotPassword/index.tsx index 55a0c3ff6..6a5a1094b 100644 --- a/src/apps/stable/routes/session/forgotPassword/index.tsx +++ b/src/apps/stable/routes/session/forgotPassword/index.tsx @@ -4,30 +4,28 @@ import { useNavigate } from 'react-router-dom'; import globalize from 'lib/globalize'; import Button from 'elements/emby-button/Button'; import Input from 'elements/emby-input/Input'; -import ServerConnections from 'components/ServerConnections'; import { useMutation } from '@tanstack/react-query'; import Dashboard from 'utils/dashboard'; +import { getUserApi } from '@jellyfin/sdk/lib/utils/api/user-api'; +import ServerConnections from 'components/ServerConnections'; export const ForgotPasswordPage = () => { const navigate = useNavigate(); const [username, setUsername] = useState(''); - const apiClient = ServerConnections.currentApiClient(); - const forgotPasswordMutation = useMutation({ - mutationFn: (enteredUsername: string) => { - if (!apiClient) { - throw new Error('API client is not available'); + mutationFn: async (enteredUsername: string) => { + const currentApi = ServerConnections.getCurrentApi(); + if (!currentApi) { + throw new Error('API not available'); } - return apiClient.ajax({ - type: 'POST', - url: apiClient.getUrl('Users/ForgotPassword'), - dataType: 'json', - contentType: 'application/json', - data: JSON.stringify({ + const response = await getUserApi(currentApi).forgotPassword({ + forgotPasswordDto: { EnteredUsername: enteredUsername - }) + } }); + + return response.data; }, onSuccess: (result) => { if (result.Action == 'ContactAdmin') { From 99a6c653ff0754434e595486846df0e263c9cc0e Mon Sep 17 00:00:00 2001 From: MontejoJorge Date: Tue, 29 Apr 2025 22:56:58 +0200 Subject: [PATCH 121/645] use ForgotPasswordAction enum --- src/apps/stable/routes/session/forgotPassword/index.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/apps/stable/routes/session/forgotPassword/index.tsx b/src/apps/stable/routes/session/forgotPassword/index.tsx index 6a5a1094b..c75ac9d53 100644 --- a/src/apps/stable/routes/session/forgotPassword/index.tsx +++ b/src/apps/stable/routes/session/forgotPassword/index.tsx @@ -7,6 +7,7 @@ import Input from 'elements/emby-input/Input'; import { useMutation } from '@tanstack/react-query'; import Dashboard from 'utils/dashboard'; import { getUserApi } from '@jellyfin/sdk/lib/utils/api/user-api'; +import { ForgotPasswordAction } from '@jellyfin/sdk/lib/generated-client/models/forgot-password-action'; import ServerConnections from 'components/ServerConnections'; export const ForgotPasswordPage = () => { @@ -28,21 +29,21 @@ export const ForgotPasswordPage = () => { return response.data; }, onSuccess: (result) => { - if (result.Action == 'ContactAdmin') { + if (result.Action == ForgotPasswordAction.ContactAdmin) { Dashboard.alert({ message: globalize.translate('MessageContactAdminToResetPassword'), title: globalize.translate('ButtonForgotPassword') }); } - if (result.Action == 'InNetworkRequired') { + if (result.Action == ForgotPasswordAction.InNetworkRequired) { Dashboard.alert({ message: globalize.translate('MessageForgotPasswordInNetworkRequired'), title: globalize.translate('ButtonForgotPassword') }); } - if (result.Action == 'PinCode') { + if (result.Action == ForgotPasswordAction.PinCode) { let msg = globalize.translate('MessageForgotPasswordFileCreated'); msg += '

'; msg += globalize.translate('MessageForgotPasswordPinReset'); From 9d05c9e65d827006653a6b90e179b8f24be05e67 Mon Sep 17 00:00:00 2001 From: MontejoJorge Date: Tue, 29 Apr 2025 22:58:28 +0200 Subject: [PATCH 122/645] remove es translation (weblate handle this) --- src/strings/es.json | 1 - 1 file changed, 1 deletion(-) diff --git a/src/strings/es.json b/src/strings/es.json index 803721341..5870de605 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -714,7 +714,6 @@ "MessageEnablingOptionLongerScans": "Activar esta opción implicará escaneos de la biblioteca más largos.", "MessageFileReadError": "Ha habido un error leyendo el fichero. Por favor, inténtalo más tarde.", "MessageForgotPasswordFileCreated": "Se ha creado el siguiente archivo en tu servidor y contiene instrucciones de cómo proceder", - "MessageForgotPasswordPinReset": "Introdice el PIN aqui para finalizar el reseteo de contraseña", "MessageForgotPasswordInNetworkRequired": "Por favor, inténtalo de nuevo desde tu red de casa para iniciar el proceso de restablecimiento de la contraseña.", "MessageInvalidForgotPasswordPin": "Has introducido un código PIN inválido o expirado. Por favor, inténtalo de nuevo.", "MessageInvalidUser": "Usuario o contraseña inválidos. Por favor, inténtalo otra vez.", From 12acfb32e38650d9bb64ad22dde3aa6288a2bab1 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 29 Apr 2025 17:16:59 -0400 Subject: [PATCH 123/645] Fix unavailable server handling --- src/components/ConnectionErrorPage.tsx | 33 +++++++++++++++---- src/components/ConnectionRequired.tsx | 2 +- .../jellyfin-apiclient/connectionManager.js | 4 --- src/strings/en-us.json | 1 + 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/components/ConnectionErrorPage.tsx b/src/components/ConnectionErrorPage.tsx index 2b7278eca..3dae182b7 100644 --- a/src/components/ConnectionErrorPage.tsx +++ b/src/components/ConnectionErrorPage.tsx @@ -1,6 +1,8 @@ import React, { FC, useEffect, useState } from 'react'; +import { appHost } from 'components/apphost'; import Page from 'components/Page'; +import LinkButton from 'elements/emby-button/LinkButton'; import globalize from 'lib/globalize'; import { ConnectionState } from 'lib/jellyfin-apiclient'; @@ -13,14 +15,22 @@ const ConnectionErrorPage: FC = ({ }) => { const [ title, setTitle ] = useState(); const [ htmlMessage, setHtmlMessage ] = useState(); + const [ message, setMessage ] = useState(); useEffect(() => { - if (state === ConnectionState.ServerUpdateNeeded) { - setTitle(globalize.translate('HeaderUpdateRequired')); - setHtmlMessage(globalize.translate( - 'ServerUpdateNeeded', - 'jellyfin.org/downloads/server' - )); + switch (state) { + case ConnectionState.ServerUpdateNeeded: + setTitle(globalize.translate('HeaderUpdateRequired')); + setHtmlMessage(globalize.translate( + 'ServerUpdateNeeded', + 'jellyfin.org/downloads/server' + )); + setMessage(undefined); + return; + case ConnectionState.Unavailable: + setTitle(globalize.translate('HeaderServerUnavailable')); + setHtmlMessage(undefined); + setMessage(globalize.translate('MessageUnableToConnectToServer')); } }, [ state ]); @@ -37,6 +47,17 @@ const ConnectionErrorPage: FC = ({ {htmlMessage && (

)} + {message && ( +

{message}

+ )} + {appHost.supports('multiserver') && ( + + {globalize.translate('ButtonChangeServer')} + + )}
); diff --git a/src/components/ConnectionRequired.tsx b/src/components/ConnectionRequired.tsx index 290a6c8d5..9fd4cd45d 100644 --- a/src/components/ConnectionRequired.tsx +++ b/src/components/ConnectionRequired.tsx @@ -184,7 +184,7 @@ const ConnectionRequired: FunctionComponent = ({ console.debug('[ConnectionRequired] connection state', firstConnection?.State); ServerConnections.firstConnection = true; - if (firstConnection?.State === ConnectionState.ServerUpdateNeeded) { + if ([ ConnectionState.ServerUpdateNeeded, ConnectionState.Unavailable ].includes(firstConnection?.State)) { setErrorState(firstConnection.State); } else if (level === AccessLevel.Wizard) { handleWizard(firstConnection) diff --git a/src/lib/jellyfin-apiclient/connectionManager.js b/src/lib/jellyfin-apiclient/connectionManager.js index 15d6c8591..7c962c952 100644 --- a/src/lib/jellyfin-apiclient/connectionManager.js +++ b/src/lib/jellyfin-apiclient/connectionManager.js @@ -423,10 +423,6 @@ export default class ConnectionManager { // See if we have any saved credentials and can auto sign in if (firstServer) { return self.connectToServer(firstServer, options).then((result) => { - if (result.State === ConnectionState.Unavailable) { - result.State = ConnectionState.ServerSelection; - } - console.log('resolving connectToServers with result.State: ' + result.State); return result; }); diff --git a/src/strings/en-us.json b/src/strings/en-us.json index ab5b5f05c..6b6fd9324 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -515,6 +515,7 @@ "HeaderSeriesOptions": "Series Options", "HeaderSeriesStatus": "Series Status", "HeaderServerAddressSettings": "Server Address Settings", + "HeaderServerUnavailable": "Server Unavailable", "HeaderSetupLibrary": "Set up your media libraries", "HeaderSortBy": "Sort By", "HeaderSortOrder": "Sort Order", From 33aeab5f19f96b56040492c588b18d54fe93ee82 Mon Sep 17 00:00:00 2001 From: Wregaan Date: Tue, 29 Apr 2025 18:30:35 -0400 Subject: [PATCH 124/645] Translated using Weblate (Hungarian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/ --- src/strings/hu.json | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/strings/hu.json b/src/strings/hu.json index 942dd816c..75c630c7b 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -1999,5 +1999,16 @@ "DeleteCustomImage": "Egyedi kép törlése", "ImageDeleteFailed": "A kép törlése nem sikerült", "ImageUploadCancelled": "A kép feltöltése megszakítva", - "ImageUploadFailed": "A kép feltöltése sikertelen" + "ImageUploadFailed": "A kép feltöltése sikertelen", + "RetryWithGlobalSearch": "Újra globális kereséssel", + "SaveLyricsIntoMediaFolders": "Feliratok mentése a média mappába", + "SearchForLyrics": "Feliratok keresése", + "Retry": "Újra", + "Reset": "Visszaállítás", + "Regional": "Regionális", + "LimitSegmentLength": "Használj rövidebb HLS szegmenst", + "LimitSegmentLengthHelp": "A beállítás engedélyezése segíthet bizonyos eszközökön mint a webOS TV-k a HLS lejátszó akadozását megszűntetni.", + "PreviewLyrics": "Felirat előnézet", + "HeaderUpdateRequired": "Frissítés szükséges", + "RenderPgsSubtitle": "Kísérleti PGS felirat renderelés" } From 1b4d450bd9ae7ab692a143e0975596510ff16ea6 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Tue, 29 Apr 2025 17:19:16 -0400 Subject: [PATCH 125/645] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 13a5d130c..b4dd8e365 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -2025,5 +2025,6 @@ "ReadInputAtNativeFramerate": "Invoer lezen op oorspronkelijke verversingssnelheid", "ReadInputAtNativeFramerateHelp": "Het inschakelen van deze optie kan bepaalde problemen oplossen, zoals het voortijdig stoppen van livestreams.", "LimitSegmentLength": "Kortere HLS-segmenten gebruiken", - "LimitSegmentLengthHelp": "Het inschakelen van deze optie kan helpen voorkomen dat de HLS-speler vastloopt tijdens terug- en vooruitspoelen op bepaalde apparaten, zoals webOS-tv's." + "LimitSegmentLengthHelp": "Het inschakelen van deze optie kan helpen voorkomen dat de HLS-speler vastloopt tijdens terug- en vooruitspoelen op bepaalde apparaten, zoals webOS-tv's.", + "HeaderUpdateRequired": "Bijwerken vereist" } From ca638f064798ee9fd1b2ae66643a5ba02d074ca4 Mon Sep 17 00:00:00 2001 From: MrPlow Date: Wed, 30 Apr 2025 00:16:09 -0400 Subject: [PATCH 126/645] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/de.json b/src/strings/de.json index 0b9253dab..6da278930 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -2026,5 +2026,6 @@ "LimitSegmentLengthHelp": "Durch Aktivieren dieser Option kann verhindert werden, dass der HLS-Player während der Suche auf bestimmten Geräten, beispielsweise webOS-Fernsehern, hängen bleibt.", "ImageUploadCancelled": "Bild hochladen abgebrochen", "ImageUploadFailed": "Bild hochladen fehlgeschlagen", - "ReadInputAtNativeFramerate": "Eingabe mit nativer Framerate lesen" + "ReadInputAtNativeFramerate": "Eingabe mit nativer Framerate lesen", + "HeaderUpdateRequired": "Update erforderlich" } From fa68da5fd128fbfac5c48e03192d8f5d78ab9b9d Mon Sep 17 00:00:00 2001 From: Kityn Date: Wed, 30 Apr 2025 00:42:20 -0400 Subject: [PATCH 127/645] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 31c578410..54c040f13 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -2026,5 +2026,6 @@ "ReadInputAtNativeFramerate": "Odczytuj dane wejściowe z natywną szybkością klatek", "ReadInputAtNativeFramerateHelp": "Włączenie tej opcji może rozwiązać niektóre problemy, np. przedwczesne kończenie transmisji na żywo.", "LimitSegmentLength": "Użyj krótszych segmentów HLS", - "LimitSegmentLengthHelp": "Włączenie tej opcji może pomóc zapobiec zawieszaniu się odtwarzacza HLS podczas wyszukiwania na niektórych urządzeniach, np. telewizorach z systemem webOS." + "LimitSegmentLengthHelp": "Włączenie tej opcji może pomóc zapobiec zawieszaniu się odtwarzacza HLS podczas wyszukiwania na niektórych urządzeniach, np. telewizorach z systemem webOS.", + "HeaderUpdateRequired": "Wymagana aktualizacja" } From b86e463174efeaeabc361e8617cc9bd979073f16 Mon Sep 17 00:00:00 2001 From: MontejoJorge Date: Wed, 30 Apr 2025 08:21:24 +0200 Subject: [PATCH 128/645] fix navigate path --- src/apps/stable/routes/session/forgotPassword/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/stable/routes/session/forgotPassword/index.tsx b/src/apps/stable/routes/session/forgotPassword/index.tsx index c75ac9d53..9b6485022 100644 --- a/src/apps/stable/routes/session/forgotPassword/index.tsx +++ b/src/apps/stable/routes/session/forgotPassword/index.tsx @@ -54,7 +54,7 @@ export const ForgotPasswordPage = () => { message: msg, title: globalize.translate('ButtonForgotPassword'), callback: function () { - navigate('forgotpasswordpin'); + navigate('/forgotpasswordpin'); } }); } From d5417d010ac6f314ab96d8f9ab92ecc84c11f6a7 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Wed, 30 Apr 2025 14:18:42 +0300 Subject: [PATCH 129/645] Remove deprecated system info fields --- src/apps/dashboard/routes/settings/index.tsx | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/src/apps/dashboard/routes/settings/index.tsx b/src/apps/dashboard/routes/settings/index.tsx index f86614600..b84f26363 100644 --- a/src/apps/dashboard/routes/settings/index.tsx +++ b/src/apps/dashboard/routes/settings/index.tsx @@ -9,7 +9,6 @@ import { useLocalizationOptions } from 'apps/dashboard/features/settings/api/use import Loading from 'components/loading/LoadingComponent'; import Page from 'components/Page'; import { QUERY_KEY, useConfiguration } from 'hooks/useConfiguration'; -import { useSystemInfo } from 'hooks/useSystemInfo'; import globalize from 'lib/globalize'; import { ServerConnections } from 'lib/jellyfin-apiclient'; import React, { useCallback, useEffect, useState } from 'react'; @@ -64,11 +63,6 @@ export const Component = () => { isPending: isLocalizationOptionsPending, isError: isLocalizationOptionsError } = useLocalizationOptions(); - const { - data: systemInfo, - isPending: isSystemInfoPending, - isError: isSystemInfoError - } = useSystemInfo(); const navigation = useNavigation(); const actionData = useActionData() as ActionData | undefined; @@ -120,13 +114,13 @@ export const Component = () => { }, [metadataPath]); useEffect(() => { - if (!isSystemInfoPending && !isSystemInfoError) { - setCachePath(systemInfo.CachePath); - setMetadataPath(systemInfo.InternalMetadataPath); + if (!isConfigPending && !isConfigError) { + setCachePath(config.CachePath); + setMetadataPath(config.MetadataPath); } - }, [systemInfo, isSystemInfoPending, isSystemInfoError]); + }, [config, isConfigPending, isConfigError]); - if (isConfigPending || isLocalizationOptionsPending || isSystemInfoPending) { + if (isConfigPending || isLocalizationOptionsPending) { return ; } @@ -137,7 +131,7 @@ export const Component = () => { className='type-interior mainAnimatedPage' > - {isConfigError || isLocalizationOptionsError || isSystemInfoError ? ( + {isConfigError || isLocalizationOptionsError ? ( {globalize.translate('SettingsPageLoadError')} ) : (
@@ -154,7 +148,7 @@ export const Component = () => { name='ServerName' label={globalize.translate('LabelServerName')} helperText={globalize.translate('LabelServerNameHelp')} - defaultValue={systemInfo.ServerName} + defaultValue={config.ServerName} /> Date: Wed, 30 Apr 2025 19:48:22 +0200 Subject: [PATCH 130/645] Update src/apps/stable/routes/session/forgotPassword/index.tsx Co-authored-by: Bill Thornton --- src/apps/stable/routes/session/forgotPassword/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/stable/routes/session/forgotPassword/index.tsx b/src/apps/stable/routes/session/forgotPassword/index.tsx index 9b6485022..8458977f5 100644 --- a/src/apps/stable/routes/session/forgotPassword/index.tsx +++ b/src/apps/stable/routes/session/forgotPassword/index.tsx @@ -77,7 +77,7 @@ export const ForgotPasswordPage = () => { return (
Date: Wed, 30 Apr 2025 19:58:38 +0200 Subject: [PATCH 131/645] use switch --- .../routes/session/forgotPassword/index.tsx | 53 +++++++++---------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/src/apps/stable/routes/session/forgotPassword/index.tsx b/src/apps/stable/routes/session/forgotPassword/index.tsx index 9b6485022..0fe81e7c0 100644 --- a/src/apps/stable/routes/session/forgotPassword/index.tsx +++ b/src/apps/stable/routes/session/forgotPassword/index.tsx @@ -29,35 +29,34 @@ export const ForgotPasswordPage = () => { return response.data; }, onSuccess: (result) => { - if (result.Action == ForgotPasswordAction.ContactAdmin) { - Dashboard.alert({ - message: globalize.translate('MessageContactAdminToResetPassword'), - title: globalize.translate('ButtonForgotPassword') - }); + let msg = ''; + let callback: () => void | undefined = () => undefined; + + switch (result.Action) { + case ForgotPasswordAction.ContactAdmin: + msg = globalize.translate('MessageContactAdminToResetPassword'); + break; + case ForgotPasswordAction.InNetworkRequired: + msg = globalize.translate('MessageForgotPasswordInNetworkRequired'); + break; + case ForgotPasswordAction.PinCode: + msg = globalize.translate('MessageForgotPasswordFileCreated'); + msg += '

'; + msg += globalize.translate('MessageForgotPasswordPinReset'); + msg += '

'; + msg += result.PinFile; + msg += '
'; + callback = () => navigate('/forgotpasswordpin'); + break; + default: + return; } - if (result.Action == ForgotPasswordAction.InNetworkRequired) { - Dashboard.alert({ - message: globalize.translate('MessageForgotPasswordInNetworkRequired'), - title: globalize.translate('ButtonForgotPassword') - }); - } - - if (result.Action == ForgotPasswordAction.PinCode) { - let msg = globalize.translate('MessageForgotPasswordFileCreated'); - msg += '

'; - msg += globalize.translate('MessageForgotPasswordPinReset'); - msg += '

'; - msg += result.PinFile; - msg += '
'; - Dashboard.alert({ - message: msg, - title: globalize.translate('ButtonForgotPassword'), - callback: function () { - navigate('/forgotpasswordpin'); - } - }); - } + Dashboard.alert({ + message: msg, + title: globalize.translate('ButtonForgotPassword'), + callback: callback + }); } }); From dc460d3872e773efd206d286facf34e7c2e0bad2 Mon Sep 17 00:00:00 2001 From: Kityn Date: Wed, 30 Apr 2025 12:17:28 -0400 Subject: [PATCH 132/645] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 54c040f13..f73c6f601 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -2027,5 +2027,6 @@ "ReadInputAtNativeFramerateHelp": "Włączenie tej opcji może rozwiązać niektóre problemy, np. przedwczesne kończenie transmisji na żywo.", "LimitSegmentLength": "Użyj krótszych segmentów HLS", "LimitSegmentLengthHelp": "Włączenie tej opcji może pomóc zapobiec zawieszaniu się odtwarzacza HLS podczas wyszukiwania na niektórych urządzeniach, np. telewizorach z systemem webOS.", - "HeaderUpdateRequired": "Wymagana aktualizacja" + "HeaderUpdateRequired": "Wymagana aktualizacja", + "HeaderServerUnavailable": "Serwer niedostępny" } From bb810a183a3a083f81095e1486ac063f62c8f838 Mon Sep 17 00:00:00 2001 From: "Thadah D. Denyse" Date: Wed, 30 Apr 2025 12:55:54 -0400 Subject: [PATCH 133/645] Translated using Weblate (Basque) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/eu/ --- src/strings/eu.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/strings/eu.json b/src/strings/eu.json index 20948906f..9d158ead7 100644 --- a/src/strings/eu.json +++ b/src/strings/eu.json @@ -248,7 +248,7 @@ "SettingsSaved": "Konfigurazio gordea.", "Settings": "Ezarpenak", "ServerUpdateNeeded": "Zerbitzaria eguneratu egin behar da. Azken bertsioa deskargatzeko, bisitatu {0}", - "ServerRestartNeededAfterPluginInstall": "Jellyfin berriz hasi beharko da osagarri bat instalatu ondoren.", + "ServerRestartNeededAfterPluginInstall": "Jellyfin berrabiarazi beharko da plugina instalatu ondoren.", "ServerNameIsShuttingDown": "{0}(e)ko zerbitzaria itzaltzen ari da.", "ServerNameIsRestarting": "{0}(e)ko zerbitzaria berrabiarazten ari da.", "SeriesYearToPresent": "{0} - Gaur egun", @@ -1711,5 +1711,10 @@ "DisableVbrAudioEncodingHelp": "Eragotzi zerbitzariari bezero honentzat VBR-rekin audioa kodetzea.", "PlaybackError.MEDIA_NOT_SUPPORTED": "Erreprodukzioak huts egin du bezero honek ez duelako multimedia onartzen.", "LimitSupportedVideoResolutionHelp": "Erabili 'Bideoa transkodetzeko gehienezko bereizmena' onartutako bideo bereizmen maximo gisa.", - "LyricDownloadersHelp": "Gaitu eta sailkatu zure letra deskargatzaile gogokoenak lehentasunaren arabera." + "LyricDownloadersHelp": "Gaitu eta sailkatu zure letra deskargatzaile gogokoenak lehentasunaren arabera.", + "EnableLibraryHelp": "Liburutegia desgaitzeak erabiltzaile guztien ikuspegietatik ezkutatuko du.", + "BlockContentWithTagsHelp": "Ezkutatu gutxienez zehaztutako etiketa bat duen multimedia.", + "PreferNonstandardArtistsTagHelp": "Erabili ARTISTS etiketa ez-estandarra ARTIST etiketaren ordez, eskuragarri dagoenean.", + "LabelTileHeightHelp": "Y norabidean teila bakoitzeko irudi kopuru maximoa.", + "LabelTileWidthHelp": "X norabidean teila bakoitzeko irudi kopuru maximoa." } From ac28346aceb3797570e036d03e6b21739073e763 Mon Sep 17 00:00:00 2001 From: MontejoJorge Date: Wed, 30 Apr 2025 20:06:12 +0200 Subject: [PATCH 134/645] use SimpleAlert component --- .../routes/session/forgotPassword/index.tsx | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/apps/stable/routes/session/forgotPassword/index.tsx b/src/apps/stable/routes/session/forgotPassword/index.tsx index 0fe81e7c0..2e3045e24 100644 --- a/src/apps/stable/routes/session/forgotPassword/index.tsx +++ b/src/apps/stable/routes/session/forgotPassword/index.tsx @@ -5,14 +5,17 @@ import globalize from 'lib/globalize'; import Button from 'elements/emby-button/Button'; import Input from 'elements/emby-input/Input'; import { useMutation } from '@tanstack/react-query'; -import Dashboard from 'utils/dashboard'; import { getUserApi } from '@jellyfin/sdk/lib/utils/api/user-api'; import { ForgotPasswordAction } from '@jellyfin/sdk/lib/generated-client/models/forgot-password-action'; import ServerConnections from 'components/ServerConnections'; +import SimpleAlert from 'components/SimpleAlert'; export const ForgotPasswordPage = () => { const navigate = useNavigate(); const [username, setUsername] = useState(''); + const [isAlertOpen, setIsAlertOpen] = useState(false); + const [alertMessage, setAlertMessage] = useState(''); + const [alertCallback, setAlertCallback] = useState<(() => void) | undefined>(undefined); const forgotPasswordMutation = useMutation({ mutationFn: async (enteredUsername: string) => { @@ -41,22 +44,17 @@ export const ForgotPasswordPage = () => { break; case ForgotPasswordAction.PinCode: msg = globalize.translate('MessageForgotPasswordFileCreated'); - msg += '

'; - msg += globalize.translate('MessageForgotPasswordPinReset'); - msg += '

'; + msg += ': '; msg += result.PinFile; - msg += '
'; callback = () => navigate('/forgotpasswordpin'); break; default: return; } - Dashboard.alert({ - message: msg, - title: globalize.translate('ButtonForgotPassword'), - callback: callback - }); + setAlertMessage(msg); + setAlertCallback(() => callback); + setIsAlertOpen(true); } }); @@ -73,11 +71,23 @@ export const ForgotPasswordPage = () => { setUsername(e.target.value); }, []); + const handleAlertClose = useCallback(() => { + setIsAlertOpen(false); + if (alertCallback) { + alertCallback(); + } + }, [alertCallback]); + return ( +
Date: Wed, 30 Apr 2025 17:41:36 -0400 Subject: [PATCH 135/645] Add constants for app features --- .../components/DisplayPreferences.tsx | 5 +- .../components/LocalizationPreferences.tsx | 9 +-- .../preferences/hooks/useDisplaySettings.ts | 3 +- .../stable/routes/user/settings/index.tsx | 7 ++- src/apps/stable/routes/user/userprofile.tsx | 3 +- src/components/ConnectionErrorPage.tsx | 3 +- src/components/apphost.js | 59 +++++++------------ .../displaySettings/displaySettings.js | 12 ++-- .../imageDownloader/imageDownloader.js | 3 +- src/components/imageeditor/imageeditor.js | 3 +- src/components/itemContextMenu.js | 3 +- src/components/itemHelper.js | 3 +- src/components/multiSelect/multiSelect.js | 3 +- src/components/nowPlayingBar/nowPlayingBar.js | 5 +- src/components/playback/playbackmanager.js | 11 ++-- .../playback/playerSelectionMenu.js | 3 +- .../playbackSettings/playbackSettings.js | 7 ++- src/components/remotecontrol/remotecontrol.js | 3 +- src/components/slideshow/slideshow.js | 9 +-- .../subtitleeditor/subtitleeditor.js | 4 +- .../subtitlesettings/subtitlesettings.js | 5 +- src/components/toolbar/AppUserMenu.tsx | 7 ++- src/constants/appFeature.ts | 57 ++++++++++++++++++ src/controllers/itemDetails/index.js | 7 ++- src/controllers/playback/video/index.js | 11 ++-- src/controllers/session/login/index.js | 7 ++- src/elements/emby-button/LinkButton.tsx | 17 +++--- src/elements/emby-button/emby-button.js | 17 +++--- src/index.jsx | 7 ++- src/plugins/htmlAudioPlayer/plugin.js | 6 +- src/plugins/htmlVideoPlayer/plugin.js | 14 +++-- .../syncPlay/ui/playbackPermissionManager.js | 5 +- src/scripts/inputManager.js | 13 ++-- src/scripts/libraryMenu.js | 9 +-- 34 files changed, 211 insertions(+), 129 deletions(-) create mode 100644 src/constants/appFeature.ts diff --git a/src/apps/experimental/features/preferences/components/DisplayPreferences.tsx b/src/apps/experimental/features/preferences/components/DisplayPreferences.tsx index 6977459c6..e5e940b7a 100644 --- a/src/apps/experimental/features/preferences/components/DisplayPreferences.tsx +++ b/src/apps/experimental/features/preferences/components/DisplayPreferences.tsx @@ -11,6 +11,7 @@ import Typography from '@mui/material/Typography'; import React, { Fragment } from 'react'; import { appHost } from 'components/apphost'; +import { AppFeature } from 'constants/appFeature'; import { useApi } from 'hooks/useApi'; import { useThemes } from 'hooks/useThemes'; import globalize from 'lib/globalize'; @@ -32,7 +33,7 @@ export function DisplayPreferences({ onChange, values }: Readonly {globalize.translate('Display')} - { appHost.supports('displaymode') && ( + { appHost.supports(AppFeature.DisplayMode) && ( {globalize.translate('LabelDisplayMode')} {globalize.translate('LabelDisplayLanguageHelp')} - { appHost.supports('externallinks') && ( + { appHost.supports(AppFeature.ExternalLinks) && ( {
- {appHost.supports('clientsettings') && ( + {appHost.supports(AppFeature.ClientSettings) && ( { {globalize.translate('HeaderUser')} - {appHost.supports('multiserver') && ( + {appHost.supports(AppFeature.MultiServer) && ( {
- {appHost.supports('exitmenu') && ( + {appHost.supports(AppFeature.ExitMenu) && ( { const [ searchParams ] = useSearchParams(); @@ -61,7 +62,7 @@ const UserProfile: FunctionComponent = () => { if (user.PrimaryImageTag) { (page.querySelector('#btnAddImage') as HTMLButtonElement).classList.add('hide'); (page.querySelector('#btnDeleteImage') as HTMLButtonElement).classList.remove('hide'); - } else if (appHost.supports('fileinput') && (loggedInUser?.Policy?.IsAdministrator || user.Policy.EnableUserPreferenceAccess)) { + } else if (appHost.supports(AppFeature.FileInput) && (loggedInUser?.Policy?.IsAdministrator || user.Policy.EnableUserPreferenceAccess)) { (page.querySelector('#btnDeleteImage') as HTMLButtonElement).classList.add('hide'); (page.querySelector('#btnAddImage') as HTMLButtonElement).classList.remove('hide'); } diff --git a/src/components/ConnectionErrorPage.tsx b/src/components/ConnectionErrorPage.tsx index 3dae182b7..3dd69494b 100644 --- a/src/components/ConnectionErrorPage.tsx +++ b/src/components/ConnectionErrorPage.tsx @@ -2,6 +2,7 @@ import React, { FC, useEffect, useState } from 'react'; import { appHost } from 'components/apphost'; import Page from 'components/Page'; +import { AppFeature } from 'constants/appFeature'; import LinkButton from 'elements/emby-button/LinkButton'; import globalize from 'lib/globalize'; import { ConnectionState } from 'lib/jellyfin-apiclient'; @@ -50,7 +51,7 @@ const ConnectionErrorPage: FC = ({ {message && (

{message}

)} - {appHost.supports('multiserver') && ( + {appHost.supports(AppFeature.MultiServer) && ( { - if (enabled) features.push('multiserver'); + if (enabled) features.push(AppFeature.MultiServer); }); if (!browser.orsay && (browser.firefox || browser.ps4 || browser.edge || supportsCue())) { - features.push('subtitleappearancesettings'); + features.push(AppFeature.SubtitleAppearance); } if (!browser.orsay) { - features.push('subtitleburnsettings'); + features.push(AppFeature.SubtitleBurnIn); } if (!browser.tv && !browser.ps4 && !browser.xboxOne) { - features.push('fileinput'); + features.push(AppFeature.FileInput); } if (browser.chrome || browser.edgeChromium) { - features.push('chromecast'); + features.push(AppFeature.Chromecast); } return features; diff --git a/src/components/displaySettings/displaySettings.js b/src/components/displaySettings/displaySettings.js index 21eef9f28..7ca0e11b6 100644 --- a/src/components/displaySettings/displaySettings.js +++ b/src/components/displaySettings/displaySettings.js @@ -1,4 +1,6 @@ import escapeHtml from 'escape-html'; + +import { AppFeature } from 'constants/appFeature'; import browser from '../../scripts/browser'; import layoutManager from '../layoutManager'; import { pluginManager } from '../pluginManager'; @@ -68,19 +70,19 @@ function showOrHideMissingEpisodesField(context) { } function loadForm(context, user, userSettings) { - if (appHost.supports('displaylanguage')) { + if (appHost.supports(AppFeature.DisplayLanguage)) { context.querySelector('.languageSection').classList.remove('hide'); } else { context.querySelector('.languageSection').classList.add('hide'); } - if (appHost.supports('displaymode')) { + if (appHost.supports(AppFeature.DisplayMode)) { context.querySelector('.fldDisplayMode').classList.remove('hide'); } else { context.querySelector('.fldDisplayMode').classList.add('hide'); } - if (appHost.supports('externallinks')) { + if (appHost.supports(AppFeature.ExternalLinks)) { context.querySelector('.learnHowToContributeContainer').classList.remove('hide'); } else { context.querySelector('.learnHowToContributeContainer').classList.add('hide'); @@ -88,7 +90,7 @@ function loadForm(context, user, userSettings) { context.querySelector('.selectDashboardThemeContainer').classList.toggle('hide', !user.Policy.IsAdministrator); - if (appHost.supports('screensaver')) { + if (appHost.supports(AppFeature.Screensaver)) { context.querySelector('.selectScreensaverContainer').classList.remove('hide'); context.querySelector('.txtBackdropScreensaverIntervalContainer').classList.remove('hide'); context.querySelector('.txtScreensaverTimeContainer').classList.remove('hide'); @@ -143,7 +145,7 @@ function loadForm(context, user, userSettings) { function saveUser(context, user, userSettingsInstance, apiClient) { user.Configuration.DisplayMissingEpisodes = context.querySelector('.chkDisplayMissingEpisodes').checked; - if (appHost.supports('displaylanguage')) { + if (appHost.supports(AppFeature.DisplayLanguage)) { userSettingsInstance.language(context.querySelector('#selectLanguage').value); } diff --git a/src/components/imageDownloader/imageDownloader.js b/src/components/imageDownloader/imageDownloader.js index b4ddaf85d..77d9f1706 100644 --- a/src/components/imageDownloader/imageDownloader.js +++ b/src/components/imageDownloader/imageDownloader.js @@ -1,3 +1,4 @@ +import { AppFeature } from 'constants/appFeature'; import dom from '../../scripts/dom'; import loading from '../loading/loading'; import { appHost } from '../apphost'; @@ -205,7 +206,7 @@ function getRemoteImageHtml(image, imageType) { html += '
'; html += '
'; - if (layoutManager.tv || !appHost.supports('externallinks')) { + if (layoutManager.tv || !appHost.supports(AppFeature.ExternalLinks)) { html += '
'; } else { html += ''; diff --git a/src/components/imageeditor/imageeditor.js b/src/components/imageeditor/imageeditor.js index ab5f7832d..28716bfa3 100644 --- a/src/components/imageeditor/imageeditor.js +++ b/src/components/imageeditor/imageeditor.js @@ -1,3 +1,4 @@ +import { AppFeature } from 'constants/appFeature'; import dialogHelper from '../dialogHelper/dialogHelper'; import loading from '../loading/loading'; import dom from '../../scripts/dom'; @@ -339,7 +340,7 @@ function showActionSheet(context, imageCard) { function initEditor(context, options) { const uploadButtons = context.querySelectorAll('.btnOpenUploadMenu'); - const isFileInputSupported = appHost.supports('fileinput'); + const isFileInputSupported = appHost.supports(AppFeature.FileInput); for (let i = 0, length = uploadButtons.length; i < length; i++) { if (isFileInputSupported) { uploadButtons[i].classList.remove('hide'); diff --git a/src/components/itemContextMenu.js b/src/components/itemContextMenu.js index 959b391d8..172e77e5e 100644 --- a/src/components/itemContextMenu.js +++ b/src/components/itemContextMenu.js @@ -11,6 +11,7 @@ import { playbackManager } from './playback/playbackmanager'; import toast from './toast/toast'; import * as userSettings from '../scripts/settings/userSettings'; import { BaseItemKind } from '@jellyfin/sdk/lib/generated-client/models/base-item-kind'; +import { AppFeature } from 'constants/appFeature'; function getDeleteLabel(type) { switch (type) { @@ -169,7 +170,7 @@ export async function getCommands(options) { }); } - if (appHost.supports('filedownload')) { + if (appHost.supports(AppFeature.FileDownload)) { // CanDownload should probably be updated to return true for these items? if (user.Policy.EnableContentDownloading && (item.Type === 'Season' || item.Type == 'Series')) { commands.push({ diff --git a/src/components/itemHelper.js b/src/components/itemHelper.js index fa8aadbdd..f21ce6e06 100644 --- a/src/components/itemHelper.js +++ b/src/components/itemHelper.js @@ -6,6 +6,7 @@ import { MediaType } from '@jellyfin/sdk/lib/generated-client/models/media-type' import { getPlaylistsApi } from '@jellyfin/sdk/lib/utils/api/playlists-api'; import { appHost } from './apphost'; +import { AppFeature } from 'constants/appFeature'; import globalize from 'lib/globalize'; import { ServerConnections } from 'lib/jellyfin-apiclient'; import { toApi } from 'utils/jellyfin-apiclient/compat'; @@ -238,7 +239,7 @@ export function canShare (item, user) { if (isLocalItem(item)) { return false; } - return user.Policy.EnablePublicSharing && appHost.supports('sharing'); + return user.Policy.EnablePublicSharing && appHost.supports(AppFeature.Sharing); } export function enableDateAddedDisplay (item) { diff --git a/src/components/multiSelect/multiSelect.js b/src/components/multiSelect/multiSelect.js index 95e59d9ca..d6ad634cf 100644 --- a/src/components/multiSelect/multiSelect.js +++ b/src/components/multiSelect/multiSelect.js @@ -1,3 +1,4 @@ +import { AppFeature } from 'constants/appFeature'; import browser from '../../scripts/browser'; import { appHost } from '../apphost'; import loading from '../loading/loading'; @@ -198,7 +199,7 @@ function showMenuForSelectedItems(e) { }); } - if (user.Policy.EnableContentDownloading && appHost.supports('filedownload')) { + if (user.Policy.EnableContentDownloading && appHost.supports(AppFeature.FileDownload)) { // Disabled because there is no callback for this item } diff --git a/src/components/nowPlayingBar/nowPlayingBar.js b/src/components/nowPlayingBar/nowPlayingBar.js index 0184cec0b..9dd5d0952 100644 --- a/src/components/nowPlayingBar/nowPlayingBar.js +++ b/src/components/nowPlayingBar/nowPlayingBar.js @@ -1,6 +1,7 @@ import { getImageUrl } from 'apps/stable/features/playback/utils/image'; import { getItemTextLines } from 'apps/stable/features/playback/utils/itemText'; import { appRouter, isLyricsPage } from 'components/router/appRouter'; +import { AppFeature } from 'constants/appFeature'; import { ServerConnections } from 'lib/jellyfin-apiclient'; import datetime from '../../scripts/datetime'; @@ -244,7 +245,7 @@ function bindEvents(elem) { toggleRepeatButtonIcon = toggleRepeatButton.querySelector('.material-icons'); - volumeSliderContainer.classList.toggle('hide', appHost.supports('physicalvolumecontrol')); + volumeSliderContainer.classList.toggle('hide', appHost.supports(AppFeature.PhysicalVolumeControl)); volumeSlider.addEventListener('input', (e) => { if (currentPlayer) { @@ -441,7 +442,7 @@ function updatePlayerVolumeState(isMuted, volumeLevel) { showVolumeSlider = false; } - if (currentPlayer.isLocalPlayer && appHost.supports('physicalvolumecontrol')) { + if (currentPlayer.isLocalPlayer && appHost.supports(AppFeature.PhysicalVolumeControl)) { showMuteButton = false; showVolumeSlider = false; } diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index b3c519111..1b5aee732 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -24,6 +24,7 @@ import { getItemBackdropImageUrl } from '../../utils/jellyfin-apiclient/backdrop import { PlayerEvent } from 'apps/stable/features/playback/constants/playerEvent'; import { bindMediaSegmentManager } from 'apps/stable/features/playback/utils/mediaSegmentManager'; import { bindMediaSessionSubscriber } from 'apps/stable/features/playback/utils/mediaSessionSubscriber'; +import { AppFeature } from 'constants/appFeature'; import { ServerConnections } from 'lib/jellyfin-apiclient'; import { MediaError } from 'types/mediaError'; import { getMediaError } from 'utils/mediaError'; @@ -41,7 +42,7 @@ function enableLocalPlaylistManagement(player) { } function supportsPhysicalVolumeControl(player) { - return player.isLocalPlayer && appHost.supports('physicalvolumecontrol'); + return player.isLocalPlayer && appHost.supports(AppFeature.PhysicalVolumeControl); } function bindToFullscreenChange(player) { @@ -317,7 +318,7 @@ function getAudioStreamUrl(item, transcodingProfile, directPlayContainers, apiCl PlaySessionId: startingPlaySession, StartTimeTicks: startPosition || 0, EnableRedirection: true, - EnableRemoteMedia: appHost.supports('remoteaudio'), + EnableRemoteMedia: appHost.supports(AppFeature.RemoteAudio), EnableAudioVbrEncoding: transcodingProfile.EnableAudioVbrEncoding }); } @@ -598,7 +599,7 @@ function supportsDirectPlay(apiClient, item, mediaSource) { const isFolderRip = mediaSource.VideoType === 'BluRay' || mediaSource.VideoType === 'Dvd' || mediaSource.VideoType === 'HdDvd'; if (mediaSource.SupportsDirectPlay || isFolderRip) { - if (mediaSource.IsRemote && !appHost.supports('remotevideo')) { + if (mediaSource.IsRemote && !appHost.supports(AppFeature.RemoteVideo)) { return Promise.resolve(false); } @@ -3689,7 +3690,7 @@ export class PlaybackManager { return streamInfo ? streamInfo.playbackStartTimeTicks : null; }; - if (appHost.supports('remotecontrol')) { + if (appHost.supports(AppFeature.RemoteControl)) { import('../../scripts/serverNotifications').then(({ default: serverNotifications }) => { Events.on(serverNotifications, 'ServerShuttingDown', self.setDefaultPlayerActive.bind(self)); Events.on(serverNotifications, 'ServerRestarting', self.setDefaultPlayerActive.bind(self)); @@ -4060,7 +4061,7 @@ export class PlaybackManager { 'PlayTrailers' ]; - if (appHost.supports('fullscreenchange')) { + if (appHost.supports(AppFeature.Fullscreen)) { list.push('ToggleFullscreen'); } diff --git a/src/components/playback/playerSelectionMenu.js b/src/components/playback/playerSelectionMenu.js index 36de970a8..9aedf8217 100644 --- a/src/components/playback/playerSelectionMenu.js +++ b/src/components/playback/playerSelectionMenu.js @@ -1,3 +1,4 @@ +import { AppFeature } from 'constants/appFeature'; import Events from '../../utils/events.ts'; import browser from '../../scripts/browser'; import loading from '../loading/loading'; @@ -96,7 +97,7 @@ export function show(button) { // Unfortunately we can't allow the url to change or chromecast will throw a security error // Might be able to solve this in the future by moving the dialogs to hashbangs - if (!(!browser.chrome && !browser.edgeChromium || appHost.supports('castmenuhashchange'))) { + if (!(!browser.chrome && !browser.edgeChromium || appHost.supports(AppFeature.CastMenuHashChange))) { menuOptions.enableHistory = false; } diff --git a/src/components/playbackSettings/playbackSettings.js b/src/components/playbackSettings/playbackSettings.js index 0050e0c66..a98b3ab3f 100644 --- a/src/components/playbackSettings/playbackSettings.js +++ b/src/components/playbackSettings/playbackSettings.js @@ -3,6 +3,7 @@ import escapeHTML from 'escape-html'; import { MediaSegmentAction } from 'apps/stable/features/playback/constants/mediaSegmentAction'; import { getId, getMediaSegmentAction } from 'apps/stable/features/playback/utils/mediaSegmentSettings'; +import { AppFeature } from 'constants/appFeature'; import { ServerConnections } from 'lib/jellyfin-apiclient'; import appSettings from '../../scripts/settings/appSettings'; @@ -147,7 +148,7 @@ function showHideQualityFields(context, user, apiClient) { context.querySelector('.videoQualitySection').classList.add('hide'); } - if (appHost.supports('multiserver')) { + if (appHost.supports(AppFeature.MultiServer)) { context.querySelector('.fldVideoInNetworkQuality').classList.remove('hide'); context.querySelector('.fldVideoInternetQuality').classList.remove('hide'); @@ -204,7 +205,7 @@ function loadForm(context, user, userSettings, systemInfo, apiClient) { context.querySelector('.chkEpisodeAutoPlay').checked = user.Configuration.EnableNextEpisodeAutoPlay || false; }); - if (appHost.supports('externalplayerintent') && userId === loggedInUserId) { + if (appHost.supports(AppFeature.ExternalPlayerIntent) && userId === loggedInUserId) { context.querySelector('.fldExternalPlayer').classList.remove('hide'); } else { context.querySelector('.fldExternalPlayer').classList.add('hide'); @@ -213,7 +214,7 @@ function loadForm(context, user, userSettings, systemInfo, apiClient) { if (userId === loggedInUserId && (user.Policy.EnableVideoPlaybackTranscoding || user.Policy.EnableAudioPlaybackTranscoding)) { context.querySelector('.qualitySections').classList.remove('hide'); - if (appHost.supports('chromecast') && user.Policy.EnableVideoPlaybackTranscoding) { + if (appHost.supports(AppFeature.Chromecast) && user.Policy.EnableVideoPlaybackTranscoding) { context.querySelector('.fldChromecastQuality').classList.remove('hide'); } else { context.querySelector('.fldChromecastQuality').classList.add('hide'); diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index a2d32ed24..bbef1931b 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -2,6 +2,7 @@ import escapeHtml from 'escape-html'; import { getImageUrl } from 'apps/stable/features/playback/utils/image'; import { getItemTextLines } from 'apps/stable/features/playback/utils/itemText'; +import { AppFeature } from 'constants/appFeature'; import datetime from '../../scripts/datetime'; import { clearBackdrop, setBackdrops } from '../backdrop/backdrop'; @@ -371,7 +372,7 @@ export default function () { showVolumeSlider = false; } - if (currentPlayer.isLocalPlayer && appHost.supports('physicalvolumecontrol')) { + if (currentPlayer.isLocalPlayer && appHost.supports(AppFeature.PhysicalVolumeControl)) { showMuteButton = false; showVolumeSlider = false; } diff --git a/src/components/slideshow/slideshow.js b/src/components/slideshow/slideshow.js index 49bf8dc1e..04f728c37 100644 --- a/src/components/slideshow/slideshow.js +++ b/src/components/slideshow/slideshow.js @@ -2,6 +2,7 @@ * Image viewer component * @module components/slideshow/slideshow */ +import { AppFeature } from 'constants/appFeature'; import dialogHelper from '../dialogHelper/dialogHelper'; import { ServerConnections } from 'lib/jellyfin-apiclient'; import inputManager from '../../scripts/inputManager'; @@ -172,10 +173,10 @@ export default function (options) { if (actionButtonsOnTop) { html += getIcon('play_arrow', 'btnSlideshowPause slideshowButton', true); - if (appHost.supports('filedownload') && slideshowOptions.user?.Policy.EnableContentDownloading) { + if (appHost.supports(AppFeature.FileDownload) && slideshowOptions.user?.Policy.EnableContentDownloading) { html += getIcon('file_download', 'btnDownload slideshowButton', true); } - if (appHost.supports('sharing')) { + if (appHost.supports(AppFeature.Sharing)) { html += getIcon('share', 'btnShare slideshowButton', true); } if (screenfull.isEnabled) { @@ -190,10 +191,10 @@ export default function (options) { html += '
'; html += getIcon('play_arrow', 'btnSlideshowPause slideshowButton', true, true); - if (appHost.supports('filedownload') && slideshowOptions?.user.Policy.EnableContentDownloading) { + if (appHost.supports(AppFeature.FileDownload) && slideshowOptions?.user.Policy.EnableContentDownloading) { html += getIcon('file_download', 'btnDownload slideshowButton', true); } - if (appHost.supports('sharing')) { + if (appHost.supports(AppFeature.Sharing)) { html += getIcon('share', 'btnShare slideshowButton', true); } if (screenfull.isEnabled) { diff --git a/src/components/subtitleeditor/subtitleeditor.js b/src/components/subtitleeditor/subtitleeditor.js index fa4d71e84..9a110c206 100644 --- a/src/components/subtitleeditor/subtitleeditor.js +++ b/src/components/subtitleeditor/subtitleeditor.js @@ -1,4 +1,6 @@ import escapeHtml from 'escape-html'; + +import { AppFeature } from 'constants/appFeature'; import { appHost } from '../apphost'; import dialogHelper from '../dialogHelper/dialogHelper'; import layoutManager from '../layoutManager'; @@ -440,7 +442,7 @@ function showEditorInternal(itemId, serverId) { } // Don't allow redirection to other websites from the TV layout - if (layoutManager.tv || !appHost.supports('externallinks')) { + if (layoutManager.tv || !appHost.supports(AppFeature.ExternalLinks)) { dlg.querySelector('.btnHelp').remove(); } diff --git a/src/components/subtitlesettings/subtitlesettings.js b/src/components/subtitlesettings/subtitlesettings.js index ee8b2c3ed..d16662943 100644 --- a/src/components/subtitlesettings/subtitlesettings.js +++ b/src/components/subtitlesettings/subtitlesettings.js @@ -1,3 +1,4 @@ +import { AppFeature } from 'constants/appFeature'; import globalize from '../../lib/globalize'; import { ServerConnections } from 'lib/jellyfin-apiclient'; import { appHost } from '../apphost'; @@ -40,7 +41,7 @@ function getSubtitleAppearanceObject(context) { function loadForm(context, user, userSettings, appearanceSettings, apiClient) { apiClient.getCultures().then(function (allCultures) { - if (appHost.supports('subtitleburnsettings') && user.Policy.EnableVideoPlaybackTranscoding) { + if (appHost.supports(AppFeature.SubtitleBurnIn) && user.Policy.EnableVideoPlaybackTranscoding) { context.querySelector('.fldBurnIn').classList.remove('hide'); } @@ -208,7 +209,7 @@ function embed(options, self) { options.element.querySelector('.btnSave').classList.remove('hide'); } - if (appHost.supports('subtitleappearancesettings')) { + if (appHost.supports(AppFeature.SubtitleAppearance)) { options.element.querySelector('.subtitleAppearanceSection').classList.remove('hide'); self._fullPreview = options.element.querySelector('.subtitleappearance-fullpreview'); diff --git a/src/components/toolbar/AppUserMenu.tsx b/src/components/toolbar/AppUserMenu.tsx index 69a0ad7f8..c374d8314 100644 --- a/src/components/toolbar/AppUserMenu.tsx +++ b/src/components/toolbar/AppUserMenu.tsx @@ -16,6 +16,7 @@ import React, { FC, useCallback } from 'react'; import { Link } from 'react-router-dom'; import { appHost } from 'components/apphost'; +import { AppFeature } from 'constants/appFeature'; import { useApi } from 'hooks/useApi'; import { useQuickConnectEnabled } from 'hooks/useQuickConnect'; import globalize from 'lib/globalize'; @@ -97,7 +98,7 @@ const AppUserMenu: FC = ({ - {appHost.supports('clientsettings') && ([ + {appHost.supports(AppFeature.ClientSettings) && ([ , = ({ )} - {appHost.supports('multiserver') && ( + {appHost.supports(AppFeature.MultiServer) && ( @@ -180,7 +181,7 @@ const AppUserMenu: FC = ({ - {appHost.supports('exitmenu') && ([ + {appHost.supports(AppFeature.ExitMenu) && ([ , ${escapeHtml(location)}`; } else { location = escapeHtml(location); @@ -650,7 +651,7 @@ function reloadFromItem(instance, page, params, item, user) { setPeopleHeader(page, item); loading.hide(); - if (item.Type === 'Book' && item.CanDownload && appHost.supports('filedownload')) { + if (item.Type === 'Book' && item.CanDownload && appHost.supports(AppFeature.FileDownload)) { hideAll(page, 'btnDownload', true); } @@ -1083,7 +1084,7 @@ function renderDetails(page, item, apiClient, context) { renderLyricsContainer(page, item, apiClient); // Don't allow redirection to other websites from the TV layout - if (!layoutManager.tv && appHost.supports('externallinks')) { + if (!layoutManager.tv && appHost.supports(AppFeature.ExternalLinks)) { renderLinks(page, item); } diff --git a/src/controllers/playback/video/index.js b/src/controllers/playback/video/index.js index e0d51005f..c0be4c579 100644 --- a/src/controllers/playback/video/index.js +++ b/src/controllers/playback/video/index.js @@ -1,4 +1,10 @@ import escapeHtml from 'escape-html'; + +import { PlayerEvent } from 'apps/stable/features/playback/constants/playerEvent'; +import { AppFeature } from 'constants/appFeature'; +import { TICKS_PER_MINUTE, TICKS_PER_SECOND } from 'constants/time'; +import { EventType } from 'types/eventType'; + import { playbackManager } from '../../../components/playback/playbackmanager'; import browser from '../../../scripts/browser'; import dom from '../../../scripts/dom'; @@ -27,9 +33,6 @@ import LibraryMenu from '../../../scripts/libraryMenu'; import { setBackdropTransparency, TRANSPARENCY_LEVEL } from '../../../components/backdrop/backdrop'; import { pluginManager } from '../../../components/pluginManager'; import { PluginType } from '../../../types/plugin.ts'; -import { EventType } from 'types/eventType'; -import { TICKS_PER_MINUTE, TICKS_PER_SECOND } from 'constants/time'; -import { PlayerEvent } from 'apps/stable/features/playback/constants/playerEvent'; function getOpenedDialog() { return document.querySelector('.dialogContainer .dialog.opened'); @@ -872,7 +875,7 @@ export default function (view) { showVolumeSlider = false; } - if (player.isLocalPlayer && appHost.supports('physicalvolumecontrol')) { + if (player.isLocalPlayer && appHost.supports(AppFeature.PhysicalVolumeControl)) { showMuteButton = false; showVolumeSlider = false; } diff --git a/src/controllers/session/login/index.js b/src/controllers/session/login/index.js index e99d14da4..2ba0ad6e3 100644 --- a/src/controllers/session/login/index.js +++ b/src/controllers/session/login/index.js @@ -1,5 +1,9 @@ import DOMPurify from 'dompurify'; import markdownIt from 'markdown-it'; + +import { AppFeature } from 'constants/appFeature'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; + import { appHost } from '../../../components/apphost'; import appSettings from '../../../scripts/settings/appSettings'; import dom from '../../../scripts/dom'; @@ -15,7 +19,6 @@ import toast from '../../../components/toast/toast'; import dialogHelper from '../../../components/dialogHelper/dialogHelper'; import baseAlert from '../../../components/alert'; import { getDefaultBackgroundClass } from '../../../components/cardbuilder/cardBuilderUtils'; -import { ServerConnections } from 'lib/jellyfin-apiclient'; import './login.scss'; @@ -263,7 +266,7 @@ export default function (view, params) { loading.show(); libraryMenu.setTransparentMenu(true); - if (!appHost.supports('multiserver')) { + if (!appHost.supports(AppFeature.MultiServer)) { view.querySelector('.btnSelectServer').classList.add('hide'); } diff --git a/src/elements/emby-button/LinkButton.tsx b/src/elements/emby-button/LinkButton.tsx index 359bc0d6b..713aa0cb3 100644 --- a/src/elements/emby-button/LinkButton.tsx +++ b/src/elements/emby-button/LinkButton.tsx @@ -1,9 +1,12 @@ -import React, { AnchorHTMLAttributes, DetailedHTMLProps, MouseEvent, useCallback } from 'react'; import classNames from 'classnames'; -import layoutManager from '../../components/layoutManager'; -import shell from '../../scripts/shell'; -import { appRouter } from '../../components/router/appRouter'; -import { appHost } from '../../components/apphost'; +import React, { AnchorHTMLAttributes, DetailedHTMLProps, MouseEvent, useCallback } from 'react'; + +import { appHost } from 'components/apphost'; +import layoutManager from 'components/layoutManager'; +import { appRouter } from 'components/router/appRouter'; +import { AppFeature } from 'constants/appFeature'; +import shell from 'scripts/shell'; + import './emby-button.scss'; interface LinkButtonProps extends DetailedHTMLProps, @@ -28,7 +31,7 @@ const LinkButton: React.FC = ({ const url = href || ''; if (url !== '#') { if (target) { - if (!appHost.supports('targetblank')) { + if (!appHost.supports(AppFeature.TargetBlank)) { e.preventDefault(); shell.openUrl(url); } @@ -45,7 +48,7 @@ const LinkButton: React.FC = ({ onClick?.(e); }, [ href, target, onClick ]); - if (isAutoHideEnabled === true && !appHost.supports('externallinks')) { + if (isAutoHideEnabled === true && !appHost.supports(AppFeature.ExternalLinks)) { return null; } diff --git a/src/elements/emby-button/emby-button.js b/src/elements/emby-button/emby-button.js index 0349bd38a..d41474c36 100644 --- a/src/elements/emby-button/emby-button.js +++ b/src/elements/emby-button/emby-button.js @@ -1,9 +1,12 @@ import 'webcomponents.js/webcomponents-lite'; -import { removeEventListener, addEventListener } from '../../scripts/dom'; -import layoutManager from '../../components/layoutManager'; -import shell from '../../scripts/shell'; -import { appRouter } from '../../components/router/appRouter'; -import { appHost } from '../../components/apphost'; + +import { appHost } from 'components/apphost'; +import layoutManager from 'components/layoutManager'; +import { appRouter } from 'components/router/appRouter'; +import { AppFeature } from 'constants/appFeature'; +import { removeEventListener, addEventListener } from 'scripts/dom'; +import shell from 'scripts/shell'; + import './emby-button.scss'; const EmbyButtonPrototype = Object.create(HTMLButtonElement.prototype); @@ -13,7 +16,7 @@ function onAnchorClick(e) { const href = this.getAttribute('href') || ''; if (href !== '#') { if (this.getAttribute('target')) { - if (!appHost.supports('targetblank')) { + if (!appHost.supports(AppFeature.TargetBlank)) { e.preventDefault(); shell.openUrl(href); } @@ -46,7 +49,7 @@ EmbyButtonPrototype.attachedCallback = function () { addEventListener(this, 'click', onAnchorClick, {}); if (this.getAttribute('data-autohide') === 'true') { - if (appHost.supports('externallinks')) { + if (appHost.supports(AppFeature.ExternalLinks)) { this.classList.remove('hide'); } else { this.classList.add('hide'); diff --git a/src/index.jsx b/src/index.jsx index 8d57c445f..30e8b8aa6 100644 --- a/src/index.jsx +++ b/src/index.jsx @@ -12,6 +12,7 @@ import autoFocuser from './components/autoFocuser'; import loading from 'components/loading/loading'; import { pluginManager } from './components/pluginManager'; import { appRouter } from './components/router/appRouter'; +import { AppFeature } from 'constants/appFeature'; import globalize from './lib/globalize'; import { loadCoreDictionary } from 'lib/globalize/loader'; import { initialize as initializeAutoCast } from 'scripts/autocast'; @@ -136,7 +137,7 @@ async function loadPlugins() { console.dir(pluginManager); let list = await getPlugins(); - if (!appHost.supports('remotecontrol')) { + if (!appHost.supports(AppFeature.RemoteControl)) { // Disable remote player plugins if not supported list = list.filter(plugin => !plugin.startsWith('sessionPlayer') && !plugin.startsWith('chromecastPlayer')); @@ -165,12 +166,12 @@ function loadPlatformFeatures() { import('./components/nowPlayingBar/nowPlayingBar'); } - if (appHost.supports('remotecontrol')) { + if (appHost.supports(AppFeature.RemoteControl)) { import('./components/playback/playerSelectionMenu'); import('./components/playback/remotecontrolautoplay'); } - if (!appHost.supports('physicalvolumecontrol') || browser.touch) { + if (!appHost.supports(AppFeature.PhysicalVolumeControl) || browser.touch) { import('./components/playback/volumeosd'); } diff --git a/src/plugins/htmlAudioPlayer/plugin.js b/src/plugins/htmlAudioPlayer/plugin.js index b3900aad3..07f7e2d2f 100644 --- a/src/plugins/htmlAudioPlayer/plugin.js +++ b/src/plugins/htmlAudioPlayer/plugin.js @@ -1,3 +1,6 @@ +import { AppFeature } from 'constants/appFeature'; +import { MediaError } from 'types/mediaError'; + import browser from '../../scripts/browser'; import { appHost } from '../../components/apphost'; import * as htmlMediaHelper from '../../components/htmlMediaHelper'; @@ -5,7 +8,6 @@ import profileBuilder from '../../scripts/browserDeviceProfile'; import { getIncludeCorsCredentials } from '../../scripts/settings/webSettings'; import { PluginType } from '../../types/plugin.ts'; import Events from '../../utils/events.ts'; -import { MediaError } from 'types/mediaError'; function getDefaultProfile() { return profileBuilder({}); @@ -278,7 +280,7 @@ class HtmlAudioPlayer { } // TODO: Move volume control to PlaybackManager. Player should just be a wrapper that translates commands into API calls. - if (!appHost.supports('physicalvolumecontrol')) { + if (!appHost.supports(AppFeature.PhysicalVolumeControl)) { elem.volume = htmlMediaHelper.getSavedVolume(); } diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index fcaff8f32..541a13e91 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -1,4 +1,10 @@ import DOMPurify from 'dompurify'; +import debounce from 'lodash-es/debounce'; +import Screenfull from 'screenfull'; + +import { AppFeature } from 'constants/appFeature'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; +import { MediaError } from 'types/mediaError'; import browser from '../../scripts/browser'; import appSettings from '../../scripts/settings/appSettings'; @@ -27,9 +33,7 @@ import { getBufferedRanges } from '../../components/htmlMediaHelper'; import itemHelper from '../../components/itemHelper'; -import Screenfull from 'screenfull'; import globalize from '../../lib/globalize'; -import { ServerConnections } from 'lib/jellyfin-apiclient'; import profileBuilder, { canPlaySecondaryAudio } from '../../scripts/browserDeviceProfile'; import { getIncludeCorsCredentials } from '../../scripts/settings/webSettings'; import { setBackdropTransparency, TRANSPARENCY_LEVEL } from '../../components/backdrop/backdrop'; @@ -37,8 +41,6 @@ import { PluginType } from '../../types/plugin.ts'; import Events from '../../utils/events.ts'; import { includesAny } from '../../utils/container.ts'; import { isHls } from '../../utils/mediaSource.ts'; -import debounce from 'lodash-es/debounce'; -import { MediaError } from 'types/mediaError'; /** * Returns resolved URL. @@ -1667,7 +1669,7 @@ export class HtmlVideoPlayer { const cssClass = 'htmlvideoplayer'; // Can't autoplay in these browsers so we need to use the full controls, at least until playback starts - if (!appHost.supports('htmlvideoautoplay')) { + if (!appHost.supports(AppFeature.HtmlVideoAutoplay)) { html += '
From b08f7d73c1d259c3c60874f3093c20827504b6a8 Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Tue, 13 May 2025 12:24:07 -0400 Subject: [PATCH 247/645] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index 0f38c46e2..061a06b37 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -2026,5 +2026,6 @@ "LimitSegmentLength": "Sử dụng các phân đoạn HLS ngắn hơn", "HeaderServerUnavailable": "Máy Chủ Không Khả Dụng", "HeaderUpdateRequired": "Bắt Buộc Cập Nhập", - "ViewSettings": "Xem cài đặt" + "ViewSettings": "Xem cài đặt", + "MessageForgotPasswordPinReset": "Nhập PIN vào đây để hoàn thành đặt lại Mật Khẩu" } From 7dfc1a1494b76cff316075c4dced92ee52f0eae4 Mon Sep 17 00:00:00 2001 From: Niels van Velzen Date: Tue, 13 May 2025 21:35:15 +0200 Subject: [PATCH 248/645] Add "DownloadManagement" app feature for use in NativeShell clients (#6833) * Add "DownloadManagement" app feature for use in NativeShell clients * Address review feedback * Address review feedback (round 2) --- .../stable/routes/user/settings/index.tsx | 21 ++++++++++++++ src/components/toolbar/AppUserMenu.tsx | 29 ++++++++++++++++--- src/constants/appFeature.ts | 2 ++ src/scripts/shell.js | 5 ++++ src/strings/en-us.json | 1 + 5 files changed, 54 insertions(+), 4 deletions(-) diff --git a/src/apps/stable/routes/user/settings/index.tsx b/src/apps/stable/routes/user/settings/index.tsx index 26145aa6f..393ba7d02 100644 --- a/src/apps/stable/routes/user/settings/index.tsx +++ b/src/apps/stable/routes/user/settings/index.tsx @@ -186,6 +186,27 @@ const UserSettingsPage: FC = () => {
+ {appHost.supports(AppFeature.DownloadManagement) && ( + +
+
+
+ )} + {appHost.supports(AppFeature.ClientSettings) && ( = ({ const { user } = useApi(); const { data: isQuickConnectEnabled } = useQuickConnectEnabled(); + const onDownloadManagerClick = useCallback(() => { + shell.openDownloadManager(); + onMenuClose(); + }, [ onMenuClose ]); + const onClientSettingsClick = useCallback(() => { shell.openClientSettings(); onMenuClose(); @@ -98,10 +104,25 @@ const AppUserMenu: FC = ({ - {appHost.supports(AppFeature.ClientSettings) && ([ - , + {(appHost.supports(AppFeature.DownloadManagement) || appHost.supports(AppFeature.ClientSettings)) && ( + + )} + + {appHost.supports(AppFeature.DownloadManagement) && ( + + + + + + {globalize.translate('DownloadManager')} + + + )} + + {appHost.supports(AppFeature.ClientSettings) && ( @@ -111,7 +132,7 @@ const AppUserMenu: FC = ({ {globalize.translate('ClientSettings')} - ])} + )} {/* ADMIN LINKS */} {user?.Policy?.IsAdministrator && ([ diff --git a/src/constants/appFeature.ts b/src/constants/appFeature.ts index 70d0f68ec..a301ab16c 100644 --- a/src/constants/appFeature.ts +++ b/src/constants/appFeature.ts @@ -10,6 +10,8 @@ export enum AppFeature { DisplayLanguage = 'displaylanguage', /** The app supports configuring the display mode (TV, Desktop, etc.) */ DisplayMode = 'displaymode', + /** The app supports showing a download management interface via a menu entry */ + DownloadManagement = 'downloadmanagement', /** The app can exit via back navigation */ Exit = 'exit', /** The app can be exited via a menu entry */ diff --git a/src/scripts/shell.js b/src/scripts/shell.js index 979db02c8..0f8ecb17e 100644 --- a/src/scripts/shell.js +++ b/src/scripts/shell.js @@ -15,6 +15,11 @@ export default { window.NativeShell.openClientSettings(); } }, + openDownloadManager: () => { + if (window.NativeShell?.openDownloadManager) { + window.NativeShell.openDownloadManager(); + } + }, openUrl: function(url, target) { if (window.NativeShell?.openUrl) { window.NativeShell.openUrl(url, target); diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 5094858ac..8e24c10d5 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -253,6 +253,7 @@ "Down": "Down", "Download": "Download", "DownloadAll": "Download All", + "DownloadManager": "Downloads", "DownloadsValue": "{0} downloads", "DrmChannelsNotImported": "Channels with DRM will not be imported.", "DropShadow": "Drop Shadow", From 94287fb5cd0b993cb13ba5843cb206ce26f0f775 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Tue, 13 May 2025 15:50:18 -0400 Subject: [PATCH 249/645] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 05ab59c2d..7f3b523df 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -2028,5 +2028,6 @@ "LimitSegmentLengthHelp": "Het inschakelen van deze optie kan helpen voorkomen dat de HLS-speler vastloopt tijdens terug- en vooruitspoelen op bepaalde apparaten, zoals webOS-tv's.", "HeaderUpdateRequired": "Bijwerken vereist", "HeaderServerUnavailable": "Server niet beschikbaar", - "MessageForgotPasswordPinReset": "Pincode hier invoeren om wachtwoordherstel te voltooien" + "MessageForgotPasswordPinReset": "Pincode hier invoeren om wachtwoordherstel te voltooien", + "DownloadManager": "Downloads" } From 586e3060e4a574511abd72423a9515466ea325e2 Mon Sep 17 00:00:00 2001 From: Diego Echeverri Date: Tue, 13 May 2025 23:01:18 +0200 Subject: [PATCH 250/645] Handle promise rejection exceptions from actionSheet (#6817) * Add catches to jellyfin * Undo format changes to actionSheet * formatting * Remove logging * commented block for screenshot * Handle another case * weird indentation fix * Add myself as a contributor --- CONTRIBUTORS.md | 1 + src/components/directorybrowser/directorybrowser.js | 4 +++- src/controllers/session/selectServer/index.js | 4 ++-- src/scripts/libraryBrowser.js | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index d53caedaa..ccecf844a 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -98,6 +98,7 @@ - [Jxiced](https://github.com/Jxiced) - [Derek Huber](https://github.com/Derek4aty1) - [StableCrimson](https://github.com/StableCrimson) +- [diegoeche](https://github.com/diegoeche) ## Emby Contributors diff --git a/src/components/directorybrowser/directorybrowser.js b/src/components/directorybrowser/directorybrowser.js index a652e6ae4..133c66380 100644 --- a/src/components/directorybrowser/directorybrowser.js +++ b/src/components/directorybrowser/directorybrowser.js @@ -212,7 +212,9 @@ function initEditor(content, options, fileOptions) { let networkSharePath = this.querySelector('#txtNetworkPath'); networkSharePath = networkSharePath ? networkSharePath.value : null; const path = this.querySelector('#txtDirectoryPickerPath').value; - validatePath(path, options.validateWriteable, ApiClient).then(options.callback(path, networkSharePath)); + validatePath(path, options.validateWriteable, ApiClient).then( + options.callback(path, networkSharePath) + ).catch(() => { /* no-op */ }); } e.preventDefault(); e.stopPropagation(); diff --git a/src/controllers/session/selectServer/index.js b/src/controllers/session/selectServer/index.js index 3ed198677..3b2efb082 100644 --- a/src/controllers/session/selectServer/index.js +++ b/src/controllers/session/selectServer/index.js @@ -175,8 +175,9 @@ export default function (view, params) { case 'delete': deleteServer(server); + break; } - }); + }).catch(() => { /* no-op */ }); } function onServersRetrieved(result) { @@ -221,4 +222,3 @@ export default function (view, params) { } }); } - diff --git a/src/scripts/libraryBrowser.js b/src/scripts/libraryBrowser.js index 9411109b0..830311e51 100644 --- a/src/scripts/libraryBrowser.js +++ b/src/scripts/libraryBrowser.js @@ -34,7 +34,7 @@ export function showLayoutMenu (button, currentLayout, views) { $(button).trigger('layoutchange', [id]); } } - }); + }).catch(() => { /* no-op */ }); }); } From 5d2e7b7da1bc4082aecd9b6e6996f0ba153f1319 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 May 2025 21:10:35 +0000 Subject: [PATCH 251/645] Update CI dependencies --- .github/workflows/__quality_checks.yml | 2 +- .github/workflows/pull_request.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/__quality_checks.yml b/.github/workflows/__quality_checks.yml index 013f81240..42439c66e 100644 --- a/.github/workflows/__quality_checks.yml +++ b/.github/workflows/__quality_checks.yml @@ -20,7 +20,7 @@ jobs: show-progress: false - name: Scan - uses: actions/dependency-review-action@ce3cf9537a52e8119d91fd484ab5b8a807627bf8 # v4.6.0 + uses: actions/dependency-review-action@da24556b548a50705dd671f47852072ea4c105d9 # v4.7.1 with: ## Workaround from https://github.com/actions/dependency-review-action/issues/456 ## TODO: Remove when necessary diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 6f874a5f2..a1fa34dbe 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -95,6 +95,6 @@ jobs: run: npm ci --no-audit - name: Run eslint - uses: CatChen/eslint-suggestion-action@82d525bf0c6a9ff5bdb6c5c5caee6b25971ac766 # v4.1.16 + uses: CatChen/eslint-suggestion-action@04af6ad359e691c79287ee21c478e706fb482d1f # v4.1.17 with: github-token: ${{ secrets.GITHUB_TOKEN }} From 263a3f534fccb421ac2594e223adcc05253931e4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 May 2025 21:13:36 +0000 Subject: [PATCH 252/645] Update dependency @fontsource/noto-sans to v5.2.7 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3bd40456f..5133cafbd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@emotion/react": "11.14.0", "@emotion/styled": "11.14.0", - "@fontsource/noto-sans": "5.2.6", + "@fontsource/noto-sans": "5.2.7", "@fontsource/noto-sans-hk": "5.2.5", "@fontsource/noto-sans-jp": "5.2.5", "@fontsource/noto-sans-kr": "5.2.5", @@ -3885,9 +3885,9 @@ } }, "node_modules/@fontsource/noto-sans": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans/-/noto-sans-5.2.6.tgz", - "integrity": "sha512-46D39T1/QJ16LSbCTaNjjrGS6Y69FMLS9FeHKsrXSQg15Z2MFqmlnNMpURx2l6Sr3x9t9EVdr3CAkHnZyvea+w==", + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans/-/noto-sans-5.2.7.tgz", + "integrity": "sha512-mTpMSMft6Nb+ZSF4DSiJVYnLzKCRjHNFieZ/swuxSDQK+v1hjUeDTBxLHKUdfmC+ZPg6TUEWw4oRq2ltnDbSjQ==", "license": "OFL-1.1", "funding": { "url": "https://github.com/sponsors/ayuhito" @@ -28468,9 +28468,9 @@ } }, "@fontsource/noto-sans": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans/-/noto-sans-5.2.6.tgz", - "integrity": "sha512-46D39T1/QJ16LSbCTaNjjrGS6Y69FMLS9FeHKsrXSQg15Z2MFqmlnNMpURx2l6Sr3x9t9EVdr3CAkHnZyvea+w==" + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans/-/noto-sans-5.2.7.tgz", + "integrity": "sha512-mTpMSMft6Nb+ZSF4DSiJVYnLzKCRjHNFieZ/swuxSDQK+v1hjUeDTBxLHKUdfmC+ZPg6TUEWw4oRq2ltnDbSjQ==" }, "@fontsource/noto-sans-hk": { "version": "5.2.5", diff --git a/package.json b/package.json index 9a6542ec1..c39f5a217 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,7 @@ "dependencies": { "@emotion/react": "11.14.0", "@emotion/styled": "11.14.0", - "@fontsource/noto-sans": "5.2.6", + "@fontsource/noto-sans": "5.2.7", "@fontsource/noto-sans-hk": "5.2.5", "@fontsource/noto-sans-jp": "5.2.5", "@fontsource/noto-sans-kr": "5.2.5", From 891e40f3a7cbf94b1b69b4ac3ae4279880415111 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 May 2025 21:13:51 +0000 Subject: [PATCH 253/645] Update dependency webpack to v5.99.8 --- package-lock.json | 32 +++++++++++++++++--------------- package.json | 2 +- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3bd40456f..5f892ea90 100644 --- a/package-lock.json +++ b/package-lock.json @@ -129,7 +129,7 @@ "typescript": "5.8.3", "typescript-eslint": "8.31.0", "vitest": "3.1.3", - "webpack": "5.99.5", + "webpack": "5.99.8", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "6.0.1", "webpack-dev-server": "5.2.1", @@ -19980,9 +19980,9 @@ } }, "node_modules/schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", "dev": true, "license": "MIT", "dependencies": { @@ -25487,14 +25487,15 @@ } }, "node_modules/webpack": { - "version": "5.99.5", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.5.tgz", - "integrity": "sha512-q+vHBa6H9qwBLUlHL4Y7L0L1/LlyBKZtS9FHNCQmtayxjI5RKC9yD8gpvLeqGv5lCQp1Re04yi0MF40pf30Pvg==", + "version": "5.99.8", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.8.tgz", + "integrity": "sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==", "dev": true, "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", @@ -25511,7 +25512,7 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^4.3.0", + "schema-utils": "^4.3.2", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.11", "watchpack": "^2.4.1", @@ -39311,9 +39312,9 @@ } }, "schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", @@ -43293,13 +43294,14 @@ "dev": true }, "webpack": { - "version": "5.99.5", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.5.tgz", - "integrity": "sha512-q+vHBa6H9qwBLUlHL4Y7L0L1/LlyBKZtS9FHNCQmtayxjI5RKC9yD8gpvLeqGv5lCQp1Re04yi0MF40pf30Pvg==", + "version": "5.99.8", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.8.tgz", + "integrity": "sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", @@ -43316,7 +43318,7 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^4.3.0", + "schema-utils": "^4.3.2", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.11", "watchpack": "^2.4.1", diff --git a/package.json b/package.json index 9a6542ec1..5489f1a79 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "typescript": "5.8.3", "typescript-eslint": "8.31.0", "vitest": "3.1.3", - "webpack": "5.99.5", + "webpack": "5.99.8", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "6.0.1", "webpack-dev-server": "5.2.1", From c9c172358e697261ee51d307081c03146e44f079 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 May 2025 21:13:59 +0000 Subject: [PATCH 254/645] Bump vite from 6.2.6 to 6.3.4 Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.6 to 6.3.4. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v6.3.4/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 6.3.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 440 ++++++++++++++++++++++++++++------------------ 1 file changed, 266 insertions(+), 174 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3bd40456f..0b04ec81f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5058,247 +5058,280 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz", - "integrity": "sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.2.tgz", + "integrity": "sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.8.tgz", - "integrity": "sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.2.tgz", + "integrity": "sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.8.tgz", - "integrity": "sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.2.tgz", + "integrity": "sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.8.tgz", - "integrity": "sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.2.tgz", + "integrity": "sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.8.tgz", - "integrity": "sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.2.tgz", + "integrity": "sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.8.tgz", - "integrity": "sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.2.tgz", + "integrity": "sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.8.tgz", - "integrity": "sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.2.tgz", + "integrity": "sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.8.tgz", - "integrity": "sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.2.tgz", + "integrity": "sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.8.tgz", - "integrity": "sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.2.tgz", + "integrity": "sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.8.tgz", - "integrity": "sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.2.tgz", + "integrity": "sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.8.tgz", - "integrity": "sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.2.tgz", + "integrity": "sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw==", "cpu": [ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.8.tgz", - "integrity": "sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.2.tgz", + "integrity": "sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.8.tgz", - "integrity": "sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.2.tgz", + "integrity": "sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.2.tgz", + "integrity": "sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.8.tgz", - "integrity": "sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.2.tgz", + "integrity": "sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.8.tgz", - "integrity": "sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.2.tgz", + "integrity": "sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.8.tgz", - "integrity": "sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.2.tgz", + "integrity": "sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.8.tgz", - "integrity": "sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.2.tgz", + "integrity": "sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.8.tgz", - "integrity": "sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.2.tgz", + "integrity": "sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.8.tgz", - "integrity": "sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.2.tgz", + "integrity": "sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -5617,9 +5650,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", "dev": true, "license": "MIT" }, @@ -19287,12 +19320,13 @@ } }, "node_modules/rollup": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.8.tgz", - "integrity": "sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.2.tgz", + "integrity": "sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==", "dev": true, + "license": "MIT", "dependencies": { - "@types/estree": "1.0.6" + "@types/estree": "1.0.7" }, "bin": { "rollup": "dist/bin/rollup" @@ -19302,25 +19336,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.34.8", - "@rollup/rollup-android-arm64": "4.34.8", - "@rollup/rollup-darwin-arm64": "4.34.8", - "@rollup/rollup-darwin-x64": "4.34.8", - "@rollup/rollup-freebsd-arm64": "4.34.8", - "@rollup/rollup-freebsd-x64": "4.34.8", - "@rollup/rollup-linux-arm-gnueabihf": "4.34.8", - "@rollup/rollup-linux-arm-musleabihf": "4.34.8", - "@rollup/rollup-linux-arm64-gnu": "4.34.8", - "@rollup/rollup-linux-arm64-musl": "4.34.8", - "@rollup/rollup-linux-loongarch64-gnu": "4.34.8", - "@rollup/rollup-linux-powerpc64le-gnu": "4.34.8", - "@rollup/rollup-linux-riscv64-gnu": "4.34.8", - "@rollup/rollup-linux-s390x-gnu": "4.34.8", - "@rollup/rollup-linux-x64-gnu": "4.34.8", - "@rollup/rollup-linux-x64-musl": "4.34.8", - "@rollup/rollup-win32-arm64-msvc": "4.34.8", - "@rollup/rollup-win32-ia32-msvc": "4.34.8", - "@rollup/rollup-win32-x64-msvc": "4.34.8", + "@rollup/rollup-android-arm-eabi": "4.40.2", + "@rollup/rollup-android-arm64": "4.40.2", + "@rollup/rollup-darwin-arm64": "4.40.2", + "@rollup/rollup-darwin-x64": "4.40.2", + "@rollup/rollup-freebsd-arm64": "4.40.2", + "@rollup/rollup-freebsd-x64": "4.40.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.40.2", + "@rollup/rollup-linux-arm-musleabihf": "4.40.2", + "@rollup/rollup-linux-arm64-gnu": "4.40.2", + "@rollup/rollup-linux-arm64-musl": "4.40.2", + "@rollup/rollup-linux-loongarch64-gnu": "4.40.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.40.2", + "@rollup/rollup-linux-riscv64-gnu": "4.40.2", + "@rollup/rollup-linux-riscv64-musl": "4.40.2", + "@rollup/rollup-linux-s390x-gnu": "4.40.2", + "@rollup/rollup-linux-x64-gnu": "4.40.2", + "@rollup/rollup-linux-x64-musl": "4.40.2", + "@rollup/rollup-win32-arm64-msvc": "4.40.2", + "@rollup/rollup-win32-ia32-msvc": "4.40.2", + "@rollup/rollup-win32-x64-msvc": "4.40.2", "fsevents": "~2.3.2" } }, @@ -25267,15 +25302,18 @@ } }, "node_modules/vite": { - "version": "6.2.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.6.tgz", - "integrity": "sha512-9xpjNl3kR4rVDZgPNdTL0/c6ao4km69a/2ihNQbcANz8RuCOK3hQBmLSJf3bRKVQjVMda+YvizNE8AwvogcPbw==", + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", "postcss": "^8.5.3", - "rollup": "^4.30.1" + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" }, "bin": { "vite": "bin/vite.js" @@ -25361,6 +25399,34 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/vite/node_modules/fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/vitest": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.1.3.tgz", @@ -29072,135 +29138,142 @@ "integrity": "sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==" }, "@rollup/rollup-android-arm-eabi": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz", - "integrity": "sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.2.tgz", + "integrity": "sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==", "dev": true, "optional": true }, "@rollup/rollup-android-arm64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.8.tgz", - "integrity": "sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.2.tgz", + "integrity": "sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw==", "dev": true, "optional": true }, "@rollup/rollup-darwin-arm64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.8.tgz", - "integrity": "sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.2.tgz", + "integrity": "sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w==", "dev": true, "optional": true }, "@rollup/rollup-darwin-x64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.8.tgz", - "integrity": "sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.2.tgz", + "integrity": "sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ==", "dev": true, "optional": true }, "@rollup/rollup-freebsd-arm64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.8.tgz", - "integrity": "sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.2.tgz", + "integrity": "sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ==", "dev": true, "optional": true }, "@rollup/rollup-freebsd-x64": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.8.tgz", - "integrity": "sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.2.tgz", + "integrity": "sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.8.tgz", - "integrity": "sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.2.tgz", + "integrity": "sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm-musleabihf": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.8.tgz", - "integrity": "sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.2.tgz", + "integrity": "sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.8.tgz", - "integrity": "sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.2.tgz", + "integrity": "sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm64-musl": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.8.tgz", - "integrity": "sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.2.tgz", + "integrity": "sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg==", "dev": true, "optional": true }, "@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.8.tgz", - "integrity": "sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.2.tgz", + "integrity": "sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw==", "dev": true, "optional": true }, "@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.8.tgz", - "integrity": "sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.2.tgz", + "integrity": "sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q==", "dev": true, "optional": true }, "@rollup/rollup-linux-riscv64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.8.tgz", - "integrity": "sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.2.tgz", + "integrity": "sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-musl": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.2.tgz", + "integrity": "sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg==", "dev": true, "optional": true }, "@rollup/rollup-linux-s390x-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.8.tgz", - "integrity": "sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.2.tgz", + "integrity": "sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ==", "dev": true, "optional": true }, "@rollup/rollup-linux-x64-gnu": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.8.tgz", - "integrity": "sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.2.tgz", + "integrity": "sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==", "dev": true, "optional": true }, "@rollup/rollup-linux-x64-musl": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.8.tgz", - "integrity": "sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.2.tgz", + "integrity": "sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA==", "dev": true, "optional": true }, "@rollup/rollup-win32-arm64-msvc": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.8.tgz", - "integrity": "sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.2.tgz", + "integrity": "sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg==", "dev": true, "optional": true }, "@rollup/rollup-win32-ia32-msvc": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.8.tgz", - "integrity": "sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.2.tgz", + "integrity": "sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA==", "dev": true, "optional": true }, "@rollup/rollup-win32-x64-msvc": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.8.tgz", - "integrity": "sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.2.tgz", + "integrity": "sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA==", "dev": true, "optional": true }, @@ -29407,9 +29480,9 @@ } }, "@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", "dev": true }, "@types/express": { @@ -38948,31 +39021,32 @@ } }, "rollup": { - "version": "4.34.8", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.8.tgz", - "integrity": "sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==", + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.2.tgz", + "integrity": "sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==", "dev": true, "requires": { - "@rollup/rollup-android-arm-eabi": "4.34.8", - "@rollup/rollup-android-arm64": "4.34.8", - "@rollup/rollup-darwin-arm64": "4.34.8", - "@rollup/rollup-darwin-x64": "4.34.8", - "@rollup/rollup-freebsd-arm64": "4.34.8", - "@rollup/rollup-freebsd-x64": "4.34.8", - "@rollup/rollup-linux-arm-gnueabihf": "4.34.8", - "@rollup/rollup-linux-arm-musleabihf": "4.34.8", - "@rollup/rollup-linux-arm64-gnu": "4.34.8", - "@rollup/rollup-linux-arm64-musl": "4.34.8", - "@rollup/rollup-linux-loongarch64-gnu": "4.34.8", - "@rollup/rollup-linux-powerpc64le-gnu": "4.34.8", - "@rollup/rollup-linux-riscv64-gnu": "4.34.8", - "@rollup/rollup-linux-s390x-gnu": "4.34.8", - "@rollup/rollup-linux-x64-gnu": "4.34.8", - "@rollup/rollup-linux-x64-musl": "4.34.8", - "@rollup/rollup-win32-arm64-msvc": "4.34.8", - "@rollup/rollup-win32-ia32-msvc": "4.34.8", - "@rollup/rollup-win32-x64-msvc": "4.34.8", - "@types/estree": "1.0.6", + "@rollup/rollup-android-arm-eabi": "4.40.2", + "@rollup/rollup-android-arm64": "4.40.2", + "@rollup/rollup-darwin-arm64": "4.40.2", + "@rollup/rollup-darwin-x64": "4.40.2", + "@rollup/rollup-freebsd-arm64": "4.40.2", + "@rollup/rollup-freebsd-x64": "4.40.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.40.2", + "@rollup/rollup-linux-arm-musleabihf": "4.40.2", + "@rollup/rollup-linux-arm64-gnu": "4.40.2", + "@rollup/rollup-linux-arm64-musl": "4.40.2", + "@rollup/rollup-linux-loongarch64-gnu": "4.40.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.40.2", + "@rollup/rollup-linux-riscv64-gnu": "4.40.2", + "@rollup/rollup-linux-riscv64-musl": "4.40.2", + "@rollup/rollup-linux-s390x-gnu": "4.40.2", + "@rollup/rollup-linux-x64-gnu": "4.40.2", + "@rollup/rollup-linux-x64-musl": "4.40.2", + "@rollup/rollup-win32-arm64-msvc": "4.40.2", + "@rollup/rollup-win32-ia32-msvc": "4.40.2", + "@rollup/rollup-win32-x64-msvc": "4.40.2", + "@types/estree": "1.0.7", "fsevents": "~2.3.2" } }, @@ -43192,15 +43266,33 @@ } }, "vite": { - "version": "6.2.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.6.tgz", - "integrity": "sha512-9xpjNl3kR4rVDZgPNdTL0/c6ao4km69a/2ihNQbcANz8RuCOK3hQBmLSJf3bRKVQjVMda+YvizNE8AwvogcPbw==", + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", "dev": true, "requires": { "esbuild": "^0.25.0", + "fdir": "^6.4.4", "fsevents": "~2.3.3", + "picomatch": "^4.0.2", "postcss": "^8.5.3", - "rollup": "^4.30.1" + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "dependencies": { + "fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "dev": true, + "requires": {} + }, + "picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true + } } }, "vite-node": { From 57666e67e4221e4e6af111e1ed0d96bf061f0b7f Mon Sep 17 00:00:00 2001 From: myrad2267 Date: Tue, 13 May 2025 18:13:22 -0400 Subject: [PATCH 255/645] Translated using Weblate (French (Canada)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr_CA/ --- src/strings/fr-ca.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/fr-ca.json b/src/strings/fr-ca.json index e20edd844..3db5fa495 100644 --- a/src/strings/fr-ca.json +++ b/src/strings/fr-ca.json @@ -1973,5 +1973,7 @@ "LimitSegmentLengthHelp": "L'activation de cette option peut aider à empêcher le lecteur HLS de se bloquer pendant la recherche sur certains appareils, comme les téléviseurs webOS.", "HeaderServerUnavailable": "Serveur Indisponible", "HeaderUpdateRequired": "Mise à jour requise", - "ViewSettings": "Afficher les paramètres" + "ViewSettings": "Afficher les paramètres", + "MessageForgotPasswordPinReset": "Entrez le NIP ici pour finaliser la réinitialisation du mot de passe", + "DownloadManager": "Téléchargement" } From 89172fe5d28670964d5b869bca466a38c1d56e0d Mon Sep 17 00:00:00 2001 From: myrad2267 Date: Tue, 13 May 2025 18:14:32 -0400 Subject: [PATCH 256/645] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index bccb7acc9..14e020e7a 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -2030,5 +2030,6 @@ "HeaderServerUnavailable": "Serveur Indisponible", "HeaderUpdateRequired": "Mise à jour requise", "ViewSettings": "Afficher les paramètres", - "MessageForgotPasswordPinReset": "Entrez le PIN ici pour finaliser la réinitialisation du mot de passe" + "MessageForgotPasswordPinReset": "Entrez le PIN ici pour finaliser la réinitialisation du mot de passe", + "DownloadManager": "Téléchargement" } From 3be1ec50ebcc5dacf819422ed2bc7a8a05232f69 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 May 2025 03:30:04 +0000 Subject: [PATCH 257/645] Update dependency cssnano to v7.0.7 --- package-lock.json | 950 +++++++++++++++++++++++++++------------------- package.json | 2 +- 2 files changed, 555 insertions(+), 397 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3bd40456f..15e09681c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -94,7 +94,7 @@ "copy-webpack-plugin": "13.0.0", "cross-env": "7.0.3", "css-loader": "7.1.2", - "cssnano": "7.0.6", + "cssnano": "7.0.7", "es-check": "8.0.2", "eslint": "9.25.1", "eslint-plugin-compat": "6.0.2", @@ -7721,9 +7721,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "version": "4.24.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", + "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", "dev": true, "funding": [ { @@ -7741,10 +7741,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", + "caniuse-lite": "^1.0.30001716", + "electron-to-chromium": "^1.5.149", "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -7997,9 +7997,9 @@ "dev": true }, "node_modules/caniuse-lite": { - "version": "1.0.30001706", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001706.tgz", - "integrity": "sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==", + "version": "1.0.30001718", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz", + "integrity": "sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==", "dev": true, "funding": [ { @@ -8928,6 +8928,7 @@ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "dev": true, + "license": "MIT", "dependencies": { "mdn-data": "2.0.30", "source-map-js": "^1.0.1" @@ -8978,14 +8979,14 @@ } }, "node_modules/cssnano": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.6.tgz", - "integrity": "sha512-54woqx8SCbp8HwvNZYn68ZFAepuouZW4lTwiMVnBErM3VkO7/Sd4oTOt3Zz3bPx3kxQ36aISppyXj2Md4lg8bw==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.7.tgz", + "integrity": "sha512-evKu7yiDIF7oS+EIpwFlMF730ijRyLFaM2o5cTxRGJR9OKHKkc+qP443ZEVR9kZG0syaAJJCPJyfv5pbrxlSng==", "dev": true, "license": "MIT", "dependencies": { - "cssnano-preset-default": "^7.0.6", - "lilconfig": "^3.1.2" + "cssnano-preset-default": "^7.0.7", + "lilconfig": "^3.1.3" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" @@ -8995,65 +8996,65 @@ "url": "https://opencollective.com/cssnano" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/cssnano-preset-default": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.6.tgz", - "integrity": "sha512-ZzrgYupYxEvdGGuqL+JKOY70s7+saoNlHSCK/OGn1vB2pQK8KSET8jvenzItcY+kA7NoWvfbb/YhlzuzNKjOhQ==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.7.tgz", + "integrity": "sha512-jW6CG/7PNB6MufOrlovs1TvBTEVmhY45yz+bd0h6nw3h6d+1e+/TX+0fflZ+LzvZombbT5f+KC063w9VoHeHow==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", + "browserslist": "^4.24.5", "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^5.0.0", - "postcss-calc": "^10.0.2", - "postcss-colormin": "^7.0.2", - "postcss-convert-values": "^7.0.4", - "postcss-discard-comments": "^7.0.3", - "postcss-discard-duplicates": "^7.0.1", - "postcss-discard-empty": "^7.0.0", - "postcss-discard-overridden": "^7.0.0", - "postcss-merge-longhand": "^7.0.4", - "postcss-merge-rules": "^7.0.4", - "postcss-minify-font-values": "^7.0.0", - "postcss-minify-gradients": "^7.0.0", - "postcss-minify-params": "^7.0.2", - "postcss-minify-selectors": "^7.0.4", - "postcss-normalize-charset": "^7.0.0", - "postcss-normalize-display-values": "^7.0.0", - "postcss-normalize-positions": "^7.0.0", - "postcss-normalize-repeat-style": "^7.0.0", - "postcss-normalize-string": "^7.0.0", - "postcss-normalize-timing-functions": "^7.0.0", - "postcss-normalize-unicode": "^7.0.2", - "postcss-normalize-url": "^7.0.0", - "postcss-normalize-whitespace": "^7.0.0", - "postcss-ordered-values": "^7.0.1", - "postcss-reduce-initial": "^7.0.2", - "postcss-reduce-transforms": "^7.0.0", - "postcss-svgo": "^7.0.1", - "postcss-unique-selectors": "^7.0.3" + "cssnano-utils": "^5.0.1", + "postcss-calc": "^10.1.1", + "postcss-colormin": "^7.0.3", + "postcss-convert-values": "^7.0.5", + "postcss-discard-comments": "^7.0.4", + "postcss-discard-duplicates": "^7.0.2", + "postcss-discard-empty": "^7.0.1", + "postcss-discard-overridden": "^7.0.1", + "postcss-merge-longhand": "^7.0.5", + "postcss-merge-rules": "^7.0.5", + "postcss-minify-font-values": "^7.0.1", + "postcss-minify-gradients": "^7.0.1", + "postcss-minify-params": "^7.0.3", + "postcss-minify-selectors": "^7.0.5", + "postcss-normalize-charset": "^7.0.1", + "postcss-normalize-display-values": "^7.0.1", + "postcss-normalize-positions": "^7.0.1", + "postcss-normalize-repeat-style": "^7.0.1", + "postcss-normalize-string": "^7.0.1", + "postcss-normalize-timing-functions": "^7.0.1", + "postcss-normalize-unicode": "^7.0.3", + "postcss-normalize-url": "^7.0.1", + "postcss-normalize-whitespace": "^7.0.1", + "postcss-ordered-values": "^7.0.2", + "postcss-reduce-initial": "^7.0.3", + "postcss-reduce-transforms": "^7.0.1", + "postcss-svgo": "^7.0.2", + "postcss-unique-selectors": "^7.0.4" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/cssnano-utils": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.0.tgz", - "integrity": "sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.1.tgz", + "integrity": "sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==", "dev": true, "license": "MIT", "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/csso": { @@ -9710,9 +9711,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.5.102", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.102.tgz", - "integrity": "sha512-eHhqaja8tE/FNpIiBrvBjFV/SSKpyWHLvxuR9dPTdo+3V9ppdLmFB7ZZQ98qNovcngPLYIz0oOBF9P0FfZef5Q==", + "version": "1.5.152", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.152.tgz", + "integrity": "sha512-xBOfg/EBaIlVsHipHl2VdTPJRSvErNUaqW8ejTq5OlOlIYx1wOllCHsAvAIrr55jD1IYEfdR86miUEt8H5IeJg==", "dev": true, "license": "ISC" }, @@ -14560,9 +14561,9 @@ } }, "node_modules/lilconfig": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true, "license": "MIT", "engines": { @@ -15056,7 +15057,8 @@ "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/mdurl": { "version": "2.0.0", @@ -16519,13 +16521,13 @@ } }, "node_modules/postcss-calc": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.2.tgz", - "integrity": "sha512-DT/Wwm6fCKgpYVI7ZEWuPJ4az8hiEHtCUeYjZXqU7Ou4QqYh1Df2yCQ7Ca6N7xqKPFkxN3fhf+u9KSoOCJNAjg==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.1.1.tgz", + "integrity": "sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==", "dev": true, "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.1.2", + "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -16535,6 +16537,20 @@ "postcss": "^8.4.38" } }, + "node_modules/postcss-calc/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-clamp": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", @@ -16635,13 +16651,13 @@ } }, "node_modules/postcss-colormin": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.2.tgz", - "integrity": "sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.3.tgz", + "integrity": "sha512-xZxQcSyIVZbSsl1vjoqZAcMYYdnJsIyG8OvqShuuqf12S88qQboxxEy0ohNCOLwVPXTU+hFHvJPACRL2B5ohTA==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", + "browserslist": "^4.24.5", "caniuse-api": "^3.0.0", "colord": "^2.9.3", "postcss-value-parser": "^4.2.0" @@ -16650,24 +16666,24 @@ "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-convert-values": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.4.tgz", - "integrity": "sha512-e2LSXPqEHVW6aoGbjV9RsSSNDO3A0rZLCBxN24zvxF25WknMPpX8Dm9UxxThyEbaytzggRuZxaGXqaOhxQ514Q==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.5.tgz", + "integrity": "sha512-0VFhH8nElpIs3uXKnVtotDJJNX0OGYSZmdt4XfSfvOMrFw1jKfpwpZxfC4iN73CTM/MWakDEmsHQXkISYj4BXw==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", + "browserslist": "^4.24.5", "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-custom-media": { @@ -16837,58 +16853,72 @@ } }, "node_modules/postcss-discard-comments": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.3.tgz", - "integrity": "sha512-q6fjd4WU4afNhWOA2WltHgCbkRhZPgQe7cXF74fuVB/ge4QbM9HEaOIzGSiMvM+g/cOsNAUGdf2JDzqA2F8iLA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.4.tgz", + "integrity": "sha512-6tCUoql/ipWwKtVP/xYiFf1U9QgJ0PUvxN7pTcsQ8Ns3Fnwq1pU5D5s1MhT/XySeLq6GXNvn37U46Ded0TckWg==", "dev": true, "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.1.2" + "postcss-selector-parser": "^7.1.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-discard-comments/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, "node_modules/postcss-discard-duplicates": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.1.tgz", - "integrity": "sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.2.tgz", + "integrity": "sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==", "dev": true, "license": "MIT", "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-discard-empty": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz", - "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.1.tgz", + "integrity": "sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==", "dev": true, "license": "MIT", "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-discard-overridden": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz", - "integrity": "sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.1.tgz", + "integrity": "sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg==", "dev": true, "license": "MIT", "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-double-position-gradients": { @@ -17525,108 +17555,136 @@ "dev": true }, "node_modules/postcss-merge-longhand": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.4.tgz", - "integrity": "sha512-zer1KoZA54Q8RVHKOY5vMke0cCdNxMP3KBfDerjH/BYHh4nCIh+1Yy0t1pAEQF18ac/4z3OFclO+ZVH8azjR4A==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.5.tgz", + "integrity": "sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw==", "dev": true, "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^7.0.4" + "stylehacks": "^7.0.5" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-merge-rules": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.4.tgz", - "integrity": "sha512-ZsaamiMVu7uBYsIdGtKJ64PkcQt6Pcpep/uO90EpLS3dxJi6OXamIobTYcImyXGoW0Wpugh7DSD3XzxZS9JCPg==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.5.tgz", + "integrity": "sha512-ZonhuSwEaWA3+xYbOdJoEReKIBs5eDiBVLAGpYZpNFPzXZcEE5VKR7/qBEQvTZpiwjqhhqEQ+ax5O3VShBj9Wg==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", + "browserslist": "^4.24.5", "caniuse-api": "^3.0.0", - "cssnano-utils": "^5.0.0", - "postcss-selector-parser": "^6.1.2" + "cssnano-utils": "^5.0.1", + "postcss-selector-parser": "^7.1.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, - "node_modules/postcss-minify-font-values": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.0.tgz", - "integrity": "sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.0.tgz", - "integrity": "sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colord": "^2.9.3", - "cssnano-utils": "^5.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-params": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.2.tgz", - "integrity": "sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "cssnano-utils": "^5.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.4.tgz", - "integrity": "sha512-JG55VADcNb4xFCf75hXkzc1rNeURhlo7ugf6JjiiKRfMsKlDzN9CXHZDyiG6x/zGchpjQS+UAgb1d4nqXqOpmA==", + "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", "dependencies": { "cssesc": "^3.0.0", - "postcss-selector-parser": "^6.1.2" + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.1.tgz", + "integrity": "sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.1.tgz", + "integrity": "sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "colord": "^2.9.3", + "cssnano-utils": "^5.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-params": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.3.tgz", + "integrity": "sha512-vUKV2+f5mtjewYieanLX0xemxIp1t0W0H/D11u+kQV/MWdygOO7xPMkbK+r9P6Lhms8MgzKARF/g5OPXhb8tgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.5", + "cssnano-utils": "^5.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.5.tgz", + "integrity": "sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "postcss-selector-parser": "^7.1.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, "node_modules/postcss-modules-extract-imports": { @@ -17780,22 +17838,22 @@ } }, "node_modules/postcss-normalize-charset": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.0.tgz", - "integrity": "sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.1.tgz", + "integrity": "sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ==", "dev": true, "license": "MIT", "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-normalize-display-values": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.0.tgz", - "integrity": "sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.1.tgz", + "integrity": "sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ==", "dev": true, "license": "MIT", "dependencies": { @@ -17805,13 +17863,13 @@ "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-normalize-positions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.0.tgz", - "integrity": "sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.1.tgz", + "integrity": "sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -17821,13 +17879,13 @@ "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-normalize-repeat-style": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.0.tgz", - "integrity": "sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.1.tgz", + "integrity": "sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -17837,13 +17895,13 @@ "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-normalize-string": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.0.tgz", - "integrity": "sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.1.tgz", + "integrity": "sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ==", "dev": true, "license": "MIT", "dependencies": { @@ -17853,13 +17911,13 @@ "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-normalize-timing-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.0.tgz", - "integrity": "sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.1.tgz", + "integrity": "sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg==", "dev": true, "license": "MIT", "dependencies": { @@ -17869,30 +17927,30 @@ "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-normalize-unicode": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.2.tgz", - "integrity": "sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.3.tgz", + "integrity": "sha512-EcoA29LvG3F+EpOh03iqu+tJY3uYYKzArqKJHxDhUYLa2u58aqGq16K6/AOsXD9yqLN8O6y9mmePKN5cx6krOw==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", + "browserslist": "^4.24.5", "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-normalize-url": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.0.tgz", - "integrity": "sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.1.tgz", + "integrity": "sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ==", "dev": true, "license": "MIT", "dependencies": { @@ -17902,13 +17960,13 @@ "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-normalize-whitespace": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz", - "integrity": "sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.1.tgz", + "integrity": "sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==", "dev": true, "license": "MIT", "dependencies": { @@ -17918,7 +17976,7 @@ "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-opacity-percentage": { @@ -17945,20 +18003,20 @@ } }, "node_modules/postcss-ordered-values": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.1.tgz", - "integrity": "sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.2.tgz", + "integrity": "sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw==", "dev": true, "license": "MIT", "dependencies": { - "cssnano-utils": "^5.0.0", + "cssnano-utils": "^5.0.1", "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-overflow-shorthand": { @@ -18151,26 +18209,26 @@ } }, "node_modules/postcss-reduce-initial": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.2.tgz", - "integrity": "sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.3.tgz", + "integrity": "sha512-RFvkZaqiWtGMlVjlUHpaxGqEL27lgt+Q2Ixjf83CRAzqdo+TsDyGPtJUbPx2MuYIJ+sCQc2TrOvRnhcXQfgIVA==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", + "browserslist": "^4.24.5", "caniuse-api": "^3.0.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-reduce-transforms": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.0.tgz", - "integrity": "sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.1.tgz", + "integrity": "sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g==", "dev": true, "license": "MIT", "dependencies": { @@ -18180,7 +18238,7 @@ "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-replace-overflow-wrap": { @@ -18491,9 +18549,9 @@ } }, "node_modules/postcss-svgo": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.1.tgz", - "integrity": "sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.2.tgz", + "integrity": "sha512-5Dzy66JlnRM6pkdOTF8+cGsB1fnERTE8Nc+Eed++fOWo1hdsBptCsbG8UuJkgtZt75bRtMJIrPeZmtfANixdFA==", "dev": true, "license": "MIT", "dependencies": { @@ -18504,7 +18562,7 @@ "node": "^18.12.0 || ^20.9.0 || >= 18" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" } }, "node_modules/postcss-syntax": { @@ -18517,19 +18575,33 @@ } }, "node_modules/postcss-unique-selectors": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.3.tgz", - "integrity": "sha512-J+58u5Ic5T1QjP/LDV9g3Cx4CNOgB5vz+kM6+OxHHhFACdcDeKhBXjQmB7fnIZM12YSTvsL0Opwco83DmacW2g==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.4.tgz", + "integrity": "sha512-pmlZjsmEAG7cHd7uK3ZiNSW6otSZ13RHuZ/4cDN/bVglS5EpF2r2oxY99SuOHa8m7AWoBCelTS3JPpzsIs8skQ==", "dev": true, "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.1.2" + "postcss-selector-parser": "^7.1.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-unique-selectors/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, "node_modules/postcss-value-parser": { @@ -21327,20 +21399,34 @@ "dev": true }, "node_modules/stylehacks": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.4.tgz", - "integrity": "sha512-i4zfNrGMt9SB4xRK9L83rlsFCgdGANfeDAYacO1pkqcE7cRHPdWHwnKZVz7WY17Veq/FvyYsRAU++Ga+qDFIww==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.5.tgz", + "integrity": "sha512-5kNb7V37BNf0Q3w+1pxfa+oiNPS++/b4Jil9e/kPDgrk1zjEd6uR7SZeJiYaLYH6RRSC1XX2/37OTeU/4FvuIA==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", - "postcss-selector-parser": "^6.1.2" + "browserslist": "^4.24.5", + "postcss-selector-parser": "^7.1.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.32" + } + }, + "node_modules/stylehacks/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, "node_modules/stylelint": { @@ -23854,9 +23940,9 @@ } }, "node_modules/svgo/node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -25095,9 +25181,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", - "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dev": true, "funding": [ { @@ -30937,15 +31023,15 @@ } }, "browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "version": "4.24.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", + "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", + "caniuse-lite": "^1.0.30001716", + "electron-to-chromium": "^1.5.149", "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "update-browserslist-db": "^1.1.3" } }, "buffer": { @@ -31125,9 +31211,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001706", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001706.tgz", - "integrity": "sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==", + "version": "1.0.30001718", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz", + "integrity": "sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==", "dev": true }, "canvas": { @@ -31781,57 +31867,57 @@ "dev": true }, "cssnano": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.6.tgz", - "integrity": "sha512-54woqx8SCbp8HwvNZYn68ZFAepuouZW4lTwiMVnBErM3VkO7/Sd4oTOt3Zz3bPx3kxQ36aISppyXj2Md4lg8bw==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.7.tgz", + "integrity": "sha512-evKu7yiDIF7oS+EIpwFlMF730ijRyLFaM2o5cTxRGJR9OKHKkc+qP443ZEVR9kZG0syaAJJCPJyfv5pbrxlSng==", "dev": true, "requires": { - "cssnano-preset-default": "^7.0.6", - "lilconfig": "^3.1.2" + "cssnano-preset-default": "^7.0.7", + "lilconfig": "^3.1.3" } }, "cssnano-preset-default": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.6.tgz", - "integrity": "sha512-ZzrgYupYxEvdGGuqL+JKOY70s7+saoNlHSCK/OGn1vB2pQK8KSET8jvenzItcY+kA7NoWvfbb/YhlzuzNKjOhQ==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.7.tgz", + "integrity": "sha512-jW6CG/7PNB6MufOrlovs1TvBTEVmhY45yz+bd0h6nw3h6d+1e+/TX+0fflZ+LzvZombbT5f+KC063w9VoHeHow==", "dev": true, "requires": { - "browserslist": "^4.23.3", + "browserslist": "^4.24.5", "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^5.0.0", - "postcss-calc": "^10.0.2", - "postcss-colormin": "^7.0.2", - "postcss-convert-values": "^7.0.4", - "postcss-discard-comments": "^7.0.3", - "postcss-discard-duplicates": "^7.0.1", - "postcss-discard-empty": "^7.0.0", - "postcss-discard-overridden": "^7.0.0", - "postcss-merge-longhand": "^7.0.4", - "postcss-merge-rules": "^7.0.4", - "postcss-minify-font-values": "^7.0.0", - "postcss-minify-gradients": "^7.0.0", - "postcss-minify-params": "^7.0.2", - "postcss-minify-selectors": "^7.0.4", - "postcss-normalize-charset": "^7.0.0", - "postcss-normalize-display-values": "^7.0.0", - "postcss-normalize-positions": "^7.0.0", - "postcss-normalize-repeat-style": "^7.0.0", - "postcss-normalize-string": "^7.0.0", - "postcss-normalize-timing-functions": "^7.0.0", - "postcss-normalize-unicode": "^7.0.2", - "postcss-normalize-url": "^7.0.0", - "postcss-normalize-whitespace": "^7.0.0", - "postcss-ordered-values": "^7.0.1", - "postcss-reduce-initial": "^7.0.2", - "postcss-reduce-transforms": "^7.0.0", - "postcss-svgo": "^7.0.1", - "postcss-unique-selectors": "^7.0.3" + "cssnano-utils": "^5.0.1", + "postcss-calc": "^10.1.1", + "postcss-colormin": "^7.0.3", + "postcss-convert-values": "^7.0.5", + "postcss-discard-comments": "^7.0.4", + "postcss-discard-duplicates": "^7.0.2", + "postcss-discard-empty": "^7.0.1", + "postcss-discard-overridden": "^7.0.1", + "postcss-merge-longhand": "^7.0.5", + "postcss-merge-rules": "^7.0.5", + "postcss-minify-font-values": "^7.0.1", + "postcss-minify-gradients": "^7.0.1", + "postcss-minify-params": "^7.0.3", + "postcss-minify-selectors": "^7.0.5", + "postcss-normalize-charset": "^7.0.1", + "postcss-normalize-display-values": "^7.0.1", + "postcss-normalize-positions": "^7.0.1", + "postcss-normalize-repeat-style": "^7.0.1", + "postcss-normalize-string": "^7.0.1", + "postcss-normalize-timing-functions": "^7.0.1", + "postcss-normalize-unicode": "^7.0.3", + "postcss-normalize-url": "^7.0.1", + "postcss-normalize-whitespace": "^7.0.1", + "postcss-ordered-values": "^7.0.2", + "postcss-reduce-initial": "^7.0.3", + "postcss-reduce-transforms": "^7.0.1", + "postcss-svgo": "^7.0.2", + "postcss-unique-selectors": "^7.0.4" } }, "cssnano-utils": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.0.tgz", - "integrity": "sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.1.tgz", + "integrity": "sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==", "dev": true, "requires": {} }, @@ -32314,9 +32400,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.5.102", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.102.tgz", - "integrity": "sha512-eHhqaja8tE/FNpIiBrvBjFV/SSKpyWHLvxuR9dPTdo+3V9ppdLmFB7ZZQ98qNovcngPLYIz0oOBF9P0FfZef5Q==", + "version": "1.5.152", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.152.tgz", + "integrity": "sha512-xBOfg/EBaIlVsHipHl2VdTPJRSvErNUaqW8ejTq5OlOlIYx1wOllCHsAvAIrr55jD1IYEfdR86miUEt8H5IeJg==", "dev": true }, "element-closest-polyfill": { @@ -35756,9 +35842,9 @@ } }, "lilconfig": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true }, "lines-and-columns": { @@ -37180,13 +37266,25 @@ } }, "postcss-calc": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.2.tgz", - "integrity": "sha512-DT/Wwm6fCKgpYVI7ZEWuPJ4az8hiEHtCUeYjZXqU7Ou4QqYh1Df2yCQ7Ca6N7xqKPFkxN3fhf+u9KSoOCJNAjg==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.1.1.tgz", + "integrity": "sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==", "dev": true, "requires": { - "postcss-selector-parser": "^6.1.2", + "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.2.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + } } }, "postcss-clamp": { @@ -37232,24 +37330,24 @@ } }, "postcss-colormin": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.2.tgz", - "integrity": "sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.3.tgz", + "integrity": "sha512-xZxQcSyIVZbSsl1vjoqZAcMYYdnJsIyG8OvqShuuqf12S88qQboxxEy0ohNCOLwVPXTU+hFHvJPACRL2B5ohTA==", "dev": true, "requires": { - "browserslist": "^4.23.3", + "browserslist": "^4.24.5", "caniuse-api": "^3.0.0", "colord": "^2.9.3", "postcss-value-parser": "^4.2.0" } }, "postcss-convert-values": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.4.tgz", - "integrity": "sha512-e2LSXPqEHVW6aoGbjV9RsSSNDO3A0rZLCBxN24zvxF25WknMPpX8Dm9UxxThyEbaytzggRuZxaGXqaOhxQ514Q==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.5.tgz", + "integrity": "sha512-0VFhH8nElpIs3uXKnVtotDJJNX0OGYSZmdt4XfSfvOMrFw1jKfpwpZxfC4iN73CTM/MWakDEmsHQXkISYj4BXw==", "dev": true, "requires": { - "browserslist": "^4.23.3", + "browserslist": "^4.24.5", "postcss-value-parser": "^4.2.0" } }, @@ -37333,32 +37431,44 @@ } }, "postcss-discard-comments": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.3.tgz", - "integrity": "sha512-q6fjd4WU4afNhWOA2WltHgCbkRhZPgQe7cXF74fuVB/ge4QbM9HEaOIzGSiMvM+g/cOsNAUGdf2JDzqA2F8iLA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.4.tgz", + "integrity": "sha512-6tCUoql/ipWwKtVP/xYiFf1U9QgJ0PUvxN7pTcsQ8Ns3Fnwq1pU5D5s1MhT/XySeLq6GXNvn37U46Ded0TckWg==", "dev": true, "requires": { - "postcss-selector-parser": "^6.1.2" + "postcss-selector-parser": "^7.1.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + } } }, "postcss-discard-duplicates": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.1.tgz", - "integrity": "sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.2.tgz", + "integrity": "sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==", "dev": true, "requires": {} }, "postcss-discard-empty": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz", - "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.1.tgz", + "integrity": "sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==", "dev": true, "requires": {} }, "postcss-discard-overridden": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz", - "integrity": "sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.1.tgz", + "integrity": "sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg==", "dev": true, "requires": {} }, @@ -37779,66 +37889,90 @@ "dev": true }, "postcss-merge-longhand": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.4.tgz", - "integrity": "sha512-zer1KoZA54Q8RVHKOY5vMke0cCdNxMP3KBfDerjH/BYHh4nCIh+1Yy0t1pAEQF18ac/4z3OFclO+ZVH8azjR4A==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.5.tgz", + "integrity": "sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^7.0.4" + "stylehacks": "^7.0.5" } }, "postcss-merge-rules": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.4.tgz", - "integrity": "sha512-ZsaamiMVu7uBYsIdGtKJ64PkcQt6Pcpep/uO90EpLS3dxJi6OXamIobTYcImyXGoW0Wpugh7DSD3XzxZS9JCPg==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.5.tgz", + "integrity": "sha512-ZonhuSwEaWA3+xYbOdJoEReKIBs5eDiBVLAGpYZpNFPzXZcEE5VKR7/qBEQvTZpiwjqhhqEQ+ax5O3VShBj9Wg==", "dev": true, "requires": { - "browserslist": "^4.23.3", + "browserslist": "^4.24.5", "caniuse-api": "^3.0.0", - "cssnano-utils": "^5.0.0", - "postcss-selector-parser": "^6.1.2" + "cssnano-utils": "^5.0.1", + "postcss-selector-parser": "^7.1.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + } } }, "postcss-minify-font-values": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.0.tgz", - "integrity": "sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.1.tgz", + "integrity": "sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-minify-gradients": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.0.tgz", - "integrity": "sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.1.tgz", + "integrity": "sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A==", "dev": true, "requires": { "colord": "^2.9.3", - "cssnano-utils": "^5.0.0", + "cssnano-utils": "^5.0.1", "postcss-value-parser": "^4.2.0" } }, "postcss-minify-params": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.2.tgz", - "integrity": "sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.3.tgz", + "integrity": "sha512-vUKV2+f5mtjewYieanLX0xemxIp1t0W0H/D11u+kQV/MWdygOO7xPMkbK+r9P6Lhms8MgzKARF/g5OPXhb8tgg==", "dev": true, "requires": { - "browserslist": "^4.23.3", - "cssnano-utils": "^5.0.0", + "browserslist": "^4.24.5", + "cssnano-utils": "^5.0.1", "postcss-value-parser": "^4.2.0" } }, "postcss-minify-selectors": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.4.tgz", - "integrity": "sha512-JG55VADcNb4xFCf75hXkzc1rNeURhlo7ugf6JjiiKRfMsKlDzN9CXHZDyiG6x/zGchpjQS+UAgb1d4nqXqOpmA==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.5.tgz", + "integrity": "sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug==", "dev": true, "requires": { "cssesc": "^3.0.0", - "postcss-selector-parser": "^6.1.2" + "postcss-selector-parser": "^7.1.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + } } }, "postcss-modules-extract-imports": { @@ -37915,80 +38049,80 @@ } }, "postcss-normalize-charset": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.0.tgz", - "integrity": "sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.1.tgz", + "integrity": "sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ==", "dev": true, "requires": {} }, "postcss-normalize-display-values": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.0.tgz", - "integrity": "sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.1.tgz", + "integrity": "sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-positions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.0.tgz", - "integrity": "sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.1.tgz", + "integrity": "sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-repeat-style": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.0.tgz", - "integrity": "sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.1.tgz", + "integrity": "sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-string": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.0.tgz", - "integrity": "sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.1.tgz", + "integrity": "sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-timing-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.0.tgz", - "integrity": "sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.1.tgz", + "integrity": "sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-unicode": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.2.tgz", - "integrity": "sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.3.tgz", + "integrity": "sha512-EcoA29LvG3F+EpOh03iqu+tJY3uYYKzArqKJHxDhUYLa2u58aqGq16K6/AOsXD9yqLN8O6y9mmePKN5cx6krOw==", "dev": true, "requires": { - "browserslist": "^4.23.3", + "browserslist": "^4.24.5", "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-url": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.0.tgz", - "integrity": "sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.1.tgz", + "integrity": "sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-whitespace": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz", - "integrity": "sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.1.tgz", + "integrity": "sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -38002,12 +38136,12 @@ "requires": {} }, "postcss-ordered-values": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.1.tgz", - "integrity": "sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.2.tgz", + "integrity": "sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw==", "dev": true, "requires": { - "cssnano-utils": "^5.0.0", + "cssnano-utils": "^5.0.1", "postcss-value-parser": "^4.2.0" } }, @@ -38129,19 +38263,19 @@ } }, "postcss-reduce-initial": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.2.tgz", - "integrity": "sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.3.tgz", + "integrity": "sha512-RFvkZaqiWtGMlVjlUHpaxGqEL27lgt+Q2Ixjf83CRAzqdo+TsDyGPtJUbPx2MuYIJ+sCQc2TrOvRnhcXQfgIVA==", "dev": true, "requires": { - "browserslist": "^4.23.3", + "browserslist": "^4.24.5", "caniuse-api": "^3.0.0" } }, "postcss-reduce-transforms": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.0.tgz", - "integrity": "sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.1.tgz", + "integrity": "sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -38357,9 +38491,9 @@ } }, "postcss-svgo": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.1.tgz", - "integrity": "sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.2.tgz", + "integrity": "sha512-5Dzy66JlnRM6pkdOTF8+cGsB1fnERTE8Nc+Eed++fOWo1hdsBptCsbG8UuJkgtZt75bRtMJIrPeZmtfANixdFA==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0", @@ -38374,12 +38508,24 @@ "requires": {} }, "postcss-unique-selectors": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.3.tgz", - "integrity": "sha512-J+58u5Ic5T1QjP/LDV9g3Cx4CNOgB5vz+kM6+OxHHhFACdcDeKhBXjQmB7fnIZM12YSTvsL0Opwco83DmacW2g==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.4.tgz", + "integrity": "sha512-pmlZjsmEAG7cHd7uK3ZiNSW6otSZ13RHuZ/4cDN/bVglS5EpF2r2oxY99SuOHa8m7AWoBCelTS3JPpzsIs8skQ==", "dev": true, "requires": { - "postcss-selector-parser": "^6.1.2" + "postcss-selector-parser": "^7.1.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + } } }, "postcss-value-parser": { @@ -40333,13 +40479,25 @@ "dev": true }, "stylehacks": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.4.tgz", - "integrity": "sha512-i4zfNrGMt9SB4xRK9L83rlsFCgdGANfeDAYacO1pkqcE7cRHPdWHwnKZVz7WY17Veq/FvyYsRAU++Ga+qDFIww==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.5.tgz", + "integrity": "sha512-5kNb7V37BNf0Q3w+1pxfa+oiNPS++/b4Jil9e/kPDgrk1zjEd6uR7SZeJiYaLYH6RRSC1XX2/37OTeU/4FvuIA==", "dev": true, "requires": { - "browserslist": "^4.23.3", - "postcss-selector-parser": "^6.1.2" + "browserslist": "^4.24.5", + "postcss-selector-parser": "^7.1.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + } } }, "stylelint": { @@ -42203,9 +42361,9 @@ } }, "domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", "dev": true, "requires": { "dom-serializer": "^2.0.0", @@ -43074,9 +43232,9 @@ } }, "update-browserslist-db": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", - "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dev": true, "requires": { "escalade": "^3.2.0", diff --git a/package.json b/package.json index 9a6542ec1..f3cfd1f35 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "copy-webpack-plugin": "13.0.0", "cross-env": "7.0.3", "css-loader": "7.1.2", - "cssnano": "7.0.6", + "cssnano": "7.0.7", "es-check": "8.0.2", "eslint": "9.25.1", "eslint-plugin-compat": "6.0.2", From 537486755207dd64cbfce39279c183bd5a029047 Mon Sep 17 00:00:00 2001 From: Kityn Date: Wed, 14 May 2025 01:20:04 -0400 Subject: [PATCH 258/645] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 424209eb1..3d2120281 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -2030,5 +2030,6 @@ "HeaderUpdateRequired": "Wymagana aktualizacja", "HeaderServerUnavailable": "Serwer niedostępny", "ViewSettings": "Zobacz ustawienia", - "MessageForgotPasswordPinReset": "Wpisz tutaj kod PIN, aby zakończyć resetowanie hasła" + "MessageForgotPasswordPinReset": "Wpisz tutaj kod PIN, aby zakończyć resetowanie hasła", + "DownloadManager": "Pobrane" } From 526e8b534e5d885478a88a4b4bf1b784070dba26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Wed, 14 May 2025 04:33:14 -0400 Subject: [PATCH 259/645] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index d0fd3a9e9..24b18d21d 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -2029,5 +2029,7 @@ "LimitSegmentLengthHelp": "Povolení této možnosti může pomoci v zamezení zasekávání přehrávače HSL během posouvání na určitých zařízeních, například televizích s webOS.", "HeaderServerUnavailable": "Server není dostupný", "HeaderUpdateRequired": "Je nutná aktualizace", - "ViewSettings": "Zobrazit nastavení" + "ViewSettings": "Zobrazit nastavení", + "DownloadManager": "Stažené", + "MessageForgotPasswordPinReset": "Zadáním PINu dokončete obnovení hesla" } From 8976d9d9cd8867e79d171cf899ca553449a0d237 Mon Sep 17 00:00:00 2001 From: nextlooper42 Date: Wed, 14 May 2025 03:40:37 -0400 Subject: [PATCH 260/645] Translated using Weblate (Slovak) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/ --- src/strings/sk.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/sk.json b/src/strings/sk.json index 699426a1a..68fd5db41 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -2028,5 +2028,6 @@ "LabelGroupShowsIntoCollections": "Zoskupiť seriály do kolekcií", "LabelGroupShowsIntoCollectionsHelp": "Seriály v kolekcii budú zobrazené ako jedna zoskupená položka v zozname seriálov.", "HeaderServerUnavailable": "Server nie je dostupný", - "HeaderUpdateRequired": "Vyžaduje sa aktualizácia" + "HeaderUpdateRequired": "Vyžaduje sa aktualizácia", + "DownloadManager": "Stiahnuté" } From e4ffb2b68d40c240395d1e58c9b4026654266d89 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 May 2025 09:25:23 +0000 Subject: [PATCH 261/645] Update tanstack-query monorepo to v5.75.5 --- package-lock.json | 62 +++++++++++++++++++++++------------------------ package.json | 4 +-- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3bd40456f..57edb5e3f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,8 +24,8 @@ "@mui/material": "6.4.11", "@mui/x-date-pickers": "7.28.3", "@react-hook/resize-observer": "2.0.2", - "@tanstack/react-query": "5.73.3", - "@tanstack/react-query-devtools": "5.73.3", + "@tanstack/react-query": "5.75.5", + "@tanstack/react-query-devtools": "5.75.5", "abortcontroller-polyfill": "1.7.8", "blurhash": "2.0.5", "classlist.js": "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz", @@ -5417,9 +5417,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.73.3", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.73.3.tgz", - "integrity": "sha512-LUpsgVT3IkvOECdkQ3QD6esczSH71mAzH/LDZ2cu8j6w430v5W0JB1ulzsG8FFwFBd5fm/ePM2DFpg9TucRMgQ==", + "version": "5.75.5", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.75.5.tgz", + "integrity": "sha512-kPDOxtoMn2Ycycb76Givx2fi+2pzo98F9ifHL/NFiahEDpDwSVW6o12PRuQ0lQnBOunhRG5etatAhQij91M3MQ==", "license": "MIT", "funding": { "type": "github", @@ -5427,9 +5427,9 @@ } }, "node_modules/@tanstack/query-devtools": { - "version": "5.73.3", - "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.73.3.tgz", - "integrity": "sha512-hBQyYwsOuO7QOprK75NzfrWs/EQYjgFA0yykmcvsV62q0t6Ua97CU3sYgjHx0ZvxkXSOMkY24VRJ5uv9f5Ik4w==", + "version": "5.74.7", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.74.7.tgz", + "integrity": "sha512-nSNlfuGdnHf4yB0S+BoNYOE1o3oAH093weAYZolIHfS2stulyA/gWfSk/9H4ZFk5mAAHb5vNqAeJOmbdcGPEQw==", "license": "MIT", "funding": { "type": "github", @@ -5437,12 +5437,12 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.73.3", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.73.3.tgz", - "integrity": "sha512-umsAEsVsSSnrOZrstX/OlctdqkRZm6vPsetmbl241tdNo0jT3s+0bUoof9kCaTsPr/GopPlbJ1OYlrZj4toKzg==", + "version": "5.75.5", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.75.5.tgz", + "integrity": "sha512-QrLCJe40BgBVlWdAdf2ZEVJ0cISOuEy/HKupId1aTKU6gPJZVhSvZpH+Si7csRflCJphzlQ77Yx6gUxGW9o0XQ==", "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.73.3" + "@tanstack/query-core": "5.75.5" }, "funding": { "type": "github", @@ -5453,19 +5453,19 @@ } }, "node_modules/@tanstack/react-query-devtools": { - "version": "5.73.3", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.73.3.tgz", - "integrity": "sha512-5YizhmYep/A9h5Z+aApHZd0rwNH3FQm6JzUQmdH+f8aG5joi2cRAq+3UakDH6wst2kysReEmW4n7PaMxfCEtRQ==", + "version": "5.75.5", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.75.5.tgz", + "integrity": "sha512-S31U00nJOQIbxydRH1kOwdLRaLBrda8O5QjzmgkRg60UZzPGdbI6+873Qa0YGUfPeILDbR2ukgWyg7CJQPy4iA==", "license": "MIT", "dependencies": { - "@tanstack/query-devtools": "5.73.3" + "@tanstack/query-devtools": "5.74.7" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "^5.73.3", + "@tanstack/react-query": "^5.75.5", "react": "^18 || ^19" } }, @@ -29276,29 +29276,29 @@ } }, "@tanstack/query-core": { - "version": "5.73.3", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.73.3.tgz", - "integrity": "sha512-LUpsgVT3IkvOECdkQ3QD6esczSH71mAzH/LDZ2cu8j6w430v5W0JB1ulzsG8FFwFBd5fm/ePM2DFpg9TucRMgQ==" + "version": "5.75.5", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.75.5.tgz", + "integrity": "sha512-kPDOxtoMn2Ycycb76Givx2fi+2pzo98F9ifHL/NFiahEDpDwSVW6o12PRuQ0lQnBOunhRG5etatAhQij91M3MQ==" }, "@tanstack/query-devtools": { - "version": "5.73.3", - "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.73.3.tgz", - "integrity": "sha512-hBQyYwsOuO7QOprK75NzfrWs/EQYjgFA0yykmcvsV62q0t6Ua97CU3sYgjHx0ZvxkXSOMkY24VRJ5uv9f5Ik4w==" + "version": "5.74.7", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.74.7.tgz", + "integrity": "sha512-nSNlfuGdnHf4yB0S+BoNYOE1o3oAH093weAYZolIHfS2stulyA/gWfSk/9H4ZFk5mAAHb5vNqAeJOmbdcGPEQw==" }, "@tanstack/react-query": { - "version": "5.73.3", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.73.3.tgz", - "integrity": "sha512-umsAEsVsSSnrOZrstX/OlctdqkRZm6vPsetmbl241tdNo0jT3s+0bUoof9kCaTsPr/GopPlbJ1OYlrZj4toKzg==", + "version": "5.75.5", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.75.5.tgz", + "integrity": "sha512-QrLCJe40BgBVlWdAdf2ZEVJ0cISOuEy/HKupId1aTKU6gPJZVhSvZpH+Si7csRflCJphzlQ77Yx6gUxGW9o0XQ==", "requires": { - "@tanstack/query-core": "5.73.3" + "@tanstack/query-core": "5.75.5" } }, "@tanstack/react-query-devtools": { - "version": "5.73.3", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.73.3.tgz", - "integrity": "sha512-5YizhmYep/A9h5Z+aApHZd0rwNH3FQm6JzUQmdH+f8aG5joi2cRAq+3UakDH6wst2kysReEmW4n7PaMxfCEtRQ==", + "version": "5.75.5", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.75.5.tgz", + "integrity": "sha512-S31U00nJOQIbxydRH1kOwdLRaLBrda8O5QjzmgkRg60UZzPGdbI6+873Qa0YGUfPeILDbR2ukgWyg7CJQPy4iA==", "requires": { - "@tanstack/query-devtools": "5.73.3" + "@tanstack/query-devtools": "5.74.7" } }, "@tanstack/react-table": { diff --git a/package.json b/package.json index 9a6542ec1..3bc5d292e 100644 --- a/package.json +++ b/package.json @@ -90,8 +90,8 @@ "@mui/material": "6.4.11", "@mui/x-date-pickers": "7.28.3", "@react-hook/resize-observer": "2.0.2", - "@tanstack/react-query": "5.73.3", - "@tanstack/react-query-devtools": "5.73.3", + "@tanstack/react-query": "5.75.5", + "@tanstack/react-query-devtools": "5.75.5", "abortcontroller-polyfill": "1.7.8", "blurhash": "2.0.5", "classlist.js": "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz", From b622705b7a39ddc8832207ac1a5c2004217858c0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 May 2025 14:30:29 +0000 Subject: [PATCH 262/645] Update dependency @jellyfin/sdk to v0.0.0-unstable.202505140501 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index e4eaddd35..12d5e5448 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202505130501", + "@jellyfin/sdk": "0.0.0-unstable.202505140501", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.11", "@mui/material": "6.4.11", @@ -4091,9 +4091,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202505130501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202505130501.tgz", - "integrity": "sha512-//xIoxCK8oDeNNZVJscfDfQwyRcpY6QydKYn/YYWfPKEMLmtAGENN5q8JVrNbyxi3c51eMRLJoCQ7Eofglz+BA==", + "version": "0.0.0-unstable.202505140501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202505140501.tgz", + "integrity": "sha512-IbnI/yOp9LhDMWeYt+a5Z/Zz1QkGRYI0CBNh76/9AHV/akVyZlgD3HShY5MEIZKax8cttqiP95XNTgTc0igRsA==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -28659,9 +28659,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202505130501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202505130501.tgz", - "integrity": "sha512-//xIoxCK8oDeNNZVJscfDfQwyRcpY6QydKYn/YYWfPKEMLmtAGENN5q8JVrNbyxi3c51eMRLJoCQ7Eofglz+BA==", + "version": "0.0.0-unstable.202505140501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202505140501.tgz", + "integrity": "sha512-IbnI/yOp9LhDMWeYt+a5Z/Zz1QkGRYI0CBNh76/9AHV/akVyZlgD3HShY5MEIZKax8cttqiP95XNTgTc0igRsA==", "requires": {} }, "@jellyfin/ux-web": { diff --git a/package.json b/package.json index 3bc5d292e..b4212beba 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202505130501", + "@jellyfin/sdk": "0.0.0-unstable.202505140501", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.11", "@mui/material": "6.4.11", From e32beaf8bd0421056505a8ce722bd776a078f516 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Wed, 14 May 2025 09:12:46 -0400 Subject: [PATCH 263/645] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index c64633295..d6c98f485 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -2025,5 +2025,6 @@ "HeaderServerUnavailable": "Servidor indisponível", "HeaderUpdateRequired": "Atualização necessária", "ViewSettings": "Ver definições", - "MessageForgotPasswordPinReset": "Introduz o PIN para concluir a redefinição da palavra-passe" + "MessageForgotPasswordPinReset": "Introduz o PIN para concluir a redefinição da palavra-passe", + "DownloadManager": "Transferências" } From f10f92aca412bc14fbcddd5adda79045d99a5922 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Wed, 14 May 2025 09:12:40 -0400 Subject: [PATCH 264/645] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index f3cf8f091..dc237b38e 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -2023,5 +2023,6 @@ "HeaderServerUnavailable": "Servidor indisponível", "HeaderUpdateRequired": "Atualização necessária", "ViewSettings": "Ver definições", - "MessageForgotPasswordPinReset": "Introduz o PIN para concluir a redefinição da palavra-passe" + "MessageForgotPasswordPinReset": "Introduz o PIN para concluir a redefinição da palavra-passe", + "DownloadManager": "Transferências" } From 8e31e2087c60c601013d41345ccef68ea5b5ac10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yago=20Ra=C3=B1a=20Gayoso?= Date: Wed, 14 May 2025 10:50:37 -0400 Subject: [PATCH 265/645] Translated using Weblate (Galician) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/gl/ --- src/strings/gl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/gl.json b/src/strings/gl.json index f0478a037..9b7998120 100644 --- a/src/strings/gl.json +++ b/src/strings/gl.json @@ -1046,5 +1046,6 @@ "Depressed": "Deprimido", "CustomSplashScreenSize": "As imaxes personalizadas deben ter unha relación de aspecto de 16x9 e un tamaño mínimo de 1920x1080.", "DeleteCustomImage": "Eliminar imaxe personalizada", - "DateModified": "Data de modificación" + "DateModified": "Data de modificación", + "HeaderLatestRecordings": "Gravacións recentemente engadidas" } From 6524da3fdc097c247163316a8bc8682930c06211 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 May 2025 15:16:35 +0000 Subject: [PATCH 266/645] Update React --- package-lock.json | 28 ++++++++++++++-------------- package.json | 4 ++-- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 12d5e5448..ad889acda 100644 --- a/package-lock.json +++ b/package-lock.json @@ -80,8 +80,8 @@ "@types/loadable__component": "5.13.9", "@types/lodash-es": "4.17.12", "@types/markdown-it": "14.1.2", - "@types/react": "18.3.20", - "@types/react-dom": "18.3.6", + "@types/react": "18.3.21", + "@types/react-dom": "18.3.7", "@types/react-lazy-load-image-component": "1.6.4", "@types/sortablejs": "1.15.8", "@typescript-eslint/parser": "8.31.0", @@ -5862,9 +5862,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.3.20", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.20.tgz", - "integrity": "sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==", + "version": "18.3.21", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.21.tgz", + "integrity": "sha512-gXLBtmlcRJeT09/sI4PxVwyrku6SaNUj/6cMubjE6T6XdY1fDmBL7r0nX0jbSZPU/Xr0KuwLLZh6aOYY5d91Xw==", "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -5872,9 +5872,9 @@ } }, "node_modules/@types/react-dom": { - "version": "18.3.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.6.tgz", - "integrity": "sha512-nf22//wEbKXusP6E9pfOCDwFdHAX4u172eaJI4YkDRQEZiorm6KfYnSC2SWLDMVWUOWPERmJnN0ujeAfTBLvrw==", + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -29680,18 +29680,18 @@ "dev": true }, "@types/react": { - "version": "18.3.20", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.20.tgz", - "integrity": "sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==", + "version": "18.3.21", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.21.tgz", + "integrity": "sha512-gXLBtmlcRJeT09/sI4PxVwyrku6SaNUj/6cMubjE6T6XdY1fDmBL7r0nX0jbSZPU/Xr0KuwLLZh6aOYY5d91Xw==", "requires": { "@types/prop-types": "*", "csstype": "^3.0.2" } }, "@types/react-dom": { - "version": "18.3.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.6.tgz", - "integrity": "sha512-nf22//wEbKXusP6E9pfOCDwFdHAX4u172eaJI4YkDRQEZiorm6KfYnSC2SWLDMVWUOWPERmJnN0ujeAfTBLvrw==", + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", "dev": true, "requires": {} }, diff --git a/package.json b/package.json index b4212beba..4fce0bca9 100644 --- a/package.json +++ b/package.json @@ -18,8 +18,8 @@ "@types/loadable__component": "5.13.9", "@types/lodash-es": "4.17.12", "@types/markdown-it": "14.1.2", - "@types/react": "18.3.20", - "@types/react-dom": "18.3.6", + "@types/react": "18.3.21", + "@types/react-dom": "18.3.7", "@types/react-lazy-load-image-component": "1.6.4", "@types/sortablejs": "1.15.8", "@typescript-eslint/parser": "8.31.0", From 32382b914633537dcaa10b10bff9a22350ba3c75 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 May 2025 16:10:56 +0000 Subject: [PATCH 267/645] Update dependency core-js to v3.42.0 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6715eb682..d8115b52f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,7 @@ "blurhash": "2.0.5", "classlist.js": "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz", "classnames": "2.5.1", - "core-js": "3.41.0", + "core-js": "3.42.0", "date-fns": "2.30.0", "dompurify": "2.5.8", "element-closest-polyfill": "1.0.7", @@ -8626,9 +8626,9 @@ } }, "node_modules/core-js": { - "version": "3.41.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.41.0.tgz", - "integrity": "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==", + "version": "3.42.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.42.0.tgz", + "integrity": "sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==", "hasInstallScript": true, "license": "MIT", "funding": { @@ -31730,9 +31730,9 @@ } }, "core-js": { - "version": "3.41.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.41.0.tgz", - "integrity": "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==" + "version": "3.42.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.42.0.tgz", + "integrity": "sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==" }, "core-js-compat": { "version": "3.40.0", diff --git a/package.json b/package.json index 64bfdbf17..93221ca3e 100644 --- a/package.json +++ b/package.json @@ -96,7 +96,7 @@ "blurhash": "2.0.5", "classlist.js": "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz", "classnames": "2.5.1", - "core-js": "3.41.0", + "core-js": "3.42.0", "date-fns": "2.30.0", "dompurify": "2.5.8", "element-closest-polyfill": "1.0.7", From 782e5167db6522396cfffabb8339a08af57fd55f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 May 2025 16:11:08 +0000 Subject: [PATCH 268/645] Update dependency globals to v16.1.0 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6715eb682..adffafc43 100644 --- a/package-lock.json +++ b/package-lock.json @@ -106,7 +106,7 @@ "expose-loader": "5.0.1", "fast-glob": "3.3.3", "fork-ts-checker-webpack-plugin": "9.1.0", - "globals": "16.0.0", + "globals": "16.1.0", "html-loader": "5.1.0", "html-webpack-plugin": "5.6.3", "jsdom": "26.1.0", @@ -12404,9 +12404,9 @@ } }, "node_modules/globals": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.0.0.tgz", - "integrity": "sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.1.0.tgz", + "integrity": "sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g==", "dev": true, "license": "MIT", "engines": { @@ -34410,9 +34410,9 @@ } }, "globals": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.0.0.tgz", - "integrity": "sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.1.0.tgz", + "integrity": "sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g==", "dev": true }, "globalthis": { diff --git a/package.json b/package.json index 64bfdbf17..95911a57a 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "expose-loader": "5.0.1", "fast-glob": "3.3.3", "fork-ts-checker-webpack-plugin": "9.1.0", - "globals": "16.0.0", + "globals": "16.1.0", "html-loader": "5.1.0", "html-webpack-plugin": "5.6.3", "jsdom": "26.1.0", From 6903ee52abc6c7e6251d626be36c5dd8444d1644 Mon Sep 17 00:00:00 2001 From: MrPlow Date: Wed, 14 May 2025 11:39:15 -0400 Subject: [PATCH 269/645] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/de.json b/src/strings/de.json index 851aee867..990ae3fef 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -2030,5 +2030,6 @@ "HeaderUpdateRequired": "Update erforderlich", "HeaderServerUnavailable": "Server nicht verfügbar", "ViewSettings": "Einstellungen anzeigen", - "MessageForgotPasswordPinReset": "Geben Sie hier die PIN ein, um das Zurücksetzen des Passworts abzuschließen" + "MessageForgotPasswordPinReset": "Gebe hier die PIN ein, um das Zurücksetzen des Passworts abzuschließen", + "DownloadManager": "Downloads" } From 72e4b983fddc29d9275c2bb5955db28e55f4a776 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 May 2025 18:01:44 +0000 Subject: [PATCH 270/645] Update Linters --- package-lock.json | 1161 ++++++++++++++++++++++++++++++++++++++++++--- package.json | 8 +- 2 files changed, 1090 insertions(+), 79 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4180e54f3..af8da4bc3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -72,7 +72,7 @@ "@babel/preset-env": "7.26.9", "@babel/preset-react": "7.26.3", "@eslint-community/eslint-plugin-eslint-comments": "4.5.0", - "@eslint/js": "9.25.1", + "@eslint/js": "9.26.0", "@stylistic/eslint-plugin": "4.2.0", "@stylistic/stylelint-plugin": "3.1.2", "@types/dompurify": "3.0.5", @@ -84,7 +84,7 @@ "@types/react-dom": "18.3.7", "@types/react-lazy-load-image-component": "1.6.4", "@types/sortablejs": "1.15.8", - "@typescript-eslint/parser": "8.31.0", + "@typescript-eslint/parser": "8.32.0", "@uupaa/dynamic-import-polyfill": "1.0.2", "@vitest/coverage-v8": "3.1.3", "autoprefixer": "10.4.21", @@ -96,7 +96,7 @@ "css-loader": "7.1.2", "cssnano": "7.0.7", "es-check": "8.0.2", - "eslint": "9.25.1", + "eslint": "9.26.0", "eslint-plugin-compat": "6.0.2", "eslint-plugin-import": "2.31.0", "eslint-plugin-jsx-a11y": "6.10.2", @@ -124,7 +124,7 @@ "stylelint-config-rational-order": "0.1.2", "stylelint-no-browser-hacks": "1.3.0", "stylelint-order": "6.0.4", - "stylelint-scss": "6.11.1", + "stylelint-scss": "6.12.0", "ts-loader": "9.5.2", "typescript": "5.8.3", "typescript-eslint": "8.31.0", @@ -3851,9 +3851,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.25.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.25.1.tgz", - "integrity": "sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg==", + "version": "9.26.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.26.0.tgz", + "integrity": "sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==", "dev": true, "license": "MIT", "engines": { @@ -4316,6 +4316,340 @@ "dev": true, "license": "CC0-1.0" }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.2.tgz", + "integrity": "sha512-H9vwztj5OAqHg9GockCQC06k1natgcxWQSRpQcPJf6i5+MWBzfKkRtxGbjQf0X2ihii0ffLZCRGbYV2f2bjNCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.3", + "eventsource": "^3.0.2", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.24.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/raw-body": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.6.3", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -6038,16 +6372,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.31.0.tgz", - "integrity": "sha512-67kYYShjBR0jNI5vsf/c3WG4u+zDnCTHTPqVMQguffaWWFs7artgwKmfwdifl+r6XyM5LYLas/dInj2T0SgJyw==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.0.tgz", + "integrity": "sha512-B2MdzyWxCE2+SqiZHAjPphft+/2x2FlO9YBx7eKE1BCb+rqBlQdhtAEhzIEdozHd55DXPmxBdpMygFJjfjjA9A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.31.0", - "@typescript-eslint/types": "8.31.0", - "@typescript-eslint/typescript-estree": "8.31.0", - "@typescript-eslint/visitor-keys": "8.31.0", + "@typescript-eslint/scope-manager": "8.32.0", + "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/typescript-estree": "8.32.0", + "@typescript-eslint/visitor-keys": "8.32.0", "debug": "^4.3.4" }, "engines": { @@ -6062,6 +6396,135 @@ "typescript": ">=4.8.4 <5.9.0" } }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.0.tgz", + "integrity": "sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/visitor-keys": "8.32.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.0.tgz", + "integrity": "sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.0.tgz", + "integrity": "sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/visitor-keys": "8.32.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.0.tgz", + "integrity": "sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.32.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/scope-manager": { "version": "8.31.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.31.0.tgz", @@ -8655,6 +9118,20 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/cosmiconfig": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", @@ -10201,9 +10678,9 @@ } }, "node_modules/eslint": { - "version": "9.25.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.25.1.tgz", - "integrity": "sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==", + "version": "9.26.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.26.0.tgz", + "integrity": "sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10213,11 +10690,12 @@ "@eslint/config-helpers": "^0.2.1", "@eslint/core": "^0.13.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.25.1", + "@eslint/js": "9.26.0", "@eslint/plugin-kit": "^0.2.8", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", + "@modelcontextprotocol/sdk": "^1.8.0", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", @@ -10241,7 +10719,8 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3" + "optionator": "^0.9.3", + "zod": "^3.24.2" }, "bin": { "eslint": "bin/eslint.js" @@ -11093,6 +11572,29 @@ "node": ">=0.8.x" } }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.1.tgz", + "integrity": "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/execall": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", @@ -11248,6 +11750,22 @@ "url": "https://opencollective.com/express" } }, + "node_modules/express-rate-limit": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz", + "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": "^4.11 || 5 || ^5.0.0-beta.1" + } + }, "node_modules/express/node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -13885,6 +14403,13 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "dev": true, + "license": "MIT" + }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -14511,9 +15036,9 @@ } }, "node_modules/known-css-properties": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz", - "integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==", + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.36.0.tgz", + "integrity": "sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==", "dev": true, "license": "MIT" }, @@ -16445,6 +16970,16 @@ "node": ">=0.10.0" } }, + "node_modules/pkce-challenge": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", + "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -19435,6 +19970,43 @@ "fsevents": "~2.3.2" } }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/router/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/router/node_modules/path-to-regexp": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, "node_modules/rrweb-cssom": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", @@ -23372,16 +23944,16 @@ } }, "node_modules/stylelint-scss": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.11.1.tgz", - "integrity": "sha512-e4rYo0UY+BIMtGeGanghrvHTjcryxgZbyFxUedp8dLFqC4P70aawNdYjRrQxbnKhu3BNr4+lt5e/53tcKXiwFA==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.12.0.tgz", + "integrity": "sha512-U7CKhi1YNkM1pXUXl/GMUXi8xKdhl4Ayxdyceie1nZ1XNIdaUgMV6OArpooWcDzEggwgYD0HP/xIgVJo9a655w==", "dev": true, "license": "MIT", "dependencies": { "css-tree": "^3.0.1", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.35.0", - "mdn-data": "^2.15.0", + "known-css-properties": "^0.36.0", + "mdn-data": "^2.21.0", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.6", "postcss-selector-parser": "^7.1.0", @@ -23426,9 +23998,9 @@ } }, "node_modules/stylelint-scss/node_modules/mdn-data": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.18.0.tgz", - "integrity": "sha512-gtCy1yim/vpHF/tq3B4Z43x3zKWpYeb4IM3d/Mf4oMYcNuoXOYEaqtoFlLHw9zd7+WNN3jNh6/WXyUrD3OIiwQ==", + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.21.0.tgz", + "integrity": "sha512-+ZKPQezM5vYJIkCxaC+4DTnRrVZR1CgsKLu5zsQERQx6Tea8Y+wMx5A24rq8A8NepCeatIQufVAekKNgiBMsGQ==", "dev": true, "license": "CC0-1.0" }, @@ -23671,13 +24243,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/stylelint/node_modules/known-css-properties": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.36.0.tgz", - "integrity": "sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==", - "dev": true, - "license": "MIT" - }, "node_modules/stylelint/node_modules/mdn-data": { "version": "2.12.2", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", @@ -24612,10 +25177,11 @@ } }, "node_modules/ts-api-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", - "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=18.12" }, @@ -24943,6 +25509,31 @@ "typescript": ">=4.8.4 <5.9.0" } }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.31.0.tgz", + "integrity": "sha512-67kYYShjBR0jNI5vsf/c3WG4u+zDnCTHTPqVMQguffaWWFs7artgwKmfwdifl+r6XyM5LYLas/dInj2T0SgJyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.31.0", + "@typescript-eslint/types": "8.31.0", + "@typescript-eslint/typescript-estree": "8.31.0", + "@typescript-eslint/visitor-keys": "8.31.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, "node_modules/uc.micro": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", @@ -26587,6 +27178,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zod": { + "version": "3.24.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.4.tgz", + "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.24.5", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", + "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" + } + }, "node_modules/zwitch": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", @@ -28603,9 +29214,9 @@ } }, "@eslint/js": { - "version": "9.25.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.25.1.tgz", - "integrity": "sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg==", + "version": "9.26.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.26.0.tgz", + "integrity": "sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==", "dev": true }, "@eslint/object-schema": { @@ -28904,6 +29515,237 @@ "integrity": "sha512-cEprODy3K3rHUvHjbjcNyXrz/vK9qVB8gu3Wue9+9DaLVv9v5pKmR+FKs4ZYeQb5pMNp//MuONGnrDHm55H63A==", "dev": true }, + "@modelcontextprotocol/sdk": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.2.tgz", + "integrity": "sha512-H9vwztj5OAqHg9GockCQC06k1natgcxWQSRpQcPJf6i5+MWBzfKkRtxGbjQf0X2ihii0ffLZCRGbYV2f2bjNCQ==", + "dev": true, + "requires": { + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.3", + "eventsource": "^3.0.2", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.24.1" + }, + "dependencies": { + "accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "dev": true, + "requires": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + } + }, + "body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "dev": true, + "requires": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + } + }, + "cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "dev": true + }, + "express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "dev": true, + "requires": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + } + }, + "finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "dev": true, + "requires": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + } + }, + "fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "dev": true + }, + "media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "dev": true + }, + "merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "dev": true + }, + "mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true + }, + "mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "dev": true, + "requires": { + "mime-db": "^1.54.0" + } + }, + "negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "dev": true + }, + "qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "dev": true, + "requires": { + "side-channel": "^1.1.0" + } + }, + "raw-body": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.6.3", + "unpipe": "1.0.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "dev": true, + "requires": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + } + }, + "serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "dev": true, + "requires": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, + "type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "dev": true, + "requires": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + } + } + } + }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -29918,16 +30760,90 @@ } }, "@typescript-eslint/parser": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.31.0.tgz", - "integrity": "sha512-67kYYShjBR0jNI5vsf/c3WG4u+zDnCTHTPqVMQguffaWWFs7artgwKmfwdifl+r6XyM5LYLas/dInj2T0SgJyw==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.0.tgz", + "integrity": "sha512-B2MdzyWxCE2+SqiZHAjPphft+/2x2FlO9YBx7eKE1BCb+rqBlQdhtAEhzIEdozHd55DXPmxBdpMygFJjfjjA9A==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "8.31.0", - "@typescript-eslint/types": "8.31.0", - "@typescript-eslint/typescript-estree": "8.31.0", - "@typescript-eslint/visitor-keys": "8.31.0", + "@typescript-eslint/scope-manager": "8.32.0", + "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/typescript-estree": "8.32.0", + "@typescript-eslint/visitor-keys": "8.32.0", "debug": "^4.3.4" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.0.tgz", + "integrity": "sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/visitor-keys": "8.32.0" + } + }, + "@typescript-eslint/types": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.0.tgz", + "integrity": "sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.0.tgz", + "integrity": "sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/visitor-keys": "8.32.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.0.tgz", + "integrity": "sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.32.0", + "eslint-visitor-keys": "^4.2.0" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true + } } }, "@typescript-eslint/scope-manager": { @@ -31748,6 +32664,16 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, "cosmiconfig": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", @@ -32838,9 +33764,9 @@ "dev": true }, "eslint": { - "version": "9.25.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.25.1.tgz", - "integrity": "sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==", + "version": "9.26.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.26.0.tgz", + "integrity": "sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", @@ -32849,11 +33775,12 @@ "@eslint/config-helpers": "^0.2.1", "@eslint/core": "^0.13.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.25.1", + "@eslint/js": "9.26.0", "@eslint/plugin-kit": "^0.2.8", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", + "@modelcontextprotocol/sdk": "^1.8.0", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", @@ -32877,7 +33804,8 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3" + "optionator": "^0.9.3", + "zod": "^3.24.2" }, "dependencies": { "ajv": { @@ -33455,6 +34383,21 @@ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, + "eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "dev": true, + "requires": { + "eventsource-parser": "^3.0.1" + } + }, + "eventsource-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.1.tgz", + "integrity": "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==", + "dev": true + }, "execall": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", @@ -33615,6 +34558,13 @@ } } }, + "express-rate-limit": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz", + "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", + "dev": true, + "requires": {} + }, "ext": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", @@ -35409,6 +36359,12 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, + "is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "dev": true + }, "is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -35849,9 +36805,9 @@ "dev": true }, "known-css-properties": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz", - "integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==", + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.36.0.tgz", + "integrity": "sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==", "dev": true }, "kuler": { @@ -37284,6 +38240,12 @@ "pinkie": "^2.0.0" } }, + "pkce-challenge": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", + "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", + "dev": true + }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -39204,6 +40166,33 @@ "fsevents": "~2.3.2" } }, + "router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "dev": true, + "requires": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "path-to-regexp": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "dev": true + } + } + }, "rrweb-cssom": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", @@ -40763,12 +41752,6 @@ "argparse": "^2.0.1" } }, - "known-css-properties": { - "version": "0.36.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.36.0.tgz", - "integrity": "sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==", - "dev": true - }, "mdn-data": { "version": "2.12.2", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", @@ -42235,15 +43218,15 @@ } }, "stylelint-scss": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.11.1.tgz", - "integrity": "sha512-e4rYo0UY+BIMtGeGanghrvHTjcryxgZbyFxUedp8dLFqC4P70aawNdYjRrQxbnKhu3BNr4+lt5e/53tcKXiwFA==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.12.0.tgz", + "integrity": "sha512-U7CKhi1YNkM1pXUXl/GMUXi8xKdhl4Ayxdyceie1nZ1XNIdaUgMV6OArpooWcDzEggwgYD0HP/xIgVJo9a655w==", "dev": true, "requires": { "css-tree": "^3.0.1", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.35.0", - "mdn-data": "^2.15.0", + "known-css-properties": "^0.36.0", + "mdn-data": "^2.21.0", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.6", "postcss-selector-parser": "^7.1.0", @@ -42275,9 +43258,9 @@ "dev": true }, "mdn-data": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.18.0.tgz", - "integrity": "sha512-gtCy1yim/vpHF/tq3B4Z43x3zKWpYeb4IM3d/Mf4oMYcNuoXOYEaqtoFlLHw9zd7+WNN3jNh6/WXyUrD3OIiwQ==", + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.21.0.tgz", + "integrity": "sha512-+ZKPQezM5vYJIkCxaC+4DTnRrVZR1CgsKLu5zsQERQx6Tea8Y+wMx5A24rq8A8NepCeatIQufVAekKNgiBMsGQ==", "dev": true }, "postcss-selector-parser": { @@ -42876,9 +43859,9 @@ "dev": true }, "ts-api-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", - "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, "requires": {} }, @@ -43099,6 +44082,21 @@ "@typescript-eslint/eslint-plugin": "8.31.0", "@typescript-eslint/parser": "8.31.0", "@typescript-eslint/utils": "8.31.0" + }, + "dependencies": { + "@typescript-eslint/parser": { + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.31.0.tgz", + "integrity": "sha512-67kYYShjBR0jNI5vsf/c3WG4u+zDnCTHTPqVMQguffaWWFs7artgwKmfwdifl+r6XyM5LYLas/dInj2T0SgJyw==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "8.31.0", + "@typescript-eslint/types": "8.31.0", + "@typescript-eslint/typescript-estree": "8.31.0", + "@typescript-eslint/visitor-keys": "8.31.0", + "debug": "^4.3.4" + } + } } }, "uc.micro": { @@ -44195,6 +45193,19 @@ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true }, + "zod": { + "version": "3.24.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.4.tgz", + "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==", + "dev": true + }, + "zod-to-json-schema": { + "version": "3.24.5", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", + "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", + "dev": true, + "requires": {} + }, "zwitch": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", diff --git a/package.json b/package.json index 59eccede4..1f51ce621 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "@babel/preset-env": "7.26.9", "@babel/preset-react": "7.26.3", "@eslint-community/eslint-plugin-eslint-comments": "4.5.0", - "@eslint/js": "9.25.1", + "@eslint/js": "9.26.0", "@stylistic/eslint-plugin": "4.2.0", "@stylistic/stylelint-plugin": "3.1.2", "@types/dompurify": "3.0.5", @@ -22,7 +22,7 @@ "@types/react-dom": "18.3.7", "@types/react-lazy-load-image-component": "1.6.4", "@types/sortablejs": "1.15.8", - "@typescript-eslint/parser": "8.31.0", + "@typescript-eslint/parser": "8.32.0", "@uupaa/dynamic-import-polyfill": "1.0.2", "@vitest/coverage-v8": "3.1.3", "autoprefixer": "10.4.21", @@ -34,7 +34,7 @@ "css-loader": "7.1.2", "cssnano": "7.0.7", "es-check": "8.0.2", - "eslint": "9.25.1", + "eslint": "9.26.0", "eslint-plugin-compat": "6.0.2", "eslint-plugin-import": "2.31.0", "eslint-plugin-jsx-a11y": "6.10.2", @@ -62,7 +62,7 @@ "stylelint-config-rational-order": "0.1.2", "stylelint-no-browser-hacks": "1.3.0", "stylelint-order": "6.0.4", - "stylelint-scss": "6.11.1", + "stylelint-scss": "6.12.0", "ts-loader": "9.5.2", "typescript": "5.8.3", "typescript-eslint": "8.31.0", From b90ff38bdad501257073b7b7d9483aced00c6082 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 May 2025 20:33:37 +0000 Subject: [PATCH 271/645] Update Sass to v1.87.0 --- package-lock.json | 348 +++++++++++++++++++++++----------------------- package.json | 4 +- 2 files changed, 176 insertions(+), 176 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4180e54f3..0dc46542c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -115,7 +115,7 @@ "postcss-loader": "8.1.1", "postcss-preset-env": "10.1.6", "postcss-scss": "4.0.9", - "sass": "1.86.3", + "sass": "1.87.0", "sass-loader": "16.0.5", "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", @@ -142,7 +142,7 @@ "yarn": "YARN NO LONGER USED - use npm instead." }, "optionalDependencies": { - "sass-embedded": "1.86.3" + "sass-embedded": "1.87.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -19588,9 +19588,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.86.3.tgz", - "integrity": "sha512-iGtg8kus4GrsGLRDLRBRHY9dNVA78ZaS7xr01cWnS7PEMQyFtTqBiyCrfpTYTZXRWM94akzckYjh8oADfFNTzw==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.87.0.tgz", + "integrity": "sha512-d0NoFH4v6SjEK7BoX810Jsrhj7IQSYHAHLi/iSpgqKc7LaIDshFRlSg5LOymf9FqQhxEHs2W5ZQXlvy0KD45Uw==", "dev": true, "license": "MIT", "dependencies": { @@ -19609,9 +19609,9 @@ } }, "node_modules/sass-embedded": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.86.3.tgz", - "integrity": "sha512-3pZSp24ibO1hdopj+W9DuiWsZOb2YY6AFRo/jjutKLBkqJGM1nJjXzhAYfzRV+Xn5BX1eTI4bBTE09P0XNHOZg==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.87.0.tgz", + "integrity": "sha512-1IA3iTJNh4BkkA/nidKiVwbmkxr9o6LsPegycHMX/JYs255zpocN5GdLF1+onohQCJxbs5ldr8osKV7qNaNBjg==", "license": "MIT", "optional": true, "dependencies": { @@ -19631,32 +19631,32 @@ "node": ">=16.0.0" }, "optionalDependencies": { - "sass-embedded-android-arm": "1.86.3", - "sass-embedded-android-arm64": "1.86.3", - "sass-embedded-android-ia32": "1.86.3", - "sass-embedded-android-riscv64": "1.86.3", - "sass-embedded-android-x64": "1.86.3", - "sass-embedded-darwin-arm64": "1.86.3", - "sass-embedded-darwin-x64": "1.86.3", - "sass-embedded-linux-arm": "1.86.3", - "sass-embedded-linux-arm64": "1.86.3", - "sass-embedded-linux-ia32": "1.86.3", - "sass-embedded-linux-musl-arm": "1.86.3", - "sass-embedded-linux-musl-arm64": "1.86.3", - "sass-embedded-linux-musl-ia32": "1.86.3", - "sass-embedded-linux-musl-riscv64": "1.86.3", - "sass-embedded-linux-musl-x64": "1.86.3", - "sass-embedded-linux-riscv64": "1.86.3", - "sass-embedded-linux-x64": "1.86.3", - "sass-embedded-win32-arm64": "1.86.3", - "sass-embedded-win32-ia32": "1.86.3", - "sass-embedded-win32-x64": "1.86.3" + "sass-embedded-android-arm": "1.87.0", + "sass-embedded-android-arm64": "1.87.0", + "sass-embedded-android-ia32": "1.87.0", + "sass-embedded-android-riscv64": "1.87.0", + "sass-embedded-android-x64": "1.87.0", + "sass-embedded-darwin-arm64": "1.87.0", + "sass-embedded-darwin-x64": "1.87.0", + "sass-embedded-linux-arm": "1.87.0", + "sass-embedded-linux-arm64": "1.87.0", + "sass-embedded-linux-ia32": "1.87.0", + "sass-embedded-linux-musl-arm": "1.87.0", + "sass-embedded-linux-musl-arm64": "1.87.0", + "sass-embedded-linux-musl-ia32": "1.87.0", + "sass-embedded-linux-musl-riscv64": "1.87.0", + "sass-embedded-linux-musl-x64": "1.87.0", + "sass-embedded-linux-riscv64": "1.87.0", + "sass-embedded-linux-x64": "1.87.0", + "sass-embedded-win32-arm64": "1.87.0", + "sass-embedded-win32-ia32": "1.87.0", + "sass-embedded-win32-x64": "1.87.0" } }, "node_modules/sass-embedded-android-arm": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.86.3.tgz", - "integrity": "sha512-UyeXrFzZSvrGbvrWUBcspbsbivGgAgebLGJdSqJulgSyGbA6no3DWQ5Qpdd6+OAUC39BlpPu74Wx9s4RrVuaFw==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.87.0.tgz", + "integrity": "sha512-Z20u/Y1kFDpMbgiloR5YPLxNuMVeKQRC8e/n68oAAxf3u7rDSmNn2msi7USqgT1f2zdBBNawn/ifbFEla6JiHw==", "cpu": [ "arm" ], @@ -19670,9 +19670,9 @@ } }, "node_modules/sass-embedded-android-arm64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.86.3.tgz", - "integrity": "sha512-q+XwFp6WgAv+UgnQhsB8KQ95kppvWAB7DSoJp+8Vino8b9ND+1ai3cUUZPE5u4SnLZrgo5NtrbPvN5KLc4Pfyg==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.87.0.tgz", + "integrity": "sha512-uqeZoBuXm3W2KhxolScAAfWOLHL21e50g7AxlLmG0he7WZsWw6e9kSnmq301iLIFp4kvmXYXbXbNKAeu9ItRYA==", "cpu": [ "arm64" ], @@ -19686,9 +19686,9 @@ } }, "node_modules/sass-embedded-android-ia32": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.86.3.tgz", - "integrity": "sha512-gTJjVh2cRzvGujXj5ApPk/owUTL5SiO7rDtNLrzYAzi1N5HRuLYXqk3h1IQY3+eCOBjGl7mQ9XyySbJs/3hDvg==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.87.0.tgz", + "integrity": "sha512-hSWTqo2Igdig528cUb1W1+emw9d1J4+nqOoR4tERS04zcwRRFNDiuBT0o5meV7nkEwE982F+h57YdcRXj8gTtg==", "cpu": [ "ia32" ], @@ -19702,9 +19702,9 @@ } }, "node_modules/sass-embedded-android-riscv64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.86.3.tgz", - "integrity": "sha512-Po3JnyiCS16kd6REo1IMUbFGYtvL9O0rmKaXx5vOuBaJD1LPy2LiSSp7TU7wkJ9IxsTDGzFaSeP1I9qb6D8VVg==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.87.0.tgz", + "integrity": "sha512-kBAPSjiTBLy5ua/0LRNAJwOAARhzFU7gP35fYORJcdBuz1lkIVPVnid1lh9qQ6Ce9MOJcr7VKFtGnTuqVeig5A==", "cpu": [ "riscv64" ], @@ -19718,9 +19718,9 @@ } }, "node_modules/sass-embedded-android-x64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.86.3.tgz", - "integrity": "sha512-+7h3jdDv/0kUFx0BvxYlq2fa7CcHiDPlta6k5OxO5K6jyqJwo9hc0Z052BoYEauWTqZ+vK6bB5rv2BIzq4U9nA==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.87.0.tgz", + "integrity": "sha512-ZHMrNdtdMSpJUYco2MesnlPwDTZftD3pqkkOMI2pbqarPoFUKJtP5k80nwCM0sJGtqfNE+O16w9yPght0CMiJg==", "cpu": [ "x64" ], @@ -19734,9 +19734,9 @@ } }, "node_modules/sass-embedded-darwin-arm64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.86.3.tgz", - "integrity": "sha512-EgLwV4ORm5Hr0DmIXo0Xw/vlzwLnfAiqD2jDXIglkBsc5czJmo4/IBdGXOP65TRnsgJEqvbU3aQhuawX5++x9A==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.87.0.tgz", + "integrity": "sha512-7TK1JWJdCIRSdZv5CJv/HpDz/wIfwUy2FoPz9sVOEj1pDTH0N+VfJd5VutCddIdoQN9jr0ap8vwkc65FbAxV2A==", "cpu": [ "arm64" ], @@ -19750,9 +19750,9 @@ } }, "node_modules/sass-embedded-darwin-x64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.86.3.tgz", - "integrity": "sha512-dfKhfrGPRNLWLC82vy/vQGmNKmAiKWpdFuWiePRtg/E95pqw+sCu6080Y6oQLfFu37Iq3MpnXiSpDuSo7UnPWA==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.87.0.tgz", + "integrity": "sha512-2JiQzt7FmgUC4MYT2QvbeH/Bi3e76WEhaYoc5P3WyTW8unsHksyTdMuTuYe0Qf9usIyt6bmm5no/4BBw7c8Cig==", "cpu": [ "x64" ], @@ -19766,9 +19766,9 @@ } }, "node_modules/sass-embedded-linux-arm": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.86.3.tgz", - "integrity": "sha512-+fVCIH+OR0SMHn2NEhb/VfbpHuUxcPtqMS34OCV3Ka99LYZUJZqth4M3lT/ppGl52mwIVLNYzR4iLe6mdZ6mYA==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.87.0.tgz", + "integrity": "sha512-z5P6INMsGXiUcq1sRRbksyQUhalFFYjTEexuxfSYdK3U2YQMADHubQh8pGzkWvFRPOpnh83RiGuwvpaARYHnsw==", "cpu": [ "arm" ], @@ -19782,9 +19782,9 @@ } }, "node_modules/sass-embedded-linux-arm64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.86.3.tgz", - "integrity": "sha512-tYq5rywR53Qtc+0KI6pPipOvW7a47ETY69VxfqI9BR2RKw2hBbaz0bIw6OaOgEBv2/XNwcWb7a4sr7TqgkqKAA==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.87.0.tgz", + "integrity": "sha512-5z+mwJCbGZcg+q+MwdEVSh0ogFK7OSAe175Gsozzr/Izw34Q+RGUw9O82jsV2c4YNuTAQvzEHgIO5cvNvt3Quw==", "cpu": [ "arm64" ], @@ -19798,9 +19798,9 @@ } }, "node_modules/sass-embedded-linux-ia32": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.86.3.tgz", - "integrity": "sha512-CmQ5OkqnaeLdaF+bMqlYGooBuenqm3LvEN9H8BLhjkpWiFW8hnYMetiqMcJjhrXLvDw601KGqA5sr/Rsg5s45g==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.87.0.tgz", + "integrity": "sha512-Xzcp+YPp0iakGL148Jl57CO+MxLuj2jsry3M+rc1cSnDlvkjNVs6TMxaL70GFeV5HdU2V60voYcgE7adDUtJjw==", "cpu": [ "ia32" ], @@ -19814,9 +19814,9 @@ } }, "node_modules/sass-embedded-linux-musl-arm": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.86.3.tgz", - "integrity": "sha512-SEm65SQknI4pl+mH5Xf231hOkHJyrlgh5nj4qDbiBG6gFeutaNkNIeRgKEg3cflXchCr8iV/q/SyPgjhhzQb7w==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.87.0.tgz", + "integrity": "sha512-4PyqOWhRzyu06RRmpCCBOJdF4BOv7s446wrV6yODtEyyfSIDx3MJabo3KT0oJ1lTWSI/aU3R89bKx0JFXcIHHw==", "cpu": [ "arm" ], @@ -19830,9 +19830,9 @@ } }, "node_modules/sass-embedded-linux-musl-arm64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.86.3.tgz", - "integrity": "sha512-4zOr2C/eW89rxb4ozTfn7lBzyyM5ZigA1ZSRTcAR26Qbg/t2UksLdGnVX9/yxga0d6aOi0IvO/7iM2DPPRRotg==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.87.0.tgz", + "integrity": "sha512-HWE5eTRCoKzFZWsxOjDMTF5m4DDTQ0n7NJxSYiUXPBDydr9viPXbGOMYG7WVJLjiF7upr7DYo/mfp/SNTMlZyg==", "cpu": [ "arm64" ], @@ -19846,9 +19846,9 @@ } }, "node_modules/sass-embedded-linux-musl-ia32": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.86.3.tgz", - "integrity": "sha512-84Tcld32LB1loiqUvczWyVBQRCChm0wNLlkT59qF29nxh8njFIVf9yaPgXcSyyjpPoD9Tu0wnq3dvVzoMCh9AQ==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.87.0.tgz", + "integrity": "sha512-aQaPvlRn3kh93PLQvl6BcFKu8Ji92+42blFEkg6nMVvmugD5ZwH2TGFrX25ibx4CYxRpMS4ssF7a0i7vy5HB1Q==", "cpu": [ "ia32" ], @@ -19862,9 +19862,9 @@ } }, "node_modules/sass-embedded-linux-musl-riscv64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.86.3.tgz", - "integrity": "sha512-IxEqoiD7vdNpiOwccybbV93NljBy64wSTkUOknGy21SyV43C8uqESOwTwW9ywa3KufImKm8L3uQAW/B0KhJMWg==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.87.0.tgz", + "integrity": "sha512-o5DxcqiFzET3KRWo+futHr/lhAMBP3tJGGx8YIgpHQYfvDMbsvE0hiFC+nZ/GF9dbcGd+ceIQwfvE5mcc7Gsjw==", "cpu": [ "riscv64" ], @@ -19878,9 +19878,9 @@ } }, "node_modules/sass-embedded-linux-musl-x64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.86.3.tgz", - "integrity": "sha512-ePeTPXUxPK6JgHcUfnrkIyDtyt+zlAvF22mVZv6y1g/PZFm1lSfX+Za7TYHg9KaYqaaXDiw6zICX4i44HhR8rA==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.87.0.tgz", + "integrity": "sha512-dKxWsu9Wu/CyfzQmHdeiGqrRSzJ85VUjbSx+aP1/7ttmps3SSg+YW95PuqnCOa7GSuSreC3dKKpXHTywUxMLQA==", "cpu": [ "x64" ], @@ -19894,9 +19894,9 @@ } }, "node_modules/sass-embedded-linux-riscv64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.86.3.tgz", - "integrity": "sha512-NuXQ72dwfNLe35E+RaXJ4Noq4EkFwM65eWwCwxEWyJO9qxOx1EXiCAJii6x8kkOh5daWuMU0VAI1B9RsJaqqQQ==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.87.0.tgz", + "integrity": "sha512-Sy3ESZ4FwBiijvmTA9n+0p0w3MNCue1AgINVPzpAY27EFi0h49eqQm9SWfOkFqmkFS2zFRYowdQOr5Bbr2gOXA==", "cpu": [ "riscv64" ], @@ -19910,9 +19910,9 @@ } }, "node_modules/sass-embedded-linux-x64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.86.3.tgz", - "integrity": "sha512-t8be9zJ5B82+og9bQmIQ83yMGYZMTMrlGA+uGWtYacmwg6w3093dk91Fx0YzNSZBp3Tk60qVYjCZnEIwy60x0g==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.87.0.tgz", + "integrity": "sha512-+UfjakOcHHKTnEqB3EZ+KqzezQOe1emvy4Rs+eQhLyfekpYuNze/qlRvYxfKTmrtvDiUrIto8MXsyZfMLzkuMA==", "cpu": [ "x64" ], @@ -19926,9 +19926,9 @@ } }, "node_modules/sass-embedded-win32-arm64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.86.3.tgz", - "integrity": "sha512-4ghuAzjX4q8Nksm0aifRz8hgXMMxS0SuymrFfkfJlrSx68pIgvAge6AOw0edoZoe0Tf5ZbsWUWamhkNyNxkTvw==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.87.0.tgz", + "integrity": "sha512-m1DS6FYUE0/fv+vt38uQB/kxR4UjnyD+2zcSc298pFmA0aYh/XZIPWw7RxG1HL3KLE1ZrGyu3254MPoxRhs3ig==", "cpu": [ "arm64" ], @@ -19942,9 +19942,9 @@ } }, "node_modules/sass-embedded-win32-ia32": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.86.3.tgz", - "integrity": "sha512-tCaK4zIRq9mLRPxLzBAdYlfCuS/xLNpmjunYxeWkIwlJo+k53h1udyXH/FInnQ2GgEz0xMXyvH3buuPgzwWYsw==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.87.0.tgz", + "integrity": "sha512-JztXLo59GMe2E6g+kCsyiERYhtZgkcyDYx6CrXoSTE5WaE+RbxRiCCCv8/1+hf406f08pUxJ8G0Ody7M5urtBA==", "cpu": [ "ia32" ], @@ -19958,9 +19958,9 @@ } }, "node_modules/sass-embedded-win32-x64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.86.3.tgz", - "integrity": "sha512-zS+YNKfTF4SnOfpC77VTb0qNZyTXrxnAezSoRV0xnw6HlY+1WawMSSB6PbWtmbvyfXNgpmJUttoTtsvJjRCucg==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.87.0.tgz", + "integrity": "sha512-4nQErpauvhgSo+7ClumGdjdf9sGx+U9yBgvhI0+zUw+D5YvraVgvA0Lk8Wuwntx2PqnvKUk8YDr/vxHJostv4Q==", "cpu": [ "x64" ], @@ -39311,9 +39311,9 @@ "dev": true }, "sass": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.86.3.tgz", - "integrity": "sha512-iGtg8kus4GrsGLRDLRBRHY9dNVA78ZaS7xr01cWnS7PEMQyFtTqBiyCrfpTYTZXRWM94akzckYjh8oADfFNTzw==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.87.0.tgz", + "integrity": "sha512-d0NoFH4v6SjEK7BoX810Jsrhj7IQSYHAHLi/iSpgqKc7LaIDshFRlSg5LOymf9FqQhxEHs2W5ZQXlvy0KD45Uw==", "dev": true, "requires": { "@parcel/watcher": "^2.4.1", @@ -39340,9 +39340,9 @@ } }, "sass-embedded": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.86.3.tgz", - "integrity": "sha512-3pZSp24ibO1hdopj+W9DuiWsZOb2YY6AFRo/jjutKLBkqJGM1nJjXzhAYfzRV+Xn5BX1eTI4bBTE09P0XNHOZg==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.87.0.tgz", + "integrity": "sha512-1IA3iTJNh4BkkA/nidKiVwbmkxr9o6LsPegycHMX/JYs255zpocN5GdLF1+onohQCJxbs5ldr8osKV7qNaNBjg==", "optional": true, "requires": { "@bufbuild/protobuf": "^2.0.0", @@ -39350,26 +39350,26 @@ "colorjs.io": "^0.5.0", "immutable": "^5.0.2", "rxjs": "^7.4.0", - "sass-embedded-android-arm": "1.86.3", - "sass-embedded-android-arm64": "1.86.3", - "sass-embedded-android-ia32": "1.86.3", - "sass-embedded-android-riscv64": "1.86.3", - "sass-embedded-android-x64": "1.86.3", - "sass-embedded-darwin-arm64": "1.86.3", - "sass-embedded-darwin-x64": "1.86.3", - "sass-embedded-linux-arm": "1.86.3", - "sass-embedded-linux-arm64": "1.86.3", - "sass-embedded-linux-ia32": "1.86.3", - "sass-embedded-linux-musl-arm": "1.86.3", - "sass-embedded-linux-musl-arm64": "1.86.3", - "sass-embedded-linux-musl-ia32": "1.86.3", - "sass-embedded-linux-musl-riscv64": "1.86.3", - "sass-embedded-linux-musl-x64": "1.86.3", - "sass-embedded-linux-riscv64": "1.86.3", - "sass-embedded-linux-x64": "1.86.3", - "sass-embedded-win32-arm64": "1.86.3", - "sass-embedded-win32-ia32": "1.86.3", - "sass-embedded-win32-x64": "1.86.3", + "sass-embedded-android-arm": "1.87.0", + "sass-embedded-android-arm64": "1.87.0", + "sass-embedded-android-ia32": "1.87.0", + "sass-embedded-android-riscv64": "1.87.0", + "sass-embedded-android-x64": "1.87.0", + "sass-embedded-darwin-arm64": "1.87.0", + "sass-embedded-darwin-x64": "1.87.0", + "sass-embedded-linux-arm": "1.87.0", + "sass-embedded-linux-arm64": "1.87.0", + "sass-embedded-linux-ia32": "1.87.0", + "sass-embedded-linux-musl-arm": "1.87.0", + "sass-embedded-linux-musl-arm64": "1.87.0", + "sass-embedded-linux-musl-ia32": "1.87.0", + "sass-embedded-linux-musl-riscv64": "1.87.0", + "sass-embedded-linux-musl-x64": "1.87.0", + "sass-embedded-linux-riscv64": "1.87.0", + "sass-embedded-linux-x64": "1.87.0", + "sass-embedded-win32-arm64": "1.87.0", + "sass-embedded-win32-ia32": "1.87.0", + "sass-embedded-win32-x64": "1.87.0", "supports-color": "^8.1.1", "sync-child-process": "^1.0.2", "varint": "^6.0.0" @@ -39393,123 +39393,123 @@ } }, "sass-embedded-android-arm": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.86.3.tgz", - "integrity": "sha512-UyeXrFzZSvrGbvrWUBcspbsbivGgAgebLGJdSqJulgSyGbA6no3DWQ5Qpdd6+OAUC39BlpPu74Wx9s4RrVuaFw==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.87.0.tgz", + "integrity": "sha512-Z20u/Y1kFDpMbgiloR5YPLxNuMVeKQRC8e/n68oAAxf3u7rDSmNn2msi7USqgT1f2zdBBNawn/ifbFEla6JiHw==", "optional": true }, "sass-embedded-android-arm64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.86.3.tgz", - "integrity": "sha512-q+XwFp6WgAv+UgnQhsB8KQ95kppvWAB7DSoJp+8Vino8b9ND+1ai3cUUZPE5u4SnLZrgo5NtrbPvN5KLc4Pfyg==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.87.0.tgz", + "integrity": "sha512-uqeZoBuXm3W2KhxolScAAfWOLHL21e50g7AxlLmG0he7WZsWw6e9kSnmq301iLIFp4kvmXYXbXbNKAeu9ItRYA==", "optional": true }, "sass-embedded-android-ia32": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.86.3.tgz", - "integrity": "sha512-gTJjVh2cRzvGujXj5ApPk/owUTL5SiO7rDtNLrzYAzi1N5HRuLYXqk3h1IQY3+eCOBjGl7mQ9XyySbJs/3hDvg==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.87.0.tgz", + "integrity": "sha512-hSWTqo2Igdig528cUb1W1+emw9d1J4+nqOoR4tERS04zcwRRFNDiuBT0o5meV7nkEwE982F+h57YdcRXj8gTtg==", "optional": true }, "sass-embedded-android-riscv64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.86.3.tgz", - "integrity": "sha512-Po3JnyiCS16kd6REo1IMUbFGYtvL9O0rmKaXx5vOuBaJD1LPy2LiSSp7TU7wkJ9IxsTDGzFaSeP1I9qb6D8VVg==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.87.0.tgz", + "integrity": "sha512-kBAPSjiTBLy5ua/0LRNAJwOAARhzFU7gP35fYORJcdBuz1lkIVPVnid1lh9qQ6Ce9MOJcr7VKFtGnTuqVeig5A==", "optional": true }, "sass-embedded-android-x64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.86.3.tgz", - "integrity": "sha512-+7h3jdDv/0kUFx0BvxYlq2fa7CcHiDPlta6k5OxO5K6jyqJwo9hc0Z052BoYEauWTqZ+vK6bB5rv2BIzq4U9nA==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.87.0.tgz", + "integrity": "sha512-ZHMrNdtdMSpJUYco2MesnlPwDTZftD3pqkkOMI2pbqarPoFUKJtP5k80nwCM0sJGtqfNE+O16w9yPght0CMiJg==", "optional": true }, "sass-embedded-darwin-arm64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.86.3.tgz", - "integrity": "sha512-EgLwV4ORm5Hr0DmIXo0Xw/vlzwLnfAiqD2jDXIglkBsc5czJmo4/IBdGXOP65TRnsgJEqvbU3aQhuawX5++x9A==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.87.0.tgz", + "integrity": "sha512-7TK1JWJdCIRSdZv5CJv/HpDz/wIfwUy2FoPz9sVOEj1pDTH0N+VfJd5VutCddIdoQN9jr0ap8vwkc65FbAxV2A==", "optional": true }, "sass-embedded-darwin-x64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.86.3.tgz", - "integrity": "sha512-dfKhfrGPRNLWLC82vy/vQGmNKmAiKWpdFuWiePRtg/E95pqw+sCu6080Y6oQLfFu37Iq3MpnXiSpDuSo7UnPWA==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.87.0.tgz", + "integrity": "sha512-2JiQzt7FmgUC4MYT2QvbeH/Bi3e76WEhaYoc5P3WyTW8unsHksyTdMuTuYe0Qf9usIyt6bmm5no/4BBw7c8Cig==", "optional": true }, "sass-embedded-linux-arm": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.86.3.tgz", - "integrity": "sha512-+fVCIH+OR0SMHn2NEhb/VfbpHuUxcPtqMS34OCV3Ka99LYZUJZqth4M3lT/ppGl52mwIVLNYzR4iLe6mdZ6mYA==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.87.0.tgz", + "integrity": "sha512-z5P6INMsGXiUcq1sRRbksyQUhalFFYjTEexuxfSYdK3U2YQMADHubQh8pGzkWvFRPOpnh83RiGuwvpaARYHnsw==", "optional": true }, "sass-embedded-linux-arm64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.86.3.tgz", - "integrity": "sha512-tYq5rywR53Qtc+0KI6pPipOvW7a47ETY69VxfqI9BR2RKw2hBbaz0bIw6OaOgEBv2/XNwcWb7a4sr7TqgkqKAA==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.87.0.tgz", + "integrity": "sha512-5z+mwJCbGZcg+q+MwdEVSh0ogFK7OSAe175Gsozzr/Izw34Q+RGUw9O82jsV2c4YNuTAQvzEHgIO5cvNvt3Quw==", "optional": true }, "sass-embedded-linux-ia32": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.86.3.tgz", - "integrity": "sha512-CmQ5OkqnaeLdaF+bMqlYGooBuenqm3LvEN9H8BLhjkpWiFW8hnYMetiqMcJjhrXLvDw601KGqA5sr/Rsg5s45g==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.87.0.tgz", + "integrity": "sha512-Xzcp+YPp0iakGL148Jl57CO+MxLuj2jsry3M+rc1cSnDlvkjNVs6TMxaL70GFeV5HdU2V60voYcgE7adDUtJjw==", "optional": true }, "sass-embedded-linux-musl-arm": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.86.3.tgz", - "integrity": "sha512-SEm65SQknI4pl+mH5Xf231hOkHJyrlgh5nj4qDbiBG6gFeutaNkNIeRgKEg3cflXchCr8iV/q/SyPgjhhzQb7w==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.87.0.tgz", + "integrity": "sha512-4PyqOWhRzyu06RRmpCCBOJdF4BOv7s446wrV6yODtEyyfSIDx3MJabo3KT0oJ1lTWSI/aU3R89bKx0JFXcIHHw==", "optional": true }, "sass-embedded-linux-musl-arm64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.86.3.tgz", - "integrity": "sha512-4zOr2C/eW89rxb4ozTfn7lBzyyM5ZigA1ZSRTcAR26Qbg/t2UksLdGnVX9/yxga0d6aOi0IvO/7iM2DPPRRotg==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.87.0.tgz", + "integrity": "sha512-HWE5eTRCoKzFZWsxOjDMTF5m4DDTQ0n7NJxSYiUXPBDydr9viPXbGOMYG7WVJLjiF7upr7DYo/mfp/SNTMlZyg==", "optional": true }, "sass-embedded-linux-musl-ia32": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.86.3.tgz", - "integrity": "sha512-84Tcld32LB1loiqUvczWyVBQRCChm0wNLlkT59qF29nxh8njFIVf9yaPgXcSyyjpPoD9Tu0wnq3dvVzoMCh9AQ==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.87.0.tgz", + "integrity": "sha512-aQaPvlRn3kh93PLQvl6BcFKu8Ji92+42blFEkg6nMVvmugD5ZwH2TGFrX25ibx4CYxRpMS4ssF7a0i7vy5HB1Q==", "optional": true }, "sass-embedded-linux-musl-riscv64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.86.3.tgz", - "integrity": "sha512-IxEqoiD7vdNpiOwccybbV93NljBy64wSTkUOknGy21SyV43C8uqESOwTwW9ywa3KufImKm8L3uQAW/B0KhJMWg==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.87.0.tgz", + "integrity": "sha512-o5DxcqiFzET3KRWo+futHr/lhAMBP3tJGGx8YIgpHQYfvDMbsvE0hiFC+nZ/GF9dbcGd+ceIQwfvE5mcc7Gsjw==", "optional": true }, "sass-embedded-linux-musl-x64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.86.3.tgz", - "integrity": "sha512-ePeTPXUxPK6JgHcUfnrkIyDtyt+zlAvF22mVZv6y1g/PZFm1lSfX+Za7TYHg9KaYqaaXDiw6zICX4i44HhR8rA==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.87.0.tgz", + "integrity": "sha512-dKxWsu9Wu/CyfzQmHdeiGqrRSzJ85VUjbSx+aP1/7ttmps3SSg+YW95PuqnCOa7GSuSreC3dKKpXHTywUxMLQA==", "optional": true }, "sass-embedded-linux-riscv64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.86.3.tgz", - "integrity": "sha512-NuXQ72dwfNLe35E+RaXJ4Noq4EkFwM65eWwCwxEWyJO9qxOx1EXiCAJii6x8kkOh5daWuMU0VAI1B9RsJaqqQQ==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.87.0.tgz", + "integrity": "sha512-Sy3ESZ4FwBiijvmTA9n+0p0w3MNCue1AgINVPzpAY27EFi0h49eqQm9SWfOkFqmkFS2zFRYowdQOr5Bbr2gOXA==", "optional": true }, "sass-embedded-linux-x64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.86.3.tgz", - "integrity": "sha512-t8be9zJ5B82+og9bQmIQ83yMGYZMTMrlGA+uGWtYacmwg6w3093dk91Fx0YzNSZBp3Tk60qVYjCZnEIwy60x0g==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.87.0.tgz", + "integrity": "sha512-+UfjakOcHHKTnEqB3EZ+KqzezQOe1emvy4Rs+eQhLyfekpYuNze/qlRvYxfKTmrtvDiUrIto8MXsyZfMLzkuMA==", "optional": true }, "sass-embedded-win32-arm64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.86.3.tgz", - "integrity": "sha512-4ghuAzjX4q8Nksm0aifRz8hgXMMxS0SuymrFfkfJlrSx68pIgvAge6AOw0edoZoe0Tf5ZbsWUWamhkNyNxkTvw==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.87.0.tgz", + "integrity": "sha512-m1DS6FYUE0/fv+vt38uQB/kxR4UjnyD+2zcSc298pFmA0aYh/XZIPWw7RxG1HL3KLE1ZrGyu3254MPoxRhs3ig==", "optional": true }, "sass-embedded-win32-ia32": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.86.3.tgz", - "integrity": "sha512-tCaK4zIRq9mLRPxLzBAdYlfCuS/xLNpmjunYxeWkIwlJo+k53h1udyXH/FInnQ2GgEz0xMXyvH3buuPgzwWYsw==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.87.0.tgz", + "integrity": "sha512-JztXLo59GMe2E6g+kCsyiERYhtZgkcyDYx6CrXoSTE5WaE+RbxRiCCCv8/1+hf406f08pUxJ8G0Ody7M5urtBA==", "optional": true }, "sass-embedded-win32-x64": { - "version": "1.86.3", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.86.3.tgz", - "integrity": "sha512-zS+YNKfTF4SnOfpC77VTb0qNZyTXrxnAezSoRV0xnw6HlY+1WawMSSB6PbWtmbvyfXNgpmJUttoTtsvJjRCucg==", + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.87.0.tgz", + "integrity": "sha512-4nQErpauvhgSo+7ClumGdjdf9sGx+U9yBgvhI0+zUw+D5YvraVgvA0Lk8Wuwntx2PqnvKUk8YDr/vxHJostv4Q==", "optional": true }, "sass-loader": { diff --git a/package.json b/package.json index 59eccede4..f9f38a0ee 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "postcss-loader": "8.1.1", "postcss-preset-env": "10.1.6", "postcss-scss": "4.0.9", - "sass": "1.86.3", + "sass": "1.87.0", "sass-loader": "16.0.5", "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", @@ -133,7 +133,7 @@ "whatwg-fetch": "3.6.20" }, "optionalDependencies": { - "sass-embedded": "1.86.3" + "sass-embedded": "1.87.0" }, "browserslist": [ "last 2 Firefox versions", From a3d9ad4766e2225a9cf110e734b3212c064592ac Mon Sep 17 00:00:00 2001 From: Max Date: Wed, 14 May 2025 17:47:30 -0400 Subject: [PATCH 272/645] Fix play all & shuffle not working on studios --- src/components/playback/playbackmanager.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 1b5aee732..0dc31f98e 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -1874,6 +1874,14 @@ export class PlaybackManager { SortBy: options.shuffle ? 'Random' : 'SortName', MediaTypes: 'Video' }, queryOptions)); + case 'Studio': + return getItemsForPlayback(serverId, mergePlaybackQueries({ + StudioIds: firstItem.Id, + Filters: 'IsNotFolder', + Recursive: true, + SortBy: options.shuffle ? 'Random' : 'SortName', + MediaTypes: 'Video' + }, queryOptions)); case 'Series': case 'Season': return getSeriesOrSeasonPlaybackPromise(firstItem, options, items); From 58768e6ee1f055e6f09944b4ec4cb98d6591462e Mon Sep 17 00:00:00 2001 From: Tal Sarid Date: Wed, 14 May 2025 18:38:43 -0400 Subject: [PATCH 273/645] Translated using Weblate (Hebrew) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/ --- src/strings/he.json | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/strings/he.json b/src/strings/he.json index 9f0042f71..89011c5cd 100644 --- a/src/strings/he.json +++ b/src/strings/he.json @@ -380,7 +380,7 @@ "TabUpcoming": "בקרוב", "Tags": "מילות מפתח", "TellUsAboutYourself": "ספר לנו על עצמך", - "ThisWizardWillGuideYou": "אשף זה יעזור לך בהתליך ההתקנה.", + "ThisWizardWillGuideYou": "אשף זה יעזור לך בתהליך ההתקנה. כדי להתחיל, אנא הזן שם לשרת ובחר את השפה המועדפת עליך.", "Thursday": "חמישי", "TrackCount": "{0} רצועות", "Tuesday": "שלישי", @@ -1956,5 +1956,12 @@ "ImageDeleteFailed": "מחיקת התמונה נכשלה", "ImageUploadCancelled": "העלאת התמונה בוטלה", "ImageUploadFailed": "העלאת התמונה נכשלה", - "UploadCustomImage": "העלאת תמונה מותאמת אישית" + "UploadCustomImage": "העלאת תמונה מותאמת אישית", + "ViewSettings": "הצג הגדרות", + "LimitSegmentLength": "השתמש במקטעי HLS קצרים יותר", + "LimitSegmentLengthHelp": "הפעלת אפשרות זו עשויה לסייע במניעת תקיעות של נגן HLS בעת דילוג במכשירים מסוימים, כגון טלוויזיות webOS.", + "HeaderServerUnavailable": "שרת לא זמין", + "DownloadManager": "הורדות", + "HeaderUpdateRequired": "נדרש עדכון", + "MessageForgotPasswordPinReset": "הכנס את קוד ה-PIN כאן כדי לסיים את איפוס הסיסמה" } From 54c8e995d9cc06e78f116bf91d72d77aa0f3a950 Mon Sep 17 00:00:00 2001 From: Martin Just Date: Thu, 15 May 2025 06:47:49 -0400 Subject: [PATCH 274/645] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/de.json b/src/strings/de.json index 990ae3fef..011ef8467 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -2030,6 +2030,6 @@ "HeaderUpdateRequired": "Update erforderlich", "HeaderServerUnavailable": "Server nicht verfügbar", "ViewSettings": "Einstellungen anzeigen", - "MessageForgotPasswordPinReset": "Gebe hier die PIN ein, um das Zurücksetzen des Passworts abzuschließen", + "MessageForgotPasswordPinReset": "Gib hier die PIN ein, um das Zurücksetzen des Passworts abzuschließen", "DownloadManager": "Downloads" } From cab7f8dec75573878fd8abdd67ca422f590e7d90 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 May 2025 16:59:42 +0000 Subject: [PATCH 275/645] Update dependency @jellyfin/sdk to v0.0.0-unstable.202505150502 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 015d1588f..a00b91b2e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202505140501", + "@jellyfin/sdk": "0.0.0-unstable.202505150502", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.11", "@mui/material": "6.4.11", @@ -4091,9 +4091,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202505140501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202505140501.tgz", - "integrity": "sha512-IbnI/yOp9LhDMWeYt+a5Z/Zz1QkGRYI0CBNh76/9AHV/akVyZlgD3HShY5MEIZKax8cttqiP95XNTgTc0igRsA==", + "version": "0.0.0-unstable.202505150502", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202505150502.tgz", + "integrity": "sha512-SLHw0xXbzwhGxWu2Xr+8cXmsDYdVXzjYCelsNA9x4IQQFOGpUXXSFsgFWS7gV+oohChJDrnq3j3kFMzgvXnTXg==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -28750,9 +28750,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202505140501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202505140501.tgz", - "integrity": "sha512-IbnI/yOp9LhDMWeYt+a5Z/Zz1QkGRYI0CBNh76/9AHV/akVyZlgD3HShY5MEIZKax8cttqiP95XNTgTc0igRsA==", + "version": "0.0.0-unstable.202505150502", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202505150502.tgz", + "integrity": "sha512-SLHw0xXbzwhGxWu2Xr+8cXmsDYdVXzjYCelsNA9x4IQQFOGpUXXSFsgFWS7gV+oohChJDrnq3j3kFMzgvXnTXg==", "requires": {} }, "@jellyfin/ux-web": { diff --git a/package.json b/package.json index ecd3da0e7..4ce4a6f31 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202505140501", + "@jellyfin/sdk": "0.0.0-unstable.202505150502", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.11", "@mui/material": "6.4.11", From 54b05ffa5fece9f05e75b825ce83aa7fc4364167 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 May 2025 17:01:26 +0000 Subject: [PATCH 276/645] Update dependency @mui/x-date-pickers to v7.29.3 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index a21d80d69..6c70b77c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.11", "@mui/material": "6.4.11", - "@mui/x-date-pickers": "7.29.2", + "@mui/x-date-pickers": "7.29.3", "@react-hook/resize-observer": "2.0.2", "@tanstack/react-query": "5.75.5", "@tanstack/react-query-devtools": "5.75.5", @@ -4906,9 +4906,9 @@ "license": "MIT" }, "node_modules/@mui/x-date-pickers": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.29.2.tgz", - "integrity": "sha512-GRbLE31bBktJptittYk5L5SdwOOcDdVAIrXfyYYQ6xq8CR69Sbi/y6WkSDL+FDuymM/UQa7f5UmHb6r81aDVWA==", + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.29.3.tgz", + "integrity": "sha512-/A0/8fpLnEFeJKr5YQsI8jqlWPJlOtgfCGcqXHVDOLxgV3lW49+Kh5TZAc1yi6HKT3AG6k4DkNwTuu/RjJeMFA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.7", @@ -29860,9 +29860,9 @@ } }, "@mui/x-date-pickers": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.29.2.tgz", - "integrity": "sha512-GRbLE31bBktJptittYk5L5SdwOOcDdVAIrXfyYYQ6xq8CR69Sbi/y6WkSDL+FDuymM/UQa7f5UmHb6r81aDVWA==", + "version": "7.29.3", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.29.3.tgz", + "integrity": "sha512-/A0/8fpLnEFeJKr5YQsI8jqlWPJlOtgfCGcqXHVDOLxgV3lW49+Kh5TZAc1yi6HKT3AG6k4DkNwTuu/RjJeMFA==", "requires": { "@babel/runtime": "^7.25.7", "@mui/utils": "^5.16.6 || ^6.0.0 || ^7.0.0", diff --git a/package.json b/package.json index fbe3677ff..0f00b1869 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.11", "@mui/material": "6.4.11", - "@mui/x-date-pickers": "7.29.2", + "@mui/x-date-pickers": "7.29.3", "@react-hook/resize-observer": "2.0.2", "@tanstack/react-query": "5.75.5", "@tanstack/react-query-devtools": "5.75.5", From e5c41e471683f03fbb858e22d2fa71fde54f5b87 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 May 2025 17:01:57 +0000 Subject: [PATCH 277/645] Update dependency es-check to v9 --- package-lock.json | 52 +++++++++++++++++++++++++++++++++-------------- package.json | 2 +- 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index a21d80d69..2d0bd6681 100644 --- a/package-lock.json +++ b/package-lock.json @@ -95,7 +95,7 @@ "cross-env": "7.0.3", "css-loader": "7.1.2", "cssnano": "7.0.7", - "es-check": "8.0.2", + "es-check": "9.1.2", "eslint": "9.26.0", "eslint-plugin-compat": "6.0.2", "eslint-plugin-import": "2.31.0", @@ -7111,9 +7111,9 @@ } }, "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, "license": "MIT", "bin": { @@ -10416,16 +10416,19 @@ } }, "node_modules/es-check": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/es-check/-/es-check-8.0.2.tgz", - "integrity": "sha512-m/8jzwE6rasRx+Lhz7J5OIZzt2LmEC53kBPkUqQHk/6BMjo77HoHsdoQKeps8mgLASlb8nRuKZnuRai/iZHrHg==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/es-check/-/es-check-9.1.2.tgz", + "integrity": "sha512-aoVC4ROjhULurs3/CO9bAwJH0GDWNcnXNVPJulRWlo7ATHTxXtwee3loVfP6X8CvCqDsQs+CPMwOFrr5JwTFPQ==", "dev": true, "license": "MIT", "dependencies": { - "acorn": "8.14.0", + "acorn": "8.14.1", "acorn-walk": "^8.3.4", + "browserslist": "^4.23.3", "commander": "13.1.0", "fast-glob": "^3.3.3", + "lilconfig": "^3.0.0", + "source-map": "^0.7.4", "supports-color": "8.1.1", "winston": "3.17.0" }, @@ -10456,6 +10459,16 @@ "node": ">=8" } }, + "node_modules/es-check/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, "node_modules/es-check/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -31251,9 +31264,9 @@ } }, "acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true }, "acorn-jsx": { @@ -33564,15 +33577,18 @@ } }, "es-check": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/es-check/-/es-check-8.0.2.tgz", - "integrity": "sha512-m/8jzwE6rasRx+Lhz7J5OIZzt2LmEC53kBPkUqQHk/6BMjo77HoHsdoQKeps8mgLASlb8nRuKZnuRai/iZHrHg==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/es-check/-/es-check-9.1.2.tgz", + "integrity": "sha512-aoVC4ROjhULurs3/CO9bAwJH0GDWNcnXNVPJulRWlo7ATHTxXtwee3loVfP6X8CvCqDsQs+CPMwOFrr5JwTFPQ==", "dev": true, "requires": { - "acorn": "8.14.0", + "acorn": "8.14.1", "acorn-walk": "^8.3.4", + "browserslist": "^4.23.3", "commander": "13.1.0", "fast-glob": "^3.3.3", + "lilconfig": "^3.0.0", + "source-map": "^0.7.4", "supports-color": "8.1.1", "winston": "3.17.0" }, @@ -33589,6 +33605,12 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", diff --git a/package.json b/package.json index fbe3677ff..fcce27a13 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "cross-env": "7.0.3", "css-loader": "7.1.2", "cssnano": "7.0.7", - "es-check": "8.0.2", + "es-check": "9.1.2", "eslint": "9.26.0", "eslint-plugin-compat": "6.0.2", "eslint-plugin-import": "2.31.0", From 5b26d068ba8952b44e33be29968d42b5ddc4c8be Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 May 2025 17:03:24 +0000 Subject: [PATCH 278/645] Update dependency typescript-eslint to v8.32.0 --- package-lock.json | 491 ++++++++++++---------------------------------- package.json | 2 +- 2 files changed, 127 insertions(+), 366 deletions(-) diff --git a/package-lock.json b/package-lock.json index 846ed5d6a..7d54c1da6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -127,7 +127,7 @@ "stylelint-scss": "6.12.0", "ts-loader": "9.5.2", "typescript": "5.8.3", - "typescript-eslint": "8.31.0", + "typescript-eslint": "8.32.0", "vitest": "3.1.3", "webpack": "5.99.8", "webpack-bundle-analyzer": "4.10.2", @@ -3686,16 +3686,20 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", "dev": true, + "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } @@ -6342,21 +6346,21 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.31.0.tgz", - "integrity": "sha512-evaQJZ/J/S4wisevDvC1KFZkPzRetH8kYZbkgcTRyql3mcKsf+ZFDV1BVWUGTCAW5pQHoqn5gK5b8kn7ou9aFQ==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.0.tgz", + "integrity": "sha512-/jU9ettcntkBFmWUzzGgsClEi2ZFiikMX5eEQsmxIAWMOn4H3D4rvHssstmAHGVvrYnaMqdWWWg0b5M6IN/MTQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.31.0", - "@typescript-eslint/type-utils": "8.31.0", - "@typescript-eslint/utils": "8.31.0", - "@typescript-eslint/visitor-keys": "8.31.0", + "@typescript-eslint/scope-manager": "8.32.0", + "@typescript-eslint/type-utils": "8.32.0", + "@typescript-eslint/utils": "8.32.0", + "@typescript-eslint/visitor-keys": "8.32.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6396,7 +6400,7 @@ "typescript": ">=4.8.4 <5.9.0" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "node_modules/@typescript-eslint/scope-manager": { "version": "8.32.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.0.tgz", "integrity": "sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ==", @@ -6414,146 +6418,17 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.0.tgz", - "integrity": "sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.0.tgz", - "integrity": "sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.32.0", - "@typescript-eslint/visitor-keys": "8.32.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.0.tgz", - "integrity": "sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.32.0", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.31.0.tgz", - "integrity": "sha512-knO8UyF78Nt8O/B64i7TlGXod69ko7z6vJD9uhSlm0qkAbGeRUSudcm0+K/4CrRjrpiHfBCjMWlc08Vav1xwcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.31.0", - "@typescript-eslint/visitor-keys": "8.31.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.31.0.tgz", - "integrity": "sha512-DJ1N1GdjI7IS7uRlzJuEDCgDQix3ZVYVtgeWEyhyn4iaoitpMBX6Ndd488mXSx0xah/cONAkEaYyylDyAeHMHg==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.32.0.tgz", + "integrity": "sha512-t2vouuYQKEKSLtJaa5bB4jHeha2HJczQ6E5IXPDPgIty9EqcJxpr1QHQ86YyIPwDwxvUmLfP2YADQ5ZY4qddZg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.31.0", - "@typescript-eslint/utils": "8.31.0", + "@typescript-eslint/typescript-estree": "8.32.0", + "@typescript-eslint/utils": "8.32.0", "debug": "^4.3.4", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6568,9 +6443,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.31.0.tgz", - "integrity": "sha512-Ch8oSjVyYyJxPQk8pMiP2FFGYatqXQfQIaMp+TpuuLlDachRWpUAeEu1u9B/v/8LToehUIWyiKcA/w5hUFRKuQ==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.0.tgz", + "integrity": "sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA==", "dev": true, "license": "MIT", "engines": { @@ -6582,20 +6457,20 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.31.0.tgz", - "integrity": "sha512-xLmgn4Yl46xi6aDSZ9KkyfhhtnYI15/CvHbpOy/eR5NWhK/BK8wc709KKwhAR0m4ZKRP7h07bm4BWUYOCuRpQQ==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.0.tgz", + "integrity": "sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.31.0", - "@typescript-eslint/visitor-keys": "8.31.0", + "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/visitor-keys": "8.32.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6635,9 +6510,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "license": "ISC", "bin": { @@ -6648,16 +6523,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.31.0.tgz", - "integrity": "sha512-qi6uPLt9cjTFxAb1zGNgTob4x9ur7xC6mHQJ8GwEzGMGE9tYniublmJaowOJ9V2jUzxrltTPfdG2nKlWsq0+Ww==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.32.0.tgz", + "integrity": "sha512-8S9hXau6nQ/sYVtC3D6ISIDoJzS1NsCK+gluVhLN2YkBPX+/1wkwyUiDKnxRh15579WoOIyVWnoyIf3yGI9REw==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.31.0", - "@typescript-eslint/types": "8.31.0", - "@typescript-eslint/typescript-estree": "8.31.0" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.32.0", + "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/typescript-estree": "8.32.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6672,13 +6547,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.31.0.tgz", - "integrity": "sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.0.tgz", + "integrity": "sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.31.0", + "@typescript-eslint/types": "8.32.0", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -25487,40 +25362,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.31.0.tgz", - "integrity": "sha512-u+93F0sB0An8WEAPtwxVhFby573E8ckdjwUUQUj9QA4v8JAvgtoDdIyYR3XFwFHq2W1KJ1AurwJCO+w+Y1ixyQ==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.32.0.tgz", + "integrity": "sha512-UMq2kxdXCzinFFPsXc9o2ozIpYCCOiEC46MG3yEh5Vipq6BO27otTtEBZA1fQ66DulEUgE97ucQ/3YY66CPg0A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.31.0", - "@typescript-eslint/parser": "8.31.0", - "@typescript-eslint/utils": "8.31.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.31.0.tgz", - "integrity": "sha512-67kYYShjBR0jNI5vsf/c3WG4u+zDnCTHTPqVMQguffaWWFs7artgwKmfwdifl+r6XyM5LYLas/dInj2T0SgJyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.31.0", - "@typescript-eslint/types": "8.31.0", - "@typescript-eslint/typescript-estree": "8.31.0", - "@typescript-eslint/visitor-keys": "8.31.0", - "debug": "^4.3.4" + "@typescript-eslint/eslint-plugin": "8.32.0", + "@typescript-eslint/parser": "8.32.0", + "@typescript-eslint/utils": "8.32.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -29099,12 +28949,12 @@ } }, "@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", "dev": true, "requires": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" } }, "@eslint-community/regexpp": { @@ -30743,20 +30593,20 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.31.0.tgz", - "integrity": "sha512-evaQJZ/J/S4wisevDvC1KFZkPzRetH8kYZbkgcTRyql3mcKsf+ZFDV1BVWUGTCAW5pQHoqn5gK5b8kn7ou9aFQ==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.0.tgz", + "integrity": "sha512-/jU9ettcntkBFmWUzzGgsClEi2ZFiikMX5eEQsmxIAWMOn4H3D4rvHssstmAHGVvrYnaMqdWWWg0b5M6IN/MTQ==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.31.0", - "@typescript-eslint/type-utils": "8.31.0", - "@typescript-eslint/utils": "8.31.0", - "@typescript-eslint/visitor-keys": "8.31.0", + "@typescript-eslint/scope-manager": "8.32.0", + "@typescript-eslint/type-utils": "8.32.0", + "@typescript-eslint/utils": "8.32.0", + "@typescript-eslint/visitor-keys": "8.32.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.1.0" } }, "@typescript-eslint/parser": { @@ -30770,50 +30620,52 @@ "@typescript-eslint/typescript-estree": "8.32.0", "@typescript-eslint/visitor-keys": "8.32.0", "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.0.tgz", + "integrity": "sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/visitor-keys": "8.32.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.32.0.tgz", + "integrity": "sha512-t2vouuYQKEKSLtJaa5bB4jHeha2HJczQ6E5IXPDPgIty9EqcJxpr1QHQ86YyIPwDwxvUmLfP2YADQ5ZY4qddZg==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "8.32.0", + "@typescript-eslint/utils": "8.32.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + } + }, + "@typescript-eslint/types": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.0.tgz", + "integrity": "sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.0.tgz", + "integrity": "sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/visitor-keys": "8.32.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" }, "dependencies": { - "@typescript-eslint/scope-manager": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.0.tgz", - "integrity": "sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "8.32.0", - "@typescript-eslint/visitor-keys": "8.32.0" - } - }, - "@typescript-eslint/types": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.0.tgz", - "integrity": "sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.0.tgz", - "integrity": "sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "8.32.0", - "@typescript-eslint/visitor-keys": "8.32.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.0.tgz", - "integrity": "sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w==", - "dev": true, - "requires": { - "@typescript-eslint/types": "8.32.0", - "eslint-visitor-keys": "^4.2.0" - } - }, "brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -30823,12 +30675,6 @@ "balanced-match": "^1.0.0" } }, - "eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "dev": true - }, "minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -30846,95 +30692,25 @@ } } }, - "@typescript-eslint/scope-manager": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.31.0.tgz", - "integrity": "sha512-knO8UyF78Nt8O/B64i7TlGXod69ko7z6vJD9uhSlm0qkAbGeRUSudcm0+K/4CrRjrpiHfBCjMWlc08Vav1xwcw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "8.31.0", - "@typescript-eslint/visitor-keys": "8.31.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.31.0.tgz", - "integrity": "sha512-DJ1N1GdjI7IS7uRlzJuEDCgDQix3ZVYVtgeWEyhyn4iaoitpMBX6Ndd488mXSx0xah/cONAkEaYyylDyAeHMHg==", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "8.31.0", - "@typescript-eslint/utils": "8.31.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.0.1" - } - }, - "@typescript-eslint/types": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.31.0.tgz", - "integrity": "sha512-Ch8oSjVyYyJxPQk8pMiP2FFGYatqXQfQIaMp+TpuuLlDachRWpUAeEu1u9B/v/8LToehUIWyiKcA/w5hUFRKuQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.31.0.tgz", - "integrity": "sha512-xLmgn4Yl46xi6aDSZ9KkyfhhtnYI15/CvHbpOy/eR5NWhK/BK8wc709KKwhAR0m4ZKRP7h07bm4BWUYOCuRpQQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "8.31.0", - "@typescript-eslint/visitor-keys": "8.31.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true - } - } - }, "@typescript-eslint/utils": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.31.0.tgz", - "integrity": "sha512-qi6uPLt9cjTFxAb1zGNgTob4x9ur7xC6mHQJ8GwEzGMGE9tYniublmJaowOJ9V2jUzxrltTPfdG2nKlWsq0+Ww==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.32.0.tgz", + "integrity": "sha512-8S9hXau6nQ/sYVtC3D6ISIDoJzS1NsCK+gluVhLN2YkBPX+/1wkwyUiDKnxRh15579WoOIyVWnoyIf3yGI9REw==", "dev": true, "requires": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.31.0", - "@typescript-eslint/types": "8.31.0", - "@typescript-eslint/typescript-estree": "8.31.0" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.32.0", + "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/typescript-estree": "8.32.0" } }, "@typescript-eslint/visitor-keys": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.31.0.tgz", - "integrity": "sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.0.tgz", + "integrity": "sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w==", "dev": true, "requires": { - "@typescript-eslint/types": "8.31.0", + "@typescript-eslint/types": "8.32.0", "eslint-visitor-keys": "^4.2.0" }, "dependencies": { @@ -44074,29 +43850,14 @@ "dev": true }, "typescript-eslint": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.31.0.tgz", - "integrity": "sha512-u+93F0sB0An8WEAPtwxVhFby573E8ckdjwUUQUj9QA4v8JAvgtoDdIyYR3XFwFHq2W1KJ1AurwJCO+w+Y1ixyQ==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.32.0.tgz", + "integrity": "sha512-UMq2kxdXCzinFFPsXc9o2ozIpYCCOiEC46MG3yEh5Vipq6BO27otTtEBZA1fQ66DulEUgE97ucQ/3YY66CPg0A==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "8.31.0", - "@typescript-eslint/parser": "8.31.0", - "@typescript-eslint/utils": "8.31.0" - }, - "dependencies": { - "@typescript-eslint/parser": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.31.0.tgz", - "integrity": "sha512-67kYYShjBR0jNI5vsf/c3WG4u+zDnCTHTPqVMQguffaWWFs7artgwKmfwdifl+r6XyM5LYLas/dInj2T0SgJyw==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "8.31.0", - "@typescript-eslint/types": "8.31.0", - "@typescript-eslint/typescript-estree": "8.31.0", - "@typescript-eslint/visitor-keys": "8.31.0", - "debug": "^4.3.4" - } - } + "@typescript-eslint/eslint-plugin": "8.32.0", + "@typescript-eslint/parser": "8.32.0", + "@typescript-eslint/utils": "8.32.0" } }, "uc.micro": { diff --git a/package.json b/package.json index 486155047..d515bc985 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "stylelint-scss": "6.12.0", "ts-loader": "9.5.2", "typescript": "5.8.3", - "typescript-eslint": "8.31.0", + "typescript-eslint": "8.32.0", "vitest": "3.1.3", "webpack": "5.99.8", "webpack-bundle-analyzer": "4.10.2", From e3ef19152921c334bf2fd933dc52490b2cb4a017 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 May 2025 17:03:37 +0000 Subject: [PATCH 279/645] Update Linters --- package-lock.json | 2617 +-------------------------------------------- package.json | 4 +- 2 files changed, 40 insertions(+), 2581 deletions(-) diff --git a/package-lock.json b/package-lock.json index 846ed5d6a..ab738966d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -122,8 +122,8 @@ "style-loader": "4.0.0", "stylelint": "16.19.1", "stylelint-config-rational-order": "0.1.2", - "stylelint-no-browser-hacks": "1.3.0", - "stylelint-order": "6.0.4", + "stylelint-no-browser-hacks": "2.0.0", + "stylelint-order": "7.0.0", "stylelint-scss": "6.12.0", "ts-loader": "9.5.2", "typescript": "5.8.3", @@ -6112,15 +6112,6 @@ "@types/mdurl": "^2" } }, - "node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dev": true, - "dependencies": { - "@types/unist": "^2" - } - }, "node_modules/@types/mdurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", @@ -6141,12 +6132,6 @@ "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", "dev": true }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, "node_modules/@types/node": { "version": "20.11.4", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.4.tgz", @@ -6166,12 +6151,6 @@ "@types/node": "*" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true - }, "node_modules/@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", @@ -8487,12 +8466,6 @@ "lodash.uniq": "^4.5.0" } }, - "node_modules/caniuse-db": { - "version": "1.0.30001207", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001207.tgz", - "integrity": "sha512-vt1Y05aLuFE2CStt1+SHmZEJmOtf/Yn14lYhVbTGcqunHoNIspC1g6ybchbh1v6djHwQHzJpuPCsRdjaynLUKw==", - "dev": true - }, "node_modules/caniuse-lite": { "version": "1.0.30001718", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz", @@ -8752,18 +8725,6 @@ "node": ">=6" } }, - "node_modules/clone-regexp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", - "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", - "dev": true, - "dependencies": { - "is-regexp": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/clsx": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", @@ -11595,18 +11556,6 @@ "node": ">=18.0.0" } }, - "node_modules/execall": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", - "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", - "dev": true, - "dependencies": { - "clone-regexp": "^2.1.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -12026,18 +11975,6 @@ "dev": true, "license": "MIT" }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -12124,35 +12061,6 @@ "flat": "cli.js" } }, - "node_modules/flat-cache": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", - "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/flatted": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", @@ -12160,13 +12068,6 @@ "dev": true, "license": "ISC" }, - "node_modules/flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", - "deprecated": "flatten is deprecated in favor of utility frameworks such as lodash.", - "dev": true - }, "node_modules/flv.js": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/flv.js/-/flv.js-1.6.2.tgz", @@ -12723,12 +12624,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gather-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gather-stream/-/gather-stream-1.0.0.tgz", - "integrity": "sha1-szmUr0V6gRVwDUEPMXczy+egkEs=", - "dev": true - }, "node_modules/gauge": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", @@ -12797,18 +12692,6 @@ "node": ">= 0.4" } }, - "node_modules/get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/get-symbol-description": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", @@ -13042,36 +12925,6 @@ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -13742,15 +13595,6 @@ "node": ">=4" } }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -13845,15 +13689,6 @@ "node": ">= 10" } }, - "node_modules/irregular-plurals": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz", - "integrity": "sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -14429,15 +14264,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-regexp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", - "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/is-set": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", @@ -14539,24 +14365,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-weakmap": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", @@ -14845,12 +14653,6 @@ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" }, - "node_modules/js-base64": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", - "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", - "dev": true - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -15236,73 +15038,6 @@ "dev": true, "license": "MIT" }, - "node_modules/log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==", - "dev": true, - "dependencies": { - "chalk": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/log-symbols/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/log-symbols/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/logform": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", @@ -15370,18 +15105,6 @@ "tslib": "^2.0.3" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/magic-string": { "version": "0.30.17", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", @@ -15428,18 +15151,6 @@ "node": ">=0.10.0" } }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", @@ -15570,51 +15281,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", - "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "longest-streak": "^2.0.0", - "mdast-util-to-string": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/mdn-data": { "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", @@ -15696,26 +15362,6 @@ "node": ">= 0.6" } }, - "node_modules/micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" - } - }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -15777,15 +15423,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/mini-css-extract-plugin": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", @@ -15831,20 +15468,6 @@ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", @@ -16646,24 +16269,6 @@ "node": ">=6" } }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dev": true, - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -16992,18 +16597,6 @@ "node": ">=8" } }, - "node_modules/plur": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", - "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=", - "dev": true, - "dependencies": { - "irregular-plurals": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -18946,48 +18539,6 @@ "node": ">=6" } }, - "node_modules/postcss-sass": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", - "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", - "dev": true, - "dependencies": { - "gonzales-pe": "^4.3.0", - "postcss": "^7.0.21" - } - }, - "node_modules/postcss-sass/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-sass/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-sass/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/postcss-scss": { "version": "4.0.9", "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", @@ -19523,15 +19074,6 @@ "react-dom": ">=16.6.0" } }, - "node_modules/read-file-stdin": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/read-file-stdin/-/read-file-stdin-0.2.1.tgz", - "integrity": "sha1-JezP86FTtoCa+ssj7hU4fbng7mE=", - "dev": true, - "dependencies": { - "gather-stream": "^1.0.0" - } - }, "node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -19735,47 +19277,6 @@ "node": ">= 0.10" } }, - "node_modules/remark": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", - "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", - "dev": true, - "dependencies": { - "remark-parse": "^9.0.0", - "remark-stringify": "^9.0.0", - "unified": "^9.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", - "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", - "dev": true, - "dependencies": { - "mdast-util-from-markdown": "^0.8.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", - "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", - "dev": true, - "dependencies": { - "mdast-util-to-markdown": "^0.6.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remove-accents": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz", @@ -23065,880 +22566,40 @@ } }, "node_modules/stylelint-no-browser-hacks": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/stylelint-no-browser-hacks/-/stylelint-no-browser-hacks-1.3.0.tgz", - "integrity": "sha512-aeNEFlP/AIQ3FEgU6HxUOY5Xb2M1vimNWNUcQkaFou/rb0roQH75GM4v6Vf5MB+eEmLckz7dXzveTYnG3SBedw==", - "dev": true, - "dependencies": { - "stylehacks": "^2.3.2", - "stylelint": "^13.13.1" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/autoprefixer": { - "version": "9.8.8", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", - "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", - "dev": true, - "dependencies": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "picocolors": "^0.2.1", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/autoprefixer/node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/autoprefixer/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/autoprefixer/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/balanced-match": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true - }, - "node_modules/stylelint-no-browser-hacks/node_modules/browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha512-qHJblDE2bXVRYzuDetv/wAeHOJyO97+9wxC1cdCtyzgNuSozOyRCiiLaCR1f71AN66lQdVVBipWm63V+a7bPOw==", - "deprecated": "Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.", + "resolved": "https://registry.npmjs.org/stylelint-no-browser-hacks/-/stylelint-no-browser-hacks-2.0.0.tgz", + "integrity": "sha512-+m/2MYCNMYFoMgsxq/Wk5YpQlGJo+PlIcYMdPA9j6s2lYc3t4FumlHHeXySM4qsj5tDdT75AbK5b2g3yKIhyVg==", "dev": true, + "license": "MIT", "dependencies": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" - }, - "bin": { - "browserslist": "cli.js" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/chalk/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/stylelint-no-browser-hacks/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/known-css-properties": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.21.0.tgz", - "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==", - "dev": true - }, - "node_modules/stylelint-no-browser-hacks/node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/stylelint-no-browser-hacks/node_modules/postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "dependencies": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/postcss-reporter": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-1.4.1.tgz", - "integrity": "sha512-h9yLwoenfn2GZFINc42nCJInko4rZom3Ud0aEQhOQLa3PlgOUbfQH7/yEwVQLUqX84BwX3ekcwUDic/mpNTx9w==", - "dev": true, - "dependencies": { - "chalk": "^1.0.0", - "lodash": "^4.1.0", - "log-symbols": "^1.0.2", - "postcss": "^5.0.0" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/postcss-scss": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", - "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", - "dev": true, - "dependencies": { - "postcss": "^7.0.6" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/postcss-scss/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/postcss-scss/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/postcss/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", - "dev": true, - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/stylelint-no-browser-hacks/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/stylehacks": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-2.3.2.tgz", - "integrity": "sha512-cWtUu/KdmyR0J37V4wjD7x2DyMJykPYhRuv72WiV4n5GkDjbhSml/rqOqLqXVAVWiKZh0XbMO47sLdNJvBzKQQ==", - "dev": true, - "dependencies": { - "browserslist": "^1.1.3", - "chalk": "^1.1.1", - "log-symbols": "^1.0.2", - "minimist": "^1.2.0", - "plur": "^2.1.2", - "postcss": "^5.0.18", - "postcss-reporter": "^1.3.3", - "postcss-selector-parser": "^2.0.0", - "read-file-stdin": "^0.2.1", - "text-table": "^0.2.0", - "write-file-stdout": "0.0.2" - }, - "bin": { - "stylehacks": "dist/cli.js" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/stylehacks/node_modules/postcss-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", - "integrity": "sha512-3pqyakeGhrO0BQ5+/tGTfvi5IAUAhHRayGK8WFSu06aEv2BmHoXw/Mhb+w7VY5HERIuC+QoUI7wgrCcq2hqCVA==", - "dev": true, - "dependencies": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/stylelint": { - "version": "13.13.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.13.1.tgz", - "integrity": "sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ==", - "dev": true, - "dependencies": { - "@stylelint/postcss-css-in-js": "^0.37.2", - "@stylelint/postcss-markdown": "^0.36.2", - "autoprefixer": "^9.8.6", - "balanced-match": "^2.0.0", - "chalk": "^4.1.1", - "cosmiconfig": "^7.0.0", - "debug": "^4.3.1", - "execall": "^2.0.0", - "fast-glob": "^3.2.5", - "fastest-levenshtein": "^1.0.12", - "file-entry-cache": "^6.0.1", - "get-stdin": "^8.0.0", - "global-modules": "^2.0.0", - "globby": "^11.0.3", - "globjoin": "^0.1.4", - "html-tags": "^3.1.0", - "ignore": "^5.1.8", - "import-lazy": "^4.0.0", - "imurmurhash": "^0.1.4", - "known-css-properties": "^0.21.0", - "lodash": "^4.17.21", - "log-symbols": "^4.1.0", - "mathml-tag-names": "^2.1.3", - "meow": "^9.0.0", - "micromatch": "^4.0.4", - "normalize-selector": "^0.2.0", - "postcss": "^7.0.35", - "postcss-html": "^0.36.0", - "postcss-less": "^3.1.4", - "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^4.0.2", - "postcss-sass": "^0.4.4", - "postcss-scss": "^2.1.1", - "postcss-selector-parser": "^6.0.5", - "postcss-syntax": "^0.36.2", - "postcss-value-parser": "^4.1.0", - "resolve-from": "^5.0.0", - "slash": "^3.0.0", - "specificity": "^0.4.1", - "string-width": "^4.2.2", - "strip-ansi": "^6.0.0", - "style-search": "^0.1.0", - "sugarss": "^2.0.0", - "svg-tags": "^1.0.0", - "table": "^6.6.0", - "v8-compile-cache": "^2.3.0", - "write-file-atomic": "^3.0.3" - }, - "bin": { - "stylelint": "bin/stylelint.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/stylelint/node_modules/@stylelint/postcss-css-in-js": { - "version": "0.37.3", - "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.3.tgz", - "integrity": "sha512-scLk3cSH1H9KggSniseb2KNAU5D9FWc3H7BxCSAIdtU9OWIyw0zkEZ9qEKHryRM+SExYXRKNb7tOOVNAsQ3iwg==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, - "dependencies": { - "@babel/core": "^7.17.9" - }, - "peerDependencies": { - "postcss": ">=7.0.0", - "postcss-syntax": ">=0.36.2" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/stylelint/node_modules/@stylelint/postcss-markdown": { - "version": "0.36.2", - "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz", - "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==", - "deprecated": "Use the original unforked package instead: postcss-markdown", - "dev": true, - "dependencies": { - "remark": "^13.0.0", - "unist-util-find-all-after": "^3.0.2" - }, - "peerDependencies": { - "postcss": ">=7.0.0", - "postcss-syntax": ">=0.36.2" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/stylelint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/stylelint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/stylelint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/stylelint/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/stylelint/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/stylelint/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/stylelint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/stylelint-no-browser-hacks/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 6" + "postcss": "^8.5.3", + "stylehacks": "^7.0.4", + "stylelint": "^16.18.0" } }, "node_modules/stylelint-order": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.4.tgz", - "integrity": "sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-7.0.0.tgz", + "integrity": "sha512-rSWxx0KscYfxU02wEskKXES9lkRzuuONMMNkZ7SUc6uiF3tDKm7e+sE0Ax/SBlG4TUf1sp1R6f3/SlsPGmzthg==", "dev": true, + "license": "MIT", "dependencies": { - "postcss": "^8.4.32", - "postcss-sorting": "^8.0.2" + "postcss": "^8.5.3", + "postcss-sorting": "^9.1.0" + }, + "engines": { + "node": ">=20.19.0" }, "peerDependencies": { - "stylelint": "^14.0.0 || ^15.0.0 || ^16.0.1" + "stylelint": "^16.18.0" } }, "node_modules/stylelint-order/node_modules/postcss-sorting": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-8.0.2.tgz", - "integrity": "sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-9.1.0.tgz", + "integrity": "sha512-Mn8KJ45HNNG6JBpBizXcyf6LqY/qyqetGcou/nprDnFwBFBLGj0j/sNKV2lj2KMOVOwdXu14aEzqJv8CIV6e8g==", "dev": true, + "license": "MIT", "peerDependencies": { "postcss": "^8.4.20" } @@ -24891,12 +23552,6 @@ "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", "dev": true }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, "node_modules/thingies": { "version": "1.21.0", "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", @@ -25463,15 +24118,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, "node_modules/typescript": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", @@ -25622,33 +24268,6 @@ "node": ">=4" } }, - "node_modules/unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", - "dev": true, - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unified/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -25670,29 +24289,6 @@ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", "dev": true }, - "node_modules/unist-util-find-all-after": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", - "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==", - "dev": true, - "dependencies": { - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/unist-util-remove-position": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", @@ -25910,12 +24506,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", - "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", - "dev": true - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -25942,22 +24532,6 @@ "node": ">= 0.8" } }, - "node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/vfile-location": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", @@ -27094,12 +25668,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/write-file-stdout": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/write-file-stdout/-/write-file-stdout-0.0.2.tgz", - "integrity": "sha1-wlLXx8WxtAKJdjDjRTx7/mkNnKE=", - "dev": true - }, "node_modules/ws": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", @@ -27155,16 +25723,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "devOptional": true - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } + "optional": true }, "node_modules/yocto-queue": { "version": "0.1.0", @@ -27197,16 +25756,6 @@ "peerDependencies": { "zod": "^3.24.1" } - }, - "node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } } }, "dependencies": { @@ -30533,15 +29082,6 @@ "@types/mdurl": "^2" } }, - "@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dev": true, - "requires": { - "@types/unist": "^2" - } - }, "@types/mdurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", @@ -30560,12 +29100,6 @@ "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", "dev": true }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, "@types/node": { "version": "20.11.4", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.4.tgz", @@ -30584,12 +29118,6 @@ "@types/node": "*" } }, - "@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true - }, "@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", @@ -32199,12 +30727,6 @@ "lodash.uniq": "^4.5.0" } }, - "caniuse-db": { - "version": "1.0.30001207", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001207.tgz", - "integrity": "sha512-vt1Y05aLuFE2CStt1+SHmZEJmOtf/Yn14lYhVbTGcqunHoNIspC1g6ybchbh1v6djHwQHzJpuPCsRdjaynLUKw==", - "dev": true - }, "caniuse-lite": { "version": "1.0.30001718", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz", @@ -32382,15 +30904,6 @@ "shallow-clone": "^3.0.0" } }, - "clone-regexp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", - "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", - "dev": true, - "requires": { - "is-regexp": "^2.0.0" - } - }, "clsx": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", @@ -34398,15 +32911,6 @@ "integrity": "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==", "dev": true }, - "execall": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", - "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", - "dev": true, - "requires": { - "clone-regexp": "^2.1.0" - } - }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -34738,15 +33242,6 @@ "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", "dev": true }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, "fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -34815,40 +33310,12 @@ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true }, - "flat-cache": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", - "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", - "dev": true, - "requires": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, "flatted": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true }, - "flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", - "dev": true - }, "flv.js": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/flv.js/-/flv.js-1.6.2.tgz", @@ -35213,12 +33680,6 @@ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, - "gather-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gather-stream/-/gather-stream-1.0.0.tgz", - "integrity": "sha1-szmUr0V6gRVwDUEPMXczy+egkEs=", - "dev": true - }, "gauge": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", @@ -35268,12 +33729,6 @@ "es-object-atoms": "^1.0.0" } }, - "get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "dev": true - }, "get-symbol-description": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", @@ -35443,29 +33898,6 @@ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - } - } - }, "has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", @@ -35926,12 +34358,6 @@ "resolve-from": "^3.0.0" } }, - "import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true - }, "import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -36003,12 +34429,6 @@ "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", "dev": true }, - "irregular-plurals": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-1.4.0.tgz", - "integrity": "sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y=", - "dev": true - }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -36377,12 +34797,6 @@ "hasown": "^2.0.2" } }, - "is-regexp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", - "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", - "dev": true - }, "is-set": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", @@ -36440,18 +34854,6 @@ "which-typed-array": "^1.1.16" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, "is-weakmap": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", @@ -36649,12 +35051,6 @@ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" }, - "js-base64": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", - "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", - "dev": true - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -36975,57 +35371,6 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==", - "dev": true, - "requires": { - "chalk": "^1.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true - } - } - }, "logform": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", @@ -37079,15 +35424,6 @@ "tslib": "^2.0.3" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "magic-string": { "version": "0.30.17", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", @@ -37123,12 +35459,6 @@ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true - }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", @@ -37216,39 +35546,6 @@ "unist-util-visit": "^1.1.0" } }, - "mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - }, - "mdast-util-to-markdown": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", - "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "longest-streak": "^2.0.0", - "mdast-util-to-string": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.0.0", - "zwitch": "^1.0.0" - } - }, - "mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "dev": true - }, "mdn-data": { "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", @@ -37305,16 +35602,6 @@ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", "dev": true }, - "micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", - "dev": true, - "requires": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" - } - }, "micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -37352,12 +35639,6 @@ "optional": true, "peer": true }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, "mini-css-extract-plugin": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", @@ -37389,17 +35670,6 @@ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - } - }, "minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", @@ -38004,20 +36274,6 @@ } } }, - "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dev": true, - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -38255,15 +36511,6 @@ "find-up": "^4.0.0" } }, - "plur": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/plur/-/plur-2.1.2.tgz", - "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=", - "dev": true, - "requires": { - "irregular-plurals": "^1.0.0" - } - }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -39423,40 +37670,6 @@ } } }, - "postcss-sass": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", - "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", - "dev": true, - "requires": { - "gonzales-pe": "^4.3.0", - "postcss": "^7.0.21" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, "postcss-scss": { "version": "4.0.9", "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", @@ -39825,15 +38038,6 @@ "prop-types": "^15.6.2" } }, - "read-file-stdin": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/read-file-stdin/-/read-file-stdin-0.2.1.tgz", - "integrity": "sha1-JezP86FTtoCa+ssj7hU4fbng7mE=", - "dev": true, - "requires": { - "gather-stream": "^1.0.0" - } - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -39989,35 +38193,6 @@ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", "dev": true }, - "remark": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", - "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", - "dev": true, - "requires": { - "remark-parse": "^9.0.0", - "remark-stringify": "^9.0.0", - "unified": "^9.1.0" - } - }, - "remark-parse": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", - "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", - "dev": true, - "requires": { - "mdast-util-from-markdown": "^0.8.0" - } - }, - "remark-stringify": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", - "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", - "dev": true, - "requires": { - "mdast-util-to-markdown": "^0.6.0" - } - }, "remove-accents": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz", @@ -42560,658 +40735,30 @@ } }, "stylelint-no-browser-hacks": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/stylelint-no-browser-hacks/-/stylelint-no-browser-hacks-1.3.0.tgz", - "integrity": "sha512-aeNEFlP/AIQ3FEgU6HxUOY5Xb2M1vimNWNUcQkaFou/rb0roQH75GM4v6Vf5MB+eEmLckz7dXzveTYnG3SBedw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stylelint-no-browser-hacks/-/stylelint-no-browser-hacks-2.0.0.tgz", + "integrity": "sha512-+m/2MYCNMYFoMgsxq/Wk5YpQlGJo+PlIcYMdPA9j6s2lYc3t4FumlHHeXySM4qsj5tDdT75AbK5b2g3yKIhyVg==", "dev": true, "requires": { - "stylehacks": "^2.3.2", - "stylelint": "^13.13.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "autoprefixer": { - "version": "9.8.8", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", - "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "picocolors": "^0.2.1", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - } - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "balanced-match": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true - }, - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha512-qHJblDE2bXVRYzuDetv/wAeHOJyO97+9wxC1cdCtyzgNuSozOyRCiiLaCR1f71AN66lQdVVBipWm63V+a7bPOw==", - "dev": true, - "requires": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", - "dev": true - }, - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "known-css-properties": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.21.0.tgz", - "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==", - "dev": true - }, - "meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - } - }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - }, - "dependencies": { - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "postcss-reporter": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-1.4.1.tgz", - "integrity": "sha512-h9yLwoenfn2GZFINc42nCJInko4rZom3Ud0aEQhOQLa3PlgOUbfQH7/yEwVQLUqX84BwX3ekcwUDic/mpNTx9w==", - "dev": true, - "requires": { - "chalk": "^1.0.0", - "lodash": "^4.1.0", - "log-symbols": "^1.0.2", - "postcss": "^5.0.0" - } - }, - "postcss-scss": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", - "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", - "dev": true, - "requires": { - "postcss": "^7.0.6" - }, - "dependencies": { - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "requires": { - "min-indent": "^1.0.0" - } - }, - "stylehacks": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-2.3.2.tgz", - "integrity": "sha512-cWtUu/KdmyR0J37V4wjD7x2DyMJykPYhRuv72WiV4n5GkDjbhSml/rqOqLqXVAVWiKZh0XbMO47sLdNJvBzKQQ==", - "dev": true, - "requires": { - "browserslist": "^1.1.3", - "chalk": "^1.1.1", - "log-symbols": "^1.0.2", - "minimist": "^1.2.0", - "plur": "^2.1.2", - "postcss": "^5.0.18", - "postcss-reporter": "^1.3.3", - "postcss-selector-parser": "^2.0.0", - "read-file-stdin": "^0.2.1", - "text-table": "^0.2.0", - "write-file-stdout": "0.0.2" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", - "integrity": "sha512-3pqyakeGhrO0BQ5+/tGTfvi5IAUAhHRayGK8WFSu06aEv2BmHoXw/Mhb+w7VY5HERIuC+QoUI7wgrCcq2hqCVA==", - "dev": true, - "requires": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "stylelint": { - "version": "13.13.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.13.1.tgz", - "integrity": "sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ==", - "dev": true, - "requires": { - "@stylelint/postcss-css-in-js": "^0.37.2", - "@stylelint/postcss-markdown": "^0.36.2", - "autoprefixer": "^9.8.6", - "balanced-match": "^2.0.0", - "chalk": "^4.1.1", - "cosmiconfig": "^7.0.0", - "debug": "^4.3.1", - "execall": "^2.0.0", - "fast-glob": "^3.2.5", - "fastest-levenshtein": "^1.0.12", - "file-entry-cache": "^6.0.1", - "get-stdin": "^8.0.0", - "global-modules": "^2.0.0", - "globby": "^11.0.3", - "globjoin": "^0.1.4", - "html-tags": "^3.1.0", - "ignore": "^5.1.8", - "import-lazy": "^4.0.0", - "imurmurhash": "^0.1.4", - "known-css-properties": "^0.21.0", - "lodash": "^4.17.21", - "log-symbols": "^4.1.0", - "mathml-tag-names": "^2.1.3", - "meow": "^9.0.0", - "micromatch": "^4.0.4", - "normalize-selector": "^0.2.0", - "postcss": "^7.0.35", - "postcss-html": "^0.36.0", - "postcss-less": "^3.1.4", - "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^4.0.2", - "postcss-sass": "^0.4.4", - "postcss-scss": "^2.1.1", - "postcss-selector-parser": "^6.0.5", - "postcss-syntax": "^0.36.2", - "postcss-value-parser": "^4.1.0", - "resolve-from": "^5.0.0", - "slash": "^3.0.0", - "specificity": "^0.4.1", - "string-width": "^4.2.2", - "strip-ansi": "^6.0.0", - "style-search": "^0.1.0", - "sugarss": "^2.0.0", - "svg-tags": "^1.0.0", - "table": "^6.6.0", - "v8-compile-cache": "^2.3.0", - "write-file-atomic": "^3.0.3" - }, - "dependencies": { - "@stylelint/postcss-css-in-js": { - "version": "0.37.3", - "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.3.tgz", - "integrity": "sha512-scLk3cSH1H9KggSniseb2KNAU5D9FWc3H7BxCSAIdtU9OWIyw0zkEZ9qEKHryRM+SExYXRKNb7tOOVNAsQ3iwg==", - "dev": true, - "requires": { - "@babel/core": "^7.17.9" - } - }, - "@stylelint/postcss-markdown": { - "version": "0.36.2", - "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz", - "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==", - "dev": true, - "requires": { - "remark": "^13.0.0", - "unist-util-find-all-after": "^3.0.2" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true - }, - "trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true - }, - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - } + "postcss": "^8.5.3", + "stylehacks": "^7.0.4", + "stylelint": "^16.18.0" } }, "stylelint-order": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.4.tgz", - "integrity": "sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-7.0.0.tgz", + "integrity": "sha512-rSWxx0KscYfxU02wEskKXES9lkRzuuONMMNkZ7SUc6uiF3tDKm7e+sE0Ax/SBlG4TUf1sp1R6f3/SlsPGmzthg==", "dev": true, "requires": { - "postcss": "^8.4.32", - "postcss-sorting": "^8.0.2" + "postcss": "^8.5.3", + "postcss-sorting": "^9.1.0" }, "dependencies": { "postcss-sorting": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-8.0.2.tgz", - "integrity": "sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-9.1.0.tgz", + "integrity": "sha512-Mn8KJ45HNNG6JBpBizXcyf6LqY/qyqetGcou/nprDnFwBFBLGj0j/sNKV2lj2KMOVOwdXu14aEzqJv8CIV6e8g==", "dev": true, "requires": {} } @@ -43661,12 +41208,6 @@ "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", "dev": true }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, "thingies": { "version": "1.21.0", "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", @@ -44058,15 +41599,6 @@ "reflect.getprototypeof": "^1.0.6" } }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, "typescript": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", @@ -44160,28 +41692,6 @@ "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true }, - "unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", - "dev": true, - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "dependencies": { - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - } - } - }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -44200,21 +41710,6 @@ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", "dev": true }, - "unist-util-find-all-after": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", - "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==", - "dev": true, - "requires": { - "unist-util-is": "^4.0.0" - } - }, - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true - }, "unist-util-remove-position": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", @@ -44373,12 +41868,6 @@ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, - "v8-compile-cache": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", - "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", - "dev": true - }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -44401,18 +41890,6 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true }, - "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, "vfile-location": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", @@ -45138,12 +42615,6 @@ } } }, - "write-file-stdout": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/write-file-stdout/-/write-file-stdout-0.0.2.tgz", - "integrity": "sha1-wlLXx8WxtAKJdjDjRTx7/mkNnKE=", - "dev": true - }, "ws": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", @@ -45179,13 +42650,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "devOptional": true - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true + "optional": true }, "yocto-queue": { "version": "0.1.0", @@ -45205,12 +42670,6 @@ "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", "dev": true, "requires": {} - }, - "zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "dev": true } } } diff --git a/package.json b/package.json index 486155047..d0565118d 100644 --- a/package.json +++ b/package.json @@ -60,8 +60,8 @@ "style-loader": "4.0.0", "stylelint": "16.19.1", "stylelint-config-rational-order": "0.1.2", - "stylelint-no-browser-hacks": "1.3.0", - "stylelint-order": "6.0.4", + "stylelint-no-browser-hacks": "2.0.0", + "stylelint-order": "7.0.0", "stylelint-scss": "6.12.0", "ts-loader": "9.5.2", "typescript": "5.8.3", From d59c1aac55eb0c5d944de5323412d4090f613a7a Mon Sep 17 00:00:00 2001 From: Free O'Toole <14006733+freeotoole@users.noreply.github.com> Date: Fri, 16 May 2025 06:43:16 +1000 Subject: [PATCH 280/645] Fix: clarify interval units in dummy chapter help text This PR clarifies the interval between dummy chapters is seconds --- CONTRIBUTORS.md | 1 + src/strings/en-us.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index ccecf844a..48b9b147b 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -99,6 +99,7 @@ - [Derek Huber](https://github.com/Derek4aty1) - [StableCrimson](https://github.com/StableCrimson) - [diegoeche](https://github.com/diegoeche) +- [Free O'Toole](https://github.com/freeotoole) ## Emby Contributors diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 8e24c10d5..5ba204dfb 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -694,7 +694,7 @@ "LabelDropShadow": "Drop shadow", "LabelDropSubtitleHere": "Drop subtitle here, or click to browse.", "LabelDummyChapterDuration": "Interval", - "LabelDummyChapterDurationHelp": "The interval between dummy chapters. Set to 0 to disable dummy chapter generation. Changing this will have no effect on existing dummy chapters.", + "LabelDummyChapterDurationHelp": "The interval between dummy chapters in seconds. Set to 0 to disable dummy chapter generation. Changing this will have no effect on existing dummy chapters.", "LabelChapterImageResolution": "Resolution", "LabelChapterImageResolutionHelp": "The resolution of the extracted chapter images. Changing this will have no effect on existing dummy chapters.", "LabelDynamicExternalId": "{0} Id", From 2b9562509a6e1b920afb432cdef792bd1bf9ebe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=84=A1=E6=83=85=E5=A4=A9?= Date: Thu, 15 May 2025 15:49:00 -0400 Subject: [PATCH 281/645] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index 5cd5e32aa..28af95a99 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1685,7 +1685,7 @@ "EnableCardLayout": "显示可视卡盒", "MessageNoItemsAvailable": "没有可用的项。", "Unreleased": "暂未发布", - "DownloadAll": "全部下载", + "DownloadAll": "下载全部", "Experimental": "实验功能", "LabelStereoDownmixAlgorithm": "立体声降混算法", "StereoDownmixAlgorithmHelp": "用于将多声道下降混合为立体声的算法。", @@ -2030,5 +2030,6 @@ "HeaderServerUnavailable": "服务器不可用", "HeaderUpdateRequired": "需要更新", "ViewSettings": "查看设置", - "MessageForgotPasswordPinReset": "在此处输入 PIN 码以完成密码重置" + "MessageForgotPasswordPinReset": "在此处输入 PIN 码以完成密码重置", + "DownloadManager": "下载" } From 568d8f8ff7141b1d6b7abef639ec2214d0800eb7 Mon Sep 17 00:00:00 2001 From: IreuN Date: Fri, 16 May 2025 01:40:16 +0200 Subject: [PATCH 282/645] Fix link - skip redirection --- src/apps/dashboard/controllers/encodingsettings.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/dashboard/controllers/encodingsettings.html b/src/apps/dashboard/controllers/encodingsettings.html index eb8017e0e..962c625ed 100644 --- a/src/apps/dashboard/controllers/encodingsettings.html +++ b/src/apps/dashboard/controllers/encodingsettings.html @@ -20,7 +20,7 @@ From 772bbb74b9e7837c1dd4f60dc1b60c4079133711 Mon Sep 17 00:00:00 2001 From: felix920506 Date: Fri, 16 May 2025 10:08:51 +0800 Subject: [PATCH 283/645] Update link for setup guide (#6789) --- src/apps/wizard/controllers/start/index.html | 2 +- src/strings/en-us.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/apps/wizard/controllers/start/index.html b/src/apps/wizard/controllers/start/index.html index 1c718df43..9ec77613b 100644 --- a/src/apps/wizard/controllers/start/index.html +++ b/src/apps/wizard/controllers/start/index.html @@ -4,7 +4,7 @@

${WelcomeToProject}

- + ${ButtonQuickStartGuide}
diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 8e24c10d5..a38a9f617 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -119,7 +119,7 @@ "ButtonPause": "Pause", "ButtonPlayer": "Player", "ButtonPreviousTrack": "Previous track", - "ButtonQuickStartGuide": "Quick Start Guide", + "ButtonQuickStartGuide": "Setup Guide", "ButtonRefreshGuideData": "Refresh Guide Data", "ButtonRemove": "Remove", "ButtonRename": "Rename", From db0780ab407e34e74020ca4b6f5a1e0504417aea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Fri, 16 May 2025 02:46:19 -0400 Subject: [PATCH 284/645] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index 24b18d21d..68f422468 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -56,7 +56,7 @@ "ButtonParentalControl": "Rodičovská kontrola", "ButtonPause": "Pozastavit", "ButtonPreviousTrack": "Předchozí stopa", - "ButtonQuickStartGuide": "Rychlý průvodce", + "ButtonQuickStartGuide": "Průvodce nastavením", "ButtonRefreshGuideData": "Aktualizovat data programového průvodce", "ButtonRemove": "Odstranit", "ButtonRename": "Přejmenovat", From 1b2c4fca62db081f83e7210dacaf2716f7a951fb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 16 May 2025 09:33:09 +0000 Subject: [PATCH 285/645] Update dependency @jellyfin/sdk to v0.0.0-unstable.202505160502 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index cd7f79ce1..69219f035 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202505150502", + "@jellyfin/sdk": "0.0.0-unstable.202505160502", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.11", "@mui/material": "6.4.11", @@ -4095,9 +4095,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202505150502", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202505150502.tgz", - "integrity": "sha512-SLHw0xXbzwhGxWu2Xr+8cXmsDYdVXzjYCelsNA9x4IQQFOGpUXXSFsgFWS7gV+oohChJDrnq3j3kFMzgvXnTXg==", + "version": "0.0.0-unstable.202505160502", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202505160502.tgz", + "integrity": "sha512-Iqdf7ziGKdyIHzEWVJArYmFdyUMOf9L6VJXBsOLNHczBQsBpFrs2Zn9qyh/oVw+QT/XyFB7TZlkIM7O96eH63w==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -27773,9 +27773,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202505150502", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202505150502.tgz", - "integrity": "sha512-SLHw0xXbzwhGxWu2Xr+8cXmsDYdVXzjYCelsNA9x4IQQFOGpUXXSFsgFWS7gV+oohChJDrnq3j3kFMzgvXnTXg==", + "version": "0.0.0-unstable.202505160502", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202505160502.tgz", + "integrity": "sha512-Iqdf7ziGKdyIHzEWVJArYmFdyUMOf9L6VJXBsOLNHczBQsBpFrs2Zn9qyh/oVw+QT/XyFB7TZlkIM7O96eH63w==", "requires": {} }, "@jellyfin/ux-web": { diff --git a/package.json b/package.json index cbad32431..5131b2ce7 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202505150502", + "@jellyfin/sdk": "0.0.0-unstable.202505160502", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.11", "@mui/material": "6.4.11", From f06403fa4e6296a4580a23e3d1a2d0a8d0248c0e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 16 May 2025 09:33:21 +0000 Subject: [PATCH 286/645] Update tanstack-query monorepo to v5.75.6 --- package-lock.json | 46 +++++++++++++++++++++++----------------------- package.json | 4 ++-- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index cd7f79ce1..b20835f5e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,8 +24,8 @@ "@mui/material": "6.4.11", "@mui/x-date-pickers": "7.29.3", "@react-hook/resize-observer": "2.0.2", - "@tanstack/react-query": "5.75.5", - "@tanstack/react-query-devtools": "5.75.5", + "@tanstack/react-query": "5.75.6", + "@tanstack/react-query-devtools": "5.75.6", "abortcontroller-polyfill": "1.7.8", "blurhash": "2.0.5", "classlist.js": "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz", @@ -5788,9 +5788,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.75.5", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.75.5.tgz", - "integrity": "sha512-kPDOxtoMn2Ycycb76Givx2fi+2pzo98F9ifHL/NFiahEDpDwSVW6o12PRuQ0lQnBOunhRG5etatAhQij91M3MQ==", + "version": "5.75.6", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.75.6.tgz", + "integrity": "sha512-r+WQ/z30KZF0TFkzCT7C8gWgrLuv7/t+gEjqeEp69JAIUS/omuieaHeIkoscjEcT6yaWebXGTyjdiIxJkYzEXg==", "license": "MIT", "funding": { "type": "github", @@ -5808,12 +5808,12 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.75.5", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.75.5.tgz", - "integrity": "sha512-QrLCJe40BgBVlWdAdf2ZEVJ0cISOuEy/HKupId1aTKU6gPJZVhSvZpH+Si7csRflCJphzlQ77Yx6gUxGW9o0XQ==", + "version": "5.75.6", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.75.6.tgz", + "integrity": "sha512-0d97uvpeHUNN5eTEsJzYgxLgAEyUM+XaJAWFFAaXH+dQgDN//TTDNbei/YVzN5BUJcWcnQ7YaQDtLLzSe+IvTg==", "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.75.5" + "@tanstack/query-core": "5.75.6" }, "funding": { "type": "github", @@ -5824,9 +5824,9 @@ } }, "node_modules/@tanstack/react-query-devtools": { - "version": "5.75.5", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.75.5.tgz", - "integrity": "sha512-S31U00nJOQIbxydRH1kOwdLRaLBrda8O5QjzmgkRg60UZzPGdbI6+873Qa0YGUfPeILDbR2ukgWyg7CJQPy4iA==", + "version": "5.75.6", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.75.6.tgz", + "integrity": "sha512-g8NH6E4F0ggatuu7Zhx3sBkvacsiMd+mrHxezlLLfftwhjRSVP1s6bvXYEAiCOQ+RNAVYFX0X1ujGSUqmcRY4w==", "license": "MIT", "dependencies": { "@tanstack/query-devtools": "5.74.7" @@ -5836,7 +5836,7 @@ "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "^5.75.5", + "@tanstack/react-query": "^5.75.6", "react": "^18 || ^19" } }, @@ -28694,9 +28694,9 @@ } }, "@tanstack/query-core": { - "version": "5.75.5", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.75.5.tgz", - "integrity": "sha512-kPDOxtoMn2Ycycb76Givx2fi+2pzo98F9ifHL/NFiahEDpDwSVW6o12PRuQ0lQnBOunhRG5etatAhQij91M3MQ==" + "version": "5.75.6", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.75.6.tgz", + "integrity": "sha512-r+WQ/z30KZF0TFkzCT7C8gWgrLuv7/t+gEjqeEp69JAIUS/omuieaHeIkoscjEcT6yaWebXGTyjdiIxJkYzEXg==" }, "@tanstack/query-devtools": { "version": "5.74.7", @@ -28704,17 +28704,17 @@ "integrity": "sha512-nSNlfuGdnHf4yB0S+BoNYOE1o3oAH093weAYZolIHfS2stulyA/gWfSk/9H4ZFk5mAAHb5vNqAeJOmbdcGPEQw==" }, "@tanstack/react-query": { - "version": "5.75.5", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.75.5.tgz", - "integrity": "sha512-QrLCJe40BgBVlWdAdf2ZEVJ0cISOuEy/HKupId1aTKU6gPJZVhSvZpH+Si7csRflCJphzlQ77Yx6gUxGW9o0XQ==", + "version": "5.75.6", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.75.6.tgz", + "integrity": "sha512-0d97uvpeHUNN5eTEsJzYgxLgAEyUM+XaJAWFFAaXH+dQgDN//TTDNbei/YVzN5BUJcWcnQ7YaQDtLLzSe+IvTg==", "requires": { - "@tanstack/query-core": "5.75.5" + "@tanstack/query-core": "5.75.6" } }, "@tanstack/react-query-devtools": { - "version": "5.75.5", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.75.5.tgz", - "integrity": "sha512-S31U00nJOQIbxydRH1kOwdLRaLBrda8O5QjzmgkRg60UZzPGdbI6+873Qa0YGUfPeILDbR2ukgWyg7CJQPy4iA==", + "version": "5.75.6", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.75.6.tgz", + "integrity": "sha512-g8NH6E4F0ggatuu7Zhx3sBkvacsiMd+mrHxezlLLfftwhjRSVP1s6bvXYEAiCOQ+RNAVYFX0X1ujGSUqmcRY4w==", "requires": { "@tanstack/query-devtools": "5.74.7" } diff --git a/package.json b/package.json index cbad32431..5b4a69fdf 100644 --- a/package.json +++ b/package.json @@ -90,8 +90,8 @@ "@mui/material": "6.4.11", "@mui/x-date-pickers": "7.29.3", "@react-hook/resize-observer": "2.0.2", - "@tanstack/react-query": "5.75.5", - "@tanstack/react-query-devtools": "5.75.5", + "@tanstack/react-query": "5.75.6", + "@tanstack/react-query-devtools": "5.75.6", "abortcontroller-polyfill": "1.7.8", "blurhash": "2.0.5", "classlist.js": "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz", From f000f1102b9495467b48e0dff93e7320c6261de6 Mon Sep 17 00:00:00 2001 From: Kityn Date: Fri, 16 May 2025 05:38:22 -0400 Subject: [PATCH 287/645] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 3d2120281..1a103cabf 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -76,7 +76,7 @@ "ButtonParentalControl": "Kontrola rodzicielska", "ButtonPause": "Pauza", "ButtonPreviousTrack": "Poprzedni utwór", - "ButtonQuickStartGuide": "Skrócona instrukcja obsługi", + "ButtonQuickStartGuide": "Przewodnik konfiguracji", "ButtonRefreshGuideData": "Odśwież dane przewodnika", "ButtonRemove": "Usuń", "ButtonRename": "Zmień nazwę", From 94a9fd1cdb9be85fcfa453e39bf17f6d688fc8b9 Mon Sep 17 00:00:00 2001 From: Kityn Date: Fri, 16 May 2025 05:39:24 -0400 Subject: [PATCH 288/645] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 1a103cabf..a583586be 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -1693,7 +1693,7 @@ "SaveRecordingNFOHelp": "Zapisz metadane od dostawcy list EPG wraz z mediami.", "HeaderDummyChapter": "Obrazy rozdziału", "LabelDummyChapterDuration": "Interwał", - "LabelDummyChapterDurationHelp": "Odstęp między fikcyjnymi rozdziałami. Ustaw na 0, aby wyłączyć generowanie fikcyjnych rozdziałów. Zmiana tego nie będzie miała wpływu na istniejące fikcyjne rozdziały.", + "LabelDummyChapterDurationHelp": "Odstęp między fikcyjnymi rozdziałami w sekundach. Ustaw na 0, aby wyłączyć generowanie fikcyjnych rozdziałów. Zmiana tego nie będzie miała wpływu na istniejące fikcyjne rozdziały.", "LabelDummyChapterCount": "Ograniczenie", "LabelChapterImageResolution": "Rozdzielczość", "LabelChapterImageResolutionHelp": "Rozdzielczość wyodrębnionych obrazów rozdziałów. Zmiana tego ustawienia nie ma wpływu na istniejące rozdziały.", From 934d101394d2d6e1007395026f80ee66f37d7e74 Mon Sep 17 00:00:00 2001 From: Viorel Ciobotaru Date: Fri, 16 May 2025 05:56:47 -0400 Subject: [PATCH 289/645] Translated using Weblate (Romanian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/ --- src/strings/ro.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/strings/ro.json b/src/strings/ro.json index 2f6b60e1a..a222fa469 100644 --- a/src/strings/ro.json +++ b/src/strings/ro.json @@ -4,7 +4,7 @@ "ButtonAddUser": "Adaugă Utilizator", "ButtonCancel": "Anulează", "ButtonManualLogin": "Conectare manuală", - "ButtonQuickStartGuide": "Ghid rapid de Start", + "ButtonQuickStartGuide": "Ghid de Configurare", "ButtonRefreshGuideData": "Reîmprospătează Ghidul", "ButtonRemove": "Elimină", "ButtonSelectDirectory": "Selectați Director", @@ -1672,7 +1672,7 @@ "Experimental": "Experimental", "LabelStereoDownmixAlgorithm": "Algoritmul de Mixare Descendentă în Stereo", "LabelDummyChapterDuration": "Interval", - "LabelDummyChapterDurationHelp": "Intervalul dintre capitolele fictive. Setați la 0 pentru a dezactiva generarea de capitole fictive. Modificarea acestui parametru nu va avea niciun efect asupra capitolelor fictive existente.", + "LabelDummyChapterDurationHelp": "Intervalul dintre capitolele fictive în secunde. Setați la 0 pentru a dezactiva generarea de capitole fictive. Modificarea acestui parametru nu va avea niciun efect asupra capitolelor fictive existente.", "LabelDummyChapterCount": "Limită", "LabelDummyChapterCountHelp": "Numărul maxim de imagini de capitol care vor fi extrase pentru fiecare fișier media individual.", "LabelChapterImageResolution": "Rezoluție", @@ -2030,5 +2030,6 @@ "HeaderServerUnavailable": "Server indisponibil", "HeaderUpdateRequired": "Actualizare necesară", "ViewSettings": "Vedeți setările", - "MessageForgotPasswordPinReset": "Introduceți PIN-ul aici pentru a finaliza resetarea parolei" + "MessageForgotPasswordPinReset": "Introduceți PIN-ul aici pentru a finaliza resetarea parolei", + "DownloadManager": "Descărcări" } From 6e20578de4cf6356117249d17c39fce9b73b2061 Mon Sep 17 00:00:00 2001 From: stanol Date: Fri, 16 May 2025 05:50:17 -0400 Subject: [PATCH 290/645] Translated using Weblate (Ukrainian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/uk/ --- src/strings/uk.json | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/strings/uk.json b/src/strings/uk.json index 6a58fff20..402a1a1c9 100644 --- a/src/strings/uk.json +++ b/src/strings/uk.json @@ -170,7 +170,7 @@ "ButtonResetEasyPassword": "Скинути простий PIN -код", "ButtonRemove": "Видалити", "ButtonRefreshGuideData": "Оновити дані телегіда", - "ButtonQuickStartGuide": "Посібник по швидкому запуску", + "ButtonQuickStartGuide": "Посібник з налаштування", "ButtonPreviousTrack": "Попередня доріжка", "ButtonPause": "Пауза", "ButtonParentalControl": "Батьківський контроль", @@ -1696,7 +1696,7 @@ "SaveRecordingImagesHelp": "Зберігайте зображення з постачальника списків EPG разом із носієм.", "HeaderDummyChapter": "Зображення сцен", "LabelDummyChapterDuration": "Інтервал", - "LabelDummyChapterDurationHelp": "Інтервал між зображеннями сцен. Встановіть значення 0, щоб вимкнути генерацію зображень сцен. Зміна цього параметра не вплине на існуючі зображення сцен.", + "LabelDummyChapterDurationHelp": "Інтервал між зображеннями сцен у секундах. Встановіть значення 0, щоб вимкнути генерацію зображень сцен. Зміна цього параметра не вплине на існуючі зображення сцен.", "LabelDummyChapterCount": "Ліміт", "LabelDummyChapterCountHelp": "Максимальна кількість зображень розділів, які буде видобуто для кожного медіафайлу.", "LabelChapterImageResolution": "Роздільна здатність", @@ -2025,5 +2025,8 @@ "HeaderUpdateRequired": "Потрібне оновлення", "LimitSegmentLength": "Використовувати коротші сегменти HLS", "LimitSegmentLengthHelp": "Увімкнення цієї опції може допомогти запобігти зависанню HLS-програвача під час пошуку на певних пристроях, наприклад, на телевізорах з webOS.", - "HeaderServerUnavailable": "Сервер недоступний" + "HeaderServerUnavailable": "Сервер недоступний", + "DownloadManager": "Завантаження", + "ViewSettings": "Налаштування перегляду", + "MessageForgotPasswordPinReset": "Введіть PIN-код, щоб завершити відновлення пароля" } From fb0a610166534eae26133d87cc62543bf74fc6d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=84=A1=E6=83=85=E5=A4=A9?= Date: Fri, 16 May 2025 05:52:09 -0400 Subject: [PATCH 291/645] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index 28af95a99..59e2f45f1 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -71,7 +71,7 @@ "ButtonParentalControl": "家长控制", "ButtonPause": "暂停", "ButtonPreviousTrack": "上一音轨", - "ButtonQuickStartGuide": "快速入门指南", + "ButtonQuickStartGuide": "设置指南", "ButtonRefreshGuideData": "刷新指南数据", "ButtonRemove": "移除", "ButtonRename": "重命名", @@ -1691,7 +1691,7 @@ "StereoDownmixAlgorithmHelp": "用于将多声道下降混合为立体声的算法。", "HeaderRecordingMetadataSaving": "记录元数据", "LabelDummyChapterDuration": "间隔", - "LabelDummyChapterDurationHelp": "虚拟章节之间的时间间隔。将其设置为0以禁用虚拟章节生成。更改此设置不会影响现有的虚拟章节。", + "LabelDummyChapterDurationHelp": "虚拟章节之间的间隔(以秒为单位)。设置为 0 表示禁用虚拟章节生成。更改此值不会对现有虚拟章节产生影响。", "PreferEmbeddedExtrasTitlesOverFileNames": "对额外内容优先使用内置的标题而不是文件名", "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "额外内容通常与父项有相同的内置标题,勾选此项来对它们使用内置标题。", "SaveRecordingNFO": "在 NFO 中保存录制的 EPG 元数据", From a6a3d0c6f50d11ef5d6670b3e61d664fc0e23e66 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 16 May 2025 11:36:31 +0000 Subject: [PATCH 292/645] Update github/codeql-action action to v3.28.18 --- .github/workflows/__codeql.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/__codeql.yml b/.github/workflows/__codeql.yml index bf450fd84..17af6d679 100644 --- a/.github/workflows/__codeql.yml +++ b/.github/workflows/__codeql.yml @@ -26,15 +26,15 @@ jobs: show-progress: false - name: Initialize CodeQL 🛠️ - uses: github/codeql-action/init@60168efe1c415ce0f5521ea06d5c2062adbeed1b # v3.28.17 + uses: github/codeql-action/init@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18 with: queries: security-and-quality languages: ${{ matrix.language }} - name: Autobuild 📦 - uses: github/codeql-action/autobuild@60168efe1c415ce0f5521ea06d5c2062adbeed1b # v3.28.17 + uses: github/codeql-action/autobuild@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18 - name: Perform CodeQL Analysis 🧪 - uses: github/codeql-action/analyze@60168efe1c415ce0f5521ea06d5c2062adbeed1b # v3.28.17 + uses: github/codeql-action/analyze@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18 with: category: '/language:${{matrix.language}}' From d120a66a54c9ead53fbd68c98572e3b3f0783de8 Mon Sep 17 00:00:00 2001 From: Tal Sarid Date: Fri, 16 May 2025 11:10:13 -0400 Subject: [PATCH 293/645] Translated using Weblate (Hebrew) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/ --- src/strings/he.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/he.json b/src/strings/he.json index 89011c5cd..b633221ce 100644 --- a/src/strings/he.json +++ b/src/strings/he.json @@ -20,7 +20,7 @@ "ButtonGotIt": "הבנתי", "ButtonManualLogin": "התחברות ידנית", "ButtonOk": "בסדר", - "ButtonQuickStartGuide": "מדריך מהיר", + "ButtonQuickStartGuide": "מדריך התקנה", "ButtonRefreshGuideData": "רענן את מדריך השידור", "ButtonRemove": "הסר", "ButtonSelectDirectory": "בחר תיקיות", @@ -1274,7 +1274,7 @@ "EnableSmoothScroll": "הפעל גלילה חלקה", "HeaderDeleteSeries": "מחק סדרה", "LabelAlbumGain": "עוצמת אלבום", - "LabelDummyChapterDurationHelp": "מרווח הזמן בין פרקי הדמה. קבע ל-0 כדי להשבית את ייצור פרקי הדמה. שינוי זה לא ישפיע על פרקי דמה קיימים.", + "LabelDummyChapterDurationHelp": "מרווח הזמן בין פרקי הדמה בשניות. קבע ל-0 כדי להשבית את ייצור פרקי הדמה. שינוי זה לא ישפיע על פרקי דמה קיימים.", "LabelMaxDaysForNextUpHelp": "הגדר את מספר הימים המקסימלי שתכנית צריכה להישאר ברשימת 'הבא בתור' מבלי לצפות בה.", "LabelMaxVideoResolution": "רזולוצייה מקסימלית המותרת להמרת קידוד וידאו", "LabelLocalCustomCss": "קוד CSS לעיצוב מותאם אישית ללקוח זה בלבד. ייתכן שתרצה להשבית את קוד ה-CSS המסופק על ידי השרת.", From 269ada18df74a2dc60a99cab2a817bd9d98cf191 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Fri, 16 May 2025 14:36:19 -0400 Subject: [PATCH 294/645] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 7f3b523df..98097a88a 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -70,7 +70,7 @@ "ButtonParentalControl": "Ouderlijk toezicht", "ButtonPause": "Pauzeren", "ButtonPreviousTrack": "Vorige nummer", - "ButtonQuickStartGuide": "Snelstartgids", + "ButtonQuickStartGuide": "Instelgids", "ButtonRefreshGuideData": "Gidsgegevens vernieuwen", "ButtonRemove": "Verwijderen", "ButtonRename": "Hernoemen", @@ -1700,7 +1700,7 @@ "SaveRecordingNFOHelp": "Metadata uit de EPG-vermeldingen naast media opslaan.", "SaveRecordingImages": "EPG-afbeeldingen opslaan", "HeaderDummyChapter": "Hoofdstukafbeeldingen", - "LabelDummyChapterDurationHelp": "De interval tussen dummy-hoofdstukken. Stel in op 0 om het genereren van dummy-hoofdstukken uit te zetten. Wijzigingen hebben geen invloed op bestaande dummy-hoofdstukken.", + "LabelDummyChapterDurationHelp": "De interval tussen dummy-hoofdstukken in seconden. Stel in op 0 om het genereren van dummy-hoofdstukken uit te zetten. Wijzigingen hebben geen invloed op bestaande dummy-hoofdstukken.", "ResolutionMatchSource": "Gelijk aan bron", "HeaderRecordingMetadataSaving": "Metadata opname", "SecondarySubtitles": "Secundaire ondertiteling", @@ -2029,5 +2029,6 @@ "HeaderUpdateRequired": "Bijwerken vereist", "HeaderServerUnavailable": "Server niet beschikbaar", "MessageForgotPasswordPinReset": "Pincode hier invoeren om wachtwoordherstel te voltooien", - "DownloadManager": "Downloads" + "DownloadManager": "Downloads", + "ViewSettings": "Weergave-instellingen" } From da542ebd5bef13bde56562a63a3aca07af507589 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Fri, 16 May 2025 13:41:53 -0400 Subject: [PATCH 295/645] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index d6c98f485..3049aaeac 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -27,7 +27,7 @@ "ButtonOpen": "Abrir", "ButtonPause": "Pausar", "ButtonPreviousTrack": "Faixa anterior", - "ButtonQuickStartGuide": "Guia de Início Rápido", + "ButtonQuickStartGuide": "Guia de instalação", "ButtonRefreshGuideData": "Atualizar Guia TV", "ButtonRemove": "Remover", "ButtonResetEasyPassword": "Redefinir código Easy PIN", From 5d9cda6dc917f04ba9b11f71a3137cdcc8dfbdab Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Fri, 16 May 2025 13:42:12 -0400 Subject: [PATCH 296/645] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index dc237b38e..d4401ac99 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -843,7 +843,7 @@ "ButtonRename": "Alterar o nome", "ButtonRemove": "Remover", "ButtonRefreshGuideData": "Atualizar Guia TV", - "ButtonQuickStartGuide": "Guia de Início Rápido", + "ButtonQuickStartGuide": "Guia de instalação", "ButtonPreviousTrack": "Faixa anterior", "ButtonPause": "Pausar", "ButtonParentalControl": "Controlo parental", From 511c148b288d498e9435c1382f84f71c8b1773df Mon Sep 17 00:00:00 2001 From: Martin Just Date: Fri, 16 May 2025 18:36:18 -0400 Subject: [PATCH 297/645] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/de.json b/src/strings/de.json index 011ef8467..c31dce518 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -67,7 +67,7 @@ "ButtonOpen": "Öffnen", "ButtonParentalControl": "Kindersicherung", "ButtonPreviousTrack": "Vorheriges Lied", - "ButtonQuickStartGuide": "Schnellstartanleitung", + "ButtonQuickStartGuide": "Einrichtungsanleitung", "ButtonRefreshGuideData": "TV-Programmdaten aktualisieren", "ButtonRemove": "Entfernen", "ButtonRename": "Umbenennen", @@ -1700,7 +1700,7 @@ "HeaderDummyChapter": "Kapitelbilder", "HeaderRecordingMetadataSaving": "Aufzeichnung von Metadaten", "LabelDummyChapterDuration": "Intervall", - "LabelDummyChapterDurationHelp": "Das Intervall zwischen Dummy-Kapiteln. Auf 0 setzen, um die Erzeugung von Dummy-Kapiteln zu deaktivieren. Eine Änderung dieses Wertes hat keine Auswirkung auf bestehende Dummy-Kapitel.", + "LabelDummyChapterDurationHelp": "Das Intervall zwischen Dummy-Kapiteln in Sekunden. Auf 0 setzen, um die Erzeugung von Dummy-Kapiteln zu deaktivieren. Eine Änderung dieses Wertes hat keine Auswirkung auf bestehende Dummy-Kapitel.", "LabelDummyChapterCount": "Limit", "LabelDummyChapterCountHelp": "Die maximale Anzahl von Kapitelbildern, die für jede Mediendatei extrahiert werden.", "LabelChapterImageResolution": "Auflösung", From 5306c66bac9800026046e57f0228894f7921950c Mon Sep 17 00:00:00 2001 From: mabod Date: Sat, 17 May 2025 05:58:08 -0400 Subject: [PATCH 298/645] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/de.json b/src/strings/de.json index c31dce518..f60a7f336 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -73,7 +73,7 @@ "ButtonRename": "Umbenennen", "ButtonResetEasyPassword": "Easy PIN-Code zurücksetzen", "ButtonResume": "Fortsetzen", - "ButtonRevoke": "Wiederrufen", + "ButtonRevoke": "Widerrufen", "ButtonScanAllLibraries": "Alle Bibliotheken scannen", "ButtonSelectDirectory": "Verzeichnis wählen", "ButtonSelectView": "Ansicht wählen", From 9dd8698bdd1ea48ebd9a3c63a44b18a09b7ac243 Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 17 May 2025 13:15:15 -0400 Subject: [PATCH 299/645] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index 57530e417..c57810029 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -1179,7 +1179,7 @@ "XmlTvSportsCategoriesHelp": "Передачи в этих категориях будут отображаться как спортивные. Для разделения используйте «|».", "Yes": "Да", "Yesterday": "Вчера", - "ChangingMetadataImageSettingsNewContent": "Изменения в настройках загрузки метаданных или иллюстраций применяются только к добавляемому в дальнейшем контенту. Чтобы применить изменения к имеющемуся контенту, необходимо обновить их метаданные вручную.", + "ChangingMetadataImageSettingsNewContent": "Изменения в настройках загрузки метаданных или иллюстраций будут применяться только к новому контенту, добавленному в медиатеку. Чтобы применить изменения к уже существующему контенту, необходимо обновить их метаданные вручную.", "LabelDynamicExternalId": "{0} ID", "LeaveBlankToNotSetAPassword": "Оставьте пустым, чтобы не назначать пароль.", "MessageImageFileTypeAllowed": "Поддерживаются только файлы JPEG и PNG.", @@ -1833,7 +1833,7 @@ "PriorityBelowNormal": "Ниже нормы", "LabelImageIntervalHelp": "Интервал времени (мс) между каждым новым изображением trickplay.", "LabelTileHeightHelp": "Максимальное количество изображений на плитке в направлении Y.", - "EnableLibrary": "Активировать библиотеку", + "EnableLibrary": "Включить библиотеку", "EnableLibraryHelp": "Отключение библиотеки скроет ее от просмотра всеми пользователями.", "Trickplay": "Trickplay", "LabelScanBehavior": "Поведение при сканировании", From 2f14cb5605ea4255f8dfc2a649a0ceaf27373f13 Mon Sep 17 00:00:00 2001 From: sabretou Date: Sat, 17 May 2025 12:57:03 -0400 Subject: [PATCH 300/645] Translated using Weblate (Marathi) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/mr/ --- src/strings/mr.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/strings/mr.json b/src/strings/mr.json index abd68cf42..63826fed2 100644 --- a/src/strings/mr.json +++ b/src/strings/mr.json @@ -519,7 +519,7 @@ "LabelAudioCodec": "ऑडियो कोडेक", "LabelAudioChannels": "ऑडियो वाहिन्या", "LabelArtists": "संगीतकार", - "LabelAppNameExample": "उदाहरणार्थ: Sickbeard, Sonarr", + "LabelAppNameExample": "", "LabelAppName": "अ‍ॅपचे नाव", "LabelAlbumArtists": "अल्बम संगीतका", "LabelAlbum": "अल्बम", @@ -676,5 +676,6 @@ "AllowCollectionManagement": "या वापरकर्त्यास संग्रह व्यवस्थापित करण्यास अनुमती द्या", "AllowSegmentDeletion": "विभागांना हटवा", "AllowSegmentDeletionHelp": "क्लायंटला पाठवल्यानंतर जुन्या विभागांना हटवा. यामुळे संपूर्ण ट्रान्सकोड केलेली फाईल डिस्कवर साठवण्याची आवश्यकता नाही. केवळ थ्रॉटलिंग सक्षम असल्यास कार्य करेल. जर आपल्याला प्लेबॅक समस्या येत असतील तर हे बंद करा.", - "LabelSegmentKeepSeconds": "विभागांना ठेवण्याची वेळ" + "LabelSegmentKeepSeconds": "विभागांना ठेवण्याची वेळ", + "AirPlay": "एअरप्ले" } From 4fa8202beecb1442b3dc1b2072ac48a67d350fe5 Mon Sep 17 00:00:00 2001 From: myrad2267 Date: Sat, 17 May 2025 20:27:01 -0400 Subject: [PATCH 301/645] Translated using Weblate (French (Canada)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr_CA/ --- src/strings/fr-ca.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/fr-ca.json b/src/strings/fr-ca.json index 3db5fa495..77993f206 100644 --- a/src/strings/fr-ca.json +++ b/src/strings/fr-ca.json @@ -1144,7 +1144,7 @@ "LabelTonemappingParam": "Paramètre de tone-mapping", "LabelSkipForwardLength": "Temps de saut en avant", "LabelSortName": "Nom de tri", - "LabelDummyChapterDurationHelp": "L’intervalle entre les chapitres fictifs. Définir une valeur de 0 pour désactiver la génération de chapitres fictifs. Le changement de cette valeur n’aura aucun effet sur les chapitres fictifs existants.", + "LabelDummyChapterDurationHelp": "L’intervalle entre les chapitres fictifs en secondes. Définir une valeur de 0 pour désactiver la génération de chapitres fictifs. Le changement de cette valeur n’aura aucun effet sur les chapitres fictifs existants.", "LabelEnableLUFSScan": "Activer le scan LUFS", "LabelOriginalAspectRatio": "Format d’image original", "LabelPlayer": "Lecteur", From f582c83e8ed96605b65f430737d86473d9ff06a6 Mon Sep 17 00:00:00 2001 From: myrad2267 Date: Sat, 17 May 2025 20:27:20 -0400 Subject: [PATCH 302/645] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 14e020e7a..3a700a6d3 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1694,7 +1694,7 @@ "HeaderRecordingMetadataSaving": "Enregistrement des métadonnées", "SaveRecordingNFO": "Enregistrer les métadonnées du fournisseur dans le fichier NFO", "SaveRecordingImages": "Enregistrer les images des métadonnées du fournisseur", - "LabelDummyChapterDurationHelp": "Intervalle entre deux chapitres factices ou 0 pour désactiver la génération. Changer la valeur n’affectera pas les chapitres existants.", + "LabelDummyChapterDurationHelp": "Intervalle entre deux chapitres factices en seondes ou 0 pour désactiver la génération. Changer la valeur n’affectera pas les chapitres existants.", "LabelDummyChapterCount": "Limite", "LabelChapterImageResolution": "Résolution", "LabelChapterImageResolutionHelp": "La résolution d'image des chapitre factices. Changer la valeur n’affectera pas les chapitres existants.", From e9ab8b4d5f5dc5afef0ee8c3c50388bc7a0ca7a7 Mon Sep 17 00:00:00 2001 From: Iagocds Date: Sun, 18 May 2025 01:02:36 -0400 Subject: [PATCH 303/645] Translated using Weblate (Portuguese (Brazil)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/ --- src/strings/pt-br.json | 48 +++++++++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/src/strings/pt-br.json b/src/strings/pt-br.json index cd782b110..d1870d19a 100644 --- a/src/strings/pt-br.json +++ b/src/strings/pt-br.json @@ -72,7 +72,7 @@ "ButtonParentalControl": "Controle dos pais", "ButtonPause": "Pausar", "ButtonPreviousTrack": "Faixa anterior", - "ButtonQuickStartGuide": "Guia Rápido", + "ButtonQuickStartGuide": "Guia de configuração", "ButtonRefreshGuideData": "Atualizar Dados do Guia", "ButtonRemove": "Remover", "ButtonRename": "Renomear", @@ -1066,7 +1066,7 @@ "ThemeSongs": "Músicas-tema", "ThemeVideos": "Vídeos-tema", "TheseSettingsAffectSubtitlesOnThisDevice": "Estas configurações afetam as legendas neste dispositivo", - "ThisWizardWillGuideYou": "Este assistente irá guiá-lo pelo processo de instalação. Para começar, por favor selecione seu idioma preferido.", + "ThisWizardWillGuideYou": "Este assistente irá guiá-lo pelo processo de instalação. Para começar, por favor digite o nome do servidor e selecione seu idioma preferido.", "Thumb": "Miniatura", "Thursday": "Quinta-feira", "TitleHardwareAcceleration": "Aceleração de Hardware", @@ -1475,7 +1475,7 @@ "RemuxHelp2": "Remux usa muito pouco processamento com uma qualidade de mídia completamente sem perdas.", "RemuxHelp1": "A mídia está em um contêiner de arquivo incompatível (MKV, AVI, WMV, etc.), mas tanto o fluxo de vídeo quanto o de áudio são compatíveis com o dispositivo. A mídia será reembalada sem perdas em tempo real antes de ser enviada para o dispositivo.", "Remuxing": "Remuxar", - "AspectRatioCover": "Capa", + "AspectRatioCover": "Ampliar", "EnableFallbackFontHelp": "Habilite fontes alternativas personalizadas. Isso pode evitar o problema de renderização incorreta das legendas.", "EnableFallbackFont": "Ativar fontes alternativas", "LabelFallbackFontPathHelp": "Estas fontes são utilizadas em alguns clientes para mostrar legendas. Por favor, consulte a documentação para mais informações.", @@ -1507,7 +1507,7 @@ "EnablePlugin": "Habilitar", "DirectPlayHelp": "O arquivo de origem é totalmente compatível com este cliente e a sessão está recebendo o arquivo sem modificações.", "YoutubeBadRequest": "Requisição ruim.", - "AspectRatioFill": "Preencher", + "AspectRatioFill": "Esticar", "LabelHDHomerunPortRange": "Intervalo de portas HDHomerun", "HeaderContinueReading": "Continue Lendo", "UseEpisodeImagesInNextUp": "Utilizar imagens dos episódios nas seções 'Veja a Seguir' e 'Continue Assistindo'", @@ -1590,7 +1590,7 @@ "TypeOptionPluralMusicAlbum": "Álbuns de música", "TypeOptionPluralMovie": "Filmes", "TypeOptionPluralEpisode": "Episódios", - "TypeOptionPluralBoxSet": "Boxes Coleção", + "TypeOptionPluralBoxSet": "Box Coleções", "TypeOptionPluralBook": "Livros", "TypeOptionPluralAudio": "Áudios", "Print": "Imprimir", @@ -1652,7 +1652,7 @@ "AllowEmbeddedSubtitles": "Desabilitar diferentes tipos de legendas embutidas", "Bold": "Negrito", "LabelTextWeight": "Intensidade do texto", - "EnableSplashScreen": "Ativar tela de abertura", + "EnableSplashScreen": "Ativar imagem na tela de abertura", "ScreenResolution": "Resolução de tela", "RememberAudioSelectionsHelp": "Tentar definir a faixa de áudio com a correspondência mais próxima do último vídeo.", "RememberAudioSelections": "Definir faixa de áudio baseado no item anterior", @@ -1723,12 +1723,12 @@ "UserMenu": "Menu do Usuário", "HeaderPerformance": "Rendimento", "EnableAudioNormalizationHelp": "A normalização de áudio vai adicionar um ganho constante para manter a média no nível desejado (-18db).", - "LabelDummyChapterDurationHelp": "Intervalo entre os capítulos forçados. Ajuste com 0 para desabilitar a geração de capítulos forçados. A mudança não terá efeito nos capítulos forçados existentes.", + "LabelDummyChapterDurationHelp": "Intervalo entre os capítulos forçados em segundos. Ajuste com 0 para desabilitar a geração de capítulos forçados. A mudança não terá efeito nos capítulos forçados existentes.", "LabelParallelImageEncodingLimit": "Limite de codificação em paralelo de imagens", "HeaderDummyChapter": "Imagem dos capítulos", "LabelEnableLUFSScan": "Habilitar procura LUFS", "LabelEnableLUFSScanHelp": "Tocadores podem normalizar a reprodução de áudio (LUFS) para obter igual volume em todas as faixas. Isto fará com que o escaneamento das bibliotecas demore mais e utilize mais recursos.", - "LabelParallelImageEncodingLimitHelp": "Número máximo de codificação de imagens que são permitidas executar em paralelo. Ajustar com 0 irá escolher um limite baseado na quantidade de núcleos.", + "LabelParallelImageEncodingLimitHelp": "Número máximo de codificação de imagens que são permitido executar em paralelo. Deixar isso vazio irá escolher um limite baseado na quantidade de núcleos.", "PreferEmbeddedExtrasTitlesOverFileNames": "Prefere os títulos inclusos ao nome dos arquivos para os extras", "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Os extras geralmente têm o mesmo nome incorporado do título principal, verifique isso para usar títulos incorporados para eles de qualquer maneira.", "TonemappingModeHelp": "Selecione o modo de mapeamento de tom. Se você experimentar realces estourados, tente mudar para o modo RGB.", @@ -1880,7 +1880,7 @@ "SelectPreferredTranscodeVideoAudioCodecHelp": "Selecione o codec de áudio preferido para o qual transcodificar o conteúdo de vídeo. Se o codec preferido não for compatível, o servidor usará o próximo melhor codec disponível.", "SaveLyricsIntoMediaFolders": "Salvar letras de música nas pastas de mídia", "SaveLyricsIntoMediaFoldersHelp": "Armazenar as letras de músicas ao lado dos arquivos de áudio permite que eles sejam gerenciadas com mais facilidade.", - "LibraryScanFanoutConcurrencyHelp": "Número máximo de tarefas paralelas durante o escaneamento da biblioteca. Definir o valor como 0 irá escolher um limite com base na quantidade de núcleos do seu sistema. AVISO: Definir esse número muito alto pode causar problemas com sistema de arquivos em rede; se você encontrar problemas, reduza esse número.", + "LibraryScanFanoutConcurrencyHelp": "Número máximo de tarefas paralelas durante o escaneamento da biblioteca. Definir deixar isso vazio irá escolher um limite com base na quantidade de núcleos do seu sistema. AVISO: Definir esse número muito alto pode causar problemas com sistema de arquivos em rede; se você encontrar problemas, reduza esse número.", "PlaylistError.CreateFailed": "Erro ao criar lista de reprodução", "PlaylistPublic": "Permitir acesso público", "PlaylistPublicDescription": "Permitir que essa lista de reprodução seja visualizada por qualquer usuário conectado.", @@ -1998,5 +1998,33 @@ "DeleteServerConfirmation": "Você tem certeza que deseja excluir este servidor?", "HeaderPageNotFound": "Página indisponível", "LabelDevice": "Dispositivo", - "HeaderServerUnavailable": "Servidor indisponível" + "HeaderServerUnavailable": "Servidor indisponível", + "LabelGroupShowsIntoCollections": "Agrupar shows em coleções", + "LabelGroupShowsIntoCollectionsHelp": "Shows em uma coleção vão ser exibidos como um item agrupado nas listagens de shows.", + "LibraryNameInvalid": "O nome da biblioteca não pode ficar em branco.", + "LimitSegmentLength": "Use segmentos HLS menores", + "LimitSegmentLengthHelp": "Habilitar essa opção pode ajudar a prevenir o reprodutor de mídia HLS de travar a reprodução durante o avanço rápido em alguns dispositivos, como as TVs com webOS.", + "ReadInputAtNativeFramerateHelp": "Habilitando essa opção pode resolver alguns problemas, ex.: transmissões ao vivo parando prematuramente.", + "MetadataNfoLoadError": "Falha ao carregar as configurações de metadados NFO", + "SettingsPageLoadError": "Falha ao carregar a pagina de configurações", + "ReadInputAtNativeFramerate": "Ler a entrada na frequência de quadros nativa", + "ViewSettings": "Ver as configurações", + "ImageUploadCancelled": "Upload de imagem cancelado", + "ImageUploadFailed": "Upload de imagem falhou", + "LogLoadFailure": "Falha ao carregar o arquivo de registros. Pode estar ainda sendo gravado.", + "UploadCustomImage": "Enviar imagem personalizada", + "RetryWithGlobalSearch": "Retentar com a pesquisa global", + "PageNotFound": "Essa não é a pagina que você está procurando.", + "Retry": "Retentar", + "DownloadManager": "Downloads", + "ImageDeleteFailed": "Falha ao deletar a imagem", + "DisplayLoadError": "Um erro ocorreu durante o carregamento dos dados de configuração de tela.", + "LabelSubtitleStyling": "Estilização da legenda", + "NativeSubtitleStylingHelp": "A estilização das legendas podem não funcionar em alguns dispositivos. Mas ela não causa nenhuma perda de desempenho.", + "LastActive": "Ultima vez ativo", + "HeaderUpdateRequired": "Atualização requerida", + "MetadataImagesLoadError": "Falha ao carregar as configurações de metadados", + "MessageForgotPasswordPinReset": "Digite o PIN aqui para finalizar a redefinição da senha", + "Native": "Nativo", + "StreamCountExceedsLimit": "O número de reproduções excede o limite" } From 6e67a9b62a1d488754dad325c02c07ff92c85e28 Mon Sep 17 00:00:00 2001 From: Gallyam Biktashev Date: Mon, 19 May 2025 04:10:58 -0400 Subject: [PATCH 304/645] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index c57810029..a04123e81 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -1701,7 +1701,7 @@ "LabelParallelImageEncodingLimit": "Ограничение на параллельное кодирование изображений", "LabelParallelImageEncodingLimitHelp": "Максимальное количество кодировок изображений, которые разрешено выполнять параллельно. Оставив это значение пустым, вы выберете ограничение, основанное на количестве ядер вашей системы.", "HeaderPerformance": "Производительность", - "LabelDummyChapterDurationHelp": "Интервал между виртуальным разделами. Установите значение 0 для отключения генерации виртуальных разделов. Изменение этого параметра не повлияет на существующие виртуальные разделы.", + "LabelDummyChapterDurationHelp": "Интервал между виртуальным разделами в секундах. Установите значение 0 для отключения генерации виртуальных разделов. Изменение этого параметра не повлияет на существующие виртуальные разделы.", "LabelChapterImageResolutionHelp": "Разрешение созданных изображений разделов. Изменение этого параметра не повлияет на существующие изображения разделов.", "ResolutionMatchSource": "Соответствовать источнику", "MenuOpen": "Открыть Меню", @@ -2029,5 +2029,7 @@ "LimitSegmentLengthHelp": "Включение этой опции может помочь предотвратить зависание HLS-плеера во время перемотки на некоторых устройствах, например, на телевизорах с webOS.", "HeaderServerUnavailable": "Сервер недоступен", "HeaderUpdateRequired": "Требуется обновление", - "ViewSettings": "Настройки видов" + "ViewSettings": "Настройки видов", + "DownloadManager": "Загрузки", + "MessageForgotPasswordPinReset": "Введите PIN-код для завершения сброса пароля" } From d0abbe9a27f65ff3365d86ad8e021d4441159137 Mon Sep 17 00:00:00 2001 From: "Thadah D. Denyse" Date: Mon, 19 May 2025 03:28:36 -0400 Subject: [PATCH 305/645] Translated using Weblate (Basque) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/eu/ --- src/strings/eu.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/strings/eu.json b/src/strings/eu.json index 751d941ff..bfb28cf82 100644 --- a/src/strings/eu.json +++ b/src/strings/eu.json @@ -1491,7 +1491,7 @@ "ButtonRename": "Berriro izendatu", "ButtonRemove": "Ezabatu", "ButtonRefreshGuideData": "Gidako datuak eguneratzea", - "ButtonQuickStartGuide": "Hasiera azkarreko gida", + "ButtonQuickStartGuide": "Konfigurazio gida", "ButtonPreviousTrack": "Aurreko pista", "ButtonPlayer": "Ugaltzailea", "ButtonPause": "Etenaldia", @@ -1700,7 +1700,7 @@ "LabelSaveTrickplayLocallyHelp": "Trickplay irudiak multimedia karpetetan gordetzeak zure multimedia ondoan jarriko ditu migrazio eta sarbide errazak izan ditzaten.", "LabelTrickplayThreadsHelp": "ffmpeg-en '-threads' argumentura pasatuko diren hari kopurua.", "LabelQscaleHelp": "ffmpeg-ek sortutako irudien kalitate-eskala, 2 kalitate handiena izanik eta 31 baxuena.", - "LabelDummyChapterDurationHelp": "Kapitulu faltsuen arteko tartea. 0ra ezarri kapitulu faltsuen sorrera desgaitzeko. Hau aldatzeak ez du eraginik izango dauden kapitulu faltsuetan.", + "LabelDummyChapterDurationHelp": "Kapitulu faltsuen arteko tartea, segundotan. 0ra ezarri kapitulu faltsuen sorrera desgaitzeko. Hau aldatzeak ez du eraginik izango dauden kapitulu faltsuetan.", "LabelChapterImageResolutionHelp": "Ateratako kapitulu-irudien bereizmena. Hau aldatzeak ez du eraginik izango dauden kapitulu faltsuetan.", "ReadInputAtNativeFramerateHelp": "Aukera hau gaitzeak arazo batzuk konpondu ditzake, adibidez, zuzeneko erreprodukzioak azkarregi gelditzea.", "PlaybackError.RateLimitExceeded": "Une honetan ezin da multimedia hau erreproduzitu abiadura-mugak direla eta.", @@ -2010,5 +2010,7 @@ "LabelDummyChapterDuration": "Tartea", "LogLevel.None": "Bat ere ez", "HeaderUpdateRequired": "Eguneraketa beharrezkoa da", - "Illustrator": "Ilustratzailea" + "Illustrator": "Ilustratzailea", + "MessageForgotPasswordPinReset": "Sartu PINa hemen pasahitza berrezartzeko", + "DownloadManager": "Deskargak" } From 392b1dc3a6dc81f0925667fc597769c46b85595c Mon Sep 17 00:00:00 2001 From: domenico code Date: Mon, 19 May 2025 05:13:44 -0400 Subject: [PATCH 306/645] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/it.json b/src/strings/it.json index 003d76393..7a976476e 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -2029,5 +2029,6 @@ "LabelGroupShowsIntoCollections": "Raggruppa le serie in collezioni", "HeaderServerUnavailable": "Server Non Disponibile", "HeaderUpdateRequired": "Aggiornamento Necessario", - "ViewSettings": "Mostra impostazioni" + "ViewSettings": "Mostra impostazioni", + "DownloadManager": "Scaricati" } From b9b316e2433c8312bb8f471de8c00a3d648da56e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yago=20Ra=C3=B1a=20Gayoso?= Date: Mon, 19 May 2025 08:26:43 -0400 Subject: [PATCH 307/645] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/strings/es.json b/src/strings/es.json index f8a2ba54b..22b184c62 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -63,7 +63,7 @@ "ButtonParentalControl": "Control parental", "ButtonPause": "Pausa", "ButtonPreviousTrack": "Pista anterior", - "ButtonQuickStartGuide": "Guía de inicio rápido", + "ButtonQuickStartGuide": "Guía de configuración", "ButtonRefreshGuideData": "Actualizar datos de la guía", "ButtonRemove": "Eliminar", "ButtonRename": "Renombrar", @@ -1695,7 +1695,7 @@ "SaveRecordingImages": "Guardar grabación de imágenes EPG", "SaveRecordingImagesHelp": "Guardar imágenes del proveedor de listados EPG junto con los archivos multimedia.", "LabelDummyChapterDuration": "Intervalo", - "LabelDummyChapterDurationHelp": "Intervalo entre capítulos dummy. Dejar a 0 para deshabilitar la generación de capítulos dummy. Cambiar esta opción no tendrá efecto para capítulos dummy ya existentes.", + "LabelDummyChapterDurationHelp": "Intervalo entre capítulos dummy en segundos. Dejar a 0 para deshabilitar la generación de capítulos dummy. Cambiar esta opción no tendrá efecto para capítulos dummy ya existentes.", "HeaderDummyChapter": "Imágenes de capítulos", "LabelDummyChapterCount": "Límite", "Featurette": "Reportaje extra", @@ -2029,5 +2029,7 @@ "StreamCountExceedsLimit": "El numero de transmisiones excede el límite", "HeaderServerUnavailable": "Servidor no disponible", "HeaderUpdateRequired": "Actualización requerida", - "ViewSettings": "Ajustes de vista" + "ViewSettings": "Ajustes de vista", + "DownloadManager": "Descargas", + "MessageForgotPasswordPinReset": "Introducir PIN aquí para terminar el restablecimiento de contraseña" } From 782ec8857d3e355dc88b34f46414825944db0c1a Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Mon, 19 May 2025 07:33:09 -0400 Subject: [PATCH 308/645] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index 061a06b37..7ed489819 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -85,7 +85,7 @@ "ButtonResetEasyPassword": "Đặt lại mã PIN Tiện Lợi", "ButtonRename": "Đổi tên", "ButtonRefreshGuideData": "Làm mới dữ liệu hướng dẫn", - "ButtonQuickStartGuide": "Hướng dẫn nhanh", + "ButtonQuickStartGuide": "Hướng Dẫn Thiết Lập", "ButtonPreviousTrack": "Bản ghi trước", "ButtonPause": "Tạm dừng", "ButtonParentalControl": "Kiểm soát của cha mẹ", @@ -1681,7 +1681,7 @@ "DownloadAll": "Tải Xuống Tất Cả", "LabelStereoDownmixAlgorithm": "Thuật Toán Trộn Âm Thanh Nổi", "StereoDownmixAlgorithmHelp": "Thuật toán được sử dụng để trộn âm thanh đa kênh thành âm thanh nổi.", - "LabelDummyChapterDurationHelp": "Khoảng thời gian giữa các phân đoạn giả. Đặt thành 0 để tắt tạo phân đoạn giả. Việc thay đổi điều này sẽ không ảnh hưởng đến các phân đoạn giả hiện có.", + "LabelDummyChapterDurationHelp": "Khoảng thời gian giữa các phân đoạn giả tính bằng giây. Đặt thành 0 để tắt sinh ra phân đoạn giả. Thay đổi điều này sẽ không ảnh hưởng đến các phân đoạn giả hiện có.", "LabelChapterImageResolutionHelp": "Độ phân giải của hình ảnh đoạn trích xuất. Việc thay đổi điều này sẽ không ảnh hưởng đến các đoạn giả hiện có.", "SaveRecordingNFO": "Lưu bản ghi dữ liệu mô tả EPG trong NFO", "SaveRecordingImagesHelp": "Lưu hình ảnh từ nhà cung cấp danh sách EPG bên cạnh phương tiện.", @@ -2027,5 +2027,6 @@ "HeaderServerUnavailable": "Máy Chủ Không Khả Dụng", "HeaderUpdateRequired": "Bắt Buộc Cập Nhập", "ViewSettings": "Xem cài đặt", - "MessageForgotPasswordPinReset": "Nhập PIN vào đây để hoàn thành đặt lại Mật Khẩu" + "MessageForgotPasswordPinReset": "Nhập PIN vào đây để hoàn thành đặt lại Mật Khẩu", + "DownloadManager": "Tải xuống" } From 7791a55b36da8cf89d646318f6fe45ef568d208e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aindri=C3=BA=20Mac=20Giolla=20Eoin?= Date: Mon, 19 May 2025 08:43:47 -0400 Subject: [PATCH 309/645] Translated using Weblate (Irish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ga/ --- src/strings/ga.json | 48 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/src/strings/ga.json b/src/strings/ga.json index b6f8d2f78..91017e5ef 100644 --- a/src/strings/ga.json +++ b/src/strings/ga.json @@ -172,7 +172,7 @@ "LabelMetadataSaversHelp": "Roghnaigh na formáidí comhaid le húsáid agus do mheiteashonraí á sábháil.", "LabelMinResumeDuration": "Íosfhad atosaithe", "LabelNumber": "Uimhir", - "LabelParallelImageEncodingLimitHelp": "Líon uasta ionchóduithe íomhá a cheadaítear a rith go comhthreomhar. Má shocraíonn tú é seo go 0, roghnóidh sé teorainn bunaithe ar chroí-chomhaireamh do chórais.", + "LabelParallelImageEncodingLimitHelp": "Uasmhéid na n-ionchóduithe íomhá a cheadaítear a rith go comhthreomhar. Má fhágtar seo folamh roghnófar teorainn bunaithe ar chomhaireamh croí do chórais.", "LabelParentalRating": "Rátáil tuismitheora", "LabelParentNumber": "Uimhir tuismitheora", "LabelPostProcessorArgumentsHelp": "Úsáid {path} mar chosán an chomhaid taifeadta.", @@ -351,7 +351,7 @@ "Letterer": "Leitir Ceanainn", "LibraryAccessHelp": "Roghnaigh na leabharlanna le roinnt leis an úsáideoir seo. Beidh riarthóirí in ann gach fillteán a chur in eagar ag baint úsáide as an mbainisteoir meiteashonraí.", "LibraryScanFanoutConcurrency": "Teorainn le tascanna scanadh leabharlainne comhthreomhara", - "LibraryScanFanoutConcurrencyHelp": "Líon uasta tascanna comhthreomhara le linn scanadh leabharlainne. Má shocraíonn tú é seo go 0, roghnóidh sé teorainn bunaithe ar chroí-chomhaireamh do chórais. RABHADH: D'fhéadfadh socrú na huimhreach seo ró-ard a bheith ina chúis le saincheisteanna le córais comhad líonra; má bhíonn fadhbanna agat an uimhir seo a ísliú.", + "LibraryScanFanoutConcurrencyHelp": "Uasmhéid na dtascanna comhthreomhara le linn scananna leabharlainne. Má fhágtar seo folamh roghnófar teorainn bunaithe ar chomhaireamh croí do chórais. RABHADH: D’fhéadfadh fadhbanna a bheith ann le córais chomhad líonra nuair a shocraítear an uimhir seo ró-ard; má bhíonn fadhbanna agat, ísligh an uimhir seo.", "LimitSupportedVideoResolution": "Cuir teorainn leis an taifeach físe uasta a dtacaítear leis", "LimitSupportedVideoResolutionHelp": "Bain úsáid as 'Maximum Allowed Video Transcoding Resolution' mar réiteach físe uasta tacaithe.", "List": "Liosta", @@ -726,7 +726,7 @@ "Vertical": "Ingearach", "WriteAccessRequired": "Éilíonn Jellyfin rochtain scríofa ar an bhfillteán seo. Cinntigh le do thoil go bhfuil rochtain scríofa agat agus bain triail eile as.", "Writer": "Scríbhneoir", - "AspectRatioFill": "Líon", + "AspectRatioFill": "Sín", "LabelRemuxingInfo": "Eolas Remuxing", "LabelOriginalMediaInfo": "Buneolas faoi na Meáin", "LabelSyncPlayInfo": "Eolas sioncronaithePlay", @@ -805,7 +805,7 @@ "LabelDropLyricsHere": "Buail liricí anseo, nó cliceáil chun brabhsáil.", "LabelDropShadow": "Buail scáth", "LabelDropSubtitleHere": "Buail fotheideal anseo, nó cliceáil chun brabhsáil.", - "LabelDummyChapterDurationHelp": "An t-eatramh idir caibidlí caocha. Socraigh go 0 chun giniúint chaibidil caoch a dhíchumasú. Ní bheidh aon éifeacht ag athrú seo ar chaibidlí caocha atá ann cheana féin.", + "LabelDummyChapterDurationHelp": "An t-eatramh idir caibidlí bréige i soicindí. Socraigh go 0 chun giniúint caibidlí bréige a dhíchumasú. Ní bheidh aon tionchar ag athrú seo ar chaibidlí bréige atá ann cheana féin.", "LabelEnableAudioVbrHelp": "Cuireann ráta giotán athraitheach cáilíocht níos fearr ar fáil do chóimheas meánráta giotán, ach i gcásanna neamhchoitianta d'fhéadfadh saincheisteanna maolánacha agus comhoiriúnachta a bheith mar thoradh orthu.", "LabelEnableAutomaticPortMap": "Cumasaigh mapáil uathoibríoch calafoirt", "LabelEnableAutomaticPortMapHelp": "Cuir calafoirt phoiblí ar do ródaire ar aghaidh go huathoibríoch chuig calafoirt áitiúla ar do fhreastalaí trí UPnP. B'fhéidir nach n-oibreoidh sé seo le roinnt samhlacha ródaire nó cumraíochtaí líonra. Ní chuirfear athruithe i bhfeidhm go dtí tar éis atosú freastalaí.", @@ -1187,7 +1187,7 @@ "TabParentalControl": "Rialú Tuismitheoirí", "TellUsAboutYourself": "Inis dúinn fút féin", "TheseSettingsAffectSubtitlesOnThisDevice": "Bíonn tionchar ag na socruithe seo ar fhotheidil ar an ngléas seo", - "ThisWizardWillGuideYou": "Cabhróidh an draoi seo leat tú a threorú tríd an bpróiseas socraithe. Chun tús a chur leis, roghnaigh an teanga is fearr leat.", + "ThisWizardWillGuideYou": "Cabhróidh an draoi seo leat an próiseas socraithe a dhéanamh. Chun tús a chur leis, cuir isteach ainm freastalaí agus roghnaigh do theanga is fearr leat.", "Thumb": "Ordóg", "Thursday": "Déardaoin", "TitleHardwareAcceleration": "Luasghéarú Crua-earraí", @@ -1386,7 +1386,7 @@ "Sports": "Spórt", "HeaderFetchImages": "Faigh Íomhánna", "HeaderForKids": "Do Pháistí", - "AspectRatioCover": "Clúdach", + "AspectRatioCover": "Zúmáil", "Unreleased": "Gan scaoileadh fós", "HeaderFrequentlyPlayed": "Seinnte go Minic", "HeaderGuestCast": "Réaltaí Aoi", @@ -1420,7 +1420,7 @@ "ButtonOk": "Ceart go leor", "ButtonPlayer": "Imreoir", "ButtonPreviousTrack": "An rian roimhe seo", - "ButtonQuickStartGuide": "Treoir Tosaigh Thapa", + "ButtonQuickStartGuide": "Treoir Socraithe", "ButtonRefreshGuideData": "Athnuaigh Sonraí Treorach", "ButtonRename": "Athainmnigh", "ButtonResume": "Athdhúisigh", @@ -1709,7 +1709,7 @@ "EnableIntelLowPowerH264HwEncoder": "Cumasaigh ionchódóir crua-earraí Intel Low-Power H.264", "EncodingFormatHelp": "Roghnaigh an t-ionchódú físe gur chóir jellyfin transcode chuig. Úsáidfidh Jellyfin ionchódú bogearraí nuair nach bhfuil luasghéarú crua-earraí don fhormáid roghnaithe ar fáil. Cumasófar ionchódú H264 i gcónaí.", "ThemeVideo": "Físeán Téama", - "EnableSplashScreen": "Cumasaigh an splancscáileán", + "EnableSplashScreen": "Cumasaigh an íomhá splancscáileáin", "LabelVppTonemappingContrast": "VPP Tone mapáil gnóthachan codarsnachta", "MediaInfoDvLevel": "Leibhéal DV", "LabelQscale": "Qscale", @@ -1812,8 +1812,36 @@ "LabelSubtitleStyling": "Stíleáil fotheideal", "Native": "Dúchasach", "NativeSubtitleStylingHelp": "Ní oibreoidh stíliú fotheideal ar ghléasanna áirithe. Mar sin féin, ní thagann sé le haon forchostais feidhmíochta.", - "LibraryNameInvalid": "Ní féidir le hainm na leabharlainne a bheith folamh ná spásanna tosaigh/rianta a bheith ann.", + "LibraryNameInvalid": "Ní féidir ainm na leabharlainne a fhágáil folamh.", "DeleteServerConfirmation": "An bhfuil tú cinnte gur mian leat an freastalaí seo a scriosadh?", "LastActive": "Gníomhach seo caite", - "LabelDevice": "Gléas" + "LabelDevice": "Gléas", + "CopyLogSuccess": "Cóipeáladh ábhar an loga go rathúil.", + "HeaderServerUnavailable": "Freastalaí Gan Fáil", + "ImageDeleteFailed": "Theip ar scriosadh íomhá", + "SettingsPageLoadError": "Theip ar an leathanach socruithe a lódáil", + "DisplayLoadError": "Tharla earráid agus sonraí cumraíochta an taispeána á lódáil.", + "DownloadManager": "Íoslódálacha", + "ReadInputAtNativeFramerateHelp": "D’fhéadfadh sé go réiteofaí roinnt fadhbanna tríd an rogha seo a chumasú, e.g. sruthú beo ag stopadh roimh am.", + "MetadataNfoLoadError": "Theip ar shocruithe NFO meiteashonraí a lódáil", + "ReadInputAtNativeFramerate": "Léigh ionchur ag ráta fráma dúchasach", + "LogLoadFailure": "Theip ar an gcomhad loga a luchtú. Seans go bhfuiltear fós ag scríobh chuige go gníomhach.", + "HeaderPageNotFound": "Leathanach gan aimsiú", + "PageNotFound": "Ní hé seo an leathanach atá á lorg agat.", + "LabelGroupShowsIntoCollectionsHelp": "Taispeánfar seónna i mbailiúchán mar mhír ghrúpáilte amháin agus liostaí seónna á dtaispeáint.", + "LabelGroupShowsIntoCollections": "Taispeántais ghrúpa i mbailiúcháin", + "LimitSegmentLength": "Úsáid codanna HLS níos giorra", + "LimitSegmentLengthHelp": "D’fhéadfadh sé go gcuideodh cumasú an rogha seo le cosc a chur ar an seinnteoir HLS dul i bhfostú le linn cuardaigh ar ghléasanna áirithe, amhail teilifíseáin webOS.", + "Retry": "Déan iarracht arís", + "RetryWithGlobalSearch": "Déan iarracht eile le cuardach domhanda", + "ViewSettings": "Féach ar shocruithe", + "CustomSplashScreenSize": "Ba chóir go mbeadh íomhánna saincheaptha i gcóimheas gné 16x9 agus méid íosta 1920x1080.", + "DeleteCustomImage": "Scrios Íomhá Saincheaptha", + "ImageUploadCancelled": "Uaslódáil íomhá curtha ar ceal", + "ImageUploadFailed": "Theip ar uaslódáil íomhá", + "MessageForgotPasswordPinReset": "Cuir isteach an PIN anseo chun an t-athshocrú pasfhocail a chríochnú", + "StreamCountExceedsLimit": "Tá líon na sruthanna níos mó ná an teorainn", + "UploadCustomImage": "Uaslódáil Íomhá Saincheaptha", + "MetadataImagesLoadError": "Theip ar shocruithe meiteashonraí a lódáil", + "HeaderUpdateRequired": "Nuashonrú Riachtanach" } From 4d2d46de4bf00fcab5b73862b6aaf4660c6aa903 Mon Sep 17 00:00:00 2001 From: Tal Sarid Date: Mon, 19 May 2025 17:58:58 -0400 Subject: [PATCH 310/645] Translated using Weblate (Hebrew) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/ --- src/strings/he.json | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/strings/he.json b/src/strings/he.json index b633221ce..08b6830f9 100644 --- a/src/strings/he.json +++ b/src/strings/he.json @@ -1375,8 +1375,8 @@ "LabelRecordingPath": "מסלול הקלטה ברירת מחדל", "LabelScreensaverTimeHelp": "מספר השניות הנחוץ של חוסר פעילות כדי להפעיל את שומר המסך.", "LabelRepository": "מאגר", - "LabelSaveTrickplayLocally": "שמירת תמונות טריקפליי ליד המדיה", - "LabelSaveTrickplayLocallyHelp": "שמירת תמונות טריקפליי בתיקיית המדיה תשים אותם ליד המדיה שלך למיגרציה וגישה קלה.", + "LabelSaveTrickplayLocally": "שמירת תמונות Trickplay לצד המדיה", + "LabelSaveTrickplayLocallyHelp": "שמירת תמונות Trickplay בתיקיית המדיה תשים אותן לצד המדיה שלך למיגרציה וגישה קלה.", "LabelRemoteClientBitrateLimit": "גבול קצב הזרמת רשת (Mbps)", "LabelOptionalNetworkPathHelp": "אם תיקייה זו משותפת ברשת, הגדרת הכתובת המשותפת תאפשר ללקוחות אחרים לגשת לקבצי המדיה ישירות. למשל {0} או {1}.", "LabelOpenclDeviceHelp": "התקן OpenCL זה משמש למיפוי גוונים. משמאל לנקודה מופיע מספר הפלטפורמה, ומימינה מספר הרכיב בפלטפורמה. ערך ברירת המחדל הוא 0.0. נדרשת תוכנת FFmpeg המכילה את שיטת האצת החומרה OpenCL.", @@ -1697,7 +1697,7 @@ "RenderPgsSubtitleHelp": "לקבוע אם על הלקוח לרנדר כתוביות PGS במקום להשתמש בכתוביות מוטמעות. זה יכול לחסוך שינוי קידוד בצד השרת על חשבון ביצועי הרנדר בצד השרת.", "RepeatAll": "חזרה על הכל", "RepeatOne": "חזרה פעם אחת", - "ReplaceTrickplayImages": "החלפת תמונות קיימות", + "ReplaceTrickplayImages": "החלפת תמונות Trickplay קיימות", "SearchForLyrics": "חיפוש מילים לשיר", "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "הגדרות אלה תקפות גם לניגון Google Cast שהופעלו על ידי מכשיר זה.", "SubtitleMagenta": "לילך", @@ -1867,16 +1867,16 @@ "LabelVideoRangeType": "סוג טווח וידיאו", "LabelTrickplayAccel": "הפעלת פענוח חומרה", "LabelProcessPriority": "עדיפות התהליך", - "LabelProcessPriorityHelp": "שינוי ערך זה יקבע כמה המעבד מתעדף את תהליך יצירת טריקפליי ביחס לתהליכים אחרים. אם הבחנת בהאטה בזמן יצירת תמונות טריקפליי ולא רוצה לעצור את יצירתם, ניתן להוריד זאת לצד הורדת מספר החוטים.", + "LabelProcessPriorityHelp": "שינוי ערך זה יקבע כמה המעבד מתעדף את תהליך יצירת Trickplay ביחס לתהליכים אחרים. אם הבחנת בהאטה בזמן יצירת תמונות Trickplay ולא רוצה לעצור את יצירתם, ניתן להוריד זאת לצד הורדת מספר החוטים.", "LabelTileHeight": "גובה אריח", - "LabelWidthResolutionsHelp": "רשימה מופרדת בפסיקים של רוחבים (פיקסלים) שיווצרו על ידי טריקפליי. כל התמונות יווצרו ביחס למקור, למשל רוחב 320 בוידיאו ביחס 16:9 יוציא תמונה ברזולוציה 320x180.", + "LabelWidthResolutionsHelp": "רשימה מופרדת בפסיקים של רוחבי התמונות (בפיקסלים) שייווצרו על ידי Trickplay. כל התמונות ייווצרו ביחס למקור, למשל רוחב 320 בווידיאו ביחס 16:9 יוציא תמונה ברזולוציה 320x180.", "LabelTileWidth": "רוחב אריח", "LabelTileWidthHelp": "מספר מירבי של תמונות לכל אריח בכיוון אופקי.", - "LabelExtractTrickplayDuringLibraryScanHelp": "האם ליצור תמונות טריקפליי כאשר וידיאו מיובא במהלך סריקת ספרייה. אחרת, הן ייחולצו במהלך המשימה המתוכננת של טריקפליי. אם היצירה הוגדרה ללא חסימה זה לא ישפיע על זמן הסריקה.", - "ExtractTrickplayImagesHelp": "תמונות טריקפליי הן דומות לתמונות פרק, פרט לכך שהן מתוחות לכל אורך התוכן ומשמשות לתצוגה מקדימה כאשר גוללים דרך וידיאו.", + "LabelExtractTrickplayDuringLibraryScanHelp": "האם ליצור תמונות Trickplay כאשר וידיאו מיובא במהלך סריקת ספרייה. אחרת, הן יחולצו במהלך המשימה המתוכננת של Trickplay. אם היצירה הוגדרה ללא חסימה זה לא ישפיע על זמן הסריקה.", + "ExtractTrickplayImagesHelp": "תמונות Trickplay דומות לתמונות פרקים, פרט לכך שהן קיימות לכל אורך התוכן ומשמשות לתצוגה מקדימה כאשר מדלגים קדימה ואחורה בווידיאו.", "LabelTileHeightHelp": "מספר מירבי של תמונות לכל אריח בכיוון אנכי.", "LabelJpegQuality": "איכות JPEG", - "LabelJpegQualityHelp": "איכות כיוו. JPEG בתמונות טריקפליי.", + "LabelJpegQualityHelp": "איכות כיווץ JPEG בתמונות Trickplay.", "LabelQscale": "דרגת איכות התמונה", "LabelVppTonemappingContrast": "עוצמת ניגודיות במיפוי גוונים של VPP", "LabelVppTonemappingContrastHelp": "הגדרת עוצמת הניגודיות במיפוי גוונים ב-VPP. הערך המומלץ הוא 1.", @@ -1888,7 +1888,7 @@ "MediaInfoBlPresentFlag": "דגל bl של דולבי ויז'ן", "LabelTonemappingMode": "מצב מיפוי גוונים", "LabelImageInterval": "משך-זמן התמונה", - "LabelImageIntervalHelp": "משך הזמן (מילישניות) בין כל תמונת טריקפליי חדשה.", + "LabelImageIntervalHelp": "משך הזמן (במילי-שניות) בין כל תמונת Trickplay חדשה.", "LabelWidthResolutions": "רזולוציות רוחב", "MediaInfoDvLevel": "רמת דולבי ויז'ן", "MediaInfoRpuPresentFlag": "דגל rpu של דולבי ויז'ן", @@ -1900,14 +1900,14 @@ "MachineTranslated": "תרגום מכונה", "ForeignPartsOnly": "כפוי/שפה זרה בלבד", "HearingImpairedShort": "HI/SDH", - "LabelExtractTrickplayDuringLibraryScan": "חילוץ תמונות טריקפליי במהלך סריקות ספרייה", + "LabelExtractTrickplayDuringLibraryScan": "חילוץ תמונות Trickplay במהלך סריקות ספרייה", "MediaInfoVideoRangeType": "סוג טווח וידיאו", "LabelIsHearingImpaired": "כתוביות לחירשים וכבדי שמיעה (SDH)", "LabelVppTonemappingBrightnessHelp": "הגדרת עוצמת בהירות במיפוי גוונים ב-VPP. הערך המומלץ הוא 16.", - "Trickplay": "טריקפליי", + "Trickplay": "Trickplay", "LabelTrickplayKeyFrameOnlyExtraction": "יצירת תמונות ממסגרות מפתח בלבד", "LabelTrickplayKeyFrameOnlyExtractionHelp": "הוצאת מסגרות המפתח בלבד תספק עיבוד מהיר בהרבה עם תזמון פחות מדויק. אם מפענח החומרה המוגדר לא תומך במצב זה, ייעשה שימוש במפענח תוכנה במקום.", - "LabelTrickplayAccelEncoding": "הפעלת האצת חומרה בקידוד MJPEG", + "LabelTrickplayAccelEncoding": "הפעלה של האצת חומרה בקידוד MJPEG", "LabelTrickplayAccelEncodingHelp": "כרגע זמין רק ב-QSV, VA-API, VideoToolbox, RKMPP, אפשרות זו לא משפיעה על שיטות האצת חומרה אחרות.", "LabelScanBehavior": "התנהגות סריקה", "NonBlockingScan": "ללא חסימה - מוסיף את הפעולה לתור, וחוזר", @@ -1915,11 +1915,11 @@ "PriorityHigh": "גבוהה", "PriorityAboveNormal": "מעל רגילה", "PriorityNormal": "רגילה", - "LabelScanBehaviorHelp": "התנהגות ברירת המחדל היא ללא חסימה, מה שיוסיף מדיה לספרייה לפני שטריקפליי מסיים. חסימה תבטיח שהקבצים של טריקפליי יווצרו לפני שהמדיה נוספת לספרייה, אך תגרום לסריקות להיות משמעותית ארוכות יותר.", + "LabelScanBehaviorHelp": "התנהגות ברירת המחדל היא ללא חסימה, מה שיוסיף מדיה לספרייה לפני שיצירת תמונות ה-Trickplay תסתיים. חסימה תבטיח שהקבצים של Trickplay ייווצרו לפני שהמדיה נוספת לספרייה, אך תגרום לסריקות להיות ארוכות יותר משמעותית.", "LabelTrickplayThreads": "חוטי FFmpeg", "LabelQscaleHelp": "דרגת האיכות של תמונות שייצאו מ-ffmpeg, כאשר האיכות הכי גבוהה היא 2 והאיכות הכי נמוכה היא 31.", "LabelTrickplayThreadsHelp": "מספר החוטים שיעברו ל-ffmpeg.", - "OptionExtractTrickplayImage": "הפעלת חילוץ תמונות של טריקפליי", + "OptionExtractTrickplayImage": "הפעלת חילוץ תמונות של Trickplay", "Anime": "אנימה", "MoviesAndShows": "סרטים וסדרות", "HeaderNextEpisode": "הפרק הבא", From e91089a3006cde1c1e837b1f45271ca92203b613 Mon Sep 17 00:00:00 2001 From: Shuhei Hayashibara Date: Tue, 20 May 2025 13:20:19 -0400 Subject: [PATCH 311/645] Translated using Weblate (Japanese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ja/ --- src/strings/ja.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/ja.json b/src/strings/ja.json index 3aceacf93..44ffb1c6f 100644 --- a/src/strings/ja.json +++ b/src/strings/ja.json @@ -750,7 +750,7 @@ "LabelFolder": "フォルダー", "LabelForgotPasswordUsernameHelp": "ユーザー名を覚えていたら入力してください。", "LabelFormat": "フォーマット", - "LabelDropImageHere": "画像を個々にドロップするか検索する。", + "LabelDropImageHere": "ここに画像をドロップするか、クリックして参照してください。", "LabelEasyPinCode": "簡単な PIN コード", "LabelManufacturerUrl": "製作社のURL", "LabelHomeScreenSectionValue": "ホームスクリーンセクション {0}", From 3ea9fea17d9e3339a75958197f5e422ee9f14592 Mon Sep 17 00:00:00 2001 From: Max Date: Tue, 20 May 2025 18:38:38 -0400 Subject: [PATCH 312/645] Fix music playback order for artists and albums --- src/components/playback/playbackmanager.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 1b5aee732..767aa7106 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -1843,7 +1843,7 @@ export class PlaybackManager { ArtistIds: firstItem.Id, Filters: 'IsNotFolder', Recursive: true, - SortBy: options.shuffle ? 'Random' : 'SortName', + SortBy: options.shuffle ? 'Random' : 'Album,ParentIndexNumber,IndexNumber,SortName', MediaTypes: 'Audio' }, queryOptions)); case 'PhotoAlbum': @@ -1924,7 +1924,11 @@ export class PlaybackManager { if (options.shuffle) { sortBy = 'Random'; } else if (firstItem.Type !== 'BoxSet') { - sortBy = 'SortName'; + if (firstItem.CollectionType === 'music' || firstItem.MediaType === 'Audio') { + sortBy = 'Album,ParentIndexNumber,IndexNumber,SortName'; + } else { + sortBy = 'SortName'; + } } return getItemsForPlayback(serverId, mergePlaybackQueries({ From 323630c4ea90726ce89dabe12b3fe9e4ab548fa5 Mon Sep 17 00:00:00 2001 From: deneille Date: Wed, 21 May 2025 00:38:41 -0400 Subject: [PATCH 313/645] hid load spinner when playback modal is closed --- src/components/dialogHelper/dialogHelper.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/components/dialogHelper/dialogHelper.js b/src/components/dialogHelper/dialogHelper.js index 56f338ca6..e8cc85609 100644 --- a/src/components/dialogHelper/dialogHelper.js +++ b/src/components/dialogHelper/dialogHelper.js @@ -3,6 +3,7 @@ import browser from '../../scripts/browser'; import layoutManager from '../layoutManager'; import inputManager from '../../scripts/inputManager'; import { toBoolean } from '../../utils/string.ts'; +import { hide } from '../loading/loading.ts'; import dom from '../../scripts/dom'; import { history } from 'RootAppRouter'; @@ -99,6 +100,8 @@ function DialogHashHandler(dlg, hash, resolve) { } removeBackdrop(dlg); + hide(); + dlg.classList.remove('opened'); if (removeScrollLockOnClose) { From cff41588d5d60b5e5f1a9408a254b8602e965fb0 Mon Sep 17 00:00:00 2001 From: nextlooper42 Date: Wed, 21 May 2025 07:14:03 -0400 Subject: [PATCH 314/645] Translated using Weblate (Slovak) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/ --- src/strings/sk.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/strings/sk.json b/src/strings/sk.json index 68fd5db41..b99c10fe6 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -47,7 +47,7 @@ "ButtonParentalControl": "Rodičovská kontrola", "ButtonPause": "Pozastaviť", "ButtonPreviousTrack": "Predchádzajúca stopa", - "ButtonQuickStartGuide": "Príručka rýchleho štartu", + "ButtonQuickStartGuide": "Sprievodca nastavením", "ButtonRefreshGuideData": "Obnoviť údaje programového sprievodcu", "ButtonRemove": "Odstrániť", "ButtonRename": "Premenovať", @@ -1698,7 +1698,7 @@ "ResolutionMatchSource": "Rovnaké ako zdroj", "SaveRecordingNFOHelp": "Uloží metadáta z EPG položiek sprievodcu spolu s médiami.", "SaveRecordingImages": "Uložiť obrázky EPG nahrávky", - "LabelDummyChapterDurationHelp": "Interval medzi fiktívnymi kapitolami. Nastavením na 0 vypnete generovanie fiktívnych kapitol. Zmena tejto hodnoty nebude mať žiadny vplyv na existujúce fiktívne kapitoly.", + "LabelDummyChapterDurationHelp": "Interval medzi fiktívnymi kapitolami v sekundách. Nastavením na 0 vypnete generovanie fiktívnych kapitol. Zmena tejto hodnoty nebude mať žiadny vplyv na existujúce fiktívne kapitoly.", "SaveRecordingNFO": "Uložiť metadáta nahrávky zo sprievodcu EPG do NFO", "SaveRecordingImagesHelp": "Uloží obrázky z EPG položiek sprievodcu spolu s médiami.", "HeaderRecordingMetadataSaving": "Metadáta nahrávok", @@ -2029,5 +2029,7 @@ "LabelGroupShowsIntoCollectionsHelp": "Seriály v kolekcii budú zobrazené ako jedna zoskupená položka v zozname seriálov.", "HeaderServerUnavailable": "Server nie je dostupný", "HeaderUpdateRequired": "Vyžaduje sa aktualizácia", - "DownloadManager": "Stiahnuté" + "DownloadManager": "Stiahnuté", + "ViewSettings": "Zobraziť nastavenia", + "MessageForgotPasswordPinReset": "Zadajte PIN kód na dokončenie obnovy hesla" } From a208ccea9d541602fcb60a622514c24b3b5ba970 Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Wed, 21 May 2025 07:33:36 -0400 Subject: [PATCH 315/645] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index 7ed489819..ab704bc34 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -269,7 +269,7 @@ "HeaderCastAndCrew": "Diễn Viên & Ê-kíp", "HeaderCancelSeries": "Huỷ Loạt Phim", "HeaderCancelRecording": "Hủy Ghi Lại", - "HeaderBranding": "Tạo Thương Hiệu", + "HeaderBranding": "Thương hiệu", "HeaderBlockItemsWithNoRating": "Khoá những mục không có thông tin đánh giá hoặc thông tin không đáng tin cậy", "HeaderAudioSettings": "Cài Đặt Âm Thanh", "HeaderAudioBooks": "Sách Nói", @@ -437,7 +437,7 @@ "HeaderSecondsValue": "{0} Giây", "HeaderSeasons": "Phần", "HeaderScenes": "Phân Cảnh", - "HeaderRunningTasks": "Những Tác Vụ Hoạt Động", + "HeaderRunningTasks": "Tác Vụ Đang Chạy", "HeaderRevisionHistory": "Lịch Sử Chỉnh Sửa", "HeaderResponseProfileHelp": "Cấu hình phản hồi là phương thức tuỳ chỉnh thông tin gửi về thiết bị phát khi phát một số loại phương tiện.", "HeaderResponseProfile": "Hồ Sơ Phản Hồi", @@ -1194,7 +1194,7 @@ "SearchForSubtitles": "Tìm kiếm phụ đề", "SearchForMissingMetadata": "Tìm kiếm dữ liệu mô tả bị thiếu", "SearchForCollectionInternetMetadata": "Tìm kiếm ảnh bìa minh họa và dữ liệu mô tả qua Internet", - "Search": "Tìm Kiếm", + "Search": "Tìm kiếm", "Screenshots": "Ảnh chụp màn hình", "Screenshot": "Ảnh chụp màn hình", "Schedule": "Lên lịch", @@ -1207,7 +1207,7 @@ "Rewind": "Tua Chậm Lại", "ResumeAt": "Tiếp tục từ {0}", "Restart": "Khởi Động Lại", - "ResetPassword": "Đặt lại mật khẩu", + "ResetPassword": "Đặt Lại Mật Khẩu", "ReplaceExistingImages": "Thay thế hình ảnh hiện có", "ReplaceAllMetadata": "Thay thế tất cả dữ liệu mô tả", "RepeatOne": "Lặp lại một lần", From 30acd068c0e3db3832385b1265ea1899be5cd824 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 22 May 2025 05:36:47 +0000 Subject: [PATCH 316/645] Update dependency @jellyfin/sdk to v0.0.0-unstable.202505220501 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index bcdf14725..e262f0c6d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202505160502", + "@jellyfin/sdk": "0.0.0-unstable.202505220501", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.11", "@mui/material": "6.4.11", @@ -4095,9 +4095,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202505160502", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202505160502.tgz", - "integrity": "sha512-Iqdf7ziGKdyIHzEWVJArYmFdyUMOf9L6VJXBsOLNHczBQsBpFrs2Zn9qyh/oVw+QT/XyFB7TZlkIM7O96eH63w==", + "version": "0.0.0-unstable.202505220501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202505220501.tgz", + "integrity": "sha512-ad+5uCpfWF4OcFzkcYRCscmkJGo7zW5H50eHRfdZYefuU5Cg321QOsDrYn7pPl+7Ji+0h97zi7KqWuIbY50MyQ==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -27773,9 +27773,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202505160502", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202505160502.tgz", - "integrity": "sha512-Iqdf7ziGKdyIHzEWVJArYmFdyUMOf9L6VJXBsOLNHczBQsBpFrs2Zn9qyh/oVw+QT/XyFB7TZlkIM7O96eH63w==", + "version": "0.0.0-unstable.202505220501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202505220501.tgz", + "integrity": "sha512-ad+5uCpfWF4OcFzkcYRCscmkJGo7zW5H50eHRfdZYefuU5Cg321QOsDrYn7pPl+7Ji+0h97zi7KqWuIbY50MyQ==", "requires": {} }, "@jellyfin/ux-web": { diff --git a/package.json b/package.json index 9b4231c6a..615036759 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202505160502", + "@jellyfin/sdk": "0.0.0-unstable.202505220501", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.11", "@mui/material": "6.4.11", From ebeb81a2359861a99f954dedcc562aca766b648d Mon Sep 17 00:00:00 2001 From: BromTeque Date: Thu, 22 May 2025 12:37:31 -0400 Subject: [PATCH 317/645] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)=20Translation:=20Jellyfin/Jellyfin=20Web=20Tr?= =?UTF-8?q?anslate-URL:=20https://translate.jellyfin.org/projects/jellyfin?= =?UTF-8?q?/jellyfin-web/nb=5FNO/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/strings/nb.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/strings/nb.json b/src/strings/nb.json index 9ccd2927f..daa22e0d7 100644 --- a/src/strings/nb.json +++ b/src/strings/nb.json @@ -55,7 +55,7 @@ "ButtonOpen": "Åpne", "ButtonParentalControl": "Foreldrekontroll", "ButtonPreviousTrack": "Forrige spor", - "ButtonQuickStartGuide": "Hurtigveiledning", + "ButtonQuickStartGuide": "Oppsettsveiledning", "ButtonRefreshGuideData": "Oppdater TV-guidedata", "ButtonRemove": "Fjern", "ButtonRename": "Endre navn", @@ -1694,7 +1694,7 @@ "LabelDummyChapterDuration": "Intervall", "HeaderRecordingMetadataSaving": "Opptak metadata", "HeaderPerformance": "Ytelse", - "LabelDummyChapterDurationHelp": "Tid mellom dummykapitler. Sett til 0 for å slå av dummykapittelgenerering. Endring av dette vil ha ingen effekt på eksiterende dummykapitler.", + "LabelDummyChapterDurationHelp": "Tid mellom dummykapitler i sekunder. Sett til 0 for å slå av dummykapittelgenerering. Endring av dette vil ha ingen effekt på eksisterende dummykapitler.", "LabelEnableAudioVbrHelp": "Variabel bithastighet tilbyr bedre forhold mellom kvalitet og gjennomsnittlig bithastighet, men kan i visse tilfeller forårsake buffering og problemer med kompatibilitet.", "LabelEnableAudioVbr": "Aktiver VBR lydenkoding", "SubtitleBlack": "Svart", @@ -2024,5 +2024,7 @@ "StreamCountExceedsLimit": "Antallet strømninger overskrider grensen", "ReadInputAtNativeFramerate": "Les inndata i opprinnelig bildefrekvens", "HeaderUpdateRequired": "Oppdatering kreves", - "ViewSettings": "Se instillinger" + "ViewSettings": "Se instillinger", + "MessageForgotPasswordPinReset": "Tast inn PIN-kode her for å fullføre tilbakestilling av passordet", + "DownloadManager": "Nedlastinger" } From b8a566b476e4d771522cdee5c7b02930ac51a61e Mon Sep 17 00:00:00 2001 From: HanaO00 Date: Thu, 22 May 2025 22:09:34 -0400 Subject: [PATCH 318/645] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 3a700a6d3..8abff338c 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1694,7 +1694,7 @@ "HeaderRecordingMetadataSaving": "Enregistrement des métadonnées", "SaveRecordingNFO": "Enregistrer les métadonnées du fournisseur dans le fichier NFO", "SaveRecordingImages": "Enregistrer les images des métadonnées du fournisseur", - "LabelDummyChapterDurationHelp": "Intervalle entre deux chapitres factices en seondes ou 0 pour désactiver la génération. Changer la valeur n’affectera pas les chapitres existants.", + "LabelDummyChapterDurationHelp": "Intervalle entre deux chapitres factices en secondes ou 0 pour désactiver la génération. Changer la valeur n’affectera pas les chapitres existants.", "LabelDummyChapterCount": "Limite", "LabelChapterImageResolution": "Résolution", "LabelChapterImageResolutionHelp": "La résolution d'image des chapitre factices. Changer la valeur n’affectera pas les chapitres existants.", From 09b0e1b677db0e54c50e1082953d388bbb674172 Mon Sep 17 00:00:00 2001 From: Chatcharin Sangbutsarakum Date: Thu, 22 May 2025 23:54:24 -0400 Subject: [PATCH 319/645] Translated using Weblate (Thai) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/th/ --- src/strings/th.json | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/src/strings/th.json b/src/strings/th.json index 483ee432c..bdd6490ea 100644 --- a/src/strings/th.json +++ b/src/strings/th.json @@ -133,7 +133,7 @@ "ButtonCast": "แคสต์ไปยังอุปกรณ์", "ButtonBack": "กลับ", "ButtonAddMediaLibrary": "เพิ่มมีเดียไลบรารี", - "BurnSubtitlesHelp": "เลือกว่าเซิร์ฟเวอร์ควรฝังคำบรรยายลงไปในวิดีโอในขณะที่แปลงรหัสวิดีโอหรือไม่ หลีกเหลี่ยงสิ่งนี้จะทำให้ประสิทธิภาพดีขึ้นอย่างมาก เลือก อัตโนมัติ เพื่อที่จะฝังคำบรรยายตามฟอร์แมต (VobSub, PGS, SUB, IDX, และอื่นๆ) และคำบรรยาย ASS หรือ SSA บางรายการ", + "BurnSubtitlesHelp": "กำหนดว่าเซิร์ฟเวอร์ควรเผาคำบรรยายลงในวิดีโอหรือไม่ การหลีกเลี่ยงการเผาคำบรรยายจะช่วยเพิ่มประสิทธิภาพได้อย่างมาก หากเลือก “อัตโนมัติ” ระบบจะเผาคำบรรยายที่เป็นภาพ (เช่น VobSub, PGS, SUB, IDX เป็นต้น) และคำบรรยายบางประเภทในรูปแบบ ASS หรือ SSA โดยอัตโนมัติ", "Auto": "อัตโนมัติ", "BirthPlaceValue": "สถานที่เกิด: {0}", "BirthLocation": "สถานที่เกิด", @@ -144,11 +144,46 @@ "Aired": "ออกอากาศ", "AlwaysPlaySubtitles": "แสดงตลอด", "AllowCollectionManagement": "อนุญาตให้ผู้ใช้นี้จัดการคอลเลกชัน", - "AllowedRemoteAddressesHelp": "คอมม่าเป็นการแบ่งเลขที่อยู่ IP หรือ การเข้า IP/netmask สำหรับโครงข่ายนั้นที่จะต้องถูกอนุญาตให้เชื่อมต่อระยะไกล ถ้าเว้นว่างไว้การเชื่อมต่อระยะไกลจะถูกอนุญาตโดยอัตโนมัติ", + "AllowedRemoteAddressesHelp": "คอมม่าเป็นการแบ่งเลขที่อยู่ IP หรือ การเข้า IP/netmask สำหรับโครงข่ายนั้นที่จะต้องถูกอนุญาตให้เชื่อมต่อระยะไกล ถ้าเว้นว่างไว้การเชื่อมต่อระยะไกลจะถูกอนุญาตโดยอัตโนมัติ", "AllowFfmpegThrottling": "กำลังเข้ารหัส", "AllowContentWithTagsHelp": "แสดงสื่อที่สอดคล้องกับ Tag เฉพาะทางอย่างน้อย 1 Tag", "AllowSubtitleManagement": "อนุญาติให้ผู้ใช้ท่านนี้แก้ไขคำบรรยายใต้วิดีโอได้", "AllowFfmpegThrottlingHelp": "เมื่อกระบวนการแปลงรหัส (transcode) หรือเปลี่ยนคอนเทนเนอร์ (remux) มีความคืบหน้าเร็วกว่าตำแหน่งที่กำลังเล่นอยู่ในปัจจุบันมากพอแล้ว ระบบจะหยุดชั่วคราวโดยอัตโนมัติ เพื่อลดการใช้ทรัพยากรของระบบ ฟีเจอร์นี้มีประโยชน์มากที่สุดเมื่อรับชมวิดีโอโดยไม่ได้เลื่อนตำแหน่งบ่อยๆ แต่หากพบปัญหาในการเล่น ให้ปิดฟีเจอร์นี้ออก", "AllowFmp4TranscodingContainerHelp": "อนุญาตให้ใช้คอนเทนเนอร์แบบ fMP4 ในการแปลงรหัสสำหรับจูนเนอร์นี้ เพื่อให้สามารถเล่นเนื้อหาที่เข้ารหัสแบบ HEVC และ HDR ได้ แต่ไม่ใช่จูนเนอร์ทุกตัวที่จะรองรับคอนเทนเนอร์ประเภทนี้ หากพบปัญหาในการเล่นเนื้อหา ให้ปิดฟีเจอร์นี้ออก", - "AirPlay": "แอร์เพลย์" + "AirPlay": "แอร์เพลย์", + "AllowHWTranscodingHelp": "อนุญาตให้จูนเนอร์แปลงสตรีมแบบเรียลไทม์ ซึ่งอาจช่วยลดภาระการแปลงสัญญาณที่ต้องทำโดยเซิร์ฟเวอร์ลงได้", + "Audio": "เสียง", + "AskAdminToCreateLibrary": "โปรดติดต่อผู้ดูแลระบบเพื่อสร้างไลบรารี", + "AllowOnTheFlySubtitleExtractionHelp": "สามารถดึงคำบรรยายที่ฝังอยู่ในวิดีโอออกมาและส่งให้ผู้ใช้ในรูปแบบข้อความธรรมดา เพื่อช่วยหลีกเลี่ยงการแปลงสัญญาณวิดีโอ อย่างไรก็ตาม บนอุปกรณ์บางระบบกระบวนการนี้อาจใช้เวลานานและทำให้การเล่นวิดีโอสะดุดขณะดึงคำบรรยาย หากปิดการทำงานนี้ คำบรรยายที่ฝังจะถูกเผารวมเข้ากับวิดีโอในระหว่างการแปลงสัญญาณ เมื่ออุปกรณ์ผู้ใช้ไม่รองรับคำบรรยายโดยตรง", + "AllowTonemappingHelp": "การทำ Tone-mapping สามารถแปลงช่วงไดนามิกของวิดีโอจาก HDR เป็น SDR โดยยังคงรักษารายละเอียดของภาพและสีไว้ ซึ่งเป็นข้อมูลสำคัญในการแสดงภาพให้ใกล้เคียงกับฉากต้นฉบับ ปัจจุบันรองรับเฉพาะวิดีโอแบบ HDR10, HLG และ DoVi ที่เป็นแบบ 10 บิตเท่านั้น และจำเป็นต้องมีระบบรันไทม์ GPGPU ที่รองรับในการใช้งานฟีเจอร์นี้", + "AlwaysPlaySubtitlesHelp": "คำบรรยายที่ตรงกับภาษาที่ตั้งค่าไว้จะถูกโหลดโดยไม่คำนึงถึงภาษาของเสียงพูดที่อยู่ในวิดีโอ", + "AlwaysRemuxMp3AudioFilesHelp": "หากคุณมีไฟล์ที่เบราว์เซอร์คำนวณเวลาไม่ถูกต้อง ให้เปิดใช้งานตัวเลือกนี้เพื่อใช้เป็นวิธีแก้ไขชั่วคราว", + "AuthProviderHelp": "เลือกผู้ให้บริการยืนยันตัวตนที่จะใช้ในการตรวจสอบรหัสผ่านของผู้ใช้นี้", + "Browse": "เรียกดู", + "AsManyAsPossible": "ให้ได้มากที่สุด", + "ButtonActivate": "เปิดใช้งาน", + "AllowOnTheFlySubtitleExtraction": "อนุญาตให้แตกไฟล์คำบรรยายแบบเรียลไทม์", + "Ascending": "เรียงจากน้อยไปมาก", + "BackdropScreensaver": "ภาพพื้นหลังสกรีนเซฟเวอร์", + "Bold": "ตัวหนา", + "LabelTitle": "ชื่อเรื่อง", + "LabelTonemappingAlgorithm": "เลือกอัลกอริทึม Tone Mapping ที่ต้องการใช้งาน", + "Author": "ผู้เขียน", + "BlockContentWithTagsHelp": "ซ่อนสื่อที่มีแท็กอย่างน้อยหนึ่งรายการตามที่ระบุไว้", + "LabelTag": "แท็ก", + "LabelThrottleDelaySecondsHelp": "เวลาในหน่วยวินาทีหลังจากที่ตัวแปลงสัญญาณจะถูกจำกัดความเร็ว ค่านี้ต้องมากพอเพื่อให้ฝั่งผู้ใช้สามารถรักษาบัฟเฟอร์ให้เพียงพอ สามารถใช้งานได้เฉพาะเมื่อมีการเปิดใช้งานการจำกัดความเร็วเท่านั้น", + "LabelTextColor": "สีตัวอักษร", + "LabelTextBackgroundColor": "สีของพื้นหลังตัวอักษร", + "LabelSegmentKeepSeconds": "เวลาที่จะเก็บข้อมูลแต่ละเซ็กเมนต์ไว้", + "LabelSegmentKeepSecondsHelp": "ระยะเวลาในหน่วยวินาที ที่จะเก็บเซ็กเมนต์ไว้หลังจากที่ถูกดาวน์โหลดโดยผู้ใช้ ใช้งานได้เฉพาะเมื่อมีการเปิดใช้งานการลบเซ็กเมนต์เท่านั้น", + "AlwaysRemuxFlacAudioFilesHelp": "หากคุณมีไฟล์ที่เบราว์เซอร์ไม่สามารถเล่นได้หรือคำนวณเวลาไม่ถูกต้อง ให้เปิดใช้งานตัวเลือกนี้เพื่อใช้เป็นวิธีแก้ไขชั่วคราว", + "AllowTonemappingSoftwareHelp": "การทำ Tone-mapping สามารถแปลงช่วงไดนามิกของวิดีโอจาก HDR เป็น SDR โดยยังคงรักษารายละเอียดของภาพและสีไว้ ซึ่งเป็นข้อมูลสำคัญในการแสดงผลให้ใกล้เคียงกับฉากจริงมากที่สุด ปัจจุบันรองรับเฉพาะวิดีโอแบบ 10 บิตในรูปแบบ HDR10, HLG และ DoVi เท่านั้น", + "LabelSystem": "ระบบ", + "AutoSubtitleStylingHelp": "โหมดนี้จะสลับการแสดงผลคำบรรยายระหว่างรูปแบบดั้งเดิมของอุปกรณ์และรูปแบบที่กำหนดเองโดยอัตโนมัติ ตามประเภทของอุปกรณ์ที่ใช้งาน", + "LabelTextWeight": "ความหนาตัวอักษร", + "LabelTheme": "ธีม", + "LabelTime": "เวลา", + "LabelTimeLimitHours": "จำกัดเวลา (ชั่วโมง)", + "LabelTextSize": "ขนาดตัวอักษร", + "Anime": "อนิเมะ" } From 15b7847c2ede2b7a64b021a2db3fba8c372f3c0c Mon Sep 17 00:00:00 2001 From: Pere Date: Fri, 23 May 2025 02:27:58 -0400 Subject: [PATCH 320/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index db3789058..c04d94cb0 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -35,7 +35,7 @@ "ButtonParentalControl": "Control parental", "ButtonPause": "Pausa", "ButtonPreviousTrack": "Pista anterior", - "ButtonQuickStartGuide": "Guia d'inici ràpid", + "ButtonQuickStartGuide": "Guia de configuració", "ButtonRefreshGuideData": "Actualitza les dades de la guia", "ButtonRemove": "Elimina", "ButtonResetEasyPassword": "Restabliu el codi Easy PIN", @@ -1694,7 +1694,7 @@ "HeaderDummyChapter": "Imatges dels capítols", "LabelDummyChapterCount": "Límit", "LabelDummyChapterDuration": "Interval", - "LabelDummyChapterDurationHelp": "L'interval entre capítols ficticis. Ajusta-ho a 0 per a desactivar la generació de capítols ficticis. Canviar-ho no afectarà els capítols ficticis existents.", + "LabelDummyChapterDurationHelp": "L'interval entre capítols ficticis en segons. Ajusta-ho a 0 per a desactivar la generació de capítols ficticis. Canviar-ho no afectarà els capítols ficticis existents.", "LabelChapterImageResolution": "Resolució", "LabelChapterImageResolutionHelp": "La resolució de les imatges del capítol extretes. Canviar-ho no afectarà els capítols ficticis existents.", "ResolutionMatchSource": "Coincidir amb la font", @@ -2024,5 +2024,8 @@ "LimitSegmentLength": "Utilitzar segments HLS escurçats", "LimitSegmentLengthHelp": "Activar aquesta opció pot ajudar a prevenir que el reproductor HLS es pengi durant la cerca en alguns dispositius, com televisors webOS.", "HeaderServerUnavailable": "El Servidor no està disponible", - "HeaderUpdateRequired": "Cal una actualització" + "HeaderUpdateRequired": "Cal una actualització", + "ViewSettings": "Configuració de vista", + "DownloadManager": "Descarregues", + "MessageForgotPasswordPinReset": "Introdueix PIN aquí per acabar el Restabliment de contrasenya" } From d218368b50ea744503e7ac4d3f8bc2ba6dad5d85 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sat, 8 Mar 2025 12:33:28 +0300 Subject: [PATCH 321/645] Enhance skip button design --- src/components/playback/skipbutton.scss | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/components/playback/skipbutton.scss b/src/components/playback/skipbutton.scss index 63eb13b9c..86540c684 100644 --- a/src/components/playback/skipbutton.scss +++ b/src/components/playback/skipbutton.scss @@ -2,7 +2,7 @@ position: fixed; left: 0; right: 0; - bottom: 18%; + bottom: 8rem; pointer-events: none; z-index: 10000; } @@ -11,26 +11,21 @@ display: flex; align-items: center; margin-left: auto; - margin-right: 16%; + margin-right: 6rem; + z-index: 10000; padding: 12px 20px; - color: black; + background-color: #303030; + color: rgba(255, 255, 255, 0.87); border: none; - border-radius: 100px; + border-radius: 0.2em; font-weight: bold; font-size: 1.2em; transition: opacity 200ms ease-out; gap: 3px; - box-shadow: 7px 6px 15px -14px rgba(0, 0, 0, 0.65); cursor: pointer; pointer-events: auto; } -@media (orientation: landscape) and (max-height: 500px) { - .skip-button { - bottom: 27%; - } -} - .no-transition { transition: none; } From e2a22830520fcbb045a6817b669fff2a1cee678f Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Fri, 16 May 2025 12:54:58 -0400 Subject: [PATCH 322/645] Migrate mui themes to css vars --- src/hooks/useUserTheme.ts | 6 +- src/themes/UserThemeProvider.tsx | 28 ++++--- src/themes/appletv/index.ts | 27 ------- src/themes/blueradiance/index.ts | 16 ---- src/themes/dark/index.ts | 7 -- src/themes/defaults.ts | 11 ++- src/themes/light/index.ts | 30 ------- src/themes/purplehaze/index.ts | 22 ----- src/themes/themes.ts | 135 ++++++++++++++++++++++++------- src/themes/wmc/index.ts | 16 ---- 10 files changed, 135 insertions(+), 163 deletions(-) delete mode 100644 src/themes/appletv/index.ts delete mode 100644 src/themes/blueradiance/index.ts delete mode 100644 src/themes/dark/index.ts delete mode 100644 src/themes/light/index.ts delete mode 100644 src/themes/purplehaze/index.ts delete mode 100644 src/themes/wmc/index.ts diff --git a/src/hooks/useUserTheme.ts b/src/hooks/useUserTheme.ts index 29593ddca..2d60c173c 100644 --- a/src/hooks/useUserTheme.ts +++ b/src/hooks/useUserTheme.ts @@ -1,12 +1,14 @@ import { useThemes } from './useThemes'; import { useUserSettings } from './useUserSettings'; +const FALLBACK_THEME_ID = 'dark'; + export function useUserTheme() { const { theme, dashboardTheme } = useUserSettings(); const { defaultTheme } = useThemes(); return { - theme: theme || defaultTheme?.id, - dashboardTheme: dashboardTheme || defaultTheme?.id + theme: theme || defaultTheme?.id || FALLBACK_THEME_ID, + dashboardTheme: dashboardTheme || defaultTheme?.id || FALLBACK_THEME_ID }; } diff --git a/src/themes/UserThemeProvider.tsx b/src/themes/UserThemeProvider.tsx index bdffd2748..e3ea9eb17 100644 --- a/src/themes/UserThemeProvider.tsx +++ b/src/themes/UserThemeProvider.tsx @@ -1,11 +1,11 @@ -import { ThemeProvider } from '@mui/material/styles'; +import { type SupportedColorScheme, ThemeProvider, useColorScheme } from '@mui/material/styles'; import React, { type FC, type PropsWithChildren, useState, useEffect } from 'react'; import { useLocation } from 'react-router-dom'; import { DASHBOARD_APP_PATHS } from 'apps/dashboard/routes/routes'; import { useUserTheme } from 'hooks/useUserTheme'; -import { DEFAULT_THEME, getTheme } from './themes'; +import appTheme, { COLOR_SCHEMES } from './themes'; const isDashboardThemePage = (pathname: string) => [ // NOTE: The metadata manager doesn't seem to use the dashboard theme @@ -13,10 +13,9 @@ const isDashboardThemePage = (pathname: string) => [ DASHBOARD_APP_PATHS.PluginConfig ].some(path => pathname.startsWith(`/${path}`)); -const UserThemeProvider: FC> = ({ children }) => { +const ColorSchemeSwitcher: FC = () => { const [ isDashboard, setIsDashboard ] = useState(false); - const [ muiTheme, setMuiTheme ] = useState(DEFAULT_THEME); - + const { setColorScheme, setMode } = useColorScheme(); const location = useLocation(); const { theme, dashboardTheme } = useUserTheme(); @@ -26,15 +25,20 @@ const UserThemeProvider: FC> = ({ children }) => { }, [ location.pathname ]); useEffect(() => { - if (isDashboard) { - setMuiTheme(getTheme(dashboardTheme)); - } else { - setMuiTheme(getTheme(theme)); - } - }, [ dashboardTheme, isDashboard, theme ]); + const currentSchemeName = (isDashboard ? dashboardTheme : theme) as SupportedColorScheme; + const currentScheme = COLOR_SCHEMES[currentSchemeName]; + setColorScheme(currentSchemeName); + setMode(currentScheme.palette?.mode || 'dark'); + }, [ dashboardTheme, isDashboard, setColorScheme, setMode, theme ]); + + return null; +}; + +const UserThemeProvider: FC> = ({ children }) => { return ( - + + {children} ); diff --git a/src/themes/appletv/index.ts b/src/themes/appletv/index.ts deleted file mode 100644 index 9acba52cf..000000000 --- a/src/themes/appletv/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -import createTheme, { type ThemeOptions } from '@mui/material/styles/createTheme'; -import merge from 'lodash-es/merge'; - -import { DEFAULT_THEME_OPTIONS } from 'themes/defaults'; - -const themeOptions: ThemeOptions = { - palette: { - mode: 'light', - background: { - default: '#d5e9f2', - paper: '#fff' - } - }, - components: { - MuiAppBar: { - styleOverrides: { - colorPrimary: { - backgroundColor: '#bcbcbc' - } - } - } - } -}; - -const theme = createTheme(merge({}, DEFAULT_THEME_OPTIONS, themeOptions)); - -export default theme; diff --git a/src/themes/blueradiance/index.ts b/src/themes/blueradiance/index.ts deleted file mode 100644 index 2b2634309..000000000 --- a/src/themes/blueradiance/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import createTheme, { type ThemeOptions } from '@mui/material/styles/createTheme'; -import merge from 'lodash-es/merge'; - -import { DEFAULT_THEME_OPTIONS } from 'themes/defaults'; - -const options: ThemeOptions = { - palette: { - background: { - paper: '#011432' - } - } -}; - -const theme = createTheme(merge({}, DEFAULT_THEME_OPTIONS, options)); - -export default theme; diff --git a/src/themes/dark/index.ts b/src/themes/dark/index.ts deleted file mode 100644 index 71fcaa425..000000000 --- a/src/themes/dark/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import createTheme from '@mui/material/styles/createTheme'; - -import { DEFAULT_THEME_OPTIONS } from 'themes/defaults'; - -const theme = createTheme(DEFAULT_THEME_OPTIONS); - -export default theme; diff --git a/src/themes/defaults.ts b/src/themes/defaults.ts index 7f92f0c4b..5150ec003 100644 --- a/src/themes/defaults.ts +++ b/src/themes/defaults.ts @@ -1,8 +1,9 @@ -import type { ThemeOptions } from '@mui/material/styles/createTheme'; +import type { ColorSystemOptions, ThemeOptions } from '@mui/material/styles'; const LIST_ICON_WIDTH = 36; -export const DEFAULT_THEME_OPTIONS: ThemeOptions = { +/** The default "Dark" color scheme. */ +export const DEFAULT_COLOR_SCHEME: ColorSystemOptions = { palette: { mode: 'dark', primary: { @@ -24,7 +25,11 @@ export const DEFAULT_THEME_OPTIONS: ThemeOptions = { error: { main: '#cb272a' // Red color } - }, + } +}; + +/** The default customizations to the default MUI theme. */ +export const DEFAULT_THEME_OPTIONS: ThemeOptions = { typography: { fontFamily: '"Noto Sans", sans-serif', button: { diff --git a/src/themes/light/index.ts b/src/themes/light/index.ts deleted file mode 100644 index f6a84e9bd..000000000 --- a/src/themes/light/index.ts +++ /dev/null @@ -1,30 +0,0 @@ -import createTheme, { type ThemeOptions } from '@mui/material/styles/createTheme'; -import merge from 'lodash-es/merge'; - -import { DEFAULT_THEME_OPTIONS } from 'themes/defaults'; - -const options: ThemeOptions = { - palette: { - mode: 'light', - background: { - default: '#f2f2f2', - // NOTE: The original theme uses #303030 for the drawer and app bar but we would need the drawer to use - // dark mode for a color that dark to work properly which would require a separate ThemeProvider just for - // the drawer... which is not worth the trouble in my opinion - paper: '#e8e8e8' - } - }, - components: { - MuiAppBar: { - styleOverrides: { - colorPrimary: { - backgroundColor: '#e8e8e8' - } - } - } - } -}; - -const theme = createTheme(merge({}, DEFAULT_THEME_OPTIONS, options)); - -export default theme; diff --git a/src/themes/purplehaze/index.ts b/src/themes/purplehaze/index.ts deleted file mode 100644 index 407178422..000000000 --- a/src/themes/purplehaze/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -import createTheme, { type ThemeOptions } from '@mui/material/styles/createTheme'; -import merge from 'lodash-es/merge'; - -import { DEFAULT_THEME_OPTIONS } from 'themes/defaults'; - -const options: ThemeOptions = { - palette: { - background: { - paper: '#000420' - }, - primary: { - main: '#48c3c8' - }, - secondary: { - main: '#ff77f1' - } - } -}; - -const theme = createTheme(merge({}, DEFAULT_THEME_OPTIONS, options)); - -export default theme; diff --git a/src/themes/themes.ts b/src/themes/themes.ts index b5ad17f98..d6780dfda 100644 --- a/src/themes/themes.ts +++ b/src/themes/themes.ts @@ -1,13 +1,17 @@ -import { type Theme } from '@mui/material/styles'; +import { type ColorSystemOptions, createTheme, extendTheme } from '@mui/material/styles'; +import merge from 'lodash-es/merge'; -import appletv from './appletv'; -import blueradiance from './blueradiance'; -import dark from './dark'; -import light from './light'; -import purplehaze from './purplehaze'; -import wmc from './wmc'; +import { DEFAULT_COLOR_SCHEME, DEFAULT_THEME_OPTIONS } from './defaults'; +/** Extend MUI types to include our customizations. */ declare module '@mui/material/styles' { + interface ColorSchemeOverrides { + appletv: true; + blueradiance: true; + purplehaze: true; + wmc: true; + } + interface Palette { starIcon: Palette['primary']; } @@ -17,32 +21,107 @@ declare module '@mui/material/styles' { } } -const ALL_THEMES = { +/** The default built-in MUI theme. */ +const defaultMuiTheme = extendTheme({ + // @ts-expect-error The default theme does not include our custom color schemes + colorSchemes: { dark: true, light: true } +}); + +/** + * Default color schemes ('dark' or 'light') will automatically be merged with MUI's corresponding default color + * scheme. For custom schemes, we need to merge these manually. + */ +const buildCustomColorScheme = (options: ColorSystemOptions) => merge( + {}, + options.palette?.mode === 'light' ? defaultMuiTheme.colorSchemes.light : defaultMuiTheme.colorSchemes.dark, + DEFAULT_COLOR_SCHEME, + options +); + +/** The Apple TV inspired color scheme. */ +const appletv = buildCustomColorScheme({ + palette: { + mode: 'light', + background: { + default: '#d5e9f2', + paper: '#fff' + }, + AppBar: { + defaultBg: '#bcbcbc' + } + } +}); + +/** The "Blue Radiance" color scheme. */ +const blueradiance = buildCustomColorScheme({ + palette: { + background: { + paper: '#011432' + } + } +}); + +/** The "Light" color scheme. */ +const light = merge({}, DEFAULT_COLOR_SCHEME, { + palette: { + mode: 'light', + background: { + default: '#f2f2f2', + // NOTE: The original theme uses #303030 for the drawer and app bar but we would need the drawer to use + // dark mode for a color that dark to work properly which would require a separate ThemeProvider just for + // the drawer... which is not worth the trouble in my opinion + paper: '#e8e8e8' + }, + AppBar: { + defaultBg: '#e8e8e8' + } + } +}); + +/** The "Purple Haze" color scheme. */ +const purplehaze = buildCustomColorScheme({ + palette: { + background: { + paper: '#000420' + }, + primary: { + main: '#48c3c8' + }, + secondary: { + main: '#ff77f1' + } + } +}); + +/** The Windows Media Center inspired color scheme. */ +const wmc = buildCustomColorScheme({ + palette: { + background: { + paper: '#0c2450' + } + } +}); + +/** All color scheme variants in the app. */ +export const COLOR_SCHEMES = { appletv, blueradiance, - dark, + dark: DEFAULT_COLOR_SCHEME, light, purplehaze, wmc }; -/** The default theme if a user has not selected a preferred theme. */ -export const DEFAULT_THEME = dark; +/** The default theme containing all color scheme variants. */ +const DEFAULT_THEME = createTheme({ + cssVariables: { + cssVarPrefix: 'jf', + colorSchemeSelector: 'data', + disableCssColorScheme: true + }, + defaultColorScheme: 'dark', + ...DEFAULT_THEME_OPTIONS, + colorSchemes: COLOR_SCHEMES +}); -/** - * Gets a MUI Theme by its string id. Returns the default theme if no matching theme is found. - */ -export function getTheme(id?: string): Theme { - if (!id) { - console.info('[getTheme] no theme id; returning default theme'); - return DEFAULT_THEME; - } - - console.info('[getTheme] getting theme "%s"', id); - if (Object.keys(ALL_THEMES).includes(id)) { - return ALL_THEMES[id as keyof typeof ALL_THEMES]; - } - - console.warn('[getTheme] theme "%s" not found; returning default theme', id); - return DEFAULT_THEME; -} +export default DEFAULT_THEME; diff --git a/src/themes/wmc/index.ts b/src/themes/wmc/index.ts deleted file mode 100644 index 105ac10d6..000000000 --- a/src/themes/wmc/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import createTheme, { type ThemeOptions } from '@mui/material/styles/createTheme'; -import merge from 'lodash-es/merge'; - -import { DEFAULT_THEME_OPTIONS } from 'themes/defaults'; - -const options: ThemeOptions = { - palette: { - background: { - paper: '#0c2450' - } - } -}; - -const theme = createTheme(merge({}, DEFAULT_THEME_OPTIONS, options)); - -export default theme; From 8fc680f106159326f2bfca0c5d16bad7d8e32109 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Mon, 19 May 2025 11:07:08 -0400 Subject: [PATCH 323/645] Fix AppBar background colors --- src/components/ElevationScroll.tsx | 2 +- src/themes/themes.ts | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/components/ElevationScroll.tsx b/src/components/ElevationScroll.tsx index acbc07bae..920140c42 100644 --- a/src/components/ElevationScroll.tsx +++ b/src/components/ElevationScroll.tsx @@ -13,7 +13,7 @@ const ElevationScroll = ({ children, elevate = false }: { children: ReactElement const isElevated = elevate || trigger; return React.cloneElement(children, { - color: isElevated ? 'primary' : 'transparent', + color: isElevated ? 'default' : 'transparent', elevation: isElevated ? 4 : 0 }); }; diff --git a/src/themes/themes.ts b/src/themes/themes.ts index d6780dfda..edf16a9ac 100644 --- a/src/themes/themes.ts +++ b/src/themes/themes.ts @@ -57,6 +57,9 @@ const blueradiance = buildCustomColorScheme({ palette: { background: { paper: '#011432' + }, + AppBar: { + defaultBg: '#011432' } } }); @@ -89,6 +92,9 @@ const purplehaze = buildCustomColorScheme({ }, secondary: { main: '#ff77f1' + }, + AppBar: { + defaultBg: '#000420' } } }); @@ -98,6 +104,9 @@ const wmc = buildCustomColorScheme({ palette: { background: { paper: '#0c2450' + }, + AppBar: { + defaultBg: '#0c2450' } } }); From 27e7847a3fbc93146344d20ec58cbff0bd39dd1e Mon Sep 17 00:00:00 2001 From: muqtda Date: Sat, 24 May 2025 16:05:25 -0400 Subject: [PATCH 324/645] Translated using Weblate (Arabic) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ar/ --- src/strings/ar.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/ar.json b/src/strings/ar.json index 0177bae62..f3d43d851 100644 --- a/src/strings/ar.json +++ b/src/strings/ar.json @@ -2016,5 +2016,7 @@ "Penciller": "القلم", "HeaderUpdateRequired": "مطلوب تحديث", "SubtitleCyan": "سماوي", - "SubtitleMagenta": "أرجواني" + "SubtitleMagenta": "أرجواني", + "DownloadManager": "التنزيلات", + "MessageForgotPasswordPinReset": "اكتب رمز قفل البرنامج لانهاء عملية تغيير كلمة المرور" } From 600ceeef943462197c4b20af5f177c3b3cde3768 Mon Sep 17 00:00:00 2001 From: Joan Nualart Date: Sat, 24 May 2025 15:09:07 -0400 Subject: [PATCH 325/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index c04d94cb0..9d9338f3e 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -1929,7 +1929,7 @@ "LabelDuration": "Duració", "LabelDropLyricsHere": "Arrossega i deixa anar les lletres aquí, o fes clic aquí per cercar-les.", "AllowFmp4TranscodingContainerHelp": "Permet el contenidor de transcodificació fMP4 per a aquest sintonintzador, per habilitar continguts HEVC i HDR. No tots els sintonitzadors són compatibles amb aquest contenidor. Desactiva-ho si experimentes problemes de reproducció.", - "AllowStreamSharingHelp": "Permet que Jellyfin dupliqui el flux mpegts del sintonitzador i comparteixi aquest flux duplicat amb els seus clients. Això és útil quan el sintonitzador té un límit de recompte total de reproduccions, però també pot causar problemes de reproducció.", + "AllowStreamSharingHelp": "Permet que Jellyfin dupliqui el flux mpegts del sintonitzador i comparteixi aquest flux duplicat amb els seus clients. Això és útil quan el sintonitzador té un límit en la quantitat total de reproduccions, però també pot causar problemes de reproducció.", "LabelCustomTagDelimiters": "Limitador d'etiquetes personalitzat", "Anime": "Anime", "DisableVbrAudioEncodingHelp": "Evita que el servidor codifiqui àudio en VBR per a aquest client.", @@ -1973,8 +1973,8 @@ "LyricDownloadersHelp": "Activa i classifica els descarregadors de lletres preferits en ordre de prioritat.", "MessageSplitVersionsError": "S'ha produït un error separant les versions", "LabelAllowStreamSharing": "Permet la reproducció compartida", - "AlwaysBurnInSubtitleWhenTranscoding": "Sempre gravar els subtítols al transcodificar", - "AlwaysBurnInSubtitleWhenTranscodingHelp": "Gravar tots els subtítols quan la transcodificació s'activi. Això assegura la sincronització dels subtítols després de la transcodificació, a canvi d'una menor velocitat de transcodificació.", + "AlwaysBurnInSubtitleWhenTranscoding": "Sempre incorporar els subtítols al transcodificar", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Incorporar tots els subtítols quan s'activi la transcodificació. Això assegura la sincronització dels subtítols després de la transcodificació, a canvi d'una menor velocitat de transcodificació.", "HeaderMediaSegmentActions": "Accions dels segments dels mitjans", "LabelMediaSegmentsType": "{0} Segments", "PreferNonstandardArtistsTag": "Preferir l'etiqueta ARTISTS si estan disponibles", From 3ce609649dee4ec0a36e160c76094a6d92239efb Mon Sep 17 00:00:00 2001 From: Gallyam Biktashev Date: Sat, 24 May 2025 16:00:13 -0400 Subject: [PATCH 326/645] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index a04123e81..e44d1978f 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -2029,7 +2029,7 @@ "LimitSegmentLengthHelp": "Включение этой опции может помочь предотвратить зависание HLS-плеера во время перемотки на некоторых устройствах, например, на телевизорах с webOS.", "HeaderServerUnavailable": "Сервер недоступен", "HeaderUpdateRequired": "Требуется обновление", - "ViewSettings": "Настройки видов", + "ViewSettings": "Показать параметры", "DownloadManager": "Загрузки", "MessageForgotPasswordPinReset": "Введите PIN-код для завершения сброса пароля" } From fd3c7814f065aa73ee1f2bd53277bf73a20d3df9 Mon Sep 17 00:00:00 2001 From: Gallyam Biktashev Date: Sat, 24 May 2025 17:31:48 -0400 Subject: [PATCH 327/645] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index e44d1978f..cb6c3b511 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -1742,7 +1742,7 @@ "LogLevel.Critical": "Критично", "LogLevel.None": "Ничего", "HeaderEpisodesStatus": "Статус эпизодов", - "LabelEnableLUFSScanHelp": "Клиенты могут нормализировать воспроизведения звука, чтобы обеспечить одинаковую громкость в разных треках. Сканированния библеотек займет больше времени и ресурсов.", + "LabelEnableLUFSScanHelp": "Клиенты могут нормализовывать звук для обеспечения одинаковой громкости в разных треках. Сканирования библиотеки будут занимать больше времени и ресурсов.", "LabelLevel": "Уровень", "LogLevel.Debug": "Отладка", "MessageRepositoryInstallDisclaimer": "ПРЕДУПРЕЖДЕНИЕ: Установка стороннего репозитория плагинов несет определенные риски. Он может содержать нестабильный или вредоносный код и может изменяться в любое время. Устанавливайте репозитории только от авторов, которым вы доверяете.", @@ -1950,14 +1950,14 @@ "MessageSplitVersionsError": "Произошла ошибка во время разделения версий", "LibraryInvalidItemIdError": "Библиотека находится в неверном состоянии и не может быть отредактирована. Возможно, путь в базе данных не соответствует пути на файловой системе.", "MessageCancelSeriesTimerError": "Произошла ошибка во время отмены таймера сериала", - "UseCustomTagDelimiters": "Использовать пользовательский сепаратор тэгов", + "UseCustomTagDelimiters": "Использовать пользовательский разделитель тегов", "LabelQsvDevice": "QSV Устройство", "LabelQsvDeviceHelp": "Укажите устройство для Intel QSV на системе с несколькими GPU. На Linux это узел рендеринга, например, /dev/dri/renderD128. На Windows это индекс устройства, начинающийся с 0. Оставьте пустым, если не уверены в том, что делаете.", "LabelLyricDownloaders": "Загрузчики слов песен", "LabelAudioTagSettings": "Настройки аудио тэгов", "LabelCustomTagDelimiters": "Пользовательский разделитель тегов", "LabelDelimiterWhitelist": "Белый список разделителей", - "LabelDelimiterWhitelistHelp": "Элементы, которые будут при разделении тэгов. Один элемент на строку.", + "LabelDelimiterWhitelistHelp": "Элементы, которые будут исключены из разделения тегов. Один элемент на строку.", "PreferNonstandardArtistsTag": "Преподчитать тэг ARTISTS при наличии", "UseCustomTagDelimitersHelp": "Разделять тэги исполнителя/жанра используя пользовательские символы.", "LabelSaveTrickplayLocallyHelp": "Сохранение изображений trickplay в папки медиа поместит их рядом с вашими медиа файлами для удобства миграции и доступа.", From c18be02ba6c93a219e80cfdbab0098d305484321 Mon Sep 17 00:00:00 2001 From: Joan Nualart Date: Sat, 24 May 2025 20:12:16 -0400 Subject: [PATCH 328/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 9d9338f3e..28f20259e 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -1735,7 +1735,7 @@ "AllowSegmentDeletion": "Suprimeix segments", "AllowSegmentDeletionHelp": "Suprimeix els segments antics després que el client els hagi descarregat. Això evita haver d'emmagatzemar tot el fitxer transcodificat al disc. Desactiva-ho si tens problemes de reproducció.", "LabelThrottleDelaySeconds": "Acceleració després de", - "LabelThrottleDelaySecondsHelp": "Temps, en segons, després del qual s'accelerarà el transcodificador. Ha de ser prou gran per a que el client mantingui una memòria intermèdia saludable. Només funciona si l'acceleració està habilitada.", + "LabelThrottleDelaySecondsHelp": "Temps en segons, després del qual s'accelerarà el transcodificador. La durada ha de ser suficient per a que el client mantingui una memòria intermèdia saludable. Només funciona si l'acceleració està habilitada.", "LabelSegmentKeepSeconds": "Temps per mantenir els segments", "LabelIsHearingImpaired": "Per a persones amb discapacitat auditiva (SDH)", "LogLevel.Warning": "Advertència", From 2f811a1066ee8082cf4f2c6718a1ebc0127a7d34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnau=20Galofr=C3=A9?= Date: Sun, 25 May 2025 11:51:50 -0400 Subject: [PATCH 329/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 28f20259e..7ae3ab780 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -37,16 +37,16 @@ "ButtonPreviousTrack": "Pista anterior", "ButtonQuickStartGuide": "Guia de configuració", "ButtonRefreshGuideData": "Actualitza les dades de la guia", - "ButtonRemove": "Elimina", + "ButtonRemove": "Eliminar", "ButtonResetEasyPassword": "Restabliu el codi Easy PIN", "ButtonResume": "Reprèn", - "ButtonSelectDirectory": "Selecciona el directori", - "ButtonSend": "Envia", - "ButtonShutdown": "Atura", + "ButtonSelectDirectory": "Seleccionar el directori", + "ButtonSend": "Enviar", + "ButtonShutdown": "Apagar", "ButtonSignIn": "Iniciar sessió", "ButtonSignOut": "Tancar sessió", - "ButtonStop": "Atura", - "ButtonSubmit": "Envia", + "ButtonStop": "Aturar", + "ButtonSubmit": "Enviar", "ButtonTrailer": "Tràiler", "CancelRecording": "Cancel·la enregistrament", "CancelSeries": "Cancel·la sèrie", @@ -599,7 +599,7 @@ "ButtonUninstall": "Desinstal·lar", "ButtonSplit": "Dividir", "ButtonStart": "Començar", - "ButtonSelectView": "Selecciona la vista", + "ButtonSelectView": "Seleccionar la vista", "ButtonScanAllLibraries": "Escanejar totes les biblioteques", "ButtonRevoke": "Revocar", "ButtonRename": "Canviar el nom", @@ -2026,6 +2026,6 @@ "HeaderServerUnavailable": "El Servidor no està disponible", "HeaderUpdateRequired": "Cal una actualització", "ViewSettings": "Configuració de vista", - "DownloadManager": "Descarregues", - "MessageForgotPasswordPinReset": "Introdueix PIN aquí per acabar el Restabliment de contrasenya" + "DownloadManager": "Descàrregues", + "MessageForgotPasswordPinReset": "Introdueix el PIN aquí per acabar el Restabliment de contrasenya" } From 1948f048795b33124019270e5ed1adf2f69bf986 Mon Sep 17 00:00:00 2001 From: Tal Sarid Date: Mon, 26 May 2025 02:06:34 -0400 Subject: [PATCH 330/645] Translated using Weblate (Hebrew) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/ --- src/strings/he.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/he.json b/src/strings/he.json index 08b6830f9..3afe3a596 100644 --- a/src/strings/he.json +++ b/src/strings/he.json @@ -333,7 +333,7 @@ "RepeatEpisodes": "חזור על פרקים", "ReplaceAllMetadata": "החלף את כל המטא נתונים", "ReplaceExistingImages": "החלף תמונות קיימות", - "ResumeAt": "המשך מ {0}", + "ResumeAt": "המשך מ־{0}", "Runtime": "זמן ריצה", "Saturday": "שבת", "Save": "שמור", From 0f4ff1d86e8eae7e24cfb46e99c9f60d86612171 Mon Sep 17 00:00:00 2001 From: Mandeep Date: Mon, 26 May 2025 02:28:37 -0400 Subject: [PATCH 331/645] Translated using Weblate (Hindi) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hi/ --- src/strings/hi-in.json | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/strings/hi-in.json b/src/strings/hi-in.json index 1a3dbb643..7debc3eaf 100644 --- a/src/strings/hi-in.json +++ b/src/strings/hi-in.json @@ -1,5 +1,5 @@ { - "ButtonQuickStartGuide": "तुरंत आरंभ मार्गदर्शिका", + "ButtonQuickStartGuide": "सेटअप गाइड", "ButtonSignOut": "Sign out", "LabelFinish": "समाप्त", "LabelYoureDone": "आपने पूरा कर लिया है!", @@ -83,7 +83,7 @@ "AllowedRemoteAddressesHelp": "नेटवर्क के लिए आईपी पतों आईपी/नेटमास्क एंट्रीज़ की कॉमा विभाजित सूची जो रिमोट रूप से कनेक्ट करने की अनुमति देगा। यदि खाली छोड़ा गया है, तो सभी रिमोट पतों को अनुमति दी जाएगी।", "AllowRemoteAccessHelp": "अनियंत्रित होने पर, सभी दूरस्थ कनेक्शन अवरुद्ध हो जाएंगे।", "AllowRemoteAccess": "इस सर्वर को असमीप संपर्क की अनुमति दें", - "AllowFfmpegThrottlingHelp": "जब कोई ट्रांसकोड या रीमक्स वर्तमान प्लेबैक स्थिति से काफी आगे निकल जाता है, तो प्रक्रिया को रोक दें ताकि यह कम संसाधनों का उपभोग करे। अक्सर बिना खोजे देखते समय यह सबसे उपयोगी होता है। यदि आप प्लेबैक समस्याओं का अनुभव करते हैं तो इसे बंद कर दें।", + "AllowFfmpegThrottlingHelp": "जब कोई ट्रांसकोड या रीमक्स वर्तमान प्लेबैक स्थिति से काफी आगे निकल जाता है, तो प्रक्रिया को रोक दें ताकि यह कम संसाधनों का उपभोग करे। अक्सर बिना बार-बार आगे पीछे किए देखते समय यह सबसे उपयोगी होता है। यदि आप प्लेबैक में समस्या अनुभव करते हैं तो इसे बंद कर दें।", "AllowFfmpegThrottling": "थ्रोटल ट्रांसकोड", "AllowOnTheFlySubtitleExtractionHelp": "वीडियो ट्रांसकोडिंग को रोकने में मदद करने के लिए एंबेडेड सबटाइटल वीडियो से निकाले जा सकते हैं और सादे पाठ में ग्राहकों तक पहुंचाए जाते हैं। कुछ प्रणालियों पर यह एक लंबा समय ले सकता है और निष्कर्षण प्रक्रिया के दौरान वीडियो प्लेबैक को स्टाल करने का कारण बन सकता है। जब वे क्लाइंट डिवाइस द्वारा मूल रूप से समर्थित नहीं होते हैं, तो वीडियो ट्रांसकोडिंग के साथ जले हुए एम्बेडेड उपशीर्षक को अक्षम करें।", "AlbumArtist": "एल्बम कलाकार", @@ -93,7 +93,7 @@ "MessageBrowsePluginCatalog": "उपलब्ध प्लगिन्स देखने के लिए हमारे कैटलॉग को ब्राउज़ करें।", "Browse": "ब्राउज़", "BoxSet": "बॉक्स सेट", - "BurnSubtitlesHelp": "निर्धारित करता है कि वीडियो ट्रांसकोडिंग करते समय सर्वर को उपशीर्षक बर्न-इन करना चाहिए। इससे बचने से प्रदर्शन में बहुत सुधार होगा। छवि आधारित उपशीर्षक (VOBSUB, PGS, SUB, IDX, …) एवं ASS अथवा SSA जैसे उपशीर्षक बर्न-इन करने के लिए ऑटो का चयन करें।", + "BurnSubtitlesHelp": "निर्धारित करें कि सर्वर को सबटाइटल्स को वीडियो में एम्बेड (burn-in) करना चाहिए या नहीं। इसे बंद रखने से वीडियो स्ट्रीमिंग तेज़ और आसान हो सकती है। 'Auto' चुनने पर केवल इमेज-आधारित फॉर्मैट (जैसे VobSub, PGS, SUB, IDX आदि) और कुछ ASS या SSA सबटाइटल्स को ही एम्बेड किया जाएगा।", "ButtonRemove": "हटाना", "ButtonOpen": "खोलो", "HeaderContinueWatching": "देखना जारी रखें", @@ -186,5 +186,14 @@ "AlternateDVD": "वैकल्पिक डीवीडी", "BlockContentWithTagsHelp": "निर्दिष्ट टैगों में से कम से कम एक टैग के साथ मीडिया छिपाएँ।", "ButtonEditUser": "यूजर को संपादित करो", - "CinemaModeConfigurationHelp": "सिनेमा मोड मुख्य फीचर से पहले ट्रेलर और कस्टम इंट्रो चलाने की क्षमता के साथ थिएटर अनुभव को सीधे आपके लिविंग रूम में लाता है।" + "CinemaModeConfigurationHelp": "सिनेमा मोड मुख्य फीचर से पहले ट्रेलर और कस्टम इंट्रो चलाने की क्षमता के साथ थिएटर अनुभव को सीधे आपके लिविंग रूम में लाता है।", + "AlwaysRemuxFlacAudioFilesHelp": "अगर आपके पास ऐसी फाइलें हैं जिन्हें आपका ब्राउज़र चलाने से मना करता है या जिनमें टाइमस्टैम्प गलत तरीके से दिखते हैं, तो इस विकल्प को चालू करें। यह एक वैकल्पिक समाधान के रूप में काम करेगा।", + "AllowFmp4TranscodingContainerHelp": "HEVC और HDR कंटेंट चलाने के लिए इस ट्यूनर में fMP4 ट्रांसकोडिंग कंटेनर चालू करें। ध्यान दें कि सभी ट्यूनर इसके साथ काम नहीं करते। अगर वीडियो प्लेबैक में कोई समस्या हो, तो इसे बंद कर दें।", + "AllowStreamSharingHelp": "Jellyfin को ट्यूनर से MPEG-TS स्ट्रीम की एक कॉपी बनाने और उसे अपने क्लाइंट्स के साथ शेयर करने की अनुमति दें। यह तब उपयोगी होता है जब ट्यूनर पर स्ट्रीम की संख्या की सीमा होती है, लेकिन इससे कभी-कभी प्लेबैक में दिक्कत भी आ सकती है।", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "जब ट्रांसकोडिंग शुरू हो, तब सभी सबटाइटल्स को वीडियो में स्थायी रूप से जोड़ दें। इससे ट्रांसकोडिंग के बाद सबटाइटल्स की सही टाइमिंग बनी रहती है, लेकिन ट्रांसकोडिंग की गति थोड़ी कम हो सकती है।", + "AllowTonemappingSoftwareHelp": "टोन-मैपिंग एक वीडियो के डायनामिक रेंज को HDR से SDR में बदल सकती है, जिससे ओरिजिनल सीन की डिटेल्स और रंग सही तरीके से बने रहते हैं। यह जानकारी वीडियो की गुणवत्ता बनाए रखने के लिए बेहद ज़रूरी होती है। फिलहाल, यह फ़ीचर केवल 10-बिट HDR10, HLG और DoVi वीडियो पर काम करता है।", + "AlwaysRemuxMp3AudioFilesHelp": "अगर आपकी कुछ फाइलों में ब्राउज़र टाइमस्टैम्प गलत दिखा रहा है, तो इस विकल्प को एक समाधान के रूप में चालू करें।", + "Anime": "एनिमे", + "AutoSubtitleStylingHelp": "यह मोड आपके डिवाइस के प्रकार के आधार पर, मूल (native) और कस्टम सबटाइटल स्टाइलिंग के बीच अपने आप स्विच करेगा।", + "AlwaysBurnInSubtitleWhenTranscoding": "ट्रांसकोडिंग करते समय सबटाइटल को हमेशा वीडियो में स्थायी रूप से जोड़ें" } From 81e001c74702756530eb3badf65911315501cbaf Mon Sep 17 00:00:00 2001 From: Joan Nualart Date: Mon, 26 May 2025 03:41:31 -0400 Subject: [PATCH 332/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 7ae3ab780..c0d086b2f 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -573,9 +573,9 @@ "ValueSpecialEpisodeName": "Especial - {0}", "ViewAlbum": "Veure àlbum", "ViewPlaybackInfo": "Veure informació de reproducció", - "Watched": "Vists", + "Watched": "Vist", "Wednesday": "Dimecres", - "WelcomeToProject": "Benvingut a Jellyfin!", + "WelcomeToProject": "Et donem la benvinguda a Jellyfin!", "WizardCompleted": "Això és tot el que necessitem per ara. Jellyfin ha començat a recollir informació de la vostra biblioteca multimèdia. Mireu-vos alguna de les nostres apps i llavors feu clic a Finalitzar per veure el Tauler de control.", "Writer": "Escriptor", "XmlTvKidsCategoriesHelp": "Els programes amb aquestes categories es mostraran com a programes infantils. Separa'n varis emprant '|'.", @@ -868,7 +868,7 @@ "XmlTvPathHelp": "Una ruta a un arxiu XMLTV. Jellyfin llegirà aquesta imatge i comprovar periòdicament si hi ha actualitzacions. Vostè és responsable de crear i actualitzar l'arxiu.", "XmlDocumentAttributeListHelp": "Aquests atributs s'apliquen a l'element arrel de cada resposta XML.", "Writers": "Escriptors", - "WriteAccessRequired": "El Jellyfin necessita accés d'escriptura a aquesta carpeta. Garantiu l'accés d'escriptura i torneu-ho a intentar.", + "WriteAccessRequired": "El Jellyfin necessita accés d'escriptura a aquesta carpeta. Garanteix l'accés d'escriptura i torna-ho a intentar.", "Whitelist": "Llista blanca", "WeeklyAt": "{0} S a {1}", "ViewAlbumArtist": "Veure artista àlbum", @@ -2025,7 +2025,7 @@ "LimitSegmentLengthHelp": "Activar aquesta opció pot ajudar a prevenir que el reproductor HLS es pengi durant la cerca en alguns dispositius, com televisors webOS.", "HeaderServerUnavailable": "El Servidor no està disponible", "HeaderUpdateRequired": "Cal una actualització", - "ViewSettings": "Configuració de vista", + "ViewSettings": "Configuració de visualització", "DownloadManager": "Descàrregues", "MessageForgotPasswordPinReset": "Introdueix el PIN aquí per acabar el Restabliment de contrasenya" } From 32b6c55d2b1801c355f30e36af7228456f30f877 Mon Sep 17 00:00:00 2001 From: Swedish Wiking Date: Mon, 26 May 2025 11:18:35 -0400 Subject: [PATCH 333/645] Translated using Weblate (Swedish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/ --- src/strings/sv.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/strings/sv.json b/src/strings/sv.json index 7f3ebd078..83cd5d39b 100644 --- a/src/strings/sv.json +++ b/src/strings/sv.json @@ -68,7 +68,7 @@ "ButtonParentalControl": "Föräldralås", "ButtonPause": "Paus", "ButtonPreviousTrack": "Föregående spår", - "ButtonQuickStartGuide": "Snabbstartguide", + "ButtonQuickStartGuide": "Installationsguide", "ButtonRefreshGuideData": "Uppdatera programguiden", "ButtonRemove": "Ta bort", "ButtonRename": "Ändra namn", @@ -1695,7 +1695,7 @@ "SaveRecordingImagesHelp": "Spara bilder från EPG-listningsleverantören tillsammans med media.", "HeaderDummyChapter": "Kapitelbilder", "LabelDummyChapterDuration": "Intervall", - "LabelDummyChapterDurationHelp": "Intervall mellan dummy-kapitel. Ställ in på 0 för att inaktivera generering av dummy-kapitel. Ändringar av detta har ingen effekt på befintliga dummy-kapitel.", + "LabelDummyChapterDurationHelp": "Intervall mellan dummy-kapitel (i sekunder). Ställ in på 0 för att inaktivera generering av dummy-kapitel. Ändringar av detta har ingen effekt på befintliga dummy-kapitel.", "LabelDummyChapterCount": "Gräns", "LabelDummyChapterCountHelp": "Största antal kapitelbilder som kommer hämtas in för varje enskild mediafil.", "LabelChapterImageResolution": "Upplösning", @@ -2024,5 +2024,7 @@ "ReadInputAtNativeFramerate": "Läs inmatning i ursprungling bildhastighet", "ViewSettings": "Visa inställningar", "HeaderServerUnavailable": "Server Otillgänglig", - "HeaderUpdateRequired": "Uppdatering Krävs" + "HeaderUpdateRequired": "Uppdatering Krävs", + "DownloadManager": "Nedladdningar", + "MessageForgotPasswordPinReset": "Ange PIN-koden här för att slutföra lösenordsåterställningen" } From ec4d16d201fb0d40848a8eeab329ad653a5b826b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yago=20Ra=C3=B1a=20Gayoso?= Date: Mon, 26 May 2025 10:23:12 -0400 Subject: [PATCH 334/645] Translated using Weblate (Galician) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/gl/ --- src/strings/gl.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/strings/gl.json b/src/strings/gl.json index 9b7998120..2adfe0ca2 100644 --- a/src/strings/gl.json +++ b/src/strings/gl.json @@ -205,7 +205,7 @@ "ButtonRevoke": "Revogar", "ButtonEditOtherUserPreferences": "Edita o perfil desta usuaria, imaxe e preferencias personais.", "ButtonScanAllLibraries": "Escanear tódalas bibliotecas", - "BurnSubtitlesHelp": "Indica se o servidor debería incluír os subtítulos ao recodificar os vídeos. Se non fas esto mellorarás moito o rendemento. Elixe Auto para incluir formatos baseados na imaxe (VobSub, PGS, SUB, IDX, etc.) e certos subtítulos ASS ou SSA.", + "BurnSubtitlesHelp": "Indica se o servidor debería incluír os subtítulos. Se non fas esto mellorarás moito o rendemento. Elixe Auto para incluir formatos baseados na imaxe (VobSub, PGS, SUB, IDX, etc.) e certos subtítulos ASS ou SSA.", "ButtonAddScheduledTaskTrigger": "Engadir activador", "ButtonForgotPassword": "Contrasinal esquecido", "DownloadsValue": "{0} descargas", @@ -1047,5 +1047,11 @@ "CustomSplashScreenSize": "As imaxes personalizadas deben ter unha relación de aspecto de 16x9 e un tamaño mínimo de 1920x1080.", "DeleteCustomImage": "Eliminar imaxe personalizada", "DateModified": "Data de modificación", - "HeaderLatestRecordings": "Gravacións recentemente engadidas" + "HeaderLatestRecordings": "Gravacións recentemente engadidas", + "HeaderNextEpisode": "Seguinte episodio", + "HeaderPageNotFound": "Páxina non atopada", + "HeaderOtherItems": "Outros elementos", + "HeaderMusicQuality": "Calidade de son", + "HeaderNewPlaylist": "Nova lista de reprodución", + "HeaderNextVideo": "Seguinte vídeo" } From 65d90b5190a6c4da9c012f846c942d7d3e5b27ee Mon Sep 17 00:00:00 2001 From: millallo Date: Mon, 26 May 2025 13:39:43 -0400 Subject: [PATCH 335/645] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/strings/it.json b/src/strings/it.json index 7a976476e..a858b81ba 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -66,7 +66,7 @@ "ButtonParentalControl": "Controllo parentale", "ButtonPause": "Pausa", "ButtonPreviousTrack": "Traccia Precedente", - "ButtonQuickStartGuide": "Guida rapida", + "ButtonQuickStartGuide": "Guida alla Configurazione", "ButtonRefreshGuideData": "Aggiorna la guida", "ButtonRemove": "Rimuovi", "ButtonRename": "Rinomina", @@ -2030,5 +2030,6 @@ "HeaderServerUnavailable": "Server Non Disponibile", "HeaderUpdateRequired": "Aggiornamento Necessario", "ViewSettings": "Mostra impostazioni", - "DownloadManager": "Scaricati" + "DownloadManager": "Scaricati", + "MessageForgotPasswordPinReset": "Inserisci il PIN per resettare la Password" } From 88a9871da5c000a7a059057590379b29e9e6c4e2 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Mon, 26 May 2025 16:16:01 -0400 Subject: [PATCH 336/645] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index d4401ac99..a29ff31c0 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -300,8 +300,8 @@ "LabelFinish": "Terminar", "LabelFileOrUrl": "Ficheiro ou URL", "LabelFailed": "Falhou", - "LabelExtractChaptersDuringLibraryScanHelp": "Gerar imagens dos capítulos quando os vídeos forem importados durante a atualização da biblioteca. Caso contrário, serão geradas durante a tarefa agendada de extração de imagens dos capítulos, permitindo uma atualização mais rápida da biblioteca.", - "LabelExtractChaptersDuringLibraryScan": "Extrair imagens dos capítulos durante a atualização da biblioteca", + "LabelExtractChaptersDuringLibraryScanHelp": "Gerar imagens dos capítulos ao importar vídeos durante a análise da biblioteca. Caso contrário, as imagens serão extraídas mais tarde, através da tarefa agendada de extração de imagens de capítulos, permitindo que a análise regular da biblioteca seja concluída mais rapidamente.", + "LabelExtractChaptersDuringLibraryScan": "Extrair imagens dos capítulos durante a análise da biblioteca", "LabelBaseUrlHelp": "Adicione um subdiretório personalizado ao URL do servidor. Por exemplo: http://example.com/<baseurl>", "LabelBaseUrl": "URL Base", "LabelEveryXMinutes": "A cada", @@ -548,7 +548,7 @@ "OptionDisableUserHelp": "O servidor não permitirá nenhuma conexão deste usuário. As conexões existentes serão encerradas abruptamente.", "OptionDisableUser": "Desativar este utilizador", "OptionDatePlayed": "Data de reprodução", - "OptionDateAddedImportTime": "Usar a data de importação para a biblioteca", + "OptionDateAddedImportTime": "Utilizar a data da análise para a biblioteca", "OptionDateAddedFileTime": "Usar a data de criação do ficheiro", "OptionDateAdded": "Data de adição", "OptionDaily": "Diariamente", @@ -590,7 +590,7 @@ "MessageUnableToConnectToServer": "Não foi possível estabelecer ligação ao servidor. Por favor, certifique-se que o servidor está a correr e tente de novo.", "MessageTheFollowingLocationWillBeRemovedFromLibrary": "As seguintes pastas multimédia serão removidas da tua biblioteca", "MessageReenableUser": "Vê abaixo para reativar", - "MessagePluginInstallDisclaimer": "AVISO: A instalação de uma extensão de terceiros acarreta riscos. Ela pode conter código instável ou malicioso e pode ser alterado a qualquer momento. Instala apenas extensões de autores em quem confias e tem em atenção os potenciais efeitos que podem ter, incluindo consultas de serviços externos, análises mais longas da biblioteca ou processamento adicional em segundo plano.", + "MessagePluginInstallDisclaimer": "AVISO: Instalar uma extensão de terceiros implica riscos. Pode conter código instável ou malicioso e pode ser alterada a qualquer momento. Instala apenas extensões de autores em quem confies e está atento aos possíveis efeitos, incluindo consultas a serviços externos, análises da biblioteca mais longas ou processamento adicional em segundo plano.", "MessagePluginConfigurationRequiresLocalAccess": "Para configurar esta extensão, inicia sessão localmente no servidor.", "MessagePleaseEnsureInternetMetadata": "Certifique-se de que a transferência de metadados da Internet está ativada.", "MessagePasswordResetForUsers": "Os seguintes utilizadores tiveram as suas palavras-passe redefinidas. Podem agora iniciar sessão com os códigos PIN que foram utilizados para efetuar a redefinição.", @@ -609,7 +609,7 @@ "MessageForgotPasswordInNetworkRequired": "Por favor, volte a tentar o processo de redefinição de palavra-passe quando se encontrar dentro da sua rede local.", "MessageForgotPasswordFileCreated": "Foi criado no servidor o ficheiro abaixo que contém instruções de como prosseguir", "MessageFileReadError": "Ocorreu um erro ao ler este ficheiro.", - "MessageEnablingOptionLongerScans": "Ativar esta opção pode aumentar significativamente a duração da análise da biblioteca.", + "MessageEnablingOptionLongerScans": "Ativar esta opção pode prolongar significativamente o tempo das análises da biblioteca.", "MessageDownloadQueued": "Transferência pendente.", "MessageDirectoryPickerLinuxInstruction": "Em sistemas operativos como Arch Linux, CentOS, Debian, Fedora, OpenSuse ou Ubuntu, é necessário dar permissão ao utilizador que executa o processo Jellyfin para ter, no mínimo, acesso de leitura à pasta.", "MessageDirectoryPickerBSDInstruction": "Para BSD, você talvez precise configurar o armazenamento em seu FreeNAS Jail para que o Jellyfin possa acessar sua mídia.", @@ -1420,7 +1420,7 @@ "EnableAudioNormalizationHelp": "A normalização de áudio vai adicionar um ganho constante para manter a média em um nível desejável (-18db).", "LabelParallelImageEncodingLimit": "Limite de codificação de imagens em paralelo", "LabelEnableLUFSScan": "Ativar a verificação LUFS", - "LabelEnableLUFSScanHelp": "Os clientes podem normalizar a reprodução de áudio para obter o mesmo volume entre as faixas. Isso fará com que as varreduras da biblioteca sejam mais longas e consumam mais recursos.", + "LabelEnableLUFSScanHelp": "Os clientes podem normalizar a reprodução de áudio para obter um volume uniforme entre faixas. Isto tornará as análises da biblioteca mais lentas e exigirá mais recursos.", "LabelParallelImageEncodingLimitHelp": "Número máximo de codificações de imagem permitidas para execução em paralelo. Se deixares este campo vazio, será escolhido um limite baseado na contagem de núcleos do teu sistema.", "GoHome": "Ir ao início", "GridView": "Vista em grelha", @@ -1801,7 +1801,7 @@ "LabelImageInterval": "Intervalo de imagem", "LabelQscale": "Fator de qualidade (Qscale)", "LabelImageIntervalHelp": "Intervalo de tempo (ms) entre cada nova imagem trickplay.", - "LabelScanBehaviorHelp": "O comportamento predefinido é não bloquear, o que adicionará ficheiros multimédia à biblioteca antes que a geração de trickplay seja feita. Bloquear irá garantir que os ficheiros trickplay são gerados antes de os ficheiros multimédia serem adicionados à biblioteca, mas fará com que as pesquisas sejam significativamente mais longas.", + "LabelScanBehaviorHelp": "O comportamento predefinido é não bloqueante, o que faz com que os ficheiros multimédia sejam adicionados à biblioteca antes da geração do trickplay estar concluída. O modo bloqueante assegura que os ficheiros trickplay são gerados antes dos ficheiros multimédia serem adicionados à biblioteca, mas tornará as análises significativamente mais demoradas.", "LabelWidthResolutions": "Resoluções de largura", "LabelTileWidth": "Largura do mosaico", "LabelWidthResolutionsHelp": "Lista separada por vírgulas das larguras (px) em que serão geradas as imagens trickplay. Todas as imagens devem ser geradas proporcionalmente à fonte, por isso um vídeo 16:9 com uma largura de 320 acabará por ter cerca de 320x180.", @@ -1859,7 +1859,7 @@ "BlockingScan": "Bloqueante - coloca a geração em fila de espera, bloqueia a análise até ser concluída", "NonBlockingScan": "Não bloqueante - coloca a geração em fila de espera e depois regressa", "LabelExtractTrickplayDuringLibraryScan": "Extrair imagens trickplay durante a análise da biblioteca", - "LabelExtractTrickplayDuringLibraryScanHelp": "Gera imagens trickplay quando os vídeos são importados durante a análise da biblioteca. Caso contrário, serão extraídas durante a tarefa agendada de imagens trickplay. Se a geração estiver definida como não bloqueante, isto não afetará o tempo que a análise da biblioteca demora a ser concluída.", + "LabelExtractTrickplayDuringLibraryScanHelp": "Gerar imagens trickplay quando os vídeos são importados durante a análise da biblioteca. Caso contrário, as imagens serão extraídas durante a tarefa agendada de imagens trickplay. Se a geração estiver definida como não bloqueante, isto não afetará o tempo que a análise da biblioteca demora a concluir.", "PlaybackError.ASS_RENDER_ERROR": "Foi encontrado um erro no renderizador de legendas ASS/SSA.", "SavePassword": "Guardar palavra-passe", "Author": "Autor", @@ -1877,8 +1877,8 @@ "Letterer": "Letrista", "LabelSelectPreferredTranscodeVideoAudioCodec": "Codec de áudio de transcodificação preferido na reprodução de vídeo", "SelectPreferredTranscodeVideoAudioCodecHelp": "Seleciona o codec de áudio preferido para transcodificar o conteúdo de vídeo. Se o codec preferido não for suportado, o servidor utilizará o próximo melhor codec disponível.", - "LibraryScanFanoutConcurrencyHelp": "Número máximo de tarefas paralelas durante as verificações da biblioteca. Se deixar este campo vazio, escolherá um limite baseado na contagem de núcleos do teu sistema. AVISO: Definir este número demasiado alto pode causar problemas com os sistemas de ficheiros de rede; se tiveres problemas, reduz este número.", - "LibraryScanFanoutConcurrency": "Limite das tarefas de análise da biblioteca paralela", + "LibraryScanFanoutConcurrencyHelp": "Número máximo de tarefas paralelas durante as análises da biblioteca. Se deixares este campo vazio, será escolhido um limite com base no número de núcleos do teu sistema. AVISO: Definir um valor demasiado elevado pode causar problemas com sistemas de ficheiros em rede; se encontrares problemas, reduz este número.", + "LibraryScanFanoutConcurrency": "Limite de tarefas paralelas de análise da biblioteca", "PlaylistPublicDescription": "Permitir que esta lista de reprodução seja vista por qualquer utilizador com sessão iniciada.", "PlaylistPublic": "Permitir acesso público", "SaveLyricsIntoMediaFoldersHelp": "Guardar letras junto a ficheiros de áudio permiti-las-á ser mais facilmente geridas.", From 685ef0c3cc12954061b67f12f9c2b44c4241e8ac Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Tue, 27 May 2025 02:14:53 -0400 Subject: [PATCH 337/645] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index ab704bc34..079053339 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -1417,7 +1417,7 @@ "OptionEquals": "Bằng", "OptionCaptionInfoExSamsung": "Thông tin chú thích ví dụ (Samsung)", "MessageSyncPlayGroupWait": "{0} đang lưu vào bộ đệm…", - "MediaInfoAnamorphic": "Phim điện ảnh màn ảnh rộng", + "MediaInfoAnamorphic": "Biến dạng", "LabelXDlnaCap": "ID khả năng của thiết bị", "OptionMaxActiveSessionsHelp": "Giá trị 0 sẽ vô hiệu hóa tính năng.", "OptionMaxActiveSessions": "Đặt số lượng phiên người dùng đồng thời tối đa.", From b0c3ceadcac210b30dd89e4baa10b8e76fb253bc Mon Sep 17 00:00:00 2001 From: Nandes Simanjuntak Date: Tue, 27 May 2025 05:59:14 -0400 Subject: [PATCH 338/645] Translated using Weblate (Indonesian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/id/ --- src/strings/id.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/id.json b/src/strings/id.json index 1305e9570..190156c45 100644 --- a/src/strings/id.json +++ b/src/strings/id.json @@ -1945,5 +1945,8 @@ "HeaderNextVideo": "Video Selanjutnya", "AndOtherArtists": "{0} dan {1} artis lainnya.", "LabelAllowStreamSharing": "Mengizinkan berbagi stream", - "LabelAudioTagSettings": "Pengaturan Tag Audio" + "LabelAudioTagSettings": "Pengaturan Tag Audio", + "Custom": "Kustom", + "CopyLogSuccess": "Catatan konten berhasil di salin.", + "CustomSplashScreenSize": "Kustom gambar harus dalam 16x9 aspek rasio dengan ukuran minimum 1920x1080." } From 1424e38abb1c618b5c91b126e34dc7d50b8358dc Mon Sep 17 00:00:00 2001 From: Nilkanth Hala Date: Tue, 27 May 2025 07:20:13 -0400 Subject: [PATCH 339/645] Translated using Weblate (Hindi) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hi/ --- src/strings/hi-in.json | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/src/strings/hi-in.json b/src/strings/hi-in.json index 7debc3eaf..8a7fda1cd 100644 --- a/src/strings/hi-in.json +++ b/src/strings/hi-in.json @@ -57,17 +57,17 @@ "BoxRear": "बॉक्स (पीछे)", "Box": "बॉक्स", "Books": "पुस्तकें", - "BookLibraryHelp": "ऑडियो और पाठ्य पुस्तकें समर्थित हैं। {0} पुस्तक नामकरण गाइड {1} की समीक्षा करें।", + "BookLibraryHelp": "ऑडियो और पाठ्य पुस्तकें समर्थित हैं। {0} पुस्तक नामकरण मार्गदर्शिका {1} की समीक्षा करें।", "Blacklist": "काला सूची में डालना", "BirthPlaceValue": "जन्म स्थान: {0}", "BirthLocation": "जन्म स्थान", "BirthDateValue": "जन्म: {0}", - "Banner": "झंडा", + "Banner": "बैनर", "Backdrops": "पृष्ठभूमि", "Backdrop": "पृष्ठभूमि", "Auto": "ऑटो", "AuthProviderHelp": "इस उपयोगकर्ता के पासवर्ड को प्रमाणित करने के लिए एक प्रमाणीकरण प्रदाता का उपयोग करें।", - "Audio": "नया", + "Audio": "ऑडियो", "AspectRatio": "आस्पेक्ट अनुपात", "AskAdminToCreateLibrary": "लाइब्रेरी बनाने के लिए किसी व्यवस्थापक से पूछें।", "Ascending": "आरोही", @@ -93,7 +93,7 @@ "MessageBrowsePluginCatalog": "उपलब्ध प्लगिन्स देखने के लिए हमारे कैटलॉग को ब्राउज़ करें।", "Browse": "ब्राउज़", "BoxSet": "बॉक्स सेट", - "BurnSubtitlesHelp": "निर्धारित करें कि सर्वर को सबटाइटल्स को वीडियो में एम्बेड (burn-in) करना चाहिए या नहीं। इसे बंद रखने से वीडियो स्ट्रीमिंग तेज़ और आसान हो सकती है। 'Auto' चुनने पर केवल इमेज-आधारित फॉर्मैट (जैसे VobSub, PGS, SUB, IDX आदि) और कुछ ASS या SSA सबटाइटल्स को ही एम्बेड किया जाएगा।", + "BurnSubtitlesHelp": "निर्धारित करें कि सर्वर को उपशीर्षक बर्न करना चाहिए या नहीं। इससे बचने से प्रदर्शन में बहुत सुधार होगा। छवि आधारित प्रारूप (VobSub, PGS, SUB, IDX, आदि) और कुछ ASS या SSA उपशीर्षक बर्न करने के लिए ऑटो का चयन करें।", "ButtonRemove": "हटाना", "ButtonOpen": "खोलो", "HeaderContinueWatching": "देखना जारी रखें", @@ -161,7 +161,7 @@ "AllowContentWithTagsHelp": "केवल उन मीडिया को दिखाएं जिनमें से कम से कम एक निर्दिष्ट टैग हो।", "AirPlay": "वायु प्रसारण", "AllowSubtitleManagement": "इस उपयोगकर्ता को उपशीर्षक संपादित करने की अनुमति दें", - "BackdropScreensaver": "पृष्ठभूमि स्क्रीनसेवर", + "BackdropScreensaver": "बैकड्रॉप स्क्रीनसेवर", "ChangingMetadataImageSettingsNewContent": "मेटाडेटा या कलाकृति डाउनलोडिंग सेटिंग्स में परिवर्तन केवल आपकी लाइब्रेरी में जोड़ी गई नई सामग्री पर लागू होंगे। मौजूदा शीर्षकों में परिवर्तन लागू करने के लिए, आपको उनके मेटाडेटा को मैन्युअल रूप से ताज़ा करना होगा।", "Author": "लेखक", "ButtonBackspace": "बैकस्पेस", @@ -184,7 +184,7 @@ "ChannelNumber": "चैनल संख्या", "Alternate": "वैकल्पिक", "AlternateDVD": "वैकल्पिक डीवीडी", - "BlockContentWithTagsHelp": "निर्दिष्ट टैगों में से कम से कम एक टैग के साथ मीडिया छिपाएँ।", + "BlockContentWithTagsHelp": "कम से कम एक निर्दिष्ट टैग वाले मीडिया को छिपाएं।", "ButtonEditUser": "यूजर को संपादित करो", "CinemaModeConfigurationHelp": "सिनेमा मोड मुख्य फीचर से पहले ट्रेलर और कस्टम इंट्रो चलाने की क्षमता के साथ थिएटर अनुभव को सीधे आपके लिविंग रूम में लाता है।", "AlwaysRemuxFlacAudioFilesHelp": "अगर आपके पास ऐसी फाइलें हैं जिन्हें आपका ब्राउज़र चलाने से मना करता है या जिनमें टाइमस्टैम्प गलत तरीके से दिखते हैं, तो इस विकल्प को चालू करें। यह एक वैकल्पिक समाधान के रूप में काम करेगा।", @@ -195,5 +195,24 @@ "AlwaysRemuxMp3AudioFilesHelp": "अगर आपकी कुछ फाइलों में ब्राउज़र टाइमस्टैम्प गलत दिखा रहा है, तो इस विकल्प को एक समाधान के रूप में चालू करें।", "Anime": "एनिमे", "AutoSubtitleStylingHelp": "यह मोड आपके डिवाइस के प्रकार के आधार पर, मूल (native) और कस्टम सबटाइटल स्टाइलिंग के बीच अपने आप स्विच करेगा।", - "AlwaysBurnInSubtitleWhenTranscoding": "ट्रांसकोडिंग करते समय सबटाइटल को हमेशा वीडियो में स्थायी रूप से जोड़ें" + "AlwaysBurnInSubtitleWhenTranscoding": "ट्रांसकोडिंग करते समय सबटाइटल को हमेशा वीडियो में स्थायी रूप से जोड़ें", + "ConfirmDeleteItem": "इस आइटम को हटाने से यह फ़ाइल सिस्टम और आपकी मीडिया लाइब्रेरी दोनों से हट जाएगा। क्या आप वाकई जारी रखना चाहते हैं?", + "ConfirmDeleteItems": "इन आइटम को हटाने से वे फ़ाइल सिस्टम और आपकी मीडिया लाइब्रेरी दोनों से हट जाएँगे। क्या आप वाकई जारी रखना चाहते हैं?", + "ConfirmDeleteLyrics": "इन गीतों को हटाने से वे फ़ाइल सिस्टम और आपकी मीडिया लाइब्रेरी दोनों से मिट जाएँगे। क्या आप वाकई जारी रखना चाहते हैं?", + "ConfirmEndPlayerSession": "क्या आप {0} पर जेलीफिन को बंद करना चाहेंगे?", + "Console": "कंसोल", + "ContinueWatching": "देखना जारी रखें", + "Continuing": "सतत", + "Connect": "कनेक्ट करें", + "Copy": "कॉपी", + "ConfirmDeletion": "विलोपन की पुष्टि करें", + "Copied": "कॉपी किया गया", + "ColorTransfer": "रंग स्थानांतरण", + "ColorSpace": "रंग स्थान", + "CommunityRating": "सामुदायिक रेटिंग", + "ConfirmDeleteSeries": "इस श्रृंखला को हटाने से फ़ाइल सिस्टम और आपकी मीडिया लाइब्रेरी दोनों से सभी {0} एपिसोड हट जाएँगे। क्या आप वाकई जारी रखना चाहते हैं?", + "Composer": "संगीतकार", + "Conductor": "कंडक्टर", + "ConfigureDateAdded": "डैशबोर्ड > लाइब्रेरीज़ > डिस्प्ले में 'जोड़ी गई तिथि' के लिए मेटाडेटा निर्धारित करने का तरीका सेट करें", + "ConfirmDeleteImage": "छवि हटाएँ?" } From 5c77645971975d2be53c8df5d68c71b856dc3e74 Mon Sep 17 00:00:00 2001 From: Nilkanth Hala Date: Tue, 27 May 2025 07:42:05 -0400 Subject: [PATCH 340/645] Translated using Weblate (Hindi) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hi/ --- src/strings/hi-in.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/hi-in.json b/src/strings/hi-in.json index 8a7fda1cd..1c4082bcf 100644 --- a/src/strings/hi-in.json +++ b/src/strings/hi-in.json @@ -214,5 +214,6 @@ "Composer": "संगीतकार", "Conductor": "कंडक्टर", "ConfigureDateAdded": "डैशबोर्ड > लाइब्रेरीज़ > डिस्प्ले में 'जोड़ी गई तिथि' के लिए मेटाडेटा निर्धारित करने का तरीका सेट करें", - "ConfirmDeleteImage": "छवि हटाएँ?" + "ConfirmDeleteImage": "छवि हटाएँ?", + "CopyFailed": "कॉपी नहीं किया जा सका" } From 0901ad8be70290c75e38782f56ef649c41fd4ae9 Mon Sep 17 00:00:00 2001 From: Nilkanth Hala Date: Tue, 27 May 2025 07:54:52 -0400 Subject: [PATCH 341/645] Translated using Weblate (Gujarati) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/gu/ --- src/strings/gu.json | 90 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 89 insertions(+), 1 deletion(-) diff --git a/src/strings/gu.json b/src/strings/gu.json index c5bff38cc..0ac9f33ef 100644 --- a/src/strings/gu.json +++ b/src/strings/gu.json @@ -23,5 +23,93 @@ "AlternateDVD": "અન્ય DVD", "AllowMediaConversion": "મીડિયા રૂપાંતરણની અનુમતિ આપો", "Absolute": "સંપૂર્ણ", - "Add": "ઉમેરો" + "Add": "ઉમેરો", + "AddedOnValue": "{0} ઉમેર્યું", + "AddToCollection": "સંગ્રહમાં ઉમેરો", + "AddToPlaylist": "પ્લેલિસ્ટમાં ઉમેરો", + "AddToPlayQueue": "પ્લે કતારમાં ઉમેરો", + "AllowSegmentDeletion": "સેગમેન્ટ્સ કાઢી નાખો", + "LabelSegmentKeepSeconds": "સેગમેન્ટ્સ રાખવાનો સમય", + "AllowMediaConversionHelp": "કન્વર્ટ મીડિયા સુવિધાની ઍક્સેસ આપો અથવા નકારો.", + "AlwaysPlaySubtitles": "હંમેશા વગાડો", + "AskAdminToCreateLibrary": "લાઇબ્રેરી બનાવવા માટે એડમિનિસ્ટ્રેટરને કહો.", + "Backdrop": "પૃષ્ઠભૂમિ", + "BirthLocation": "જન્મસ્થળ", + "ButtonAudioTracks": "ઑડિયો ટ્રૅક્સ", + "ButtonEditOtherUserPreferences": "આ વપરાશકર્તાની પ્રોફાઇલ, છબી અને વ્યક્તિગત પસંદગીઓમાં ફેરફાર કરો.", + "ButtonClose": "બંધ કરો", + "AddToFavorites": "મનપસંદમાં ઉમેરો", + "AllowedRemoteAddressesHelp": "નેટવર્ક્સ માટે IP સરનામાં અથવા IP/નેટમાસ્ક એન્ટ્રીઓની અલ્પવિરામથી વિભાજિત સૂચિ જે દૂરસ્થ રીતે કનેક્ટ થવાની મંજૂરી આપવામાં આવશે. જો ખાલી છોડી દેવામાં આવે, તો બધા દૂરસ્થ સરનામાંને મંજૂરી આપવામાં આવશે.", + "AllowFfmpegThrottlingHelp": "જ્યારે ટ્રાન્સકોડ અથવા રીમક્સ વર્તમાન પ્લેબેક સ્થિતિથી ખૂબ આગળ વધે છે, ત્યારે પ્રક્રિયાને થોભાવો જેથી તે ઓછા સંસાધનોનો ઉપયોગ કરે. વારંવાર શોધ્યા વિના જોતી વખતે આ સૌથી ઉપયોગી છે. જો તમને પ્લેબેક સમસ્યાઓનો અનુભવ થાય તો આને બંધ કરો.", + "AllowFmp4TranscodingContainerHelp": "આ ટ્યુનર માટે fMP4 ટ્રાન્સકોડિંગ કન્ટેનરને HEVC અને HDR કન્ટેન્ટ સક્ષમ કરવાની મંજૂરી આપો. બધા ટ્યુનર આ કન્ટેનર સાથે સુસંગત નથી. જો તમને પ્લેબેક સમસ્યાઓનો અનુભવ થાય તો આને અક્ષમ કરો.", + "AllowSegmentDeletionHelp": "ક્લાયન્ટ દ્વારા જૂના સેગમેન્ટ્સ ડાઉનલોડ કર્યા પછી તેને કાઢી નાખો. આનાથી આખી ટ્રાન્સકોડેડ ફાઇલને ડિસ્ક પર સ્ટોર કરવાની જરૂર પડતી નથી. જો તમને પ્લેબેક સમસ્યાઓનો અનુભવ થાય તો આને બંધ કરો.", + "AllowStreamSharingHelp": "જેલીફિનને ટ્યુનરમાંથી mpegts સ્ટ્રીમ ડુપ્લિકેટ કરવાની મંજૂરી આપો અને આ ડુપ્લિકેટ સ્ટ્રીમ તેના ક્લાયન્ટ્સ સાથે શેર કરો. જ્યારે ટ્યુનરમાં કુલ સ્ટ્રીમ કાઉન્ટ મર્યાદા હોય ત્યારે આ ઉપયોગી છે પરંતુ પ્લેબેક સમસ્યાઓનું કારણ પણ બની શકે છે.", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "ટ્રાન્સકોડિંગ ટ્રિગર થાય ત્યારે બધા સબટાઈટલ બર્ન કરો. આ ટ્રાન્સકોડિંગ પછી સબટાઈટલ સિંક્રનાઇઝેશનને ઓછી ટ્રાન્સકોડિંગ ઝડપના ખર્ચે સુનિશ્ચિત કરે છે.", + "AndOtherArtists": "{0} અને {1} અન્ય કલાકારો.", + "LabelThrottleDelaySecondsHelp": "ટ્રાન્સકોડર થ્રોટલ થાય તે પછીનો સમય સેકન્ડમાં. ક્લાયન્ટ સ્વસ્થ બફર જાળવી શકે તેટલો મોટો હોવો જોઈએ. જો થ્રોટલિંગ સક્ષમ હોય તો જ તે કાર્ય કરે છે.", + "LabelSegmentKeepSecondsHelp": "ક્લાયન્ટ દ્વારા ડાઉનલોડ કર્યા પછી સેગમેન્ટ્સ કયા માટે રાખવા જોઈએ તે સેકન્ડમાં સમય. જો સેગમેન્ટ ડિલીટ કરવાનું સક્ષમ હોય તો જ તે કાર્ય કરે છે.", + "AllowTonemappingHelp": "ટોન-મેપિંગ વિડિઓની ગતિશીલ શ્રેણીને HDR થી SDR માં રૂપાંતરિત કરી શકે છે, જ્યારે છબીની વિગતો અને રંગો જાળવી રાખે છે, જે મૂળ દ્રશ્યનું પ્રતિનિધિત્વ કરવા માટે ખૂબ જ મહત્વપૂર્ણ માહિતી છે. હાલમાં ફક્ત 10bit HDR10, HLG અને DoVi વિડિઓઝ સાથે કામ કરે છે. આ માટે અનુરૂપ GPGPU રનટાઇમની જરૂર છે.", + "AllowTonemappingSoftwareHelp": "ટોન-મેપિંગ વિડિઓની ગતિશીલ શ્રેણીને HDR થી SDR માં પરિવર્તિત કરી શકે છે, જ્યારે છબીની વિગતો અને રંગો જાળવી રાખે છે, જે મૂળ દ્રશ્યનું પ્રતિનિધિત્વ કરવા માટે ખૂબ જ મહત્વપૂર્ણ માહિતી છે. હાલમાં ફક્ત 10bit HDR10, HLG અને DoVi વિડિઓઝ સાથે કામ કરે છે.", + "AlwaysRemuxFlacAudioFilesHelp": "જો તમારી પાસે એવી ફાઇલો છે જેને તમારું બ્રાઉઝર ચલાવવાનો ઇનકાર કરે છે અથવા જ્યાં તે ખોટી રીતે ટાઇમસ્ટેમ્પની ગણતરી કરે છે, તો આને ઉકેલ તરીકે સક્ષમ કરો.", + "ApiKeysCaption": "હાલમાં સક્ષમ API કીની સૂચિ", + "Ascending": "ચડતા ક્રમમાં", + "LabelThrottleDelaySeconds": "થ્રોટલ પછી", + "AllowHWTranscodingHelp": "ટ્યુનરને તરત જ સ્ટ્રીમ્સ ટ્રાન્સકોડ કરવાની મંજૂરી આપો. આ સર્વર દ્વારા જરૂરી ટ્રાન્સકોડિંગ ઘટાડવામાં મદદ કરી શકે છે.", + "Art": "ક્લિયર આર્ટ", + "AspectRatio": "પાસા ગુણોત્તર", + "Artists": "કલાકારો", + "AsManyAsPossible": "શક્ય હોય તેટલા", + "Auto": "ઓટો", + "Author": "લેખક", + "AllowOnTheFlySubtitleExtractionHelp": "વિડિઓ ટ્રાન્સકોડિંગ અટકાવવા માટે, એમ્બેડેડ સબટાઈટલને વિડિઓમાંથી એક્સટ્રેક્ટ કરી શકાય છે અને ક્લાયંટને સાદા ટેક્સ્ટમાં પહોંચાડી શકાય છે. કેટલીક સિસ્ટમો પર આમાં લાંબો સમય લાગી શકે છે અને એક્સટ્રેક્શન પ્રક્રિયા દરમિયાન વિડિઓ પ્લેબેક અટકી શકે છે. જ્યારે ક્લાયંટ ડિવાઇસ દ્વારા મૂળ રીતે સપોર્ટેડ ન હોય ત્યારે વિડિઓ ટ્રાન્સકોડિંગ સાથે એમ્બેડેડ સબટાઈટલ બર્ન કરવા માટે આને અક્ષમ કરો.", + "Artist": "કલાકાર", + "Audio": "ઑડિયો", + "Authorize": "અધિકૃત કરો", + "AuthProviderHelp": "આ વપરાશકર્તાના પાસવર્ડને પ્રમાણિત કરવા માટે ઉપયોગમાં લેવાતા પ્રમાણીકરણ પ્રદાતાને પસંદ કરો.", + "BurnSubtitlesHelp": "સર્વર સબટાઈટલમાં બર્ન થવું જોઈએ કે નહીં તે નક્કી કરો. આને ટાળવાથી કામગીરીમાં ઘણો સુધારો થશે. છબી આધારિત ફોર્મેટ (VobSub, PGS, SUB, IDX, વગેરે) અને ચોક્કસ ASS અથવા SSA સબટાઈટલ બર્ન કરવા માટે ઓટો પસંદ કરો.", + "AutoSubtitleStylingHelp": "આ મોડ આપમેળે તમારા ઉપકરણના પ્રકાર પર આધારિત મૂળ અને કસ્ટમ સબટાઈટલ સ્ટાઇલ મિકેનિઝમ્સ વચ્ચે સ્વિચ કરશે.", + "ButtonFullscreen": "પૂર્ણસ્ક્રીન", + "ButtonGotIt": "સમજાઈ ગયું", + "AnyLanguage": "કોઈપણ ભાષા", + "Banner": "બેનર", + "AlwaysBurnInSubtitleWhenTranscoding": "ટ્રાન્સકોડિંગ કરતી વખતે હંમેશા સબટાઈટલમાં બર્ન કરો", + "AllowOnTheFlySubtitleExtraction": "તરત જ ઉપશીર્ષક કાઢવાની મંજૂરી આપો", + "AllowRemoteAccess": "આ સર્વર પર રિમોટ કનેક્શન્સને મંજૂરી આપો", + "AllowRemoteAccessHelp": "જો અનચેક કરવામાં આવે, તો બધા રિમોટ કનેક્શન બ્લોક થઈ જશે.", + "AlwaysPlaySubtitlesHelp": "ઑડિઓ ભાષાને ધ્યાનમાં લીધા વિના, ભાષા પસંદગી સાથે મેળ ખાતા સબટાઈટલ લોડ કરવામાં આવશે.", + "AlwaysRemuxMp3AudioFilesHelp": "જો તમારી પાસે એવી ફાઇલો છે જેના માટે તમારું બ્રાઉઝર ખોટી રીતે ટાઇમસ્ટેમ્પની ગણતરી કરે છે, તો આને ઉકેલ તરીકે સક્ષમ કરો.", + "Anytime": "કોઈપણ સમયે", + "AroundTime": "લગભગ {0}", + "Books": "પુસ્તકો", + "ButtonAddServer": "સર્વર ઉમેરો", + "ButtonArrowLeft": "ડાબે", + "ButtonAddUser": "વપરાશકર્તા ઉમેરો", + "ButtonArrowRight": "અધિકાર", + "ButtonBackspace": "બેકસ્પેસ", + "ButtonCancel": "રદ કરો", + "Anime": "એનીમે", + "Arranger": "ગોઠવનાર", + "BirthPlaceValue": "જન્મ સ્થળ: {0}", + "Blacklist": "બ્લેકલિસ્ટ", + "BlockContentWithTagsHelp": "ઓછામાં ઓછા એક ઉલ્લેખિત ટૅગ સાથે મીડિયા છુપાવો.", + "BookLibraryHelp": "ઑડિયો અને ટેક્સ્ટ બુક સપોર્ટેડ છે. {0} પુસ્તક નામકરણ માર્ગદર્શિકા {1}ની સમીક્ષા કરો.", + "Box": "બોક્સ", + "BoxRear": "બોક્સ (પાછળનું)", + "BoxSet": "બોક્સ સમૂહ", + "Browse": "બ્રાઉઝ", + "ButtonActivate": "સક્રિય કરો", + "Backdrops": "પાછળની બાજુ", + "BackdropScreensaver": "બેકડ્રોપ સ્ક્રીનસેવર", + "BirthDateValue": "જન્મ: {0}", + "ButtonAddMediaLibrary": "મીડિયા લાઇબ્રેરી ઉમેરો", + "ButtonAddScheduledTaskTrigger": "ટ્રીગર ઉમેરો", + "ButtonBack": "પાછળ", + "ButtonCast": "ઉપકરણ પર કાસ્ટ કરો", + "ButtonChangeServer": "સર્વર બદલો", + "ButtonEditUser": "વપરાશકર્તા સંપાદિત કરો", + "ButtonForgotPassword": "પાસવર્ડ ભૂલી ગયા", + "ButtonInfo": "માહિતી", + "ButtonAddImage": "છબી ઉમેરો", + "ButtonLibraryAccess": "લાઇબ્રેરી એક્સેસ", + "ButtonManualLogin": "મેન્યુઅલ લોગિન" } From 3c4258c8f0b951b22bfab4b733b624259e857425 Mon Sep 17 00:00:00 2001 From: JoaKing Date: Tue, 27 May 2025 14:19:15 -0400 Subject: [PATCH 342/645] Translated using Weblate (Spanish (Latin America)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_419/ --- src/strings/es_419.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/es_419.json b/src/strings/es_419.json index d2d237a5a..2cd3f947c 100644 --- a/src/strings/es_419.json +++ b/src/strings/es_419.json @@ -1744,5 +1744,7 @@ "DeleteCustomImage": "Borrar imagen personalizada", "DeleteEpisode": "Borrar episodio", "DeleteName": "Borrar {0}", - "EnableDts": "Activar DTS (DCA)" + "EnableDts": "Activar DTS (DCA)", + "DownloadManager": "Descargas", + "EnableLibrary": "Habilitar la librería" } From 9d53d4a107c22ad89ae5065a908854e6f1cba973 Mon Sep 17 00:00:00 2001 From: wheremygit Date: Wed, 28 May 2025 05:47:42 -0400 Subject: [PATCH 343/645] Translated using Weblate (Marathi) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/mr/ --- src/strings/mr.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/mr.json b/src/strings/mr.json index 63826fed2..a3217c063 100644 --- a/src/strings/mr.json +++ b/src/strings/mr.json @@ -677,5 +677,9 @@ "AllowSegmentDeletion": "विभागांना हटवा", "AllowSegmentDeletionHelp": "क्लायंटला पाठवल्यानंतर जुन्या विभागांना हटवा. यामुळे संपूर्ण ट्रान्सकोड केलेली फाईल डिस्कवर साठवण्याची आवश्यकता नाही. केवळ थ्रॉटलिंग सक्षम असल्यास कार्य करेल. जर आपल्याला प्लेबॅक समस्या येत असतील तर हे बंद करा.", "LabelSegmentKeepSeconds": "विभागांना ठेवण्याची वेळ", - "AirPlay": "एअरप्ले" + "AirPlay": "एअरप्ले", + "AccessRestrictedTryAgainLater": "सध्या प्रवेश मर्यादित आहे. कृपया नंतर पुन्हा प्रयत्न करा.", + "Alternate": "पर्यायी", + "AllowContentWithTagsHelp": "फक्त निर्दिष्ट टॅगपैकी किमान एक असलेले मीडिया दाखवा.", + "AllowSubtitleManagement": "या वापरकर्त्याला सबटायटल संपादित करण्याची परवानगी द्या" } From 963bba1e6697fa1a7cb75cded48f0937670b1bd1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 28 May 2025 11:07:16 +0000 Subject: [PATCH 344/645] Update dependency @jellyfin/sdk to v0.0.0-unstable.202505280501 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index e262f0c6d..3321ae719 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202505220501", + "@jellyfin/sdk": "0.0.0-unstable.202505280501", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.11", "@mui/material": "6.4.11", @@ -4095,9 +4095,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202505220501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202505220501.tgz", - "integrity": "sha512-ad+5uCpfWF4OcFzkcYRCscmkJGo7zW5H50eHRfdZYefuU5Cg321QOsDrYn7pPl+7Ji+0h97zi7KqWuIbY50MyQ==", + "version": "0.0.0-unstable.202505280501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202505280501.tgz", + "integrity": "sha512-RGzd4M6z1Ud9rY1CxSwRIi7q3c1dcyGjPCYTvA9w8RAHQh3MPo1ulI1V50NW8fCiEGb1S84HfdbB5EDPTEZSOA==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -27773,9 +27773,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202505220501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202505220501.tgz", - "integrity": "sha512-ad+5uCpfWF4OcFzkcYRCscmkJGo7zW5H50eHRfdZYefuU5Cg321QOsDrYn7pPl+7Ji+0h97zi7KqWuIbY50MyQ==", + "version": "0.0.0-unstable.202505280501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202505280501.tgz", + "integrity": "sha512-RGzd4M6z1Ud9rY1CxSwRIi7q3c1dcyGjPCYTvA9w8RAHQh3MPo1ulI1V50NW8fCiEGb1S84HfdbB5EDPTEZSOA==", "requires": {} }, "@jellyfin/ux-web": { diff --git a/package.json b/package.json index 615036759..eb42a0602 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202505220501", + "@jellyfin/sdk": "0.0.0-unstable.202505280501", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.11", "@mui/material": "6.4.11", From eb125b56668c0af4775cfbe7bd4694eb5345f71a Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Wed, 28 May 2025 21:36:56 +0300 Subject: [PATCH 345/645] Add Proxy polyfill --- package-lock.json | 12 ++++++++++++ package.json | 1 + src/lib/legacy/index.ts | 1 + webpack.common.js | 1 + 4 files changed, 15 insertions(+) diff --git a/package-lock.json b/package-lock.json index 3321ae719..6fa4641b7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,6 +53,7 @@ "material-react-table": "3.2.1", "native-promise-only": "0.8.1", "pdfjs-dist": "3.11.174", + "proxy-polyfill": "0.3.2", "react": "18.3.1", "react-blurhash": "0.3.0", "react-dom": "18.3.1", @@ -18712,6 +18713,12 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "peer": true }, + "node_modules/proxy-polyfill": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/proxy-polyfill/-/proxy-polyfill-0.3.2.tgz", + "integrity": "sha512-ENKSXOMCewnQTOyqrQXxEjIhzT6dy572mtehiItbDoIUF5Sv5UkmRUc8kowg2MFvr232Uo8rwRpNg3V5kgTKbA==", + "license": "Apache-2.0" + }, "node_modules/pump": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", @@ -37665,6 +37672,11 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "peer": true }, + "proxy-polyfill": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/proxy-polyfill/-/proxy-polyfill-0.3.2.tgz", + "integrity": "sha512-ENKSXOMCewnQTOyqrQXxEjIhzT6dy572mtehiItbDoIUF5Sv5UkmRUc8kowg2MFvr232Uo8rwRpNg3V5kgTKbA==" + }, "pump": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", diff --git a/package.json b/package.json index eb42a0602..0288e7670 100644 --- a/package.json +++ b/package.json @@ -119,6 +119,7 @@ "material-react-table": "3.2.1", "native-promise-only": "0.8.1", "pdfjs-dist": "3.11.174", + "proxy-polyfill": "0.3.2", "react": "18.3.1", "react-blurhash": "0.3.0", "react-dom": "18.3.1", diff --git a/src/lib/legacy/index.ts b/src/lib/legacy/index.ts index d8dcf9539..fadde20eb 100644 --- a/src/lib/legacy/index.ts +++ b/src/lib/legacy/index.ts @@ -8,6 +8,7 @@ import 'classlist.js'; import 'whatwg-fetch'; import 'abortcontroller-polyfill'; // requires fetch import 'resize-observer-polyfill'; +import 'proxy-polyfill'; import './domParserTextHtml'; import './elementAppendPrepend'; diff --git a/webpack.common.js b/webpack.common.js index aaae57d0d..ad0019a0e 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -229,6 +229,7 @@ const config = { path.resolve(__dirname, 'node_modules/markdown-it'), path.resolve(__dirname, 'node_modules/material-react-table'), path.resolve(__dirname, 'node_modules/mdurl'), + path.resolve(__dirname, 'node_modules/proxy-polyfill'), path.resolve(__dirname, 'node_modules/punycode'), path.resolve(__dirname, 'node_modules/react-blurhash'), path.resolve(__dirname, 'node_modules/react-lazy-load-image-component'), From 474782c454bea1180bde801197a2b04e2ccd7cd4 Mon Sep 17 00:00:00 2001 From: "Troj@" Date: Fri, 30 May 2025 02:26:47 -0400 Subject: [PATCH 346/645] Translated using Weblate (Belarusian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/be/ --- src/strings/be-by.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/be-by.json b/src/strings/be-by.json index ae23eb2ac..f0502a13b 100644 --- a/src/strings/be-by.json +++ b/src/strings/be-by.json @@ -1992,5 +1992,6 @@ "MoviesAndShows": "Фільмы і Cерыялы", "PreviewLyrics": "Прадпрагляд тэксту песні", "ReadInputAtNativeFramerate": "Чытаць уваходныя дадзеныя пры зыходнай частаце кадраў", - "ReadInputAtNativeFramerateHelp": "Уключэнне гэтай опцыі можа вырашыць некаторыя праблемы, напрыклад, заўчаснае спыненне прамых трансляцый." + "ReadInputAtNativeFramerateHelp": "Уключэнне гэтай опцыі можа вырашыць некаторыя праблемы, напрыклад, заўчаснае спыненне прамых трансляцый.", + "Retry": "Паўтарыць" } From 2028eea5b6618dcadbb6489a140b518c1d82b496 Mon Sep 17 00:00:00 2001 From: scapade Date: Fri, 30 May 2025 03:05:40 -0400 Subject: [PATCH 347/645] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index 99d3b2429..c8faea452 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -113,7 +113,7 @@ "ButtonParentalControl": "Lapsilukko", "ButtonPause": "Tauko", "ButtonPreviousTrack": "Edellinen raita", - "ButtonQuickStartGuide": "Pikaopas", + "ButtonQuickStartGuide": "Asennusopas", "ButtonRefreshGuideData": "Päivitä oppaan tiedot", "ButtonRemove": "Poista", "ButtonRename": "Nimeä uudelleen", @@ -2024,5 +2024,9 @@ "SettingsPageLoadError": "Asetukset-sivun lataaminen epäonnistui", "NativeSubtitleStylingHelp": "Tekstityksen tyylit eivät toimi kaikilla laitteilla, mutta ei aiheuta ylimääräistä kuormaa.", "VideoCodecTagNotSupported": "Videokoodekin tagi ei ole tuettu", - "LogLoadFailure": "Logitiedoston lataaminen epäonnistui. Se saattaa olla kirjoituksen kohteena." + "LogLoadFailure": "Logitiedoston lataaminen epäonnistui. Se saattaa olla kirjoituksen kohteena.", + "HeaderServerUnavailable": "Palvelin ei ole käytettävissä", + "DownloadManager": "Lataukset", + "ViewSettings": "Tarkastele asetuksia", + "HeaderUpdateRequired": "Päivitys vaaditaan" } From ddd897335f5efa4a5bc78c261353a4957b8466dd Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Fri, 30 May 2025 03:31:06 -0400 Subject: [PATCH 348/645] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index 079053339..fcf510f63 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -347,7 +347,7 @@ "EnableExternalVideoPlayers": "Trình phát video bên ngoài", "EnableDisplayMirroring": "Cho phép trình chiếu trên thiết bị khác", "HeaderProfileInformation": "Thông Tin Hồ Sơ", - "HeaderPreferredMetadataLanguage": "Ngôn Ngữ Dữ Liệu Mô Tả Ưu Tiên", + "HeaderPreferredMetadataLanguage": "Ngôn Ngữ Dữ Liệu Mô Tả Ưa Thích", "HeaderPluginInstallation": "Cài Đặt Plugin", "HeaderPleaseSignIn": "Hãy đăng nhập", "HeaderPlaybackError": "Lỗi Phát Lại", From c2e34d3e2bac0df174a9d017153e3ec1d0a4e7ff Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 16:40:35 +0000 Subject: [PATCH 349/645] Update dependency swiper to v11.2.8 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3321ae719..708dc3bd3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -61,7 +61,7 @@ "resize-observer-polyfill": "1.5.1", "screenfull": "6.0.2", "sortablejs": "1.15.6", - "swiper": "11.2.6", + "swiper": "11.2.8", "usehooks-ts": "3.1.1", "webcomponents.js": "0.7.24", "whatwg-fetch": "3.6.20" @@ -23121,9 +23121,9 @@ } }, "node_modules/swiper": { - "version": "11.2.6", - "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.2.6.tgz", - "integrity": "sha512-8aXpYKtjy3DjcbzZfz+/OX/GhcU5h+looA6PbAzHMZT6ESSycSp9nAjPCenczgJyslV+rUGse64LMGpWE3PX9Q==", + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.2.8.tgz", + "integrity": "sha512-S5FVf6zWynPWooi7pJ7lZhSUe2snTzqLuUzbd5h5PHUOhzgvW0bLKBd2wv0ixn6/5o9vwc/IkQT74CRcLJQzeg==", "funding": [ { "type": "patreon", @@ -40790,9 +40790,9 @@ } }, "swiper": { - "version": "11.2.6", - "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.2.6.tgz", - "integrity": "sha512-8aXpYKtjy3DjcbzZfz+/OX/GhcU5h+looA6PbAzHMZT6ESSycSp9nAjPCenczgJyslV+rUGse64LMGpWE3PX9Q==" + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.2.8.tgz", + "integrity": "sha512-S5FVf6zWynPWooi7pJ7lZhSUe2snTzqLuUzbd5h5PHUOhzgvW0bLKBd2wv0ixn6/5o9vwc/IkQT74CRcLJQzeg==" }, "symbol-tree": { "version": "3.2.4", diff --git a/package.json b/package.json index eb42a0602..ac9e6c128 100644 --- a/package.json +++ b/package.json @@ -127,7 +127,7 @@ "resize-observer-polyfill": "1.5.1", "screenfull": "6.0.2", "sortablejs": "1.15.6", - "swiper": "11.2.6", + "swiper": "11.2.8", "usehooks-ts": "3.1.1", "webcomponents.js": "0.7.24", "whatwg-fetch": "3.6.20" From a050b9cccb4d0da2e1978ae0a5eacf3c5eb39100 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Mon, 2 Jun 2025 14:24:33 +0300 Subject: [PATCH 350/645] Update position ticks when user data updates --- src/components/cardbuilder/cardBuilder.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/cardbuilder/cardBuilder.js b/src/components/cardbuilder/cardBuilder.js index b44b6e104..ce408991f 100644 --- a/src/components/cardbuilder/cardBuilder.js +++ b/src/components/cardbuilder/cardBuilder.js @@ -1333,6 +1333,7 @@ function updateUserData(card, userData) { innerCardFooter.appendChild(itemProgressBar); } + card.setAttribute('data-positionticks', userData.PlaybackPositionTicks); itemProgressBar.innerHTML = progressHtml; } else { itemProgressBar = card.querySelector('.itemProgressBar'); From a938650dedcda0cd296c3f7b74c881f31387973f Mon Sep 17 00:00:00 2001 From: Nathan Kerr Date: Tue, 6 May 2025 09:50:11 -0700 Subject: [PATCH 351/645] Add support for rendering React components in legacy views Add name to Contributors --- CONTRIBUTORS.md | 1 + src/utils/reactUtils.tsx | 41 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 src/utils/reactUtils.tsx diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 48b9b147b..a7b330971 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -100,6 +100,7 @@ - [StableCrimson](https://github.com/StableCrimson) - [diegoeche](https://github.com/diegoeche) - [Free O'Toole](https://github.com/freeotoole) +- [TheBosZ](https://github.com/thebosz) ## Emby Contributors diff --git a/src/utils/reactUtils.tsx b/src/utils/reactUtils.tsx new file mode 100644 index 000000000..097f18540 --- /dev/null +++ b/src/utils/reactUtils.tsx @@ -0,0 +1,41 @@ +import { createRoot } from 'react-dom/client'; +import * as React from 'react'; +import { QueryClientProvider } from '@tanstack/react-query'; +import { ApiProvider } from 'hooks/useApi'; +import { UserSettingsProvider } from 'hooks/useUserSettings'; +import { WebConfigProvider } from 'hooks/useWebConfig'; +import { queryClient } from 'utils/query/queryClient'; +import { useUserTheme } from 'hooks/useUserTheme'; +import { ThemeProvider } from '@mui/material/styles'; +import { getTheme } from 'themes/themes'; + +export const attachReactElement = (Element: (props: object) => React.ReactNode, props: object, element: HTMLElement, replace = false) => { + const domNode = document.createElement('div'); + const root = createRoot(replace ? domNode : element); + root.render( + + + + ); + + if (replace) { + element.replaceWith(domNode); + } +}; + +const RootContext: React.FC = ({ children }) => { + const { theme } = useUserTheme(); + return ( + + + + + + {children} + + + + + + ); +}; From 9c211382cf26524eb6464a930aed82fd1c6ea065 Mon Sep 17 00:00:00 2001 From: JoaKing Date: Mon, 2 Jun 2025 16:19:28 -0400 Subject: [PATCH 352/645] Translated using Weblate (Spanish (Latin America)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_419/ --- src/strings/es_419.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/es_419.json b/src/strings/es_419.json index 2cd3f947c..d81cb244f 100644 --- a/src/strings/es_419.json +++ b/src/strings/es_419.json @@ -1249,7 +1249,7 @@ "ButtonRename": "Renombrar", "ButtonRemove": "Remover", "ButtonRefreshGuideData": "Actualizar datos de la guía", - "ButtonQuickStartGuide": "Guía de inicio rápido", + "ButtonQuickStartGuide": "Guía de instalación", "ButtonPreviousTrack": "Pista anterior", "ButtonPause": "Pausar", "ButtonParentalControl": "Control parental", From f10f2bdf6eb80adf9d61e4b50a4bc8b401411348 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Jun 2025 09:22:29 +0000 Subject: [PATCH 353/645] Bump tar-fs from 2.1.2 to 2.1.3 Bumps [tar-fs](https://github.com/mafintosh/tar-fs) from 2.1.2 to 2.1.3. - [Commits](https://github.com/mafintosh/tar-fs/commits) --- updated-dependencies: - dependency-name: tar-fs dependency-version: 2.1.3 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6fa4641b7..b561f67eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23220,9 +23220,9 @@ } }, "node_modules/tar-fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.2.tgz", - "integrity": "sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", + "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", "dev": true, "license": "MIT", "optional": true, @@ -40875,9 +40875,9 @@ } }, "tar-fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.2.tgz", - "integrity": "sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", + "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", "dev": true, "optional": true, "peer": true, From 4c8ae195eb6d95229a63b392092658635602e2bf Mon Sep 17 00:00:00 2001 From: "Troj@" Date: Tue, 3 Jun 2025 07:03:13 -0400 Subject: [PATCH 354/645] Translated using Weblate (Belarusian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/be/ --- src/strings/be-by.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/be-by.json b/src/strings/be-by.json index f0502a13b..aea8cf3af 100644 --- a/src/strings/be-by.json +++ b/src/strings/be-by.json @@ -1,7 +1,7 @@ { "ButtonCancel": "Адмяніць", "ButtonOk": "ОК", - "ButtonQuickStartGuide": "Даведнік па пачатку працы", + "ButtonQuickStartGuide": "Кіраўніцтва па наладзе", "ButtonSignOut": "Выйсці", "HeaderEasyPinCode": "Easy PIN-код", "HeaderPaths": "Шляхі", From 6a8c96cc8c98fa396e2593b78e8cd4c230a4b14f Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Tue, 3 Jun 2025 22:04:45 +0300 Subject: [PATCH 355/645] Add backup dashboard pages --- .../drawer/sections/AdvancedDrawerSection.tsx | 9 + .../features/backups/api/useBackups.ts | 27 +++ .../features/backups/api/useCreateBackup.ts | 25 +++ .../features/backups/api/useRestoreBackup.ts | 19 ++ .../features/backups/components/Backup.tsx | 68 +++++++ .../backups/components/BackupInfoDialog.tsx | 135 ++++++++++++ .../components/BackupProgressDialog.tsx | 27 +++ .../backups/components/CreateBackupForm.tsx | 123 +++++++++++ .../components/RestoreConfirmationDialog.tsx | 46 +++++ .../components/RestoreProgressDialog.tsx | 32 +++ src/apps/dashboard/routes/_asyncRoutes.ts | 1 + src/apps/dashboard/routes/backups/index.tsx | 192 ++++++++++++++++++ src/strings/en-us.json | 15 ++ 13 files changed, 719 insertions(+) create mode 100644 src/apps/dashboard/features/backups/api/useBackups.ts create mode 100644 src/apps/dashboard/features/backups/api/useCreateBackup.ts create mode 100644 src/apps/dashboard/features/backups/api/useRestoreBackup.ts create mode 100644 src/apps/dashboard/features/backups/components/Backup.tsx create mode 100644 src/apps/dashboard/features/backups/components/BackupInfoDialog.tsx create mode 100644 src/apps/dashboard/features/backups/components/BackupProgressDialog.tsx create mode 100644 src/apps/dashboard/features/backups/components/CreateBackupForm.tsx create mode 100644 src/apps/dashboard/features/backups/components/RestoreConfirmationDialog.tsx create mode 100644 src/apps/dashboard/features/backups/components/RestoreProgressDialog.tsx create mode 100644 src/apps/dashboard/routes/backups/index.tsx diff --git a/src/apps/dashboard/components/drawer/sections/AdvancedDrawerSection.tsx b/src/apps/dashboard/components/drawer/sections/AdvancedDrawerSection.tsx index 97d8f2671..4d5508aba 100644 --- a/src/apps/dashboard/components/drawer/sections/AdvancedDrawerSection.tsx +++ b/src/apps/dashboard/components/drawer/sections/AdvancedDrawerSection.tsx @@ -1,4 +1,5 @@ import Article from '@mui/icons-material/Article'; +import Backup from '@mui/icons-material/Backup'; import Lan from '@mui/icons-material/Lan'; import Schedule from '@mui/icons-material/Schedule'; import VpnKey from '@mui/icons-material/VpnKey'; @@ -38,6 +39,14 @@ const AdvancedDrawerSection = () => { + + + + + + + + diff --git a/src/apps/dashboard/features/backups/api/useBackups.ts b/src/apps/dashboard/features/backups/api/useBackups.ts new file mode 100644 index 000000000..22b45d2ae --- /dev/null +++ b/src/apps/dashboard/features/backups/api/useBackups.ts @@ -0,0 +1,27 @@ +import { Api } from '@jellyfin/sdk'; +import { BackupApi } from '@jellyfin/sdk/lib/generated-client/api/backup-api'; +import { useQuery } from '@tanstack/react-query'; +import type { AxiosRequestConfig } from 'axios'; +import { useApi } from 'hooks/useApi'; + +export const QUERY_KEY = 'Backups'; + +const fetchBackups = async (api: Api, options?: AxiosRequestConfig) => { + // FIXME: Replace with getBackupApi when available in SDK + const backupApi = new BackupApi(api.configuration, undefined, api.axiosInstance); + + const response = await backupApi.listBackups(options); + + return response.data; +}; + +export const useBackups = () => { + const { api } = useApi(); + + return useQuery({ + queryKey: [ QUERY_KEY ], + queryFn: ({ signal }) => + fetchBackups(api!, { signal }), + enabled: !!api + }); +}; diff --git a/src/apps/dashboard/features/backups/api/useCreateBackup.ts b/src/apps/dashboard/features/backups/api/useCreateBackup.ts new file mode 100644 index 000000000..19861d096 --- /dev/null +++ b/src/apps/dashboard/features/backups/api/useCreateBackup.ts @@ -0,0 +1,25 @@ +import type { BackupOptionsDto } from '@jellyfin/sdk/lib/generated-client/models/backup-options-dto'; +import { BackupApi } from '@jellyfin/sdk/lib/generated-client/api/backup-api'; +import { useMutation } from '@tanstack/react-query'; +import { useApi } from 'hooks/useApi'; +import { QUERY_KEY } from './useBackups'; +import { queryClient } from 'utils/query/queryClient'; + +export const useCreateBackup = () => { + const { api } = useApi(); + // FIXME: Replace with getBackupApi when available in SDK + const backupApi = new BackupApi(api?.configuration, undefined, api?.axiosInstance); + + return useMutation({ + mutationFn: (backupOptions: BackupOptionsDto) => ( + backupApi.createBackup({ + backupOptionsDto: backupOptions + }) + ), + onSuccess: () => { + void queryClient.invalidateQueries({ + queryKey: [ QUERY_KEY ] + }); + } + }); +}; diff --git a/src/apps/dashboard/features/backups/api/useRestoreBackup.ts b/src/apps/dashboard/features/backups/api/useRestoreBackup.ts new file mode 100644 index 000000000..0ecafbfb5 --- /dev/null +++ b/src/apps/dashboard/features/backups/api/useRestoreBackup.ts @@ -0,0 +1,19 @@ +import { BackupApi } from '@jellyfin/sdk/lib/generated-client/api/backup-api'; +import { useMutation } from '@tanstack/react-query'; +import { useApi } from 'hooks/useApi'; + +export const useRestoreBackup = () => { + const { api } = useApi(); + // FIXME: Replace with getBackupApi when available in SDK + const backupApi = new BackupApi(api?.configuration, undefined, api?.axiosInstance); + + return useMutation({ + mutationFn: (fileName: string) => ( + backupApi.startRestoreBackup({ + backupRestoreRequestDto: { + ArchiveFileName: fileName + } + }) + ) + }); +}; diff --git a/src/apps/dashboard/features/backups/components/Backup.tsx b/src/apps/dashboard/features/backups/components/Backup.tsx new file mode 100644 index 000000000..e7c622d3b --- /dev/null +++ b/src/apps/dashboard/features/backups/components/Backup.tsx @@ -0,0 +1,68 @@ +import React, { FunctionComponent, useCallback, useState } from 'react'; +import type { BackupManifestDto } from '@jellyfin/sdk/lib/generated-client/models/backup-manifest-dto'; +import IconButton from '@mui/material/IconButton'; +import ListItem from '@mui/material/ListItem'; +import Restore from '@mui/icons-material/Restore'; +import ListItemButton from '@mui/material/ListItemButton'; +import ListItemText from '@mui/material/ListItemText'; +import Tooltip from '@mui/material/Tooltip'; +import globalize from 'lib/globalize'; +import BackupInfoDialog from './BackupInfoDialog'; + +type BackupProps = { + backup: BackupManifestDto; + onRestore: (backup: BackupManifestDto) => void; +}; + +const Backup: FunctionComponent = ({ backup, onRestore }) => { + const [ isInfoDialogOpen, setIsInfoDialogOpen ] = useState(false); + + const onDialogClose = useCallback(() => { + setIsInfoDialogOpen(false); + }, []); + + const openDialog = useCallback(() => { + setIsInfoDialogOpen(true); + }, []); + + const restore = useCallback(() => { + onRestore(backup); + }, [ backup, onRestore ]); + + return ( + <> + + + + + + + } + > + + + + + + ); +}; + +export default Backup; diff --git a/src/apps/dashboard/features/backups/components/BackupInfoDialog.tsx b/src/apps/dashboard/features/backups/components/BackupInfoDialog.tsx new file mode 100644 index 000000000..d83a768fb --- /dev/null +++ b/src/apps/dashboard/features/backups/components/BackupInfoDialog.tsx @@ -0,0 +1,135 @@ +import type { BackupManifestDto } from '@jellyfin/sdk/lib/generated-client/models/backup-manifest-dto'; +import Typography from '@mui/material/Typography'; +import Button from '@mui/material/Button'; +import Dialog from '@mui/material/Dialog'; +import DialogActions from '@mui/material/DialogActions'; +import DialogContent from '@mui/material/DialogContent'; +import DialogTitle from '@mui/material/DialogTitle'; +import Box from '@mui/material/Box'; +import globalize from 'lib/globalize'; +import React, { FunctionComponent, useCallback } from 'react'; +import Stack from '@mui/material/Stack'; +import FormGroup from '@mui/material/FormGroup'; +import FormControl from '@mui/material/FormControl'; +import FormControlLabel from '@mui/material/FormControlLabel'; +import Checkbox from '@mui/material/Checkbox'; +import ContentCopy from '@mui/icons-material/ContentCopy'; +import IconButton from '@mui/material/IconButton'; +import { copy } from 'scripts/clipboard'; +import toast from 'components/toast/toast'; + +type IProps = { + backup: BackupManifestDto; + open: boolean; + onClose: () => void; +}; + +const BackupInfoDialog: FunctionComponent = ({ backup, open, onClose }: IProps) => { + const copyPath = useCallback(async () => { + if (backup.Path) { + await copy(backup.Path); + toast({ text: globalize.translate('Copied') }); + } + }, [ backup.Path ]); + + return ( + + + {backup.DateCreated} + + + + + + + {globalize.translate('LabelPath')} + + {backup.Path} + + + + + + + {globalize.translate('LabelVersion')} + {backup.ServerVersion} + + + + + + + } + label={globalize.translate('LabelDatabase')} + /> + + + + + } + label={globalize.translate('LabelMetadata')} + /> + + + + + } + label={globalize.translate('Subtitles')} + /> + + + + + } + label={globalize.translate('Trickplay')} + /> + + + + + + + + + + ); +}; + +export default BackupInfoDialog; diff --git a/src/apps/dashboard/features/backups/components/BackupProgressDialog.tsx b/src/apps/dashboard/features/backups/components/BackupProgressDialog.tsx new file mode 100644 index 000000000..bcf158d2a --- /dev/null +++ b/src/apps/dashboard/features/backups/components/BackupProgressDialog.tsx @@ -0,0 +1,27 @@ +import React, { FunctionComponent } from 'react'; +import Dialog from '@mui/material/Dialog'; +import DialogContent from '@mui/material/DialogContent'; +import DialogTitle from '@mui/material/DialogTitle'; +import LinearProgress from '@mui/material/LinearProgress'; +import globalize from 'lib/globalize'; + +type IProps = { + open: boolean +}; + +const BackupProgressDialog: FunctionComponent = ({ open }) => { + return ( + + {globalize.translate('MessageBackupInProgress')} + + + + + ); +}; + +export default BackupProgressDialog; diff --git a/src/apps/dashboard/features/backups/components/CreateBackupForm.tsx b/src/apps/dashboard/features/backups/components/CreateBackupForm.tsx new file mode 100644 index 000000000..5d62d9e39 --- /dev/null +++ b/src/apps/dashboard/features/backups/components/CreateBackupForm.tsx @@ -0,0 +1,123 @@ +import React, { FunctionComponent, useCallback } from 'react'; +import globalize from 'lib/globalize'; +import type { BackupOptionsDto } from '@jellyfin/sdk/lib/generated-client/models/backup-options-dto'; +import Dialog from '@mui/material/Dialog'; +import DialogTitle from '@mui/material/DialogTitle'; +import DialogContent from '@mui/material/DialogContent'; +import Stack from '@mui/material/Stack'; +import DialogActions from '@mui/material/DialogActions'; +import Button from '@mui/material/Button'; +import FormControl from '@mui/material/FormControl'; +import FormControlLabel from '@mui/material/FormControlLabel'; +import Checkbox from '@mui/material/Checkbox'; +import FormGroup from '@mui/material/FormGroup'; +import DialogContentText from '@mui/material/DialogContentText'; + +type IProps = { + open: boolean, + onClose?: () => void, + onCreate: (backupOptions: BackupOptionsDto) => void +}; + +const CreateBackupForm: FunctionComponent = ({ open, onClose, onCreate }) => { + const onSubmit = useCallback((e: React.FormEvent) => { + e.preventDefault(); + + const formData = new FormData(e.currentTarget); + + const data = Object.fromEntries(formData.entries()); + + const backupOptions: BackupOptionsDto = { + 'Metadata': data.Metadata?.toString() === 'on', + 'Trickplay': data.Trickplay?.toString() === 'on', + 'Subtitles': data.Subtitles?.toString() === 'on' + }; + + onCreate(backupOptions); + }, [ onCreate ]); + + return ( + + {globalize.translate('ButtonCreateBackup')} + + + + + {globalize.translate('MessageBackupDisclaimer')} + + + + + } + label={globalize.translate('LabelDatabase')} + /> + + + + + } + label={globalize.translate('LabelMetadata')} + /> + + + + + } + label={globalize.translate('Subtitles')} + /> + + + + + } + label={globalize.translate('Trickplay')} + /> + + + + + + + + + + + ); +}; + +export default CreateBackupForm; diff --git a/src/apps/dashboard/features/backups/components/RestoreConfirmationDialog.tsx b/src/apps/dashboard/features/backups/components/RestoreConfirmationDialog.tsx new file mode 100644 index 000000000..0456e1122 --- /dev/null +++ b/src/apps/dashboard/features/backups/components/RestoreConfirmationDialog.tsx @@ -0,0 +1,46 @@ +import Button from '@mui/material/Button'; +import Dialog from '@mui/material/Dialog'; +import DialogActions from '@mui/material/DialogActions'; +import DialogContent from '@mui/material/DialogContent'; +import DialogContentText from '@mui/material/DialogContentText'; +import DialogTitle from '@mui/material/DialogTitle'; +import globalize from 'lib/globalize'; +import React, { FunctionComponent } from 'react'; + +type IProps = { + open: boolean; + onClose: () => void; + onConfirm: () => void; +}; + +const RestoreConfirmationDialog: FunctionComponent = ({ open, onClose, onConfirm }: IProps) => { + return ( + + + {globalize.translate('Restore')} + + + + + {globalize.translate('MessageRestoreDisclaimer')} + + + + + + + + + ); +}; + +export default RestoreConfirmationDialog; diff --git a/src/apps/dashboard/features/backups/components/RestoreProgressDialog.tsx b/src/apps/dashboard/features/backups/components/RestoreProgressDialog.tsx new file mode 100644 index 000000000..937aaafba --- /dev/null +++ b/src/apps/dashboard/features/backups/components/RestoreProgressDialog.tsx @@ -0,0 +1,32 @@ +import React, { FunctionComponent } from 'react'; +import Dialog from '@mui/material/Dialog'; +import DialogContent from '@mui/material/DialogContent'; +import DialogTitle from '@mui/material/DialogTitle'; +import LinearProgress from '@mui/material/LinearProgress'; +import DialogContentText from '@mui/material/DialogContentText'; +import Stack from '@mui/material/Stack'; +import globalize from 'lib/globalize'; + +type IProps = { + open: boolean +}; + +const RestoreProgressDialog: FunctionComponent = ({ open }) => { + return ( + + {globalize.translate('MessageRestoreInProgress')} + + + {globalize.translate('MessageWaitingForServer')} + + + + + ); +}; + +export default RestoreProgressDialog; diff --git a/src/apps/dashboard/routes/_asyncRoutes.ts b/src/apps/dashboard/routes/_asyncRoutes.ts index 2ab21c5d4..10d4fb838 100644 --- a/src/apps/dashboard/routes/_asyncRoutes.ts +++ b/src/apps/dashboard/routes/_asyncRoutes.ts @@ -3,6 +3,7 @@ import { AppType } from 'constants/appType'; export const ASYNC_ADMIN_ROUTES: AsyncRoute[] = [ { path: 'activity', type: AppType.Dashboard }, + { path: 'backups', type: AppType.Dashboard }, { path: 'branding', type: AppType.Dashboard }, { path: 'devices', type: AppType.Dashboard }, { path: 'settings', type: AppType.Dashboard }, diff --git a/src/apps/dashboard/routes/backups/index.tsx b/src/apps/dashboard/routes/backups/index.tsx new file mode 100644 index 000000000..6cbf92e27 --- /dev/null +++ b/src/apps/dashboard/routes/backups/index.tsx @@ -0,0 +1,192 @@ +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import Stack from '@mui/material/Stack'; +import Typography from '@mui/material/Typography'; +import AddIcon from '@mui/icons-material/Add'; +import { useBackups } from 'apps/dashboard/features/backups/api/useBackups'; +import Page from 'components/Page'; +import globalize from 'lib/globalize'; +import React, { useCallback, useEffect, useMemo, useState } from 'react'; +import Loading from 'components/loading/LoadingComponent'; +import Alert from '@mui/material/Alert'; +import List from '@mui/material/List'; +import CreateBackupForm from 'apps/dashboard/features/backups/components/CreateBackupForm'; +import type { BackupOptionsDto } from '@jellyfin/sdk/lib/generated-client/models/backup-options-dto'; +import type { BackupManifestDto } from '@jellyfin/sdk/lib/generated-client/models/backup-manifest-dto'; +import { useCreateBackup } from 'apps/dashboard/features/backups/api/useCreateBackup'; +import BackupProgressDialog from 'apps/dashboard/features/backups/components/BackupProgressDialog'; +import Backup from 'apps/dashboard/features/backups/components/Backup'; +import SimpleAlert from 'components/SimpleAlert'; +import RestoreConfirmationDialog from 'apps/dashboard/features/backups/components/RestoreConfirmationDialog'; +import { useRestoreBackup } from 'apps/dashboard/features/backups/api/useRestoreBackup'; +import RestoreProgressDialog from 'apps/dashboard/features/backups/components/RestoreProgressDialog'; +import { useApi } from 'hooks/useApi'; +import { getSystemApi } from '@jellyfin/sdk/lib/utils/api/system-api'; + +export const Component = () => { + const { api } = useApi(); + const { data: backups, isPending, isError } = useBackups(); + const [ isCreateFormOpen, setIsCreateFormOpen ] = useState(false); + const [ backupInProgress, setBackupInProgress ] = useState(false); + const [ restoreInProgress, setRestoreInProgress ] = useState(false); + const [ isRestoreSuccess, setIsRestoreSuccess ] = useState(false); + const [ isErrorOccurred, setIsErrorOccurred ] = useState(false); + const [ isRestoreDialogOpen, setIsRestoreDialogOpen ] = useState(false); + const [ backupToRestore, setBackupToRestore ] = useState(null); + const createBackup = useCreateBackup(); + const restoreBackup = useRestoreBackup(); + + const onCreateClick = useCallback(() => { + setIsCreateFormOpen(true); + }, []); + + const onCreateFormClose = useCallback(() => { + setIsCreateFormOpen(false); + }, []); + + const onRestoreDialogClose = useCallback(() => { + setIsRestoreDialogOpen(false); + }, []); + + const onErrorAlertClose = useCallback(() => { + setIsErrorOccurred(false); + }, []); + + const onRestoreSuccessAlertClose = useCallback(() => { + setIsRestoreSuccess(false); + }, []); + + const onBackupCreate = useCallback((backupOptions: BackupOptionsDto) => { + setBackupInProgress(true); + setIsCreateFormOpen(false); + createBackup.mutate(backupOptions, { + onError: () => { + setIsErrorOccurred(true); + }, + onSettled: () => { + setBackupInProgress(false); + } + }); + }, [ createBackup ]); + + const promptRestore = useCallback((backup: BackupManifestDto) => { + setIsRestoreDialogOpen(true); + setBackupToRestore(backup); + }, []); + + const onRestoreConfirm = useCallback(() => { + if (backupToRestore?.Path) { + restoreBackup.mutate(backupToRestore?.Path, { + onSuccess: () => { + setRestoreInProgress(true); + }, + onError: () => { + setIsErrorOccurred(true); + }, + onSettled: () => { + setIsRestoreDialogOpen(false); + } + }); + } + }, [backupToRestore?.Path, restoreBackup]); + + useEffect(() => { + if (restoreInProgress) { + const serverCheckInterval = setInterval(() => { + void getSystemApi(api!) + .getPublicSystemInfo() + .then(() => { + setRestoreInProgress(false); + setIsRestoreSuccess(true); + clearInterval(serverCheckInterval); + }); + }, 5000); + + return () => { + clearInterval(serverCheckInterval); + }; + } + }, [api, restoreInProgress]); + + const sortedBackups = useMemo(() => ( + backups?.sort((a, b) => { + if (a.DateCreated && b.DateCreated) { + return new Date(b.DateCreated).getTime() - new Date(a.DateCreated).getTime(); + } else { + return 0; + } + }) + ), [ backups ]); + + if (isPending) { + return ; + } + + return ( + + + + + + + + + {isError ? ( + {globalize.translate('BackupsPageLoadError')} + ) : ( + + + {globalize.translate('TabBackups')} + + + {globalize.translate('HeaderBackupsHelp')} + + + + + + {backups.length > 0 && ( + + {sortedBackups?.map(backup => { + return ; + })} + + )} + + + )} + + + ); +}; diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 5402157b2..411e56a72 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -76,6 +76,7 @@ "Backdrop": "Backdrop", "Backdrops": "Backdrops", "BackdropScreensaver": "Backdrop Screensaver", + "BackupsPageLoadError": "Failed to load backups page", "Banner": "Banner", "BirthDateValue": "Born: {0}", "BirthLocation": "Birth location", @@ -104,6 +105,7 @@ "ButtonCast": "Cast to Device", "ButtonChangeServer": "Change Server", "ButtonClose": "Close", + "ButtonCreateBackup": "Create Backup", "ButtonEditOtherUserPreferences": "Edit this user's profile, image and personal preferences.", "ButtonEditUser": "Edit user", "ButtonForgotPassword": "Forgot Password", @@ -190,6 +192,7 @@ "CopyStreamURLSuccess": "URL copied successfully.", "CopyLogSuccess": "Log contents copied successfully.", "CoverArtist": "Cover artist", + "Create": "Create", "Creator": "Creator", "CriticRating": "Critics rating", "Cursive": "Cursive", @@ -388,6 +391,7 @@ "HeaderAudioSettings": "Audio Settings", "HeaderAutoDiscovery": "Network Discovery", "HeaderBlockItemsWithNoRating": "Block items with no or unrecognized rating information", + "HeaderBackupsHelp": "Create and restore snapshots of your server which can include the database, metadata, subtitles and trickplay.", "HeaderBranding": "Branding", "HeaderCancelRecording": "Cancel Recording", "HeaderCancelSeries": "Cancel Series", @@ -617,6 +621,7 @@ "LabelAutomaticallyRefreshInternetMetadataEvery": "Automatically refresh metadata from the internet", "LabelAutomaticDiscovery": "Enable Auto Discovery", "LabelAutomaticDiscoveryHelp": "Allow applications to automatically detect Jellyfin by using UDP port 7359.", + "LabelBackupsUnavailable": "No backups available", "LabelBaseUrl": "Base URL", "LabelBaseUrlHelp": "Add a custom subdirectory to the server URL. For example: http://example.com/<baseurl>", "LabelBackdropScreensaverInterval": "Backdrop Screensaver Interval", @@ -661,6 +666,7 @@ "LabelCustomTagDelimiters": "Custom Tag Delimiter", "LabelCustomTagDelimitersHelp": "Characters to be treated as delimiters to separate tags.", "LabelDashboardTheme": "Server Dashboard theme", + "LabelDatabase": "Database", "LabelDate": "Date", "LabelDateAdded": "Date added", "LabelDateAddedBehavior": "Date added behavior for new content", @@ -881,6 +887,7 @@ "LabelRepositoryUrlHelp": "The location of the repository manifest you want to include.", "LabelRequireHttps": "Require HTTPS", "LabelRequireHttpsHelp": "If checked, the server will automatically redirect all requests over HTTP to HTTPS. This has no effect if the server is not listening on HTTPS.", + "LabelRestore": "Restore", "LabelRuntimeMinutes": "Runtime", "LabelSaveLocalMetadata": "Save artwork into media folders", "LabelSaveLocalMetadataHelp": "Saving artwork into media folders will put them in a place where they can be easily edited.", @@ -1109,6 +1116,8 @@ "MessageAddRepository": "If you wish to add a repository, click the button next to the header and fill out the requested information.", "MessageAreYouSureDeleteSubtitles": "Are you sure you wish to delete this subtitle file?", "MessageAreYouSureYouWishToRemoveMediaFolder": "Are you sure you wish to remove this media folder?", + "MessageBackupDisclaimer": "Depending on the size of your library, the backup process may take a while.", + "MessageBackupInProgress": "Backup in progress", "MessageBrowsePluginCatalog": "Browse our plugin catalog to view available plugins.", "MessageCancelSeriesTimerError": "An error occurred while canceling the series timer", "MessageCancelTimerError": "An error occurred while canceling the timer", @@ -1163,6 +1172,9 @@ "MessageReenableUser": "See below to reenable", "MessageRenameMediaFolder": "Renaming a media library will cause all metadata to be lost, proceed with caution.", "MessageRepositoryInstallDisclaimer": "WARNING: Installing a third party plugin repository carries risks. It may contain unstable or malicious code, and may change at any time. Only install repositories from authors that you trust.", + "MessageRestoreDisclaimer": "WARNING: You are about to restore from a previous backup. Your server will be rendered unusable for the duration of the process and any new data created since the backup will be lost.", + "MessageRestoreInProgress": "Restore in progress", + "MessageRestoreSuccess": "Restore successfully completed", "MessageSent": "Message sent.", "MessageSplitVersionsError": "An error occurred while splitting versions", "MessageSyncPlayCreateGroupDenied": "Permission required to create a group.", @@ -1185,6 +1197,7 @@ "MessageUnableToConnectToServer": "We're unable to connect to the selected server right now. Please ensure it is running and try again.", "MessageUnauthorizedUser": "You are not authorized to access the server at this time. Please contact your server administrator for more information.", "MessageUnsetContentHelp": "Content will be displayed as plain folders. For best results use the metadata manager to set the content types of sub-folders.", + "MessageWaitingForServer": "Waiting for server...", "MetadataImagesLoadError": "Failed to load metadata settings", "MetadataManager": "Metadata Manager", "MetadataNfoLoadError": "Failed to load metadata NFO settings", @@ -1565,12 +1578,14 @@ "SubtitleVerticalPositionHelp": "Line number where text appears. Positive numbers indicate top down. Negative numbers indicate bottom up.", "SubtitleWhite": "White", "SubtitleYellow": "Yellow", + "Success": "Success", "Suggestions": "Suggestions", "Sunday": "Sunday", "SyncPlayAccessHelp": "The SyncPlay feature enables to sync playback with other devices. Select the level of access this user has to the SyncPlay.", "SyncPlayGroupDefaultTitle": "{0}'s group", "TabAccess": "Access", "TabAdvanced": "Advanced", + "TabBackups": "Backups", "TabCatalog": "Catalog", "TabDashboard": "Dashboard", "TabLatest": "Recently Added", From 09063d3376f1008da7acc46b775d092e64f3bdb7 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 3 Jun 2025 16:28:22 -0400 Subject: [PATCH 356/645] Migrate paths dashboard widget to react and add storage metrics --- .../components/widgets/ServerPathWidget.tsx | 67 +++++++++++ src/apps/dashboard/controllers/dashboard.html | 39 +------ src/apps/dashboard/controllers/dashboard.js | 45 ++++---- .../features/storage/api/useSystemStorage.ts | 28 +++++ .../storage/components/StorageListItem.tsx | 105 ++++++++++++++++++ .../storage/components/StorageTypeIcon.tsx | 31 ++++++ .../features/storage/constants/StorageType.ts | 13 +++ src/strings/en-us.json | 9 ++ src/utils/file.test.ts | 22 ++++ src/utils/file.ts | 8 ++ src/utils/reactUtils.tsx | 36 +++--- 11 files changed, 322 insertions(+), 81 deletions(-) create mode 100644 src/apps/dashboard/components/widgets/ServerPathWidget.tsx create mode 100644 src/apps/dashboard/features/storage/api/useSystemStorage.ts create mode 100644 src/apps/dashboard/features/storage/components/StorageListItem.tsx create mode 100644 src/apps/dashboard/features/storage/components/StorageTypeIcon.tsx create mode 100644 src/apps/dashboard/features/storage/constants/StorageType.ts create mode 100644 src/utils/file.test.ts diff --git a/src/apps/dashboard/components/widgets/ServerPathWidget.tsx b/src/apps/dashboard/components/widgets/ServerPathWidget.tsx new file mode 100644 index 000000000..98fe4be57 --- /dev/null +++ b/src/apps/dashboard/components/widgets/ServerPathWidget.tsx @@ -0,0 +1,67 @@ +import ChevronRight from '@mui/icons-material/ChevronRight'; +import Button from '@mui/material/Button'; +import List from '@mui/material/List'; +import Typography from '@mui/material/Typography'; +import React from 'react'; + +import { useSystemStorage } from 'apps/dashboard/features/storage/api/useSystemStorage'; +import StorageListItem from 'apps/dashboard/features/storage/components/StorageListItem'; +import globalize from 'lib/globalize'; + +const ServerPathWidget = () => { + const { data: systemStorage } = useSystemStorage(); + + return ( + <> + + + + + + + + + + + + + ); +}; + +export default ServerPathWidget; diff --git a/src/apps/dashboard/controllers/dashboard.html b/src/apps/dashboard/controllers/dashboard.html index 5c449c5e9..55906b688 100644 --- a/src/apps/dashboard/controllers/dashboard.html +++ b/src/apps/dashboard/controllers/dashboard.html @@ -75,44 +75,7 @@ -
- -

${HeaderPaths}

- -
-
-
-
-
${LabelCache}
-
-
-
-
-
-
${LabelLogs}
-
-
-
-
-
-
${LabelMetadata}
-
-
-
-
-
-
${LabelTranscodes}
-
-
-
-
-
-
${LabelWeb}
-
-
-
-
-
+
diff --git a/src/apps/dashboard/controllers/dashboard.js b/src/apps/dashboard/controllers/dashboard.js index 2388ac717..adc062c0b 100644 --- a/src/apps/dashboard/controllers/dashboard.js +++ b/src/apps/dashboard/controllers/dashboard.js @@ -1,30 +1,31 @@ import escapeHtml from 'escape-html'; -import datetime from 'scripts/datetime'; -import Events from 'utils/events.ts'; +import ServerPathWidget from 'apps/dashboard/components/widgets/ServerPathWidget'; +import ActivityLog from 'components/activitylog'; +import alert from 'components/alert'; +import cardBuilder from 'components/cardbuilder/cardBuilder'; +import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUtils'; +import confirm from 'components/confirm/confirm'; +import imageLoader from 'components/images/imageLoader'; +import indicators from 'components/indicators/indicators'; import itemHelper from 'components/itemHelper'; -import serverNotifications from 'scripts/serverNotifications'; -import dom from 'scripts/dom'; -import globalize from 'lib/globalize'; -import { formatDistanceToNow } from 'date-fns'; -import { getLocaleWithSuffix } from 'utils/dateFnsLocale.ts'; import loading from 'components/loading/loading'; import playMethodHelper from 'components/playback/playmethodhelper'; -import cardBuilder from 'components/cardbuilder/cardBuilder'; -import imageLoader from 'components/images/imageLoader'; -import ActivityLog from 'components/activitylog'; -import imageHelper from 'utils/image'; -import indicators from 'components/indicators/indicators'; +import { formatDistanceToNow } from 'date-fns'; +import { getSystemInfoQuery } from 'hooks/useSystemInfo'; +import globalize from 'lib/globalize'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; +import datetime from 'scripts/datetime'; +import dom from 'scripts/dom'; +import serverNotifications from 'scripts/serverNotifications'; import taskButton from 'scripts/taskbutton'; import Dashboard from 'utils/dashboard'; -import alert from 'components/alert'; -import confirm from 'components/confirm/confirm'; -import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUtils'; - -import { getSystemInfoQuery } from 'hooks/useSystemInfo'; -import { ServerConnections } from 'lib/jellyfin-apiclient'; +import { getLocaleWithSuffix } from 'utils/dateFnsLocale.ts'; +import Events from 'utils/events.ts'; +import imageHelper from 'utils/image'; import { toApi } from 'utils/jellyfin-apiclient/compat'; import { queryClient } from 'utils/query/queryClient'; +import { renderComponent } from 'utils/reactUtils'; import 'elements/emby-button/emby-button'; import 'elements/emby-itemscontainer/emby-itemscontainer'; @@ -220,12 +221,6 @@ function reloadSystemInfo(view, apiClient) { .then(systemInfo => { view.querySelector('#serverName').innerText = systemInfo.ServerName; view.querySelector('#versionNumber').innerText = systemInfo.Version; - - view.querySelector('#cachePath').innerText = systemInfo.CachePath; - view.querySelector('#logPath').innerText = systemInfo.LogPath; - view.querySelector('#transcodePath').innerText = systemInfo.TranscodingTempPath; - view.querySelector('#metadataPath').innerText = systemInfo.InternalMetadataPath; - view.querySelector('#webPath').innerText = systemInfo.WebPath; }); } @@ -827,6 +822,8 @@ export default function (view) { button: page.querySelector('.btnRefresh') }); + renderComponent(ServerPathWidget, {}, page.querySelector('#serverPaths')); + page.querySelector('#btnRestartServer').addEventListener('click', DashboardPage.restart); page.querySelector('#btnShutdown').addEventListener('click', DashboardPage.shutdown); }); diff --git a/src/apps/dashboard/features/storage/api/useSystemStorage.ts b/src/apps/dashboard/features/storage/api/useSystemStorage.ts new file mode 100644 index 000000000..12db4a171 --- /dev/null +++ b/src/apps/dashboard/features/storage/api/useSystemStorage.ts @@ -0,0 +1,28 @@ +import type { Api } from '@jellyfin/sdk'; +import { getSystemApi } from '@jellyfin/sdk/lib/utils/api/system-api'; +import { queryOptions, useQuery } from '@tanstack/react-query'; +import type { AxiosRequestConfig } from 'axios'; + +import { useApi } from 'hooks/useApi'; + +const fetchSystemStorage = async ( + api: Api, + options?: AxiosRequestConfig +) => { + const response = await getSystemApi(api) + .getSystemStorage(options); + return response.data; +}; + +const getSystemStorageQuery = ( + api?: Api +) => queryOptions({ + queryKey: [ 'SystemStorage' ], + queryFn: ({ signal }) => fetchSystemStorage(api!, { signal }), + enabled: !!api +}); + +export const useSystemStorage = () => { + const { api } = useApi(); + return useQuery(getSystemStorageQuery(api)); +}; diff --git a/src/apps/dashboard/features/storage/components/StorageListItem.tsx b/src/apps/dashboard/features/storage/components/StorageListItem.tsx new file mode 100644 index 000000000..5d63b6446 --- /dev/null +++ b/src/apps/dashboard/features/storage/components/StorageListItem.tsx @@ -0,0 +1,105 @@ +import type { FolderStorageDto } from '@jellyfin/sdk/lib/generated-client'; +import LinearProgress from '@mui/material/LinearProgress'; +import ListItem from '@mui/material/ListItem'; +import ListItemIcon from '@mui/material/ListItemIcon'; +import ListItemText from '@mui/material/ListItemText'; +import Skeleton from '@mui/material/Skeleton'; +import Typography from '@mui/material/Typography'; +import React, { type FC } from 'react'; + +import globalize from 'lib/globalize'; +import { getReadableSize } from 'utils/file'; + +import { StorageType } from '../constants/StorageType'; + +import StorageTypeIcon from './StorageTypeIcon'; + +interface StorageListItemProps { + label: string + folder?: FolderStorageDto +} + +const calculateUsed = (folder?: FolderStorageDto) => { + if (typeof folder?.UsedSpace === 'undefined') return 0; + if (typeof folder.FreeSpace === 'undefined') return 100; + + return folder.UsedSpace / (folder.FreeSpace + folder.UsedSpace) * 100; +}; + +const getStatusColor = (percent: number) => { + if (percent >= 90) return 'error'; + if (percent >= 80) return 'warning'; + return 'success'; +}; + +const getStorageTypeText = (type?: string | null) => { + if (!type) return undefined; + + if (Object.keys(StorageType).includes(type)) { + return globalize.translate(`StorageType.${type}`); + } + + return type; +}; + +const StorageListItem: FC = ({ + label, + folder +}) => { + const usedSpace = (typeof folder?.UsedSpace === 'undefined') ? '?' : getReadableSize(folder.UsedSpace); + const totalSpace = (typeof folder?.FreeSpace === 'undefined' || typeof folder.UsedSpace === 'undefined') ? + '?' : getReadableSize(folder.FreeSpace + folder.UsedSpace); + const usedPercent = calculateUsed(folder); + const statusColor = folder ? getStatusColor(usedPercent) : 'primary'; + + return ( + + + + + + {label} + + } + secondary={ + <> + + {folder ? folder.Path : ( + + )} + + + + {`${usedSpace} / ${totalSpace}`} + + + } + slots={{ + secondary: 'div' + }} + /> + + ); +}; + +export default StorageListItem; diff --git a/src/apps/dashboard/features/storage/components/StorageTypeIcon.tsx b/src/apps/dashboard/features/storage/components/StorageTypeIcon.tsx new file mode 100644 index 000000000..4b62d455e --- /dev/null +++ b/src/apps/dashboard/features/storage/components/StorageTypeIcon.tsx @@ -0,0 +1,31 @@ +import Album from '@mui/icons-material/Album'; +import Lan from '@mui/icons-material/Lan'; +import Memory from '@mui/icons-material/Memory'; +import Storage from '@mui/icons-material/Storage'; +import Usb from '@mui/icons-material/Usb'; +import React, { type FC } from 'react'; + +import { StorageType } from '../constants/StorageType'; + +interface StorageTypeIconProps { + type?: string | null +} + +const StorageTypeIcon: FC = ({ + type +}) => { + switch (type) { + case StorageType.CDRom: + return ; + case StorageType.Network: + return ; + case StorageType.Ram: + return ; + case StorageType.Removable: + return ; + default: + return ; + } +}; + +export default StorageTypeIcon; diff --git a/src/apps/dashboard/features/storage/constants/StorageType.ts b/src/apps/dashboard/features/storage/constants/StorageType.ts new file mode 100644 index 000000000..2a0a4d83d --- /dev/null +++ b/src/apps/dashboard/features/storage/constants/StorageType.ts @@ -0,0 +1,13 @@ +/** + * Common storage type values returned by the API. + * NOTE: This list is not comprehensive as .NET might return any string. + */ +export enum StorageType { + CDRom = 'CDRom', + Fixed = 'Fixed', + Network = 'Network', + NoRootDirectory = 'NoRootDirectory', + Ram = 'Ram', + Removable = 'Removable', + Unknown = 'Unknown' +}; diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 5402157b2..4498cd36e 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -743,6 +743,7 @@ "LabelHomeScreenSectionValue": "Home screen section {0}", "LabelHttpsPort": "Local HTTPS port number", "LabelHttpsPortHelp": "The TCP port number for the HTTPS server.", + "LabelImageCache": "Image Cache", "LabelImageFetchersHelp": "Enable and rank your preferred image fetchers in order of priority.", "LabelImageType": "Image type", "LabelImportOnlyFavoriteChannels": "Restrict to channels marked as favorite", @@ -856,6 +857,7 @@ "LabelPreferredDisplayLanguage": "Preferred display language", "LabelPreferredSubtitleLanguage": "Preferred subtitle language", "LabelProfileContainer": "Container", + "LabelProgramData": "Program Data", "LabelProtocol": "Protocol", "LabelPublicHttpPort": "Public HTTP port number", "LabelPublicHttpPortHelp": "The public port number that should be mapped to the local HTTP port.", @@ -1545,6 +1547,13 @@ "StoryArc": "Story Arc", "StopPlayback": "Stop playback", "StopRecording": "Stop recording", + "StorageType.CDRom": "CD-ROM", + "StorageType.Fixed": "Fixed", + "StorageType.Network": "Network", + "StorageType.NoRootDirectory": "No Root Directory", + "StorageType.Ram": "RAM", + "StorageType.Removable": "Removable", + "StorageType.Unknown": "Unknown", "StreamCountExceedsLimit": "The number of streams exceeds the limit", "Studio": "Studio", "Studios": "Studios", diff --git a/src/utils/file.test.ts b/src/utils/file.test.ts new file mode 100644 index 000000000..1f23d4b96 --- /dev/null +++ b/src/utils/file.test.ts @@ -0,0 +1,22 @@ +import { describe, expect, it } from 'vitest'; +import { getReadableSize } from './file'; + +describe('getReadableSize()', () => { + it('should return the correct units', () => { + expect(getReadableSize(5)).toBe('5.0 Bytes'); + expect(getReadableSize(1024)).toBe('1.0 KiB'); + expect(getReadableSize(1024 * 1024)).toBe('1.0 MiB'); + expect(getReadableSize(1024 * 1024 * 1024)).toBe('1.0 GiB'); + expect(getReadableSize(1024 * 1024 * 1024 * 1024)).toBe('1.0 TiB'); + expect(getReadableSize(1024 * 1024 * 1024 * 1024 * 1024)).toBe('1.0 PiB'); + expect(getReadableSize(1024 * 1024 * 1024 * 1024 * 1024 * 1024)).toBe('1.0 EiB'); + expect(getReadableSize(1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024)).toBe('1.0 ZiB'); + expect(getReadableSize(1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024)).toBe('1.0 YiB'); + }); + + it('should return the correct precision', () => { + expect(getReadableSize(12345, 0)).toBe('12 KiB'); + expect(getReadableSize(12345, 2)).toBe('12.06 KiB'); + expect(getReadableSize(12345, 3)).toBe('12.056 KiB'); + }); +}); diff --git a/src/utils/file.ts b/src/utils/file.ts index 0019a5068..b82df8738 100644 --- a/src/utils/file.ts +++ b/src/utils/file.ts @@ -28,3 +28,11 @@ export function readFileAsText(file: File): Promise { reader.readAsText(file); }); } + +/** Gets a human readable string representing a file size in bytes */ +export function getReadableSize(value: number, precision = 1) { + let d = Math.log(value) / Math.log(1024) | 0; + + return (value / Math.pow(1024, d)).toFixed(precision) + + ' ' + (d ? 'KMGTPEZY'[--d] + 'iB' : 'Bytes'); +} diff --git a/src/utils/reactUtils.tsx b/src/utils/reactUtils.tsx index 097f18540..be4e518ec 100644 --- a/src/utils/reactUtils.tsx +++ b/src/utils/reactUtils.tsx @@ -1,36 +1,34 @@ -import { createRoot } from 'react-dom/client'; -import * as React from 'react'; +import { ThemeProvider } from '@mui/material/styles'; import { QueryClientProvider } from '@tanstack/react-query'; +import * as React from 'react'; +import { createRoot } from 'react-dom/client'; + import { ApiProvider } from 'hooks/useApi'; import { UserSettingsProvider } from 'hooks/useUserSettings'; import { WebConfigProvider } from 'hooks/useWebConfig'; +import appTheme from 'themes/themes'; import { queryClient } from 'utils/query/queryClient'; -import { useUserTheme } from 'hooks/useUserTheme'; -import { ThemeProvider } from '@mui/material/styles'; -import { getTheme } from 'themes/themes'; -export const attachReactElement = (Element: (props: object) => React.ReactNode, props: object, element: HTMLElement, replace = false) => { - const domNode = document.createElement('div'); - const root = createRoot(replace ? domNode : element); - root.render( - - - - ); - - if (replace) { - element.replaceWith(domNode); - } +export const renderComponent =

( + Component: React.FC

, + props: P, + element: HTMLElement +) => { + createRoot(element) + .render( + + + + ); }; const RootContext: React.FC = ({ children }) => { - const { theme } = useUserTheme(); return ( - + {children} From 0bbede9b074ee3cd8c6cef75d0dea69681aa7e81 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 3 Jun 2025 16:48:16 -0400 Subject: [PATCH 357/645] Use getReadableSize for all file size text --- src/components/itemMediaInfo/itemMediaInfo.js | 35 +++++++++++-------- src/components/playerstats/playerstats.js | 21 ++++------- 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/src/components/itemMediaInfo/itemMediaInfo.js b/src/components/itemMediaInfo/itemMediaInfo.js index 70c35e848..7ebe7464a 100644 --- a/src/components/itemMediaInfo/itemMediaInfo.js +++ b/src/components/itemMediaInfo/itemMediaInfo.js @@ -5,22 +5,27 @@ */ import escapeHtml from 'escape-html'; -import dialogHelper from '../dialogHelper/dialogHelper'; -import layoutManager from '../layoutManager'; -import toast from '../toast/toast'; -import { copy } from '../../scripts/clipboard'; -import dom from '../../scripts/dom'; -import globalize from '../../lib/globalize'; + +import dialogHelper from 'components/dialogHelper/dialogHelper'; +import itemHelper from 'components/itemHelper'; +import layoutManager from 'components/layoutManager'; +import loading from 'components/loading/loading'; +import toast from 'components/toast/toast'; +import globalize from 'lib/globalize'; import { ServerConnections } from 'lib/jellyfin-apiclient'; -import itemHelper from '../../components/itemHelper'; -import loading from '../loading/loading'; -import '../../elements/emby-select/emby-select'; -import '../listview/listview.scss'; -import '../../elements/emby-button/emby-button'; -import '../../elements/emby-button/paper-icon-button-light'; -import '../formdialog.scss'; +import { copy } from 'scripts/clipboard'; +import dom from 'scripts/dom'; +import { getReadableSize } from 'utils/file'; + +import 'components/formdialog.scss'; +import 'components/listview/listview.scss'; +import 'elements/emby-button/emby-button'; +import 'elements/emby-button/paper-icon-button-light'; +import 'elements/emby-select/emby-select'; import 'material-design-icons-iconfont'; -import '../../styles/flexstyles.scss'; + +import 'styles/flexstyles.scss'; + import template from './itemMediaInfo.template.html'; // Do not add extra spaces between tags - they will be copied into the result @@ -68,7 +73,7 @@ function getMediaSourceHtml(user, item, version) { html += `${createAttribute(globalize.translate('MediaInfoPath'), version.Path, true)}
`; } if (version.Size) { - const size = `${(version.Size / (1024 * 1024)).toFixed(0)} MB`; + const size = getReadableSize(version.Size); html += `${createAttribute(globalize.translate('MediaInfoSize'), size)}
`; } version.MediaStreams.sort(itemHelper.sortTracks); diff --git a/src/components/playerstats/playerstats.js b/src/components/playerstats/playerstats.js index 97d4a7afd..804c97e9c 100644 --- a/src/components/playerstats/playerstats.js +++ b/src/components/playerstats/playerstats.js @@ -1,12 +1,15 @@ -import '../../elements/emby-button/paper-icon-button-light'; -import globalize from '../../lib/globalize'; +import globalize from 'lib/globalize'; import { ServerConnections } from 'lib/jellyfin-apiclient'; -import Events from '../../utils/events.ts'; +import { PluginType } from 'types/plugin'; +import Events from 'utils/events'; +import { getReadableSize } from 'utils/file'; + import layoutManager from '../layoutManager'; import { playbackManager } from '../playback/playbackmanager'; import playMethodHelper from '../playback/playmethodhelper'; import { pluginManager } from '../pluginManager'; -import { PluginType } from '../../types/plugin.ts'; + +import 'elements/emby-button/paper-icon-button-light'; import './playerstats.scss'; @@ -211,16 +214,6 @@ function getDisplayTranscodeFps(session, player) { return `${transcodeFramerate} fps (${(transcodeFramerate / originalFramerate).toFixed(2)}x)`; } -function getReadableSize(size) { - if (size >= 1073741824) { - return parseFloat((size / 1073741824).toFixed(1)) + ' GiB'; - } else if (size >= 1048576) { - return parseFloat((size / 1048576).toFixed(1)) + ' MiB'; - } else { - return Math.floor(size / 1024) + ' KiB'; - } -} - function getMediaSourceStats(session, player) { const sessionStats = []; From afb1f9570dd2059074f045204f44dcd130ee6f51 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 3 Jun 2025 17:13:38 -0400 Subject: [PATCH 358/645] Add guard against dividing by zero when calculating used percentage Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- .../features/storage/components/StorageListItem.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/apps/dashboard/features/storage/components/StorageListItem.tsx b/src/apps/dashboard/features/storage/components/StorageListItem.tsx index 5d63b6446..b93696f39 100644 --- a/src/apps/dashboard/features/storage/components/StorageListItem.tsx +++ b/src/apps/dashboard/features/storage/components/StorageListItem.tsx @@ -22,8 +22,14 @@ interface StorageListItemProps { const calculateUsed = (folder?: FolderStorageDto) => { if (typeof folder?.UsedSpace === 'undefined') return 0; if (typeof folder.FreeSpace === 'undefined') return 100; - - return folder.UsedSpace / (folder.FreeSpace + folder.UsedSpace) * 100; + + const totalSpace = folder.FreeSpace + folder.UsedSpace; + if (totalSpace === 0) return 0; + + // Ensure we don't have negative values + const usedSpace = Math.max(0, folder.UsedSpace); + + return Math.min(100, (usedSpace / totalSpace) * 100); }; const getStatusColor = (percent: number) => { From b705cfc4c3fa98f4b980a9196ca2bf3e364e19d2 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 3 Jun 2025 17:31:46 -0400 Subject: [PATCH 359/645] Fix components not being unmounted on page hide --- src/apps/dashboard/controllers/dashboard.js | 8 ++++++-- .../storage/components/StorageListItem.tsx | 6 +++--- src/utils/reactUtils.tsx | 16 ++++++++++------ 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/apps/dashboard/controllers/dashboard.js b/src/apps/dashboard/controllers/dashboard.js index adc062c0b..8e91a8f33 100644 --- a/src/apps/dashboard/controllers/dashboard.js +++ b/src/apps/dashboard/controllers/dashboard.js @@ -747,6 +747,9 @@ const DashboardPage = { }; export default function (view) { + const serverId = ApiClient.serverId(); + let unmountPathsWidget; + function onRestartRequired(evt, apiClient) { console.debug('onRestartRequired not implemented', evt, apiClient); } @@ -778,7 +781,6 @@ export default function (view) { } } - const serverId = ApiClient.serverId(); view.querySelector('.activeDevices').addEventListener('click', onActiveDevicesClick); view.addEventListener('viewshow', function () { const page = this; @@ -822,7 +824,7 @@ export default function (view) { button: page.querySelector('.btnRefresh') }); - renderComponent(ServerPathWidget, {}, page.querySelector('#serverPaths')); + unmountPathsWidget = renderComponent(ServerPathWidget, {}, page.querySelector('#serverPaths')); page.querySelector('#btnRestartServer').addEventListener('click', DashboardPage.restart); page.querySelector('#btnShutdown').addEventListener('click', DashboardPage.shutdown); @@ -850,6 +852,8 @@ export default function (view) { button: page.querySelector('.btnRefresh') }); + if (unmountPathsWidget) unmountPathsWidget(); + page.querySelector('#btnRestartServer').removeEventListener('click', DashboardPage.restart); page.querySelector('#btnShutdown').removeEventListener('click', DashboardPage.shutdown); }); diff --git a/src/apps/dashboard/features/storage/components/StorageListItem.tsx b/src/apps/dashboard/features/storage/components/StorageListItem.tsx index b93696f39..9628de615 100644 --- a/src/apps/dashboard/features/storage/components/StorageListItem.tsx +++ b/src/apps/dashboard/features/storage/components/StorageListItem.tsx @@ -22,13 +22,13 @@ interface StorageListItemProps { const calculateUsed = (folder?: FolderStorageDto) => { if (typeof folder?.UsedSpace === 'undefined') return 0; if (typeof folder.FreeSpace === 'undefined') return 100; - + const totalSpace = folder.FreeSpace + folder.UsedSpace; if (totalSpace === 0) return 0; - + // Ensure we don't have negative values const usedSpace = Math.max(0, folder.UsedSpace); - + return Math.min(100, (usedSpace / totalSpace) * 100); }; diff --git a/src/utils/reactUtils.tsx b/src/utils/reactUtils.tsx index be4e518ec..80abdd512 100644 --- a/src/utils/reactUtils.tsx +++ b/src/utils/reactUtils.tsx @@ -14,12 +14,16 @@ export const renderComponent =

( props: P, element: HTMLElement ) => { - createRoot(element) - .render( - - - - ); + const root = createRoot(element); + root.render( + + + + ); + + // NOTE: We need to wrap the unmount in a setTimeout to workaround this issue with nested roots: + // https://github.com/facebook/react/issues/25675 + return () => setTimeout(() => root.unmount()); }; const RootContext: React.FC = ({ children }) => { From 5029967528b28602775549af4f88096f9de9f489 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Tue, 3 Jun 2025 22:47:05 +0300 Subject: [PATCH 360/645] Sort backups in hook --- .../features/backups/api/useBackups.ts | 12 +++++++++++- .../components/RestoreConfirmationDialog.tsx | 4 ++-- src/apps/dashboard/routes/backups/index.tsx | 18 +++++------------- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/apps/dashboard/features/backups/api/useBackups.ts b/src/apps/dashboard/features/backups/api/useBackups.ts index 22b45d2ae..842879b4e 100644 --- a/src/apps/dashboard/features/backups/api/useBackups.ts +++ b/src/apps/dashboard/features/backups/api/useBackups.ts @@ -12,7 +12,17 @@ const fetchBackups = async (api: Api, options?: AxiosRequestConfig) => { const response = await backupApi.listBackups(options); - return response.data; + const backups = response.data; + + backups.sort((a, b) => { + if (a.DateCreated && b.DateCreated) { + return new Date(b.DateCreated).getTime() - new Date(a.DateCreated).getTime(); + } else { + return 0; + } + }); + + return backups; }; export const useBackups = () => { diff --git a/src/apps/dashboard/features/backups/components/RestoreConfirmationDialog.tsx b/src/apps/dashboard/features/backups/components/RestoreConfirmationDialog.tsx index 0456e1122..3b51204b6 100644 --- a/src/apps/dashboard/features/backups/components/RestoreConfirmationDialog.tsx +++ b/src/apps/dashboard/features/backups/components/RestoreConfirmationDialog.tsx @@ -22,7 +22,7 @@ const RestoreConfirmationDialog: FunctionComponent = ({ open, onClose, o fullWidth > - {globalize.translate('Restore')} + {globalize.translate('LabelRestore')} @@ -36,7 +36,7 @@ const RestoreConfirmationDialog: FunctionComponent = ({ open, onClose, o {globalize.translate('ButtonCancel')} diff --git a/src/apps/dashboard/routes/backups/index.tsx b/src/apps/dashboard/routes/backups/index.tsx index 6cbf92e27..79f6aed38 100644 --- a/src/apps/dashboard/routes/backups/index.tsx +++ b/src/apps/dashboard/routes/backups/index.tsx @@ -6,7 +6,7 @@ import AddIcon from '@mui/icons-material/Add'; import { useBackups } from 'apps/dashboard/features/backups/api/useBackups'; import Page from 'components/Page'; import globalize from 'lib/globalize'; -import React, { useCallback, useEffect, useMemo, useState } from 'react'; +import React, { useCallback, useEffect, useState } from 'react'; import Loading from 'components/loading/LoadingComponent'; import Alert from '@mui/material/Alert'; import List from '@mui/material/List'; @@ -88,7 +88,7 @@ export const Component = () => { } }); } - }, [backupToRestore?.Path, restoreBackup]); + }, [backupToRestore, restoreBackup]); useEffect(() => { if (restoreInProgress) { @@ -99,6 +99,8 @@ export const Component = () => { setRestoreInProgress(false); setIsRestoreSuccess(true); clearInterval(serverCheckInterval); + }).catch(() => { + // Server is still down }); }, 5000); @@ -108,16 +110,6 @@ export const Component = () => { } }, [api, restoreInProgress]); - const sortedBackups = useMemo(() => ( - backups?.sort((a, b) => { - if (a.DateCreated && b.DateCreated) { - return new Date(b.DateCreated).getTime() - new Date(a.DateCreated).getTime(); - } else { - return 0; - } - }) - ), [ backups ]); - if (isPending) { return ; } @@ -174,7 +166,7 @@ export const Component = () => { {backups.length > 0 && ( - {sortedBackups?.map(backup => { + {backups.map(backup => { return Date: Wed, 12 Mar 2025 19:57:15 +0300 Subject: [PATCH 361/645] Migrate installed plugins page to React --- src/apps/dashboard/components/BaseCard.tsx | 73 +++++ .../controllers/plugins/installed/index.html | 13 - .../controllers/plugins/installed/index.js | 251 ------------------ .../plugins/components/PluginCard.tsx | 133 ++++++++++ src/apps/dashboard/routes/_asyncRoutes.ts | 1 + src/apps/dashboard/routes/_legacyRoutes.ts | 7 - src/apps/dashboard/routes/plugins/index.tsx | 86 ++++++ src/strings/en-us.json | 1 + 8 files changed, 294 insertions(+), 271 deletions(-) create mode 100644 src/apps/dashboard/components/BaseCard.tsx delete mode 100644 src/apps/dashboard/controllers/plugins/installed/index.html delete mode 100644 src/apps/dashboard/controllers/plugins/installed/index.js create mode 100644 src/apps/dashboard/features/plugins/components/PluginCard.tsx create mode 100644 src/apps/dashboard/routes/plugins/index.tsx diff --git a/src/apps/dashboard/components/BaseCard.tsx b/src/apps/dashboard/components/BaseCard.tsx new file mode 100644 index 000000000..1f4245461 --- /dev/null +++ b/src/apps/dashboard/components/BaseCard.tsx @@ -0,0 +1,73 @@ +import React from 'react'; +import Box from '@mui/material/Box'; +import Card from '@mui/material/Card'; +import CardHeader from '@mui/material/CardHeader'; +import CardMedia from '@mui/material/CardMedia'; +import IconButton from '@mui/material/IconButton'; +import Typography from '@mui/material/Typography'; +import MoreVertIcon from '@mui/icons-material/MoreVert'; +import ExtensionIcon from '@mui/icons-material/Extension'; +import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUtils'; +import CardActionArea from '@mui/material/CardActionArea'; + +interface IProps { + title?: string; + text?: string; + image?: string | null; + onClick?: () => void; + action?: boolean; + actionRef: React.MutableRefObject; + onActionClick?: () => void; +}; + +const BaseCard = ({ title, text, image, onClick, action, actionRef, onActionClick }: IProps) => { + return ( + + + {image ? ( + + ) : ( + + + + )} + + {title}} + subheader={text} + action={ + action ? ( + + + + ) : null + } + /> + + ); +}; + +export default BaseCard; diff --git a/src/apps/dashboard/controllers/plugins/installed/index.html b/src/apps/dashboard/controllers/plugins/installed/index.html deleted file mode 100644 index b29fd6eee..000000000 --- a/src/apps/dashboard/controllers/plugins/installed/index.html +++ /dev/null @@ -1,13 +0,0 @@ -

-
-
-
-

${TabMyPlugins}

-
-
- -
-
-
-
-
diff --git a/src/apps/dashboard/controllers/plugins/installed/index.js b/src/apps/dashboard/controllers/plugins/installed/index.js deleted file mode 100644 index b3971ecf1..000000000 --- a/src/apps/dashboard/controllers/plugins/installed/index.js +++ /dev/null @@ -1,251 +0,0 @@ -import loading from 'components/loading/loading'; -import dom from 'scripts/dom'; -import globalize from 'lib/globalize'; -import 'components/cardbuilder/card.scss'; -import 'elements/emby-button/emby-button'; -import Dashboard, { pageIdOn } from 'utils/dashboard'; -import confirm from 'components/confirm/confirm'; -import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUtils'; - -function deletePlugin(page, uniqueid, version, name) { - const msg = globalize.translate('UninstallPluginConfirmation', name); - - confirm({ - title: globalize.translate('HeaderUninstallPlugin'), - text: msg, - primary: 'delete', - confirmText: globalize.translate('HeaderUninstallPlugin') - }).then(function () { - loading.show(); - ApiClient.uninstallPluginByVersion(uniqueid, version).then(function () { - reloadList(page); - }); - }); -} - -function enablePlugin(page, uniqueid, version) { - loading.show(); - ApiClient.enablePlugin(uniqueid, version).then(function () { - reloadList(page); - }); -} - -function disablePlugin(page, uniqueid, version) { - loading.show(); - ApiClient.disablePlugin(uniqueid, version).then(function () { - reloadList(page); - }); -} - -function showNoConfigurationMessage() { - Dashboard.alert({ - message: globalize.translate('MessageNoPluginConfiguration') - }); -} - -function showConnectMessage() { - Dashboard.alert({ - message: globalize.translate('MessagePluginConfigurationRequiresLocalAccess') - }); -} - -function getPluginCardHtml(plugin, pluginConfigurationPages) { - const configPage = pluginConfigurationPages.filter(function (pluginConfigurationPage) { - return pluginConfigurationPage.PluginId == plugin.Id; - })[0]; - - const configPageUrl = configPage ? Dashboard.getPluginUrl(configPage.Name) : null; - let html = ''; - - html += `
`; - html += '
'; - html += ''; - html += '
'; - - if (configPage || plugin.CanUninstall) { - if (globalize.getIsRTL()) { - html += '
'; - } else { - html += '
'; - } - html += ''; - html += '
'; - } - - html += '
'; - html += `${plugin.Name}${plugin.Version}`; - html += '
'; - html += `
${globalize.translate('LabelStatus')} ${plugin.Status}
`; - html += '
'; - html += '
'; - html += '
'; - return html; -} - -function renderPlugins(page, plugins) { - ApiClient.getJSON(ApiClient.getUrl('web/configurationpages') + '?pageType=PluginConfiguration').then(function (configPages) { - populateList(page, plugins, configPages); - }); -} - -function populateList(page, plugins, pluginConfigurationPages) { - plugins = plugins.sort(function (plugin1, plugin2) { - if (plugin1.Name > plugin2.Name) { - return 1; - } - return -1; - }); - - let html = plugins.map(function (p) { - return getPluginCardHtml(p, pluginConfigurationPages); - }).join(''); - - const installedPluginsElement = page.querySelector('.installedPlugins'); - installedPluginsElement.removeEventListener('click', onInstalledPluginsClick); - installedPluginsElement.addEventListener('click', onInstalledPluginsClick); - - if (plugins.length) { - installedPluginsElement.classList.add('itemsContainer'); - installedPluginsElement.classList.add('vertical-wrap'); - } else { - html += '
'; - html += '

' + globalize.translate('MessageNoPluginsInstalled') + '

'; - html += '

'; - html += globalize.translate('MessageBrowsePluginCatalog'); - html += '

'; - html += '
'; - } - - // add search box listener - const searchBar = page.querySelector('#txtSearchPlugins'); - if (searchBar) { - searchBar.addEventListener('input', () => onFilterType(page, searchBar)); - } - - installedPluginsElement.innerHTML = html; - loading.hide(); -} - -function showPluginMenu(page, elem) { - const card = dom.parentWithClass(elem, 'card'); - const id = card.getAttribute('data-id'); - const name = card.getAttribute('data-name'); - const removable = card.getAttribute('data-removable'); - const configHref = card.querySelector('.cardImageContainer').getAttribute('href'); - const status = card.getAttribute('data-status'); - const version = card.getAttribute('data-version'); - const menuItems = []; - - if (configHref) { - menuItems.push({ - name: globalize.translate('Settings'), - id: 'open', - icon: 'mode_edit' - }); - } - - if (removable === 'true') { - if (status === 'Disabled') { - menuItems.push({ - name: globalize.translate('EnablePlugin'), - id: 'enable', - icon: 'check_circle_outline' - }); - } - - if (status === 'Active') { - menuItems.push({ - name: globalize.translate('DisablePlugin'), - id: 'disable', - icon: 'do_not_disturb' - }); - } - - menuItems.push({ - name: globalize.translate('ButtonUninstall'), - id: 'delete', - icon: 'delete' - }); - } - - import('components/actionSheet/actionSheet').then((actionsheet) => { - actionsheet.show({ - items: menuItems, - positionTo: elem, - callback: function (resultId) { - switch (resultId) { - case 'open': - Dashboard.navigate(configHref); - break; - case 'delete': - deletePlugin(page, id, version, name); - break; - case 'enable': - enablePlugin(page, id, version); - break; - case 'disable': - disablePlugin(page, id, version); - break; - } - } - }); - }); -} - -function reloadList(page) { - loading.show(); - ApiClient.getInstalledPlugins().then(function (plugins) { - renderPlugins(page, plugins); - }); -} - -function onInstalledPluginsClick(e) { - if (dom.parentWithClass(e.target, 'noConfigPluginCard')) { - showNoConfigurationMessage(); - } else if (dom.parentWithClass(e.target, 'connectModePluginCard')) { - showConnectMessage(); - } else { - const btnCardMenu = dom.parentWithClass(e.target, 'btnCardMenu'); - if (btnCardMenu) { - showPluginMenu(dom.parentWithClass(btnCardMenu, 'page'), btnCardMenu); - } - } -} - -function onFilterType(page, searchBar) { - const filter = searchBar.value.toLowerCase(); - for (const card of page.querySelectorAll('.card')) { - if (filter && filter != '' && !card.textContent.toLowerCase().includes(filter)) { - card.style.display = 'none'; - } else { - card.style.display = 'unset'; - } - } -} - -pageIdOn('pageshow', 'pluginsPage', function () { - reloadList(this); -}); - -window.PluginsPage = { - renderPlugins: renderPlugins -}; diff --git a/src/apps/dashboard/features/plugins/components/PluginCard.tsx b/src/apps/dashboard/features/plugins/components/PluginCard.tsx new file mode 100644 index 000000000..f1246fe64 --- /dev/null +++ b/src/apps/dashboard/features/plugins/components/PluginCard.tsx @@ -0,0 +1,133 @@ +import React, { useCallback, useRef, useState } from 'react'; +import { useLocation, useNavigate } from 'react-router-dom'; +import { useApi } from 'hooks/useApi'; +import type { PluginInfo } from '@jellyfin/sdk/lib/generated-client/models/plugin-info'; +import globalize from 'lib/globalize'; +import BaseCard from 'apps/dashboard/components/BaseCard'; +import Menu from '@mui/material/Menu'; +import MenuItem from '@mui/material/MenuItem'; +import ListItemIcon from '@mui/material/ListItemIcon'; +import Settings from '@mui/icons-material/Settings'; +import Delete from '@mui/icons-material/Delete'; +import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline'; +import BlockIcon from '@mui/icons-material/Block'; +import ListItemText from '@mui/material/ListItemText'; +import { PluginStatus } from '@jellyfin/sdk/lib/generated-client/models/plugin-status'; +import type { ConfigurationPageInfo } from '@jellyfin/sdk/lib/generated-client/models/configuration-page-info'; +import { useEnablePlugin } from '../api/useEnablePlugin'; +import { useDisablePlugin } from '../api/useDisablePlugin'; + +interface IProps { + plugin: PluginInfo; + configurationPage?: ConfigurationPageInfo; +}; + +const PluginCard = ({ plugin, configurationPage }: IProps) => { + const location = useLocation(); + const navigate = useNavigate(); + const actionRef = useRef(null); + const enablePlugin = useEnablePlugin(); + const disablePlugin = useDisablePlugin(); + const [ anchorEl, setAnchorEl ] = useState(null); + const [ isMenuOpen, setMenuOpen ] = useState(false); + const { api } = useApi(); + + const navigateToPluginSettings = useCallback(() => { + if (configurationPage) { + navigate({ + pathname: '/configurationpage', + search: `?name=${encodeURIComponent(configurationPage.Name || '')}`, + hash: location.hash + }); + } + }, [ navigate, location, configurationPage ]); + + const onEnablePlugin = useCallback(() => { + if (plugin.Id && plugin.Version) { + enablePlugin.mutate({ + pluginId: plugin.Id, + version: plugin.Version + }); + setAnchorEl(null); + setMenuOpen(false); + } + }, [ plugin, enablePlugin ]); + + const onDisablePlugin = useCallback(() => { + if (plugin.Id && plugin.Version) { + disablePlugin.mutate({ + pluginId: plugin.Id, + version: plugin.Version + }); + setAnchorEl(null); + setMenuOpen(false); + } + }, [ plugin, disablePlugin ]); + + const onMenuClose = useCallback(() => { + setAnchorEl(null); + setMenuOpen(false); + }, []); + + const onActionClick = useCallback(() => { + setAnchorEl(actionRef.current); + setMenuOpen(true); + }, []); + + return ( + <> + + + {configurationPage && ( + + + + + {globalize.translate('Settings')} + + )} + + {(plugin.CanUninstall && plugin.Status == PluginStatus.Active) && ( + + + + + {globalize.translate('DisablePlugin')} + + )} + + {(plugin.CanUninstall && plugin.Status == PluginStatus.Disabled) && ( + + + + + {globalize.translate('EnablePlugin')} + + )} + + {plugin.CanUninstall && ( + + + + + {globalize.translate('ButtonUninstall')} + + )} + + + ); +}; + +export default PluginCard; diff --git a/src/apps/dashboard/routes/_asyncRoutes.ts b/src/apps/dashboard/routes/_asyncRoutes.ts index 2ab21c5d4..44029227a 100644 --- a/src/apps/dashboard/routes/_asyncRoutes.ts +++ b/src/apps/dashboard/routes/_asyncRoutes.ts @@ -15,6 +15,7 @@ export const ASYNC_ADMIN_ROUTES: AsyncRoute[] = [ { path: 'playback/resume', type: AppType.Dashboard }, { path: 'playback/streaming', type: AppType.Dashboard }, { path: 'playback/trickplay', type: AppType.Dashboard }, + { path: 'plugins', type: AppType.Dashboard }, { path: 'plugins/:pluginId', page: 'plugins/plugin', type: AppType.Dashboard }, { path: 'tasks', type: AppType.Dashboard }, { path: 'tasks/:id', page: 'tasks/task', type: AppType.Dashboard }, diff --git a/src/apps/dashboard/routes/_legacyRoutes.ts b/src/apps/dashboard/routes/_legacyRoutes.ts index ceedb7265..aa51a6f91 100644 --- a/src/apps/dashboard/routes/_legacyRoutes.ts +++ b/src/apps/dashboard/routes/_legacyRoutes.ts @@ -72,12 +72,5 @@ export const LEGACY_ADMIN_ROUTES: LegacyRoute[] = [ controller: 'livetvtuner', view: 'livetvtuner.html' } - }, { - path: 'plugins', - pageProps: { - appType: AppType.Dashboard, - controller: 'plugins/installed/index', - view: 'plugins/installed/index.html' - } } ]; diff --git a/src/apps/dashboard/routes/plugins/index.tsx b/src/apps/dashboard/routes/plugins/index.tsx new file mode 100644 index 000000000..8e21ccdd8 --- /dev/null +++ b/src/apps/dashboard/routes/plugins/index.tsx @@ -0,0 +1,86 @@ +import React, { useCallback, useMemo, useState } from 'react'; +import Box from '@mui/material/Box'; +import Page from 'components/Page'; +import globalize from 'lib/globalize'; +import Typography from '@mui/material/Typography'; +import TextField from '@mui/material/TextField'; +import Stack from '@mui/material/Stack'; +import { usePlugins } from 'apps/dashboard/features/plugins/api/usePlugins'; +import Loading from 'components/loading/LoadingComponent'; +import Alert from '@mui/material/Alert'; +import Grid from '@mui/material/Grid2'; +import PluginCard from 'apps/dashboard/features/plugins/components/PluginCard'; +import { useConfigurationPages } from 'apps/dashboard/features/plugins/api/useConfigurationPages'; +import { findBestConfigurationPage } from 'apps/dashboard/features/plugins/api/configurationPage'; + +export const Component = () => { + const { + data: plugins, + isPending, + isError } = usePlugins(); + const { + data: configurationPages, + isError: isConfigurationPagesError, + isPending: isConfigurationPagesPending + } = useConfigurationPages(); + const [ searchQuery, setSearchQuery ] = useState(''); + + const onSearchChange = useCallback((event: React.ChangeEvent) => { + setSearchQuery(event.target.value); + }, []); + + const filteredPlugins = useMemo(() => { + if (plugins) { + return plugins.filter(i => i.Name?.toLocaleLowerCase().includes(searchQuery.toLocaleLowerCase())); + } else { + return []; + } + }, [ plugins, searchQuery ]); + + if (isPending || isConfigurationPagesPending) { + return ; + } + + return ( + + + {isError || isConfigurationPagesError ? ( + {globalize.translate('PluginsLoadError')} + ) : ( + + + {globalize.translate('TabMyPlugins')} + + + + + + + {filteredPlugins.map(plugin => { + return ( + + + + ); + })} + + + + )} + + + ); +}; + +Component.displayName = 'InstalledPlugins'; diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 5402157b2..adbbb5e8b 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1384,6 +1384,7 @@ "PluginLoadConfigError": "An error occurred while getting the plugin configuration pages.", "PluginLoadRepoError": "An error occurred while getting the plugin details from the repository.", "PluginUninstallError": "An error occurred while uninstalling the plugin.", + "PluginsLoadError": "An error occurred while loading plugins.", "Poster": "Poster", "PosterCard": "Poster Card", "PreferEmbeddedEpisodeInfosOverFileNames": "Prefer embedded episode information over filenames", From 1329e72aa10705e702d3cbc9efd2f151810a159c Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Wed, 4 Jun 2025 17:46:38 +0300 Subject: [PATCH 362/645] Add icon prop to BaseCard --- src/apps/dashboard/components/BaseCard.tsx | 6 +++--- .../dashboard/features/plugins/components/PluginCard.tsx | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/apps/dashboard/components/BaseCard.tsx b/src/apps/dashboard/components/BaseCard.tsx index 1f4245461..1ba6ce5ec 100644 --- a/src/apps/dashboard/components/BaseCard.tsx +++ b/src/apps/dashboard/components/BaseCard.tsx @@ -6,7 +6,6 @@ import CardMedia from '@mui/material/CardMedia'; import IconButton from '@mui/material/IconButton'; import Typography from '@mui/material/Typography'; import MoreVertIcon from '@mui/icons-material/MoreVert'; -import ExtensionIcon from '@mui/icons-material/Extension'; import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUtils'; import CardActionArea from '@mui/material/CardActionArea'; @@ -14,13 +13,14 @@ interface IProps { title?: string; text?: string; image?: string | null; + icon?: React.ReactNode; onClick?: () => void; action?: boolean; actionRef: React.MutableRefObject; onActionClick?: () => void; }; -const BaseCard = ({ title, text, image, onClick, action, actionRef, onActionClick }: IProps) => { +const BaseCard = ({ title, text, image, icon, onClick, action, actionRef, onActionClick }: IProps) => { return ( - + {icon} )} diff --git a/src/apps/dashboard/features/plugins/components/PluginCard.tsx b/src/apps/dashboard/features/plugins/components/PluginCard.tsx index f1246fe64..aca2a090b 100644 --- a/src/apps/dashboard/features/plugins/components/PluginCard.tsx +++ b/src/apps/dashboard/features/plugins/components/PluginCard.tsx @@ -11,6 +11,7 @@ import Settings from '@mui/icons-material/Settings'; import Delete from '@mui/icons-material/Delete'; import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline'; import BlockIcon from '@mui/icons-material/Block'; +import ExtensionIcon from '@mui/icons-material/Extension'; import ListItemText from '@mui/material/ListItemText'; import { PluginStatus } from '@jellyfin/sdk/lib/generated-client/models/plugin-status'; import type { ConfigurationPageInfo } from '@jellyfin/sdk/lib/generated-client/models/configuration-page-info'; @@ -80,6 +81,7 @@ const PluginCard = ({ plugin, configurationPage }: IProps) => { title={plugin.Name} text={`${globalize.translate('LabelStatus')} ${plugin.Status}`} image={plugin.HasImage ? api?.getUri(`/Plugins/${plugin.Id}/${plugin.Version}/Image`) : null} + icon={} action={true} actionRef={actionRef} onClick={navigateToPluginSettings} From b336175a7a357452a443e347ea36c5d739e30bdc Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Wed, 4 Jun 2025 18:07:25 +0300 Subject: [PATCH 363/645] Add uninstall option --- .../plugins/components/PluginCard.tsx | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/apps/dashboard/features/plugins/components/PluginCard.tsx b/src/apps/dashboard/features/plugins/components/PluginCard.tsx index aca2a090b..8ad6885f1 100644 --- a/src/apps/dashboard/features/plugins/components/PluginCard.tsx +++ b/src/apps/dashboard/features/plugins/components/PluginCard.tsx @@ -17,6 +17,8 @@ import { PluginStatus } from '@jellyfin/sdk/lib/generated-client/models/plugin-s import type { ConfigurationPageInfo } from '@jellyfin/sdk/lib/generated-client/models/configuration-page-info'; import { useEnablePlugin } from '../api/useEnablePlugin'; import { useDisablePlugin } from '../api/useDisablePlugin'; +import { useUninstallPlugin } from '../api/useUninstallPlugin'; +import ConfirmDialog from 'components/ConfirmDialog'; interface IProps { plugin: PluginInfo; @@ -29,8 +31,10 @@ const PluginCard = ({ plugin, configurationPage }: IProps) => { const actionRef = useRef(null); const enablePlugin = useEnablePlugin(); const disablePlugin = useDisablePlugin(); + const uninstallPlugin = useUninstallPlugin(); const [ anchorEl, setAnchorEl ] = useState(null); const [ isMenuOpen, setMenuOpen ] = useState(false); + const [ isUninstallConfirmOpen, setIsUninstallConfirmOpen ] = useState(false); const { api } = useApi(); const navigateToPluginSettings = useCallback(() => { @@ -65,6 +69,27 @@ const PluginCard = ({ plugin, configurationPage }: IProps) => { } }, [ plugin, disablePlugin ]); + const onCloseUninstallConfirmDialog = useCallback(() => { + setIsUninstallConfirmOpen(false); + }, []); + + const showUninstallConfirmDialog = useCallback(() => { + setIsUninstallConfirmOpen(true); + setAnchorEl(null); + setMenuOpen(false); + }, []); + + const onUninstall = useCallback(() => { + if (plugin.Id && plugin.Version) { + uninstallPlugin.mutate({ + pluginId: plugin.Id, + version: plugin.Version + }); + setAnchorEl(null); + setMenuOpen(false); + } + }, [ plugin, uninstallPlugin ]); + const onMenuClose = useCallback(() => { setAnchorEl(null); setMenuOpen(false); @@ -120,7 +145,7 @@ const PluginCard = ({ plugin, configurationPage }: IProps) => { )} {plugin.CanUninstall && ( - + @@ -128,6 +153,15 @@ const PluginCard = ({ plugin, configurationPage }: IProps) => { )} + ); }; From 33a045df54118193902399ee5d14a5ebb5cad86c Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Wed, 4 Jun 2025 18:15:55 +0300 Subject: [PATCH 364/645] Add version sub-secondary text --- src/apps/dashboard/components/BaseCard.tsx | 23 ++++++++++++++----- .../plugins/components/PluginCard.tsx | 1 + 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/apps/dashboard/components/BaseCard.tsx b/src/apps/dashboard/components/BaseCard.tsx index 1ba6ce5ec..2dcc77f95 100644 --- a/src/apps/dashboard/components/BaseCard.tsx +++ b/src/apps/dashboard/components/BaseCard.tsx @@ -8,9 +8,11 @@ import Typography from '@mui/material/Typography'; import MoreVertIcon from '@mui/icons-material/MoreVert'; import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUtils'; import CardActionArea from '@mui/material/CardActionArea'; +import Stack from '@mui/material/Stack'; interface IProps { title?: string; + secondaryTitle?: string; text?: string; image?: string | null; icon?: React.ReactNode; @@ -20,7 +22,7 @@ interface IProps { onActionClick?: () => void; }; -const BaseCard = ({ title, text, image, icon, onClick, action, actionRef, onActionClick }: IProps) => { +const BaseCard = ({ title, secondaryTitle, text, image, icon, onClick, action, actionRef, onActionClick }: IProps) => { return ( {title}} + title={ + + + {title} + + {secondaryTitle && ( + {secondaryTitle} + )} + + } subheader={text} action={ action ? ( diff --git a/src/apps/dashboard/features/plugins/components/PluginCard.tsx b/src/apps/dashboard/features/plugins/components/PluginCard.tsx index 8ad6885f1..299e6e795 100644 --- a/src/apps/dashboard/features/plugins/components/PluginCard.tsx +++ b/src/apps/dashboard/features/plugins/components/PluginCard.tsx @@ -104,6 +104,7 @@ const PluginCard = ({ plugin, configurationPage }: IProps) => { <> } From 4c9b8e552e7d5a1c4a542665380730f7aa3120d4 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Wed, 4 Jun 2025 18:54:24 +0300 Subject: [PATCH 365/645] Apply review feedback --- .../components/drawer/sections/AdvancedDrawerSection.tsx | 2 +- .../features/backups/components/CreateBackupForm.tsx | 2 +- src/apps/dashboard/routes/backups/index.tsx | 4 ++-- src/strings/en-us.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/apps/dashboard/components/drawer/sections/AdvancedDrawerSection.tsx b/src/apps/dashboard/components/drawer/sections/AdvancedDrawerSection.tsx index 4d5508aba..940520528 100644 --- a/src/apps/dashboard/components/drawer/sections/AdvancedDrawerSection.tsx +++ b/src/apps/dashboard/components/drawer/sections/AdvancedDrawerSection.tsx @@ -44,7 +44,7 @@ const AdvancedDrawerSection = () => { - + diff --git a/src/apps/dashboard/features/backups/components/CreateBackupForm.tsx b/src/apps/dashboard/features/backups/components/CreateBackupForm.tsx index 5d62d9e39..000af98a1 100644 --- a/src/apps/dashboard/features/backups/components/CreateBackupForm.tsx +++ b/src/apps/dashboard/features/backups/components/CreateBackupForm.tsx @@ -112,7 +112,7 @@ const CreateBackupForm: FunctionComponent = ({ open, onClose, onCreate } diff --git a/src/apps/dashboard/routes/backups/index.tsx b/src/apps/dashboard/routes/backups/index.tsx index 79f6aed38..047e6fef8 100644 --- a/src/apps/dashboard/routes/backups/index.tsx +++ b/src/apps/dashboard/routes/backups/index.tsx @@ -117,7 +117,7 @@ export const Component = () => { return ( @@ -149,7 +149,7 @@ export const Component = () => { ) : ( - {globalize.translate('TabBackups')} + {globalize.translate('HeaderBackups')} {globalize.translate('HeaderBackupsHelp')} diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 411e56a72..76e4d8c4b 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1585,7 +1585,7 @@ "SyncPlayGroupDefaultTitle": "{0}'s group", "TabAccess": "Access", "TabAdvanced": "Advanced", - "TabBackups": "Backups", + "HeaderBackups": "Backups", "TabCatalog": "Catalog", "TabDashboard": "Dashboard", "TabLatest": "Recently Added", From b3de4afc848e67e15a4e6bf9218e6de837b5b2e6 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Thu, 27 Mar 2025 20:06:11 +0300 Subject: [PATCH 366/645] Migrate transcoding page to React --- .../controllers/encodingsettings.html | 407 -------- .../dashboard/controllers/encodingsettings.js | 309 ------ .../features/playback/constants/codecs.ts | 113 +++ src/apps/dashboard/routes/_asyncRoutes.ts | 1 + src/apps/dashboard/routes/_legacyRoutes.ts | 7 - .../dashboard/routes/libraries/display.tsx | 7 +- src/apps/dashboard/routes/libraries/nfo.tsx | 23 +- src/apps/dashboard/routes/playback/resume.tsx | 2 +- .../dashboard/routes/playback/streaming.tsx | 2 +- .../dashboard/routes/playback/transcoding.tsx | 899 ++++++++++++++++++ src/hooks/useNamedConfiguration.ts | 6 +- src/strings/en-us.json | 3 +- 12 files changed, 1031 insertions(+), 748 deletions(-) delete mode 100644 src/apps/dashboard/controllers/encodingsettings.html delete mode 100644 src/apps/dashboard/controllers/encodingsettings.js create mode 100644 src/apps/dashboard/features/playback/constants/codecs.ts create mode 100644 src/apps/dashboard/routes/playback/transcoding.tsx diff --git a/src/apps/dashboard/controllers/encodingsettings.html b/src/apps/dashboard/controllers/encodingsettings.html deleted file mode 100644 index 962c625ed..000000000 --- a/src/apps/dashboard/controllers/encodingsettings.html +++ /dev/null @@ -1,407 +0,0 @@ -
-
-
- -
-
-

${Transcoding}

-
-
- -
- - -
- -
- -
${LabelVaapiDeviceHelp}
-
- -
- -
${LabelQsvDeviceHelp}
-
- -
-
-

${LabelEnableHardwareDecodingFor}

-
- - - - - - - - - -
-
- - -
-
- - -
-
- -
- -
${EnableEnhancedNvdecDecoderHelp}
-
- -
- -
- -
-

${LabelHardwareEncodingOptions}

-
- -
-
- - - -
-
-
- -
-

${LabelEncodingFormatOptions}

-
${EncodingFormatHelp}
-
- -
-
- -
-
- -
-
- -
${AllowVppTonemappingHelp}
-
-
- -
${LabelVppTonemappingBrightnessHelp}
-
-
- -
${LabelVppTonemappingContrastHelp}
-
-
- -
-
- -
${AllowVideoToolboxTonemappingHelp}
-
-
- -
-
- -
${AllowTonemappingHelp}
-
${AllowTonemappingSoftwareHelp}
-
-
- - -
-
- -
${TonemappingModeHelp}
-
-
- -
${TonemappingRangeHelp}
-
-
- -
${LabelTonemappingDesatHelp}
-
-
- -
${LabelTonemappingPeakHelp}
-
-
- -
${LabelTonemappingParamHelp}
-
-
- -
- -
${LabelTranscodingThreadCountHelp}
-
- -
-
-
- -
-
-
-
${LabelffmpegPathHelp}
-
-
-
-
-
- -
- -
-
${LabelTranscodingTempPathHelp}
-
-
-
-
- -
- -
- -
-
- -
${EnableFallbackFontHelp}
-
-
- -
${LabelEnableAudioVbrHelp}
-
-
- -
${LabelDownMixAudioScaleHelp}
-
-
- -
${StereoDownmixAlgorithmHelp}
-
-
- -
${LabelMaxMuxingQueueSizeHelp}
-
- -
- -
${EncoderPresetHelp}
-
-
- -
-
- -
${H264CrfHelp}
-
-
- -
${DeinterlaceMethodHelp}
-
- -
- -
${UseDoubleRateDeinterlacingHelp}
-
- -
- -
${AllowOnTheFlySubtitleExtractionHelp}
-
- -
- -
${AllowFfmpegThrottlingHelp}
-
- -
- -
${AllowSegmentDeletionHelp}
-
- -
- -
${LabelThrottleDelaySecondsHelp}
-
- -
- -
${LabelSegmentKeepSecondsHelp}
-
- -
- -
- -
-
-
diff --git a/src/apps/dashboard/controllers/encodingsettings.js b/src/apps/dashboard/controllers/encodingsettings.js deleted file mode 100644 index 6ae4fdbb2..000000000 --- a/src/apps/dashboard/controllers/encodingsettings.js +++ /dev/null @@ -1,309 +0,0 @@ -import 'jquery'; -import loading from 'components/loading/loading'; -import globalize from 'lib/globalize'; -import dom from 'scripts/dom'; -import Dashboard from 'utils/dashboard'; -import alert from 'components/alert'; - -function loadPage(page, config, systemInfo) { - Array.prototype.forEach.call(page.querySelectorAll('.chkDecodeCodec'), function (c) { - c.checked = (config.HardwareDecodingCodecs || []).indexOf(c.getAttribute('data-codec')) !== -1; - }); - page.querySelector('#chkDecodingColorDepth10Hevc').checked = config.EnableDecodingColorDepth10Hevc; - page.querySelector('#chkDecodingColorDepth10Vp9').checked = config.EnableDecodingColorDepth10Vp9; - page.querySelector('#chkDecodingColorDepth10HevcRext').checked = config.EnableDecodingColorDepth10HevcRext; - page.querySelector('#chkDecodingColorDepth12HevcRext').checked = config.EnableDecodingColorDepth12HevcRext; - page.querySelector('#chkEnhancedNvdecDecoder').checked = config.EnableEnhancedNvdecDecoder; - page.querySelector('#chkSystemNativeHwDecoder').checked = config.PreferSystemNativeHwDecoder; - page.querySelector('#chkIntelLpH264HwEncoder').checked = config.EnableIntelLowPowerH264HwEncoder; - page.querySelector('#chkIntelLpHevcHwEncoder').checked = config.EnableIntelLowPowerHevcHwEncoder; - page.querySelector('#chkHardwareEncoding').checked = config.EnableHardwareEncoding; - page.querySelector('#chkAllowHevcEncoding').checked = config.AllowHevcEncoding; - page.querySelector('#chkAllowAv1Encoding').checked = config.AllowAv1Encoding; - page.querySelector('#selectVideoDecoder').value = config.HardwareAccelerationType || 'none'; - page.querySelector('#selectThreadCount').value = config.EncodingThreadCount; - page.querySelector('#chkEnableAudioVbr').checked = config.EnableAudioVbr; - page.querySelector('#txtDownMixAudioBoost').value = config.DownMixAudioBoost; - page.querySelector('#selectStereoDownmixAlgorithm').value = config.DownMixStereoAlgorithm || 'None'; - page.querySelector('#txtMaxMuxingQueueSize').value = config.MaxMuxingQueueSize || ''; - page.querySelector('.txtEncoderPath').value = config.EncoderAppPathDisplay || ''; - page.querySelector('#txtTranscodingTempPath').value = systemInfo.TranscodingTempPath || ''; - page.querySelector('#txtFallbackFontPath').value = config.FallbackFontPath || ''; - page.querySelector('#chkEnableFallbackFont').checked = config.EnableFallbackFont; - page.querySelector('#txtVaapiDevice').value = config.VaapiDevice || ''; - page.querySelector('#txtQsvDevice').value = config.QsvDevice || ''; - page.querySelector('#chkTonemapping').checked = config.EnableTonemapping; - page.querySelector('#chkVppTonemapping').checked = config.EnableVppTonemapping; - page.querySelector('#chkVideoToolboxTonemapping').checked = config.EnableVideoToolboxTonemapping; - page.querySelector('#selectTonemappingAlgorithm').value = config.TonemappingAlgorithm || 'none'; - page.querySelector('#selectTonemappingMode').value = config.TonemappingMode || 'auto'; - page.querySelector('#selectTonemappingRange').value = config.TonemappingRange || 'auto'; - page.querySelector('#txtTonemappingDesat').value = config.TonemappingDesat; - page.querySelector('#txtTonemappingPeak').value = config.TonemappingPeak; - page.querySelector('#txtTonemappingParam').value = config.TonemappingParam || ''; - page.querySelector('#txtVppTonemappingBrightness').value = config.VppTonemappingBrightness; - page.querySelector('#txtVppTonemappingContrast').value = config.VppTonemappingContrast; - page.querySelector('#selectEncoderPreset').value = config.EncoderPreset || 'auto'; - page.querySelector('#txtH264Crf').value = config.H264Crf || ''; - page.querySelector('#txtH265Crf').value = config.H265Crf || ''; - page.querySelector('#selectDeinterlaceMethod').value = config.DeinterlaceMethod || 'yadif'; - page.querySelector('#chkDoubleRateDeinterlacing').checked = config.DeinterlaceDoubleRate; - page.querySelector('#chkEnableSubtitleExtraction').checked = config.EnableSubtitleExtraction || false; - page.querySelector('#chkEnableThrottling').checked = config.EnableThrottling || false; - page.querySelector('#chkEnableSegmentDeletion').checked = config.EnableSegmentDeletion || false; - page.querySelector('#txtThrottleDelaySeconds').value = config.ThrottleDelaySeconds || ''; - page.querySelector('#txtSegmentKeepSeconds').value = config.SegmentKeepSeconds || ''; - page.querySelector('#selectVideoDecoder').dispatchEvent(new CustomEvent('change', { - bubbles: true - })); - loading.hide(); -} - -function onSaveEncodingPathFailure() { - loading.hide(); - alert(globalize.translate('FFmpegSavePathNotFound')); -} - -function updateEncoder(form) { - return ApiClient.getSystemInfo().then(function () { - return ApiClient.ajax({ - url: ApiClient.getUrl('System/MediaEncoder/Path'), - type: 'POST', - data: JSON.stringify({ - Path: form.querySelector('.txtEncoderPath').value, - PathType: 'Custom' - }), - contentType: 'application/json' - }).then(Dashboard.processServerConfigurationUpdateResult, onSaveEncodingPathFailure); - }); -} - -function onSubmit() { - const form = this; - - const onDecoderConfirmed = function () { - loading.show(); - ApiClient.getNamedConfiguration('encoding').then(function (config) { - config.EnableAudioVbr = form.querySelector('#chkEnableAudioVbr').checked; - config.DownMixAudioBoost = form.querySelector('#txtDownMixAudioBoost').value; - config.DownMixStereoAlgorithm = form.querySelector('#selectStereoDownmixAlgorithm').value || 'None'; - config.MaxMuxingQueueSize = form.querySelector('#txtMaxMuxingQueueSize').value; - config.TranscodingTempPath = form.querySelector('#txtTranscodingTempPath').value; - config.FallbackFontPath = form.querySelector('#txtFallbackFontPath').value; - config.EnableFallbackFont = form.querySelector('#txtFallbackFontPath').value ? form.querySelector('#chkEnableFallbackFont').checked : false; - config.EncodingThreadCount = form.querySelector('#selectThreadCount').value; - config.HardwareAccelerationType = form.querySelector('#selectVideoDecoder').value; - config.VaapiDevice = form.querySelector('#txtVaapiDevice').value; - config.QsvDevice = form.querySelector('#txtQsvDevice').value; - config.EnableTonemapping = form.querySelector('#chkTonemapping').checked; - config.EnableVppTonemapping = form.querySelector('#chkVppTonemapping').checked; - config.EnableVideoToolboxTonemapping = form.querySelector('#chkVideoToolboxTonemapping').checked; - config.TonemappingAlgorithm = form.querySelector('#selectTonemappingAlgorithm').value; - config.TonemappingMode = form.querySelector('#selectTonemappingMode').value; - config.TonemappingRange = form.querySelector('#selectTonemappingRange').value; - config.TonemappingDesat = form.querySelector('#txtTonemappingDesat').value; - config.TonemappingPeak = form.querySelector('#txtTonemappingPeak').value; - config.TonemappingParam = form.querySelector('#txtTonemappingParam').value || '0'; - config.VppTonemappingBrightness = form.querySelector('#txtVppTonemappingBrightness').value; - config.VppTonemappingContrast = form.querySelector('#txtVppTonemappingContrast').value; - config.EncoderPreset = form.querySelector('#selectEncoderPreset').value; - config.H264Crf = parseInt(form.querySelector('#txtH264Crf').value || '0', 10); - config.H265Crf = parseInt(form.querySelector('#txtH265Crf').value || '0', 10); - config.DeinterlaceMethod = form.querySelector('#selectDeinterlaceMethod').value; - config.DeinterlaceDoubleRate = form.querySelector('#chkDoubleRateDeinterlacing').checked; - config.EnableSubtitleExtraction = form.querySelector('#chkEnableSubtitleExtraction').checked; - config.EnableThrottling = form.querySelector('#chkEnableThrottling').checked; - config.EnableSegmentDeletion = form.querySelector('#chkEnableSegmentDeletion').checked; - config.ThrottleDelaySeconds = parseInt(form.querySelector('#txtThrottleDelaySeconds').value || '0', 10); - config.SegmentKeepSeconds = parseInt(form.querySelector('#txtSegmentKeepSeconds').value || '0', 10); - config.HardwareDecodingCodecs = Array.prototype.map.call(Array.prototype.filter.call(form.querySelectorAll('.chkDecodeCodec'), function (c) { - return c.checked; - }), function (c) { - return c.getAttribute('data-codec'); - }); - config.EnableDecodingColorDepth10Hevc = form.querySelector('#chkDecodingColorDepth10Hevc').checked; - config.EnableDecodingColorDepth10Vp9 = form.querySelector('#chkDecodingColorDepth10Vp9').checked; - config.EnableDecodingColorDepth10HevcRext = form.querySelector('#chkDecodingColorDepth10HevcRext').checked; - config.EnableDecodingColorDepth12HevcRext = form.querySelector('#chkDecodingColorDepth12HevcRext').checked; - config.EnableEnhancedNvdecDecoder = form.querySelector('#chkEnhancedNvdecDecoder').checked; - config.PreferSystemNativeHwDecoder = form.querySelector('#chkSystemNativeHwDecoder').checked; - config.EnableIntelLowPowerH264HwEncoder = form.querySelector('#chkIntelLpH264HwEncoder').checked; - config.EnableIntelLowPowerHevcHwEncoder = form.querySelector('#chkIntelLpHevcHwEncoder').checked; - config.EnableHardwareEncoding = form.querySelector('#chkHardwareEncoding').checked; - config.AllowHevcEncoding = form.querySelector('#chkAllowHevcEncoding').checked; - config.AllowAv1Encoding = form.querySelector('#chkAllowAv1Encoding').checked; - ApiClient.updateNamedConfiguration('encoding', config).then(function () { - updateEncoder(form); - }, function () { - alert(globalize.translate('ErrorDefault')); - Dashboard.processServerConfigurationUpdateResult(); - }); - }); - }; - - if (form.querySelector('#selectVideoDecoder').value !== 'none') { - alert({ - title: globalize.translate('TitleHardwareAcceleration'), - text: globalize.translate('HardwareAccelerationWarning') - }).then(onDecoderConfirmed); - } else { - onDecoderConfirmed(); - } - - return false; -} - -function setDecodingCodecsVisible(context, value) { - value = value || ''; - let any; - Array.prototype.forEach.call(context.querySelectorAll('.chkDecodeCodec'), function (c) { - if (c.getAttribute('data-types').split(',').indexOf(value) === -1) { - dom.parentWithTag(c, 'LABEL').classList.add('hide'); - } else { - dom.parentWithTag(c, 'LABEL').classList.remove('hide'); - any = true; - } - }); - - if (any) { - context.querySelector('.decodingCodecsList').classList.remove('hide'); - } else { - context.querySelector('.decodingCodecsList').classList.add('hide'); - } -} - -let systemInfo; -function getSystemInfo() { - return systemInfo ? Promise.resolve(systemInfo) : ApiClient.getPublicSystemInfo().then( - info => { - systemInfo = info; - return info; - } - ); -} - -$(document).on('pageinit', '#encodingSettingsPage', function () { - const page = this; - getSystemInfo(); - page.querySelector('#selectVideoDecoder').addEventListener('change', function () { - if (this.value == 'vaapi') { - page.querySelector('.fldVaapiDevice').classList.remove('hide'); - page.querySelector('#txtVaapiDevice').setAttribute('required', 'required'); - } else { - page.querySelector('.fldVaapiDevice').classList.add('hide'); - page.querySelector('#txtVaapiDevice').removeAttribute('required'); - } - - if (this.value == 'amf' || this.value == 'nvenc' || this.value == 'qsv' || this.value == 'vaapi' || this.value == 'rkmpp') { - page.querySelector('.fld10bitHevcVp9HwDecoding').classList.remove('hide'); - } else { - page.querySelector('.fld10bitHevcVp9HwDecoding').classList.add('hide'); - } - - if (this.value == 'nvenc' || this.value == 'qsv' || this.value == 'vaapi') { - page.querySelector('.fldHevcRextHwDecoding').classList.remove('hide'); - } else { - page.querySelector('.fldHevcRextHwDecoding').classList.add('hide'); - } - - const isHwaSelected = [ 'amf', 'nvenc', 'qsv', 'vaapi', 'rkmpp', 'videotoolbox' ].includes(this.value); - if (this.value === 'none') { - page.querySelector('.tonemappingOptions').classList.remove('hide'); - page.querySelector('.fldTonemapCheckbox').classList.add('hide'); - } else if (isHwaSelected) { - page.querySelector('.tonemappingOptions').classList.remove('hide'); - page.querySelector('.fldTonemapCheckbox').classList.remove('hide'); - } else { - page.querySelector('.tonemappingOptions').classList.add('hide'); - page.querySelector('.fldTonemapCheckbox').classList.add('hide'); - } - - page.querySelector('.tonemappingModeOptions').classList.toggle('hide', !isHwaSelected); - page.querySelector('.allowTonemappingHardwareHelp').classList.toggle('hide', !isHwaSelected); - page.querySelector('.allowTonemappingSoftwareHelp').classList.toggle('hide', isHwaSelected); - - if (this.value == 'qsv' || this.value == 'vaapi') { - page.querySelector('.fldIntelLp').classList.remove('hide'); - } else { - page.querySelector('.fldIntelLp').classList.add('hide'); - } - - if (this.value === 'videotoolbox') { - page.querySelector('.videoToolboxTonemappingOptions').classList.remove('hide'); - } else { - page.querySelector('.videoToolboxTonemappingOptions').classList.add('hide'); - } - - if (this.value == 'qsv' || this.value == 'vaapi') { - page.querySelector('.vppTonemappingOptions').classList.remove('hide'); - } else { - page.querySelector('.vppTonemappingOptions').classList.add('hide'); - } - - if (this.value == 'qsv') { - page.querySelector('.fldSysNativeHwDecoder').classList.remove('hide'); - page.querySelector('.fldQsvDevice').classList.remove('hide'); - } else { - page.querySelector('.fldSysNativeHwDecoder').classList.add('hide'); - page.querySelector('.fldQsvDevice').classList.add('hide'); - } - - if (this.value == 'nvenc') { - page.querySelector('.fldEnhancedNvdec').classList.remove('hide'); - } else { - page.querySelector('.fldEnhancedNvdec').classList.add('hide'); - } - - if (this.value !== 'none') { - page.querySelector('.hardwareAccelerationOptions').classList.remove('hide'); - } else { - page.querySelector('.hardwareAccelerationOptions').classList.add('hide'); - } - - setDecodingCodecsVisible(page, this.value); - }); - $('#btnSelectTranscodingTempPath', page).on('click.selectDirectory', function () { - import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { - const picker = new DirectoryBrowser(); - picker.show({ - callback: function (path) { - if (path) { - page.querySelector('#txtTranscodingTempPath').value = path; - } - - picker.close(); - }, - validateWriteable: true, - header: globalize.translate('HeaderSelectTranscodingPath'), - instruction: globalize.translate('HeaderSelectTranscodingPathHelp') - }); - }); - }); - $('#btnSelectFallbackFontPath', page).on('click.selectDirectory', function () { - import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { - const picker = new DirectoryBrowser(); - picker.show({ - includeDirectories: true, - callback: function (path) { - if (path) { - page.querySelector('#txtFallbackFontPath').value = path; - } - - picker.close(); - }, - header: globalize.translate('HeaderSelectFallbackFontPath'), - instruction: globalize.translate('HeaderSelectFallbackFontPathHelp') - }); - }); - }); - $('.encodingSettingsForm').off('submit', onSubmit).on('submit', onSubmit); -}).on('pageshow', '#encodingSettingsPage', function () { - loading.show(); - const page = this; - ApiClient.getNamedConfiguration('encoding').then(function (config) { - ApiClient.getSystemInfo().then(function (fetchedSystemInfo) { - loadPage(page, config, fetchedSystemInfo); - }); - }); -}); - diff --git a/src/apps/dashboard/features/playback/constants/codecs.ts b/src/apps/dashboard/features/playback/constants/codecs.ts new file mode 100644 index 000000000..98b3e5fad --- /dev/null +++ b/src/apps/dashboard/features/playback/constants/codecs.ts @@ -0,0 +1,113 @@ +/** List of codecs and their supported hardware acceleration types */ +export const CODECS = [ + { + name: 'H264', + codec: 'h264', + types: [ + 'amf', + 'nvenc', + 'qsv', + 'vaapi', + 'rkmpp', + 'videotoolbox', + 'v4l2m2m' + ] + }, + { + name: 'HEVC', + codec: 'hevc', + types: [ + 'amf', + 'nvenc', + 'qsv', + 'vaapi', + 'rkmpp', + 'videotoolbox' + ] + }, + { + name: 'MPEG1', + codec: 'mpeg1video', + types: [ 'rkmpp' ] + }, + { + name: 'MPEG2', + codec: 'mpeg2video', + types: [ + 'amf', + 'nvenc', + 'qsv', + 'vaapi', + 'rkmpp' + ] + }, + { + name: 'MPEG4', + codec: 'mpeg4', + types: [ + 'nvenc', + 'rkmpp' + ] + }, + { + name: 'VC1', + codec: 'vc1', + types: [ + 'amf', + 'nvenc', + 'qsv', + 'vaapi' + ] + }, + { + name: 'VP8', + codec: 'vp8', + types: [ + 'nvenc', + 'qsv', + 'vaapi', + 'rkmpp', + 'videotoolbox' + ] + }, + { + name: 'VP9', + codec: 'vp9', + types: [ + 'amf', + 'nvenc', + 'qsv', + 'vaapi', + 'rkmpp', + 'videotoolbox' + ] + }, + { + name: 'AV1', + codec: 'av1', + types: [ + 'amf', + 'nvenc', + 'qsv', + 'vaapi', + 'rkmpp', + 'videotoolbox' + ] + } +]; + +/** Hardware decoders which support 10-bit HEVC & VP9 */ +export const HEVC_VP9_HW_DECODING_TYPES = [ + 'amf', + 'nvenc', + 'qsv', + 'vaapi', + 'rkmpp' +]; + +/** Hardware decoders which support HEVC RExt */ +export const HEVC_REXT_DECODING_TYPES = [ + 'nvenc', + 'qsv', + 'vaapi' +]; diff --git a/src/apps/dashboard/routes/_asyncRoutes.ts b/src/apps/dashboard/routes/_asyncRoutes.ts index 2ab21c5d4..2fd77056f 100644 --- a/src/apps/dashboard/routes/_asyncRoutes.ts +++ b/src/apps/dashboard/routes/_asyncRoutes.ts @@ -14,6 +14,7 @@ export const ASYNC_ADMIN_ROUTES: AsyncRoute[] = [ { path: 'logs/:file', page: 'logs/file', type: AppType.Dashboard }, { path: 'playback/resume', type: AppType.Dashboard }, { path: 'playback/streaming', type: AppType.Dashboard }, + { path: 'playback/transcoding', type: AppType.Dashboard }, { path: 'playback/trickplay', type: AppType.Dashboard }, { path: 'plugins/:pluginId', page: 'plugins/plugin', type: AppType.Dashboard }, { path: 'tasks', type: AppType.Dashboard }, diff --git a/src/apps/dashboard/routes/_legacyRoutes.ts b/src/apps/dashboard/routes/_legacyRoutes.ts index ceedb7265..e656d2d7c 100644 --- a/src/apps/dashboard/routes/_legacyRoutes.ts +++ b/src/apps/dashboard/routes/_legacyRoutes.ts @@ -23,13 +23,6 @@ export const LEGACY_ADMIN_ROUTES: LegacyRoute[] = [ controller: 'library', view: 'library.html' } - }, { - path: 'playback/transcoding', - pageProps: { - appType: AppType.Dashboard, - controller: 'encodingsettings', - view: 'encodingsettings.html' - } }, { path: 'plugins/catalog', pageProps: { diff --git a/src/apps/dashboard/routes/libraries/display.tsx b/src/apps/dashboard/routes/libraries/display.tsx index 9cd0852c9..7e47367ac 100644 --- a/src/apps/dashboard/routes/libraries/display.tsx +++ b/src/apps/dashboard/routes/libraries/display.tsx @@ -14,12 +14,13 @@ import Loading from 'components/loading/LoadingComponent'; import Page from 'components/Page'; import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api'; import { QUERY_KEY as CONFIG_QUERY_KEY, useConfiguration } from 'hooks/useConfiguration'; -import { QUERY_KEY as NAMED_CONFIG_QUERY_KEY, NamedConfiguration, useNamedConfiguration } from 'hooks/useNamedConfiguration'; +import { QUERY_KEY as NAMED_CONFIG_QUERY_KEY, useNamedConfiguration } from 'hooks/useNamedConfiguration'; import globalize from 'lib/globalize'; import { ServerConnections } from 'lib/jellyfin-apiclient'; import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; import { ActionData } from 'types/actionData'; import { queryClient } from 'utils/query/queryClient'; +import type { MetadataConfiguration } from '@jellyfin/sdk/lib/generated-client/models/metadata-configuration'; const CONFIG_KEY = 'metadata'; @@ -32,7 +33,7 @@ export const action = async ({ request }: ActionFunctionArgs) => { const { data: config } = await getConfigurationApi(api).getConfiguration(); - const metadataConfig: NamedConfiguration = { + const metadataConfig: MetadataConfiguration = { UseFileCreationTimeForDateAdded: data.DateAddedBehavior.toString() === '1' }; @@ -70,7 +71,7 @@ export const Component = () => { data: namedConfig, isPending: isNamedConfigPending, isError: isNamedConfigError - } = useNamedConfiguration(CONFIG_KEY); + } = useNamedConfiguration(CONFIG_KEY); const navigation = useNavigation(); const actionData = useActionData() as ActionData | undefined; diff --git a/src/apps/dashboard/routes/libraries/nfo.tsx b/src/apps/dashboard/routes/libraries/nfo.tsx index 326834a83..bbbaf6fdf 100644 --- a/src/apps/dashboard/routes/libraries/nfo.tsx +++ b/src/apps/dashboard/routes/libraries/nfo.tsx @@ -21,17 +21,10 @@ import React, { useCallback, useState } from 'react'; import { type ActionFunctionArgs, Form, useActionData, useNavigation } from 'react-router-dom'; import { ActionData } from 'types/actionData'; import { queryClient } from 'utils/query/queryClient'; +import type { XbmcMetadataOptions } from '@jellyfin/sdk/lib/generated-client/models/xbmc-metadata-options'; const CONFIG_KEY = 'xbmcmetadata'; -interface NFOSettingsConfig { - UserId?: string; - EnableExtraThumbsDuplication?: boolean; - EnablePathSubstitution?: boolean; - ReleaseDateFormat?: string; - SaveImagePathsInNfo?: boolean; -}; - export const action = async ({ request }: ActionFunctionArgs) => { const api = ServerConnections.getCurrentApi(); if (!api) throw new Error('No Api instance available'); @@ -39,7 +32,7 @@ export const action = async ({ request }: ActionFunctionArgs) => { const formData = await request.formData(); const data = Object.fromEntries(formData); - const newConfig: NFOSettingsConfig = { + const newConfig: XbmcMetadataOptions = { UserId: data.UserId?.toString(), ReleaseDateFormat: 'yyyy-MM-dd', SaveImagePathsInNfo: data.SaveImagePathsInNfo?.toString() === 'on', @@ -64,7 +57,7 @@ export const Component = () => { data: config, isPending: isConfigPending, isError: isConfigError - } = useNamedConfiguration(CONFIG_KEY); + } = useNamedConfiguration(CONFIG_KEY); const { data: users, isPending: isUsersPending, @@ -75,8 +68,6 @@ export const Component = () => { const isSubmitting = navigation.state === 'submitting'; const [isAlertOpen, setIsAlertOpen] = useState(false); - const nfoConfig = config as NFOSettingsConfig; - const onAlertClose = useCallback(() => { setIsAlertOpen(false); }, []); @@ -117,7 +108,7 @@ export const Component = () => { { control={ } label={globalize.translate('LabelKodiMetadataSaveImagePaths')} @@ -154,7 +145,7 @@ export const Component = () => { control={ } label={globalize.translate('LabelKodiMetadataEnablePathSubstitution')} @@ -167,7 +158,7 @@ export const Component = () => { control={ } label={globalize.translate('LabelKodiMetadataEnableExtraThumbs')} diff --git a/src/apps/dashboard/routes/playback/resume.tsx b/src/apps/dashboard/routes/playback/resume.tsx index 6bd23a8ce..76e5fce9e 100644 --- a/src/apps/dashboard/routes/playback/resume.tsx +++ b/src/apps/dashboard/routes/playback/resume.tsx @@ -66,7 +66,7 @@ export const Component = () => {
- + {globalize.translate('ButtonResume')} diff --git a/src/apps/dashboard/routes/playback/streaming.tsx b/src/apps/dashboard/routes/playback/streaming.tsx index b3be899d6..51c6962a4 100644 --- a/src/apps/dashboard/routes/playback/streaming.tsx +++ b/src/apps/dashboard/routes/playback/streaming.tsx @@ -57,7 +57,7 @@ export const Component = () => { - + {globalize.translate('TabStreaming')} diff --git a/src/apps/dashboard/routes/playback/transcoding.tsx b/src/apps/dashboard/routes/playback/transcoding.tsx new file mode 100644 index 000000000..d6782a894 --- /dev/null +++ b/src/apps/dashboard/routes/playback/transcoding.tsx @@ -0,0 +1,899 @@ +import React, { useCallback, useEffect, useMemo, useState } from 'react'; +import Box from '@mui/material/Box'; +import TextField from '@mui/material/TextField'; +import Typography from '@mui/material/Typography'; +import Link from '@mui/material/Link'; +import Page from 'components/Page'; +import globalize from 'lib/globalize'; +import Stack from '@mui/material/Stack'; +import Loading from 'components/loading/LoadingComponent'; +import MenuItem from '@mui/material/MenuItem'; +import FormGroup from '@mui/material/FormGroup'; +import Checkbox from '@mui/material/Checkbox'; +import FormHelperText from '@mui/material/FormHelperText'; +import FormControl from '@mui/material/FormControl'; +import FormControlLabel from '@mui/material/FormControlLabel'; +import DirectoryBrowser from 'components/directorybrowser/directorybrowser'; +import InputAdornment from '@mui/material/InputAdornment'; +import IconButton from '@mui/material/IconButton'; +import SearchIcon from '@mui/icons-material/Search'; +import Alert from '@mui/material/Alert'; +import Button from '@mui/material/Button'; +import { type ActionFunctionArgs, Form, useActionData, useNavigation, useSubmit } from 'react-router-dom'; +import { QUERY_KEY, useNamedConfiguration } from 'hooks/useNamedConfiguration'; +import type { EncodingOptions } from '@jellyfin/sdk/lib/generated-client/models/encoding-options'; +import { HardwareAccelerationType } from '@jellyfin/sdk/lib/generated-client/models/hardware-acceleration-type'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; +import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api'; +import { queryClient } from 'utils/query/queryClient'; +import { ActionData } from 'types/actionData'; +import { CODECS, HEVC_REXT_DECODING_TYPES, HEVC_VP9_HW_DECODING_TYPES } from 'apps/dashboard/features/playback/constants/codecs'; +import SimpleAlert from 'components/SimpleAlert'; + +const CONFIG_KEY = 'encoding'; + +export const action = async ({ request }: ActionFunctionArgs) => { + const api = ServerConnections.getCurrentApi(); + if (!api) throw new Error('No Api instance available'); + + const data = await request.json() as EncodingOptions; + + await getConfigurationApi(api) + .updateNamedConfiguration({ key: CONFIG_KEY, body: data }); + + void queryClient.invalidateQueries({ + queryKey: [QUERY_KEY, CONFIG_KEY] + }); + + return { + isSaved: true + }; +}; + +export const Component = () => { + const { data: initialConfig, isPending, isError } = useNamedConfiguration(CONFIG_KEY); + const [ config, setConfig ] = useState(null); + const navigation = useNavigation(); + const actionData = useActionData() as ActionData | undefined; + const submit = useSubmit(); + const isSubmitting = navigation.state === 'submitting'; + const [ isAlertOpen, setIsAlertOpen ] = useState(false); + + useEffect(() => { + if (initialConfig && config == null) { + setConfig(initialConfig); + } + }, [ initialConfig, config ]); + + const onConfigChange = useCallback((e: React.ChangeEvent) => { + setConfig({ + ...config, + [e.target.name]: e.target.value + }); + }, [ config ]); + + const onCheckboxChange = useCallback((e: React.ChangeEvent) => { + setConfig({ + ...config, + [e.target.name]: e.target.checked + }); + }, [ config ]); + + const onCodecChange = useCallback((e: React.ChangeEvent) => { + if (config?.HardwareDecodingCodecs) { + if (e.target.checked) { + setConfig({ + ...config, + HardwareDecodingCodecs: [ + ...config.HardwareDecodingCodecs, + e.target.name + ] + }); + } else { + setConfig({ + ...config, + HardwareDecodingCodecs: config.HardwareDecodingCodecs.filter(v => v !== e.target.name) + }); + } + } + }, [ config ]); + + const onAlertClose = useCallback(() => { + setIsAlertOpen(false); + }, []); + + const onSubmit = useCallback((e: React.FormEvent) => { + e.preventDefault(); + if (config) { + setIsAlertOpen(true); + submit( + { ...config }, + { method: 'post', encType: 'application/json' } + ); + } + }, [ config, submit ]); + + const showTranscodingPathPicker = useCallback(() => { + const picker = new DirectoryBrowser(); + + picker.show({ + callback: (path: string) => { + setConfig({ + ...config, + TranscodingTempPath: path + }); + + picker.close(); + }, + validateWriteable: true, + header: globalize.translate('HeaderSelectTranscodingPath'), + instruction: globalize.translate('HeaderSelectTranscodingPathHelp') + }); + }, [ config ]); + + const showFallbackFontPathPicker = useCallback(() => { + const picker = new DirectoryBrowser(); + + picker.show({ + callback: (path: string) => { + setConfig({ + ...config, + FallbackFontPath: path + }); + + picker.close(); + }, + header: globalize.translate('HeaderSelectFallbackFontPath'), + instruction: globalize.translate('HeaderSelectFallbackFontPathHelp') + }); + }, [ config ]); + + const hardwareAccelType = config?.HardwareAccelerationType || HardwareAccelerationType.None; + const isHwaSelected = [ 'amf', 'nvenc', 'qsv', 'vaapi', 'rkmpp', 'videotoolbox' ].includes(hardwareAccelType); + + const availableCodecs = useMemo(() => ( + CODECS.filter(codec => codec.types.includes(hardwareAccelType)) + ), [hardwareAccelType]); + + if (isPending || !config) return ; + + return ( + + + + {isError ? ( + {globalize.translate('TranscodingLoadError')} + ) : ( + + + {globalize.translate('Transcoding')} + + {!isSubmitting && actionData?.isSaved && ( + + {globalize.translate('SettingsSaved')} + + )} + + + {globalize.translate('LabelHardwareAccelerationTypeHelp')} + + )} + > + {globalize.translate('None')} + AMD AMF + Nvidia NVENC + Intel Quicksync (QSV) + Video Acceleration API (VAAPI) + Rockchip MPP (RKMPP) + Apple VideoToolBox + Video4Linux2 (V4L2) + + + {hardwareAccelType === 'vaapi' && ( + + )} + + {hardwareAccelType === 'qsv' && ( + + )} + + {hardwareAccelType !== 'none' && ( + <> + {globalize.translate('LabelEnableHardwareDecodingFor')} + + {availableCodecs.map(codec => ( + + } + /> + ))} + + {HEVC_VP9_HW_DECODING_TYPES.includes(hardwareAccelType) && ( + + } + /> + )} + + {HEVC_VP9_HW_DECODING_TYPES.includes(hardwareAccelType) && ( + + } + /> + )} + + {HEVC_REXT_DECODING_TYPES.includes(hardwareAccelType) && ( + + } + /> + )} + + {HEVC_REXT_DECODING_TYPES.includes(hardwareAccelType) && ( + + } + /> + )} + + + )} + + {hardwareAccelType === 'nvenc' && ( + + + } + /> + {globalize.translate('EnableEnhancedNvdecDecoderHelp')} + + )} + + {hardwareAccelType === 'qsv' && ( + + + } + /> + + )} + + {hardwareAccelType !== 'none' && ( + + {globalize.translate('LabelHardwareEncodingOptions')} + + + } + /> + {(hardwareAccelType === 'qsv' || hardwareAccelType === 'vaapi') && ( + <> + + } + /> + + } + /> + + + {globalize.translate('IntelLowPowerEncHelp')} + + + + )} + + + )} + + + {globalize.translate('LabelEncodingFormatOptions')} + {globalize.translate('EncodingFormatHelp')} + + + } + /> + + } + /> + + + + {(hardwareAccelType === 'qsv' || hardwareAccelType === 'vaapi') && ( + <> + + + } + /> + {globalize.translate('AllowVppTonemappingHelp')} + + + + + + + )} + + {hardwareAccelType === 'videotoolbox' && ( + + + } + /> + {globalize.translate('AllowVideoToolboxTonemappingHelp')} + + )} + + {(hardwareAccelType === 'none' || isHwaSelected) && ( + <> + + + } + /> + {globalize.translate(isHwaSelected ? 'AllowTonemappingHelp' : 'AllowTonemappingSoftwareHelp')} + + + + {globalize.translate('TonemappingAlgorithmHelp')} + + )} + > + {globalize.translate('None')} + Clip + Linear + Gamma + Reinhard + Hable + Mobius + BT.2390 + + + {isHwaSelected && ( + + {globalize.translate('Auto')} + MAX + RGB + LUM + ITP + + )} + + + {globalize.translate('Auto')} + TV + PC + + + + + + + + + )} + + + {globalize.translate('Auto')} + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + {globalize.translate('OptionMax')} + + + + + + + + + + ) + } + }} + /> + + + {globalize.translate('LabelFallbackFontPathHelp')} + + } + slotProps={{ + input: { + endAdornment: ( + + + + + + ) + } + }} + /> + + + + } + /> + {globalize.translate('EnableFallbackFontHelp')} + + + + + } + /> + {globalize.translate('LabelEnableAudioVbrHelp')} + + + + + + {globalize.translate('None')} + Dave750 + NightmodeDialogue + RFC7845 + AC-4 + + + + + + {globalize.translate('Auto')} + veryslow + slower + slow + medium + fast + faster + veryfast + superfast + ultrafast + + + + + + + + {globalize.translate('Yadif')} + {globalize.translate('Bwdif')} + + + + + } + /> + {globalize.translate('UseDoubleRateDeinterlacingHelp')} + + + + + } + /> + {globalize.translate('AllowOnTheFlySubtitleExtractionHelp')} + + + + + } + /> + {globalize.translate('AllowFfmpegThrottlingHelp')} + + + + + } + /> + {globalize.translate('AllowSegmentDeletionHelp')} + + + + + + + + + + )} + + + ); +}; + +Component.displayName = 'TranscodingPage'; diff --git a/src/hooks/useNamedConfiguration.ts b/src/hooks/useNamedConfiguration.ts index 138355b60..c789a5091 100644 --- a/src/hooks/useNamedConfiguration.ts +++ b/src/hooks/useNamedConfiguration.ts @@ -13,15 +13,15 @@ export interface NamedConfiguration { const fetchNamedConfiguration = async (api: Api, key: string, options?: AxiosRequestConfig) => { const response = await getConfigurationApi(api).getNamedConfiguration({ key }, options); - return response.data as unknown as NamedConfiguration; + return response.data; }; -export const useNamedConfiguration = (key: string) => { +export const useNamedConfiguration = (key: string) => { const { api } = useApi(); return useQuery({ queryKey: [ QUERY_KEY, key ], - queryFn: ({ signal }) => fetchNamedConfiguration(api!, key, { signal }), + queryFn: ({ signal }) => fetchNamedConfiguration(api!, key, { signal }) as ConfigType, enabled: !!api }); }; diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 5402157b2..be432cfc7 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -977,7 +977,7 @@ "LabelTonemappingDesat": "Tone mapping desat", "LabelTonemappingDesatHelp": "Apply desaturation for highlights that exceed this level of brightness. The recommended value is 0 (disable).", "LabelTonemappingParam": "Tone mapping param", - "LabelTonemappingParamHelp": "Tune the tone mapping algorithm. The recommended and default values are NaN. Generally leave it blank.", + "LabelTonemappingParamHelp": "Tune the tone mapping algorithm. Generally leave it blank.", "LabelTonemappingPeak": "Tone mapping peak", "LabelTonemappingPeakHelp": "Override the embedded metadata value for the input signal with this peak value instead. The default value is 100 (1000nit).", "LabelTonemappingRange": "Tone mapping range", @@ -1608,6 +1608,7 @@ "TrackCount": "{0} tracks", "Trailers": "Trailers", "Transcoding": "Transcoding", + "TranscodingLoadError": "Failed to load transcoding settings", "Translator": "Translator", "Tuesday": "Tuesday", "TV": "TV", From ec33a8004eaa010e2679c6d22d410401ac7e378b Mon Sep 17 00:00:00 2001 From: AfmanS Date: Wed, 4 Jun 2025 15:16:39 -0400 Subject: [PATCH 367/645] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index 3049aaeac..b9053c9b8 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -646,7 +646,7 @@ "HeaderAlbumArtists": "Artistas do álbum", "Movies": "Filmes", "Photos": "Fotografias", - "Playlists": "Playlists", + "Playlists": "Listas de Reprodução", "Shows": "Séries", "Songs": "Músicas", "Sync": "Sincronização", @@ -1698,7 +1698,7 @@ "AllowCollectionManagement": "Permitir este utilizador gerir as coleções", "SecondarySubtitles": "Legendas secundárias", "LabelDummyChapterDuration": "Intervalo", - "LabelDummyChapterDurationHelp": "Define o intervalo entre capítulos fictícios. Para desativar a criação de capítulos fictícios, define como 0. Se alterares este valor, não terás qualquer efeito sobre os capítulos fictícios existentes.", + "LabelDummyChapterDurationHelp": "Define o intervalo entre capítulos fictícios em segundos. Para desativar a criação de capítulos fictícios, define como 0. Alterar este valor não terá qualquer efeito sobre os capítulos fictícios existentes.", "LabelChapterImageResolution": "Resolução", "LabelChapterImageResolutionHelp": "A resolução das imagens dos capítulos extraídas. A alteração desta resolução não terá qualquer efeito nos capítulos fictícios existentes.", "LabelParallelImageEncodingLimit": "Limite de codificação paralela de imagens", From df9284c3cdaa19241e2cb5561f6e8c6de792e5b4 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Wed, 4 Jun 2025 17:46:47 -0400 Subject: [PATCH 368/645] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index b9053c9b8..1247a8a0e 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -646,7 +646,7 @@ "HeaderAlbumArtists": "Artistas do álbum", "Movies": "Filmes", "Photos": "Fotografias", - "Playlists": "Listas de Reprodução", + "Playlists": "Playlists", "Shows": "Séries", "Songs": "Músicas", "Sync": "Sincronização", @@ -677,7 +677,7 @@ "BookLibraryHelp": "São suportados audiolivros e ebooks. Consulta o {0} guia de nomenclatura de livros {1}.", "BirthLocation": "Local de nascimento", "AsManyAsPossible": "Tantos quanto possível", - "Art": "Clearart", + "Art": "ClearArt", "Anytime": "Qualquer altura", "Aired": "Estreou a", "HeaderKeepRecording": "Continuar a gravar", From 7ceae3a799fed2d4c515da18625248cb18b43c27 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Wed, 4 Jun 2025 17:23:45 -0400 Subject: [PATCH 369/645] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index a29ff31c0..2a1026c58 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -114,7 +114,7 @@ "PleaseEnterNameOrId": "Introduz um nome ou um ID externo.", "PleaseConfirmPluginInstallation": "Por favor clique em OK para confirmar que leu o conteúdo acima e que deseja prosseguir com a instalação da extensão.", "PleaseAddAtLeastOneFolder": "Adiciona pelo menos uma pasta a esta biblioteca, clicando no botão '+' na secção 'Pastas'.", - "Playlists": "Listas de Reprodução", + "Playlists": "Playlists", "Played": "Reproduzido", "PlayNextEpisodeAutomatically": "Reproduzir próximo episódio automaticamente", "PlayNext": "Reproduzir a seguir", @@ -912,14 +912,14 @@ "BirthPlaceValue": "Local de nascimento: {0}", "BirthLocation": "Local de nascimento", "BirthDateValue": "Nascimento: {0}", - "Banner": "Insígnia", + "Banner": "Faixa", "Backdrops": "Imagens de fundo", "Backdrop": "Imagem de fundo", "AuthProviderHelp": "Seleciona um mecanismo de autenticação a ser utilizado para validar as credenciais deste utilizador.", "Audio": "Áudio", "AspectRatio": "Proporção da imagem", "Ascending": "Crescente", - "Art": "Clearart", + "Art": "ClearArt", "AroundTime": "Por volta das {0}", "Anytime": "Qualquer altura", "AnyLanguage": "Qualquer idioma", @@ -1205,8 +1205,8 @@ "ButtonUseQuickConnect": "Utilizar Ligação Rápida", "ButtonActivate": "Ativar", "Authorize": "Autorizar", - "EnableDetailsBannerHelp": "Exibir banner no topo da página de detalhes do item.", - "EnableDetailsBanner": "Banner de Detalhes", + "EnableDetailsBannerHelp": "Mostrar uma imagem no topo da página dos detalhes do item.", + "EnableDetailsBanner": "Faixa de detalhes", "EnableQuickConnect": "Ativar Ligação Rápida neste servidor", "EnableDecodingColorDepth10Vp9": "Ativar descodificação de hardware de 10-bits para VP9", "EnableDecodingColorDepth10Hevc": "Ativar descodificação de hardware de 10-bits para HEVC", @@ -1408,7 +1408,7 @@ "AllowEmbeddedSubtitlesAllowTextOption": "Permitir texto", "Premiere": "Estreia", "PreviousChapter": "Capítulo anterior", - "LabelDummyChapterDurationHelp": "Define o intervalo entre capítulos fictícios. Para desativar a criação de capítulos fictícios, define como 0. Se alterares este valor, não terás qualquer efeito sobre os capítulos fictícios existentes.", + "LabelDummyChapterDurationHelp": "Define o intervalo entre capítulos fictícios em segundos. Para desativar a criação de capítulos fictícios, define como 0. Alterar este valor não terá qualquer efeito sobre os capítulos fictícios existentes.", "AllowCollectionManagement": "Permitir este utilizador gerir as coleções", "LabelMaxVideoResolution": "Resolução máxima permitida para transcodificação de vídeo", "EnableAudioNormalization": "Normalização de Áudio", From 015001970328e1939a45b00120134ad0d72d4425 Mon Sep 17 00:00:00 2001 From: Alain Date: Thu, 5 Jun 2025 05:35:11 -0400 Subject: [PATCH 370/645] Translated using Weblate (Basque) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/eu/ --- src/strings/eu.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/eu.json b/src/strings/eu.json index bfb28cf82..47b3de797 100644 --- a/src/strings/eu.json +++ b/src/strings/eu.json @@ -61,7 +61,7 @@ "YoutubePlaybackError": "Eskatutako bideoa ezin da erreproduzitu.", "YoutubeBadRequest": "Eskaera ez da zuzena.", "LabelSelectStereo": "Estereoa", - "LabelSelectMono": "Tximinoa", + "LabelSelectMono": "Monoa (audio-kanal bakarra)", "LabelSelectAudioChannels": "Kanalak", "LabelAllowedAudioChannels": "Baimendutako gehieneko audio-kanalak", "AllowHevcEncoding": "HEVC formatuan kodetzea baimentzea", From 63d1e47f151a494814114e7dc54206bd236cbf37 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Thu, 5 Jun 2025 11:15:01 -0400 Subject: [PATCH 371/645] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index 1247a8a0e..02736434d 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -677,7 +677,7 @@ "BookLibraryHelp": "São suportados audiolivros e ebooks. Consulta o {0} guia de nomenclatura de livros {1}.", "BirthLocation": "Local de nascimento", "AsManyAsPossible": "Tantos quanto possível", - "Art": "ClearArt", + "Art": "ClearArt (imagem transparente)", "Anytime": "Qualquer altura", "Aired": "Estreou a", "HeaderKeepRecording": "Continuar a gravar", @@ -1767,7 +1767,7 @@ "LabelBackdropScreensaverInterval": "Intervalo da imagem de fundo do protetor de ecrã", "HeaderAllRecordings": "Todas as Gravações", "SelectAudioNormalizationHelp": "Ganho de faixa - ajusta o volume de cada faixa para que sejam reproduzidas com o mesmo volume. Ganho do álbum - ajusta o volume de todas as faixas apenas de um álbum, mantendo a faixa dinâmica do álbum. Alternar entre \"Desativado\" e outras opções requer o reinício da reprodução atual.", - "LogoScreensaver": "Logotipo de proteção de ecrã", + "LogoScreensaver": "Logótipo da proteção de ecrã", "TonemappingModeHelp": "Seleciona o modo de mapeamento de tons. Se notares áreas muito claras ou estouradas, experimenta mudar para o modo RGB.", "MachineTranslated": "Traduzido Automaticamente", "ForeignPartsOnly": "Apenas partes forçadas/estrangeiras", From 164ab3afc72f80f9b5c77ea9f63e9514e2da93d2 Mon Sep 17 00:00:00 2001 From: ilker Date: Thu, 5 Jun 2025 12:08:10 -0400 Subject: [PATCH 372/645] Translated using Weblate (Turkish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/tr/ --- src/strings/tr.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/tr.json b/src/strings/tr.json index 542485815..ecf928aa0 100644 --- a/src/strings/tr.json +++ b/src/strings/tr.json @@ -2020,5 +2020,8 @@ "ReadInputAtNativeFramerateHelp": "Bu seçeneğin etkinleştirilmesi, canlı yayınların zamanından önce durması gibi bazı sorunları çözebilir.", "LimitSegmentLength": "Daha kısa HLS segmentleri kullanın", "HeaderServerUnavailable": "Sunucu Kullanılamıyor", - "HeaderUpdateRequired": "Güncelleme Gerekli" + "HeaderUpdateRequired": "Güncelleme Gerekli", + "ViewSettings": "Ayarları görüntüle", + "DownloadManager": "İndirilenler", + "MessageForgotPasswordPinReset": "Şifre sıfırlamayı bitirmek için PIN kodunu buraya girin" } From a875475ecaf2fdfd94e5d075fbd6a60cb236ed3c Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Thu, 5 Jun 2025 11:17:41 -0400 Subject: [PATCH 373/645] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 2a1026c58..4cfe9e38d 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -919,7 +919,7 @@ "Audio": "Áudio", "AspectRatio": "Proporção da imagem", "Ascending": "Crescente", - "Art": "ClearArt", + "Art": "ClearArt (imagem transparente)", "AroundTime": "Por volta das {0}", "Anytime": "Qualquer altura", "AnyLanguage": "Qualquer idioma", @@ -1628,7 +1628,7 @@ "UseDoubleRateDeinterlacingHelp": "Esta definição utiliza a taxa de campo durante o desentrelaçamento, muitas vezes referido como desentrelaçamento bob, que duplica a taxa de fotogramas do vídeo para proporcionar movimento fluído, como o que verias ao ver vídeo entrelaçado numa televisão.", "LabelDirectStreamingInfo": "Informações de transmissão direta", "LabelAlbumGain": "Ganho do álbum", - "LogoScreensaver": "Logotipo do Protetor de tela", + "LogoScreensaver": "Logótipo da proteção de ecrã", "MediaInfoColorSpace": "Espaço colorido", "Studio": "Estúdio", "SubtitleGray": "Cinzento", From efee261b50a27b233631d1d5e9869fefd1573b47 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Thu, 5 Jun 2025 21:32:16 +0300 Subject: [PATCH 374/645] Apply review feedback --- src/apps/dashboard/components/BaseCard.tsx | 2 +- src/apps/dashboard/features/plugins/components/PluginCard.tsx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/apps/dashboard/components/BaseCard.tsx b/src/apps/dashboard/components/BaseCard.tsx index 2dcc77f95..f6e683146 100644 --- a/src/apps/dashboard/components/BaseCard.tsx +++ b/src/apps/dashboard/components/BaseCard.tsx @@ -18,7 +18,7 @@ interface IProps { icon?: React.ReactNode; onClick?: () => void; action?: boolean; - actionRef: React.MutableRefObject; + actionRef?: React.MutableRefObject; onActionClick?: () => void; }; diff --git a/src/apps/dashboard/features/plugins/components/PluginCard.tsx b/src/apps/dashboard/features/plugins/components/PluginCard.tsx index 299e6e795..d6efc1b1a 100644 --- a/src/apps/dashboard/features/plugins/components/PluginCard.tsx +++ b/src/apps/dashboard/features/plugins/components/PluginCard.tsx @@ -127,7 +127,7 @@ const PluginCard = ({ plugin, configurationPage }: IProps) => {
)} - {(plugin.CanUninstall && plugin.Status == PluginStatus.Active) && ( + {(plugin.CanUninstall && plugin.Status === PluginStatus.Active) && ( @@ -136,7 +136,7 @@ const PluginCard = ({ plugin, configurationPage }: IProps) => { )} - {(plugin.CanUninstall && plugin.Status == PluginStatus.Disabled) && ( + {(plugin.CanUninstall && plugin.Status === PluginStatus.Disabled) && ( From ebcbded0489b82d7ae2df470d08705397be84645 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Thu, 5 Jun 2025 22:01:40 +0300 Subject: [PATCH 375/645] Remove extreme ranges --- src/apps/dashboard/routes/playback/transcoding.tsx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/apps/dashboard/routes/playback/transcoding.tsx b/src/apps/dashboard/routes/playback/transcoding.tsx index d6782a894..4781f33db 100644 --- a/src/apps/dashboard/routes/playback/transcoding.tsx +++ b/src/apps/dashboard/routes/playback/transcoding.tsx @@ -547,7 +547,6 @@ export const Component = () => { slotProps={{ htmlInput: { min: 0, - max: 1.79769e+308, step: 0.00001 } }} @@ -563,7 +562,6 @@ export const Component = () => { slotProps={{ htmlInput: { min: 0, - max: 1.79769e+308, step: 0.00001 } }} @@ -578,8 +576,7 @@ export const Component = () => { type='number' slotProps={{ htmlInput: { - min: 2.22507e-308, - max: 1.79769e+308, + min: 0, step: 0.00001 } }} From f2a1f9e1b87a7530ec0576a4f23b0ca6be218a1a Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 5 Jun 2025 15:05:13 -0400 Subject: [PATCH 376/645] Add handling of negative space values --- .../storage/components/StorageListItem.tsx | 29 +++++---------- .../features/storage/utils/space.test.ts | 35 +++++++++++++++++++ .../dashboard/features/storage/utils/space.ts | 20 +++++++++++ 3 files changed, 64 insertions(+), 20 deletions(-) create mode 100644 src/apps/dashboard/features/storage/utils/space.test.ts create mode 100644 src/apps/dashboard/features/storage/utils/space.ts diff --git a/src/apps/dashboard/features/storage/components/StorageListItem.tsx b/src/apps/dashboard/features/storage/components/StorageListItem.tsx index 9628de615..cf8226235 100644 --- a/src/apps/dashboard/features/storage/components/StorageListItem.tsx +++ b/src/apps/dashboard/features/storage/components/StorageListItem.tsx @@ -11,6 +11,7 @@ import globalize from 'lib/globalize'; import { getReadableSize } from 'utils/file'; import { StorageType } from '../constants/StorageType'; +import { calculateTotal, calculateUsedPercentage } from '../utils/space'; import StorageTypeIcon from './StorageTypeIcon'; @@ -19,19 +20,6 @@ interface StorageListItemProps { folder?: FolderStorageDto } -const calculateUsed = (folder?: FolderStorageDto) => { - if (typeof folder?.UsedSpace === 'undefined') return 0; - if (typeof folder.FreeSpace === 'undefined') return 100; - - const totalSpace = folder.FreeSpace + folder.UsedSpace; - if (totalSpace === 0) return 0; - - // Ensure we don't have negative values - const usedSpace = Math.max(0, folder.UsedSpace); - - return Math.min(100, (usedSpace / totalSpace) * 100); -}; - const getStatusColor = (percent: number) => { if (percent >= 90) return 'error'; if (percent >= 80) return 'warning'; @@ -52,11 +40,12 @@ const StorageListItem: FC = ({ label, folder }) => { - const usedSpace = (typeof folder?.UsedSpace === 'undefined') ? '?' : getReadableSize(folder.UsedSpace); - const totalSpace = (typeof folder?.FreeSpace === 'undefined' || typeof folder.UsedSpace === 'undefined') ? - '?' : getReadableSize(folder.FreeSpace + folder.UsedSpace); - const usedPercent = calculateUsed(folder); - const statusColor = folder ? getStatusColor(usedPercent) : 'primary'; + const readableUsedSpace = (typeof folder?.UsedSpace === 'undefined' || folder.UsedSpace < 0) ? + '?' : getReadableSize(folder.UsedSpace); + const totalSpace = calculateTotal(folder); + const readableTotalSpace = (totalSpace < 0) ? '?' : getReadableSize(totalSpace); + const usedPercentage = calculateUsedPercentage(folder); + const statusColor = folder ? getStatusColor(usedPercentage) : 'primary'; return ( @@ -87,7 +76,7 @@ const StorageListItem: FC = ({ = ({ textAlign: 'end' }} > - {`${usedSpace} / ${totalSpace}`} + {`${readableUsedSpace} / ${readableTotalSpace}`} } diff --git a/src/apps/dashboard/features/storage/utils/space.test.ts b/src/apps/dashboard/features/storage/utils/space.test.ts new file mode 100644 index 000000000..f234a9fd0 --- /dev/null +++ b/src/apps/dashboard/features/storage/utils/space.test.ts @@ -0,0 +1,35 @@ +import { describe, expect, it } from 'vitest'; + +import { calculateUsedPercentage, calculateTotal } from './space'; + +describe('calculateTotal()', () => { + it('should return the total', () => { + expect(calculateTotal({ FreeSpace: 1, UsedSpace: 2 })).toBe(3); + }); + + it('should return -1 for invalid used space values', () => { + expect(calculateTotal({ FreeSpace: 1 })).toBe(-1); + expect(calculateTotal({ FreeSpace: 1, UsedSpace: -1 })).toBe(-1); + }); + + it('should treat invalid free space values as 0', () => { + expect(calculateTotal({ UsedSpace: 1 })).toBe(1); + expect(calculateTotal({ FreeSpace: -1, UsedSpace: 1 })).toBe(1); + }); +}); + +describe('calculateUsedPercentage', () => { + it('should return the percentage used', () => { + expect(calculateUsedPercentage({ FreeSpace: 1, UsedSpace: 3 })).toBe(75); + }); + + it('should return 0 for invalid used space values', () => { + expect(calculateUsedPercentage({ FreeSpace: 1 })).toBe(0); + expect(calculateUsedPercentage({ FreeSpace: 1, UsedSpace: -1 })).toBe(0); + }); + + it('should return 100 for invalid free space values', () => { + expect(calculateUsedPercentage({ UsedSpace: 1 })).toBe(100); + expect(calculateUsedPercentage({ FreeSpace: -1, UsedSpace: 1 })).toBe(100); + }); +}); diff --git a/src/apps/dashboard/features/storage/utils/space.ts b/src/apps/dashboard/features/storage/utils/space.ts new file mode 100644 index 000000000..d18e447ae --- /dev/null +++ b/src/apps/dashboard/features/storage/utils/space.ts @@ -0,0 +1,20 @@ +import type { FolderStorageDto } from '@jellyfin/sdk/lib/generated-client/models/folder-storage-dto'; + +export const calculateTotal = (folder?: FolderStorageDto) => { + if (typeof folder?.UsedSpace === 'undefined' || folder.UsedSpace < 0) { + return -1; + } + + const freeSpace = Math.max(0, folder.FreeSpace || 0); + const usedSpace = Math.max(0, folder.UsedSpace); + return freeSpace + usedSpace; +}; + +export const calculateUsedPercentage = (folder?: FolderStorageDto) => { + const totalSpace = calculateTotal(folder); + if (totalSpace <= 0) return 0; + + const usedSpace = folder?.UsedSpace || 0; + + return Math.min(100, (usedSpace / totalSpace) * 100); +}; From df51d107b100bbfb858d5dabc5e473c4e52eff49 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Thu, 5 Jun 2025 21:28:41 +0300 Subject: [PATCH 377/645] Migrate plugin repositories to React --- .../plugins/repositories/index.html | 19 -- .../controllers/plugins/repositories/index.js | 190 ------------------ .../features/plugins/api/queryKey.ts | 3 +- .../features/plugins/api/useRepositories.ts | 29 +++ .../plugins/api/useSetRepositories.ts | 21 ++ .../plugins/components/NewRepositoryForm.tsx | 82 ++++++++ .../plugins/components/RepositoryListItem.tsx | 84 ++++++++ src/apps/dashboard/routes/_asyncRoutes.ts | 1 + src/apps/dashboard/routes/_legacyRoutes.ts | 7 - .../dashboard/routes/plugins/repositories.tsx | 107 ++++++++++ src/strings/en-us.json | 3 + 11 files changed, 329 insertions(+), 217 deletions(-) delete mode 100644 src/apps/dashboard/controllers/plugins/repositories/index.html delete mode 100644 src/apps/dashboard/controllers/plugins/repositories/index.js create mode 100644 src/apps/dashboard/features/plugins/api/useRepositories.ts create mode 100644 src/apps/dashboard/features/plugins/api/useSetRepositories.ts create mode 100644 src/apps/dashboard/features/plugins/components/NewRepositoryForm.tsx create mode 100644 src/apps/dashboard/features/plugins/components/RepositoryListItem.tsx create mode 100644 src/apps/dashboard/routes/plugins/repositories.tsx diff --git a/src/apps/dashboard/controllers/plugins/repositories/index.html b/src/apps/dashboard/controllers/plugins/repositories/index.html deleted file mode 100644 index a775da4b4..000000000 --- a/src/apps/dashboard/controllers/plugins/repositories/index.html +++ /dev/null @@ -1,19 +0,0 @@ -
-
-
-
-

${TabRepositories}

- -
- -
- -
-

${MessageNoRepositories}

-

${MessageAddRepository}

-
-
-
-
diff --git a/src/apps/dashboard/controllers/plugins/repositories/index.js b/src/apps/dashboard/controllers/plugins/repositories/index.js deleted file mode 100644 index 8eb0265f7..000000000 --- a/src/apps/dashboard/controllers/plugins/repositories/index.js +++ /dev/null @@ -1,190 +0,0 @@ -import loading from 'components/loading/loading'; -import globalize from 'lib/globalize'; -import dialogHelper from 'components/dialogHelper/dialogHelper'; -import confirm from 'components/confirm/confirm'; - -import 'elements/emby-button/emby-button'; -import 'elements/emby-checkbox/emby-checkbox'; -import 'elements/emby-select/emby-select'; - -import 'components/formdialog.scss'; -import 'components/listview/listview.scss'; - -let repositories = []; - -function reloadList(page) { - loading.show(); - ApiClient.getJSON(ApiClient.getUrl('Repositories')).then(list => { - repositories = list; - populateList({ - listElement: page.querySelector('#repositories'), - noneElement: page.querySelector('#none'), - repositories: repositories - }); - }).catch(e => { - console.error('error loading repositories', e); - page.querySelector('#none').classList.remove('hide'); - loading.hide(); - }); -} - -function saveList(page) { - loading.show(); - ApiClient.ajax({ - type: 'POST', - url: ApiClient.getUrl('Repositories'), - data: JSON.stringify(repositories), - contentType: 'application/json' - }).then(() => { - reloadList(page); - }).catch(e => { - console.error('error saving repositories', e); - loading.hide(); - }); -} - -function populateList(options) { - const paperList = document.createElement('div'); - paperList.className = 'paperList'; - - options.repositories.forEach(repo => { - paperList.appendChild(getRepositoryElement(repo)); - }); - - if (!options.repositories.length) { - options.noneElement.classList.remove('hide'); - } else { - options.noneElement.classList.add('hide'); - } - - options.listElement.innerHTML = ''; - options.listElement.appendChild(paperList); - loading.hide(); -} - -function getRepositoryElement(repository) { - const listItem = document.createElement('div'); - listItem.className = 'listItem listItem-border'; - - const repoLink = document.createElement('a', 'emby-linkbutton'); - repoLink.classList.add('clearLink', 'listItemIconContainer'); - repoLink.style.margin = '0'; - repoLink.style.padding = '0'; - repoLink.rel = 'noopener noreferrer'; - repoLink.target = '_blank'; - repoLink.href = repository.Url; - repoLink.innerHTML = ''; - listItem.appendChild(repoLink); - - const body = document.createElement('div'); - body.className = 'listItemBody two-line'; - - const name = document.createElement('h3'); - name.className = 'listItemBodyText'; - name.innerText = repository.Name; - body.appendChild(name); - - const url = document.createElement('div'); - url.className = 'listItemBodyText secondary'; - url.innerText = repository.Url; - body.appendChild(url); - - listItem.appendChild(body); - - const button = document.createElement('button', 'paper-icon-button-light'); - button.type = 'button'; - button.classList.add('btnDelete'); - button.id = repository.Url; - button.title = globalize.translate('Delete'); - button.innerHTML = ''; - listItem.appendChild(button); - - return listItem; -} - -export default function(view) { - view.addEventListener('viewshow', function () { - reloadList(this); - - const save = this; - $('#repositories', view).on('click', '.btnDelete', function() { - const button = this; - repositories = repositories.filter(function (r) { - return r.Url !== button.id; - }); - - saveList(save); - }); - }); - - view.querySelector('.btnNewRepository').addEventListener('click', () => { - const dialog = dialogHelper.createDialog({ - scrollY: false, - size: 'large', - modal: false, - removeOnClose: true - }); - - let html = ''; - - html += '
'; - html += ``; - html += `

${globalize.translate('HeaderNewRepository')}

`; - html += '
'; - html += '
'; - html += '
'; - html += ``; - html += `
${globalize.translate('LabelRepositoryNameHelp')}
`; - html += '
'; - html += '
'; - html += ``; - html += `
${globalize.translate('LabelRepositoryUrlHelp')}
`; - html += '
'; - html += ``; - html += '
'; - html += ''; - - dialog.innerHTML = html; - dialog.querySelector('.btnCancel').addEventListener('click', () => { - dialogHelper.close(dialog); - }); - - dialog.querySelector('.newPluginForm').addEventListener('submit', e => { - e.preventDefault(); - - const repositoryUrl = dialog.querySelector('#txtRepositoryUrl').value.toLowerCase(); - - const alertCallback = function () { - repositories.push({ - Name: dialog.querySelector('#txtRepositoryName').value, - Url: dialog.querySelector('#txtRepositoryUrl').value, - Enabled: true - }); - saveList(view); - dialogHelper.close(dialog); - }; - - // Check the repository URL for the official Jellyfin repository domain, or - // present the warning for 3rd party plugins. - if (!repositoryUrl.startsWith('https://repo.jellyfin.org/')) { - let msg = globalize.translate('MessageRepositoryInstallDisclaimer'); - msg += '
'; - msg += '
'; - msg += globalize.translate('PleaseConfirmRepositoryInstallation'); - - confirm(msg, globalize.translate('HeaderConfirmRepositoryInstallation')).then(function () { - alertCallback(); - }).catch(() => { - console.debug('repository not installed'); - dialogHelper.close(dialog); - }); - } else { - alertCallback(); - } - - return false; - }); - - dialogHelper.open(dialog); - }); -} diff --git a/src/apps/dashboard/features/plugins/api/queryKey.ts b/src/apps/dashboard/features/plugins/api/queryKey.ts index 72b5d8fc3..c999d3407 100644 --- a/src/apps/dashboard/features/plugins/api/queryKey.ts +++ b/src/apps/dashboard/features/plugins/api/queryKey.ts @@ -1,5 +1,6 @@ export enum QueryKey { ConfigurationPages = 'ConfigurationPages', PackageInfo = 'PackageInfo', - Plugins = 'Plugins' + Plugins = 'Plugins', + Repositories = 'Repositories' } diff --git a/src/apps/dashboard/features/plugins/api/useRepositories.ts b/src/apps/dashboard/features/plugins/api/useRepositories.ts new file mode 100644 index 000000000..27c5ef1fe --- /dev/null +++ b/src/apps/dashboard/features/plugins/api/useRepositories.ts @@ -0,0 +1,29 @@ +import type { Api } from '@jellyfin/sdk'; +import { queryOptions, useQuery } from '@tanstack/react-query'; +import type { AxiosRequestConfig } from 'axios'; +import { useApi } from 'hooks/useApi'; +import { QueryKey } from './queryKey'; +import { getPackageApi } from '@jellyfin/sdk/lib/utils/api/package-api'; + +const fetchRepositories = async ( + api: Api, + options?: AxiosRequestConfig +) => { + const response = await getPackageApi(api) + .getRepositories(options); + return response.data; +}; + +const getRepositoriesQuery = ( + api?: Api +) => queryOptions({ + queryKey: [ QueryKey.Repositories ], + queryFn: ({ signal }) => fetchRepositories(api!, { signal }), + enabled: !!api +}); + +export const useRepositories = () => { + const { api } = useApi(); + return useQuery(getRepositoriesQuery(api)); +}; + diff --git a/src/apps/dashboard/features/plugins/api/useSetRepositories.ts b/src/apps/dashboard/features/plugins/api/useSetRepositories.ts new file mode 100644 index 000000000..62f958975 --- /dev/null +++ b/src/apps/dashboard/features/plugins/api/useSetRepositories.ts @@ -0,0 +1,21 @@ +import { useMutation } from '@tanstack/react-query'; +import { useApi } from 'hooks/useApi'; +import { queryClient } from 'utils/query/queryClient'; +import { QueryKey } from './queryKey'; +import { getPackageApi } from '@jellyfin/sdk/lib/utils/api/package-api'; +import { PackageApiSetRepositoriesRequest } from '@jellyfin/sdk/lib/generated-client/api/package-api'; + +export const useSetRepositories = () => { + const { api } = useApi(); + return useMutation({ + mutationFn: (params: PackageApiSetRepositoriesRequest) => ( + getPackageApi(api!) + .setRepositories(params) + ), + onSuccess: () => { + void queryClient.invalidateQueries({ + queryKey: [ QueryKey.Repositories ] + }); + } + }); +}; diff --git a/src/apps/dashboard/features/plugins/components/NewRepositoryForm.tsx b/src/apps/dashboard/features/plugins/components/NewRepositoryForm.tsx new file mode 100644 index 000000000..7cc2a6912 --- /dev/null +++ b/src/apps/dashboard/features/plugins/components/NewRepositoryForm.tsx @@ -0,0 +1,82 @@ +import React, { useCallback } from 'react'; +import type { RepositoryInfo } from '@jellyfin/sdk/lib/generated-client/models/repository-info'; +import Dialog from '@mui/material/Dialog'; +import DialogTitle from '@mui/material/DialogTitle'; +import globalize from 'lib/globalize'; +import DialogActions from '@mui/material/DialogActions'; +import DialogContent from '@mui/material/DialogContent'; +import Button from '@mui/material/Button'; +import Stack from '@mui/material/Stack'; +import TextField from '@mui/material/TextField'; + +type IProps = { + open: boolean; + onClose: () => void; + onAdd: (repository: RepositoryInfo) => void; +}; + +const NewRepositoryForm = ({ open, onClose, onAdd }: IProps) => { + const onSubmit = useCallback((e: React.FormEvent) => { + e.preventDefault(); + + const formData = new FormData(e.currentTarget); + const data = Object.fromEntries(formData.entries()); + + const repository: RepositoryInfo = { + 'Name': data.Name?.toString(), + 'Url': data.Url?.toString(), + 'Enabled': true + }; + + onAdd(repository); + }, [ onAdd ]); + + return ( + + {globalize.translate('HeaderNewRepository')} + + + + + + + + + + + + + + + ); +}; + +export default NewRepositoryForm; diff --git a/src/apps/dashboard/features/plugins/components/RepositoryListItem.tsx b/src/apps/dashboard/features/plugins/components/RepositoryListItem.tsx new file mode 100644 index 000000000..1e56e70eb --- /dev/null +++ b/src/apps/dashboard/features/plugins/components/RepositoryListItem.tsx @@ -0,0 +1,84 @@ +import React, { useCallback, useState } from 'react'; +import type { RepositoryInfo } from '@jellyfin/sdk/lib/generated-client/models/repository-info'; +import ListItem from '@mui/material/ListItem'; +import Tooltip from '@mui/material/Tooltip'; +import Delete from '@mui/icons-material/Delete'; +import globalize from 'lib/globalize'; +import IconButton from '@mui/material/IconButton'; +import ListItemText from '@mui/material/ListItemText'; +import ListItemAvatar from '@mui/material/ListItemAvatar'; +import OpenInNew from '@mui/icons-material/OpenInNew'; +import Avatar from '@mui/material/Avatar'; +import ListItemButton from '@mui/material/ListItemButton'; +import Link from '@mui/material/Link'; +import ConfirmDialog from 'components/ConfirmDialog'; + +type IProps = { + repository: RepositoryInfo; + onDelete: (repository: RepositoryInfo) => void; +}; + +const RepositoryListItem = ({ repository, onDelete }: IProps) => { + const [ isConfirmDeleteOpen, setIsConfirmDeleteOpen ] = useState(false); + + const confirmDeletePrompt = useCallback(() => { + setIsConfirmDeleteOpen(true); + }, []); + + const onCancel = useCallback(() => { + setIsConfirmDeleteOpen(false); + }, []); + + const onConfirmDelete = useCallback(() => { + onDelete(repository); + setIsConfirmDeleteOpen(false); + }, [ onDelete, repository ]); + + return ( + <> + + + + + + + } + > + + + + + + + + + + + + + ); +}; + +export default RepositoryListItem; diff --git a/src/apps/dashboard/routes/_asyncRoutes.ts b/src/apps/dashboard/routes/_asyncRoutes.ts index 2ab21c5d4..97633588b 100644 --- a/src/apps/dashboard/routes/_asyncRoutes.ts +++ b/src/apps/dashboard/routes/_asyncRoutes.ts @@ -16,6 +16,7 @@ export const ASYNC_ADMIN_ROUTES: AsyncRoute[] = [ { path: 'playback/streaming', type: AppType.Dashboard }, { path: 'playback/trickplay', type: AppType.Dashboard }, { path: 'plugins/:pluginId', page: 'plugins/plugin', type: AppType.Dashboard }, + { path: 'plugins/repositories', type: AppType.Dashboard }, { path: 'tasks', type: AppType.Dashboard }, { path: 'tasks/:id', page: 'tasks/task', type: AppType.Dashboard }, { path: 'users', type: AppType.Dashboard }, diff --git a/src/apps/dashboard/routes/_legacyRoutes.ts b/src/apps/dashboard/routes/_legacyRoutes.ts index ceedb7265..b5c066ce3 100644 --- a/src/apps/dashboard/routes/_legacyRoutes.ts +++ b/src/apps/dashboard/routes/_legacyRoutes.ts @@ -37,13 +37,6 @@ export const LEGACY_ADMIN_ROUTES: LegacyRoute[] = [ controller: 'plugins/available/index', view: 'plugins/available/index.html' } - }, { - path: 'plugins/repositories', - pageProps: { - appType: AppType.Dashboard, - controller: 'plugins/repositories/index', - view: 'plugins/repositories/index.html' - } }, { path: 'livetv/guide', pageProps: { diff --git a/src/apps/dashboard/routes/plugins/repositories.tsx b/src/apps/dashboard/routes/plugins/repositories.tsx new file mode 100644 index 000000000..3ce8579e2 --- /dev/null +++ b/src/apps/dashboard/routes/plugins/repositories.tsx @@ -0,0 +1,107 @@ +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import Typography from '@mui/material/Typography'; +import AddIcon from '@mui/icons-material/Add'; +import Page from 'components/Page'; +import globalize from 'lib/globalize'; +import React, { useCallback, useState } from 'react'; +import Stack from '@mui/material/Stack'; +import { useRepositories } from 'apps/dashboard/features/plugins/api/useRepositories'; +import Loading from 'components/loading/LoadingComponent'; +import Alert from '@mui/material/Alert'; +import List from '@mui/material/List'; +import RepositoryListItem from 'apps/dashboard/features/plugins/components/RepositoryListItem'; +import type { RepositoryInfo } from '@jellyfin/sdk/lib/generated-client/models/repository-info'; +import { useSetRepositories } from 'apps/dashboard/features/plugins/api/useSetRepositories'; +import NewRepositoryForm from 'apps/dashboard/features/plugins/components/NewRepositoryForm'; + +export const Component = () => { + const { data: repositories, isPending, isError } = useRepositories(); + const [ isRepositoryFormOpen, setIsRepositoryFormOpen ] = useState(false); + const setRepositories = useSetRepositories(); + + const onDelete = useCallback((repository: RepositoryInfo) => { + if (repositories) { + setRepositories.mutate({ + repositoryInfo: repositories.filter(currentRepo => currentRepo.Url !== repository.Url) + }); + } + }, [ repositories, setRepositories ]); + + const onRepositoryAdd = useCallback((repository: RepositoryInfo) => { + if (repositories) { + setRepositories.mutate({ + repositoryInfo: [ + ...repositories, + repository + ] + }, { + onSettled: () => { + setIsRepositoryFormOpen(false); + } + }); + } + }, [ repositories, setRepositories ]); + + const openRepositoryForm = useCallback(() => { + setIsRepositoryFormOpen(true); + }, []); + + const onRepositoryFormClose = useCallback(() => { + setIsRepositoryFormOpen(false); + }, []); + + if (isPending) { + return ; + } + + return ( + + + + {isError ? ( + {globalize.translate('RepositoriesPageLoadError')} + ) : ( + + {globalize.translate('TabRepositories')} + + + + {repositories.length > 0 ? ( + + {repositories.map(repository => { + return ; + })} + + ) : ( + + {globalize.translate('MessageNoRepositories')} + {globalize.translate('MessageAddRepository')} + + )} + + )} + + + ); +}; + +Component.displayName = 'PluginRepositoriesPage'; diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 5402157b2..d312cc9c0 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -177,6 +177,7 @@ "ConfirmDeleteSeries": "Deleting this series will delete ALL {0} episodes from both the file system and your media library. Are you sure you wish to continue?", "ConfirmDeleteItems": "Deleting these items will delete them from both the file system and your media library. Are you sure you wish to continue?", "ConfirmDeleteLyrics": "Deleting these lyrics will delete them from both the file system and your media library. Are you sure you wish to continue?", + "ConfirmDeleteRepository": "Delete repository?", "ConfirmDeletion": "Confirm Deletion", "ConfirmEndPlayerSession": "Would you like to shutdown Jellyfin on {0}?", "Connect": "Connect", @@ -212,6 +213,7 @@ "DeleteCustomImage": "Delete Custom Image", "DeleteDeviceConfirmation": "Are you sure you wish to delete this device? It will reappear the next time a user signs in with it.", "DeleteDevicesConfirmation": "Are you sure you wish to delete all devices? All other sessions will be logged out. Devices will reappear the next time a user signs in.", + "DeleteRepositoryConfirmation": "Are you sure you'd like to delete this repository?", "DeleteImage": "Delete Image", "DeleteImageConfirmation": "Are you sure you wish to delete this image?", "DeleteLyrics": "Delete lyrics", @@ -1464,6 +1466,7 @@ "ReplaceAllMetadata": "Replace all metadata", "ReplaceExistingImages": "Replace existing images", "ReplaceTrickplayImages": "Replace existing trickplay images", + "RepositoriesPageLoadError": "Failed to load repositories", "Retry": "Retry", "RetryWithGlobalSearch": "Retry with a global search", "Reset": "Reset", From 397efa20b81fbb7bac75b76f7783035f397249fb Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Thu, 5 Jun 2025 14:10:25 -0400 Subject: [PATCH 378/645] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 98097a88a..18cee5e59 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -2030,5 +2030,17 @@ "HeaderServerUnavailable": "Server niet beschikbaar", "MessageForgotPasswordPinReset": "Pincode hier invoeren om wachtwoordherstel te voltooien", "DownloadManager": "Downloads", - "ViewSettings": "Weergave-instellingen" + "ViewSettings": "Weergave-instellingen", + "Create": "Aanmaken", + "Success": "Gelukt", + "HeaderBackups": "Back-ups", + "MessageWaitingForServer": "Wachten op server...", + "ButtonCreateBackup": "Back-up aanmaken", + "LabelRestore": "Terugzetten", + "BackupsPageLoadError": "Laden van back-up-pagina mislukt", + "LabelBackupsUnavailable": "Geen back-ups beschikbaar", + "LabelDatabase": "Database", + "MessageBackupInProgress": "Back-up in uitvoering", + "MessageRestoreInProgress": "Terugzetten in uitvoering", + "MessageRestoreSuccess": "Terugzetten voltooid" } From 8fa53f369b335fc9d6fd4080793562aff10fce3f Mon Sep 17 00:00:00 2001 From: Kityn Date: Thu, 5 Jun 2025 18:15:23 -0400 Subject: [PATCH 379/645] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index a583586be..9590620f2 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -2031,5 +2031,29 @@ "HeaderServerUnavailable": "Serwer niedostępny", "ViewSettings": "Zobacz ustawienia", "MessageForgotPasswordPinReset": "Wpisz tutaj kod PIN, aby zakończyć resetowanie hasła", - "DownloadManager": "Pobrane" + "DownloadManager": "Pobrane", + "BackupsPageLoadError": "Nie udało się wczytać strony kopii zapasowych", + "ButtonCreateBackup": "Utwórz kopię zapasową", + "MessageWaitingForServer": "Oczekiwanie na serwer...", + "LabelBackupsUnavailable": "Brak dostępnych kopii zapasowych", + "LabelProgramData": "Dane programu", + "StorageType.CDRom": "CD-ROM", + "StorageType.NoRootDirectory": "Brak katalogu głównego", + "HeaderBackups": "Kopie zapasowe", + "MessageBackupInProgress": "Tworzenie kopii zapasowej w toku", + "MessageBackupDisclaimer": "W zależności od rozmiaru biblioteki proces tworzenia kopii zapasowej może potrwać pewien czas.", + "MessageRestoreSuccess": "Przywracanie zakończone pomyślnie", + "Create": "Utwórz", + "LabelDatabase": "Baza danych", + "LabelRestore": "Przywróć", + "MessageRestoreInProgress": "Przywracanie w toku", + "StorageType.Fixed": "Stały", + "StorageType.Network": "Sieć", + "StorageType.Ram": "RAM", + "StorageType.Removable": "Wymienny", + "StorageType.Unknown": "Nieznany", + "Success": "Powodzenie", + "HeaderBackupsHelp": "Twórz i przywracaj migawki swojego serwera, które mogą zawierać bazę danych, metadane, napisy i trickplay.", + "LabelImageCache": "Pamięć podręczna obrazów", + "MessageRestoreDisclaimer": "OSTRZEŻENIE: zamierzasz przywrócić dane z poprzedniej kopii zapasowej. Twój serwer będzie bezużyteczny przez cały czas trwania procesu, a wszelkie nowe dane utworzone od czasu utworzenia kopii zapasowej zostaną utracone." } From da48856003beb53ea314063cc0a9eb3f5914db85 Mon Sep 17 00:00:00 2001 From: myrad2267 Date: Thu, 5 Jun 2025 19:54:02 -0400 Subject: [PATCH 380/645] Translated using Weblate (French (Canada)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr_CA/ --- src/strings/fr-ca.json | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/strings/fr-ca.json b/src/strings/fr-ca.json index 77993f206..99874de84 100644 --- a/src/strings/fr-ca.json +++ b/src/strings/fr-ca.json @@ -1975,5 +1975,29 @@ "HeaderUpdateRequired": "Mise à jour requise", "ViewSettings": "Afficher les paramètres", "MessageForgotPasswordPinReset": "Entrez le NIP ici pour finaliser la réinitialisation du mot de passe", - "DownloadManager": "Téléchargement" + "DownloadManager": "Téléchargement", + "LabelImageCache": "Cache d'images", + "LabelProgramData": "Données du programme", + "StorageType.CDRom": "CD-ROM", + "StorageType.Fixed": "Réparé", + "BackupsPageLoadError": "Échec du chargement de la page de sauvegarde", + "ButtonCreateBackup": "Créer une sauvegarde", + "Create": "Créer", + "HeaderBackupsHelp": "Créez et restaurez des instantanés de votre serveur qui peuvent inclure la base de données, les métadonnées, les sous-titres et le trickplay.", + "LabelBackupsUnavailable": "Aucune sauvegarde disponible", + "LabelDatabase": "Base de données", + "MessageBackupInProgress": "Sauvegarde en cours", + "MessageRestoreDisclaimer": "AVERTISSEMENT : Vous êtes sur le point de restaurer une sauvegarde précédente. Votre serveur sera inutilisable pendant toute la durée du processus et toutes les nouvelles données créées depuis la sauvegarde seront perdues.", + "MessageRestoreInProgress": "Restauration en cours", + "MessageRestoreSuccess": "Restauration terminée avec succès", + "LabelRestore": "Restaurer", + "MessageWaitingForServer": "En attente du serveur...", + "StorageType.Network": "Réseau", + "StorageType.NoRootDirectory": "Pas de répertoire racine", + "StorageType.Ram": "RAM", + "StorageType.Removable": "Amovible", + "StorageType.Unknown": "Inconnu", + "Success": "Succès", + "HeaderBackups": "Sauvegardes", + "MessageBackupDisclaimer": "Selon la taille de votre médiathèque, le processus de sauvegarde peut prendre un certain temps." } From e4c04a9bca4cad94265f3e8ffc551b4466822a4d Mon Sep 17 00:00:00 2001 From: myrad2267 Date: Thu, 5 Jun 2025 19:59:53 -0400 Subject: [PATCH 381/645] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 8abff338c..c81918d75 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -2031,5 +2031,29 @@ "HeaderUpdateRequired": "Mise à jour requise", "ViewSettings": "Afficher les paramètres", "MessageForgotPasswordPinReset": "Entrez le PIN ici pour finaliser la réinitialisation du mot de passe", - "DownloadManager": "Téléchargement" + "DownloadManager": "Téléchargement", + "LabelImageCache": "Cache d'images", + "LabelRestore": "Restaurer", + "StorageType.CDRom": "CD-ROM", + "StorageType.NoRootDirectory": "Pas de répertoire racine", + "HeaderBackups": "Sauvegardes", + "BackupsPageLoadError": "Échec du chargement de la page de sauvegarde", + "ButtonCreateBackup": "Créer une sauvegarde", + "Create": "Créer", + "HeaderBackupsHelp": "Créez et restaurez des instantanés de votre serveur qui peuvent inclure la base de données, les métadonnées, les sous-titres et le trickplay.", + "LabelBackupsUnavailable": "Aucune sauvegarde disponible", + "LabelDatabase": "Base de données", + "MessageWaitingForServer": "En attente du serveur...", + "LabelProgramData": "Données du programme", + "MessageBackupInProgress": "Sauvegarde en cours", + "MessageRestoreInProgress": "Restauration en cours", + "MessageRestoreSuccess": "Restauration terminée avec succès", + "StorageType.Fixed": "Réparé", + "StorageType.Network": "Réseau", + "StorageType.Ram": "RAM", + "StorageType.Removable": "Amovible", + "StorageType.Unknown": "Inconnu", + "Success": "Succès", + "MessageBackupDisclaimer": "Selon la taille de votre médiathèque, le processus de sauvegarde peut prendre un certain temps.", + "MessageRestoreDisclaimer": "AVERTISSEMENT : Vous êtes sur le point de restaurer une sauvegarde précédente. Votre serveur sera inutilisable pendant toute la durée du processus et toutes les nouvelles données créées depuis la sauvegarde seront perdues." } From d514a01a4bcfe9647ea227533ea583dd22bfdbd1 Mon Sep 17 00:00:00 2001 From: wzrd Date: Thu, 5 Jun 2025 21:45:32 -0400 Subject: [PATCH 382/645] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/strings/de.json b/src/strings/de.json index f60a7f336..3f1192672 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -2031,5 +2031,29 @@ "HeaderServerUnavailable": "Server nicht verfügbar", "ViewSettings": "Einstellungen anzeigen", "MessageForgotPasswordPinReset": "Gib hier die PIN ein, um das Zurücksetzen des Passworts abzuschließen", - "DownloadManager": "Downloads" + "DownloadManager": "Downloads", + "Create": "Erstellen", + "HeaderBackupsHelp": "Snapshots des Servers erstellen und wiederherstellen. Die Snapshots können die Datenbank, Metadaten, Untertitel und Trickplay enthalten.", + "LabelBackupsUnavailable": "Keine Backups verfügbar", + "LabelDatabase": "Datenbank", + "MessageBackupDisclaimer": "Je nach Größe der Bibliothek kann der Backup-Vorgang eine Weile dauern.", + "MessageBackupInProgress": "Backup läuft", + "MessageRestoreDisclaimer": "WARNUNG: Du bist dabei, eine frühere Sicherung wiederherzustellen. Der Server wird für die Dauer des Vorgangs nicht nutzbar sein und alle neuen Daten, die seit der Sicherung erstellt wurden, gehen verloren.", + "MessageRestoreInProgress": "Wiederherstellung läuft", + "MessageRestoreSuccess": "Wiederherstellung erfolgreich abgeschlossen", + "MessageWaitingForServer": "Warte auf Server...", + "Success": "Erfolgreich", + "HeaderBackups": "Backups", + "LabelImageCache": "Bild-Cache", + "StorageType.CDRom": "CD-ROM", + "StorageType.NoRootDirectory": "Kein Root-Verzeichnis", + "BackupsPageLoadError": "Laden der Backup Seite fehlgeschlagen", + "ButtonCreateBackup": "Backup erstellen", + "LabelProgramData": "Programmdaten", + "LabelRestore": "Wiederherstellen", + "StorageType.Fixed": "Fest", + "StorageType.Network": "Netzwerk", + "StorageType.Ram": "Arbeitsspeicher", + "StorageType.Removable": "Wechselmedium", + "StorageType.Unknown": "Unbekannt" } From adc01f15c4a4660d63dc83a963719bdaefc85910 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Fri, 6 Jun 2025 01:28:27 -0400 Subject: [PATCH 383/645] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index 68f422468..ccc9e1230 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -2031,5 +2031,29 @@ "HeaderUpdateRequired": "Je nutná aktualizace", "ViewSettings": "Zobrazit nastavení", "DownloadManager": "Stažené", - "MessageForgotPasswordPinReset": "Zadáním PINu dokončete obnovení hesla" + "MessageForgotPasswordPinReset": "Zadáním PINu dokončete obnovení hesla", + "LabelImageCache": "Mezipamět obrázků", + "StorageType.CDRom": "CD-ROM", + "StorageType.Fixed": "Fixní", + "StorageType.Removable": "Odstranitelný", + "StorageType.Network": "Síť", + "StorageType.NoRootDirectory": "Neexistuje kořenový adresář", + "StorageType.Ram": "RAM", + "StorageType.Unknown": "Neznámý", + "BackupsPageLoadError": "Načtení stránky se zálohami se nezdařilo", + "ButtonCreateBackup": "Vytvořit zálohu", + "Create": "Vytvořit", + "HeaderBackupsHelp": "Vytvořit a obnovit zálohu vašeho serveru, což zahrnuje databázi, metadata, titulky a soubory TrickPlay.", + "LabelBackupsUnavailable": "Žádná záloha není k dispozici", + "LabelDatabase": "Databáze", + "LabelRestore": "Obnovit", + "MessageBackupDisclaimer": "Tento proces může trvat delší dobu podle toho, jak velkou máte knihovnu.", + "MessageBackupInProgress": "Probíhá zálohování", + "MessageRestoreDisclaimer": "UPOZORNĚNÍ: Chystáte se obnovit existující zálohu. Váš server bude během tohoto procesu nedostupný a veškerá data vytvořená během obnovy zálohy budou ztracena.", + "MessageRestoreInProgress": "Probíhá obnovení ze zálohy", + "MessageRestoreSuccess": "Obnovení ze zálohy dokončeno", + "MessageWaitingForServer": "Čekání na odezvu serveru...", + "Success": "Úspěch", + "HeaderBackups": "Zálohy", + "LabelProgramData": "Programová data" } From 365b2b09b85691b6e8a1f4bd31de66fa6e91f1d8 Mon Sep 17 00:00:00 2001 From: robogo82 Date: Fri, 6 Jun 2025 04:31:44 -0400 Subject: [PATCH 384/645] Translated using Weblate (Croatian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hr/ --- src/strings/hr.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/hr.json b/src/strings/hr.json index 2b82e04a8..04e7bcef7 100644 --- a/src/strings/hr.json +++ b/src/strings/hr.json @@ -1584,5 +1584,7 @@ "EnableHi10p": "Uključi H.264 High 10 Profil", "EnableTrueHd": "Uključi TrueHD", "Editor": "Uređivač", - "DateModified": "Datum izmjenjivanja" + "DateModified": "Datum izmjenjivanja", + "AllowStreamSharingHelp": "Dozvoliti Jellyfinu da udvostruči mpegts stream iz tunera i podijeli novu kopiju streama sa svojim klijentima. Ovo je korisno kada tuner ima ograničen broj stream-ova, no može uzrokovati poteškoće pri reprodukciji.", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Ukomponirati titlove u video stream kada se aktivira transcoding. Ovo osigurava sinkronizaciju titlova nakon transcoding-a, no uz smanjenu brzinu transcoding-a." } From bd6c7b7125d74ef0d52e9bef061646d445fd614c Mon Sep 17 00:00:00 2001 From: stanol Date: Fri, 6 Jun 2025 07:23:07 -0400 Subject: [PATCH 385/645] Translated using Weblate (Ukrainian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/uk/ --- src/strings/uk.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/strings/uk.json b/src/strings/uk.json index 402a1a1c9..015ef50b6 100644 --- a/src/strings/uk.json +++ b/src/strings/uk.json @@ -2028,5 +2028,10 @@ "HeaderServerUnavailable": "Сервер недоступний", "DownloadManager": "Завантаження", "ViewSettings": "Налаштування перегляду", - "MessageForgotPasswordPinReset": "Введіть PIN-код, щоб завершити відновлення пароля" + "MessageForgotPasswordPinReset": "Введіть PIN-код, щоб завершити відновлення пароля", + "ButtonCreateBackup": "Створити резервну копію", + "HeaderBackupsHelp": "Створюйте та відновлюйте зрізи вашого сервера, які можуть включати базу даних, метадані, субтитри та trickplay.", + "LabelBackupsUnavailable": "Резервні копії відсутні", + "BackupsPageLoadError": "Не вдалося завантажити сторінку резервних копій", + "Create": "Створити" } From 64e0fa5a1b3c35dbec18f9aaae4adbdf9558a1d3 Mon Sep 17 00:00:00 2001 From: stanol Date: Fri, 6 Jun 2025 07:29:15 -0400 Subject: [PATCH 386/645] Translated using Weblate (Ukrainian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/uk/ --- src/strings/uk.json | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/strings/uk.json b/src/strings/uk.json index 015ef50b6..a7a8be5c7 100644 --- a/src/strings/uk.json +++ b/src/strings/uk.json @@ -2033,5 +2033,24 @@ "HeaderBackupsHelp": "Створюйте та відновлюйте зрізи вашого сервера, які можуть включати базу даних, метадані, субтитри та trickplay.", "LabelBackupsUnavailable": "Резервні копії відсутні", "BackupsPageLoadError": "Не вдалося завантажити сторінку резервних копій", - "Create": "Створити" + "Create": "Створити", + "StorageType.CDRom": "CD-ROM", + "MessageRestoreInProgress": "Виконується відновлення", + "MessageWaitingForServer": "Очікування сервера...", + "LabelImageCache": "Кеш зображень", + "LabelProgramData": "Дані програми", + "MessageBackupDisclaimer": "Залежно від розміру вашої медіатеки, процес резервного копіювання може зайняти деякий час.", + "MessageRestoreDisclaimer": "ПОПЕРЕДЖЕННЯ: Ви збираєтеся відновитися з попередньої резервної копії. Ваш сервер буде виведено з ладу на час цього процесу, а всі нові дані, створені з моменту створення резервної копії, буде втрачено.", + "MessageRestoreSuccess": "Відновлення успішно завершено", + "StorageType.NoRootDirectory": "Немає кореневого каталогу", + "LabelDatabase": "База даних", + "LabelRestore": "Відновити", + "MessageBackupInProgress": "Виконується резервне копіювання", + "StorageType.Network": "Мережеве", + "StorageType.Fixed": "Фіксоване", + "StorageType.Ram": "ОЗУ", + "StorageType.Removable": "Знімне", + "StorageType.Unknown": "Невідоме", + "Success": "Успіх", + "HeaderBackups": "Резервні копії" } From 7b678a88c90065ae212ec31c57cc8a94038b4f58 Mon Sep 17 00:00:00 2001 From: Nyanmisaka <799610810@qq.com> Date: Fri, 6 Jun 2025 07:50:37 -0400 Subject: [PATCH 387/645] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index 59e2f45f1..106353385 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -2031,5 +2031,29 @@ "HeaderUpdateRequired": "需要更新", "ViewSettings": "查看设置", "MessageForgotPasswordPinReset": "在此处输入 PIN 码以完成密码重置", - "DownloadManager": "下载" + "DownloadManager": "下载", + "StorageType.CDRom": "CD-ROM", + "HeaderBackupsHelp": "创建和恢复服务器的快照,其中可以包括数据库、元数据、字幕和进度条预览图。", + "LabelImageCache": "图像缓存", + "LabelProgramData": "程序数据", + "StorageType.Removable": "移动存储", + "MessageBackupDisclaimer": "取决于您的媒体库的大小,备份过程可能需要一段时间。", + "MessageRestoreDisclaimer": "警告:您即将从之前的备份进行恢复。在此过程中,您的服务器将无法使用,并且自备份以来创建的所有新数据都将丢失。", + "LabelBackupsUnavailable": "没有可用的备份", + "LabelDatabase": "数据库", + "ButtonCreateBackup": "创建备份", + "BackupsPageLoadError": "无法加载备份页面", + "Create": "创建", + "LabelRestore": "恢复", + "MessageBackupInProgress": "正在进行备份", + "MessageRestoreInProgress": "正在进行恢复", + "MessageRestoreSuccess": "恢复成功完成", + "MessageWaitingForServer": "正在等待服务器响应...", + "StorageType.Fixed": "固定存储", + "StorageType.Network": "网络", + "StorageType.NoRootDirectory": "无根目录", + "StorageType.Ram": "内存盘", + "StorageType.Unknown": "未知存储", + "Success": "成功", + "HeaderBackups": "备份" } From cd72d924ac42b30eca84ee5a05d9410837743c50 Mon Sep 17 00:00:00 2001 From: Roelof Jan Elsinga Date: Fri, 6 Jun 2025 12:22:59 -0400 Subject: [PATCH 388/645] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 18cee5e59..f6f5aa553 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -2042,5 +2042,8 @@ "LabelDatabase": "Database", "MessageBackupInProgress": "Back-up in uitvoering", "MessageRestoreInProgress": "Terugzetten in uitvoering", - "MessageRestoreSuccess": "Terugzetten voltooid" + "MessageRestoreSuccess": "Terugzetten voltooid", + "HeaderBackupsHelp": "Maak en herstel snapshots van jouw server, wat de database, metadata, ondertiteling, en previews.", + "LabelImageCache": "Afbeelding cache", + "MessageBackupDisclaimer": "Aan de hand van de grootte van je bibliotheek, kan het back-up proces een tijdje duren." } From 376cd3832c19cb0057a5a46de6879b9562aafe09 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Fri, 6 Jun 2025 12:51:23 -0400 Subject: [PATCH 389/645] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index f6f5aa553..ed1571368 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -2045,5 +2045,14 @@ "MessageRestoreSuccess": "Terugzetten voltooid", "HeaderBackupsHelp": "Maak en herstel snapshots van jouw server, wat de database, metadata, ondertiteling, en previews.", "LabelImageCache": "Afbeelding cache", - "MessageBackupDisclaimer": "Aan de hand van de grootte van je bibliotheek, kan het back-up proces een tijdje duren." + "MessageBackupDisclaimer": "Aan de hand van de grootte van je bibliotheek, kan het back-up proces een tijdje duren.", + "LabelProgramData": "Programmagegevens", + "StorageType.CDRom": "Cd-rom", + "MessageRestoreDisclaimer": "WAARSCHUWING: Je staat op het punt een eerdere back-up terug te zetten. Je server is tijdens dit proces onbruikbaar en alle gegevens die sinds de back-up zijn aangemaakt gaan verloren.", + "StorageType.Fixed": "Vast", + "StorageType.Network": "Netwerk", + "StorageType.NoRootDirectory": "Geen hoofdmap", + "StorageType.Ram": "RAM", + "StorageType.Removable": "Verwisselbaar", + "StorageType.Unknown": "Onbekend" } From a4dcb55b52722e7221ff7a3536c4d8a03eb4b11d Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Fri, 6 Jun 2025 12:58:14 -0400 Subject: [PATCH 390/645] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index ed1571368..9a72e4f89 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -2043,9 +2043,9 @@ "MessageBackupInProgress": "Back-up in uitvoering", "MessageRestoreInProgress": "Terugzetten in uitvoering", "MessageRestoreSuccess": "Terugzetten voltooid", - "HeaderBackupsHelp": "Maak en herstel snapshots van jouw server, wat de database, metadata, ondertiteling, en previews.", - "LabelImageCache": "Afbeelding cache", - "MessageBackupDisclaimer": "Aan de hand van de grootte van je bibliotheek, kan het back-up proces een tijdje duren.", + "HeaderBackupsHelp": "Maak en herstel momentopnamen van je server. Deze kunnen de database, metadata, ondertiteling en trickplay bevatten.", + "LabelImageCache": "Afbeeldingscache", + "MessageBackupDisclaimer": "Afhankelijk van de grootte van je bibliotheek kan het maken van de back-up enige tijd duren.", "LabelProgramData": "Programmagegevens", "StorageType.CDRom": "Cd-rom", "MessageRestoreDisclaimer": "WAARSCHUWING: Je staat op het punt een eerdere back-up terug te zetten. Je server is tijdens dit proces onbruikbaar en alle gegevens die sinds de back-up zijn aangemaakt gaan verloren.", From 815a5b788c8ed81534cb2890b1b544f20dc23f11 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Jun 2025 23:16:02 +0000 Subject: [PATCH 391/645] Update Babel --- package-lock.json | 2010 ++++++++++++++++++++++----------------------- package.json | 8 +- 2 files changed, 1000 insertions(+), 1018 deletions(-) diff --git a/package-lock.json b/package-lock.json index b561f67eb..6581ebd06 100644 --- a/package-lock.json +++ b/package-lock.json @@ -68,10 +68,10 @@ "whatwg-fetch": "3.6.20" }, "devDependencies": { - "@babel/core": "7.26.10", - "@babel/plugin-transform-modules-umd": "7.25.9", - "@babel/preset-env": "7.26.9", - "@babel/preset-react": "7.26.3", + "@babel/core": "7.27.4", + "@babel/plugin-transform-modules-umd": "7.27.1", + "@babel/preset-env": "7.27.2", + "@babel/preset-react": "7.27.1", "@eslint-community/eslint-plugin-eslint-comments": "4.5.0", "@eslint/js": "9.26.0", "@stylistic/eslint-plugin": "4.2.0", @@ -191,23 +191,23 @@ "license": "ISC" }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", - "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz", + "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==", "dev": true, "license": "MIT", "engines": { @@ -215,22 +215,22 @@ } }, "node_modules/@babel/core": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", - "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz", + "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.10", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.10", - "@babel/parser": "^7.26.10", - "@babel/template": "^7.26.9", - "@babel/traverse": "^7.26.10", - "@babel/types": "^7.26.10", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.4", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.27.4", + "@babel/types": "^7.27.3", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -253,13 +253,13 @@ "license": "MIT" }, "node_modules/@babel/generator": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.10.tgz", - "integrity": "sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", + "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.10", - "@babel/types": "^7.26.10", + "@babel/parser": "^7.27.5", + "@babel/types": "^7.27.3", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -269,27 +269,27 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.3" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -314,18 +314,18 @@ "dev": true }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz", - "integrity": "sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", + "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.26.9", + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.27.1", "semver": "^6.3.1" }, "engines": { @@ -336,13 +336,13 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", - "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", + "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-annotate-as-pure": "^7.27.1", "regexpu-core": "^6.2.0", "semver": "^6.3.1" }, @@ -371,42 +371,42 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" }, "engines": { "node": ">=6.9.0" @@ -416,22 +416,22 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, "license": "MIT", "engines": { @@ -439,15 +439,15 @@ } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", - "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-wrap-function": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -457,15 +457,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", - "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.26.5" + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -475,41 +475,41 @@ } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "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==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, "license": "MIT", "engines": { @@ -517,41 +517,41 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", - "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz", + "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/template": "^7.27.1", + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz", - "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.10" + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz", - "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", + "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.26.10" + "@babel/types": "^7.27.3" }, "bin": { "parser": "bin/babel-parser.js" @@ -561,14 +561,14 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", - "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", + "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -578,13 +578,13 @@ } }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", - "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -594,13 +594,13 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", - "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -610,15 +610,15 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -628,14 +628,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", - "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz", + "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -657,13 +657,13 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", + "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -673,13 +673,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -689,13 +689,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -721,13 +721,13 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -737,15 +737,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", - "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.27.1.tgz", + "integrity": "sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.26.8" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -755,15 +755,15 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -773,13 +773,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", - "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -789,13 +789,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.5.tgz", + "integrity": "sha512-JF6uE2s67f0y2RZcm2kpAUEbD50vH62TyWVebxwHAlbSdM49VqPz8t4a1uIjp4NIOIZ4xzLfjY5emt/RCyC7TQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -805,14 +805,14 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -822,14 +822,14 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz", + "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -839,17 +839,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.1.tgz", + "integrity": "sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/traverse": "^7.25.9", + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.27.1", "globals": "^11.1.0" }, "engines": { @@ -869,14 +869,14 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/template": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -886,13 +886,13 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.3.tgz", + "integrity": "sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -902,14 +902,14 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", + "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -919,13 +919,13 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -935,14 +935,14 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -952,13 +952,13 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -968,13 +968,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", - "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", + "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -984,13 +984,13 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1000,14 +1000,14 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", - "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1017,15 +1017,15 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1035,13 +1035,13 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", + "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1051,13 +1051,13 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1067,13 +1067,13 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", + "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1083,13 +1083,13 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1099,14 +1099,14 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1116,14 +1116,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", - "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1133,16 +1133,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", + "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1152,14 +1152,14 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1169,14 +1169,14 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1186,13 +1186,13 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1202,13 +1202,13 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.26.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", - "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1218,13 +1218,13 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1234,15 +1234,16 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.3.tgz", + "integrity": "sha512-7ZZtznF9g4l2JCImCo5LNKFHB5eXnN39lLtLY5Tg+VkR0jwOt7TBciMckuiQIOIW7L5tkQOCh3bVGYeXgMx52Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9" + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.27.3", + "@babel/plugin-transform-parameters": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1252,14 +1253,14 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1269,13 +1270,13 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1285,14 +1286,14 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", + "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1302,13 +1303,13 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.1.tgz", + "integrity": "sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1318,14 +1319,14 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1335,15 +1336,15 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1353,13 +1354,13 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1369,13 +1370,13 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", - "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.27.1.tgz", + "integrity": "sha512-p9+Vl3yuHPmkirRrg021XiP+EETmPMQTLr6Ayjj85RLNEbb3Eya/4VI0vAdzQG9SEAl2Lnt7fy5lZyMzjYoZQQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1385,17 +1386,17 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", - "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", + "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1405,13 +1406,13 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", - "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", + "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.25.9" + "@babel/plugin-transform-react-jsx": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1421,14 +1422,14 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", - "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", + "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1438,14 +1439,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.5.tgz", + "integrity": "sha512-uhB8yHerfe3MWnuLAhEbeQ4afVoqv8BQsPqrTv7e/jZ9y00kJL6l9a/f4OWaKxotmjzewfEyXE1vgDJenkQ2/Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "regenerator-transform": "^0.15.2" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1455,14 +1455,14 @@ } }, "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", + "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1472,13 +1472,13 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1488,13 +1488,13 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1504,14 +1504,14 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1521,13 +1521,13 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1537,13 +1537,13 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", - "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1553,13 +1553,13 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz", - "integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1569,13 +1569,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1585,14 +1585,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", + "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1602,14 +1602,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1619,14 +1619,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", + "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1636,75 +1636,75 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", - "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.2.tgz", + "integrity": "sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.8", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/compat-data": "^7.27.2", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.27.1", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.26.8", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.26.5", - "@babel/plugin-transform-block-scoping": "^7.25.9", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.26.0", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-computed-properties": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-dotall-regex": "^7.25.9", - "@babel/plugin-transform-duplicate-keys": "^7.25.9", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.26.3", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.26.9", - "@babel/plugin-transform-function-name": "^7.25.9", - "@babel/plugin-transform-json-strings": "^7.25.9", - "@babel/plugin-transform-literals": "^7.25.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", - "@babel/plugin-transform-member-expression-literals": "^7.25.9", - "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.26.3", - "@babel/plugin-transform-modules-systemjs": "^7.25.9", - "@babel/plugin-transform-modules-umd": "^7.25.9", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-object-super": "^7.25.9", - "@babel/plugin-transform-optional-catch-binding": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9", - "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@babel/plugin-transform-property-literals": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.25.9", - "@babel/plugin-transform-regexp-modifiers": "^7.26.0", - "@babel/plugin-transform-reserved-words": "^7.25.9", - "@babel/plugin-transform-shorthand-properties": "^7.25.9", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.26.8", - "@babel/plugin-transform-typeof-symbol": "^7.26.7", - "@babel/plugin-transform-unicode-escapes": "^7.25.9", - "@babel/plugin-transform-unicode-property-regex": "^7.25.9", - "@babel/plugin-transform-unicode-regex": "^7.25.9", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.27.1", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.27.1", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.27.1", + "@babel/plugin-transform-classes": "^7.27.1", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.27.1", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.27.2", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.1", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.27.1", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.11.0", @@ -1734,18 +1734,18 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz", - "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.27.1.tgz", + "integrity": "sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-transform-react-display-name": "^7.25.9", - "@babel/plugin-transform-react-jsx": "^7.25.9", - "@babel/plugin-transform-react-jsx-development": "^7.25.9", - "@babel/plugin-transform-react-pure-annotations": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-transform-react-display-name": "^7.27.1", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/plugin-transform-react-jsx-development": "^7.27.1", + "@babel/plugin-transform-react-pure-annotations": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1767,30 +1767,30 @@ } }, "node_modules/@babel/template": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", - "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.10.tgz", - "integrity": "sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", + "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.10", - "@babel/parser": "^7.26.10", - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.10", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1807,13 +1807,13 @@ } }, "node_modules/@babel/types": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz", - "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", + "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -19068,15 +19068,6 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, "node_modules/regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -25667,37 +25658,37 @@ } }, "@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "requires": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" } }, "@babel/compat-data": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", - "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz", + "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==", "dev": true }, "@babel/core": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", - "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz", + "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", "dev": true, "requires": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.10", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.10", - "@babel/parser": "^7.26.10", - "@babel/template": "^7.26.9", - "@babel/traverse": "^7.26.10", - "@babel/types": "^7.26.10", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.4", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.27.4", + "@babel/types": "^7.27.3", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -25714,34 +25705,34 @@ } }, "@babel/generator": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.10.tgz", - "integrity": "sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", + "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", "requires": { - "@babel/parser": "^7.26.10", - "@babel/types": "^7.26.10", + "@babel/parser": "^7.27.5", + "@babel/types": "^7.27.3", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" } }, "@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "dev": true, "requires": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.3" } }, "@babel/helper-compilation-targets": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -25765,27 +25756,27 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz", - "integrity": "sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", + "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.26.9", + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.27.1", "semver": "^6.3.1" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", - "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", + "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-annotate-as-pure": "^7.27.1", "regexpu-core": "^6.2.0", "semver": "^6.3.1" } @@ -25804,174 +25795,174 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", "dev": true, "requires": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" } }, "@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "requires": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" } }, "@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" } }, "@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", "dev": true, "requires": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.1" } }, "@babel/helper-plugin-utils": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true }, "@babel/helper-remap-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", - "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-wrap-function": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" } }, "@babel/helper-replace-supers": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", - "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.26.5" + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", "dev": true, "requires": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" } }, "@babel/helper-string-parser": { - "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==" + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==" }, "@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==" + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==" }, "@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true }, "@babel/helper-wrap-function": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", - "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz", + "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==", "dev": true, "requires": { - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/template": "^7.27.1", + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" } }, "@babel/helpers": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz", - "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", "dev": true, "requires": { - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.10" + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.6" } }, "@babel/parser": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz", - "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", + "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", "requires": { - "@babel/types": "^7.26.10" + "@babel/types": "^7.27.3" } }, "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", - "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", + "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" } }, "@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", - "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", - "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" } }, "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", - "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz", + "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" } }, "@babel/plugin-proposal-private-property-in-object": { @@ -25982,30 +25973,30 @@ "requires": {} }, "@babel/plugin-syntax-import-assertions": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", + "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-syntax-unicode-sets-regex": { @@ -26019,85 +26010,85 @@ } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-async-generator-functions": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", - "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.27.1.tgz", + "integrity": "sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.26.8" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.27.1" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", - "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.5.tgz", + "integrity": "sha512-JF6uE2s67f0y2RZcm2kpAUEbD50vH62TyWVebxwHAlbSdM49VqPz8t4a1uIjp4NIOIZ4xzLfjY5emt/RCyC7TQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-class-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-class-static-block": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz", + "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-classes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.1.tgz", + "integrity": "sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/traverse": "^7.25.9", + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.27.1", "globals": "^11.1.0" }, "dependencies": { @@ -26110,519 +26101,519 @@ } }, "@babel/plugin-transform-computed-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/template": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" } }, "@babel/plugin-transform-destructuring": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.3.tgz", + "integrity": "sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", + "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-dynamic-import": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", - "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", + "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-export-namespace-from": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-for-of": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", - "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" } }, "@babel/plugin-transform-function-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", "dev": true, "requires": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" } }, "@babel/plugin-transform-json-strings": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", + "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", + "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", - "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", + "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-new-target": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.26.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", - "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-numeric-separator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-object-rest-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.3.tgz", + "integrity": "sha512-7ZZtznF9g4l2JCImCo5LNKFHB5eXnN39lLtLY5Tg+VkR0jwOt7TBciMckuiQIOIW7L5tkQOCh3bVGYeXgMx52Q==", "dev": true, "requires": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9" + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.27.3", + "@babel/plugin-transform-parameters": "^7.27.1" } }, "@babel/plugin-transform-object-super": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" } }, "@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", + "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" } }, "@babel/plugin-transform-parameters": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.1.tgz", + "integrity": "sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-private-methods": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-private-property-in-object": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-property-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-react-display-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", - "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.27.1.tgz", + "integrity": "sha512-p9+Vl3yuHPmkirRrg021XiP+EETmPMQTLr6Ayjj85RLNEbb3Eya/4VI0vAdzQG9SEAl2Lnt7fy5lZyMzjYoZQQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-react-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", - "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", + "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/types": "^7.27.1" } }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", - "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", + "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", "dev": true, "requires": { - "@babel/plugin-transform-react-jsx": "^7.25.9" + "@babel/plugin-transform-react-jsx": "^7.27.1" } }, "@babel/plugin-transform-react-pure-annotations": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", - "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", + "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-regenerator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.5.tgz", + "integrity": "sha512-uhB8yHerfe3MWnuLAhEbeQ4afVoqv8BQsPqrTv7e/jZ9y00kJL6l9a/f4OWaKxotmjzewfEyXE1vgDJenkQ2/Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9", - "regenerator-transform": "^0.15.2" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-regexp-modifiers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", + "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-template-literals": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", - "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz", - "integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", + "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", + "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/preset-env": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", - "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.2.tgz", + "integrity": "sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.26.8", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/compat-data": "^7.27.2", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.27.1", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.26.8", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.26.5", - "@babel/plugin-transform-block-scoping": "^7.25.9", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.26.0", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-computed-properties": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-dotall-regex": "^7.25.9", - "@babel/plugin-transform-duplicate-keys": "^7.25.9", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.26.3", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.26.9", - "@babel/plugin-transform-function-name": "^7.25.9", - "@babel/plugin-transform-json-strings": "^7.25.9", - "@babel/plugin-transform-literals": "^7.25.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", - "@babel/plugin-transform-member-expression-literals": "^7.25.9", - "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.26.3", - "@babel/plugin-transform-modules-systemjs": "^7.25.9", - "@babel/plugin-transform-modules-umd": "^7.25.9", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-object-super": "^7.25.9", - "@babel/plugin-transform-optional-catch-binding": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9", - "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@babel/plugin-transform-property-literals": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.25.9", - "@babel/plugin-transform-regexp-modifiers": "^7.26.0", - "@babel/plugin-transform-reserved-words": "^7.25.9", - "@babel/plugin-transform-shorthand-properties": "^7.25.9", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.26.8", - "@babel/plugin-transform-typeof-symbol": "^7.26.7", - "@babel/plugin-transform-unicode-escapes": "^7.25.9", - "@babel/plugin-transform-unicode-property-regex": "^7.25.9", - "@babel/plugin-transform-unicode-regex": "^7.25.9", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.27.1", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.27.1", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.27.1", + "@babel/plugin-transform-classes": "^7.27.1", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.27.1", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.27.2", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.1", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.27.1", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.11.0", @@ -26643,17 +26634,17 @@ } }, "@babel/preset-react": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz", - "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.27.1.tgz", + "integrity": "sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-transform-react-display-name": "^7.25.9", - "@babel/plugin-transform-react-jsx": "^7.25.9", - "@babel/plugin-transform-react-jsx-development": "^7.25.9", - "@babel/plugin-transform-react-pure-annotations": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-transform-react-display-name": "^7.27.1", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/plugin-transform-react-jsx-development": "^7.27.1", + "@babel/plugin-transform-react-pure-annotations": "^7.27.1" } }, "@babel/runtime": { @@ -26665,25 +26656,25 @@ } }, "@babel/template": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", - "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "requires": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" } }, "@babel/traverse": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.10.tgz", - "integrity": "sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", + "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", "requires": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.10", - "@babel/parser": "^7.26.10", - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.10", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -26696,12 +26687,12 @@ } }, "@babel/types": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz", - "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", + "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", "requires": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" } }, "@bcoe/v8-coverage": { @@ -37925,15 +37916,6 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, - "regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", diff --git a/package.json b/package.json index 0288e7670..6d0b94dd5 100644 --- a/package.json +++ b/package.json @@ -5,10 +5,10 @@ "repository": "https://github.com/jellyfin/jellyfin-web", "license": "GPL-2.0-or-later", "devDependencies": { - "@babel/core": "7.26.10", - "@babel/plugin-transform-modules-umd": "7.25.9", - "@babel/preset-env": "7.26.9", - "@babel/preset-react": "7.26.3", + "@babel/core": "7.27.4", + "@babel/plugin-transform-modules-umd": "7.27.1", + "@babel/preset-env": "7.27.2", + "@babel/preset-react": "7.27.1", "@eslint-community/eslint-plugin-eslint-comments": "4.5.0", "@eslint/js": "9.26.0", "@stylistic/eslint-plugin": "4.2.0", From e4fa463f591abde70658111baa6df0dd1da4aa87 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sat, 7 Jun 2025 10:24:15 +0300 Subject: [PATCH 392/645] Add target _blank to link --- src/apps/dashboard/routes/settings/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/dashboard/routes/settings/index.tsx b/src/apps/dashboard/routes/settings/index.tsx index b84f26363..9726190ea 100644 --- a/src/apps/dashboard/routes/settings/index.tsx +++ b/src/apps/dashboard/routes/settings/index.tsx @@ -158,7 +158,7 @@ export const Component = () => { helperText={( <> {globalize.translate('LabelDisplayLanguageHelp')} - + {globalize.translate('LearnHowYouCanContribute')} From bd985dc4952fa4e563b757c65deb54e57fd0283d Mon Sep 17 00:00:00 2001 From: Pere Date: Sat, 7 Jun 2025 06:36:33 -0400 Subject: [PATCH 393/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index c0d086b2f..59806c2ce 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -2027,5 +2027,29 @@ "HeaderUpdateRequired": "Cal una actualització", "ViewSettings": "Configuració de visualització", "DownloadManager": "Descàrregues", - "MessageForgotPasswordPinReset": "Introdueix el PIN aquí per acabar el Restabliment de contrasenya" + "MessageForgotPasswordPinReset": "Introdueix el PIN aquí per acabar el Restabliment de contrasenya", + "LabelImageCache": "Imatges en el cache", + "MessageBackupDisclaimer": "Depenent de la mida de la llibreria, la còpia de seguretat pot tardar un temps.", + "MessageRestoreDisclaimer": "ATENCIÓ: Estàs a punt de restaurar una còpia de seguretat anterior. El seu servidor no serà utilitzable durant el procés i les dades creades des del moment de l'inici de la còpia seran perdudes.", + "MessageWaitingForServer": "Esperant al servidor...", + "StorageType.CDRom": "CD-ROM", + "StorageType.NoRootDirectory": "Cap directori arrel", + "BackupsPageLoadError": "No s'ha pogut carregar la pàgina de còpies de seguretat", + "ButtonCreateBackup": "Crear còpia de seguretat", + "Create": "Crear", + "HeaderBackupsHelp": "Crear i restaurar còpies del servidor, les quals poden incloure la base de dades, metadades, subtítols i imatges de trickplay.", + "LabelBackupsUnavailable": "No hi ha còpies de seguretat disponibles", + "LabelDatabase": "Base de dades", + "LabelRestore": "Restaurar", + "MessageBackupInProgress": "Còpia de seguretat en progrés", + "MessageRestoreInProgress": "Restabliment en procés", + "Success": "Èxit", + "HeaderBackups": "Cópies de seguretat", + "LabelProgramData": "Dades del programa", + "MessageRestoreSuccess": "Restaurament completat exitosament", + "StorageType.Fixed": "Arreglat", + "StorageType.Network": "Xarxa", + "StorageType.Ram": "RAM", + "StorageType.Removable": "Retirable", + "StorageType.Unknown": "Desconegut" } From 3889d381d1001b46399279c59409e3cb8bc15119 Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Sat, 7 Jun 2025 22:06:27 -0400 Subject: [PATCH 394/645] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index fcf510f63..1b69e457c 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -2028,5 +2028,18 @@ "HeaderUpdateRequired": "Bắt Buộc Cập Nhập", "ViewSettings": "Xem cài đặt", "MessageForgotPasswordPinReset": "Nhập PIN vào đây để hoàn thành đặt lại Mật Khẩu", - "DownloadManager": "Tải xuống" + "DownloadManager": "Tải xuống", + "HeaderBackupsHelp": "Tạo và phục hồi ảnh chụp nhanh của máy chủ của bạn có thể bao gồm cơ sở dữ liệu, dữ liệu mô tả, phụ đề và ảnh tua nhanh.", + "LabelImageCache": "Bộ Nhớ Đệm Hình Ảnh", + "MessageRestoreDisclaimer": "CẢNH BÁO: Bạn sắp khôi phục từ bản sao lưu trước đó. Máy chủ của bạn sẽ không sử dụng được trong suốt thời gian diễn ra quá trình và bất kỳ dữ liệu mới nào được tạo từ khi sao lưu sẽ bị mất.", + "LabelProgramData": "Dữ Liệu Chương Trình", + "MessageBackupDisclaimer": "Tùy thuộc vào kích thước của thư viện của bạn, quá trình sao lưu có thể mất một lúc.", + "MessageBackupInProgress": "Đang sao lưu", + "BackupsPageLoadError": "Tải trang sao lưu thất bại", + "ButtonCreateBackup": "Tạo Sao Lưu", + "Create": "Tạo", + "LabelBackupsUnavailable": "Không có sẵn bản sao lưu", + "LabelDatabase": "Cơ sở dữ liệu", + "LabelRestore": "Khôi phục", + "MessageRestoreInProgress": "Đang khôi phục" } From 6257d1ee07bdfb9f1d5f741655a851ade248b179 Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Sat, 7 Jun 2025 22:48:09 -0400 Subject: [PATCH 395/645] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index 1b69e457c..6f3ef4373 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -1709,7 +1709,7 @@ "LabelParallelImageEncodingLimitHelp": "Số lượng mã hóa hình ảnh tối đa được phép chạy song song. Để trống sẽ chọn giới hạn dựa trên số lõi hệ thống của bạn.", "SecondarySubtitles": "Phụ đề phụ", "HeaderPerformance": "Hiệu suất", - "LabelParallelImageEncodingLimit": "Giới hạn mã hóa hình ảnh song song", + "LabelParallelImageEncodingLimit": "Giới Hạn Mã Hóa Hình Ảnh Cùng Lúc", "MediaInfoDvBlSignalCompatibilityId": "Id tương thích tính hiệu DV bl", "LabelEnableAudioVbr": "Bật mã hóa âm thanh VBR", "LabelEnableAudioVbrHelp": "Tốc độ bit thay đổi mang lại chất lượng tốt hơn so với tỷ lệ bit trung bình, nhưng trong một số trường hợp hiếm gặp, có thể gây ra sự cố về khả năng tương thích và bộ đệm.", @@ -1796,8 +1796,8 @@ "Lyric": "Lời bài hát", "HeaderLyricDownloads": "Tải Xuống Lời Bài Hát", "LabelSelectPreferredTranscodeVideoAudioCodec": "Bộ giải mã âm thanh chuyển mã ưa thích khi phát lại video", - "LibraryScanFanoutConcurrency": "Giới hạn tác vụ quét thư viện song song", - "LibraryScanFanoutConcurrencyHelp": "Số lượng tác vụ song song tối đa lúc quét thư viện. Để trống sẽ chọn một giới hạn dựa trên số lõi trên hệ thống của bạn. CẢNH BÁO: Đặt số này quá cao có thể gây ra vấn đề với hệ thống tệp mạng; nếu gặp sự cố, hãy giảm số này xuống thấp.", + "LibraryScanFanoutConcurrency": "Giới hạn tác vụ quét thư viện cùng lúc", + "LibraryScanFanoutConcurrencyHelp": "Số lượng tác vụ cùng lúc tối đa lúc quét thư viện. Để trống sẽ chọn một giới hạn dựa trên số lõi trên hệ thống của bạn. CẢNH BÁO: Đặt số này quá cao có thể gây ra vấn đề với hệ thống tệp mạng; nếu gặp sự cố, hãy giảm số này xuống thấp.", "Lyrics": "Lời bài hát", "PlaybackError.ASS_RENDER_ERROR": "Đã xảy ra lỗi trong trình kết xuất phụ đề ASS/SSA.", "PlaybackError.FATAL_HLS_ERROR": "Đã xảy ra lỗi nghiêm trọng trong luồng HLS.", @@ -2041,5 +2041,14 @@ "LabelBackupsUnavailable": "Không có sẵn bản sao lưu", "LabelDatabase": "Cơ sở dữ liệu", "LabelRestore": "Khôi phục", - "MessageRestoreInProgress": "Đang khôi phục" + "MessageRestoreInProgress": "Đang khôi phục", + "StorageType.NoRootDirectory": "Không Có Thư Mục Gốc", + "StorageType.Network": "Mạng", + "MessageRestoreSuccess": "Đã hoàn tất khôi phục thành công", + "MessageWaitingForServer": "Đang chờ máy chủ ...", + "StorageType.Removable": "Có thể tháo rời", + "StorageType.Unknown": "Không rõ", + "StorageType.Fixed": "Cố định", + "Success": "Thành công", + "HeaderBackups": "Sao lưu" } From 2bf4de6a7996ac704931b14875f978f82c572e4f Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Sat, 7 Jun 2025 23:26:44 -0400 Subject: [PATCH 396/645] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index 6f3ef4373..484e03596 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -949,7 +949,7 @@ "MapChannels": "Kênh bản đồ", "ManageRecording": "Quản lý ghi lại", "ManageLibrary": "Quản lý thư viện", - "Logo": "Logo", + "Logo": "Biểu trưng", "LiveTV": "Truyền hình trực tiếp", "LiveBroadcasts": "Chương trình phát sóng trực tiếp", "Live": "Trực tiếp", From 36e5f1b29fc2086af2cfbc39e2070a856266bb1f Mon Sep 17 00:00:00 2001 From: nextlooper42 Date: Sun, 8 Jun 2025 07:21:17 -0400 Subject: [PATCH 397/645] Translated using Weblate (Slovak) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/ --- src/strings/sk.json | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/strings/sk.json b/src/strings/sk.json index b99c10fe6..fd01008e9 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -2031,5 +2031,29 @@ "HeaderUpdateRequired": "Vyžaduje sa aktualizácia", "DownloadManager": "Stiahnuté", "ViewSettings": "Zobraziť nastavenia", - "MessageForgotPasswordPinReset": "Zadajte PIN kód na dokončenie obnovy hesla" + "MessageForgotPasswordPinReset": "Zadajte PIN kód na dokončenie obnovy hesla", + "HeaderBackupsHelp": "Vytvoriť a obnoviť zálohu vášho servera, ktorá môže obsahovať databázu, metadáta, titulky a trickplay.", + "LabelBackupsUnavailable": "Nie sú k dispozícii žiadne zálohy", + "LabelImageCache": "Vyrovnávacia pamäť obrázkov", + "StorageType.CDRom": "CD-ROM", + "LabelRestore": "Obnoviť", + "MessageBackupDisclaimer": "V závislosti od veľkosti knižnice môže proces zálohovania chvíľu trvať.", + "MessageRestoreDisclaimer": "UPOZORNENIE: Chystáte sa obnoviť z predchádzajúcej zálohy. Váš server bude počas trvania tohto procesu nepoužiteľný a všetky nové údaje vytvorené od zálohovania budú stratené.", + "HeaderBackups": "Zálohy", + "BackupsPageLoadError": "Nepodarilo sa načítať stránku so zálohami", + "ButtonCreateBackup": "Vytvoriť zálohu", + "Create": "Vytvoriť", + "LabelDatabase": "Databáza", + "LabelProgramData": "Programové dáta", + "MessageBackupInProgress": "Prebieha zálohovanie", + "MessageRestoreInProgress": "Prebieha obnovenie", + "MessageRestoreSuccess": "Obnovenie bolo úspešne dokončené", + "MessageWaitingForServer": "Čaká sa na server...", + "StorageType.Fixed": "Fixné", + "StorageType.Network": "Sieť", + "StorageType.NoRootDirectory": "Žiadny koreňový adresár", + "StorageType.Ram": "RAM", + "StorageType.Removable": "Odnímateľný", + "StorageType.Unknown": "Neznáme", + "Success": "Úspech" } From 96c741ac3802a80a0d02626e97f5a39714a9d310 Mon Sep 17 00:00:00 2001 From: aniara001 Date: Sun, 8 Jun 2025 14:16:19 -0400 Subject: [PATCH 398/645] Translated using Weblate (Swedish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/ --- src/strings/sv.json | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/strings/sv.json b/src/strings/sv.json index 83cd5d39b..d9878055d 100644 --- a/src/strings/sv.json +++ b/src/strings/sv.json @@ -2026,5 +2026,22 @@ "HeaderServerUnavailable": "Server Otillgänglig", "HeaderUpdateRequired": "Uppdatering Krävs", "DownloadManager": "Nedladdningar", - "MessageForgotPasswordPinReset": "Ange PIN-koden här för att slutföra lösenordsåterställningen" + "MessageForgotPasswordPinReset": "Ange PIN-koden här för att slutföra lösenordsåterställningen", + "Create": "Skapa", + "LabelProgramData": "Programdata", + "MessageRestoreInProgress": "Återställning pågående", + "StorageType.CDRom": "CD-ROM", + "StorageType.NoRootDirectory": "Ingen rotkatalog", + "LabelBackupsUnavailable": "Inga backuper tillgängliga", + "LabelDatabase": "Databas", + "BackupsPageLoadError": "Misslyckades att ladda backup sidan", + "ButtonCreateBackup": "Skapa backup", + "LabelRestore": "Återställ", + "MessageBackupDisclaimer": "Beroende på storleken på ditt bibliotek kan backupprocessen ta ett tag.", + "MessageBackupInProgress": "Backup pågående", + "MessageWaitingForServer": "Väntar på server...", + "StorageType.Network": "Nätverk", + "StorageType.Ram": "RAM", + "StorageType.Unknown": "Okänd", + "HeaderBackups": "Backuper" } From c90cb79b7116aea1fea34feca2d8ca04e478fd35 Mon Sep 17 00:00:00 2001 From: Chatcharin Sangbutsarakum Date: Mon, 9 Jun 2025 02:06:50 -0400 Subject: [PATCH 399/645] Translated using Weblate (Thai) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/th/ --- src/strings/th.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/strings/th.json b/src/strings/th.json index bdd6490ea..45a1c99d1 100644 --- a/src/strings/th.json +++ b/src/strings/th.json @@ -185,5 +185,12 @@ "LabelTime": "เวลา", "LabelTimeLimitHours": "จำกัดเวลา (ชั่วโมง)", "LabelTextSize": "ขนาดตัวอักษร", - "Anime": "อนิเมะ" + "Anime": "อนิเมะ", + "Success": "สำเร็จ", + "SubtitleBlack": "สีดำ", + "SubtitleYellow": "สีเหลือง", + "Suggestions": "คำแนะนำ", + "Sunday": "วันอาทิตย์", + "SubtitleBlue": "สีน้ำเงิน", + "SubtitleCyan": "สีน้ำเงินเขียว" } From 8efbe54837e6b08c5e855938a671addab131f78c Mon Sep 17 00:00:00 2001 From: Gallyam Biktashev Date: Mon, 9 Jun 2025 02:29:17 -0400 Subject: [PATCH 400/645] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index cb6c3b511..7ad88ff13 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -2031,5 +2031,28 @@ "HeaderUpdateRequired": "Требуется обновление", "ViewSettings": "Показать параметры", "DownloadManager": "Загрузки", - "MessageForgotPasswordPinReset": "Введите PIN-код для завершения сброса пароля" + "MessageForgotPasswordPinReset": "Введите PIN-код для завершения сброса пароля", + "StorageType.Unknown": "Не известно", + "HeaderBackups": "Резервные файлы", + "MessageWaitingForServer": "Ожидание сервера...", + "StorageType.Network": "Сетевой", + "LabelProgramData": "Данные программы", + "LabelImageCache": "Кеш изображений", + "MessageRestoreDisclaimer": "ВНИМАНИЕ: вы собираетесь восстановить данные из предыдущего резервного файла. Ваш сервер будет не доступен во время этого процесса. Все данные, созданные после последнего резервирования, будут утеряны.", + "MessageBackupInProgress": "Резервирование в процессе", + "MessageBackupDisclaimer": "В зависимости от размера вашей библиотеки, резервирование может занять некоторое время.", + "LabelDatabase": "База данных", + "HeaderBackupsHelp": "Создание и восстановление состояния вашего сервера, включая базу данных, метаданные, субтитры и trickplay.", + "MessageRestoreSuccess": "Восстановление завершено успешно", + "MessageRestoreInProgress": "Восстановление в процессе", + "Create": "Создать", + "ButtonCreateBackup": "Создать резервный файл", + "LabelBackupsUnavailable": "Нет доступных резервных файлов", + "LabelRestore": "Восстановить", + "StorageType.Removable": "Съёмный носитель", + "StorageType.Ram": "Оперативная память", + "StorageType.NoRootDirectory": "Без корневой папки", + "StorageType.Fixed": "Фиксированный", + "StorageType.CDRom": "CD-ROM", + "Success": "Успешно" } From 3c1b0bf9a9b74eb6e66c89ec6df0d8dc5c438f1b Mon Sep 17 00:00:00 2001 From: Chatcharin Sangbutsarakum Date: Mon, 9 Jun 2025 02:33:11 -0400 Subject: [PATCH 401/645] Translated using Weblate (Thai) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/th/ --- src/strings/th.json | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/strings/th.json b/src/strings/th.json index 45a1c99d1..09dc3de41 100644 --- a/src/strings/th.json +++ b/src/strings/th.json @@ -192,5 +192,37 @@ "Suggestions": "คำแนะนำ", "Sunday": "วันอาทิตย์", "SubtitleBlue": "สีน้ำเงิน", - "SubtitleCyan": "สีน้ำเงินเขียว" + "SubtitleCyan": "สีน้ำเงินเขียว", + "LabelVideoInfo": "ข้อมูลวิดีโอ", + "SubtitleGreen": "สีเขียว", + "ListPaging": "{0}-{1} จาก{2}", + "ValueMinutes": "{0} นาที", + "Friday": "วันศุกร์", + "Tuesday": "วันอังคาร", + "TV": "ทีวี", + "ValueMovieCount": "{0} เรื่อง", + "LabelAllowedAudioChannels": "ช่องเสียงสูงสุดที่อนุญาต", + "ValueAlbumCount": "{0} อัลบั้ม", + "SubtitleGray": "สีเทา", + "ValueSongCount": "{0} เพลง", + "Monday": "วันจันทร์", + "Saturday": "วันเสาร์", + "ValueSeconds": "{0} วินาที", + "ValueSeriesCount": "{0} ซีรี่ย์", + "SubtitleWhite": "สีขาว", + "Thursday": "วันพฤหัสบดี", + "LabelAudioInfo": "ข้อมูลเสียง", + "ValueDiscNumber": "แผ่นที่ {0}", + "HeaderAddUser": "เพิ่มผู้ใช้งาน", + "List": "รายการ", + "Subtitles": "คำบรรยาย", + "Vertical": "แนวตั้ง", + "Yesterday": "เมื่อวาน", + "AiTranslated": "แปลภาษาโดย AI", + "ValueEpisodeCount": "{0} ตอน", + "Wednesday": "วันพุธ", + "AllowHevcEncoding": "อนุญาตการเข้ารหัสในรูปแบบ HEVC", + "Subtitle": "คำบรรยาย", + "SubtitleRed": "สีแดง", + "SubtitleLightGray": "สีเทาอ่อน" } From fff297b3d3452ccf4ee353480f869e45b1f0d4d9 Mon Sep 17 00:00:00 2001 From: Gallyam Biktashev Date: Mon, 9 Jun 2025 02:44:34 -0400 Subject: [PATCH 402/645] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index 7ad88ff13..d9a1f2291 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -2054,5 +2054,6 @@ "StorageType.NoRootDirectory": "Без корневой папки", "StorageType.Fixed": "Фиксированный", "StorageType.CDRom": "CD-ROM", - "Success": "Успешно" + "Success": "Успешно", + "BackupsPageLoadError": "Не удалось загрузить страницу резервирования" } From f919944ffe40ec3c63087000c58c7ae67cfa86b2 Mon Sep 17 00:00:00 2001 From: "Thadah D. Denyse" Date: Mon, 9 Jun 2025 03:23:25 -0400 Subject: [PATCH 403/645] Translated using Weblate (Basque) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/eu/ --- src/strings/eu.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/strings/eu.json b/src/strings/eu.json index 47b3de797..ff97dd51c 100644 --- a/src/strings/eu.json +++ b/src/strings/eu.json @@ -2012,5 +2012,14 @@ "HeaderUpdateRequired": "Eguneraketa beharrezkoa da", "Illustrator": "Ilustratzailea", "MessageForgotPasswordPinReset": "Sartu PINa hemen pasahitza berrezartzeko", - "DownloadManager": "Deskargak" + "DownloadManager": "Deskargak", + "LabelRestore": "Leheneratu", + "LabelImageCache": "Irudien cachea", + "BackupsPageLoadError": "Babeskopien orria kargatzeak huts egin du", + "ButtonCreateBackup": "Sortu babeskopia", + "Create": "Sortu", + "HeaderBackupsHelp": "Sortu eta leheneratu zure zerbitzariaren argazkiak, datu-basea, metadatuak, azpitituluak eta trickplay barne hartuz.", + "LabelBackupsUnavailable": "Ez dago babeskopiarik eskuragarri", + "LabelDatabase": "Datu-basea", + "LabelProgramData": "Programaren datuak" } From f32249d15ea6607710302cb4c019e10f6ad85e1d Mon Sep 17 00:00:00 2001 From: "Thadah D. Denyse" Date: Mon, 9 Jun 2025 03:27:16 -0400 Subject: [PATCH 404/645] Translated using Weblate (Basque) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/eu/ --- src/strings/eu.json | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/strings/eu.json b/src/strings/eu.json index ff97dd51c..b9a56e684 100644 --- a/src/strings/eu.json +++ b/src/strings/eu.json @@ -2021,5 +2021,20 @@ "HeaderBackupsHelp": "Sortu eta leheneratu zure zerbitzariaren argazkiak, datu-basea, metadatuak, azpitituluak eta trickplay barne hartuz.", "LabelBackupsUnavailable": "Ez dago babeskopiarik eskuragarri", "LabelDatabase": "Datu-basea", - "LabelProgramData": "Programaren datuak" + "LabelProgramData": "Programaren datuak", + "StorageType.Network": "Sarea", + "MessageBackupDisclaimer": "Liburutegiaren tamainaren arabera, babeskopia prozesuak denbora pixka bat iraun dezake.", + "MessageRestoreDisclaimer": "OHARRA: Aurreko babeskopia batetik leheneratzear zaude. Zure zerbitzaria ezingo da erabili prozesuak irauten duen bitartean eta babeskopiatik sortutako datu berri guztiak galduko dira.", + "MessageRestoreInProgress": "Leheneratzea martxan", + "MessageRestoreSuccess": "Leheneratzea behar bezala burutu da", + "MessageWaitingForServer": "Zerbitzariari itxaroten...", + "MessageBackupInProgress": "Babeskopia martxan", + "StorageType.CDRom": "CD-ROM", + "StorageType.Fixed": "Konponduta", + "StorageType.NoRootDirectory": "Ez dago erro karpetarik", + "StorageType.Ram": "RAM", + "StorageType.Removable": "Mugigarria", + "StorageType.Unknown": "Ezezaguna", + "Success": "Arrakasta", + "HeaderBackups": "Babeskopiak" } From b620e762610a2559ac14179c7c8b8af91aa2794d Mon Sep 17 00:00:00 2001 From: Adrian Hermida Baloira Date: Mon, 9 Jun 2025 08:39:42 -0400 Subject: [PATCH 405/645] Translated using Weblate (Galician) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/gl/ --- src/strings/gl.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/gl.json b/src/strings/gl.json index 2adfe0ca2..41338a522 100644 --- a/src/strings/gl.json +++ b/src/strings/gl.json @@ -1053,5 +1053,7 @@ "HeaderOtherItems": "Outros elementos", "HeaderMusicQuality": "Calidade de son", "HeaderNewPlaylist": "Nova lista de reprodución", - "HeaderNextVideo": "Seguinte vídeo" + "HeaderNextVideo": "Seguinte vídeo", + "BackupsPageLoadError": "Fallou a carga da páxina de copias de seguridade", + "ButtonCreateBackup": "Crear copia de seguridade" } From 02d4857a9e646cc7fe6396b2be68824bfe317dd7 Mon Sep 17 00:00:00 2001 From: Alain Date: Mon, 9 Jun 2025 08:39:33 -0400 Subject: [PATCH 406/645] Translated using Weblate (Basque) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/eu/ --- src/strings/eu.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/eu.json b/src/strings/eu.json index b9a56e684..7f0270650 100644 --- a/src/strings/eu.json +++ b/src/strings/eu.json @@ -2033,7 +2033,7 @@ "StorageType.Fixed": "Konponduta", "StorageType.NoRootDirectory": "Ez dago erro karpetarik", "StorageType.Ram": "RAM", - "StorageType.Removable": "Mugigarria", + "StorageType.Removable": "Kengarria", "StorageType.Unknown": "Ezezaguna", "Success": "Arrakasta", "HeaderBackups": "Babeskopiak" From 46af8cc8631aaaa79ad1514466fa9d6009c47b81 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Jun 2025 17:49:28 +0000 Subject: [PATCH 407/645] Update Linters --- package-lock.json | 1808 ++++++++++++++++++++------------------------- package.json | 10 +- 2 files changed, 823 insertions(+), 995 deletions(-) diff --git a/package-lock.json b/package-lock.json index b561f67eb..5e80cf689 100644 --- a/package-lock.json +++ b/package-lock.json @@ -73,8 +73,8 @@ "@babel/preset-env": "7.26.9", "@babel/preset-react": "7.26.3", "@eslint-community/eslint-plugin-eslint-comments": "4.5.0", - "@eslint/js": "9.26.0", - "@stylistic/eslint-plugin": "4.2.0", + "@eslint/js": "9.28.0", + "@stylistic/eslint-plugin": "4.4.0", "@stylistic/stylelint-plugin": "3.1.2", "@types/dompurify": "3.0.5", "@types/escape-html": "1.0.4", @@ -85,7 +85,7 @@ "@types/react-dom": "18.3.7", "@types/react-lazy-load-image-component": "1.6.4", "@types/sortablejs": "1.15.8", - "@typescript-eslint/parser": "8.32.0", + "@typescript-eslint/parser": "8.33.1", "@uupaa/dynamic-import-polyfill": "1.0.2", "@vitest/coverage-v8": "3.1.3", "autoprefixer": "10.4.21", @@ -97,7 +97,7 @@ "css-loader": "7.1.2", "cssnano": "7.0.7", "es-check": "9.1.2", - "eslint": "9.26.0", + "eslint": "9.28.0", "eslint-plugin-compat": "6.0.2", "eslint-plugin-import": "2.31.0", "eslint-plugin-jsx-a11y": "6.10.2", @@ -121,7 +121,7 @@ "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", "style-loader": "4.0.0", - "stylelint": "16.19.1", + "stylelint": "16.20.0", "stylelint-config-rational-order": "0.1.2", "stylelint-no-browser-hacks": "2.0.0", "stylelint-order": "7.0.0", @@ -1943,9 +1943,9 @@ } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", - "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", "dev": true, "funding": [ { @@ -1962,13 +1962,13 @@ "node": ">=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/@csstools/css-tokenizer": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", - "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", "dev": true, "funding": [ { @@ -3741,9 +3741,9 @@ } }, "node_modules/@eslint/core": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", - "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", + "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3856,13 +3856,16 @@ } }, "node_modules/@eslint/js": { - "version": "9.26.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.26.0.tgz", - "integrity": "sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==", + "version": "9.28.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.28.0.tgz", + "integrity": "sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==", "dev": true, "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" } }, "node_modules/@eslint/object-schema": { @@ -3876,13 +3879,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", - "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", + "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.13.0", + "@eslint/core": "^0.14.0", "levn": "^0.4.1" }, "engines": { @@ -4321,340 +4324,6 @@ "dev": true, "license": "CC0-1.0" }, - "node_modules/@modelcontextprotocol/sdk": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.2.tgz", - "integrity": "sha512-H9vwztj5OAqHg9GockCQC06k1natgcxWQSRpQcPJf6i5+MWBzfKkRtxGbjQf0X2ihii0ffLZCRGbYV2f2bjNCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "content-type": "^1.0.5", - "cors": "^2.8.5", - "cross-spawn": "^7.0.3", - "eventsource": "^3.0.2", - "express": "^5.0.1", - "express-rate-limit": "^7.5.0", - "pkce-challenge": "^5.0.0", - "raw-body": "^3.0.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.24.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.0", - "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", - "on-finished": "^2.4.1", - "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/content-disposition": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", - "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/express": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.0", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/finalhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", - "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/raw-body": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", - "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.6.3", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/send": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.5", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "mime-types": "^3.0.1", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", - "dev": true, - "license": "MIT", - "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -5684,13 +5353,13 @@ "license": "MIT" }, "node_modules/@stylistic/eslint-plugin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-4.2.0.tgz", - "integrity": "sha512-8hXezgz7jexGHdo5WN6JBEIPHCSFyyU4vgbxevu4YLVS5vl+sxqAAGyXSzfNDyR6xMNSH5H1x67nsXcYMOHtZA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-4.4.0.tgz", + "integrity": "sha512-bIh/d9X+OQLCAMdhHtps+frvyjvAM4B1YlSJzcEEhl7wXLIqPar3ngn9DrHhkBOrTA/z9J0bUMtctAspe0dxdQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "^8.23.0", + "@typescript-eslint/utils": "^8.32.1", "eslint-visitor-keys": "^4.2.0", "espree": "^10.3.0", "estraverse": "^5.3.0", @@ -5703,10 +5372,123 @@ "eslint": ">=9.0.0" } }, + "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.0.tgz", + "integrity": "sha512-9Ac0X8WiLykl0aj1oYQNcLZjHgBojT6cW68yAgZ19letYu+Hxd0rE0veI1XznSSst1X5lwnxhPbVdwjDRIomRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.34.0", + "@typescript-eslint/visitor-keys": "8.34.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.0.tgz", + "integrity": "sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.0.tgz", + "integrity": "sha512-rOi4KZxI7E0+BMqG7emPSK1bB4RICCpF7QD3KCLXn9ZvWoESsOMlHyZPAHyG04ujVplPaHbmEvs34m+wjgtVtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.34.0", + "@typescript-eslint/tsconfig-utils": "8.34.0", + "@typescript-eslint/types": "8.34.0", + "@typescript-eslint/visitor-keys": "8.34.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.0.tgz", + "integrity": "sha512-8L4tWatGchV9A1cKbjaavS6mwYwp39jql8xUmIIKJdm+qiaeHy5KMKlBrf30akXAWBzn2SqKsNOtSENWUwg7XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.34.0", + "@typescript-eslint/types": "8.34.0", + "@typescript-eslint/typescript-estree": "8.34.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.0.tgz", + "integrity": "sha512-qHV7pW7E85A0x6qyrFn+O+q1k1p3tQCsqIZ1KZ5ESLXY57aTvUd3/a4rdPTeXisvhXn2VQG0VSKUqs8KHF2zcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.34.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@stylistic/eslint-plugin/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@stylistic/eslint-plugin/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -5726,6 +5508,22 @@ "node": ">=4.0" } }, + "node_modules/@stylistic/eslint-plugin/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@stylistic/eslint-plugin/node_modules/picomatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", @@ -5739,6 +5537,19 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/@stylistic/eslint-plugin/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@stylistic/stylelint-plugin": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.1.2.tgz", @@ -6356,16 +6167,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.0.tgz", - "integrity": "sha512-B2MdzyWxCE2+SqiZHAjPphft+/2x2FlO9YBx7eKE1BCb+rqBlQdhtAEhzIEdozHd55DXPmxBdpMygFJjfjjA9A==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.1.tgz", + "integrity": "sha512-qwxv6dq682yVvgKKp2qWwLgRbscDAYktPptK4JPojCwwi3R9cwrvIxS4lvBpzmcqzR4bdn54Z0IG1uHFskW4dA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.32.0", - "@typescript-eslint/types": "8.32.0", - "@typescript-eslint/typescript-estree": "8.32.0", - "@typescript-eslint/visitor-keys": "8.32.0", + "@typescript-eslint/scope-manager": "8.33.1", + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/typescript-estree": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1", "debug": "^4.3.4" }, "engines": { @@ -6380,6 +6191,212 @@ "typescript": ">=4.8.4 <5.9.0" } }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/project-service": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.1.tgz", + "integrity": "sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.33.1", + "@typescript-eslint/types": "^8.33.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.1.tgz", + "integrity": "sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.1.tgz", + "integrity": "sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.1.tgz", + "integrity": "sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.1.tgz", + "integrity": "sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.33.1", + "@typescript-eslint/tsconfig-utils": "8.33.1", + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.1.tgz", + "integrity": "sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.33.1", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.0.tgz", + "integrity": "sha512-iEgDALRf970/B2YExmtPMPF54NenZUf4xpL3wsCRx/lgjz6ul/l13R81ozP/ZNuXfnLCS+oPmG7JIxfdNYKELw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.34.0", + "@typescript-eslint/types": "^8.34.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/project-service/node_modules/@typescript-eslint/types": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.0.tgz", + "integrity": "sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@typescript-eslint/scope-manager": { "version": "8.32.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.0.tgz", @@ -6398,6 +6415,23 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.0.tgz", + "integrity": "sha512-+W9VYHKFIzA5cBeooqQxqNriAP0QeQ7xTiDuIOr71hzgffm3EL2hxwWBIIj4GuofIbKxGNarpKqIq6Q6YrShOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, "node_modules/@typescript-eslint/type-utils": { "version": "8.32.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.32.0.tgz", @@ -8211,20 +8245,20 @@ } }, "node_modules/cacheable": { - "version": "1.8.9", - "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.8.9.tgz", - "integrity": "sha512-FicwAUyWnrtnd4QqYAoRlNs44/a1jTL7XDKqm5gJ90wz1DQPlC7U2Rd1Tydpv+E7WAr4sQHuw8Q8M3nZMAyecQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.10.0.tgz", + "integrity": "sha512-SSgQTAnhd7WlJXnGlIi4jJJOiHzgnM5wRMEPaXAU4kECTAMpBoYKoZ9i5zHmclIEZbxcu3j7yY/CF8DTmwIsHg==", "dev": true, "license": "MIT", "dependencies": { - "hookified": "^1.7.1", - "keyv": "^5.3.1" + "hookified": "^1.8.2", + "keyv": "^5.3.3" } }, "node_modules/cacheable/node_modules/keyv": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.3.2.tgz", - "integrity": "sha512-Lji2XRxqqa5Wg+CHLVfFKBImfJZ4pCSccu9eVWK6w4c2SDFLd8JAn1zqTuSFnsxb7ope6rMsnIHfp+eBbRBRZQ==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.3.3.tgz", + "integrity": "sha512-Rwu4+nXI9fqcxiEHtbkvoes2X+QfkTRo1TMkPfwzipGsJlJO/z69vqB4FNl9xJ3xCpAcbkvmEabZfPzrwN3+gQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8955,20 +8989,6 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/cosmiconfig": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", @@ -9577,9 +9597,9 @@ "dev": true }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -10528,9 +10548,9 @@ } }, "node_modules/eslint": { - "version": "9.26.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.26.0.tgz", - "integrity": "sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==", + "version": "9.28.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.28.0.tgz", + "integrity": "sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10538,14 +10558,13 @@ "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.20.0", "@eslint/config-helpers": "^0.2.1", - "@eslint/core": "^0.13.0", + "@eslint/core": "^0.14.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.26.0", - "@eslint/plugin-kit": "^0.2.8", + "@eslint/js": "9.28.0", + "@eslint/plugin-kit": "^0.3.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", - "@modelcontextprotocol/sdk": "^1.8.0", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", @@ -10569,8 +10588,7 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "zod": "^3.24.2" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" @@ -11101,9 +11119,9 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", - "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -11118,9 +11136,9 @@ } }, "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -11140,19 +11158,6 @@ "node": ">=4.0" } }, - "node_modules/eslint/node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -11170,20 +11175,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -11422,29 +11413,6 @@ "node": ">=0.8.x" } }, - "node_modules/eventsource": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", - "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventsource-parser": "^3.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/eventsource-parser": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.1.tgz", - "integrity": "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -11588,22 +11556,6 @@ "url": "https://opencollective.com/express" } }, - "node_modules/express-rate-limit": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz", - "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/express-rate-limit" - }, - "peerDependencies": { - "express": "^4.11 || 5 || ^5.0.0-beta.1" - } - }, "node_modules/express/node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -11864,6 +11816,19 @@ "dev": true, "license": "MIT" }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -11950,6 +11915,20 @@ "flat": "cli.js" } }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/flatted": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", @@ -13024,9 +13003,9 @@ } }, "node_modules/hookified": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.8.1.tgz", - "integrity": "sha512-GrO2l93P8xCWBSTBX9l2BxI78VU/MAAYag+pG8curS3aBGy0++ZlxrQ7PdUOUVMbn5BwkGb6+eRrnf43ipnFEA==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.9.1.tgz", + "integrity": "sha512-u3pxtGhKjcSXnGm1CX6aXS9xew535j3lkOCegbA6jdyh0BaAjTbXI4aslKstCr6zUNtoCxFGFKwjbSHdGrMB8g==", "dev": true, "license": "MIT" }, @@ -14127,13 +14106,6 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "dev": true, - "license": "MIT" - }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -16464,16 +16436,6 @@ "node": ">=0.10.0" } }, - "node_modules/pkce-challenge": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", - "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16.20.0" - } - }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -19366,43 +19328,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/router/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/router/node_modules/path-to-regexp": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - } - }, "node_modules/rrweb-cssom": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", @@ -21437,9 +21362,9 @@ } }, "node_modules/stylelint": { - "version": "16.19.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.19.1.tgz", - "integrity": "sha512-C1SlPZNMKl+d/C867ZdCRthrS+6KuZ3AoGW113RZCOL0M8xOGpgx7G70wq7lFvqvm4dcfdGFVLB/mNaLFChRKw==", + "version": "16.20.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.20.0.tgz", + "integrity": "sha512-B5Myu9WRxrgKuLs3YyUXLP2H0mrbejwNxPmyADlACWwFsrL8Bmor/nTSh4OMae5sHjOz6gkSeccQH34gM4/nAw==", "dev": true, "funding": [ { @@ -21463,15 +21388,15 @@ "cosmiconfig": "^9.0.0", "css-functions-list": "^3.2.3", "css-tree": "^3.1.0", - "debug": "^4.3.7", + "debug": "^4.4.1", "fast-glob": "^3.3.3", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^10.0.8", + "file-entry-cache": "^10.1.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^7.0.3", + "ignore": "^7.0.4", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", "known-css-properties": "^0.36.0", @@ -22575,9 +22500,9 @@ } }, "node_modules/stylelint/node_modules/@csstools/media-query-list-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", - "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", + "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", "dev": true, "funding": [ { @@ -22594,8 +22519,8 @@ "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/stylelint/node_modules/@csstools/selector-specificity": { @@ -22687,25 +22612,25 @@ } }, "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "10.0.8", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.0.8.tgz", - "integrity": "sha512-FGXHpfmI4XyzbLd3HQ8cbUcsFGohJpZtmQRHr8z8FxxtCe2PcpgIlVLwIgunqjvRmXypBETvwhV4ptJizA+Y1Q==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.1.1.tgz", + "integrity": "sha512-zcmsHjg2B2zjuBgjdnB+9q0+cWcgWfykIcsDkWDB4GTPtl1eXUA+gTI6sO0u01AqK3cliHryTU55/b2Ow1hfZg==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^6.1.8" + "flat-cache": "^6.1.10" } }, "node_modules/stylelint/node_modules/flat-cache": { - "version": "6.1.8", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.8.tgz", - "integrity": "sha512-R6MaD3nrJAtO7C3QOuS79ficm2pEAy++TgEUD8ii1LVlbcgZ9DtASLkt9B+RZSFCzm7QHDMlXPsqqB6W2Pfr1Q==", + "version": "6.1.10", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.10.tgz", + "integrity": "sha512-B6/v1f0NwjxzmeOhzfXPGWpKBVA207LS7lehaVKQnFrVktcFRfkzjZZ2gwj2i1TkEUMQht7ZMJbABUT5N+V1Nw==", "dev": true, "license": "MIT", "dependencies": { - "cacheable": "^1.8.9", + "cacheable": "^1.10.0", "flatted": "^3.3.3", - "hookified": "^1.8.1" + "hookified": "^1.9.1" } }, "node_modules/stylelint/node_modules/globby": { @@ -22740,9 +22665,9 @@ } }, "node_modules/stylelint/node_modules/ignore": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz", - "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, "license": "MIT", "engines": { @@ -24050,6 +23975,31 @@ "typescript": ">=4.8.4 <5.9.0" } }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.0.tgz", + "integrity": "sha512-B2MdzyWxCE2+SqiZHAjPphft+/2x2FlO9YBx7eKE1BCb+rqBlQdhtAEhzIEdozHd55DXPmxBdpMygFJjfjjA9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.32.0", + "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/typescript-estree": "8.32.0", + "@typescript-eslint/visitor-keys": "8.32.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, "node_modules/uc.micro": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", @@ -25606,26 +25556,6 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/zod": { - "version": "3.24.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.4.tgz", - "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zod-to-json-schema": { - "version": "3.24.5", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", - "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", - "dev": true, - "license": "ISC", - "peerDependencies": { - "zod": "^3.24.1" - } } }, "dependencies": { @@ -26753,16 +26683,16 @@ } }, "@csstools/css-parser-algorithms": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", - "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", "dev": true, "requires": {} }, "@csstools/css-tokenizer": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", - "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", "dev": true }, "@csstools/media-query-list-parser": { @@ -27550,9 +27480,9 @@ "dev": true }, "@eslint/core": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", - "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", + "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", "dev": true, "requires": { "@types/json-schema": "^7.0.15" @@ -27633,9 +27563,9 @@ } }, "@eslint/js": { - "version": "9.26.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.26.0.tgz", - "integrity": "sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==", + "version": "9.28.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.28.0.tgz", + "integrity": "sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==", "dev": true }, "@eslint/object-schema": { @@ -27645,12 +27575,12 @@ "dev": true }, "@eslint/plugin-kit": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", - "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", + "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", "dev": true, "requires": { - "@eslint/core": "^0.13.0", + "@eslint/core": "^0.14.0", "levn": "^0.4.1" } }, @@ -27934,237 +27864,6 @@ "integrity": "sha512-cEprODy3K3rHUvHjbjcNyXrz/vK9qVB8gu3Wue9+9DaLVv9v5pKmR+FKs4ZYeQb5pMNp//MuONGnrDHm55H63A==", "dev": true }, - "@modelcontextprotocol/sdk": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.2.tgz", - "integrity": "sha512-H9vwztj5OAqHg9GockCQC06k1natgcxWQSRpQcPJf6i5+MWBzfKkRtxGbjQf0X2ihii0ffLZCRGbYV2f2bjNCQ==", - "dev": true, - "requires": { - "content-type": "^1.0.5", - "cors": "^2.8.5", - "cross-spawn": "^7.0.3", - "eventsource": "^3.0.2", - "express": "^5.0.1", - "express-rate-limit": "^7.5.0", - "pkce-challenge": "^5.0.0", - "raw-body": "^3.0.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.24.1" - }, - "dependencies": { - "accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "dev": true, - "requires": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - } - }, - "body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", - "dev": true, - "requires": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.0", - "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", - "on-finished": "^2.4.1", - "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" - } - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "content-disposition": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", - "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", - "dev": true, - "requires": { - "safe-buffer": "5.2.1" - } - }, - "cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "dev": true - }, - "express": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", - "dev": true, - "requires": { - "accepts": "^2.0.0", - "body-parser": "^2.2.0", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - } - }, - "finalhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", - "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", - "dev": true, - "requires": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - } - }, - "fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "dev": true - }, - "media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "dev": true - }, - "merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "dev": true - }, - "mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "dev": true - }, - "mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "dev": true, - "requires": { - "mime-db": "^1.54.0" - } - }, - "negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "dev": true - }, - "qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "dev": true, - "requires": { - "side-channel": "^1.1.0" - } - }, - "raw-body": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", - "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.6.3", - "unpipe": "1.0.0" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "send": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", - "dev": true, - "requires": { - "debug": "^4.3.5", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "mime-types": "^3.0.1", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.1" - } - }, - "serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", - "dev": true, - "requires": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - }, - "type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", - "dev": true, - "requires": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - } - } - } - }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -28636,22 +28335,87 @@ "dev": true }, "@stylistic/eslint-plugin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-4.2.0.tgz", - "integrity": "sha512-8hXezgz7jexGHdo5WN6JBEIPHCSFyyU4vgbxevu4YLVS5vl+sxqAAGyXSzfNDyR6xMNSH5H1x67nsXcYMOHtZA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-4.4.0.tgz", + "integrity": "sha512-bIh/d9X+OQLCAMdhHtps+frvyjvAM4B1YlSJzcEEhl7wXLIqPar3ngn9DrHhkBOrTA/z9J0bUMtctAspe0dxdQ==", "dev": true, "requires": { - "@typescript-eslint/utils": "^8.23.0", + "@typescript-eslint/utils": "^8.32.1", "eslint-visitor-keys": "^4.2.0", "espree": "^10.3.0", "estraverse": "^5.3.0", "picomatch": "^4.0.2" }, "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.0.tgz", + "integrity": "sha512-9Ac0X8WiLykl0aj1oYQNcLZjHgBojT6cW68yAgZ19letYu+Hxd0rE0veI1XznSSst1X5lwnxhPbVdwjDRIomRw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.34.0", + "@typescript-eslint/visitor-keys": "8.34.0" + } + }, + "@typescript-eslint/types": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.0.tgz", + "integrity": "sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.0.tgz", + "integrity": "sha512-rOi4KZxI7E0+BMqG7emPSK1bB4RICCpF7QD3KCLXn9ZvWoESsOMlHyZPAHyG04ujVplPaHbmEvs34m+wjgtVtg==", + "dev": true, + "requires": { + "@typescript-eslint/project-service": "8.34.0", + "@typescript-eslint/tsconfig-utils": "8.34.0", + "@typescript-eslint/types": "8.34.0", + "@typescript-eslint/visitor-keys": "8.34.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + } + }, + "@typescript-eslint/utils": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.0.tgz", + "integrity": "sha512-8L4tWatGchV9A1cKbjaavS6mwYwp39jql8xUmIIKJdm+qiaeHy5KMKlBrf30akXAWBzn2SqKsNOtSENWUwg7XQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.34.0", + "@typescript-eslint/types": "8.34.0", + "@typescript-eslint/typescript-estree": "8.34.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.0.tgz", + "integrity": "sha512-qHV7pW7E85A0x6qyrFn+O+q1k1p3tQCsqIZ1KZ5ESLXY57aTvUd3/a4rdPTeXisvhXn2VQG0VSKUqs8KHF2zcA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.34.0", + "eslint-visitor-keys": "^4.2.0" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, "eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true }, "estraverse": { @@ -28660,11 +28424,26 @@ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, "picomatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true + }, + "semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true } } }, @@ -29158,16 +28937,129 @@ } }, "@typescript-eslint/parser": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.0.tgz", - "integrity": "sha512-B2MdzyWxCE2+SqiZHAjPphft+/2x2FlO9YBx7eKE1BCb+rqBlQdhtAEhzIEdozHd55DXPmxBdpMygFJjfjjA9A==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.1.tgz", + "integrity": "sha512-qwxv6dq682yVvgKKp2qWwLgRbscDAYktPptK4JPojCwwi3R9cwrvIxS4lvBpzmcqzR4bdn54Z0IG1uHFskW4dA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "8.32.0", - "@typescript-eslint/types": "8.32.0", - "@typescript-eslint/typescript-estree": "8.32.0", - "@typescript-eslint/visitor-keys": "8.32.0", + "@typescript-eslint/scope-manager": "8.33.1", + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/typescript-estree": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1", "debug": "^4.3.4" + }, + "dependencies": { + "@typescript-eslint/project-service": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.1.tgz", + "integrity": "sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw==", + "dev": true, + "requires": { + "@typescript-eslint/tsconfig-utils": "^8.33.1", + "@typescript-eslint/types": "^8.33.1", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.1.tgz", + "integrity": "sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1" + } + }, + "@typescript-eslint/tsconfig-utils": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.1.tgz", + "integrity": "sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==", + "dev": true, + "requires": {} + }, + "@typescript-eslint/types": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.1.tgz", + "integrity": "sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.1.tgz", + "integrity": "sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==", + "dev": true, + "requires": { + "@typescript-eslint/project-service": "8.33.1", + "@typescript-eslint/tsconfig-utils": "8.33.1", + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.1.tgz", + "integrity": "sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.33.1", + "eslint-visitor-keys": "^4.2.0" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true + } + } + }, + "@typescript-eslint/project-service": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.0.tgz", + "integrity": "sha512-iEgDALRf970/B2YExmtPMPF54NenZUf4xpL3wsCRx/lgjz6ul/l13R81ozP/ZNuXfnLCS+oPmG7JIxfdNYKELw==", + "dev": true, + "requires": { + "@typescript-eslint/tsconfig-utils": "^8.34.0", + "@typescript-eslint/types": "^8.34.0", + "debug": "^4.3.4" + }, + "dependencies": { + "@typescript-eslint/types": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.0.tgz", + "integrity": "sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==", + "dev": true + } } }, "@typescript-eslint/scope-manager": { @@ -29180,6 +29072,13 @@ "@typescript-eslint/visitor-keys": "8.32.0" } }, + "@typescript-eslint/tsconfig-utils": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.0.tgz", + "integrity": "sha512-+W9VYHKFIzA5cBeooqQxqNriAP0QeQ7xTiDuIOr71hzgffm3EL2hxwWBIIj4GuofIbKxGNarpKqIq6Q6YrShOA==", + "dev": true, + "requires": {} + }, "@typescript-eslint/type-utils": { "version": "8.32.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.32.0.tgz", @@ -30420,19 +30319,19 @@ } }, "cacheable": { - "version": "1.8.9", - "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.8.9.tgz", - "integrity": "sha512-FicwAUyWnrtnd4QqYAoRlNs44/a1jTL7XDKqm5gJ90wz1DQPlC7U2Rd1Tydpv+E7WAr4sQHuw8Q8M3nZMAyecQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.10.0.tgz", + "integrity": "sha512-SSgQTAnhd7WlJXnGlIi4jJJOiHzgnM5wRMEPaXAU4kECTAMpBoYKoZ9i5zHmclIEZbxcu3j7yY/CF8DTmwIsHg==", "dev": true, "requires": { - "hookified": "^1.7.1", - "keyv": "^5.3.1" + "hookified": "^1.8.2", + "keyv": "^5.3.3" }, "dependencies": { "keyv": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.3.2.tgz", - "integrity": "sha512-Lji2XRxqqa5Wg+CHLVfFKBImfJZ4pCSccu9eVWK6w4c2SDFLd8JAn1zqTuSFnsxb7ope6rMsnIHfp+eBbRBRZQ==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.3.3.tgz", + "integrity": "sha512-Rwu4+nXI9fqcxiEHtbkvoes2X+QfkTRo1TMkPfwzipGsJlJO/z69vqB4FNl9xJ3xCpAcbkvmEabZfPzrwN3+gQ==", "dev": true, "requires": { "@keyv/serialize": "^1.0.3" @@ -30973,16 +30872,6 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, "cosmiconfig": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", @@ -31360,9 +31249,9 @@ "dev": true }, "debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "requires": { "ms": "^2.1.3" } @@ -32082,23 +31971,22 @@ "dev": true }, "eslint": { - "version": "9.26.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.26.0.tgz", - "integrity": "sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==", + "version": "9.28.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.28.0.tgz", + "integrity": "sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.20.0", "@eslint/config-helpers": "^0.2.1", - "@eslint/core": "^0.13.0", + "@eslint/core": "^0.14.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.26.0", - "@eslint/plugin-kit": "^0.2.8", + "@eslint/js": "9.28.0", + "@eslint/plugin-kit": "^0.3.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", - "@modelcontextprotocol/sdk": "^1.8.0", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", @@ -32122,8 +32010,7 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "zod": "^3.24.2" + "optionator": "^0.9.3" }, "dependencies": { "ajv": { @@ -32179,9 +32066,9 @@ "dev": true }, "eslint-scope": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", - "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -32189,9 +32076,9 @@ } }, "eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true }, "estraverse": { @@ -32200,15 +32087,6 @@ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, - "file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "requires": { - "flat-cache": "^4.0.0" - } - }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -32219,16 +32097,6 @@ "path-exists": "^4.0.0" } }, - "flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "requires": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - } - }, "glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -32701,21 +32569,6 @@ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, - "eventsource": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", - "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", - "dev": true, - "requires": { - "eventsource-parser": "^3.0.1" - } - }, - "eventsource-parser": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.1.tgz", - "integrity": "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==", - "dev": true - }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -32867,13 +32720,6 @@ } } }, - "express-rate-limit": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz", - "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", - "dev": true, - "requires": {} - }, "ext": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", @@ -33047,6 +32893,15 @@ "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", "dev": true }, + "file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "requires": { + "flat-cache": "^4.0.0" + } + }, "fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -33115,6 +32970,16 @@ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true }, + "flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + } + }, "flatted": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", @@ -33856,9 +33721,9 @@ } }, "hookified": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.8.1.tgz", - "integrity": "sha512-GrO2l93P8xCWBSTBX9l2BxI78VU/MAAYag+pG8curS3aBGy0++ZlxrQ7PdUOUVMbn5BwkGb6+eRrnf43ipnFEA==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.9.1.tgz", + "integrity": "sha512-u3pxtGhKjcSXnGm1CX6aXS9xew535j3lkOCegbA6jdyh0BaAjTbXI4aslKstCr6zUNtoCxFGFKwjbSHdGrMB8g==", "dev": true }, "hosted-git-info": { @@ -34584,12 +34449,6 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, - "is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "dev": true - }, "is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -36301,12 +36160,6 @@ "pinkie": "^2.0.0" } }, - "pkce-challenge": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", - "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", - "dev": true - }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -38151,33 +38004,6 @@ "fsevents": "~2.3.2" } }, - "router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "dev": true, - "requires": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "path-to-regexp": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", - "dev": true - } - } - }, "rrweb-cssom": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", @@ -39557,9 +39383,9 @@ } }, "stylelint": { - "version": "16.19.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.19.1.tgz", - "integrity": "sha512-C1SlPZNMKl+d/C867ZdCRthrS+6KuZ3AoGW113RZCOL0M8xOGpgx7G70wq7lFvqvm4dcfdGFVLB/mNaLFChRKw==", + "version": "16.20.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.20.0.tgz", + "integrity": "sha512-B5Myu9WRxrgKuLs3YyUXLP2H0mrbejwNxPmyADlACWwFsrL8Bmor/nTSh4OMae5sHjOz6gkSeccQH34gM4/nAw==", "dev": true, "requires": { "@csstools/css-parser-algorithms": "^3.0.4", @@ -39572,15 +39398,15 @@ "cosmiconfig": "^9.0.0", "css-functions-list": "^3.2.3", "css-tree": "^3.1.0", - "debug": "^4.3.7", + "debug": "^4.4.1", "fast-glob": "^3.3.3", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^10.0.8", + "file-entry-cache": "^10.1.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^7.0.3", + "ignore": "^7.0.4", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", "known-css-properties": "^0.36.0", @@ -39603,9 +39429,9 @@ }, "dependencies": { "@csstools/media-query-list-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", - "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", + "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", "dev": true, "requires": {} }, @@ -39657,23 +39483,23 @@ } }, "file-entry-cache": { - "version": "10.0.8", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.0.8.tgz", - "integrity": "sha512-FGXHpfmI4XyzbLd3HQ8cbUcsFGohJpZtmQRHr8z8FxxtCe2PcpgIlVLwIgunqjvRmXypBETvwhV4ptJizA+Y1Q==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.1.1.tgz", + "integrity": "sha512-zcmsHjg2B2zjuBgjdnB+9q0+cWcgWfykIcsDkWDB4GTPtl1eXUA+gTI6sO0u01AqK3cliHryTU55/b2Ow1hfZg==", "dev": true, "requires": { - "flat-cache": "^6.1.8" + "flat-cache": "^6.1.10" } }, "flat-cache": { - "version": "6.1.8", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.8.tgz", - "integrity": "sha512-R6MaD3nrJAtO7C3QOuS79ficm2pEAy++TgEUD8ii1LVlbcgZ9DtASLkt9B+RZSFCzm7QHDMlXPsqqB6W2Pfr1Q==", + "version": "6.1.10", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.10.tgz", + "integrity": "sha512-B6/v1f0NwjxzmeOhzfXPGWpKBVA207LS7lehaVKQnFrVktcFRfkzjZZ2gwj2i1TkEUMQht7ZMJbABUT5N+V1Nw==", "dev": true, "requires": { - "cacheable": "^1.8.9", + "cacheable": "^1.10.0", "flatted": "^3.3.3", - "hookified": "^1.8.1" + "hookified": "^1.9.1" } }, "globby": { @@ -39699,9 +39525,9 @@ } }, "ignore": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz", - "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true }, "import-fresh": { @@ -41424,6 +41250,21 @@ "@typescript-eslint/eslint-plugin": "8.32.0", "@typescript-eslint/parser": "8.32.0", "@typescript-eslint/utils": "8.32.0" + }, + "dependencies": { + "@typescript-eslint/parser": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.0.tgz", + "integrity": "sha512-B2MdzyWxCE2+SqiZHAjPphft+/2x2FlO9YBx7eKE1BCb+rqBlQdhtAEhzIEdozHd55DXPmxBdpMygFJjfjjA9A==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "8.32.0", + "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/typescript-estree": "8.32.0", + "@typescript-eslint/visitor-keys": "8.32.0", + "debug": "^4.3.4" + } + } } }, "uc.micro": { @@ -42452,19 +42293,6 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true - }, - "zod": { - "version": "3.24.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.4.tgz", - "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==", - "dev": true - }, - "zod-to-json-schema": { - "version": "3.24.5", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", - "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", - "dev": true, - "requires": {} } } } diff --git a/package.json b/package.json index 0288e7670..5d6a97214 100644 --- a/package.json +++ b/package.json @@ -10,8 +10,8 @@ "@babel/preset-env": "7.26.9", "@babel/preset-react": "7.26.3", "@eslint-community/eslint-plugin-eslint-comments": "4.5.0", - "@eslint/js": "9.26.0", - "@stylistic/eslint-plugin": "4.2.0", + "@eslint/js": "9.28.0", + "@stylistic/eslint-plugin": "4.4.0", "@stylistic/stylelint-plugin": "3.1.2", "@types/dompurify": "3.0.5", "@types/escape-html": "1.0.4", @@ -22,7 +22,7 @@ "@types/react-dom": "18.3.7", "@types/react-lazy-load-image-component": "1.6.4", "@types/sortablejs": "1.15.8", - "@typescript-eslint/parser": "8.32.0", + "@typescript-eslint/parser": "8.33.1", "@uupaa/dynamic-import-polyfill": "1.0.2", "@vitest/coverage-v8": "3.1.3", "autoprefixer": "10.4.21", @@ -34,7 +34,7 @@ "css-loader": "7.1.2", "cssnano": "7.0.7", "es-check": "9.1.2", - "eslint": "9.26.0", + "eslint": "9.28.0", "eslint-plugin-compat": "6.0.2", "eslint-plugin-import": "2.31.0", "eslint-plugin-jsx-a11y": "6.10.2", @@ -58,7 +58,7 @@ "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", "style-loader": "4.0.0", - "stylelint": "16.19.1", + "stylelint": "16.20.0", "stylelint-config-rational-order": "0.1.2", "stylelint-no-browser-hacks": "2.0.0", "stylelint-order": "7.0.0", From 1c6dac59368284353bee0761ad7f130596545f5d Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Mon, 9 Jun 2025 14:48:43 -0400 Subject: [PATCH 408/645] Add item count widget to dashboard --- .../components/widgets/ItemCountsWidget.tsx | 95 +++++++++++++++++++ src/apps/dashboard/controllers/dashboard.html | 8 +- src/apps/dashboard/controllers/dashboard.js | 11 ++- .../features/metrics/api/useItemCounts.ts | 33 +++++++ .../metrics/components/MetricCard.tsx | 71 ++++++++++++++ src/hooks/useLocale.tsx | 4 +- src/themes/dark/theme.scss | 4 +- src/utils/number.ts | 14 +++ 8 files changed, 230 insertions(+), 10 deletions(-) create mode 100644 src/apps/dashboard/components/widgets/ItemCountsWidget.tsx create mode 100644 src/apps/dashboard/features/metrics/api/useItemCounts.ts create mode 100644 src/apps/dashboard/features/metrics/components/MetricCard.tsx diff --git a/src/apps/dashboard/components/widgets/ItemCountsWidget.tsx b/src/apps/dashboard/components/widgets/ItemCountsWidget.tsx new file mode 100644 index 000000000..12a58a60e --- /dev/null +++ b/src/apps/dashboard/components/widgets/ItemCountsWidget.tsx @@ -0,0 +1,95 @@ +import Book from '@mui/icons-material/Book'; +import Movie from '@mui/icons-material/Movie'; +import MusicNote from '@mui/icons-material/MusicNote'; +import MusicVideo from '@mui/icons-material/MusicVideo'; +import Tv from '@mui/icons-material/Tv'; +import VideoLibrary from '@mui/icons-material/VideoLibrary'; +import Grid from '@mui/material/Grid2'; +import React from 'react'; + +import { useItemCounts } from 'apps/dashboard/features/metrics/api/useItemCounts'; +import MetricCard from 'apps/dashboard/features/metrics/components/MetricCard'; +import globalize from 'lib/globalize'; + +const ItemCountsWidget = () => { + const { data: counts } = useItemCounts(); + + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; + +export default ItemCountsWidget; diff --git a/src/apps/dashboard/controllers/dashboard.html b/src/apps/dashboard/controllers/dashboard.html index 55906b688..e0656d1cc 100644 --- a/src/apps/dashboard/controllers/dashboard.html +++ b/src/apps/dashboard/controllers/dashboard.html @@ -20,13 +20,13 @@
- - -
@@ -36,6 +36,8 @@
+ +
diff --git a/src/apps/dashboard/controllers/dashboard.js b/src/apps/dashboard/controllers/dashboard.js index 8e91a8f33..c9dd75b97 100644 --- a/src/apps/dashboard/controllers/dashboard.js +++ b/src/apps/dashboard/controllers/dashboard.js @@ -33,6 +33,7 @@ import 'elements/emby-itemscontainer/emby-itemscontainer'; import 'components/listview/listview.scss'; import 'styles/flexstyles.scss'; import './dashboard.scss'; +import ItemCountsWidget from '../components/widgets/ItemCountsWidget'; function showPlaybackInfo(btn, session) { let title; @@ -748,7 +749,7 @@ const DashboardPage = { export default function (view) { const serverId = ApiClient.serverId(); - let unmountPathsWidget; + let unmountWidgetFns = []; function onRestartRequired(evt, apiClient) { console.debug('onRestartRequired not implemented', evt, apiClient); @@ -824,7 +825,8 @@ export default function (view) { button: page.querySelector('.btnRefresh') }); - unmountPathsWidget = renderComponent(ServerPathWidget, {}, page.querySelector('#serverPaths')); + unmountWidgetFns.push(renderComponent(ItemCountsWidget, {}, page.querySelector('#itemCounts'))); + unmountWidgetFns.push(renderComponent(ServerPathWidget, {}, page.querySelector('#serverPaths'))); page.querySelector('#btnRestartServer').addEventListener('click', DashboardPage.restart); page.querySelector('#btnShutdown').addEventListener('click', DashboardPage.shutdown); @@ -852,7 +854,10 @@ export default function (view) { button: page.querySelector('.btnRefresh') }); - if (unmountPathsWidget) unmountPathsWidget(); + unmountWidgetFns.forEach(unmount => { + unmount(); + }); + unmountWidgetFns = []; page.querySelector('#btnRestartServer').removeEventListener('click', DashboardPage.restart); page.querySelector('#btnShutdown').removeEventListener('click', DashboardPage.shutdown); diff --git a/src/apps/dashboard/features/metrics/api/useItemCounts.ts b/src/apps/dashboard/features/metrics/api/useItemCounts.ts new file mode 100644 index 000000000..ee2ef772d --- /dev/null +++ b/src/apps/dashboard/features/metrics/api/useItemCounts.ts @@ -0,0 +1,33 @@ +import type { Api } from '@jellyfin/sdk'; +import type { LibraryApiGetItemCountsRequest } from '@jellyfin/sdk/lib/generated-client/api/library-api'; +import { getLibraryApi } from '@jellyfin/sdk/lib/utils/api/library-api'; +import { queryOptions, useQuery } from '@tanstack/react-query'; +import type { AxiosRequestConfig } from 'axios'; + +import { useApi } from 'hooks/useApi'; + +const fetchItemCounts = async ( + api: Api, + params?: LibraryApiGetItemCountsRequest, + options?: AxiosRequestConfig +) => { + const response = await getLibraryApi(api) + .getItemCounts(params, options); + return response.data; +}; + +const getItemCountsQuery = ( + api?: Api, + params?: LibraryApiGetItemCountsRequest +) => queryOptions({ + queryKey: [ 'ItemCounts', params ], + queryFn: ({ signal }) => fetchItemCounts(api!, params, { signal }), + enabled: !!api +}); + +export const useItemCounts = ( + params?: LibraryApiGetItemCountsRequest +) => { + const { api } = useApi(); + return useQuery(getItemCountsQuery(api, params)); +}; diff --git a/src/apps/dashboard/features/metrics/components/MetricCard.tsx b/src/apps/dashboard/features/metrics/components/MetricCard.tsx new file mode 100644 index 000000000..102d9da73 --- /dev/null +++ b/src/apps/dashboard/features/metrics/components/MetricCard.tsx @@ -0,0 +1,71 @@ +import Box from '@mui/material/Box'; +import Card from '@mui/material/Card'; +import Skeleton from '@mui/material/Skeleton'; +import Stack from '@mui/material/Stack'; +import SvgIcon from '@mui/material/SvgIcon'; +import Typography from '@mui/material/Typography'; +import React, { type FC } from 'react'; + +import { useLocale } from 'hooks/useLocale'; +import { toLocaleString } from 'utils/number'; + +interface Metric { + label: string + value?: number +} + +interface MetricCardProps { + metrics: Metric[] + Icon: typeof SvgIcon +} + +const MetricCard: FC = ({ + metrics, + Icon +}) => { + const { dateTimeLocale } = useLocale(); + + return ( + + + {metrics.map(({ label, value }) => ( + + + {label} + + + {value ? ( + toLocaleString(value, dateTimeLocale) + ) : ( + + )} + + + ))} + + + + ); +}; + +export default MetricCard; diff --git a/src/hooks/useLocale.tsx b/src/hooks/useLocale.tsx index a7b8bc625..63bbb5818 100644 --- a/src/hooks/useLocale.tsx +++ b/src/hooks/useLocale.tsx @@ -11,11 +11,11 @@ export function useLocale() { const { dateTimeLocale: dateTimeSetting, language } = useUserSettings(); const [ dateFnsLocale, setDateFnsLocale ] = useState(enUS); - const locale = useMemo(() => ( + const locale: string = useMemo(() => ( normalizeLocaleName(language || getDefaultLanguage()) ), [ language ]); - const dateTimeLocale = useMemo(() => ( + const dateTimeLocale: string = useMemo(() => ( dateTimeSetting ? normalizeLocaleName(dateTimeSetting) : locale ), [ dateTimeSetting, locale ]); diff --git a/src/themes/dark/theme.scss b/src/themes/dark/theme.scss index f055a4cfc..b64687592 100644 --- a/src/themes/dark/theme.scss +++ b/src/themes/dark/theme.scss @@ -91,8 +91,8 @@ html { } .button-delete { - background: rgb(247, 0, 0); - color: rgba(255, 255, 255, 0.87); + background: #cb272a; + color: #fff; } .checkboxLabel { diff --git a/src/utils/number.ts b/src/utils/number.ts index af7e5f730..d411addcd 100644 --- a/src/utils/number.ts +++ b/src/utils/number.ts @@ -13,6 +13,20 @@ export function randomInt(min: number, max: number): number { return Math.floor(Math.random() * (max - min + 1)) + min; } +/** + * Gets the value of a number formatted as a string. + * @param {number} value The value as a number. + * @param {string} locale The locale to use for formatting (i.e. en-us). + * @returns {string} The value formatted as a string. + */ +export function toLocaleString(value: number, locale: string): string { + if (toLocaleStringSupportsOptions()) { + return value.toLocaleString(locale); + } + + return value.toString(); +} + /** * Gets the value of a number formatted as a perentage. * @param {number} value The value as a number. From 329c878d52b1c4a64aba125dea649ea69747d366 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Mon, 9 Jun 2025 15:12:34 -0400 Subject: [PATCH 409/645] Fix undefined check and use consistent number formatting function names --- .../dashboard/features/metrics/components/MetricCard.tsx | 6 +++--- src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx | 4 ++-- src/elements/emby-progressring/emby-progressring.js | 4 ++-- src/utils/number.ts | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/apps/dashboard/features/metrics/components/MetricCard.tsx b/src/apps/dashboard/features/metrics/components/MetricCard.tsx index 102d9da73..5ab87bc16 100644 --- a/src/apps/dashboard/features/metrics/components/MetricCard.tsx +++ b/src/apps/dashboard/features/metrics/components/MetricCard.tsx @@ -7,7 +7,7 @@ import Typography from '@mui/material/Typography'; import React, { type FC } from 'react'; import { useLocale } from 'hooks/useLocale'; -import { toLocaleString } from 'utils/number'; +import { toDecimalString } from 'utils/number'; interface Metric { label: string @@ -54,8 +54,8 @@ const MetricCard: FC = ({ variant='h5' component='div' > - {value ? ( - toLocaleString(value, dateTimeLocale) + {typeof value !== 'undefined' ? ( + toDecimalString(value, dateTimeLocale) ) : ( )} diff --git a/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx b/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx index 79f6a8cf3..edd834a9e 100644 --- a/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx +++ b/src/elements/emby-itemrefreshindicator/RefreshIndicator.tsx @@ -9,7 +9,7 @@ import CircularProgress, { } from '@mui/material/CircularProgress'; import Typography from '@mui/material/Typography'; import Box from '@mui/material/Box'; -import { toPercent } from 'utils/number'; +import { toPercentString } from 'utils/number'; import { getCurrentDateTimeLocale } from 'lib/globalize'; import type { ItemDto } from 'types/base/models/item-dto'; @@ -36,7 +36,7 @@ function CircularProgressWithLabel( component='div' color='text.secondary' > - {toPercent(props.value / 100, getCurrentDateTimeLocale())} + {toPercentString(props.value / 100, getCurrentDateTimeLocale())} diff --git a/src/elements/emby-progressring/emby-progressring.js b/src/elements/emby-progressring/emby-progressring.js index fee77e5ec..ce4b061bd 100644 --- a/src/elements/emby-progressring/emby-progressring.js +++ b/src/elements/emby-progressring/emby-progressring.js @@ -2,7 +2,7 @@ import './emby-progressring.scss'; import 'webcomponents.js/webcomponents-lite'; import template from './emby-progressring.template.html'; import { getCurrentDateTimeLocale } from '../../lib/globalize'; -import { toPercent } from '../../utils/number.ts'; +import { toPercentString } from '../../utils/number.ts'; const EmbyProgressRing = Object.create(HTMLDivElement.prototype); @@ -71,7 +71,7 @@ EmbyProgressRing.setProgress = function (progress) { this.querySelector('.animate-75-100-b').style.transform = 'rotate(' + angle + 'deg)'; } - this.querySelector('.progressring-text').innerHTML = toPercent(progress / 100, getCurrentDateTimeLocale()); + this.querySelector('.progressring-text').innerHTML = toPercentString(progress / 100, getCurrentDateTimeLocale()); }; EmbyProgressRing.attachedCallback = function () { diff --git a/src/utils/number.ts b/src/utils/number.ts index d411addcd..b68879523 100644 --- a/src/utils/number.ts +++ b/src/utils/number.ts @@ -19,7 +19,7 @@ export function randomInt(min: number, max: number): number { * @param {string} locale The locale to use for formatting (i.e. en-us). * @returns {string} The value formatted as a string. */ -export function toLocaleString(value: number, locale: string): string { +export function toDecimalString(value: number, locale: string): string { if (toLocaleStringSupportsOptions()) { return value.toLocaleString(locale); } @@ -33,7 +33,7 @@ export function toLocaleString(value: number, locale: string): string { * @param {string} locale The locale to use for formatting (i.e. en-us). * @returns {string} The value formatted as a percentage. */ -export function toPercent(value: number | null | undefined, locale: string): string { +export function toPercentString(value: number | null | undefined, locale: string): string { if (value == null) { return ''; } From 4ec1dba26f45f05da028ea1e34e8af07720b9436 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Tue, 10 Jun 2025 00:01:02 +0300 Subject: [PATCH 410/645] Apply review feedback Co-authored-by: Bill Thornton --- .../plugins/components/PluginCard.tsx | 14 +++++------ src/apps/dashboard/routes/plugins/index.tsx | 23 +++++++++---------- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/apps/dashboard/features/plugins/components/PluginCard.tsx b/src/apps/dashboard/features/plugins/components/PluginCard.tsx index d6efc1b1a..08bd40bbe 100644 --- a/src/apps/dashboard/features/plugins/components/PluginCard.tsx +++ b/src/apps/dashboard/features/plugins/components/PluginCard.tsx @@ -33,7 +33,7 @@ const PluginCard = ({ plugin, configurationPage }: IProps) => { const disablePlugin = useDisablePlugin(); const uninstallPlugin = useUninstallPlugin(); const [ anchorEl, setAnchorEl ] = useState(null); - const [ isMenuOpen, setMenuOpen ] = useState(false); + const [ isMenuOpen, setIsMenuOpen ] = useState(false); const [ isUninstallConfirmOpen, setIsUninstallConfirmOpen ] = useState(false); const { api } = useApi(); @@ -54,7 +54,7 @@ const PluginCard = ({ plugin, configurationPage }: IProps) => { version: plugin.Version }); setAnchorEl(null); - setMenuOpen(false); + setIsMenuOpen(false); } }, [ plugin, enablePlugin ]); @@ -65,7 +65,7 @@ const PluginCard = ({ plugin, configurationPage }: IProps) => { version: plugin.Version }); setAnchorEl(null); - setMenuOpen(false); + setIsMenuOpen(false); } }, [ plugin, disablePlugin ]); @@ -76,7 +76,7 @@ const PluginCard = ({ plugin, configurationPage }: IProps) => { const showUninstallConfirmDialog = useCallback(() => { setIsUninstallConfirmOpen(true); setAnchorEl(null); - setMenuOpen(false); + setIsMenuOpen(false); }, []); const onUninstall = useCallback(() => { @@ -86,18 +86,18 @@ const PluginCard = ({ plugin, configurationPage }: IProps) => { version: plugin.Version }); setAnchorEl(null); - setMenuOpen(false); + setIsMenuOpen(false); } }, [ plugin, uninstallPlugin ]); const onMenuClose = useCallback(() => { setAnchorEl(null); - setMenuOpen(false); + setIsMenuOpen(false); }, []); const onActionClick = useCallback(() => { setAnchorEl(actionRef.current); - setMenuOpen(true); + setIsMenuOpen(true); }, []); return ( diff --git a/src/apps/dashboard/routes/plugins/index.tsx b/src/apps/dashboard/routes/plugins/index.tsx index 8e21ccdd8..aacdd06ce 100644 --- a/src/apps/dashboard/routes/plugins/index.tsx +++ b/src/apps/dashboard/routes/plugins/index.tsx @@ -17,7 +17,8 @@ export const Component = () => { const { data: plugins, isPending, - isError } = usePlugins(); + isError + } = usePlugins(); const { data: configurationPages, isError: isConfigurationPagesError, @@ -63,17 +64,15 @@ export const Component = () => { /> - - {filteredPlugins.map(plugin => { - return ( - - - - ); - })} + + {filteredPlugins.map(plugin => ( + + + + ))} From 001c5f212ec34dfda38f19bcaf8391c19fe8d3b6 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Mon, 9 Jun 2025 17:16:11 -0400 Subject: [PATCH 411/645] Fix missing translation for the fanart plugin --- src/strings/en-us.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 0add9274f..763b2df98 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -112,6 +112,7 @@ "ButtonFullscreen": "Fullscreen", "ButtonGotIt": "Got It", "ButtonInfo": "Info", + "ButtonLearnMore": "Learn More", "ButtonLibraryAccess": "Library access", "ButtonManualLogin": "Manual Login", "ButtonMore": "More", From e641d6f5ea6614e323e8bf94e7c91d3838ed1777 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 10 Jun 2025 02:39:30 -0400 Subject: [PATCH 412/645] Fix rtl lyric support and simplify rendering --- src/controllers/lyrics.html | 2 +- src/controllers/lyrics.js | 62 ++++++++++++++----------------------- src/styles/lyrics.scss | 2 +- 3 files changed, 26 insertions(+), 40 deletions(-) diff --git a/src/controllers/lyrics.html b/src/controllers/lyrics.html index d1e7b662c..79b923678 100644 --- a/src/controllers/lyrics.html +++ b/src/controllers/lyrics.html @@ -1,6 +1,6 @@
-
+
diff --git a/src/controllers/lyrics.js b/src/controllers/lyrics.js index 36ae408bc..79dab9832 100644 --- a/src/controllers/lyrics.js +++ b/src/controllers/lyrics.js @@ -23,21 +23,17 @@ let savedLyrics; let isDynamicLyric = false; let autoScroll = AutoScroll.Instant; -function dynamicLyricHtmlReducer(htmlAccumulator, lyric, index) { - if (layoutManager.tv) { - htmlAccumulator += ``; - } else { - htmlAccumulator += `
${escapeHtml(lyric.Text)}
`; - } - return htmlAccumulator; -} +function lyricHtmlReducer(htmlAccumulator, lyric, index) { + const elem = layoutManager.tv ? 'button' : 'div'; + const classes = []; + if (isDynamicLyric) classes.push('dynamicLyric'); + if (layoutManager.tv) classes.push('listItem', 'show-focus'); + const lyricTime = typeof lyric.Start !== 'undefined' ? `data-lyrictime="${lyric.Start}"` : ''; + + htmlAccumulator += `<${elem} class="lyricsLine ${classes.join(' ')}" id="lyricPosition${index}" ${lyricTime}> + ${escapeHtml(lyric.Text)} +`; -function staticLyricHtmlReducer(htmlAccumulator, lyric, index) { - if (layoutManager.tv) { - htmlAccumulator += ``; - } else { - htmlAccumulator += `
${escapeHtml(lyric.Text)}
`; - } return htmlAccumulator; } @@ -96,37 +92,31 @@ export default function (view) { } function renderNoLyricMessage() { - const itemsContainer = view.querySelector('.dynamicLyricsContainer'); + const itemsContainer = view.querySelector('.lyricsContainer'); if (itemsContainer) { - const html = `

${globalize.translate('HeaderNoLyrics')}

`; + const html = `

${globalize.translate('HeaderNoLyrics')}

`; itemsContainer.innerHTML = html; } autoFocuser.autoFocus(); } - function renderDynamicLyrics(lyrics) { - const itemsContainer = view.querySelector('.dynamicLyricsContainer'); + function renderLyrics(lyrics) { + const itemsContainer = view.querySelector('.lyricsContainer'); if (itemsContainer) { - const html = lyrics.reduce(dynamicLyricHtmlReducer, ''); + const html = lyrics.reduce(lyricHtmlReducer, ''); itemsContainer.innerHTML = html; } - const lyricLineArray = itemsContainer.querySelectorAll('.lyricsLine'); + if (isDynamicLyric) { + const lyricLineArray = itemsContainer.querySelectorAll('.lyricsLine'); - // attaches click event listener to change playtime to lyric start - lyricLineArray.forEach(element => { - element.addEventListener('click', () => onLyricClick(element.getAttribute('data-lyrictime'))); - }); + // attaches click event listener to change playtime to lyric start + lyricLineArray.forEach(element => { + element.addEventListener('click', () => onLyricClick(element.getAttribute('data-lyrictime'))); + }); - const currentIndex = getLyricIndex(getCurrentPlayTime(), lyrics); - updateAllLyricLines(currentIndex, savedLyrics); - } - - function renderStaticLyrics(lyrics) { - const itemsContainer = view.querySelector('.dynamicLyricsContainer'); - if (itemsContainer) { - const html = lyrics.reduce(staticLyricHtmlReducer, ''); - itemsContainer.innerHTML = html; + const currentIndex = getLyricIndex(getCurrentPlayTime(), lyrics); + updateAllLyricLines(currentIndex, savedLyrics); } } @@ -135,11 +125,7 @@ export default function (view) { isDynamicLyric = Object.prototype.hasOwnProperty.call(lyrics[0], 'Start'); - if (isDynamicLyric) { - renderDynamicLyrics(savedLyrics); - } else { - renderStaticLyrics(savedLyrics); - } + renderLyrics(savedLyrics); autoFocuser.autoFocus(view); } diff --git a/src/styles/lyrics.scss b/src/styles/lyrics.scss index 0adf81ebd..4e9a7128e 100644 --- a/src/styles/lyrics.scss +++ b/src/styles/lyrics.scss @@ -6,7 +6,7 @@ justify-content: center; } -.dynamicLyricsContainer { +.lyricsContainer { display: flex; flex-direction: column; } From 188aed31abe8c12c25a4bc7bda580c5dbca1300f Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 10 Jun 2025 02:46:10 -0400 Subject: [PATCH 413/645] Use sdk to fetch lyrics --- src/controllers/lyrics.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/controllers/lyrics.js b/src/controllers/lyrics.js index 79dab9832..fd1597433 100644 --- a/src/controllers/lyrics.js +++ b/src/controllers/lyrics.js @@ -1,9 +1,10 @@ +import { getLyricsApi } from '@jellyfin/sdk/lib/utils/api/lyrics-api'; import escapeHtml from 'escape-html'; import autoFocuser from 'components/autoFocuser'; -import { appRouter } from '../components/router/appRouter'; +import { appRouter } from 'components/router/appRouter'; import layoutManager from 'components/layoutManager'; -import { playbackManager } from '../components/playback/playbackmanager'; +import { playbackManager } from 'components/playback/playbackmanager'; import scrollManager from 'components/scrollManager'; import focusManager from 'components/focusManager'; @@ -12,6 +13,7 @@ import globalize from 'lib/globalize'; import { ServerConnections } from 'lib/jellyfin-apiclient'; import LibraryMenu from 'scripts/libraryMenu'; import Events from 'utils/events'; +import { toApi } from 'utils/jellyfin-apiclient/compat'; import '../styles/lyrics.scss'; import { AutoScroll } from './lyrics.types'; @@ -132,17 +134,15 @@ export default function (view) { function getLyrics(serverId, itemId) { const apiClient = ServerConnections.getApiClient(serverId); + const lyricsApi = getLyricsApi(toApi(apiClient)); - return apiClient.ajax({ - url: apiClient.getUrl('Audio/' + itemId + '/Lyrics'), - type: 'GET', - dataType: 'json' - }).then((response) => { - if (!response.Lyrics) { - throw new Error(); - } - return response.Lyrics; - }); + return lyricsApi.getLyrics({ itemId }) + .then(({ data }) => { + if (!data.Lyrics?.length) { + throw new Error('No lyrics returned'); + } + return data.Lyrics; + }); } function bindToPlayer(player) { From 16a267f6dd83167266a2bc1ee6ac7187cc85004a Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 10 Jun 2025 02:50:09 -0400 Subject: [PATCH 414/645] Move autoscroll enum to bulletproof structure --- .../stable/features/lyrics/constants/autoScroll.ts} | 0 src/controllers/lyrics.js | 5 ++--- 2 files changed, 2 insertions(+), 3 deletions(-) rename src/{controllers/lyrics.types.ts => apps/stable/features/lyrics/constants/autoScroll.ts} (100%) diff --git a/src/controllers/lyrics.types.ts b/src/apps/stable/features/lyrics/constants/autoScroll.ts similarity index 100% rename from src/controllers/lyrics.types.ts rename to src/apps/stable/features/lyrics/constants/autoScroll.ts diff --git a/src/controllers/lyrics.js b/src/controllers/lyrics.js index fd1597433..74f674140 100644 --- a/src/controllers/lyrics.js +++ b/src/controllers/lyrics.js @@ -1,22 +1,21 @@ import { getLyricsApi } from '@jellyfin/sdk/lib/utils/api/lyrics-api'; import escapeHtml from 'escape-html'; +import { AutoScroll } from 'apps/stable/features/lyrics/constants/autoScroll'; import autoFocuser from 'components/autoFocuser'; import { appRouter } from 'components/router/appRouter'; import layoutManager from 'components/layoutManager'; import { playbackManager } from 'components/playback/playbackmanager'; import scrollManager from 'components/scrollManager'; import focusManager from 'components/focusManager'; - -import keyboardNavigation from 'scripts/keyboardNavigation'; import globalize from 'lib/globalize'; import { ServerConnections } from 'lib/jellyfin-apiclient'; +import keyboardNavigation from 'scripts/keyboardNavigation'; import LibraryMenu from 'scripts/libraryMenu'; import Events from 'utils/events'; import { toApi } from 'utils/jellyfin-apiclient/compat'; import '../styles/lyrics.scss'; -import { AutoScroll } from './lyrics.types'; let currentPlayer; let currentItem; From 52fc8890a9aa64ae973537ca20389533f30018bc Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Tue, 10 Jun 2025 02:28:06 -0400 Subject: [PATCH 415/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 59806c2ce..5149a9cef 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -138,7 +138,7 @@ "HeaderKeepRecording": "Continuar enregistrant", "HeaderKeepSeries": "Mantenir la sèrie", "HeaderLatestEpisodes": "Episodis afegits darrerament", - "HeaderLatestMedia": "Mitjans afegits darrerament", + "HeaderLatestMedia": "Contingut multimèdia afegit darrerament", "HeaderLatestMovies": "Pel·lícules afegides darrerament", "HeaderLatestMusic": "Música afegida darrerament", "HeaderLatestRecordings": "Enregistraments afegits darrerament", @@ -150,8 +150,8 @@ "HeaderMediaFolders": "Carpetes multimèdia", "HeaderMetadataSettings": "Preferències de les metadades", "HeaderMyDevice": "El meu dispositiu", - "HeaderMyMedia": "Els meus mitjans", - "HeaderMyMediaSmall": "Els meus mitjans (petit)", + "HeaderMyMedia": "Els meus continguts multimèdia", + "HeaderMyMediaSmall": "Els meus continguts multimèdia (petit)", "HeaderNewApiKey": "Nova clau API", "HeaderNextEpisodePlayingInValue": "El pròxim episodi es reproduirà en {0}", "HeaderNextVideoPlayingInValue": "El pròxim vídeo es reproduirà en {0}", @@ -845,7 +845,7 @@ "PreferFmp4HlsContainerHelp": "Prefereixen utilitzar FMP4 com el contenidor predeterminat per HLS, de manera que és possible corrent directe contingut HEVC i AV1 en els dispositius compatibles.", "PreferFmp4HlsContainer": "Prefereixo FMP4-HLS Mitjans de contenidors", "LabelSyncPlayInfo": "Informació SyncPlay", - "LabelOriginalMediaInfo": "Mitjans Informació original", + "LabelOriginalMediaInfo": "Informació original del contingut multimèdia", "LabelRemuxingInfo": "informació remuxing", "LabelDirectStreamingInfo": "Transmissió d'Informació Directa", "LabelTranscodingInfo": "Informació de transcodificació", @@ -1506,14 +1506,14 @@ "HeaderRevisionHistory": "Historial de versions", "HeaderResponseProfileHelp": "Els perfils de resposta proporcionen una manera de personalitzar la informació que s'envia a el dispositiu quan es reprodueixen certs tipus de mitjans.", "HeaderResponseProfile": "Perfil de resposta", - "HeaderRemoveMediaLocation": "Esborrar l'ubicació de mitjans", - "HeaderRemoveMediaFolder": "Esborrar la carpeta de mitjans", + "HeaderRemoveMediaLocation": "Elimina la ubicació dels continguts multimèdia", + "HeaderRemoveMediaFolder": "Elimina el directori de continguts multimèdia", "HeaderRemoteAccessSettings": "Configuració de l'accés remot", "HeaderRecordingPostProcessing": "Post-processament de l'enregistrament", "HeaderPortRanges": "Firewall i configuració del proxy", "HeaderPluginInstallation": "Instal·lació de complements", "HeaderPlayOn": "Reproduir a", - "HeaderPlayback": "Reproducció dels mitjans", + "HeaderPlayback": "Reproducció dels continguts multimèdia", "HeaderPinCodeReset": "Restablir el codi PIN", "HeaderPhotoAlbums": "Àlbums de fotos", "HeaderOtherItems": "Altres elements", @@ -1523,7 +1523,7 @@ "HeaderNavigation": "Navegació", "HeaderMusicQuality": "Qualitat de la música", "HeaderMoreLikeThis": "Similars", - "HeaderMedia": "Mitjans", + "HeaderMedia": "Contingut multimèdia", "HeaderLoginFailure": "Error en l'inici de sessió", "HeaderLiveTvTunerSetup": "Configuració del sintonitzador de TV", "HeaderKodiMetadataHelp": "Per activar o desactivar les metadades NFO, editeu una biblioteca i busqueu la secció d'Estalviadors de metadades.", @@ -1756,7 +1756,7 @@ "LabelDate": "Data", "LabelDeveloper": "Desenvolupador", "LabelLevel": "Nivell", - "LabelMediaDetails": "Detalls dels mitjans", + "LabelMediaDetails": "Detalls del contingut multimèdia", "LogLevel.Trace": "Rastreig", "SearchResultsEmpty": "Perdona! No s'han trobat resultats per \"{0}\"", "Studio": "Estudi", @@ -2051,5 +2051,6 @@ "StorageType.Network": "Xarxa", "StorageType.Ram": "RAM", "StorageType.Removable": "Retirable", - "StorageType.Unknown": "Desconegut" + "StorageType.Unknown": "Desconegut", + "PluginsLoadError": "S'ha produït un error en carregar els complements." } From 8213cd2ca520e3679c815c299c50090415847ec6 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Tue, 10 Jun 2025 04:21:20 -0400 Subject: [PATCH 416/645] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 9a72e4f89..47eedfc07 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -2054,5 +2054,6 @@ "StorageType.NoRootDirectory": "Geen hoofdmap", "StorageType.Ram": "RAM", "StorageType.Removable": "Verwisselbaar", - "StorageType.Unknown": "Onbekend" + "StorageType.Unknown": "Onbekend", + "PluginsLoadError": "Er is een fout opgetreden bij het laden van plug-ins." } From 78ebed33f70e4bd83884cfbd51b057b5b901ac4c Mon Sep 17 00:00:00 2001 From: Anrijs Vitolins Date: Tue, 10 Jun 2025 04:09:55 -0400 Subject: [PATCH 417/645] Translated using Weblate (Latvian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/lv/ --- src/strings/lv.json | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/strings/lv.json b/src/strings/lv.json index feb454619..6f37fcf70 100644 --- a/src/strings/lv.json +++ b/src/strings/lv.json @@ -441,7 +441,7 @@ "ButtonResetEasyPassword": "Nomainīt vieglo PIN kodu", "ButtonRename": "Pārsaukt", "ButtonRemove": "Noņemt", - "ButtonRefreshGuideData": "Atjaunot ceļveža datus", + "ButtonRefreshGuideData": "Atjaunināt ceļveža datus", "ButtonPreviousTrack": "Iepriekšējais celiņš", "ButtonPause": "Pauzēt", "ButtonParentalControl": "Vecāku pārvaldība", @@ -639,7 +639,7 @@ "RemoveFromPlaylist": "Noņemt no atskaņošanas sarakasta", "RemoveFromCollection": "Noņemt no kolekcijas", "RememberMe": "Atcerēties mani", - "Refresh": "Atjaunot", + "Refresh": "Atjaunināt", "Recordings": "Ieraksti", "RecordingCancelled": "Ieraksts atcelts.", "RecordSeries": "Ierakstīt seriālu", @@ -731,7 +731,7 @@ "LabelBlockContentWithTags": "Bloķēt vienumus ar birkām", "LabelBitrate": "Bitu ātrums", "LabelBindToLocalNetworkAddress": "Saistīt ar vietējā tīkla adresi", - "LabelAutomaticallyRefreshInternetMetadataEvery": "Automātiski atjaunot metadatus no interneta", + "LabelAutomaticallyRefreshInternetMetadataEvery": "Automātiski atjaunināt metadatus no interneta", "LabelAuthProvider": "Autentifikācijas nodrošinātājs", "LabelAudioSampleRate": "Audio izlases ātrums", "LabelAudioCodec": "Audio kodeks", @@ -1957,5 +1957,29 @@ "LimitSegmentLengthHelp": "Iespējojot šo opciju HLS atskaņošana varbūtēji novērsīs iekāršanos meklēšanas operāciju laikā noteiktās ierīcēs, piemēram WebOS televizoros.", "HeaderServerUnavailable": "Serveris nav pieejams", "HeaderUpdateRequired": "Nepieciešams atjauninājums", - "ViewSettings": "Apskatīt uzstādījumus" + "ViewSettings": "Apskatīt uzstādījumus", + "StorageType.NoRootDirectory": "Bez saknes mapes", + "MessageRestoreSuccess": "Atjaunošana izdevās", + "LabelProgramData": "Program Data", + "HeaderBackups": "Rezerves kopijas", + "MessageRestoreDisclaimer": "BRĪDINĀJUMS: Jūs atjaunosiet iepriekšēju rezerves kopiju. Serveris nedarbosies procesa laikā. Tie dati, kas tika radīti pēc atjaunojamās rezerves kopijas izveides, pazudīs.", + "MessageWaitingForServer": "Gaida uz serveri...", + "MessageBackupDisclaimer": "Rezerves kopijas izveide var aizņemt samērā ilgu laiku, kas atkarīgs no jūsu bibliotēkas lieluma.", + "MessageBackupInProgress": "Rezerves kopijas izveide ir procesā", + "LabelBackupsUnavailable": "Nav nevienas rezerves kopijas", + "StorageType.Network": "Tīkls", + "StorageType.Fixed": "Nenoņemama", + "StorageType.CDRom": "Kompaktdisks", + "StorageType.Unknown": "Nav zināms", + "StorageType.Removable": "Noņemama", + "StorageType.Ram": "Atmiņa (RAM)", + "Success": "Izdevās", + "ButtonCreateBackup": "Izveidot rezerves kopiju", + "BackupsPageLoadError": "Neizdevās ielādēt rezerves kopiju lapu", + "Create": "Izveidot", + "HeaderBackupsHelp": "Veidojiet vai atjaunojiet jūsu servera rezerves kopijas, kuras ietver datu bāzi, metadatus, subtitrus un trickplay attēlus.", + "LabelDatabase": "Datu bāze", + "MessageRestoreInProgress": "Atjaunošana ir procesā", + "LabelImageCache": "Attēlu kešatmiņa", + "LabelRestore": "Atjaunot" } From 6cb04868766e42848c691afac15114f9e58b40f7 Mon Sep 17 00:00:00 2001 From: myrad2267 Date: Tue, 10 Jun 2025 06:36:55 -0400 Subject: [PATCH 418/645] Translated using Weblate (French (Canada)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr_CA/ --- src/strings/fr-ca.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/fr-ca.json b/src/strings/fr-ca.json index 99874de84..64d97aa0e 100644 --- a/src/strings/fr-ca.json +++ b/src/strings/fr-ca.json @@ -1999,5 +1999,6 @@ "StorageType.Unknown": "Inconnu", "Success": "Succès", "HeaderBackups": "Sauvegardes", - "MessageBackupDisclaimer": "Selon la taille de votre médiathèque, le processus de sauvegarde peut prendre un certain temps." + "MessageBackupDisclaimer": "Selon la taille de votre médiathèque, le processus de sauvegarde peut prendre un certain temps.", + "PluginsLoadError": "Une erreur s'est produite lors du chargement des plugins." } From 887b00494fc90c4e435f7cc0389e74006d835c69 Mon Sep 17 00:00:00 2001 From: myrad2267 Date: Tue, 10 Jun 2025 06:37:17 -0400 Subject: [PATCH 419/645] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index c81918d75..dd50e5b45 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -2055,5 +2055,6 @@ "StorageType.Unknown": "Inconnu", "Success": "Succès", "MessageBackupDisclaimer": "Selon la taille de votre médiathèque, le processus de sauvegarde peut prendre un certain temps.", - "MessageRestoreDisclaimer": "AVERTISSEMENT : Vous êtes sur le point de restaurer une sauvegarde précédente. Votre serveur sera inutilisable pendant toute la durée du processus et toutes les nouvelles données créées depuis la sauvegarde seront perdues." + "MessageRestoreDisclaimer": "AVERTISSEMENT : Vous êtes sur le point de restaurer une sauvegarde précédente. Votre serveur sera inutilisable pendant toute la durée du processus et toutes les nouvelles données créées depuis la sauvegarde seront perdues.", + "PluginsLoadError": "Une erreur s'est produite lors du chargement des plugins." } From 8505096024667b97c76b1edd36a2131affa43317 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Tue, 10 Jun 2025 11:53:19 -0400 Subject: [PATCH 420/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 5149a9cef..cd855ce88 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -14,7 +14,7 @@ "AspectRatio": "Relació d'aspecte", "Audio": "Àudio", "MessageBrowsePluginCatalog": "Consulteu el nostre catàleg per veure els complements disponibles.", - "ButtonAddMediaLibrary": "Afegir biblioteca de mitjans", + "ButtonAddMediaLibrary": "Afegeix una biblioteca multimèdia", "ButtonAddScheduledTaskTrigger": "Afegir Disparador", "ButtonAddServer": "Afegeix Servidor", "ButtonAddUser": "Afegir usuari", @@ -424,7 +424,7 @@ "OptionAllUsers": "Tots els usuaris", "OptionAllowBrowsingLiveTv": "Permetre accés a TV en directe", "OptionAllowContentDownloading": "Permetre descàrrega de mitjans", - "OptionAllowLinkSharing": "Permetre compartir els mitjans a les xarxes socials", + "OptionAllowLinkSharing": "Permet compartir a les xarxes socials", "OptionAllowLinkSharingHelp": "Només les pàgines web contenint informació multimèdia seran compartides. En cap cas es comparteixen fitxers públicament. Les comparticions estan limitades per temps i expiraran després de {0} dies.", "OptionAllowManageLiveTv": "Permetre gestionar l'enregistrament de TV en directe", "OptionAllowMediaPlayback": "Permetre reproducció multimèdia", @@ -624,8 +624,8 @@ "AllowRemoteAccessHelp": "Si no es marca, totes les connexions remotes es bloquejaran.", "AllowRemoteAccess": "Permetre connexions remotes a aquest servidor", "AllowOnTheFlySubtitleExtraction": "Permetre extreure subtítols sobre la marxa", - "AllowMediaConversionHelp": "Concedir o denegar l’accés a la funció de mitjans de conversió.", - "AllowMediaConversion": "Permetre la conversió de mitjans", + "AllowMediaConversionHelp": "Concedeix o denega l’accés a la funció de conversió de productes multimèdia.", + "AllowMediaConversion": "Permet la conversió de productes multimèdia", "AllowHWTranscodingHelp": "Permet al sintonitzador transcodifique els fluxos sobre la marxa.", "AllLibraries": "Totes les biblioteques", "AllLanguages": "Tots els idiomes", @@ -987,7 +987,7 @@ "Metadata": "Metadades", "MessageUnsetContentHelp": "El contingut es mostrarà com carpetes de civil. Per obtenir els millors resultats utilitzar el gestor de metadades per establir els tipus de contingut de les subcarpetes.", "MessageUnableToConnectToServer": "No es pot connectar amb el servidor seleccionat en aquest moment. Assegureu-vos que està funcionant i torni a intentar-ho.", - "MessageTheFollowingLocationWillBeRemovedFromLibrary": "Les ubicacions següents mitjans de comunicació seran eliminats de la biblioteca", + "MessageTheFollowingLocationWillBeRemovedFromLibrary": "S'eliminaran les següents ubicacions de la biblioteca multimèdia", "MessageSyncPlayUserLeft": "{0} ha deixat el grup.", "MessageSyncPlayUserJoined": "{0} s'ha unit al grup.", "MessageSyncPlayPlaybackPermissionRequired": "Permís de reproducció requerit.", @@ -1480,8 +1480,8 @@ "OptionAllowVideoPlaybackRemuxing": "Permet la reproducció de vídeo que requereix una conversió sense recodificació", "OptionAllowSyncTranscoding": "Permet la descàrrega i la sincronització dels mitjans que requereixen transcodificació", "OptionAllowMediaPlaybackTranscodingHelp": "La restricció de l'accés a la transcodificació pot provocar errors de reproducció en els clients a causa dels formats de mitjans compatibles.", - "OptionAllowContentDownloadHelp": "Els usuaris poden descarregar els mitjans i emmagatzemar-los als seus dispositius. Això no és el mateix que una funció de sincronització. Les biblioteques de llibres ho requereixen per funcionar.", - "OptionAllowContentDownload": "Permetre la descàrrega dels mitjans", + "OptionAllowContentDownloadHelp": "Els usuaris poden descarregar els productes multimèdia i emmagatzemar-los als seus dispositius. Això no és el mateix que una funció de sincronització. Les biblioteques de llibres ho requereixen per funcionar.", + "OptionAllowContentDownload": "Permet la descàrrega dels productes multimèdia", "OptionAllowAudioPlaybackTranscoding": "Permet la reproducció d'àudio que requereix la transcodificació", "Option3D": "3D", "OnWakeFromSleep": "En deixant de la son", @@ -1804,7 +1804,7 @@ "LabelScanBehaviorHelp": "El comportament predeterminat és sense blocatge, que afegirà mitjans a la biblioteca abans que la generació de trickplay es completi. El bloqueig assegura que els fitxers de trickplay es generin abans que els mitjans s'afegeixin a la biblioteca, però farà que l'escaneig sigui més llarg.", "LabelProcessPriorityHelp": "Establint-ho més baix o més alt determinarà com el processador prioritza el procés de generació de trickplay ffmpeg en relació amb altres processos. Si observeu una ralentització mentre genereu imatges de trickplay, però no voleu aturar completament la seva generació, proveu de reduir-la així com el nombre de fils.", "AirPlay": "AirPlay", - "AllowContentWithTagsHelp": "Només mostrar mitjans amb, com a mínim, una de les etiquetes especificades.", + "AllowContentWithTagsHelp": "Mostrar només els productes multimèdia amb com a mínim alguna de les etiquetes especificades.", "BlockContentWithTagsHelp": "Amagar mitjans com a mínim amb una de les etiquetes especificades.", "LabelAllowContentWithTags": "Permetre elements amb etiquetes", "BlockingScan": "Bloqueig - generació de cues, bloqueja escaneig fins a completar-se", From d68fdcb6e7b60582a5b9358424a18b2e19317c21 Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Tue, 10 Jun 2025 10:01:44 -0400 Subject: [PATCH 421/645] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index 484e03596..b421c8ff2 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -2050,5 +2050,6 @@ "StorageType.Unknown": "Không rõ", "StorageType.Fixed": "Cố định", "Success": "Thành công", - "HeaderBackups": "Sao lưu" + "HeaderBackups": "Sao lưu", + "PluginsLoadError": "Một lỗi đã xảy ra trong khi tải plugin." } From a097333fd7cea4e5f6e61fefc5adedb268f4d0b0 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Tue, 10 Jun 2025 19:45:27 +0300 Subject: [PATCH 422/645] Add security attributes --- .../features/plugins/components/RepositoryListItem.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/dashboard/features/plugins/components/RepositoryListItem.tsx b/src/apps/dashboard/features/plugins/components/RepositoryListItem.tsx index 1e56e70eb..c6d59f6ba 100644 --- a/src/apps/dashboard/features/plugins/components/RepositoryListItem.tsx +++ b/src/apps/dashboard/features/plugins/components/RepositoryListItem.tsx @@ -56,7 +56,7 @@ const RepositoryListItem = ({ repository, onDelete }: IProps) => { } > - + From 19e14d399cb47efa39962c33f4545e8b9b9ca728 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Tue, 10 Jun 2025 12:30:50 -0400 Subject: [PATCH 423/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 92 ++++++++++++++++++++++----------------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index cd855ce88..d146b18df 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -33,7 +33,7 @@ "ButtonOk": "D'acord", "ButtonOpen": "Obre", "ButtonParentalControl": "Control parental", - "ButtonPause": "Pausa", + "ButtonPause": "Atura", "ButtonPreviousTrack": "Pista anterior", "ButtonQuickStartGuide": "Guia de configuració", "ButtonRefreshGuideData": "Actualitza les dades de la guia", @@ -55,7 +55,7 @@ "ConfirmDeleteImage": "Esborrar imatge?", "ConfirmDeletion": "Confirma supressió", "Connect": "Connecta", - "Continuing": "Continuant", + "Continuing": "En curs", "ErrorDefault": "Hi ha hagut un error processant la petició. Intenteu-ho més tard.", "Delete": "Esborra", "DeleteImage": "Esborra Imatge", @@ -110,8 +110,8 @@ "HeaderConnectToServer": "Connectar al servidor", "HeaderContainerProfile": "Perfil del contenidor", "HeaderContainerProfileHelp": "Els perfils del contenidor indiquen limitacions d'un dispositiu en reproduir formats específics. Si la limitació és aplicable, llavors els mitjans es transcodificaran fins i tot si el format ha estat configurat per a reproducció directa.", - "HeaderContinueListening": "Continuar escoltant", - "HeaderContinueWatching": "Continua veient", + "HeaderContinueListening": "Continueu escoltant", + "HeaderContinueWatching": "Continueu mirant", "HeaderCustomDlnaProfiles": "Perfils personalitzats", "HeaderDateIssued": "Data d'emissió", "HeaderDefaultRecordingSettings": "Preferències d'enregistrament per defecte", @@ -135,7 +135,7 @@ "HeaderImageSettings": "Preferències de la imatge", "HeaderInstall": "Instal·lar", "HeaderInstantMix": "Mescla instantània", - "HeaderKeepRecording": "Continuar enregistrant", + "HeaderKeepRecording": "Continueu enregistrant", "HeaderKeepSeries": "Mantenir la sèrie", "HeaderLatestEpisodes": "Episodis afegits darrerament", "HeaderLatestMedia": "Contingut multimèdia afegit darrerament", @@ -143,10 +143,10 @@ "HeaderLatestMusic": "Música afegida darrerament", "HeaderLatestRecordings": "Enregistraments afegits darrerament", "HeaderLibraries": "Llibreries", - "HeaderLibraryAccess": "Accés a la llibreria", - "HeaderLibraryFolders": "Carpetes de la llibreria", - "HeaderLibraryOrder": "Ordre de la llibreria", - "HeaderLibrarySettings": "Preferències de la llibreria", + "HeaderLibraryAccess": "Accés a la biblioteca", + "HeaderLibraryFolders": "Directoris de la biblioteca", + "HeaderLibraryOrder": "Ordre de la biblioteca", + "HeaderLibrarySettings": "Configuració de la biblioteca", "HeaderMediaFolders": "Carpetes multimèdia", "HeaderMetadataSettings": "Preferències de les metadades", "HeaderMyDevice": "El meu dispositiu", @@ -386,7 +386,7 @@ "MessageConfirmRestart": "Esteu segur que voleu reiniciar Jellyfin?", "MessageContactAdminToResetPassword": "Contacti amb l'administrador per restablir la contrasenya.", "MessageDownloadQueued": "Descàrrega encuada.", - "MessageEnablingOptionLongerScans": "Habilitar aquesta opció pot resultar en escanejos de la llibreria significativament més lents.", + "MessageEnablingOptionLongerScans": "Habilitar aquesta opció pot resultar en escanejos de la biblioteca significativament més lents.", "MessageItemSaved": "Ítem desat.", "MessageItemsAdded": "Ítems afegits.", "MessageNoAvailablePlugins": "No hi ha complements disponibles.", @@ -461,7 +461,7 @@ "OptionParentalRating": "Classificació parental", "OptionPlayCount": "Nombre de Reproduccions", "OptionReleaseDate": "Data d'estrena", - "OptionResumable": "Continuable", + "OptionResumable": "Es pot reprendre", "OptionSaveMetadataAsHidden": "Desa les metadades i les imatges com a fitxers ocults", "OptionSpecialEpisode": "Especials", "OptionSubstring": "Subcadena", @@ -624,8 +624,8 @@ "AllowRemoteAccessHelp": "Si no es marca, totes les connexions remotes es bloquejaran.", "AllowRemoteAccess": "Permetre connexions remotes a aquest servidor", "AllowOnTheFlySubtitleExtraction": "Permetre extreure subtítols sobre la marxa", - "AllowMediaConversionHelp": "Concedeix o denega l’accés a la funció de conversió de productes multimèdia.", - "AllowMediaConversion": "Permet la conversió de productes multimèdia", + "AllowMediaConversionHelp": "Concedeix o denega l’accés a la funció de conversió de contingut multimèdia.", + "AllowMediaConversion": "Permet la conversió de continguts multimèdia", "AllowHWTranscodingHelp": "Permet al sintonitzador transcodifique els fluxos sobre la marxa.", "AllLibraries": "Totes les biblioteques", "AllLanguages": "Tots els idiomes", @@ -652,7 +652,7 @@ "Backdrop": "Fons", "Artist": "Artista", "AllowedRemoteAddressesHelp": "Llista d’adreces IP o d’entrades IP/netmask separades per comes per a xarxes que podran connectar-se de forma remota. Si es deixa en blanc, es permetran totes les adreces remotes.", - "AllowFfmpegThrottlingHelp": "Quan una transcodificació o un remux s'avança prou de la posició de reproducció actual, pausa el procés per a que consumeixi menys recursos. Especialment útil si no es fan gaires cerques mentre es reprodueix contingut. Desactivar si dona problemes de reproducció o si canvies sovint de posició mentre reprodueixes continguts.", + "AllowFfmpegThrottlingHelp": "Quan una transcodificació o un remux s'avança prou de la posició de reproducció actual, atura el procés per a què consumeixi menys recursos. És especialment útil si no es fan gaire cerques mentre es reprodueix el contingut. Desactiveu-ho si dona problemes de reproducció o si canvieu sovint de posició mentre reproduïu continguts.", "AllowFfmpegThrottling": "Regular les transcodificacions", "AllowOnTheFlySubtitleExtractionHelp": "Els subtítols incrustats es poden extreure de vídeos i lliurar-los als clients en text pla, per tal d’evitar la transcodificació de vídeos. En alguns sistemes, això pot trigar molt de temps i fer que la reproducció de vídeo s'aturi durant el procés d’extracció. Desactiveu aquesta opció perquè els subtítols incrustats es gravin amb la transcodificació de vídeo quan el dispositiu client no els admeti de forma nativa.", "AlbumArtist": "Artista de l'àlbum", @@ -661,9 +661,9 @@ "CriticRating": "Valoració dels сrítics", "CopyStreamURLSuccess": "L'URL s'ha copiat correctament.", "CopyStreamURL": "Copia l'URL de reproducció", - "ContinueWatching": "Continuar mirant", + "ContinueWatching": "Continueu mirant-ho", "ConfirmEndPlayerSession": "Vols tancar Jellyfin a {0}?", - "ConfirmDeleteItems": "L'esborrat d'aquests elements els eliminarà del sistema de fitxers i de la biblioteca de mitjans. Esteu segurs que voleu continuar?", + "ConfirmDeleteItems": "L'eliminació d'aquests elements els suprimirà del sistema de fitxers i de la biblioteca multimèdia. N'esteu segur que desitgeu continuar?", "ConfirmDeleteItem": "L'esborrat d'aquest element l'eliminarà del sistema de fitxers i de la biblioteca multimèdia. Esteu segurs que voleu continuar?", "ConfigureDateAdded": "Configureu com es determinen les metadades de la \"Data d'afegit\" al Tauler > Biblioteques > Visualització", "CommunityRating": "Ràting comunitari", @@ -720,7 +720,7 @@ "DrmChannelsNotImported": "Els canals amb DRM no s’importaran.", "DownloadsValue": "{0} descàrregues", "DisplayMissingEpisodesWithinSeasonsHelp": "Això també s'ha d'activar per a les biblioteques de TV a la configuració del servidor.", - "DisplayInOtherHomeScreenSections": "Mostra a les seccions de la pantalla d'inici, com ara 'Mitjans afegits darrerament' i 'Continua mirant-ho'", + "DisplayInOtherHomeScreenSections": "Mostra a les seccions de la pantalla d'inici, com ara a 'Contingut multimèdia afegit darrerament' i 'Continueu mirant-ho'", "DisplayInMyMedia": "Mostra a la pantalla inicial", "Display": "Mostra", "Disc": "Disc", @@ -780,7 +780,7 @@ "HeaderDeleteItems": "Esborrar els ítems", "HeaderDeleteDevices": "Eliminar tots els dispositius", "HeaderDebugging": "Depuració i traceig", - "HeaderContinueReading": "Continuar llegint", + "HeaderContinueReading": "Continueu llegint", "HeaderConnectionFailure": "Error de connexió", "HeaderConfirmRevokeApiKey": "Revocar la clau API", "HeaderConfirmPluginInstallation": "Confirmeu la instal·lació del complement", @@ -793,7 +793,7 @@ "HeaderAudioBooks": "Audiollibres", "HeaderAppearsOn": "Apareix a", "HeaderApp": "Aplicació", - "HeaderAllowMediaDeletionFrom": "Permetre la supressió de mitjans des de", + "HeaderAllowMediaDeletionFrom": "Permet l'eliminació de continguts multimèdia de", "HeaderAlert": "Alerta", "HeaderAddUser": "Afegir un usuari", "HeaderAddUpdateSubtitle": "Afegir o actualitzar els subtítols", @@ -895,8 +895,8 @@ "ValueAudioCodec": "Audio Codec: {0}", "ValueAlbumCount": "{0} àlbums", "UserAgentHelp": "Subministrar una capçalera HTTP 'User-Agent' personalitzat.", - "UseEpisodeImagesInNextUpHelp": "Les seccions 'A continuació' i 'Continuar veient' utilitzaran imatges episodi com miniatures en lloc de la imatge principal de la sèrie.", - "UseEpisodeImagesInNextUp": "Utilitzar imatges d'episodi en les seccions 'A continuació' i 'Continuar veient'", + "UseEpisodeImagesInNextUpHelp": "Les seccions 'A continuació' i 'Continueu mirant' utilitzaran imatges episodi com miniatures en lloc de la imatge principal de la sèrie.", + "UseEpisodeImagesInNextUp": "Utilitza imatges d'episodi en les seccions 'A continuació' i 'Continueu veient'", "UseDoubleRateDeinterlacingHelp": "Aquesta configuració utilitza el tipus de camp quan el desentrellaçat, sovint referit com el desentrellaçat Bob, el que duplica la taxa de fotogrames de vídeo per proporcionar moviment complet com el que es veu quan es visualitza vídeo entrellaçat en un televisor.", "UseDoubleRateDeinterlacing": "El doble de la velocitat de fotogrames quan el desentrellaçat", "Upload": "Pujar", @@ -993,7 +993,7 @@ "MessageSyncPlayPlaybackPermissionRequired": "Permís de reproducció requerit.", "MessageSyncPlayNoGroupsAvailable": "No hi ha grups disponibles. Comença a jugar alguna cosa primer.", "MessageSyncPlayLibraryAccessDenied": "L'accés a aquest contingut està restringit.", - "MessageSyncPlayJoinGroupDenied": "No es pot unir-se a grup.", + "MessageSyncPlayJoinGroupDenied": "No s'ha pogut unir al grup", "MessageSyncPlayIsDisabled": "El permís necessari per utilitzar SyncPlay.", "MessageSyncPlayGroupWait": "{0} és l'emmagatzematge en memòria intermèdia …", "MessageSyncPlayGroupDoesNotExist": "No s'ha pogut unir-se a el grup, ja que no existeix.", @@ -1003,7 +1003,7 @@ "MessageSyncPlayErrorAccessingGroups": "S'ha produït un error a l'accedir a la llista de grups.", "MessageSyncPlayEnabled": "SyncPlay habilitat.", "MessageSyncPlayDisabled": "SyncPlay discapacitats.", - "MessageSyncPlayCreateGroupDenied": "El permís necessari per crear un grup.", + "MessageSyncPlayCreateGroupDenied": "Per a crear un grup cal un permís.", "MessageSent": "Missatge enviat.", "MessageReenableUser": "Vegeu més avall per tornar a activar", "MessagePluginInstallError": "S'ha produït un error durant la instal·lació del complement.", @@ -1044,7 +1044,7 @@ "MediaIsBeingConverted": "Els mitjans de comunicació s'està convertint en un format que és compatible amb el dispositiu que s'està reproduint els mitjans de comunicació.", "MediaInfoVideoRange": "Rang de vídeo", "MediaInfoTimestamp": "Marca de temps", - "MediaInfoSize": "Tamany", + "MediaInfoSize": "Mida", "MediaInfoSampleRate": "Freqüència de mostreig", "MediaInfoRefFrames": "Ref de quadres", "MediaInfoPath": "Ruta", @@ -1074,7 +1074,7 @@ "LearnHowYouCanContribute": "Aprendre com pot contribuir.", "LastSeen": "Última activitat {0}", "Large": "Gran", - "LanNetworksHelp": "Llista separada per comes d'adreces IP o IP/netmask que seran considerades part de la xarxa local a l'hora de fer complir les restriccions d'ample de banda. Si s'estableix, totes les altres adreces IP es consideraran part de la xarxa externa i estaran subjectes a les restriccions d'ample de banda externs. Si es deixa en blanc, només la subxarxa del servidor es considerarà part a la xarxa local.", + "LanNetworksHelp": "Llista separada per comes d'adreces IP o IP/netmask que seran considerades part de la xarxa local a l'hora de fer complir les restriccions d'amplada de banda. Si s'estableix, totes les altres adreces IP es consideraran part de la xarxa externa i estaran subjectes a les restriccions d'amplada de banda externs. Si es deixa en blanc, només la subxarxa del servidor es considerarà part a la xarxa local.", "LabelZipCode": "Codi ZIP", "LabelXDlnaDocHelp": "Determina el contingut de l'element 'X_DLNADOC' al espai de noms 'urn:schemas-dlna-org:device-1-0'.", "LabelXDlnaDoc": "Dispositiu Class ID", @@ -1126,7 +1126,7 @@ "LabelSyncPlayTimeSyncOffset": "Compensació de temps", "LabelSyncPlayTimeSyncDevice": "Temps de sincronització amb", "LabelSyncPlaySyncMethod": "Mètode de sincronització", - "LabelSyncPlayResumePlaybackDescription": "Unir-se a la reproducció de el grup de tornada", + "LabelSyncPlayResumePlaybackDescription": "Torneu a la reproducció grupal", "LabelSyncPlayResumePlayback": "Reprendre la reproducció local", "LabelSyncPlayPlaybackDiff": "Reproducció diferència de temps", "LabelSyncPlayNewGroupDescription": "Crear un nou grup", @@ -1136,8 +1136,8 @@ "LabelSyncPlayHaltPlaybackDescription": "I ignorar les actualitzacions de llista de reproducció actual", "LabelSyncPlayHaltPlayback": "Aturar la reproducció local", "LabelSyncPlayAccessNone": "Desactivat per a aquest usuari", - "LabelSyncPlayAccessJoinGroups": "Permetre als usuaris a unir-se als grups", - "LabelSyncPlayAccessCreateAndJoinGroups": "Permetre a l'usuari crear i unir-se a grups", + "LabelSyncPlayAccessJoinGroups": "Permet als usuaris a unir-se als grups", + "LabelSyncPlayAccessCreateAndJoinGroups": "Permet a l'usuari crear i unir-se a grups", "LabelSyncPlayAccess": "Accés SyncPlay", "LabelSupportedMediaTypes": "Tipus de mitjans compatibles", "LabelSubtitleVerticalPosition": "Posició vertical", @@ -1204,7 +1204,7 @@ "LabelPasswordConfirm": "Contrasenya (confirmar)", "LabelParentNumber": "Nombre de Pares", "LabelParentalRating": "Classificació parental", - "LabelOptionalNetworkPathHelp": "Si aquesta carpeta es comparteix a la xarxa, el subministrament de la ruta d'el recurs compartit de xarxa pot permetre als clients a altres dispositius de mitjans d'accés als arxius directament. Per exemple, {0} o {1}.", + "LabelOptionalNetworkPathHelp": "Si aquesta carpeta es comparteix a la xarxa, el subministrament de la ruta del recurs compartit de xarxa pot permetre als clients accedir directament als fitxers dels continguts multimèdia des d'altres dispositius. Per exemple, {0} o {1}.", "LabelOptionalNetworkPath": "Carpeta de xarxa compartida", "LabelOpenclDeviceHelp": "Aquest és el dispositiu OpenCL que s'utilitza pel mapeig de to. El costat esquerra de el punt és el nombre de la plataforma, i el costat dret és el nombre de dispositiu a la plataforma. El valor per omissió és 0,0. Es requereix que l'arxiu de l'aplicació FFmpeg que conté el mètode d'acceleració de maquinari OpenCL.", "LabelOpenclDevice": "OpenCL Dispositiu", @@ -1357,7 +1357,7 @@ "HttpsRequiresCert": "Per tal d'habilitar les connexions segures, haurà de proporcionar un certificat SSL de confiança com ara Let's Encrypt. Faciliti un certificat o desactivi les connexions segures.", "Horizontal": "Horitzontal", "Home": "Inici", - "HideWatchedContentFromLatestMedia": "Amagar el contingut visionat de 'Mitjans afegits darrerament'", + "HideWatchedContentFromLatestMedia": "Amaga el contingut visionat de \"Continguts multimèdia afegits darrerament\"", "HeaderVideoType": "Tipus de vídeo", "HeaderVideos": "Vídeos", "HeaderVideoQuality": "Qualitat de vídeo", @@ -1368,7 +1368,7 @@ "HeaderTranscodingProfileHelp": "Afegir perfils de transcodificació per ta ld'indicar quins formats han de ser utilitzats quan es requereixi la transcodificació.", "HeaderTracks": "Pistes", "HeaderThisUserIsCurrentlyDisabled": "Aquest usuari està actualment desactivat", - "HeaderSyncPlaySelectGroup": "Unir-se a un grup", + "HeaderSyncPlaySelectGroup": "Unió a un grup", "HeaderSyncPlayEnabled": "SyncPlay habilitat", "HeaderSubtitleProfilesHelp": "Els perfils de subtítols descriuen els formats de subtítols suportats pel dispositiu.", "HeaderSubtitleProfiles": "Perfils dels subtítols", @@ -1480,8 +1480,8 @@ "OptionAllowVideoPlaybackRemuxing": "Permet la reproducció de vídeo que requereix una conversió sense recodificació", "OptionAllowSyncTranscoding": "Permet la descàrrega i la sincronització dels mitjans que requereixen transcodificació", "OptionAllowMediaPlaybackTranscodingHelp": "La restricció de l'accés a la transcodificació pot provocar errors de reproducció en els clients a causa dels formats de mitjans compatibles.", - "OptionAllowContentDownloadHelp": "Els usuaris poden descarregar els productes multimèdia i emmagatzemar-los als seus dispositius. Això no és el mateix que una funció de sincronització. Les biblioteques de llibres ho requereixen per funcionar.", - "OptionAllowContentDownload": "Permet la descàrrega dels productes multimèdia", + "OptionAllowContentDownloadHelp": "Els usuaris poden descarregar el contingut multimèdia i emmagatzemar als seus dispositius. Això no és el mateix que una funció de sincronització. Les biblioteques de llibres ho requereixen per funcionar.", + "OptionAllowContentDownload": "Permet la descàrrega del contingut multimèdia", "OptionAllowAudioPlaybackTranscoding": "Permet la reproducció d'àudio que requereix la transcodificació", "Option3D": "3D", "OnWakeFromSleep": "En deixant de la son", @@ -1538,7 +1538,7 @@ "HeaderDVR": "Gravador digital (DVR)", "HeaderDownloadSync": "Descaregar i sincronitzar", "LabelOriginalName": "Nom original", - "LabelMaxDaysForNextUpHelp": "Establir la quantitat màxima de dies que una sèrie ha de romandre a la llista \"A continuació\" sense mirar-lo.", + "LabelMaxDaysForNextUpHelp": "Estableix la quantitat màxima de dies que una sèrie ha de romandre a la llista \"A continuació\" sense haver-la mirat.", "HeaderSyncPlayTimeSyncSettings": "Sincronització de temps", "HeaderSyncPlayPlaybackSettings": "Reproducció", "HeaderSyncPlaySettings": "Configuració de SyncPlay", @@ -1546,7 +1546,7 @@ "AgeValue": "({0} anys)", "LabelSyncPlaySettingsExtraTimeOffsetHelp": "Ajusta manualment el temps de compensació amb el dispositiu seleccionat per la sincronització del temps. Ajustar amb cura.", "LabelSyncPlaySettingsDescription": "Canvia les preferències de SyncPlay", - "LabelMaxDaysForNextUp": "Màxims dies per 'A continuació'", + "LabelMaxDaysForNextUp": "Màxim de dies per \"A continuació\"", "LabelHardwareEncoding": "Codificació per Hardware", "ErrorPlayerNotFound": "No s'ha trobat cap reproductor per al fitxer multimèdia sol·licitat.", "SelectAll": "Selecciona-ho tot", @@ -1628,7 +1628,7 @@ "LabelSyncPlaySettingsMaxDelaySpeedToSync": "SpeedToSync retard màxim", "LabelSyncPlaySettingsMinDelaySpeedToSyncHelp": "Retard de reproducció mínim (en ms) després del qual SpeedToSync intenta corregir la posició de reproducció.", "LabelSyncPlaySettingsMinDelaySpeedToSync": "SpeedToSync retard mínim", - "LabelSyncPlaySettingsSyncCorrectionHelp": "Activar la sincronització activa de la reproducció accelerant els mitjans o cercant la posició estimada. Desactiveu-ho en cas de intermitències.", + "LabelSyncPlaySettingsSyncCorrectionHelp": "Habilita la sincronització activa de la reproducció accelerant els continguts multimèdia o cercant la posició estimada. Desactiveu-ho en cas d'intermitències.", "ItemDetails": "Detalls d'element", "GoogleCastUnsupported": "Google Cast no suportat", "EnableRewatchingNextUp": "Activar tornar a mirar a \"Següent\"", @@ -1656,7 +1656,7 @@ "MessageNoFavoritesAvailable": "No hi han preferits disponibles actualment.", "OptionDateEpisodeAdded": "Data d'addició de l'episodi", "MessageNoItemsAvailable": "No hi han elements disponibles actualment.", - "MessageRenameMediaFolder": "Canviar de nom una llibreria causarà que es perdi tota la metadata, continua amb precaució.", + "MessageRenameMediaFolder": "Canviar una biblioteca de nom provocarà que es perdin totes les metadades, continueu amb precaució.", "LabelTextWeight": "Estil del text", "RememberSubtitleSelections": "Establir la pista de subtítols en funció de l'element anterior", "LabelVppTonemappingBrightnessHelp": "Aplicar el guany de brillantor al mapa de to VPP. El valor recomanat és 16.", @@ -1761,7 +1761,7 @@ "SearchResultsEmpty": "Perdona! No s'han trobat resultats per \"{0}\"", "Studio": "Estudi", "UnknownError": "S'ha produït un error desconegut.", - "PleaseConfirmRepositoryInstallation": "Si us plau, prémi OK per confirmar que heu llegit l'anterior i voleu continuar amb l'instal·lació del repositori de complements.", + "PleaseConfirmRepositoryInstallation": "Si us plau, pitgeu OK per confirmar que heu llegit el text anterior i desitgeu continuar amb la instal·lació del repositori de complements.", "Unknown": "Desconegut", "SelectAudioNormalizationHelp": "Guany de pista - ajusta el volum de cada pista perquè la reproducció soni al mateix volum. Guany d'àlbum - ajusta el volum de totes les pistes d'un àlbum, mantenint el rang dinàmic de l'àlbum. Canviant entre “Apagat” i altres opcions requereix reiniciar la reproducció actual.", "HeaderConfirmRepositoryInstallation": "Confirmi l'instal·lació del repositori de complements", @@ -1797,15 +1797,15 @@ "ChannelResolutionUHD4K": "UHD (4K)", "LabelTrickplayAccel": "Habilitar descodificació per maquinari", "NonBlockingScan": "Sense Bloqueig - generació de cues, després retorna", - "ConfirmDeleteSeries": "L'esborrat d'aquesta sèrie esborrarà TOTS {0} episodis tant del sistema de fitxers com de la teva biblioteca de mitjans. Estàs segur que vols continuar?", + "ConfirmDeleteSeries": "L'esborrat d'aquesta sèrie esborrarà TOTS {0} episodis tant del sistema de fitxers com de la biblioteca multimèdia. N'esteu segur que desitgeu continuar?", "LabelEncodingFormatOptions": "Opcions de format de codificació", "LabelTrickplayAccelHelp": "Assegura't d'habilitar 'Permetre codificació MJPEG' a Transcodificació si el teu maquinari ho suporta.", "LabelWidthResolutions": "Resolucions d'Amplada", "LabelScanBehaviorHelp": "El comportament predeterminat és sense blocatge, que afegirà mitjans a la biblioteca abans que la generació de trickplay es completi. El bloqueig assegura que els fitxers de trickplay es generin abans que els mitjans s'afegeixin a la biblioteca, però farà que l'escaneig sigui més llarg.", "LabelProcessPriorityHelp": "Establint-ho més baix o més alt determinarà com el processador prioritza el procés de generació de trickplay ffmpeg en relació amb altres processos. Si observeu una ralentització mentre genereu imatges de trickplay, però no voleu aturar completament la seva generació, proveu de reduir-la així com el nombre de fils.", "AirPlay": "AirPlay", - "AllowContentWithTagsHelp": "Mostrar només els productes multimèdia amb com a mínim alguna de les etiquetes especificades.", - "BlockContentWithTagsHelp": "Amagar mitjans com a mínim amb una de les etiquetes especificades.", + "AllowContentWithTagsHelp": "Mostra només el contingut multimèdia amb com a mínim alguna de les etiquetes especificades.", + "BlockContentWithTagsHelp": "Amaga el contingut multimèdia amb com a mínim una de les etiquetes especificades.", "LabelAllowContentWithTags": "Permetre elements amb etiquetes", "BlockingScan": "Bloqueig - generació de cues, bloqueja escaneig fins a completar-se", "LabelScanBehavior": "Comportament d'Escaneig", @@ -1968,14 +1968,14 @@ "PlaylistError.UpdateFailed": "Error en actualitzar la llista de reproducció", "LabelAlwaysRemuxFlacAudioFiles": "Sempre re-multiplexa els fitxers d'àudio FLAC", "LabelAlwaysRemuxMp3AudioFiles": "Sempre re-multiplexa els fitxers d'àudio MP3", - "LabelSaveTrickplayLocally": "Desar imatges de trucs al costat dels mitjans", - "LabelSaveTrickplayLocallyHelp": "Desar les imatges dels trucs dins de les carpetes dels mitjans les posarà al costat d'aquests per facilitar l'accés i la migració.", + "LabelSaveTrickplayLocally": "Desa previsualitzacions junt amb els continguts multimèdia", + "LabelSaveTrickplayLocallyHelp": "Desant les imatges de previsualització als directoris multimèdia, quedaran junt amb els continguts multimèdia per a més fàcil migració i accés.", "LyricDownloadersHelp": "Activa i classifica els descarregadors de lletres preferits en ordre de prioritat.", "MessageSplitVersionsError": "S'ha produït un error separant les versions", "LabelAllowStreamSharing": "Permet la reproducció compartida", "AlwaysBurnInSubtitleWhenTranscoding": "Sempre incorporar els subtítols al transcodificar", "AlwaysBurnInSubtitleWhenTranscodingHelp": "Incorporar tots els subtítols quan s'activi la transcodificació. Això assegura la sincronització dels subtítols després de la transcodificació, a canvi d'una menor velocitat de transcodificació.", - "HeaderMediaSegmentActions": "Accions dels segments dels mitjans", + "HeaderMediaSegmentActions": "Accions dels segments de continguts multimèdia", "LabelMediaSegmentsType": "{0} Segments", "PreferNonstandardArtistsTag": "Preferir l'etiqueta ARTISTS si estan disponibles", "ReplaceTrickplayImages": "Substitueix les imatges trickplay existents", @@ -1988,7 +1988,7 @@ "FallbackMaxStreamingBitrateHelp": "El bitrate màxim s'usa com a alternativa quan ffprobe no pot determinar el flux de l'origen. Això ajuda a prevenir que els clients sol·licitin un bitrate de transcodificació excessivament alt, el qual provocaria errors en el reproductor o sobrecarregar el codificador.", "HeaderNextEpisode": "Pròxim Episodi", "HeaderNextVideo": "Pròxim Vídeo", - "LabelMediaSegmentProviders": "Proveïdors de segments de mitjans", + "LabelMediaSegmentProviders": "Proveïdors de segments de continguts multimèdia", "MediaSegmentProvidersHelp": "Activa i classifica els teus segments de mitjans preferits en ordre de prioritat.", "AutoSubtitleStylingHelp": "Aquest mode canviarà automàticament entre els mecanismes d'estils de subtítols natius i personalitzats, basant-se en el teu tipus de dispositiu.", "Custom": "Personalitzat", @@ -2029,7 +2029,7 @@ "DownloadManager": "Descàrregues", "MessageForgotPasswordPinReset": "Introdueix el PIN aquí per acabar el Restabliment de contrasenya", "LabelImageCache": "Imatges en el cache", - "MessageBackupDisclaimer": "Depenent de la mida de la llibreria, la còpia de seguretat pot tardar un temps.", + "MessageBackupDisclaimer": "Depenent de la mida de la biblioteca, la còpia de seguretat pot trigar cert temps.", "MessageRestoreDisclaimer": "ATENCIÓ: Estàs a punt de restaurar una còpia de seguretat anterior. El seu servidor no serà utilitzable durant el procés i les dades creades des del moment de l'inici de la còpia seran perdudes.", "MessageWaitingForServer": "Esperant al servidor...", "StorageType.CDRom": "CD-ROM", From cc25fa22a6de4715bf58dd7306a834178d6464a0 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Tue, 10 Jun 2025 14:31:50 -0400 Subject: [PATCH 424/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 133 ++++++++++++++++++++++---------------------- 1 file changed, 67 insertions(+), 66 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index d146b18df..0b8809262 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -1,5 +1,5 @@ { - "AccessRestrictedTryAgainLater": "L'accés està restringit actualment. Intenta-ho de nou més tard si us plau.", + "AccessRestrictedTryAgainLater": "L'accés està restringit actualment. Intenteu-ho més tard.", "Add": "Afegeix", "AddToCollection": "Afegeix a una col·lecció", "AddToPlayQueue": "Afegeix a la cua de reproducció", @@ -15,9 +15,9 @@ "Audio": "Àudio", "MessageBrowsePluginCatalog": "Consulteu el nostre catàleg per veure els complements disponibles.", "ButtonAddMediaLibrary": "Afegeix una biblioteca multimèdia", - "ButtonAddScheduledTaskTrigger": "Afegir Disparador", + "ButtonAddScheduledTaskTrigger": "Afegeix un disparador", "ButtonAddServer": "Afegeix Servidor", - "ButtonAddUser": "Afegir usuari", + "ButtonAddUser": "Afegeix un usuari", "ButtonArrowLeft": "Esquerra", "ButtonArrowRight": "Dreta", "ButtonBack": "Darrera", @@ -44,7 +44,7 @@ "ButtonSend": "Enviar", "ButtonShutdown": "Apagar", "ButtonSignIn": "Iniciar sessió", - "ButtonSignOut": "Tancar sessió", + "ButtonSignOut": "Tanca la sessió", "ButtonStop": "Aturar", "ButtonSubmit": "Enviar", "ButtonTrailer": "Tràiler", @@ -93,9 +93,9 @@ "HeaderActiveDevices": "Dispositius actius", "HeaderActiveRecordings": "Enregistraments actius", "HeaderActivity": "Activitat", - "HeaderAddToCollection": "Afegir a una col·lecció", - "HeaderAddToPlaylist": "Afegir a una llista de reproducció", - "HeaderAddUpdateImage": "Afegir o actualitzar la imatge", + "HeaderAddToCollection": "Agregació a una col·lecció", + "HeaderAddToPlaylist": "Agregació a llista de reproducció", + "HeaderAddUpdateImage": "Afegeix o actualitza la imatge", "HeaderAdditionalParts": "Parts addicionals", "HeaderApiKey": "Clau API", "HeaderApiKeys": "Claus API", @@ -122,7 +122,7 @@ "HeaderDevices": "Dispositius", "HeaderDirectPlayProfile": "Perfil de reproducció directa", "HeaderEasyPinCode": "Codi PIN Senzill", - "HeaderEditImages": "Edita les imatges", + "HeaderEditImages": "Edició d'imatges", "HeaderEnabledFields": "Camps habilitats", "HeaderExternalIds": "IDs externs", "HeaderFeatureAccess": "Accés a funcions", @@ -160,7 +160,7 @@ "HeaderPassword": "Contrasenya", "HeaderPasswordReset": "Restablir contrasenya", "HeaderPaths": "Directoris", - "HeaderPlayAll": "Reproduir-ho tot", + "HeaderPlayAll": "Reprodueix-ho tot", "HeaderPlaybackError": "Error de reproducció", "HeaderPleaseSignIn": "Inicieu sessió", "HeaderPreferredMetadataLanguage": "Idioma de les metadades preferit", @@ -278,7 +278,7 @@ "LabelLogs": "Registres", "LabelManufacturer": "Fabricant", "LabelManufacturerUrl": "URL del fabricant", - "LabelMaxBackdropsPerItem": "Nombre màxim d'imatges de fons per ítem", + "LabelMaxBackdropsPerItem": "Nombre màxim d'imatges de fons per element", "LabelMaxParentalRating": "Qualificació de control parental màxima permesa", "LabelMaxResumePercentage": "Percentatge màxim per resumir", "LabelMaxResumePercentageHelp": "Es considerarà que s'ha reproduït del tot si s'atura després d'aquest temps.", @@ -289,7 +289,7 @@ "LabelMetadata": "Metadada", "LabelMetadataDownloadLanguage": "Idioma preferit de descàrrega", "LabelMetadataPath": "Directori de metadades", - "LabelMetadataPathHelp": "Especifiqueu un directori personalitzat per a l'artwork i les metadades descarregats.", + "LabelMetadataPathHelp": "Especifiqueu un directori personalitzat per a les imatges i metadades descarregades.", "LabelMethod": "Mètode", "LabelMinBackdropDownloadWidth": "Amplada mínima de descàrrega de la imatge de fons", "LabelMinResumeDuration": "Durada mínima per resumir", @@ -333,8 +333,8 @@ "LabelRecordingPath": "Directori de gravació per defecte", "LabelRefreshMode": "Mode de refresc", "LabelReleaseDate": "Estrena", - "LabelSaveLocalMetadata": "Desa l'artwork i les metadades als directoris dels multimèdia", - "LabelSaveLocalMetadataHelp": "Desar l'artwork i les metadades directament als directoris dels multimèdia els posarà tots en llocs on podran ser editats fàcilment.", + "LabelSaveLocalMetadata": "Desa les imatges als directoris multimèdia", + "LabelSaveLocalMetadataHelp": "Desar les imatges als directoris multimèdia les ubicarà a un lloc on podran ser editats fàcilment.", "LabelScreensaver": "Estalvi de pantalla", "LabelSeasonNumber": "Temporada", "LabelSelectFolderGroups": "Agrupa automàticament el contingut de les següents carpetes en col·leccions com 'Pel·lícules', 'Música' i 'TV'", @@ -409,10 +409,10 @@ "MySubtitles": "Els meus subtítols", "Name": "Nom", "NewCollection": "Nova Col·lecció", - "NewCollectionHelp": "Les col·leccions et permeten crear agrupacions personalitzades de pel·lícules i altres continguts.", + "NewCollectionHelp": "Les col·leccions us permeten crear agrupacions personalitzades de pel·lícules i altres continguts.", "NewCollectionNameExample": "Exemple: Col·leció Star Wars", "NewEpisodes": "Nous episodis", - "NewEpisodesOnly": "Només nous episodis", + "NewEpisodesOnly": "Només episodis nous", "MessageNoNextUpItems": "Cap trobat. Comença a mirar els teus programes!", "MessageNoPluginConfiguration": "Aquest complement no té opcions de configuració.", "NoSubtitleSearchResultsFound": "No s'han trobat resultats.", @@ -480,7 +480,7 @@ "PasswordSaved": "Contrasenya desada.", "People": "Repartiment i equip", "Play": "Reprodueix", - "PlayAllFromHere": "Reprodueix tots des d'aquí", + "PlayAllFromHere": "Reprodueix-ho tot des d'aquí", "PlayFromBeginning": "Reprodueix des de l'inici", "Played": "Reproduït", "Playlists": "Llistes de reproducció", @@ -511,7 +511,7 @@ "Save": "Desa", "Screenshots": "Captures de pantalla", "Search": "Cerca", - "SearchForCollectionInternetMetadata": "Cerca a internet artwork i metadades", + "SearchForCollectionInternetMetadata": "Cerca a internet imatges i metadades", "SearchForMissingMetadata": "Cerca metadades perdudes", "SearchForSubtitles": "Cerca Subtítols", "SendMessage": "Envia missatge", @@ -607,7 +607,7 @@ "ButtonInfo": "Informació", "ButtonFullscreen": "Pantalla completa", "ButtonAudioTracks": "Pistes d'àudio", - "ButtonAddImage": "Afegir imatge", + "ButtonAddImage": "Afegeix una imatge", "Blacklist": "Llista negra", "BirthPlaceValue": "Lloc de naixement: {0}", "BirthLocation": "Lloc de naixement", @@ -640,13 +640,13 @@ "ClientSettings": "Configuració del client", "CinemaModeConfigurationHelp": "El mode Cinema aporta l'experiència del teatre directament a la sala d'estar amb la possibilitat de jugar a tràilers i presentacions personalitzades abans de la funció principal.", "ChannelNameOnly": "Només el canal {0}", - "ChangingMetadataImageSettingsNewContent": "Els canvis als paràmetres de descàrrega de metadades o d'imatge només s'apliquen al contingut nou afegit a la biblioteca. Per aplicar els canvis als títols existents, haureu d'actualitzar les metadades manualment.", + "ChangingMetadataImageSettingsNewContent": "Els canvis als paràmetres de descàrrega de metadades o imatges només s'apliquen al contingut nou afegit a la biblioteca. Per aplicar els canvis als títols existents, haureu d'actualitzar les metadades manualment.", "ButtonTogglePlaylist": "Llista de reproducció", "BurnSubtitlesHelp": "Determina si el servidor hauria de gravar els subtítols. Evitant això millorarà molt el rendiment. Selecciona Auto per gravar formats basats en imatges (VobSub, PGS, SUB, IDX) i certs subtítols ASS o SSA.", "Browse": "Navega", - "BoxRear": "Caixa (posterior)", + "BoxRear": "Capsa (darrere)", "BoxSet": "Col·leció", - "Box": "Caixa", + "Box": "Capsa", "BookLibraryHelp": "Àudiollibres i llibres de text son compatibles. Reviseu la {0} guia de denominació de llibres {1}.", "Backdrops": "Fons", "Backdrop": "Fons", @@ -713,7 +713,7 @@ "EnableExternalVideoPlayers": "Reproductors de vídeo externs", "EnableDecodingColorDepth10Vp9": "Activar la descodificació de maquinari de 10 bits per a VP9", "EnableDecodingColorDepth10Hevc": "Activar la descodificació de maquinari de 10 bits per a HEVC", - "EnableBackdropsHelp": "Mostra imatges al fons d'algunes pàgines mentre navegueu per la biblioteca.", + "EnableBackdropsHelp": "Mostra imatges al fons d'algunes pàgines mentre es navega per la biblioteca.", "EnableAutoCast": "Establir com a per defecte", "EditMetadata": "Edita les metadades", "EasyPasswordHelp": "El vostre codi Easy PIN s'utilitza per accedir fora de línia als clients compatibles i també es pot utilitzar per iniciar la sessió a la xarxa fàcilment.", @@ -770,15 +770,15 @@ "EnablePlugin": "Activar", "DirectStreamHelp1": "El flux de vídeo és compatible amb el dispositiu, però té un format d'àudio incompatible (DTS, Dolby TrueHD, etc.) o un nombre de canals d'àudio. El flux de vídeo es tornarà a empaquetar sense pèrdues sobre la marxa abans d'enviar-lo al dispositiu. Només es transcodificarà el flux d'àudio.", "DirectPlayHelp": "El fitxer font és totalment compatible amb aquest client i la sessió rep el fitxer sense modificacions.", - "DeleteDevicesConfirmation": "Esteu segurs que voleu suprimir tots els dispositius? Es tancaran la sessió de la resta de sessions. Els dispositius tornaran a aparèixer la pròxima vegada que un usuari iniciï la sessió.", - "DeleteAll": "Eliminar tots", + "DeleteDevicesConfirmation": "N'esteu segur que voleu suprimir tots els dispositius? Totes les altres sessions es tancaran. Els dispositius reapareixeran la propera vegada que un usuari iniciï la sessió.", + "DeleteAll": "Elimina-ho tot", "DeinterlaceMethodHelp": "Seleccioneu el mètode de desentrellaçat que voleu utilitzar quan transcodifiqueu el programari de contingut entrellaçat. Quan està activada l'acceleració de maquinari que admet el desentrellaçat de maquinari, s'utilitzarà el desentrellaçador de maquinari en lloc d'aquesta configuració.", "HeaderDirectPlayProfileHelp": "Afegiu perfils de reproducció directa per indicar quins formats pot gestionar el dispositiu de forma nativa.", "HeaderDetectMyDevices": "Detectar els meus dispositius", "HeaderDeleteTaskTrigger": "Esborrar el disparador de tasques", "HeaderDeleteProvider": "Esborrar el proveïdor", "HeaderDeleteItems": "Esborrar els ítems", - "HeaderDeleteDevices": "Eliminar tots els dispositius", + "HeaderDeleteDevices": "Elimina tots els dispositius", "HeaderDebugging": "Depuració i traceig", "HeaderContinueReading": "Continueu llegint", "HeaderConnectionFailure": "Error de connexió", @@ -796,7 +796,7 @@ "HeaderAllowMediaDeletionFrom": "Permet l'eliminació de continguts multimèdia de", "HeaderAlert": "Alerta", "HeaderAddUser": "Afegir un usuari", - "HeaderAddUpdateSubtitle": "Afegir o actualitzar els subtítols", + "HeaderAddUpdateSubtitle": "Afegeix o actualitza els subtítols", "H264CrfHelp": "El factor de velocitat constant (CRF) és el valor de qualitat predeterminat per als codificadors de programari x264 i x265. Podeu definir els valors entre 0 i 51, on els valors més baixos donarien com a resultat una millor qualitat (a costa de mides de fitxer més altes). Els valors correctes oscil·len entre 18 i 28. El valor predeterminat per a x264 és 23 i per a x265 és 28, de manera que podeu utilitzar-lo com a punt de partida. Els codificadors per maquinari no utilitzen aquesta configuració.", "GuideProviderSelectListings": "Seleccionar Llistats", "GroupVersions": "Grups de versions", @@ -843,7 +843,7 @@ "LabelAllowedAudioChannels": "Màxim permès Canals d'àudio", "AllowHevcEncoding": "Permetre la codificació en format HEVC", "PreferFmp4HlsContainerHelp": "Prefereixen utilitzar FMP4 com el contenidor predeterminat per HLS, de manera que és possible corrent directe contingut HEVC i AV1 en els dispositius compatibles.", - "PreferFmp4HlsContainer": "Prefereixo FMP4-HLS Mitjans de contenidors", + "PreferFmp4HlsContainer": "Prefereixo el contenidor multimèdia fMP4-HLS", "LabelSyncPlayInfo": "Informació SyncPlay", "LabelOriginalMediaInfo": "Informació original del contingut multimèdia", "LabelRemuxingInfo": "informació remuxing", @@ -852,8 +852,8 @@ "LabelVideoInfo": "Sobre el vídeo", "LabelAudioInfo": "Informació d'àudio", "LabelPlaybackInfo": "Informació de reproducció", - "RemuxHelp2": "Remux utilitza molt poca potència de processament amb una qualitat dels mitjans completament sense pèrdues.", - "RemuxHelp1": "Els mitjans de comunicació es troba en un contenidor d'arxius incompatibles (MKV, AVI, WMV, etc), però tant el flux de vídeo i àudio són compatibles amb el dispositiu. Els mitjans de comunicació han de ser empaquetats de nou sense pèrdues sobre la marxa abans de ser enviat a el dispositiu.", + "RemuxHelp2": "Remux utilitza molt poca potència de processament amb una qualitat multimèdia sense pèrdues.", + "RemuxHelp1": "El contingut multimèdia es troba en un contenidor de fitxers incompatible (MKV, AVI, WMV, etc.), però tant el flux de vídeo com el flux d'àudio són compatibles amb el dispositiu. El contingut multimèdia es reempaquetarà sobre la marxa i sense pèrdues, abans d'enviar-se al dispositiu.", "AspectRatioFill": "Estirar", "AspectRatioCover": "Zoom", "EnableFallbackFontHelp": "Habilitar fonts alternes d'encàrrec. Això es pot evitar el problema de renderitzat de subtítols incorrectes.", @@ -910,7 +910,7 @@ "TonemappingAlgorithmHelp": "Mapeig de tons pot ser afinat. Si vostè no està familiaritzat amb aquestes opcions, simplement mantingui el valor per omissió. El valor recomanat és 'BT.2390'.", "TitleHostingSettings": "Ajustaments de Hosting", "TitleHardwareAcceleration": "Acceleració per hardware", - "ThumbCard": "Targeta de miniatura", + "ThumbCard": "Targeta miniatura", "Thumb": "Miniatura", "ThemeVideos": "Vídeos temàtics", "ThemeSongs": "Cançons del tema", @@ -963,7 +963,7 @@ "ScanLibrary": "biblioteca d'escaneig", "ScanForNewAndUpdatedFiles": "Cerca fitxers nous i actualitzats", "SaveSubtitlesIntoMediaFoldersHelp": "L'emmagatzematge de subtítols al costat dels arxius de vídeo que els permetrà ser manejats amb més facilitat.", - "SaveSubtitlesIntoMediaFolders": "Guardar subtítols en carpetes de mitjans", + "SaveSubtitlesIntoMediaFolders": "Desa els subtítols en els directoris de continguts multimèdia", "NoSubtitlesHelp": "Els subtítols no seran carregats per defecte. Encara es poden activar de forma manual durant la reproducció.", "Normal": "Normal", "NoNewDevicesFound": "No s'han trobat dispositius nous. Per afegir un nou sintonitzador, tanqueu aquest avís i introduïu la informació del dispositiu de forma manual.", @@ -981,7 +981,7 @@ "MusicAlbum": "Àlbum de música", "MovieLibraryHelp": "Revisar la pel·lícula {0} guia de noms {1}.", "Movie": "Pel·lícula", - "MoreMediaInfo": "Informació del mitjà", + "MoreMediaInfo": "Informació multimèdia", "MillisecondsUnit": "ms", "MetadataSettingChangeHelp": "Canviar la configuració de les metadades afectarà al nou contingut afegit a partir d'ara. Per actualitzar el contingut existent, obriu la pantalla de detalls i feu clic al botó \"Actualitzar\" o actualitzeu-lo utilitzant el Gestor de metadades.", "Metadata": "Metadades", @@ -1008,7 +1008,7 @@ "MessageReenableUser": "Vegeu més avall per tornar a activar", "MessagePluginInstallError": "S'ha produït un error durant la instal·lació del complement.", "MessagePluginInstalled": "El complement s'ha instal·lat correctament. És necessari reiniciar el servidor perquè els canvis tinguin efecte.", - "MessagePluginInstallDisclaimer": "ADVERTÈNCIA: L'instal·lació d'un complement de tercers comporta riscos. Pot contenir còdi inestable o maliciós, i pot canviar en qualsevol moment. Només instal·li complements d'autors en els que confiï, i sigui conscient dels efectes que poden tenir, incloent consultes a serveis externs, exploracions de biblioteques més llargues, processos de fons addicionals.", + "MessagePluginInstallDisclaimer": "ADVERTÈNCIA: La instal·lació d'un complement de tercers comporta riscos. Pot contenir codi inestable o maliciós, i pot canviar en qualsevol moment. Instal·leu només complements d'autors en els que confieu, i sigueu conscient dels efectes que poden tenir, incloent consultes a serveis externs, exploracions de biblioteques més llargues o processos addicionals de rerefons.", "MessagePluginConfigurationRequiresLocalAccess": "Connecteu-vos amb el servidor local directament per configurar aquest complement.", "MessagePleaseWait": "Si us plau, espereu. Això pot trigar un minut.", "MessagePlayAccessRestricted": "La reproducció d'aquest contingut està restringit actualment. Poseu-vos en contacte amb l'administrador de servidor per obtenir més informació.", @@ -1027,7 +1027,7 @@ "MessageForgotPasswordFileCreated": "El següent arxiu s'ha creat en el seu servidor i conté instruccions sobre com procedir", "MessageFileReadError": "Hi ha hagut un error a llegint l'arxiu. Torni-ho a provar.", "MessageDirectoryPickerLinuxInstruction": "Per a Linux amb Arch Linux, CentOS, Debian, Fedora, openSUSE, o Ubuntu, ha de concedir a l'usuari del servei com a mínim l'accés de lectura als llocs d'emmagatzematge.", - "MessageDirectoryPickerBSDInstruction": "Per BSD, pot ser que hagi de configurar l'emmagatzematge dins del seu presó FreeNAS pel Jellyfin pot accedir als mitjans de comunicació.", + "MessageDirectoryPickerBSDInstruction": "Per a BSD, caldrà tenir configurat l'emmagatzematge del \"FreeNAS Jail\" perquè permeti a Jellyfin accedir al contingut multimèdia.", "MessageDeleteTaskTrigger": "Esteu segur que voleu eliminar aquest disparador tasca?", "MessageCreateAccountAt": "Crear un compte a {0}", "MessageConfirmShutdown": "Esteu segur que voleu tancar el servidor?", @@ -1037,11 +1037,11 @@ "MessageConfirmDeleteGuideProvider": "Esteu segur que voleu eliminar aquest proveïdor de guia?", "MessageConfirmAppExit": "Vols sortir?", "MessageChangeRecordingPath": "Canviar la seva carpeta d'enregistrament no migrarà enregistraments existents des de la ubicació anterior a la nova. Haurà de moure manualment si es desitja.", - "MessageAreYouSureYouWishToRemoveMediaFolder": "Esteu segur que voleu eliminar aquesta carpeta de mitjans?", + "MessageAreYouSureYouWishToRemoveMediaFolder": "N'esteu segur que desitgeu eliminar aquest directori multimèdia?", "MessageAlreadyInstalled": "Aquesta versió ja està instal·lada.", "MessageAddRepository": "Si voleu afegir un repositori, feu clic al botó situat al costat de la capçalera i completi la informació sol·licitada.", "Menu": "Menú", - "MediaIsBeingConverted": "Els mitjans de comunicació s'està convertint en un format que és compatible amb el dispositiu que s'està reproduint els mitjans de comunicació.", + "MediaIsBeingConverted": "El contingut multimèdia està sent convertit a un format compatible amb el dispositiu que l'està reproduint.", "MediaInfoVideoRange": "Rang de vídeo", "MediaInfoTimestamp": "Marca de temps", "MediaInfoSize": "Mida", @@ -1120,7 +1120,7 @@ "LabelTonemappingAlgorithm": "Seleccioneu l'algoritme de \"Tone mapping\"", "LabelTextSize": "Mida de el text", "LabelTextColor": "Color de el text", - "LabelTextBackgroundColor": "Text color de fons", + "LabelTextBackgroundColor": "Color del text de fons", "LabelTagline": "Lema", "LabelTag": "Etiqueta", "LabelSyncPlayTimeSyncOffset": "Compensació de temps", @@ -1129,7 +1129,7 @@ "LabelSyncPlayResumePlaybackDescription": "Torneu a la reproducció grupal", "LabelSyncPlayResumePlayback": "Reprendre la reproducció local", "LabelSyncPlayPlaybackDiff": "Reproducció diferència de temps", - "LabelSyncPlayNewGroupDescription": "Crear un nou grup", + "LabelSyncPlayNewGroupDescription": "Crea un grup nou", "LabelSyncPlayNewGroup": "Nou grup", "LabelSyncPlayLeaveGroupDescription": "Desactivar SyncPlay", "LabelSyncPlayLeaveGroup": "Marxar del grup", @@ -1301,7 +1301,7 @@ "LabelDefaultScreen": "Pantalla per defecte", "LabelDateTimeLocale": "Data Hora Local", "LabelDateAddedBehaviorHelp": "Si un valor de metadades és present, sempre va ser utilitzat abans que qualsevol d'aquestes opcions.", - "LabelDateAddedBehavior": "El comportament agregat Data de nous continguts", + "LabelDateAddedBehavior": "Comportament de la data afegida per a contingut nou", "LabelCustomRating": "Classificació personal", "LabelCustomDeviceDisplayNameHelp": "De donar un nom de visualització personalitzat o deixar en blanc per usar el nom reportat pel dispositiu.", "LabelCustomCertificatePathHelp": "Ruta a un arxiu PKCS #12 que contingui un certificat i una clau privada per activar el suport TLS en un domini personalitzat.", @@ -1379,7 +1379,7 @@ "ResetPassword": "Restablir la contrasenya", "RepeatOne": "Repetir 1", "RepeatMode": "Mode de repetició", - "RepeatAll": "Repetir tot", + "RepeatAll": "Repeteix-ho tot", "RefreshDialogHelp": "Les metadades s'actualitzen segons la configuració i serveis d'internet habilitats al Tauler de control.", "Recordings": "Enregistraments", "RecommendationStarring": "Protagonitzada {0}", @@ -1400,7 +1400,7 @@ "PluginFromRepo": "{0} des del repositori {1}", "Profile": "Perfil", "ProductionLocations": "Centres de producció", - "Primary": "Primari", + "Primary": "Principal", "PreviousTrack": "Vés a l'anterior", "Previous": "Anterior", "Preview": "Vista prèvia", @@ -1419,7 +1419,7 @@ "PlayNext": "Reproduir el següent", "PlayCount": "Contador de reproduccions", "PlaybackRate": "Velocitat de reproducció", - "PlaybackErrorNoCompatibleStream": "Aquest client no és compatible amb els mitjans de comunicació i el servidor no està enviant un format de mitjans compatibles.", + "PlaybackErrorNoCompatibleStream": "Aquest client no és compatible amb el contingut multimèdia i el servidor no està enviant un format multimèdia compatible.", "PlaybackData": "Informació de reproducció", "PlaceFavoriteChannelsAtBeginning": "Col·loqui els canals favorits a l'començament", "PinCodeResetConfirmation": "Esteu segur que voleu restablir el codi PIN?", @@ -1460,7 +1460,7 @@ "OptionIgnoreTranscodeByteRangeRequestsHelp": "Aquestes sol·licituds seran ateses, però no faran cas de la capçalera d'interval de bytes.", "OptionIgnoreTranscodeByteRangeRequests": "No feu cas de les sol·licituds d'interval de bytes de transcodificació", "OptionHlsSegmentedSubtitles": "HLS segmentat subtítols", - "OptionForceRemoteSourceTranscoding": "Força de transcodificació de mitjans de comunicació a distància, com TV en directe", + "OptionForceRemoteSourceTranscoding": "Força la transcodificació de fonts externes, com ara la televisió en directe", "OptionExtractChapterImage": "Habilitar extracció de la imatge capítol", "OptionEstimateContentLength": "Estimar longitud d'el contingut quan la transcodificació", "OptionEnableM2tsModeHelp": "Activar el mode M2TS quan es codifica a MPEG-TS.", @@ -1468,8 +1468,8 @@ "OptionEnableForAllTuners": "Habilitar per a tots els dispositius sintonitzadors", "OptionEnableExternalContentInSuggestions": "Habilitar contingut extern en suggeriments", "OptionDvd": "DVD", - "OptionDisplayFolderViewHelp": "Mostra les carpetes juntament amb els seus altres biblioteques de mitjans. Això pot ser útil si li agradaria tenir una vista de carpetes pla.", - "OptionDisplayFolderView": "Mostra una vista de carpetes per mostrar carpetes de mitjans de fricció", + "OptionDisplayFolderViewHelp": "Mostra els directoris juntament amb les vostres altres biblioteques multimèdia. Això pot ser útil si us agradaria tenir una vista senzilla de directoris.", + "OptionDisplayFolderView": "Mostra una vista de carpeta per a veure directoris multimèdia sense format", "OptionDateAddedFileTime": "Utilitzar la data de creació de l'arxiu", "OptionCustomUsers": "Personalitzat", "OptionCaptionInfoExSamsung": "CaptionInfoEx (Samsung)", @@ -1478,8 +1478,8 @@ "OptionAutomaticallyGroupSeries": "Automàticament sèrie que es distribueixen en diverses carpetes", "OptionAllowVideoPlaybackTranscoding": "Permet la reproducció de vídeo que requereix la transcodificació", "OptionAllowVideoPlaybackRemuxing": "Permet la reproducció de vídeo que requereix una conversió sense recodificació", - "OptionAllowSyncTranscoding": "Permet la descàrrega i la sincronització dels mitjans que requereixen transcodificació", - "OptionAllowMediaPlaybackTranscodingHelp": "La restricció de l'accés a la transcodificació pot provocar errors de reproducció en els clients a causa dels formats de mitjans compatibles.", + "OptionAllowSyncTranscoding": "Permet la conversió del contingut multimèdia quan es descarregui i sincronitzi", + "OptionAllowMediaPlaybackTranscodingHelp": "La restricció de l'accés a la transcodificació pot provocar errors de reproducció en els clients a causa dels formats multimèdia incompatibles.", "OptionAllowContentDownloadHelp": "Els usuaris poden descarregar el contingut multimèdia i emmagatzemar als seus dispositius. Això no és el mateix que una funció de sincronització. Les biblioteques de llibres ho requereixen per funcionar.", "OptionAllowContentDownload": "Permet la descàrrega del contingut multimèdia", "OptionAllowAudioPlaybackTranscoding": "Permet la reproducció d'àudio que requereix la transcodificació", @@ -1569,7 +1569,7 @@ "Track": "Pista", "Print": "Imprimeix", "PreviousChapter": "Episodi anterior", - "PlaybackErrorPlaceHolder": "Això és un marcador de posició per a mitjans físics que el Jellyfin no pot reproduir. Inseriu el disc per reproduir.", + "PlaybackErrorPlaceHolder": "Això és un marcador de posició per a suports físics que Jellyfin no pot reproduir. Inseriu el disc per reproduir-lo.", "OtherArtist": "Altres artistes", "NextChapter": "Pròxim episodi", "Mixer": "Mesclador", @@ -1607,7 +1607,7 @@ "AllowEmbeddedSubtitlesAllowTextOption": "Permetre text", "AllowEmbeddedSubtitlesAllowImageOption": "Permetre imatge", "AllowEmbeddedSubtitlesAllowNoneOption": "No permetre cap", - "AllowEmbeddedSubtitlesAllowAllOption": "Permetre tot", + "AllowEmbeddedSubtitlesAllowAllOption": "Permet-ho tot", "AllowEmbeddedSubtitlesHelp": "Desactiveu els subtítols empaquetats dins dels contenidors multimèdia. Requereix una actualització completa de la biblioteca.", "AllowEmbeddedSubtitles": "Desactivar diferents tipus de subtítols incrustats", "OriginalAirDate": "Data d'emissió original", @@ -1698,7 +1698,7 @@ "LabelChapterImageResolution": "Resolució", "LabelChapterImageResolutionHelp": "La resolució de les imatges del capítol extretes. Canviar-ho no afectarà els capítols ficticis existents.", "ResolutionMatchSource": "Coincidir amb la font", - "SaveRecordingNFOHelp": "Desa les metadades del proveïdor de llistes EPG amb els mitjans.", + "SaveRecordingNFOHelp": "Desa les metadades del proveïdor de llistats EPG amb els fitxers multimèdia.", "HeaderPerformance": "Rendiment", "LabelDummyChapterCountHelp": "El nombre màxim d'imatges del capítol que s'extreuran per a cada fitxer multimèdia.", "LabelParallelImageEncodingLimit": "Límit de codificació paral·lela d'imatges", @@ -1706,7 +1706,7 @@ "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Els extres sovint tenen el mateix nom incrustat que el principal, marqueu-ho per utilitzar-los títols incrustats de totes maneres.", "SaveRecordingNFO": "Desa les metadades EPG d'enregistrament a NFO", "SaveRecordingImages": "Guarda les imatges d'enregistrament EPG", - "SaveRecordingImagesHelp": "Desa les imatges del proveïdor de llistes EPG amb els mitjans.", + "SaveRecordingImagesHelp": "Desa les imatges del proveïdor de llistes EPG amb el contingut multimèdia.", "SubtitleBlue": "Blau", "SubtitleCyan": "Cian", "SubtitleGreen": "Verd", @@ -1741,11 +1741,11 @@ "LogLevel.Warning": "Advertència", "GoHome": "Anar a l'inici", "HearingImpairedShort": "HI/SDH", - "LabelBackdropScreensaverInterval": "Interval del Salvapantalles de Fons", - "LabelBackdropScreensaverIntervalHelp": "El temps en segons entre els diferents fons quan s'utilitza el salvapantalles de fons.", + "LabelBackdropScreensaverInterval": "Interval del fons estalvi de pantalles", + "LabelBackdropScreensaverIntervalHelp": "El temps en segons entre els diferents fons quan s'utilitza l'estalvi de pantalles amb els fons.", "LabelSyncPlayNoGroups": "No hi ha grups disponibles", "GridView": "Vista de Graella", - "BackdropScreensaver": "Salvapantalles de fons", + "BackdropScreensaver": "Estalvis de pantalla de fons", "ListView": "Vista de Llista", "LogLevel.Critical": "Crític", "LogLevel.Information": "Informació", @@ -1797,11 +1797,11 @@ "ChannelResolutionUHD4K": "UHD (4K)", "LabelTrickplayAccel": "Habilitar descodificació per maquinari", "NonBlockingScan": "Sense Bloqueig - generació de cues, després retorna", - "ConfirmDeleteSeries": "L'esborrat d'aquesta sèrie esborrarà TOTS {0} episodis tant del sistema de fitxers com de la biblioteca multimèdia. N'esteu segur que desitgeu continuar?", + "ConfirmDeleteSeries": "Eliminar aquesta sèrie eliminarà TOTS {0} episodis tant del sistema de fitxers com de la biblioteca multimèdia. N'esteu segur que desitgeu continuar?", "LabelEncodingFormatOptions": "Opcions de format de codificació", "LabelTrickplayAccelHelp": "Assegura't d'habilitar 'Permetre codificació MJPEG' a Transcodificació si el teu maquinari ho suporta.", "LabelWidthResolutions": "Resolucions d'Amplada", - "LabelScanBehaviorHelp": "El comportament predeterminat és sense blocatge, que afegirà mitjans a la biblioteca abans que la generació de trickplay es completi. El bloqueig assegura que els fitxers de trickplay es generin abans que els mitjans s'afegeixin a la biblioteca, però farà que l'escaneig sigui més llarg.", + "LabelScanBehaviorHelp": "El comportament predeterminat és sense blocatge, cosa que afegirà contingut multimèdia a la biblioteca abans que la generació de la previsualització es completi. El bloqueig assegura que els fitxers de previsualització es generin abans que el contingut multimèdia no s'afegeixi a la biblioteca, però farà que l'escaneig sigui significativament més llarg.", "LabelProcessPriorityHelp": "Establint-ho més baix o més alt determinarà com el processador prioritza el procés de generació de trickplay ffmpeg en relació amb altres processos. Si observeu una ralentització mentre genereu imatges de trickplay, però no voleu aturar completament la seva generació, proveu de reduir-la així com el nombre de fils.", "AirPlay": "AirPlay", "AllowContentWithTagsHelp": "Mostra només el contingut multimèdia amb com a mínim alguna de les etiquetes especificades.", @@ -1810,12 +1810,12 @@ "BlockingScan": "Bloqueig - generació de cues, bloqueja escaneig fins a completar-se", "LabelScanBehavior": "Comportament d'Escaneig", "PlaybackError.ASS_RENDER_ERROR": "S'ha produït un error al renderitzador de subtítols ASS/SSA.", - "PlaybackError.MEDIA_NOT_SUPPORTED": "La reproducció ha fallat, ja que el mitjà no és compatible amb aquest client.", + "PlaybackError.MEDIA_NOT_SUPPORTED": "La reproducció ha fallat, perquè el contingut multimèdia no és compatible amb aquest client.", "PlaybackError.NETWORK_ERROR": "La reproducció ha fallat a causa d'un error de connexió.", - "PlaybackError.NO_MEDIA_ERROR": "No s'ha pogut trobar un mitjà vàlid per a reproduir.", + "PlaybackError.NO_MEDIA_ERROR": "No s'ha pogut trobar un contingut multimèdia vàlid per a reproduir.", "PlaybackError.PLAYER_ERROR": "La reproducció ha fallat a causa d'un error fatal del reproductor.", "PlaybackError.SERVER_ERROR": "La reproducció ha fallat a causa d'un error del servidor.", - "PlaybackError.NotAllowed": "La reproducció d'aquest mitjà no està permesa.", + "PlaybackError.NotAllowed": "La reproducció d'aquest contingut multimèdia no està permesa.", "Trickplay": "Trickplay", "PriorityHigh": "Alta", "EnableLibrary": "Habilitar la biblioteca", @@ -1823,7 +1823,7 @@ "LimitSupportedVideoResolution": "Limitar la resolució màxima de vídeo suportada", "LimitSupportedVideoResolutionHelp": "Utilitzar \"La màxima resolució de transcodificació de vídeo permesa\" com a màxima resolució suportada.", "PlaybackError.FATAL_HLS_ERROR": "S'ha produït un error fatal al stream HLS.", - "PlaybackError.RateLimitExceeded": "Aquest mitjà no es pot reproduir en aquests instants deguts a límits de la xarxa.", + "PlaybackError.RateLimitExceeded": "Aquest contingut multimèdia no es pot reproduir en aquests instants deguts a límits de transmissió.", "EncodingFormatHelp": "Seleccioni la codificació de vídeo a la qual hauria de transcodificar Jellyfin. Jellyfin utilitzarà codificació mitjançant programari quan l'acceleració per maquinari no estigui disponible. La codificació H264 sempre estarà habilitada.", "PriorityAboveNormal": "Per sobre del Normal", "PriorityNormal": "Normal", @@ -1839,9 +1839,9 @@ "OptionExtractTrickplayImage": "Habilitar extracció d'imatges de trickplay", "LabelExtractTrickplayDuringLibraryScan": "Extreure imatges de trickplay durant l'escaneig de la biblioteca", "LabelExtractTrickplayDuringLibraryScanHelp": "Generar imatges de trickplay quan els vídeos són importats durant l'escaneig de la biblioteca. D'altra banda, seran extrets durant la tasca programada d'imatges de trickplay. Si la generació està marcada com a sense bloqueig, això no afectarà el temps que triga a completar l'exploració de la biblioteca.", - "DeleteEntireSeries": "Esborrar {0} Episodis", + "DeleteEntireSeries": "Elimina {0} episodis", "DeleteSeries": "Esborrar Sèries", - "DeleteEpisode": "Esborrar Episodi", + "DeleteEpisode": "Elimina l'episodi", "PriorityIdle": "Parada", "LabelProcessPriority": "Prioritat de Processos", "LabelTrickplayThreadsHelp": "Nombre de fils a passar a l'argument de ffmpleg '-threads'.", @@ -1880,7 +1880,7 @@ "Illustrator": "Il·lustrador", "Translator": "Traductor", "PlaylistPublic": "Permetre accés públic", - "PlaylistPublicDescription": "Permetre que qualsevol usuari registrat vegi aquesta llista de reproducció.", + "PlaylistPublicDescription": "Permet que aquesta llista de reproducció sigui vista per qualsevol usuari registrat.", "HeaderLyricDownloads": "Descàrregues de lletres", "SaveLyricsIntoMediaFolders": "Desa la lletra a les carpetes multimèdia", "SaveLyricsIntoMediaFoldersHelp": "Emmagatzemar les lletres al costat dels fitxers d'àudio permetrà gestionar-les més fàcilment.", @@ -1916,7 +1916,7 @@ "MoveToBottom": "Moure al final", "MoveToTop": "Moure al principi", "EditLyrics": "Editar lletres", - "HeaderAddLyrics": "Afegir lletres", + "HeaderAddLyrics": "Afegeix lletres", "HeaderPreviewLyrics": "Previsualitzar lletres", "HeaderUploadLyrics": "Pujar lletres", "LabelIsSynced": "Està sincronitzat", @@ -1989,7 +1989,7 @@ "HeaderNextEpisode": "Pròxim Episodi", "HeaderNextVideo": "Pròxim Vídeo", "LabelMediaSegmentProviders": "Proveïdors de segments de continguts multimèdia", - "MediaSegmentProvidersHelp": "Activa i classifica els teus segments de mitjans preferits en ordre de prioritat.", + "MediaSegmentProvidersHelp": "Habiliteu i classifiqueu per ordre de prioritat els vostres proveïdors preferits de segments multimèdia.", "AutoSubtitleStylingHelp": "Aquest mode canviarà automàticament entre els mecanismes d'estils de subtítols natius i personalitzats, basant-se en el teu tipus de dispositiu.", "Custom": "Personalitzat", "CustomSubtitleStylingHelp": "L'estilització de subtítols funciona en la majoria dels dispositius, però suposa un cost addicional de rendiment.", @@ -2052,5 +2052,6 @@ "StorageType.Ram": "RAM", "StorageType.Removable": "Retirable", "StorageType.Unknown": "Desconegut", - "PluginsLoadError": "S'ha produït un error en carregar els complements." + "PluginsLoadError": "S'ha produït un error en carregar els complements.", + "ButtonLearnMore": "En voleu saber més?" } From ac0c6c2966668dd7597439592fdff055ac9b6aba Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Jun 2025 20:38:49 +0000 Subject: [PATCH 425/645] Update Vitest to v3.2.1 --- package-lock.json | 392 ++++++++++++++++++++++++++++++---------------- package.json | 4 +- 2 files changed, 259 insertions(+), 137 deletions(-) diff --git a/package-lock.json b/package-lock.json index b561f67eb..80de5bd42 100644 --- a/package-lock.json +++ b/package-lock.json @@ -87,7 +87,7 @@ "@types/sortablejs": "1.15.8", "@typescript-eslint/parser": "8.32.0", "@uupaa/dynamic-import-polyfill": "1.0.2", - "@vitest/coverage-v8": "3.1.3", + "@vitest/coverage-v8": "3.2.1", "autoprefixer": "10.4.21", "babel-loader": "10.0.0", "clean-webpack-plugin": "4.0.0", @@ -129,7 +129,7 @@ "ts-loader": "9.5.2", "typescript": "5.8.3", "typescript-eslint": "8.32.0", - "vitest": "3.1.3", + "vitest": "3.2.1", "webpack": "5.99.8", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "6.0.1", @@ -5931,6 +5931,16 @@ "@types/node": "*" } }, + "node_modules/@types/chai": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz", + "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*" + } + }, "node_modules/@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", @@ -5951,6 +5961,13 @@ "@types/node": "*" } }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/dompurify": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.5.tgz", @@ -6564,15 +6581,16 @@ "dev": true }, "node_modules/@vitest/coverage-v8": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.1.3.tgz", - "integrity": "sha512-cj76U5gXCl3g88KSnf80kof6+6w+K4BjOflCl7t6yRJPDuCrHtVu0SgNYOUARJOL5TI8RScDbm5x4s1/P9bvpw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.1.tgz", + "integrity": "sha512-6dy0uF/0BE3jpUW9bFzg0V2S4F7XVaZHL/7qma1XANvHPQGoJuc3wtx911zSoAgUnpfvcLVK1vancNJ95d+uxQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.3.0", "@bcoe/v8-coverage": "^1.0.2", - "debug": "^4.4.0", + "ast-v8-to-istanbul": "^0.3.3", + "debug": "^4.4.1", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-lib-source-maps": "^5.0.6", @@ -6587,8 +6605,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "3.1.3", - "vitest": "3.1.3" + "@vitest/browser": "3.2.1", + "vitest": "3.2.1" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -6597,14 +6615,15 @@ } }, "node_modules/@vitest/expect": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.1.3.tgz", - "integrity": "sha512-7FTQQuuLKmN1Ig/h+h/GO+44Q1IlglPlR2es4ab7Yvfx+Uk5xsv+Ykk+MEt/M2Yn/xGmzaLKxGw2lgy2bwuYqg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.1.tgz", + "integrity": "sha512-FqS/BnDOzV6+IpxrTg5GQRyLOCtcJqkwMwcS8qGCI2IyRVDwPAtutztaf1CjtPHlZlWtl1yUPCd7HM0cNiDOYw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "3.1.3", - "@vitest/utils": "3.1.3", + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.1", + "@vitest/utils": "3.2.1", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" }, @@ -6613,13 +6632,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.1.3.tgz", - "integrity": "sha512-PJbLjonJK82uCWHjzgBJZuR7zmAOrSvKk1QBxrennDIgtH4uK0TB1PvYmc0XBCigxxtiAVPfWtAdy4lpz8SQGQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.1.tgz", + "integrity": "sha512-OXxMJnx1lkB+Vl65Re5BrsZEHc90s5NMjD23ZQ9NlU7f7nZiETGoX4NeKZSmsKjseuMq2uOYXdLOeoM0pJU+qw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "3.1.3", + "@vitest/spy": "3.2.1", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, @@ -6628,7 +6647,7 @@ }, "peerDependencies": { "msw": "^2.4.9", - "vite": "^5.0.0 || ^6.0.0" + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "peerDependenciesMeta": { "msw": { @@ -6640,9 +6659,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.3.tgz", - "integrity": "sha512-i6FDiBeJUGLDKADw2Gb01UtUNb12yyXAqC/mmRWuYl+m/U9GS7s8us5ONmGkGpUUo7/iAYzI2ePVfOZTYvUifA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.1.tgz", + "integrity": "sha512-xBh1X2GPlOGBupp6E1RcUQWIxw0w/hRLd3XyBS6H+dMdKTAqHDNsIR2AnJwPA3yYe9DFy3VUKTe3VRTrAiQ01g==", "dev": true, "license": "MIT", "dependencies": { @@ -6653,13 +6672,13 @@ } }, "node_modules/@vitest/runner": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.1.3.tgz", - "integrity": "sha512-Tae+ogtlNfFei5DggOsSUvkIaSuVywujMj6HzR97AHK6XK8i3BuVyIifWAm/sE3a15lF5RH9yQIrbXYuo0IFyA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.1.tgz", + "integrity": "sha512-kygXhNTu/wkMYbwYpS3z/9tBe0O8qpdBuC3dD/AW9sWa0LE/DAZEjnHtWA9sIad7lpD4nFW1yQ+zN7mEKNH3yA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "3.1.3", + "@vitest/utils": "3.2.1", "pathe": "^2.0.3" }, "funding": { @@ -6667,13 +6686,13 @@ } }, "node_modules/@vitest/snapshot": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.1.3.tgz", - "integrity": "sha512-XVa5OPNTYUsyqG9skuUkFzAeFnEzDp8hQu7kZ0N25B1+6KjGm4hWLtURyBbsIAOekfWQ7Wuz/N/XXzgYO3deWQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.1.tgz", + "integrity": "sha512-5xko/ZpW2Yc65NVK9Gpfg2y4BFvcF+At7yRT5AHUpTg9JvZ4xZoyuRY4ASlmNcBZjMslV08VRLDrBOmUe2YX3g==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.1.3", + "@vitest/pretty-format": "3.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3" }, @@ -6682,26 +6701,26 @@ } }, "node_modules/@vitest/spy": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.1.3.tgz", - "integrity": "sha512-x6w+ctOEmEXdWaa6TO4ilb7l9DxPR5bwEb6hILKuxfU1NqWT2mpJD9NJN7t3OTfxmVlOMrvtoFJGdgyzZ605lQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.1.tgz", + "integrity": "sha512-Nbfib34Z2rfcJGSetMxjDCznn4pCYPZOtQYox2kzebIJcgH75yheIKd5QYSFmR8DIZf2M8fwOm66qSDIfRFFfQ==", "dev": true, "license": "MIT", "dependencies": { - "tinyspy": "^3.0.2" + "tinyspy": "^4.0.3" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/utils": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.3.tgz", - "integrity": "sha512-2Ltrpht4OmHO9+c/nmHtF09HWiyWdworqnHIwjfvDyWjuwKbdkcS9AnhsDn+8E2RM4x++foD1/tNuLPVvWG1Rg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.1.tgz", + "integrity": "sha512-KkHlGhePEKZSub5ViknBcN5KEF+u7dSUr9NW8QsVICusUojrgrOnnY3DEWWO877ax2Pyopuk2qHmt+gkNKnBVw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.1.3", + "@vitest/pretty-format": "3.2.1", "loupe": "^3.1.3", "tinyrainbow": "^2.0.0" }, @@ -7421,6 +7440,25 @@ "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true }, + "node_modules/ast-v8-to-istanbul": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.3.tgz", + "integrity": "sha512-MuXMrSLVVoA6sYN/6Hke18vMzrT4TZNbZIj/hvh0fnYFpO+/kFXcLIaiPwXXWaQUPg4yJD8fj+lfJ7/1EBconw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "estree-walker": "^3.0.3", + "js-tokens": "^9.0.1" + } + }, + "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -9577,9 +9615,9 @@ "dev": true }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -23479,9 +23517,9 @@ "dev": true }, "node_modules/tinyglobby": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", - "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -23524,10 +23562,11 @@ } }, "node_modules/tinypool": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", - "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.0.tgz", + "integrity": "sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==", "dev": true, + "license": "MIT", "engines": { "node": "^18.0.0 || >=20.0.0" } @@ -23542,9 +23581,9 @@ } }, "node_modules/tinyspy": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", - "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.3.tgz", + "integrity": "sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==", "dev": true, "license": "MIT", "engines": { @@ -24502,17 +24541,17 @@ } }, "node_modules/vite-node": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.1.3.tgz", - "integrity": "sha512-uHV4plJ2IxCl4u1up1FQRrqclylKAogbtBfOTwcuJ28xFi+89PZ57BRh+naIRvH70HPwxy5QHYzg1OrEaC7AbA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.1.tgz", + "integrity": "sha512-V4EyKQPxquurNJPtQJRZo8hKOoKNBRIhxcDbQFPFig0JdoWcUhwRgK8yoCXXrfYVPKS6XwirGHPszLnR8FbjCA==", "dev": true, "license": "MIT", "dependencies": { "cac": "^6.7.14", - "debug": "^4.4.0", + "debug": "^4.4.1", "es-module-lexer": "^1.7.0", "pathe": "^2.0.3", - "vite": "^5.0.0 || ^6.0.0" + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" @@ -24553,32 +24592,34 @@ } }, "node_modules/vitest": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.1.3.tgz", - "integrity": "sha512-188iM4hAHQ0km23TN/adso1q5hhwKqUpv+Sd6p5sOuh6FhQnRNW3IsiIpvxqahtBabsJ2SLZgmGSpcYK4wQYJw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.1.tgz", + "integrity": "sha512-VZ40MBnlE1/V5uTgdqY3DmjUgZtIzsYq758JGlyQrv5syIsaYcabkfPkEuWML49Ph0D/SoqpVFd0dyVTr551oA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "3.1.3", - "@vitest/mocker": "3.1.3", - "@vitest/pretty-format": "^3.1.3", - "@vitest/runner": "3.1.3", - "@vitest/snapshot": "3.1.3", - "@vitest/spy": "3.1.3", - "@vitest/utils": "3.1.3", + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.1", + "@vitest/mocker": "3.2.1", + "@vitest/pretty-format": "^3.2.1", + "@vitest/runner": "3.2.1", + "@vitest/snapshot": "3.2.1", + "@vitest/spy": "3.2.1", + "@vitest/utils": "3.2.1", "chai": "^5.2.0", - "debug": "^4.4.0", + "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", + "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", - "tinyglobby": "^0.2.13", - "tinypool": "^1.0.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.0", "tinyrainbow": "^2.0.0", - "vite": "^5.0.0 || ^6.0.0", - "vite-node": "3.1.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.1", "why-is-node-running": "^2.3.0" }, "bin": { @@ -24594,8 +24635,8 @@ "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.1.3", - "@vitest/ui": "3.1.3", + "@vitest/browser": "3.2.1", + "@vitest/ui": "3.2.1", "happy-dom": "*", "jsdom": "*" }, @@ -24623,6 +24664,32 @@ } } }, + "node_modules/vitest/node_modules/@vitest/pretty-format": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.3.tgz", + "integrity": "sha512-yFglXGkr9hW/yEXngO+IKMhP0jxyFw2/qys/CK4fFUZnSltD+MU7dVYGrH8rvPcK/O6feXQA+EU33gjaBBbAng==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/w3c-xmlserializer": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", @@ -28777,6 +28844,15 @@ "@types/node": "*" } }, + "@types/chai": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz", + "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==", + "dev": true, + "requires": { + "@types/deep-eql": "*" + } + }, "@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", @@ -28796,6 +28872,12 @@ "@types/node": "*" } }, + "@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true + }, "@types/dompurify": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.5.tgz", @@ -29277,14 +29359,15 @@ "dev": true }, "@vitest/coverage-v8": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.1.3.tgz", - "integrity": "sha512-cj76U5gXCl3g88KSnf80kof6+6w+K4BjOflCl7t6yRJPDuCrHtVu0SgNYOUARJOL5TI8RScDbm5x4s1/P9bvpw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.1.tgz", + "integrity": "sha512-6dy0uF/0BE3jpUW9bFzg0V2S4F7XVaZHL/7qma1XANvHPQGoJuc3wtx911zSoAgUnpfvcLVK1vancNJ95d+uxQ==", "dev": true, "requires": { "@ampproject/remapping": "^2.3.0", "@bcoe/v8-coverage": "^1.0.2", - "debug": "^4.4.0", + "ast-v8-to-istanbul": "^0.3.3", + "debug": "^4.4.1", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-lib-source-maps": "^5.0.6", @@ -29297,74 +29380,75 @@ } }, "@vitest/expect": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.1.3.tgz", - "integrity": "sha512-7FTQQuuLKmN1Ig/h+h/GO+44Q1IlglPlR2es4ab7Yvfx+Uk5xsv+Ykk+MEt/M2Yn/xGmzaLKxGw2lgy2bwuYqg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.1.tgz", + "integrity": "sha512-FqS/BnDOzV6+IpxrTg5GQRyLOCtcJqkwMwcS8qGCI2IyRVDwPAtutztaf1CjtPHlZlWtl1yUPCd7HM0cNiDOYw==", "dev": true, "requires": { - "@vitest/spy": "3.1.3", - "@vitest/utils": "3.1.3", + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.1", + "@vitest/utils": "3.2.1", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "@vitest/mocker": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.1.3.tgz", - "integrity": "sha512-PJbLjonJK82uCWHjzgBJZuR7zmAOrSvKk1QBxrennDIgtH4uK0TB1PvYmc0XBCigxxtiAVPfWtAdy4lpz8SQGQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.1.tgz", + "integrity": "sha512-OXxMJnx1lkB+Vl65Re5BrsZEHc90s5NMjD23ZQ9NlU7f7nZiETGoX4NeKZSmsKjseuMq2uOYXdLOeoM0pJU+qw==", "dev": true, "requires": { - "@vitest/spy": "3.1.3", + "@vitest/spy": "3.2.1", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" } }, "@vitest/pretty-format": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.3.tgz", - "integrity": "sha512-i6FDiBeJUGLDKADw2Gb01UtUNb12yyXAqC/mmRWuYl+m/U9GS7s8us5ONmGkGpUUo7/iAYzI2ePVfOZTYvUifA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.1.tgz", + "integrity": "sha512-xBh1X2GPlOGBupp6E1RcUQWIxw0w/hRLd3XyBS6H+dMdKTAqHDNsIR2AnJwPA3yYe9DFy3VUKTe3VRTrAiQ01g==", "dev": true, "requires": { "tinyrainbow": "^2.0.0" } }, "@vitest/runner": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.1.3.tgz", - "integrity": "sha512-Tae+ogtlNfFei5DggOsSUvkIaSuVywujMj6HzR97AHK6XK8i3BuVyIifWAm/sE3a15lF5RH9yQIrbXYuo0IFyA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.1.tgz", + "integrity": "sha512-kygXhNTu/wkMYbwYpS3z/9tBe0O8qpdBuC3dD/AW9sWa0LE/DAZEjnHtWA9sIad7lpD4nFW1yQ+zN7mEKNH3yA==", "dev": true, "requires": { - "@vitest/utils": "3.1.3", + "@vitest/utils": "3.2.1", "pathe": "^2.0.3" } }, "@vitest/snapshot": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.1.3.tgz", - "integrity": "sha512-XVa5OPNTYUsyqG9skuUkFzAeFnEzDp8hQu7kZ0N25B1+6KjGm4hWLtURyBbsIAOekfWQ7Wuz/N/XXzgYO3deWQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.1.tgz", + "integrity": "sha512-5xko/ZpW2Yc65NVK9Gpfg2y4BFvcF+At7yRT5AHUpTg9JvZ4xZoyuRY4ASlmNcBZjMslV08VRLDrBOmUe2YX3g==", "dev": true, "requires": { - "@vitest/pretty-format": "3.1.3", + "@vitest/pretty-format": "3.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "@vitest/spy": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.1.3.tgz", - "integrity": "sha512-x6w+ctOEmEXdWaa6TO4ilb7l9DxPR5bwEb6hILKuxfU1NqWT2mpJD9NJN7t3OTfxmVlOMrvtoFJGdgyzZ605lQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.1.tgz", + "integrity": "sha512-Nbfib34Z2rfcJGSetMxjDCznn4pCYPZOtQYox2kzebIJcgH75yheIKd5QYSFmR8DIZf2M8fwOm66qSDIfRFFfQ==", "dev": true, "requires": { - "tinyspy": "^3.0.2" + "tinyspy": "^4.0.3" } }, "@vitest/utils": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.3.tgz", - "integrity": "sha512-2Ltrpht4OmHO9+c/nmHtF09HWiyWdworqnHIwjfvDyWjuwKbdkcS9AnhsDn+8E2RM4x++foD1/tNuLPVvWG1Rg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.1.tgz", + "integrity": "sha512-KkHlGhePEKZSub5ViknBcN5KEF+u7dSUr9NW8QsVICusUojrgrOnnY3DEWWO877ax2Pyopuk2qHmt+gkNKnBVw==", "dev": true, "requires": { - "@vitest/pretty-format": "3.1.3", + "@vitest/pretty-format": "3.2.1", "loupe": "^3.1.3", "tinyrainbow": "^2.0.0" } @@ -29889,6 +29973,25 @@ "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true }, + "ast-v8-to-istanbul": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.3.tgz", + "integrity": "sha512-MuXMrSLVVoA6sYN/6Hke18vMzrT4TZNbZIj/hvh0fnYFpO+/kFXcLIaiPwXXWaQUPg4yJD8fj+lfJ7/1EBconw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.25", + "estree-walker": "^3.0.3", + "js-tokens": "^9.0.1" + }, + "dependencies": { + "js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true + } + } + }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -31360,9 +31463,9 @@ "dev": true }, "debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "requires": { "ms": "^2.1.3" } @@ -41044,9 +41147,9 @@ "dev": true }, "tinyglobby": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", - "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", "dev": true, "requires": { "fdir": "^6.4.4", @@ -41069,9 +41172,9 @@ } }, "tinypool": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", - "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.0.tgz", + "integrity": "sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==", "dev": true }, "tinyrainbow": { @@ -41081,9 +41184,9 @@ "dev": true }, "tinyspy": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", - "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.3.tgz", + "integrity": "sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==", "dev": true }, "tldts": { @@ -41732,45 +41835,64 @@ } }, "vite-node": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.1.3.tgz", - "integrity": "sha512-uHV4plJ2IxCl4u1up1FQRrqclylKAogbtBfOTwcuJ28xFi+89PZ57BRh+naIRvH70HPwxy5QHYzg1OrEaC7AbA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.1.tgz", + "integrity": "sha512-V4EyKQPxquurNJPtQJRZo8hKOoKNBRIhxcDbQFPFig0JdoWcUhwRgK8yoCXXrfYVPKS6XwirGHPszLnR8FbjCA==", "dev": true, "requires": { "cac": "^6.7.14", - "debug": "^4.4.0", + "debug": "^4.4.1", "es-module-lexer": "^1.7.0", "pathe": "^2.0.3", - "vite": "^5.0.0 || ^6.0.0" + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" } }, "vitest": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.1.3.tgz", - "integrity": "sha512-188iM4hAHQ0km23TN/adso1q5hhwKqUpv+Sd6p5sOuh6FhQnRNW3IsiIpvxqahtBabsJ2SLZgmGSpcYK4wQYJw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.1.tgz", + "integrity": "sha512-VZ40MBnlE1/V5uTgdqY3DmjUgZtIzsYq758JGlyQrv5syIsaYcabkfPkEuWML49Ph0D/SoqpVFd0dyVTr551oA==", "dev": true, "requires": { - "@vitest/expect": "3.1.3", - "@vitest/mocker": "3.1.3", - "@vitest/pretty-format": "^3.1.3", - "@vitest/runner": "3.1.3", - "@vitest/snapshot": "3.1.3", - "@vitest/spy": "3.1.3", - "@vitest/utils": "3.1.3", + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.1", + "@vitest/mocker": "3.2.1", + "@vitest/pretty-format": "^3.2.1", + "@vitest/runner": "3.2.1", + "@vitest/snapshot": "3.2.1", + "@vitest/spy": "3.2.1", + "@vitest/utils": "3.2.1", "chai": "^5.2.0", - "debug": "^4.4.0", + "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", + "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", - "tinyglobby": "^0.2.13", - "tinypool": "^1.0.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.0", "tinyrainbow": "^2.0.0", - "vite": "^5.0.0 || ^6.0.0", - "vite-node": "3.1.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.1", "why-is-node-running": "^2.3.0" + }, + "dependencies": { + "@vitest/pretty-format": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.3.tgz", + "integrity": "sha512-yFglXGkr9hW/yEXngO+IKMhP0jxyFw2/qys/CK4fFUZnSltD+MU7dVYGrH8rvPcK/O6feXQA+EU33gjaBBbAng==", + "dev": true, + "requires": { + "tinyrainbow": "^2.0.0" + } + }, + "picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true + } } }, "w3c-xmlserializer": { diff --git a/package.json b/package.json index 0288e7670..491322a24 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "@types/sortablejs": "1.15.8", "@typescript-eslint/parser": "8.32.0", "@uupaa/dynamic-import-polyfill": "1.0.2", - "@vitest/coverage-v8": "3.1.3", + "@vitest/coverage-v8": "3.2.1", "autoprefixer": "10.4.21", "babel-loader": "10.0.0", "clean-webpack-plugin": "4.0.0", @@ -66,7 +66,7 @@ "ts-loader": "9.5.2", "typescript": "5.8.3", "typescript-eslint": "8.32.0", - "vitest": "3.1.3", + "vitest": "3.2.1", "webpack": "5.99.8", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "6.0.1", From f99f1b1d6ebfa1ea993415af7a31e47a769eb6fe Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Tue, 10 Jun 2025 16:03:50 -0400 Subject: [PATCH 426/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 0b8809262..41bc3d044 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -1,9 +1,9 @@ { "AccessRestrictedTryAgainLater": "L'accés està restringit actualment. Intenteu-ho més tard.", "Add": "Afegeix", - "AddToCollection": "Afegeix a una col·lecció", + "AddToCollection": "Agrega a una col·lecció", "AddToPlayQueue": "Afegeix a la cua de reproducció", - "AddToPlaylist": "Afegeix a una llista de reproducció", + "AddToPlaylist": "Agrega a una llista de reproducció", "All": "Tot", "AllChannels": "Tots els canals", "AllEpisodes": "Tots els episodis", @@ -601,7 +601,7 @@ "ButtonStart": "Començar", "ButtonSelectView": "Seleccionar la vista", "ButtonScanAllLibraries": "Escanejar totes les biblioteques", - "ButtonRevoke": "Revocar", + "ButtonRevoke": "Revoca", "ButtonRename": "Canviar el nom", "ButtonNetwork": "Xarxa", "ButtonInfo": "Informació", @@ -782,7 +782,7 @@ "HeaderDebugging": "Depuració i traceig", "HeaderContinueReading": "Continueu llegint", "HeaderConnectionFailure": "Error de connexió", - "HeaderConfirmRevokeApiKey": "Revocar la clau API", + "HeaderConfirmRevokeApiKey": "Revoca la clau API", "HeaderConfirmPluginInstallation": "Confirmeu la instal·lació del complement", "HeaderConfigureRemoteAccess": "Configurar l'accés remot", "HeaderCodecProfileHelp": "Els perfils dels còdecs indiquen les limitacions d’un dispositiu quan es reprodueixen codecs específics. Si s'aplica una limitació, els mitjans es transcodificaran fins i tot si el còdec està configurat per a la reproducció directa.", @@ -795,7 +795,7 @@ "HeaderApp": "Aplicació", "HeaderAllowMediaDeletionFrom": "Permet l'eliminació de continguts multimèdia de", "HeaderAlert": "Alerta", - "HeaderAddUser": "Afegir un usuari", + "HeaderAddUser": "Afegeix un usuari", "HeaderAddUpdateSubtitle": "Afegeix o actualitza els subtítols", "H264CrfHelp": "El factor de velocitat constant (CRF) és el valor de qualitat predeterminat per als codificadors de programari x264 i x265. Podeu definir els valors entre 0 i 51, on els valors més baixos donarien com a resultat una millor qualitat (a costa de mides de fitxer més altes). Els valors correctes oscil·len entre 18 i 28. El valor predeterminat per a x264 és 23 i per a x265 és 28, de manera que podeu utilitzar-lo com a punt de partida. Els codificadors per maquinari no utilitzen aquesta configuració.", "GuideProviderSelectListings": "Seleccionar Llistats", @@ -1031,7 +1031,7 @@ "MessageDeleteTaskTrigger": "Esteu segur que voleu eliminar aquest disparador tasca?", "MessageCreateAccountAt": "Crear un compte a {0}", "MessageConfirmShutdown": "Esteu segur que voleu tancar el servidor?", - "MessageConfirmRevokeApiKey": "Esteu segur que voleu revocar aquesta clau d'API? connexió de l'aplicació d'aquest servidor es va acabar abruptament.", + "MessageConfirmRevokeApiKey": "N'esteu segur de voler revocar aquesta clau d'API? La connexió de l'aplicació d'aquest servidor s'interromprà abruptament.", "MessageConfirmRemoveMediaLocation": "Esteu segur que voleu suprimir aquesta ubicació?", "MessageConfirmDeleteTunerDevice": "Està segur que desitja eliminar aquest dispositiu?", "MessageConfirmDeleteGuideProvider": "Esteu segur que voleu eliminar aquest proveïdor de guia?", @@ -1039,7 +1039,7 @@ "MessageChangeRecordingPath": "Canviar la seva carpeta d'enregistrament no migrarà enregistraments existents des de la ubicació anterior a la nova. Haurà de moure manualment si es desitja.", "MessageAreYouSureYouWishToRemoveMediaFolder": "N'esteu segur que desitgeu eliminar aquest directori multimèdia?", "MessageAlreadyInstalled": "Aquesta versió ja està instal·lada.", - "MessageAddRepository": "Si voleu afegir un repositori, feu clic al botó situat al costat de la capçalera i completi la informació sol·licitada.", + "MessageAddRepository": "Si voleu afegir un repositori, feu clic al botó situat al costat de la capçalera i completeu la informació sol·licitada.", "Menu": "Menú", "MediaIsBeingConverted": "El contingut multimèdia està sent convertit a un format compatible amb el dispositiu que l'està reproduint.", "MediaInfoVideoRange": "Rang de vídeo", @@ -1159,7 +1159,7 @@ "LabelGroupMoviesIntoCollectionsHelp": "Pel·lícules en una col·lecció seran agrupades com una sola llista en mostrar les llistes de pel·lícules.", "LabelffmpegPathHelp": "La ruta d'accés a l'arxiu d'aplicació o carpeta que conté FFmpeg.", "LabelEnableSSDPTracingHelp": "Permetin als detalls de la xarxa SSDP rastreig que s'ha de registrar.
ADVERTÈNCIA:. Això farà que seria degradació del rendiment.", - "LabelBaseUrlHelp": "Afegir un subdirectori personalitzat a l'adreça URL de servidor. Per exemple: http://example.com/<baseurl>", + "LabelBaseUrlHelp": "Afegiu un subdirectori personalitzat a l'adreça URL de servidor. Per exemple: http://example.com/<baseurl>", "LabelSlowResponseTime": "Temps en ms després de la qual cosa es considera una resposta lenta", "LabelSlowResponseEnabled": "Registrar un avis si la resposta del servidor es lenta", "LabelSkipIfGraphicalSubsPresentHelp": "Mantenir versions de text de subtítols donarà lloc a un lliurament més eficient i disminuir la probabilitat de transcodificació de vídeo.", @@ -1216,8 +1216,8 @@ "LabelMoviePrefix": "Prefix de la pel·lícula", "LabelMovieCategories": "Categories Pel·lícula", "LabelModelUrl": "Model URL", - "LabelMinAudiobookResumeHelp": "Els títols s'assumeixen sense jugar si voleu parar abans d'aquest temps.", - "LabelMinAudiobookResume": "Llibre àudio mínim reprendre en minuts", + "LabelMinAudiobookResumeHelp": "Es considera que els títols no s'han començat si la reproducció s'atura abans d'aquest temps.", + "LabelMinAudiobookResume": "Represa mínima de l'audiollibre en minuts", "LabelMetadataSaversHelp": "Triar els formats d'arxiu a utilitzar al desar les metadades.", "LabelMetadataSavers": "Protectors de metadades", "LabelMetadataReadersHelp": "Classificar les fonts de metadades locals preferides per ordre de prioritat. serà llegit el primer arxiu trobat.", @@ -1227,8 +1227,8 @@ "LabelMaxMuxingQueueSizeHelp": "Nombre màxim de paquets que poden estar en buffer a l'espera que els fluxos s'inicialitzin. Intenteu incrementar-lo si teniu l'error \"Too many packets buffered for output stream\" als registres de FFmpeg. El valor recomanat és 2048.", "LabelMaxMuxingQueueSize": "Max Muxing mida de la cua", "LabelMaxChromecastBitrate": "Google Cast qualitat de streaming", - "LabelMaxAudiobookResumeHelp": "Els títols se suposa reproduir completament si s'atura quan la durada restant és inferior a aquest valor.", - "LabelMaxAudiobookResume": "Audiollibre minuts que queden per reprendre", + "LabelMaxAudiobookResumeHelp": "S'assumeix que els títols s'han vist fins al final si en aturar-se queda pendent una duració menor a aquesta.", + "LabelMaxAudiobookResume": "Minuts que resten per a reiniciar l'audiollibre", "LabelMatchType": "Tipus de partida", "LabelLoginDisclaimer": "Advertiment d'inici de sessió", "LabelLocalHttpServerPortNumberHelp": "El número de port TCP per al servidor HTTP.", @@ -1480,7 +1480,7 @@ "OptionAllowVideoPlaybackRemuxing": "Permet la reproducció de vídeo que requereix una conversió sense recodificació", "OptionAllowSyncTranscoding": "Permet la conversió del contingut multimèdia quan es descarregui i sincronitzi", "OptionAllowMediaPlaybackTranscodingHelp": "La restricció de l'accés a la transcodificació pot provocar errors de reproducció en els clients a causa dels formats multimèdia incompatibles.", - "OptionAllowContentDownloadHelp": "Els usuaris poden descarregar el contingut multimèdia i emmagatzemar als seus dispositius. Això no és el mateix que una funció de sincronització. Les biblioteques de llibres ho requereixen per funcionar.", + "OptionAllowContentDownloadHelp": "Els usuaris poden descarregar el contingut multimèdia i emmagatzemar-lo als seus dispositius. Això no és el mateix que una funció de sincronització. Les biblioteques de llibres ho requereixen per funcionar.", "OptionAllowContentDownload": "Permet la descàrrega del contingut multimèdia", "OptionAllowAudioPlaybackTranscoding": "Permet la reproducció d'àudio que requereix la transcodificació", "Option3D": "3D", @@ -1578,7 +1578,7 @@ "LabelSyncPlaySettingsExtraTimeOffset": "Temps afegit de decalatge", "LabelSortName": "Ordenar per nom", "LabelAutomaticallyAddToCollectionHelp": "Quan, com a mínim dues pel·lícules, tenen el mateix nom de col·lecció, seran afegides a la col·lecció.", - "LabelAutomaticallyAddToCollection": "Afegir a la col·lecció automàticament", + "LabelAutomaticallyAddToCollection": "Afegeix automàticament a la col·lecció", "Cursive": "Cursiva", "Console": "Terminal", "ThemeVideo": "Vídeo temàtic", @@ -1866,7 +1866,7 @@ "ViewLyrics": "Veure lletres", "SavePassword": "Desar contrasenya", "EnableDts": "Habilitar DTS (DCA)", - "PlaylistError.AddFailed": "S'ha produït un error en afegir a la llista de reproducció", + "PlaylistError.AddFailed": "S'ha produït un error en agregar a la llista de reproducció", "PlaylistError.CreateFailed": "S'ha produït un error en crear la llista de reproducció", "HeaderVideoAdvanced": "Vídeo Avançat", "Author": "Autor", @@ -2007,7 +2007,7 @@ "SettingsPageLoadError": "No s'ha pogut carregar la pàgina de configuracions", "DisplayLoadError": "S'ha produït un error en carregar les dades de configuració de la pantalla.", "HeaderPageNotFound": "Pàgina no trobada", - "PageNotFound": "Aquesta no és la pàgina que estàs buscant.", + "PageNotFound": "Aquesta no és la pàgina que esteu cercant.", "MetadataImagesLoadError": "No s'han pogut carregar les configuracions de metadades", "StreamCountExceedsLimit": "El número de flux excedeix el límit", "RetryWithGlobalSearch": "Reintentar amb una cerca global", From 4dfd602194695ce2d36d8c77f1ed8afe1fc5eb3e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Jun 2025 21:52:15 +0000 Subject: [PATCH 427/645] Update dependency @jellyfin/sdk to v0.0.0-unstable.202506100501 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index b561f67eb..d670542dc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202505280501", + "@jellyfin/sdk": "0.0.0-unstable.202506100501", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.11", "@mui/material": "6.4.11", @@ -4096,9 +4096,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202505280501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202505280501.tgz", - "integrity": "sha512-RGzd4M6z1Ud9rY1CxSwRIi7q3c1dcyGjPCYTvA9w8RAHQh3MPo1ulI1V50NW8fCiEGb1S84HfdbB5EDPTEZSOA==", + "version": "0.0.0-unstable.202506100501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506100501.tgz", + "integrity": "sha512-Cwz6ZB3FBWXD7f9y+OQ/K2bUzvkT2yweRWgnA2DZenlhcChSTcHkH+9SigSCe0ely4FtYxp4czPdFFQnoXJE0g==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -27780,9 +27780,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202505280501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202505280501.tgz", - "integrity": "sha512-RGzd4M6z1Ud9rY1CxSwRIi7q3c1dcyGjPCYTvA9w8RAHQh3MPo1ulI1V50NW8fCiEGb1S84HfdbB5EDPTEZSOA==", + "version": "0.0.0-unstable.202506100501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506100501.tgz", + "integrity": "sha512-Cwz6ZB3FBWXD7f9y+OQ/K2bUzvkT2yweRWgnA2DZenlhcChSTcHkH+9SigSCe0ely4FtYxp4czPdFFQnoXJE0g==", "requires": {} }, "@jellyfin/ux-web": { diff --git a/package.json b/package.json index 0288e7670..9097f80be 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202505280501", + "@jellyfin/sdk": "0.0.0-unstable.202506100501", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.11", "@mui/material": "6.4.11", From 6630592afc09a902187b1f49d6d9d121f6dccf07 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Jun 2025 21:52:28 +0000 Subject: [PATCH 428/645] Update dependency hls.js to v1.6.5 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index b561f67eb..507f51814 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,7 +40,7 @@ "flv.js": "1.6.2", "headroom.js": "0.12.0", "history": "5.3.0", - "hls.js": "1.6.2", + "hls.js": "1.6.5", "intersection-observer": "0.12.2", "jellyfin-apiclient": "1.11.0", "jquery": "3.7.1", @@ -13010,9 +13010,9 @@ } }, "node_modules/hls.js": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.2.tgz", - "integrity": "sha512-rx+pETSCJEDThm/JCm8CuadcAC410cVjb1XVXFNDKFuylaayHk1+tFxhkjvnMDAfqsJHxZXDAJ3Uc2d5xQyWlQ==", + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.5.tgz", + "integrity": "sha512-KMn5n7JBK+olC342740hDPHnGWfE8FiHtGMOdJPfUjRdARTWj9OB+8c13fnsf9sk1VtpuU2fKSgUjHvg4rNbzQ==", "license": "Apache-2.0" }, "node_modules/hoist-non-react-statics": { @@ -33843,9 +33843,9 @@ } }, "hls.js": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.2.tgz", - "integrity": "sha512-rx+pETSCJEDThm/JCm8CuadcAC410cVjb1XVXFNDKFuylaayHk1+tFxhkjvnMDAfqsJHxZXDAJ3Uc2d5xQyWlQ==" + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.5.tgz", + "integrity": "sha512-KMn5n7JBK+olC342740hDPHnGWfE8FiHtGMOdJPfUjRdARTWj9OB+8c13fnsf9sk1VtpuU2fKSgUjHvg4rNbzQ==" }, "hoist-non-react-statics": { "version": "3.3.2", diff --git a/package.json b/package.json index 0288e7670..7677bf7af 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "flv.js": "1.6.2", "headroom.js": "0.12.0", "history": "5.3.0", - "hls.js": "1.6.2", + "hls.js": "1.6.5", "intersection-observer": "0.12.2", "jellyfin-apiclient": "1.11.0", "jquery": "3.7.1", From 400c40141e65b4d0bf651f5e159fdee88004bdef Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Jun 2025 21:52:35 +0000 Subject: [PATCH 429/645] Update github/codeql-action action to v3.28.19 --- .github/workflows/__codeql.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/__codeql.yml b/.github/workflows/__codeql.yml index 17af6d679..9feb49c22 100644 --- a/.github/workflows/__codeql.yml +++ b/.github/workflows/__codeql.yml @@ -26,15 +26,15 @@ jobs: show-progress: false - name: Initialize CodeQL 🛠️ - uses: github/codeql-action/init@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18 + uses: github/codeql-action/init@fca7ace96b7d713c7035871441bd52efbe39e27e # v3.28.19 with: queries: security-and-quality languages: ${{ matrix.language }} - name: Autobuild 📦 - uses: github/codeql-action/autobuild@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18 + uses: github/codeql-action/autobuild@fca7ace96b7d713c7035871441bd52efbe39e27e # v3.28.19 - name: Perform CodeQL Analysis 🧪 - uses: github/codeql-action/analyze@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18 + uses: github/codeql-action/analyze@fca7ace96b7d713c7035871441bd52efbe39e27e # v3.28.19 with: category: '/language:${{matrix.language}}' From 1a30612a87d117ada588399de3a5fee0d3b12967 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Jun 2025 21:52:48 +0000 Subject: [PATCH 430/645] Update material-ui monorepo --- package-lock.json | 78 +++++++++++++++++++++++------------------------ package.json | 6 ++-- 2 files changed, 42 insertions(+), 42 deletions(-) diff --git a/package-lock.json b/package-lock.json index b561f67eb..ef418b99c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,9 +20,9 @@ "@jellyfin/libass-wasm": "4.2.3", "@jellyfin/sdk": "0.0.0-unstable.202505280501", "@jellyfin/ux-web": "1.0.0", - "@mui/icons-material": "6.4.11", - "@mui/material": "6.4.11", - "@mui/x-date-pickers": "7.29.3", + "@mui/icons-material": "6.4.12", + "@mui/material": "6.4.12", + "@mui/x-date-pickers": "7.29.4", "@react-hook/resize-observer": "2.0.2", "@tanstack/react-query": "5.75.6", "@tanstack/react-query-devtools": "5.75.6", @@ -4669,9 +4669,9 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "6.4.11", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.11.tgz", - "integrity": "sha512-CzAQs9CTzlwbsF9ZYB4o4lLwBv1/qNE264NjuYao+ctAXsmlPtYa8RtER4UsUXSMxNN9Qi+aQdYcKl2sUpnmAw==", + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.12.tgz", + "integrity": "sha512-M7IkG4LqSJfkY+thlQQHNkcS5NdmMDwLq/2RKoW40XR0mv/2BYb6X8fRnyaxP4zGdPD2M4MQdbzKihSVormJ7Q==", "license": "MIT", "funding": { "type": "opencollective", @@ -4679,9 +4679,9 @@ } }, "node_modules/@mui/icons-material": { - "version": "6.4.11", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.4.11.tgz", - "integrity": "sha512-+jjJGIrB1awNbMv4ZVPPdN/p7O1UKFZ+xqRvNIQ8B1KnlID5hPMPBLM6UUbRF4bu3UDCbu79rn9Nye5LGNzmeA==", + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.4.12.tgz", + "integrity": "sha512-ILTe3A2te0+Vb9TG4P1AZVmZFOjDDCV/b2nBmV1rNOmSu3Q/xkHghW+yMhMffwHcXklMlcajMlc4iFSkPbrTKw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0" @@ -4694,7 +4694,7 @@ "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@mui/material": "^6.4.11", + "@mui/material": "^6.4.12", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, @@ -4705,14 +4705,14 @@ } }, "node_modules/@mui/material": { - "version": "6.4.11", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.4.11.tgz", - "integrity": "sha512-k2D3FLJS+/qD0qnd6ZlAjGFvaaxe1Dl10NyvpeDzIebMuYdn8VqYe6XBgGueEAtnzSJM4V03VD9kb5Fi24dnTA==", + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.4.12.tgz", + "integrity": "sha512-VqoLNS5UaNqoS1FybezZR/PaAvzbTmRe0Mx//afXbolIah43eozpX2FckaFffLvMoiSIyxx1+AMHyENTr2Es0Q==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", - "@mui/core-downloads-tracker": "^6.4.11", - "@mui/system": "^6.4.11", + "@mui/core-downloads-tracker": "^6.4.12", + "@mui/system": "^6.4.12", "@mui/types": "~7.2.24", "@mui/utils": "^6.4.9", "@popperjs/core": "^2.11.8", @@ -4733,7 +4733,7 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@mui/material-pigment-css": "^6.4.11", + "@mui/material-pigment-css": "^6.4.12", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" @@ -4821,9 +4821,9 @@ } }, "node_modules/@mui/system": { - "version": "6.4.11", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.4.11.tgz", - "integrity": "sha512-gibtsrZEwnDaT5+I/KloOj/yHluX5G8heknuxBpQOdEQ3Gc0avjSImn5hSeKp8D4thiwZiApuggIjZw1dQguUA==", + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.4.12.tgz", + "integrity": "sha512-fgEfm1qxpKCztndESeL1L0sLwA2c7josZ2w42D8OM3pbLee4bH2twEjoMo6qf7z2rNw1Uc9EU9haXeMoq0oTdQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", @@ -4911,9 +4911,9 @@ "license": "MIT" }, "node_modules/@mui/x-date-pickers": { - "version": "7.29.3", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.29.3.tgz", - "integrity": "sha512-/A0/8fpLnEFeJKr5YQsI8jqlWPJlOtgfCGcqXHVDOLxgV3lW49+Kh5TZAc1yi6HKT3AG6k4DkNwTuu/RjJeMFA==", + "version": "7.29.4", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.29.4.tgz", + "integrity": "sha512-wJ3tsqk/y6dp+mXGtT9czciAMEO5Zr3IIAHg9x6IL0Eqanqy0N3chbmQQZv3iq0m2qUpQDLvZ4utZBUTJdjNzw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.7", @@ -28176,26 +28176,26 @@ } }, "@mui/core-downloads-tracker": { - "version": "6.4.11", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.11.tgz", - "integrity": "sha512-CzAQs9CTzlwbsF9ZYB4o4lLwBv1/qNE264NjuYao+ctAXsmlPtYa8RtER4UsUXSMxNN9Qi+aQdYcKl2sUpnmAw==" + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.12.tgz", + "integrity": "sha512-M7IkG4LqSJfkY+thlQQHNkcS5NdmMDwLq/2RKoW40XR0mv/2BYb6X8fRnyaxP4zGdPD2M4MQdbzKihSVormJ7Q==" }, "@mui/icons-material": { - "version": "6.4.11", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.4.11.tgz", - "integrity": "sha512-+jjJGIrB1awNbMv4ZVPPdN/p7O1UKFZ+xqRvNIQ8B1KnlID5hPMPBLM6UUbRF4bu3UDCbu79rn9Nye5LGNzmeA==", + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.4.12.tgz", + "integrity": "sha512-ILTe3A2te0+Vb9TG4P1AZVmZFOjDDCV/b2nBmV1rNOmSu3Q/xkHghW+yMhMffwHcXklMlcajMlc4iFSkPbrTKw==", "requires": { "@babel/runtime": "^7.26.0" } }, "@mui/material": { - "version": "6.4.11", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.4.11.tgz", - "integrity": "sha512-k2D3FLJS+/qD0qnd6ZlAjGFvaaxe1Dl10NyvpeDzIebMuYdn8VqYe6XBgGueEAtnzSJM4V03VD9kb5Fi24dnTA==", + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.4.12.tgz", + "integrity": "sha512-VqoLNS5UaNqoS1FybezZR/PaAvzbTmRe0Mx//afXbolIah43eozpX2FckaFffLvMoiSIyxx1+AMHyENTr2Es0Q==", "requires": { "@babel/runtime": "^7.26.0", - "@mui/core-downloads-tracker": "^6.4.11", - "@mui/system": "^6.4.11", + "@mui/core-downloads-tracker": "^6.4.12", + "@mui/system": "^6.4.12", "@mui/types": "~7.2.24", "@mui/utils": "^6.4.9", "@popperjs/core": "^2.11.8", @@ -28238,9 +28238,9 @@ } }, "@mui/system": { - "version": "6.4.11", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.4.11.tgz", - "integrity": "sha512-gibtsrZEwnDaT5+I/KloOj/yHluX5G8heknuxBpQOdEQ3Gc0avjSImn5hSeKp8D4thiwZiApuggIjZw1dQguUA==", + "version": "6.4.12", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.4.12.tgz", + "integrity": "sha512-fgEfm1qxpKCztndESeL1L0sLwA2c7josZ2w42D8OM3pbLee4bH2twEjoMo6qf7z2rNw1Uc9EU9haXeMoq0oTdQ==", "requires": { "@babel/runtime": "^7.26.0", "@mui/private-theming": "^6.4.9", @@ -28279,9 +28279,9 @@ } }, "@mui/x-date-pickers": { - "version": "7.29.3", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.29.3.tgz", - "integrity": "sha512-/A0/8fpLnEFeJKr5YQsI8jqlWPJlOtgfCGcqXHVDOLxgV3lW49+Kh5TZAc1yi6HKT3AG6k4DkNwTuu/RjJeMFA==", + "version": "7.29.4", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.29.4.tgz", + "integrity": "sha512-wJ3tsqk/y6dp+mXGtT9czciAMEO5Zr3IIAHg9x6IL0Eqanqy0N3chbmQQZv3iq0m2qUpQDLvZ4utZBUTJdjNzw==", "requires": { "@babel/runtime": "^7.25.7", "@mui/utils": "^5.16.6 || ^6.0.0 || ^7.0.0", diff --git a/package.json b/package.json index 0288e7670..f1c424d1e 100644 --- a/package.json +++ b/package.json @@ -86,9 +86,9 @@ "@jellyfin/libass-wasm": "4.2.3", "@jellyfin/sdk": "0.0.0-unstable.202505280501", "@jellyfin/ux-web": "1.0.0", - "@mui/icons-material": "6.4.11", - "@mui/material": "6.4.11", - "@mui/x-date-pickers": "7.29.3", + "@mui/icons-material": "6.4.12", + "@mui/material": "6.4.12", + "@mui/x-date-pickers": "7.29.4", "@react-hook/resize-observer": "2.0.2", "@tanstack/react-query": "5.75.6", "@tanstack/react-query-devtools": "5.75.6", From 054d3259ad8e12f2776736cf7c2c6a0924e48ead Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Jun 2025 21:53:02 +0000 Subject: [PATCH 431/645] Update PostCSS --- package-lock.json | 940 ++++++++++++++++++++++++---------------------- package.json | 4 +- 2 files changed, 495 insertions(+), 449 deletions(-) diff --git a/package-lock.json b/package-lock.json index b561f67eb..01dd0a05c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,9 +112,9 @@ "html-webpack-plugin": "5.6.3", "jsdom": "26.1.0", "mini-css-extract-plugin": "2.9.2", - "postcss": "8.5.3", + "postcss": "8.5.4", "postcss-loader": "8.1.1", - "postcss-preset-env": "10.1.6", + "postcss-preset-env": "10.2.0", "postcss-scss": "4.0.9", "sass": "1.87.0", "sass-loader": "16.0.5", @@ -1847,9 +1847,9 @@ } }, "node_modules/@csstools/cascade-layer-name-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.4.tgz", - "integrity": "sha512-7DFHlPuIxviKYZrOiwVU/PiHLm3lLUR23OMuEEtfEOQTOp9hzQ2JjdY6X5H18RVuUPJqSCI+qNnD5iOLMVE0bA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz", + "integrity": "sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==", "dev": true, "funding": [ { @@ -1866,8 +1866,8 @@ "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/@csstools/color-helpers": { @@ -1891,9 +1891,9 @@ } }, "node_modules/@csstools/css-calc": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.3.tgz", - "integrity": "sha512-XBG3talrhid44BY1x3MHzUx/aTG8+x/Zi57M4aTKK9RFB4aLlF3TTSzfzn8nWVHWL3FgAXAxmupmDd6VWww+pw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", "dev": true, "funding": [ { @@ -1910,14 +1910,14 @@ "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/@csstools/css-color-parser": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.9.tgz", - "integrity": "sha512-wILs5Zk7BU86UArYBJTPy/FMPPKVKHMj1ycCEyf3VUptol0JNRLFU/BZsJ4aiIHJEbSLiizzRrw8Pc1uAEDrXw==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz", + "integrity": "sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==", "dev": true, "funding": [ { @@ -1932,20 +1932,20 @@ "license": "MIT", "dependencies": { "@csstools/color-helpers": "^5.0.2", - "@csstools/css-calc": "^2.1.3" + "@csstools/css-calc": "^2.1.4" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", - "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", "dev": true, "funding": [ { @@ -1962,13 +1962,13 @@ "node": ">=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/@csstools/css-tokenizer": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", - "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", "dev": true, "funding": [ { @@ -2074,9 +2074,9 @@ } }, "node_modules/@csstools/postcss-color-function": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.9.tgz", - "integrity": "sha512-2UeQCGMO5+EeQsPQK2DqXp0dad+P6nIz6G2dI06APpBuYBKxZEq7CTH+UiztFQ8cB1f89dnO9+D/Kfr+JfI2hw==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.10.tgz", + "integrity": "sha512-4dY0NBu7NVIpzxZRgh/Q/0GPSz/jLSw0i/u3LTUor0BkQcz/fNhN10mSWBDsL0p9nDb0Ky1PD6/dcGbhACuFTQ==", "dev": true, "funding": [ { @@ -2090,10 +2090,10 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2104,9 +2104,9 @@ } }, "node_modules/@csstools/postcss-color-mix-function": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.9.tgz", - "integrity": "sha512-Enj7ZIIkLD7zkGCN31SZFx4H1gKiCs2Y4taBo/v/cqaHN7p1qGrf5UTMNSjQFZ7MgClGufHx4pddwFTGL+ipug==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.10.tgz", + "integrity": "sha512-P0lIbQW9I4ShE7uBgZRib/lMTf9XMjJkFl/d6w4EMNHu2qvQ6zljJGEcBkw/NsBtq/6q3WrmgxSS8kHtPMkK4Q==", "dev": true, "funding": [ { @@ -2120,10 +2120,40 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-color-mix-variadic-function-arguments": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.0.tgz", + "integrity": "sha512-Z5WhouTyD74dPFPrVE7KydgNS9VvnjB8qcdes9ARpCOItb4jTnm7cHp4FhxCRUoyhabD0WVv43wbkJ4p8hLAlQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2134,9 +2164,9 @@ } }, "node_modules/@csstools/postcss-content-alt-text": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.5.tgz", - "integrity": "sha512-9BOS535v6YmyOYk32jAHXeddRV+iyd4vRcbrEekpwxmueAXX5J8WgbceFnE4E4Pmw/ysnB9v+n/vSWoFmcLMcA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.6.tgz", + "integrity": "sha512-eRjLbOjblXq+byyaedQRSrAejKGNAFued+LcbzT+LCL78fabxHkxYjBbxkroONxHHYu2qxhFK2dBStTLPG3jpQ==", "dev": true, "funding": [ { @@ -2150,9 +2180,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2163,9 +2193,9 @@ } }, "node_modules/@csstools/postcss-exponential-functions": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.8.tgz", - "integrity": "sha512-vHgDXtGIBPpFQnFNDftMQg4MOuXcWnK91L/7REjBNYzQ/p2Fa/6RcnehTqCRrNtQ46PNIolbRsiDdDuxiHolwQ==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.9.tgz", + "integrity": "sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw==", "dev": true, "funding": [ { @@ -2179,9 +2209,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-calc": "^2.1.3", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -2218,9 +2248,9 @@ } }, "node_modules/@csstools/postcss-gamut-mapping": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.9.tgz", - "integrity": "sha512-quksIsFm3DGsf8Qbr9KiSGBF2w3RwxSfOfma5wbORDB1AFF15r4EVW7sUuWw3s5IAEGMqzel/dE2rQsI7Yb8mA==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.10.tgz", + "integrity": "sha512-QDGqhJlvFnDlaPAfCYPsnwVA6ze+8hhrwevYWlnUeSjkkZfBpcCO42SaUD8jiLlq7niouyLgvup5lh+f1qessg==", "dev": true, "funding": [ { @@ -2234,9 +2264,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -2246,9 +2276,9 @@ } }, "node_modules/@csstools/postcss-gradients-interpolation-method": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.9.tgz", - "integrity": "sha512-duqTeUHF4ambUybAmhX9KonkicLM/WNp2JjMUbegRD4O8A/tb6fdZ7jUNdp/UUiO1FIdDkMwmNw6856bT0XF8Q==", + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.10.tgz", + "integrity": "sha512-HHPauB2k7Oits02tKFUeVFEU2ox/H3OQVrP3fSOKDxvloOikSal+3dzlyTZmYsb9FlY9p5EUpBtz0//XBmy+aw==", "dev": true, "funding": [ { @@ -2262,10 +2292,10 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2276,9 +2306,9 @@ } }, "node_modules/@csstools/postcss-hwb-function": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.9.tgz", - "integrity": "sha512-sDpdPsoGAhYl/PMSYfu5Ez82wXb2bVkg1Cb8vsRLhpXhAk4OSlsJN+GodAql6tqc1B2G/WToxsFU6G74vkhPvA==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.10.tgz", + "integrity": "sha512-nOKKfp14SWcdEQ++S9/4TgRKchooLZL0TUFdun3nI4KPwCjETmhjta1QT4ICQcGVWQTvrsgMM/aLB5We+kMHhQ==", "dev": true, "funding": [ { @@ -2292,10 +2322,10 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2306,9 +2336,9 @@ } }, "node_modules/@csstools/postcss-ic-unit": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.1.tgz", - "integrity": "sha512-lECc38i1w3qU9nhrUhP6F8y4BfcQJkR1cb8N6tZNf2llM6zPkxnqt04jRCwsUgNcB3UGKDy+zLenhOYGHqCV+Q==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.2.tgz", + "integrity": "sha512-lrK2jjyZwh7DbxaNnIUjkeDmU8Y6KyzRBk91ZkI5h8nb1ykEfZrtIVArdIjX4DHMIBGpdHrgP0n4qXDr7OHaKA==", "dev": true, "funding": [ { @@ -2322,7 +2352,7 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, @@ -2421,9 +2451,9 @@ } }, "node_modules/@csstools/postcss-light-dark-function": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.8.tgz", - "integrity": "sha512-v8VU5WtrZIyEtk88WB4fkG22TGd8HyAfSFfZZQ1uNN0+arMJdZc++H3KYTfbYDpJRGy8GwADYH8ySXiILn+OyA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.9.tgz", + "integrity": "sha512-1tCZH5bla0EAkFAI2r0H33CDnIBeLUaJh1p+hvvsylJ4svsv2wOmJjJn+OXwUZLXef37GYbRIVKX+X+g6m+3CQ==", "dev": true, "funding": [ { @@ -2437,9 +2467,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2545,9 +2575,9 @@ } }, "node_modules/@csstools/postcss-logical-viewport-units": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.3.tgz", - "integrity": "sha512-OC1IlG/yoGJdi0Y+7duz/kU/beCwO+Gua01sD6GtOtLi7ByQUpcIqs7UE/xuRPay4cHgOMatWdnDdsIDjnWpPw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.4.tgz", + "integrity": "sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ==", "dev": true, "funding": [ { @@ -2561,7 +2591,7 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-tokenizer": "^3.0.3", + "@csstools/css-tokenizer": "^3.0.4", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2572,9 +2602,9 @@ } }, "node_modules/@csstools/postcss-media-minmax": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.8.tgz", - "integrity": "sha512-Skum5wIXw2+NyCQWUyfstN3c1mfSh39DRAo+Uh2zzXOglBG8xB9hnArhYFScuMZkzeM+THVa//mrByKAfumc7w==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.9.tgz", + "integrity": "sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig==", "dev": true, "funding": [ { @@ -2588,10 +2618,10 @@ ], "license": "MIT", "dependencies": { - "@csstools/css-calc": "^2.1.3", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" }, "engines": { "node": ">=18" @@ -2601,9 +2631,9 @@ } }, "node_modules/@csstools/postcss-media-minmax/node_modules/@csstools/media-query-list-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", - "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", + "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", "dev": true, "funding": [ { @@ -2620,14 +2650,14 @@ "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.4.tgz", - "integrity": "sha512-AnGjVslHMm5xw9keusQYvjVWvuS7KWK+OJagaG0+m9QnIjZsrysD2kJP/tr/UJIyYtMCtu8OkUd+Rajb4DqtIQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.5.tgz", + "integrity": "sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg==", "dev": true, "funding": [ { @@ -2641,9 +2671,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" }, "engines": { "node": ">=18" @@ -2653,9 +2683,9 @@ } }, "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values/node_modules/@csstools/media-query-list-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", - "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", + "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", "dev": true, "funding": [ { @@ -2672,8 +2702,8 @@ "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/@csstools/postcss-nested-calc": { @@ -2730,9 +2760,9 @@ } }, "node_modules/@csstools/postcss-oklab-function": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.9.tgz", - "integrity": "sha512-UHrnujimwtdDw8BYDcWJtBXuJ13uc/BjAddPdfMc/RsWxhg8gG8UbvTF0tnMtHrZ4i7lwy85fPEzK1AiykMyRA==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.10.tgz", + "integrity": "sha512-ZzZUTDd0fgNdhv8UUjGCtObPD8LYxMH+MJsW9xlZaWTV8Ppr4PtxlHYNMmF4vVWGl0T6f8tyWAKjoI6vePSgAg==", "dev": true, "funding": [ { @@ -2746,10 +2776,10 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2760,9 +2790,9 @@ } }, "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.0.1.tgz", - "integrity": "sha512-Ofz81HaY8mmbP8/Qr3PZlUzjsyV5WuxWmvtYn+jhYGvvjFazTmN9R2io5W5znY1tyk2CA9uM0IPWyY4ygDytCw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.1.0.tgz", + "integrity": "sha512-YrkI9dx8U4R8Sz2EJaoeD9fI7s7kmeEBfmO+UURNeL6lQI7VxF6sBE+rSqdCBn4onwqmxFdBU3lTwyYb/lCmxA==", "dev": true, "funding": [ { @@ -2786,9 +2816,9 @@ } }, "node_modules/@csstools/postcss-random-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-2.0.0.tgz", - "integrity": "sha512-MYZKxSr4AKfjECL8vg49BbfNNzK+t3p2OWX+Xf7rXgMaTP44oy/e8VGWu4MLnJ3NUd9tFVkisLO/sg+5wMTNsg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz", + "integrity": "sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w==", "dev": true, "funding": [ { @@ -2802,9 +2832,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-calc": "^2.1.3", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -2814,9 +2844,9 @@ } }, "node_modules/@csstools/postcss-relative-color-syntax": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.9.tgz", - "integrity": "sha512-+AGOcLF5PmMnTRPnOdCvY7AwvD5veIOhTWbJV6vC3hB1tt0ii/k6QOwhWfsGGg1ZPQ0JY15u+wqLR4ZTtB0luA==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.10.tgz", + "integrity": "sha512-8+0kQbQGg9yYG8hv0dtEpOMLwB9M+P7PhacgIzVzJpixxV4Eq9AUQtQw8adMmAJU1RBBmIlpmtmm3XTRd/T00g==", "dev": true, "funding": [ { @@ -2830,10 +2860,10 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -2884,9 +2914,9 @@ } }, "node_modules/@csstools/postcss-sign-functions": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.3.tgz", - "integrity": "sha512-4F4GRhj8xNkBtLZ+3ycIhReaDfKJByXI+cQGIps3AzCO8/CJOeoDPxpMnL5vqZrWKOceSATHEQJUO/Q/r2y7OQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.4.tgz", + "integrity": "sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg==", "dev": true, "funding": [ { @@ -2900,9 +2930,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-calc": "^2.1.3", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -2912,9 +2942,9 @@ } }, "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.8.tgz", - "integrity": "sha512-6Y4yhL4fNhgzbZ/wUMQ4EjFUfoNNMpEXZnDw1JrlcEBHUT15gplchtFsZGk7FNi8PhLHJfCUwVKrEHzhfhKK+g==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.9.tgz", + "integrity": "sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA==", "dev": true, "funding": [ { @@ -2928,9 +2958,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-calc": "^2.1.3", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -2967,9 +2997,9 @@ } }, "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.8.tgz", - "integrity": "sha512-YcDvYTRu7f78/91B6bX+mE1WoAO91Su7/8KSRpuWbIGUB8hmaNSRu9wziaWSLJ1lOB1aQe+bvo9BIaLKqPOo/g==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.9.tgz", + "integrity": "sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A==", "dev": true, "funding": [ { @@ -2983,9 +3013,9 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-calc": "^2.1.3", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" }, "engines": { "node": ">=18" @@ -9299,9 +9329,9 @@ } }, "node_modules/cssdb": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.2.5.tgz", - "integrity": "sha512-leAt8/hdTCtzql9ZZi86uYAmCLzVKpJMMdjbvOGVnXFXz/BWFpBmM1MHEHU/RqtPyRYmabVmEW1DtX3YGLuuLA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.3.0.tgz", + "integrity": "sha512-c7bmItIg38DgGjSwDPZOYF/2o0QU/sSgkWOMyl8votOfgFuyiFKWPesmCGEsrGLxEA9uL540cp8LdaGEjUGsZQ==", "dev": true, "funding": [ { @@ -15463,9 +15493,9 @@ "optional": true }, "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, "funding": [ { @@ -15473,6 +15503,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -16506,9 +16537,9 @@ } }, "node_modules/postcss": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz", + "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==", "dev": true, "funding": [ { @@ -16526,7 +16557,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.8", + "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -16621,9 +16652,9 @@ } }, "node_modules/postcss-color-functional-notation": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.9.tgz", - "integrity": "sha512-WScwD3pSsIz+QP97sPkGCeJm7xUH0J18k6zV5o8O2a4cQJyv15vLUx/WFQajuJVgZhmJL5awDu8zHnqzAzm4lw==", + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.10.tgz", + "integrity": "sha512-k9qX+aXHBiLTRrWoCJuUFI6F1iF6QJQUXNVWJVSbqZgj57jDhBlOvD8gNUGl35tgqDivbGLhZeW3Ongz4feuKA==", "dev": true, "funding": [ { @@ -16637,10 +16668,10 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -16741,9 +16772,9 @@ } }, "node_modules/postcss-custom-media": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.5.tgz", - "integrity": "sha512-SQHhayVNgDvSAdX9NQ/ygcDQGEY+aSF4b/96z7QUX6mqL5yl/JgG/DywcF6fW9XbnCRE+aVYk+9/nqGuzOPWeQ==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz", + "integrity": "sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw==", "dev": true, "funding": [ { @@ -16757,10 +16788,10 @@ ], "license": "MIT", "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" }, "engines": { "node": ">=18" @@ -16770,9 +16801,9 @@ } }, "node_modules/postcss-custom-media/node_modules/@csstools/media-query-list-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", - "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", + "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", "dev": true, "funding": [ { @@ -16789,14 +16820,14 @@ "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "node_modules/postcss-custom-properties": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.4.tgz", - "integrity": "sha512-QnW8FCCK6q+4ierwjnmXF9Y9KF8q0JkbgVfvQEMa93x1GT8FvOiUevWCN2YLaOWyByeDX8S6VFbZEeWoAoXs2A==", + "version": "14.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz", + "integrity": "sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ==", "dev": true, "funding": [ { @@ -16810,9 +16841,9 @@ ], "license": "MIT", "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, @@ -16824,9 +16855,9 @@ } }, "node_modules/postcss-custom-selectors": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.4.tgz", - "integrity": "sha512-ASOXqNvDCE0dAJ/5qixxPeL1aOVGHGW2JwSy7HyjWNbnWTQCl+fDc968HY1jCmZI0+BaYT5CxsOiUhavpG/7eg==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz", + "integrity": "sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg==", "dev": true, "funding": [ { @@ -16840,9 +16871,9 @@ ], "license": "MIT", "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", "postcss-selector-parser": "^7.0.0" }, "engines": { @@ -16976,9 +17007,9 @@ } }, "node_modules/postcss-double-position-gradients": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.1.tgz", - "integrity": "sha512-ZitCwmvOR4JzXmKw6sZblTgwV1dcfLvClcyjADuqZ5hU0Uk4SVNpvSN9w8NcJ7XuxhRYxVA8m8AB3gy+HNBQOA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.2.tgz", + "integrity": "sha512-7qTqnL7nfLRyJK/AHSVrrXOuvDDzettC+wGoienURV8v2svNbu6zJC52ruZtHaO6mfcagFmuTGFdzRsJKB3k5Q==", "dev": true, "funding": [ { @@ -16992,7 +17023,7 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" }, @@ -17212,9 +17243,9 @@ } }, "node_modules/postcss-lab-function": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.9.tgz", - "integrity": "sha512-IGbsIXbqMDusymJAKYX+f9oakPo89wL9Pzd/qRBQOVf3EIQWT9hgvqC4Me6Dkzxp3KPuIBf6LPkjrLHe/6ZMIQ==", + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.10.tgz", + "integrity": "sha512-tqs6TCEv9tC1Riq6fOzHuHcZyhg4k3gIAMB8GGY/zA1ssGdm6puHMVE7t75aOSoFg7UD2wyrFFhbldiCMyyFTQ==", "dev": true, "funding": [ { @@ -17228,10 +17259,10 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" }, "engines": { @@ -18135,9 +18166,9 @@ } }, "node_modules/postcss-preset-env": { - "version": "10.1.6", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.1.6.tgz", - "integrity": "sha512-1jRD7vttKLJ7o0mcmmYWKRLm7W14rI8K1I7Y41OeXUPEVc/CAzfTssNUeJ0zKbR+zMk4boqct/gwS/poIFF5Lg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.2.0.tgz", + "integrity": "sha512-cl13sPBbSqo1Q7Ryb19oT5NZO5IHFolRbIMdgDq4f9w1MHYiL6uZS7uSsjXJ1KzRIcX5BMjEeyxmAevVXENa3Q==", "dev": true, "funding": [ { @@ -18152,59 +18183,60 @@ "license": "MIT-0", "dependencies": { "@csstools/postcss-cascade-layers": "^5.0.1", - "@csstools/postcss-color-function": "^4.0.9", - "@csstools/postcss-color-mix-function": "^3.0.9", - "@csstools/postcss-content-alt-text": "^2.0.5", - "@csstools/postcss-exponential-functions": "^2.0.8", + "@csstools/postcss-color-function": "^4.0.10", + "@csstools/postcss-color-mix-function": "^3.0.10", + "@csstools/postcss-color-mix-variadic-function-arguments": "^1.0.0", + "@csstools/postcss-content-alt-text": "^2.0.6", + "@csstools/postcss-exponential-functions": "^2.0.9", "@csstools/postcss-font-format-keywords": "^4.0.0", - "@csstools/postcss-gamut-mapping": "^2.0.9", - "@csstools/postcss-gradients-interpolation-method": "^5.0.9", - "@csstools/postcss-hwb-function": "^4.0.9", - "@csstools/postcss-ic-unit": "^4.0.1", + "@csstools/postcss-gamut-mapping": "^2.0.10", + "@csstools/postcss-gradients-interpolation-method": "^5.0.10", + "@csstools/postcss-hwb-function": "^4.0.10", + "@csstools/postcss-ic-unit": "^4.0.2", "@csstools/postcss-initial": "^2.0.1", "@csstools/postcss-is-pseudo-class": "^5.0.1", - "@csstools/postcss-light-dark-function": "^2.0.8", + "@csstools/postcss-light-dark-function": "^2.0.9", "@csstools/postcss-logical-float-and-clear": "^3.0.0", "@csstools/postcss-logical-overflow": "^2.0.0", "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", "@csstools/postcss-logical-resize": "^3.0.0", - "@csstools/postcss-logical-viewport-units": "^3.0.3", - "@csstools/postcss-media-minmax": "^2.0.8", - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.4", + "@csstools/postcss-logical-viewport-units": "^3.0.4", + "@csstools/postcss-media-minmax": "^2.0.9", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.5", "@csstools/postcss-nested-calc": "^4.0.0", "@csstools/postcss-normalize-display-values": "^4.0.0", - "@csstools/postcss-oklab-function": "^4.0.9", - "@csstools/postcss-progressive-custom-properties": "^4.0.1", - "@csstools/postcss-random-function": "^2.0.0", - "@csstools/postcss-relative-color-syntax": "^3.0.9", + "@csstools/postcss-oklab-function": "^4.0.10", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", + "@csstools/postcss-random-function": "^2.0.1", + "@csstools/postcss-relative-color-syntax": "^3.0.10", "@csstools/postcss-scope-pseudo-class": "^4.0.1", - "@csstools/postcss-sign-functions": "^1.1.3", - "@csstools/postcss-stepped-value-functions": "^4.0.8", + "@csstools/postcss-sign-functions": "^1.1.4", + "@csstools/postcss-stepped-value-functions": "^4.0.9", "@csstools/postcss-text-decoration-shorthand": "^4.0.2", - "@csstools/postcss-trigonometric-functions": "^4.0.8", + "@csstools/postcss-trigonometric-functions": "^4.0.9", "@csstools/postcss-unset-value": "^4.0.0", "autoprefixer": "^10.4.21", - "browserslist": "^4.24.4", + "browserslist": "^4.24.5", "css-blank-pseudo": "^7.0.1", "css-has-pseudo": "^7.0.2", "css-prefers-color-scheme": "^10.0.0", - "cssdb": "^8.2.5", + "cssdb": "^8.3.0", "postcss-attribute-case-insensitive": "^7.0.1", "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^7.0.9", + "postcss-color-functional-notation": "^7.0.10", "postcss-color-hex-alpha": "^10.0.0", "postcss-color-rebeccapurple": "^10.0.0", - "postcss-custom-media": "^11.0.5", - "postcss-custom-properties": "^14.0.4", - "postcss-custom-selectors": "^8.0.4", + "postcss-custom-media": "^11.0.6", + "postcss-custom-properties": "^14.0.5", + "postcss-custom-selectors": "^8.0.5", "postcss-dir-pseudo-class": "^9.0.1", - "postcss-double-position-gradients": "^6.0.1", + "postcss-double-position-gradients": "^6.0.2", "postcss-focus-visible": "^10.0.1", "postcss-focus-within": "^9.0.1", "postcss-font-variant": "^5.0.0", "postcss-gap-properties": "^6.0.0", "postcss-image-set-function": "^7.0.0", - "postcss-lab-function": "^7.0.9", + "postcss-lab-function": "^7.0.10", "postcss-logical": "^8.1.0", "postcss-nesting": "^13.0.1", "postcss-opacity-percentage": "^3.0.0", @@ -26723,9 +26755,9 @@ "dev": true }, "@csstools/cascade-layer-name-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.4.tgz", - "integrity": "sha512-7DFHlPuIxviKYZrOiwVU/PiHLm3lLUR23OMuEEtfEOQTOp9hzQ2JjdY6X5H18RVuUPJqSCI+qNnD5iOLMVE0bA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz", + "integrity": "sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==", "dev": true, "requires": {} }, @@ -26736,33 +26768,33 @@ "dev": true }, "@csstools/css-calc": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.3.tgz", - "integrity": "sha512-XBG3talrhid44BY1x3MHzUx/aTG8+x/Zi57M4aTKK9RFB4aLlF3TTSzfzn8nWVHWL3FgAXAxmupmDd6VWww+pw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", "dev": true, "requires": {} }, "@csstools/css-color-parser": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.9.tgz", - "integrity": "sha512-wILs5Zk7BU86UArYBJTPy/FMPPKVKHMj1ycCEyf3VUptol0JNRLFU/BZsJ4aiIHJEbSLiizzRrw8Pc1uAEDrXw==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz", + "integrity": "sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==", "dev": true, "requires": { "@csstools/color-helpers": "^5.0.2", - "@csstools/css-calc": "^2.1.3" + "@csstools/css-calc": "^2.1.4" } }, "@csstools/css-parser-algorithms": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", - "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", "dev": true, "requires": {} }, "@csstools/css-tokenizer": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", - "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", "dev": true }, "@csstools/media-query-list-parser": { @@ -26802,52 +26834,65 @@ } }, "@csstools/postcss-color-function": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.9.tgz", - "integrity": "sha512-2UeQCGMO5+EeQsPQK2DqXp0dad+P6nIz6G2dI06APpBuYBKxZEq7CTH+UiztFQ8cB1f89dnO9+D/Kfr+JfI2hw==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.10.tgz", + "integrity": "sha512-4dY0NBu7NVIpzxZRgh/Q/0GPSz/jLSw0i/u3LTUor0BkQcz/fNhN10mSWBDsL0p9nDb0Ky1PD6/dcGbhACuFTQ==", "dev": true, "requires": { - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" } }, "@csstools/postcss-color-mix-function": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.9.tgz", - "integrity": "sha512-Enj7ZIIkLD7zkGCN31SZFx4H1gKiCs2Y4taBo/v/cqaHN7p1qGrf5UTMNSjQFZ7MgClGufHx4pddwFTGL+ipug==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.10.tgz", + "integrity": "sha512-P0lIbQW9I4ShE7uBgZRib/lMTf9XMjJkFl/d6w4EMNHu2qvQ6zljJGEcBkw/NsBtq/6q3WrmgxSS8kHtPMkK4Q==", "dev": true, "requires": { - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", + "@csstools/utilities": "^2.0.0" + } + }, + "@csstools/postcss-color-mix-variadic-function-arguments": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.0.tgz", + "integrity": "sha512-Z5WhouTyD74dPFPrVE7KydgNS9VvnjB8qcdes9ARpCOItb4jTnm7cHp4FhxCRUoyhabD0WVv43wbkJ4p8hLAlQ==", + "dev": true, + "requires": { + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" } }, "@csstools/postcss-content-alt-text": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.5.tgz", - "integrity": "sha512-9BOS535v6YmyOYk32jAHXeddRV+iyd4vRcbrEekpwxmueAXX5J8WgbceFnE4E4Pmw/ysnB9v+n/vSWoFmcLMcA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.6.tgz", + "integrity": "sha512-eRjLbOjblXq+byyaedQRSrAejKGNAFued+LcbzT+LCL78fabxHkxYjBbxkroONxHHYu2qxhFK2dBStTLPG3jpQ==", "dev": true, "requires": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" } }, "@csstools/postcss-exponential-functions": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.8.tgz", - "integrity": "sha512-vHgDXtGIBPpFQnFNDftMQg4MOuXcWnK91L/7REjBNYzQ/p2Fa/6RcnehTqCRrNtQ46PNIolbRsiDdDuxiHolwQ==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.9.tgz", + "integrity": "sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw==", "dev": true, "requires": { - "@csstools/css-calc": "^2.1.3", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "@csstools/postcss-font-format-keywords": { @@ -26861,49 +26906,49 @@ } }, "@csstools/postcss-gamut-mapping": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.9.tgz", - "integrity": "sha512-quksIsFm3DGsf8Qbr9KiSGBF2w3RwxSfOfma5wbORDB1AFF15r4EVW7sUuWw3s5IAEGMqzel/dE2rQsI7Yb8mA==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.10.tgz", + "integrity": "sha512-QDGqhJlvFnDlaPAfCYPsnwVA6ze+8hhrwevYWlnUeSjkkZfBpcCO42SaUD8jiLlq7niouyLgvup5lh+f1qessg==", "dev": true, "requires": { - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "@csstools/postcss-gradients-interpolation-method": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.9.tgz", - "integrity": "sha512-duqTeUHF4ambUybAmhX9KonkicLM/WNp2JjMUbegRD4O8A/tb6fdZ7jUNdp/UUiO1FIdDkMwmNw6856bT0XF8Q==", + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.10.tgz", + "integrity": "sha512-HHPauB2k7Oits02tKFUeVFEU2ox/H3OQVrP3fSOKDxvloOikSal+3dzlyTZmYsb9FlY9p5EUpBtz0//XBmy+aw==", "dev": true, "requires": { - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" } }, "@csstools/postcss-hwb-function": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.9.tgz", - "integrity": "sha512-sDpdPsoGAhYl/PMSYfu5Ez82wXb2bVkg1Cb8vsRLhpXhAk4OSlsJN+GodAql6tqc1B2G/WToxsFU6G74vkhPvA==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.10.tgz", + "integrity": "sha512-nOKKfp14SWcdEQ++S9/4TgRKchooLZL0TUFdun3nI4KPwCjETmhjta1QT4ICQcGVWQTvrsgMM/aLB5We+kMHhQ==", "dev": true, "requires": { - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" } }, "@csstools/postcss-ic-unit": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.1.tgz", - "integrity": "sha512-lECc38i1w3qU9nhrUhP6F8y4BfcQJkR1cb8N6tZNf2llM6zPkxnqt04jRCwsUgNcB3UGKDy+zLenhOYGHqCV+Q==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.2.tgz", + "integrity": "sha512-lrK2jjyZwh7DbxaNnIUjkeDmU8Y6KyzRBk91ZkI5h8nb1ykEfZrtIVArdIjX4DHMIBGpdHrgP0n4qXDr7OHaKA==", "dev": true, "requires": { - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" } @@ -26945,14 +26990,14 @@ } }, "@csstools/postcss-light-dark-function": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.8.tgz", - "integrity": "sha512-v8VU5WtrZIyEtk88WB4fkG22TGd8HyAfSFfZZQ1uNN0+arMJdZc++H3KYTfbYDpJRGy8GwADYH8ySXiILn+OyA==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.9.tgz", + "integrity": "sha512-1tCZH5bla0EAkFAI2r0H33CDnIBeLUaJh1p+hvvsylJ4svsv2wOmJjJn+OXwUZLXef37GYbRIVKX+X+g6m+3CQ==", "dev": true, "requires": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" } }, @@ -26987,51 +27032,51 @@ } }, "@csstools/postcss-logical-viewport-units": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.3.tgz", - "integrity": "sha512-OC1IlG/yoGJdi0Y+7duz/kU/beCwO+Gua01sD6GtOtLi7ByQUpcIqs7UE/xuRPay4cHgOMatWdnDdsIDjnWpPw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.4.tgz", + "integrity": "sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ==", "dev": true, "requires": { - "@csstools/css-tokenizer": "^3.0.3", + "@csstools/css-tokenizer": "^3.0.4", "@csstools/utilities": "^2.0.0" } }, "@csstools/postcss-media-minmax": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.8.tgz", - "integrity": "sha512-Skum5wIXw2+NyCQWUyfstN3c1mfSh39DRAo+Uh2zzXOglBG8xB9hnArhYFScuMZkzeM+THVa//mrByKAfumc7w==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.9.tgz", + "integrity": "sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig==", "dev": true, "requires": { - "@csstools/css-calc": "^2.1.3", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" }, "dependencies": { "@csstools/media-query-list-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", - "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", + "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", "dev": true, "requires": {} } } }, "@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.4.tgz", - "integrity": "sha512-AnGjVslHMm5xw9keusQYvjVWvuS7KWK+OJagaG0+m9QnIjZsrysD2kJP/tr/UJIyYtMCtu8OkUd+Rajb4DqtIQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.5.tgz", + "integrity": "sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg==", "dev": true, "requires": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" }, "dependencies": { "@csstools/media-query-list-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", - "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", + "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", "dev": true, "requires": {} } @@ -27057,48 +27102,48 @@ } }, "@csstools/postcss-oklab-function": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.9.tgz", - "integrity": "sha512-UHrnujimwtdDw8BYDcWJtBXuJ13uc/BjAddPdfMc/RsWxhg8gG8UbvTF0tnMtHrZ4i7lwy85fPEzK1AiykMyRA==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.10.tgz", + "integrity": "sha512-ZzZUTDd0fgNdhv8UUjGCtObPD8LYxMH+MJsW9xlZaWTV8Ppr4PtxlHYNMmF4vVWGl0T6f8tyWAKjoI6vePSgAg==", "dev": true, "requires": { - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" } }, "@csstools/postcss-progressive-custom-properties": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.0.1.tgz", - "integrity": "sha512-Ofz81HaY8mmbP8/Qr3PZlUzjsyV5WuxWmvtYn+jhYGvvjFazTmN9R2io5W5znY1tyk2CA9uM0IPWyY4ygDytCw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.1.0.tgz", + "integrity": "sha512-YrkI9dx8U4R8Sz2EJaoeD9fI7s7kmeEBfmO+UURNeL6lQI7VxF6sBE+rSqdCBn4onwqmxFdBU3lTwyYb/lCmxA==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "@csstools/postcss-random-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-2.0.0.tgz", - "integrity": "sha512-MYZKxSr4AKfjECL8vg49BbfNNzK+t3p2OWX+Xf7rXgMaTP44oy/e8VGWu4MLnJ3NUd9tFVkisLO/sg+5wMTNsg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz", + "integrity": "sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w==", "dev": true, "requires": { - "@csstools/css-calc": "^2.1.3", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "@csstools/postcss-relative-color-syntax": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.9.tgz", - "integrity": "sha512-+AGOcLF5PmMnTRPnOdCvY7AwvD5veIOhTWbJV6vC3hB1tt0ii/k6QOwhWfsGGg1ZPQ0JY15u+wqLR4ZTtB0luA==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.10.tgz", + "integrity": "sha512-8+0kQbQGg9yYG8hv0dtEpOMLwB9M+P7PhacgIzVzJpixxV4Eq9AUQtQw8adMmAJU1RBBmIlpmtmm3XTRd/T00g==", "dev": true, "requires": { - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" } }, @@ -27124,25 +27169,25 @@ } }, "@csstools/postcss-sign-functions": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.3.tgz", - "integrity": "sha512-4F4GRhj8xNkBtLZ+3ycIhReaDfKJByXI+cQGIps3AzCO8/CJOeoDPxpMnL5vqZrWKOceSATHEQJUO/Q/r2y7OQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.4.tgz", + "integrity": "sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg==", "dev": true, "requires": { - "@csstools/css-calc": "^2.1.3", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "@csstools/postcss-stepped-value-functions": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.8.tgz", - "integrity": "sha512-6Y4yhL4fNhgzbZ/wUMQ4EjFUfoNNMpEXZnDw1JrlcEBHUT15gplchtFsZGk7FNi8PhLHJfCUwVKrEHzhfhKK+g==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.9.tgz", + "integrity": "sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA==", "dev": true, "requires": { - "@csstools/css-calc": "^2.1.3", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "@csstools/postcss-text-decoration-shorthand": { @@ -27156,14 +27201,14 @@ } }, "@csstools/postcss-trigonometric-functions": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.8.tgz", - "integrity": "sha512-YcDvYTRu7f78/91B6bX+mE1WoAO91Su7/8KSRpuWbIGUB8hmaNSRu9wziaWSLJ1lOB1aQe+bvo9BIaLKqPOo/g==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.9.tgz", + "integrity": "sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A==", "dev": true, "requires": { - "@csstools/css-calc": "^2.1.3", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" + "@csstools/css-calc": "^2.1.4", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, "@csstools/postcss-unset-value": { @@ -31170,9 +31215,9 @@ "dev": true }, "cssdb": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.2.5.tgz", - "integrity": "sha512-leAt8/hdTCtzql9ZZi86uYAmCLzVKpJMMdjbvOGVnXFXz/BWFpBmM1MHEHU/RqtPyRYmabVmEW1DtX3YGLuuLA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.3.0.tgz", + "integrity": "sha512-c7bmItIg38DgGjSwDPZOYF/2o0QU/sSgkWOMyl8votOfgFuyiFKWPesmCGEsrGLxEA9uL540cp8LdaGEjUGsZQ==", "dev": true }, "cssesc": { @@ -35558,9 +35603,9 @@ "optional": true }, "nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true }, "nanomatch": { @@ -36329,12 +36374,12 @@ "dev": true }, "postcss": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz", + "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==", "dev": true, "requires": { - "nanoid": "^3.3.8", + "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } @@ -36392,15 +36437,15 @@ } }, "postcss-color-functional-notation": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.9.tgz", - "integrity": "sha512-WScwD3pSsIz+QP97sPkGCeJm7xUH0J18k6zV5o8O2a4cQJyv15vLUx/WFQajuJVgZhmJL5awDu8zHnqzAzm4lw==", + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.10.tgz", + "integrity": "sha512-k9qX+aXHBiLTRrWoCJuUFI6F1iF6QJQUXNVWJVSbqZgj57jDhBlOvD8gNUGl35tgqDivbGLhZeW3Ongz4feuKA==", "dev": true, "requires": { - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" } }, @@ -36447,48 +36492,48 @@ } }, "postcss-custom-media": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.5.tgz", - "integrity": "sha512-SQHhayVNgDvSAdX9NQ/ygcDQGEY+aSF4b/96z7QUX6mqL5yl/JgG/DywcF6fW9XbnCRE+aVYk+9/nqGuzOPWeQ==", + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz", + "integrity": "sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw==", "dev": true, "requires": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2" + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3" }, "dependencies": { "@csstools/media-query-list-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", - "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", + "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", "dev": true, "requires": {} } } }, "postcss-custom-properties": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.4.tgz", - "integrity": "sha512-QnW8FCCK6q+4ierwjnmXF9Y9KF8q0JkbgVfvQEMa93x1GT8FvOiUevWCN2YLaOWyByeDX8S6VFbZEeWoAoXs2A==", + "version": "14.0.6", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz", + "integrity": "sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ==", "dev": true, "requires": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" } }, "postcss-custom-selectors": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.4.tgz", - "integrity": "sha512-ASOXqNvDCE0dAJ/5qixxPeL1aOVGHGW2JwSy7HyjWNbnWTQCl+fDc968HY1jCmZI0+BaYT5CxsOiUhavpG/7eg==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz", + "integrity": "sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg==", "dev": true, "requires": { - "@csstools/cascade-layer-name-parser": "^2.0.4", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", + "@csstools/cascade-layer-name-parser": "^2.0.5", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", "postcss-selector-parser": "^7.0.0" }, "dependencies": { @@ -36568,12 +36613,12 @@ "requires": {} }, "postcss-double-position-gradients": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.1.tgz", - "integrity": "sha512-ZitCwmvOR4JzXmKw6sZblTgwV1dcfLvClcyjADuqZ5hU0Uk4SVNpvSN9w8NcJ7XuxhRYxVA8m8AB3gy+HNBQOA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.2.tgz", + "integrity": "sha512-7qTqnL7nfLRyJK/AHSVrrXOuvDDzettC+wGoienURV8v2svNbu6zJC52ruZtHaO6mfcagFmuTGFdzRsJKB3k5Q==", "dev": true, "requires": { - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0", "postcss-value-parser": "^4.2.0" } @@ -36705,15 +36750,15 @@ } }, "postcss-lab-function": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.9.tgz", - "integrity": "sha512-IGbsIXbqMDusymJAKYX+f9oakPo89wL9Pzd/qRBQOVf3EIQWT9hgvqC4Me6Dkzxp3KPuIBf6LPkjrLHe/6ZMIQ==", + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.10.tgz", + "integrity": "sha512-tqs6TCEv9tC1Riq6fOzHuHcZyhg4k3gIAMB8GGY/zA1ssGdm6puHMVE7t75aOSoFg7UD2wyrFFhbldiCMyyFTQ==", "dev": true, "requires": { - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/postcss-progressive-custom-properties": "^4.0.1", + "@csstools/css-color-parser": "^3.0.10", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", "@csstools/utilities": "^2.0.0" } }, @@ -37266,65 +37311,66 @@ } }, "postcss-preset-env": { - "version": "10.1.6", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.1.6.tgz", - "integrity": "sha512-1jRD7vttKLJ7o0mcmmYWKRLm7W14rI8K1I7Y41OeXUPEVc/CAzfTssNUeJ0zKbR+zMk4boqct/gwS/poIFF5Lg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.2.0.tgz", + "integrity": "sha512-cl13sPBbSqo1Q7Ryb19oT5NZO5IHFolRbIMdgDq4f9w1MHYiL6uZS7uSsjXJ1KzRIcX5BMjEeyxmAevVXENa3Q==", "dev": true, "requires": { "@csstools/postcss-cascade-layers": "^5.0.1", - "@csstools/postcss-color-function": "^4.0.9", - "@csstools/postcss-color-mix-function": "^3.0.9", - "@csstools/postcss-content-alt-text": "^2.0.5", - "@csstools/postcss-exponential-functions": "^2.0.8", + "@csstools/postcss-color-function": "^4.0.10", + "@csstools/postcss-color-mix-function": "^3.0.10", + "@csstools/postcss-color-mix-variadic-function-arguments": "^1.0.0", + "@csstools/postcss-content-alt-text": "^2.0.6", + "@csstools/postcss-exponential-functions": "^2.0.9", "@csstools/postcss-font-format-keywords": "^4.0.0", - "@csstools/postcss-gamut-mapping": "^2.0.9", - "@csstools/postcss-gradients-interpolation-method": "^5.0.9", - "@csstools/postcss-hwb-function": "^4.0.9", - "@csstools/postcss-ic-unit": "^4.0.1", + "@csstools/postcss-gamut-mapping": "^2.0.10", + "@csstools/postcss-gradients-interpolation-method": "^5.0.10", + "@csstools/postcss-hwb-function": "^4.0.10", + "@csstools/postcss-ic-unit": "^4.0.2", "@csstools/postcss-initial": "^2.0.1", "@csstools/postcss-is-pseudo-class": "^5.0.1", - "@csstools/postcss-light-dark-function": "^2.0.8", + "@csstools/postcss-light-dark-function": "^2.0.9", "@csstools/postcss-logical-float-and-clear": "^3.0.0", "@csstools/postcss-logical-overflow": "^2.0.0", "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", "@csstools/postcss-logical-resize": "^3.0.0", - "@csstools/postcss-logical-viewport-units": "^3.0.3", - "@csstools/postcss-media-minmax": "^2.0.8", - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.4", + "@csstools/postcss-logical-viewport-units": "^3.0.4", + "@csstools/postcss-media-minmax": "^2.0.9", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.5", "@csstools/postcss-nested-calc": "^4.0.0", "@csstools/postcss-normalize-display-values": "^4.0.0", - "@csstools/postcss-oklab-function": "^4.0.9", - "@csstools/postcss-progressive-custom-properties": "^4.0.1", - "@csstools/postcss-random-function": "^2.0.0", - "@csstools/postcss-relative-color-syntax": "^3.0.9", + "@csstools/postcss-oklab-function": "^4.0.10", + "@csstools/postcss-progressive-custom-properties": "^4.1.0", + "@csstools/postcss-random-function": "^2.0.1", + "@csstools/postcss-relative-color-syntax": "^3.0.10", "@csstools/postcss-scope-pseudo-class": "^4.0.1", - "@csstools/postcss-sign-functions": "^1.1.3", - "@csstools/postcss-stepped-value-functions": "^4.0.8", + "@csstools/postcss-sign-functions": "^1.1.4", + "@csstools/postcss-stepped-value-functions": "^4.0.9", "@csstools/postcss-text-decoration-shorthand": "^4.0.2", - "@csstools/postcss-trigonometric-functions": "^4.0.8", + "@csstools/postcss-trigonometric-functions": "^4.0.9", "@csstools/postcss-unset-value": "^4.0.0", "autoprefixer": "^10.4.21", - "browserslist": "^4.24.4", + "browserslist": "^4.24.5", "css-blank-pseudo": "^7.0.1", "css-has-pseudo": "^7.0.2", "css-prefers-color-scheme": "^10.0.0", - "cssdb": "^8.2.5", + "cssdb": "^8.3.0", "postcss-attribute-case-insensitive": "^7.0.1", "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^7.0.9", + "postcss-color-functional-notation": "^7.0.10", "postcss-color-hex-alpha": "^10.0.0", "postcss-color-rebeccapurple": "^10.0.0", - "postcss-custom-media": "^11.0.5", - "postcss-custom-properties": "^14.0.4", - "postcss-custom-selectors": "^8.0.4", + "postcss-custom-media": "^11.0.6", + "postcss-custom-properties": "^14.0.5", + "postcss-custom-selectors": "^8.0.5", "postcss-dir-pseudo-class": "^9.0.1", - "postcss-double-position-gradients": "^6.0.1", + "postcss-double-position-gradients": "^6.0.2", "postcss-focus-visible": "^10.0.1", "postcss-focus-within": "^9.0.1", "postcss-font-variant": "^5.0.0", "postcss-gap-properties": "^6.0.0", "postcss-image-set-function": "^7.0.0", - "postcss-lab-function": "^7.0.9", + "postcss-lab-function": "^7.0.10", "postcss-logical": "^8.1.0", "postcss-nesting": "^13.0.1", "postcss-opacity-percentage": "^3.0.0", diff --git a/package.json b/package.json index 0288e7670..d55cf62dd 100644 --- a/package.json +++ b/package.json @@ -49,9 +49,9 @@ "html-webpack-plugin": "5.6.3", "jsdom": "26.1.0", "mini-css-extract-plugin": "2.9.2", - "postcss": "8.5.3", + "postcss": "8.5.4", "postcss-loader": "8.1.1", - "postcss-preset-env": "10.1.6", + "postcss-preset-env": "10.2.0", "postcss-scss": "4.0.9", "sass": "1.87.0", "sass-loader": "16.0.5", From 60d21bb4b0a3534ab7427d58c0b482e164c5a6c2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Jun 2025 21:53:14 +0000 Subject: [PATCH 432/645] Update React --- package-lock.json | 44 ++++++++++++++++++++++---------------------- package.json | 4 ++-- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index b561f67eb..2c259c69b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,7 +58,7 @@ "react-blurhash": "0.3.0", "react-dom": "18.3.1", "react-lazy-load-image-component": "1.6.3", - "react-router-dom": "6.30.0", + "react-router-dom": "6.30.1", "resize-observer-polyfill": "1.5.1", "screenfull": "6.0.2", "sortablejs": "1.15.6", @@ -81,7 +81,7 @@ "@types/loadable__component": "5.13.9", "@types/lodash-es": "4.17.12", "@types/markdown-it": "14.1.2", - "@types/react": "18.3.21", + "@types/react": "18.3.23", "@types/react-dom": "18.3.7", "@types/react-lazy-load-image-component": "1.6.4", "@types/sortablejs": "1.15.8", @@ -6180,9 +6180,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.3.21", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.21.tgz", - "integrity": "sha512-gXLBtmlcRJeT09/sI4PxVwyrku6SaNUj/6cMubjE6T6XdY1fDmBL7r0nX0jbSZPU/Xr0KuwLLZh6aOYY5d91Xw==", + "version": "18.3.23", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz", + "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==", "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -18923,9 +18923,9 @@ } }, "node_modules/react-router": { - "version": "6.30.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.0.tgz", - "integrity": "sha512-D3X8FyH9nBcTSHGdEKurK7r8OYE1kKFn3d/CF+CoxbSHkxU7o37+Uh7eAHRXr6k2tSExXYO++07PeXJtA/dEhQ==", + "version": "6.30.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.1.tgz", + "integrity": "sha512-X1m21aEmxGXqENEPG3T6u0Th7g0aS4ZmoNynhbs+Cn+q+QGTLt+d5IQ2bHAXKzKcxGJjxACpVbnYQSCRcfxHlQ==", "license": "MIT", "dependencies": { "@remix-run/router": "1.23.0" @@ -18938,13 +18938,13 @@ } }, "node_modules/react-router-dom": { - "version": "6.30.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.0.tgz", - "integrity": "sha512-x30B78HV5tFk8ex0ITwzC9TTZMua4jGyA9IUlH1JLQYQTFyxr/ZxwOJq7evg1JX1qGVUcvhsmQSKdPncQrjTgA==", + "version": "6.30.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.1.tgz", + "integrity": "sha512-llKsgOkZdbPU1Eg3zK8lCn+sjD9wMRZZPuzmdWWX5SUs8OFkN5HnFVC0u5KMeMaC9aoancFI/KoLuKPqN+hxHw==", "license": "MIT", "dependencies": { "@remix-run/router": "1.23.0", - "react-router": "6.30.0" + "react-router": "6.30.1" }, "engines": { "node": ">=14.0.0" @@ -29011,9 +29011,9 @@ "dev": true }, "@types/react": { - "version": "18.3.21", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.21.tgz", - "integrity": "sha512-gXLBtmlcRJeT09/sI4PxVwyrku6SaNUj/6cMubjE6T6XdY1fDmBL7r0nX0jbSZPU/Xr0KuwLLZh6aOYY5d91Xw==", + "version": "18.3.23", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz", + "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==", "requires": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -37821,20 +37821,20 @@ } }, "react-router": { - "version": "6.30.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.0.tgz", - "integrity": "sha512-D3X8FyH9nBcTSHGdEKurK7r8OYE1kKFn3d/CF+CoxbSHkxU7o37+Uh7eAHRXr6k2tSExXYO++07PeXJtA/dEhQ==", + "version": "6.30.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.1.tgz", + "integrity": "sha512-X1m21aEmxGXqENEPG3T6u0Th7g0aS4ZmoNynhbs+Cn+q+QGTLt+d5IQ2bHAXKzKcxGJjxACpVbnYQSCRcfxHlQ==", "requires": { "@remix-run/router": "1.23.0" } }, "react-router-dom": { - "version": "6.30.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.0.tgz", - "integrity": "sha512-x30B78HV5tFk8ex0ITwzC9TTZMua4jGyA9IUlH1JLQYQTFyxr/ZxwOJq7evg1JX1qGVUcvhsmQSKdPncQrjTgA==", + "version": "6.30.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.1.tgz", + "integrity": "sha512-llKsgOkZdbPU1Eg3zK8lCn+sjD9wMRZZPuzmdWWX5SUs8OFkN5HnFVC0u5KMeMaC9aoancFI/KoLuKPqN+hxHw==", "requires": { "@remix-run/router": "1.23.0", - "react-router": "6.30.0" + "react-router": "6.30.1" } }, "react-transition-group": { diff --git a/package.json b/package.json index 0288e7670..d84205b12 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "@types/loadable__component": "5.13.9", "@types/lodash-es": "4.17.12", "@types/markdown-it": "14.1.2", - "@types/react": "18.3.21", + "@types/react": "18.3.23", "@types/react-dom": "18.3.7", "@types/react-lazy-load-image-component": "1.6.4", "@types/sortablejs": "1.15.8", @@ -124,7 +124,7 @@ "react-blurhash": "0.3.0", "react-dom": "18.3.1", "react-lazy-load-image-component": "1.6.3", - "react-router-dom": "6.30.0", + "react-router-dom": "6.30.1", "resize-observer-polyfill": "1.5.1", "screenfull": "6.0.2", "sortablejs": "1.15.6", From 5ff898d5dfb2cf6f2e865d1b28702cd2252481f0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Jun 2025 21:53:36 +0000 Subject: [PATCH 433/645] Update dependency globals to v16.2.0 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index b561f67eb..2d3e20a54 100644 --- a/package-lock.json +++ b/package-lock.json @@ -107,7 +107,7 @@ "expose-loader": "5.0.1", "fast-glob": "3.3.3", "fork-ts-checker-webpack-plugin": "9.1.0", - "globals": "16.1.0", + "globals": "16.2.0", "html-loader": "5.1.0", "html-webpack-plugin": "5.6.3", "jsdom": "26.1.0", @@ -12694,9 +12694,9 @@ } }, "node_modules/globals": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.1.0.tgz", - "integrity": "sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.2.0.tgz", + "integrity": "sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==", "dev": true, "license": "MIT", "engines": { @@ -33620,9 +33620,9 @@ } }, "globals": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.1.0.tgz", - "integrity": "sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.2.0.tgz", + "integrity": "sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==", "dev": true }, "globalthis": { diff --git a/package.json b/package.json index 0288e7670..c223a56b4 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "expose-loader": "5.0.1", "fast-glob": "3.3.3", "fork-ts-checker-webpack-plugin": "9.1.0", - "globals": "16.1.0", + "globals": "16.2.0", "html-loader": "5.1.0", "html-webpack-plugin": "5.6.3", "jsdom": "26.1.0", From 3ab55f65cc51a8d9ef09433612d87020bdf799ed Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Jun 2025 21:57:34 +0000 Subject: [PATCH 434/645] Update Webpack --- package-lock.json | 32 ++++++++++++++++---------------- package.json | 4 ++-- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 27d1a0658..5642d828f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -130,10 +130,10 @@ "typescript": "5.8.3", "typescript-eslint": "8.32.0", "vitest": "3.2.1", - "webpack": "5.99.8", + "webpack": "5.99.9", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "6.0.1", - "webpack-dev-server": "5.2.1", + "webpack-dev-server": "5.2.2", "webpack-merge": "6.0.1", "worker-loader": "3.0.8" }, @@ -24745,9 +24745,9 @@ } }, "node_modules/webpack": { - "version": "5.99.8", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.8.tgz", - "integrity": "sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==", + "version": "5.99.9", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz", + "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", "dev": true, "license": "MIT", "dependencies": { @@ -24980,9 +24980,9 @@ } }, "node_modules/webpack-dev-server": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.1.tgz", - "integrity": "sha512-ml/0HIj9NLpVKOMq+SuBPLHcmbG+TGIjXRHsYfZwocUBIqEvws8NnS/V9AFQ5FKP+tgn5adwVwRrTEpGL33QFQ==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", + "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", "dev": true, "license": "MIT", "dependencies": { @@ -25002,7 +25002,7 @@ "connect-history-api-fallback": "^2.0.0", "express": "^4.21.2", "graceful-fs": "^4.2.6", - "http-proxy-middleware": "^2.0.7", + "http-proxy-middleware": "^2.0.9", "ipaddr.js": "^2.1.0", "launch-editor": "^2.6.1", "open": "^10.0.3", @@ -41943,9 +41943,9 @@ "dev": true }, "webpack": { - "version": "5.99.8", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.8.tgz", - "integrity": "sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==", + "version": "5.99.9", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz", + "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.7", @@ -42093,9 +42093,9 @@ } }, "webpack-dev-server": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.1.tgz", - "integrity": "sha512-ml/0HIj9NLpVKOMq+SuBPLHcmbG+TGIjXRHsYfZwocUBIqEvws8NnS/V9AFQ5FKP+tgn5adwVwRrTEpGL33QFQ==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", + "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", "dev": true, "requires": { "@types/bonjour": "^3.5.13", @@ -42114,7 +42114,7 @@ "connect-history-api-fallback": "^2.0.0", "express": "^4.21.2", "graceful-fs": "^4.2.6", - "http-proxy-middleware": "^2.0.7", + "http-proxy-middleware": "^2.0.9", "ipaddr.js": "^2.1.0", "launch-editor": "^2.6.1", "open": "^10.0.3", diff --git a/package.json b/package.json index 000bc2f69..3e1980767 100644 --- a/package.json +++ b/package.json @@ -67,10 +67,10 @@ "typescript": "5.8.3", "typescript-eslint": "8.32.0", "vitest": "3.2.1", - "webpack": "5.99.8", + "webpack": "5.99.9", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "6.0.1", - "webpack-dev-server": "5.2.1", + "webpack-dev-server": "5.2.2", "webpack-merge": "6.0.1", "worker-loader": "3.0.8" }, From bd570128154bfae6e23b8e01f0d2636e66803b76 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Jun 2025 22:01:06 +0000 Subject: [PATCH 435/645] Update dependency typescript-eslint to v8.33.1 --- package-lock.json | 567 ++++++++++++++-------------------------------- package.json | 2 +- 2 files changed, 172 insertions(+), 397 deletions(-) diff --git a/package-lock.json b/package-lock.json index 824a97af5..cb998e3c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -128,7 +128,7 @@ "stylelint-scss": "6.12.0", "ts-loader": "9.5.2", "typescript": "5.8.3", - "typescript-eslint": "8.32.0", + "typescript-eslint": "8.33.1", "vitest": "3.2.1", "webpack": "5.99.8", "webpack-bundle-analyzer": "4.10.2", @@ -6154,19 +6154,19 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.0.tgz", - "integrity": "sha512-/jU9ettcntkBFmWUzzGgsClEi2ZFiikMX5eEQsmxIAWMOn4H3D4rvHssstmAHGVvrYnaMqdWWWg0b5M6IN/MTQ==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.1.tgz", + "integrity": "sha512-TDCXj+YxLgtvxvFlAvpoRv9MAncDLBV2oT9Bd7YBGC/b/sEURoOYuIwLI99rjWOfY3QtDzO+mk0n4AmdFExW8A==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.32.0", - "@typescript-eslint/type-utils": "8.32.0", - "@typescript-eslint/utils": "8.32.0", - "@typescript-eslint/visitor-keys": "8.32.0", + "@typescript-eslint/scope-manager": "8.33.1", + "@typescript-eslint/type-utils": "8.33.1", + "@typescript-eslint/utils": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1", "graphemer": "^1.4.0", - "ignore": "^5.3.1", + "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, @@ -6178,11 +6178,21 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "@typescript-eslint/parser": "^8.33.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/@typescript-eslint/parser": { "version": "8.33.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.1.tgz", @@ -6208,176 +6218,6 @@ "typescript": ">=4.8.4 <5.9.0" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/project-service": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.1.tgz", - "integrity": "sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.33.1", - "@typescript-eslint/types": "^8.33.1", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.1.tgz", - "integrity": "sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.1.tgz", - "integrity": "sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.1.tgz", - "integrity": "sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.1.tgz", - "integrity": "sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.33.1", - "@typescript-eslint/tsconfig-utils": "8.33.1", - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.1.tgz", - "integrity": "sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.33.1", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/project-service": { "version": "8.34.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.0.tgz", @@ -6415,14 +6255,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.0.tgz", - "integrity": "sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.1.tgz", + "integrity": "sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.32.0", - "@typescript-eslint/visitor-keys": "8.32.0" + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6450,14 +6290,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.32.0.tgz", - "integrity": "sha512-t2vouuYQKEKSLtJaa5bB4jHeha2HJczQ6E5IXPDPgIty9EqcJxpr1QHQ86YyIPwDwxvUmLfP2YADQ5ZY4qddZg==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.33.1.tgz", + "integrity": "sha512-1cG37d9xOkhlykom55WVwG2QRNC7YXlxMaMzqw2uPeJixBFfKWZgaP/hjAObqMN/u3fr5BrTwTnc31/L9jQ2ww==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.32.0", - "@typescript-eslint/utils": "8.32.0", + "@typescript-eslint/typescript-estree": "8.33.1", + "@typescript-eslint/utils": "8.33.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -6474,9 +6314,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.0.tgz", - "integrity": "sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.1.tgz", + "integrity": "sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==", "dev": true, "license": "MIT", "engines": { @@ -6488,14 +6328,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.0.tgz", - "integrity": "sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.1.tgz", + "integrity": "sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.32.0", - "@typescript-eslint/visitor-keys": "8.32.0", + "@typescript-eslint/project-service": "8.33.1", + "@typescript-eslint/tsconfig-utils": "8.33.1", + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -6514,6 +6356,45 @@ "typescript": ">=4.8.4 <5.9.0" } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/project-service": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.1.tgz", + "integrity": "sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.33.1", + "@typescript-eslint/types": "^8.33.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.1.tgz", + "integrity": "sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -6554,16 +6435,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.32.0.tgz", - "integrity": "sha512-8S9hXau6nQ/sYVtC3D6ISIDoJzS1NsCK+gluVhLN2YkBPX+/1wkwyUiDKnxRh15579WoOIyVWnoyIf3yGI9REw==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.1.tgz", + "integrity": "sha512-52HaBiEQUaRYqAXpfzWSR2U3gxk92Kw006+xZpElaPMg3C4PgM+A5LqwoQI1f9E5aZ/qlxAZxzm42WX+vn92SQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.32.0", - "@typescript-eslint/types": "8.32.0", - "@typescript-eslint/typescript-estree": "8.32.0" + "@typescript-eslint/scope-manager": "8.33.1", + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/typescript-estree": "8.33.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6578,13 +6459,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.0.tgz", - "integrity": "sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.1.tgz", + "integrity": "sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/types": "8.33.1", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -6596,9 +6477,9 @@ } }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -23992,40 +23873,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.32.0.tgz", - "integrity": "sha512-UMq2kxdXCzinFFPsXc9o2ozIpYCCOiEC46MG3yEh5Vipq6BO27otTtEBZA1fQ66DulEUgE97ucQ/3YY66CPg0A==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.33.1.tgz", + "integrity": "sha512-AgRnV4sKkWOiZ0Kjbnf5ytTJXMUZQ0qhSVdQtDNYLPLnjsATEYhaO94GlRQwi4t4gO8FfjM6NnikHeKjUm8D7A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.32.0", - "@typescript-eslint/parser": "8.32.0", - "@typescript-eslint/utils": "8.32.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.0.tgz", - "integrity": "sha512-B2MdzyWxCE2+SqiZHAjPphft+/2x2FlO9YBx7eKE1BCb+rqBlQdhtAEhzIEdozHd55DXPmxBdpMygFJjfjjA9A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.32.0", - "@typescript-eslint/types": "8.32.0", - "@typescript-eslint/typescript-estree": "8.32.0", - "@typescript-eslint/visitor-keys": "8.32.0", - "debug": "^4.3.4" + "@typescript-eslint/eslint-plugin": "8.33.1", + "@typescript-eslint/parser": "8.33.1", + "@typescript-eslint/utils": "8.33.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -29002,20 +28858,28 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.0.tgz", - "integrity": "sha512-/jU9ettcntkBFmWUzzGgsClEi2ZFiikMX5eEQsmxIAWMOn4H3D4rvHssstmAHGVvrYnaMqdWWWg0b5M6IN/MTQ==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.1.tgz", + "integrity": "sha512-TDCXj+YxLgtvxvFlAvpoRv9MAncDLBV2oT9Bd7YBGC/b/sEURoOYuIwLI99rjWOfY3QtDzO+mk0n4AmdFExW8A==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.32.0", - "@typescript-eslint/type-utils": "8.32.0", - "@typescript-eslint/utils": "8.32.0", - "@typescript-eslint/visitor-keys": "8.32.0", + "@typescript-eslint/scope-manager": "8.33.1", + "@typescript-eslint/type-utils": "8.33.1", + "@typescript-eslint/utils": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1", "graphemer": "^1.4.0", - "ignore": "^5.3.1", + "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" + }, + "dependencies": { + "ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true + } } }, "@typescript-eslint/parser": { @@ -29029,100 +28893,6 @@ "@typescript-eslint/typescript-estree": "8.33.1", "@typescript-eslint/visitor-keys": "8.33.1", "debug": "^4.3.4" - }, - "dependencies": { - "@typescript-eslint/project-service": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.1.tgz", - "integrity": "sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw==", - "dev": true, - "requires": { - "@typescript-eslint/tsconfig-utils": "^8.33.1", - "@typescript-eslint/types": "^8.33.1", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.1.tgz", - "integrity": "sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1" - } - }, - "@typescript-eslint/tsconfig-utils": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.1.tgz", - "integrity": "sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==", - "dev": true, - "requires": {} - }, - "@typescript-eslint/types": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.1.tgz", - "integrity": "sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.1.tgz", - "integrity": "sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==", - "dev": true, - "requires": { - "@typescript-eslint/project-service": "8.33.1", - "@typescript-eslint/tsconfig-utils": "8.33.1", - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.1.tgz", - "integrity": "sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "8.33.1", - "eslint-visitor-keys": "^4.2.0" - } - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true - }, - "minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true - } } }, "@typescript-eslint/project-service": { @@ -29145,13 +28915,13 @@ } }, "@typescript-eslint/scope-manager": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.0.tgz", - "integrity": "sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.1.tgz", + "integrity": "sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==", "dev": true, "requires": { - "@typescript-eslint/types": "8.32.0", - "@typescript-eslint/visitor-keys": "8.32.0" + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1" } }, "@typescript-eslint/tsconfig-utils": { @@ -29162,31 +28932,33 @@ "requires": {} }, "@typescript-eslint/type-utils": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.32.0.tgz", - "integrity": "sha512-t2vouuYQKEKSLtJaa5bB4jHeha2HJczQ6E5IXPDPgIty9EqcJxpr1QHQ86YyIPwDwxvUmLfP2YADQ5ZY4qddZg==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.33.1.tgz", + "integrity": "sha512-1cG37d9xOkhlykom55WVwG2QRNC7YXlxMaMzqw2uPeJixBFfKWZgaP/hjAObqMN/u3fr5BrTwTnc31/L9jQ2ww==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "8.32.0", - "@typescript-eslint/utils": "8.32.0", + "@typescript-eslint/typescript-estree": "8.33.1", + "@typescript-eslint/utils": "8.33.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" } }, "@typescript-eslint/types": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.0.tgz", - "integrity": "sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.1.tgz", + "integrity": "sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.0.tgz", - "integrity": "sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.1.tgz", + "integrity": "sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==", "dev": true, "requires": { - "@typescript-eslint/types": "8.32.0", - "@typescript-eslint/visitor-keys": "8.32.0", + "@typescript-eslint/project-service": "8.33.1", + "@typescript-eslint/tsconfig-utils": "8.33.1", + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -29195,6 +28967,24 @@ "ts-api-utils": "^2.1.0" }, "dependencies": { + "@typescript-eslint/project-service": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.1.tgz", + "integrity": "sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw==", + "dev": true, + "requires": { + "@typescript-eslint/tsconfig-utils": "^8.33.1", + "@typescript-eslint/types": "^8.33.1", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/tsconfig-utils": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.1.tgz", + "integrity": "sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==", + "dev": true, + "requires": {} + }, "brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -29222,31 +29012,31 @@ } }, "@typescript-eslint/utils": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.32.0.tgz", - "integrity": "sha512-8S9hXau6nQ/sYVtC3D6ISIDoJzS1NsCK+gluVhLN2YkBPX+/1wkwyUiDKnxRh15579WoOIyVWnoyIf3yGI9REw==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.1.tgz", + "integrity": "sha512-52HaBiEQUaRYqAXpfzWSR2U3gxk92Kw006+xZpElaPMg3C4PgM+A5LqwoQI1f9E5aZ/qlxAZxzm42WX+vn92SQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.32.0", - "@typescript-eslint/types": "8.32.0", - "@typescript-eslint/typescript-estree": "8.32.0" + "@typescript-eslint/scope-manager": "8.33.1", + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/typescript-estree": "8.33.1" } }, "@typescript-eslint/visitor-keys": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.0.tgz", - "integrity": "sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.1.tgz", + "integrity": "sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==", "dev": true, "requires": { - "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/types": "8.33.1", "eslint-visitor-keys": "^4.2.0" }, "dependencies": { "eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true } } @@ -41345,29 +41135,14 @@ "dev": true }, "typescript-eslint": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.32.0.tgz", - "integrity": "sha512-UMq2kxdXCzinFFPsXc9o2ozIpYCCOiEC46MG3yEh5Vipq6BO27otTtEBZA1fQ66DulEUgE97ucQ/3YY66CPg0A==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.33.1.tgz", + "integrity": "sha512-AgRnV4sKkWOiZ0Kjbnf5ytTJXMUZQ0qhSVdQtDNYLPLnjsATEYhaO94GlRQwi4t4gO8FfjM6NnikHeKjUm8D7A==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "8.32.0", - "@typescript-eslint/parser": "8.32.0", - "@typescript-eslint/utils": "8.32.0" - }, - "dependencies": { - "@typescript-eslint/parser": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.0.tgz", - "integrity": "sha512-B2MdzyWxCE2+SqiZHAjPphft+/2x2FlO9YBx7eKE1BCb+rqBlQdhtAEhzIEdozHd55DXPmxBdpMygFJjfjjA9A==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "8.32.0", - "@typescript-eslint/types": "8.32.0", - "@typescript-eslint/typescript-estree": "8.32.0", - "@typescript-eslint/visitor-keys": "8.32.0", - "debug": "^4.3.4" - } - } + "@typescript-eslint/eslint-plugin": "8.33.1", + "@typescript-eslint/parser": "8.33.1", + "@typescript-eslint/utils": "8.33.1" } }, "uc.micro": { diff --git a/package.json b/package.json index eae4fe6ee..6a9f8d36f 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "stylelint-scss": "6.12.0", "ts-loader": "9.5.2", "typescript": "5.8.3", - "typescript-eslint": "8.32.0", + "typescript-eslint": "8.33.1", "vitest": "3.2.1", "webpack": "5.99.8", "webpack-bundle-analyzer": "4.10.2", From 19387072296db68fb03d1bb973e6e53629fa7989 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Thu, 27 Mar 2025 20:06:11 +0300 Subject: [PATCH 436/645] Migrate DVR page to React --- .../drawer/sections/LiveTvDrawerSection.tsx | 2 +- .../dashboard/controllers/livetvsettings.html | 120 ----- .../dashboard/controllers/livetvsettings.js | 133 ------ src/apps/dashboard/routes/_asyncRoutes.ts | 1 + src/apps/dashboard/routes/_legacyRoutes.ts | 7 - .../dashboard/routes/livetv/recordings.tsx | 414 ++++++++++++++++++ src/strings/en-us.json | 1 + 7 files changed, 417 insertions(+), 261 deletions(-) delete mode 100644 src/apps/dashboard/controllers/livetvsettings.html delete mode 100644 src/apps/dashboard/controllers/livetvsettings.js create mode 100644 src/apps/dashboard/routes/livetv/recordings.tsx diff --git a/src/apps/dashboard/components/drawer/sections/LiveTvDrawerSection.tsx b/src/apps/dashboard/components/drawer/sections/LiveTvDrawerSection.tsx index bee9cc7b9..bde1c91b5 100644 --- a/src/apps/dashboard/components/drawer/sections/LiveTvDrawerSection.tsx +++ b/src/apps/dashboard/components/drawer/sections/LiveTvDrawerSection.tsx @@ -29,7 +29,7 @@ const LiveTvDrawerSection = () => { - + diff --git a/src/apps/dashboard/controllers/livetvsettings.html b/src/apps/dashboard/controllers/livetvsettings.html deleted file mode 100644 index 78e70fa8f..000000000 --- a/src/apps/dashboard/controllers/livetvsettings.html +++ /dev/null @@ -1,120 +0,0 @@ -
-
-
-
-
-

${HeaderDVR}

-
-
- -
-
- -
${LabelNumberOfGuideDaysHelp}
-
-
-
-
- -
- -
-
${LabelRecordingPathHelp}
-
-
-
-
- -
- -
-
-
-
-
- -
- -
-
-
-

${HeaderDefaultRecordingSettings}

-
-
-
- -
-
- ${MinutesBefore} -
-
-
-
-
-
- -
-
- ${MinutesAfter} -
-
-
-
-
-

${HeaderRecordingPostProcessing}

-
-
-
- -
- -
-
-
- -
${LabelPostProcessorArgumentsHelp}
-
-
-
-

${HeaderRecordingMetadataSaving}

- -
- -
${SaveRecordingNFOHelp}
-
- -
- -
${SaveRecordingImagesHelp}
-
-
-
-
- -
-
-
-
-
diff --git a/src/apps/dashboard/controllers/livetvsettings.js b/src/apps/dashboard/controllers/livetvsettings.js deleted file mode 100644 index 0fd30ee5b..000000000 --- a/src/apps/dashboard/controllers/livetvsettings.js +++ /dev/null @@ -1,133 +0,0 @@ -import 'jquery'; - -import loading from 'components/loading/loading'; -import globalize from 'lib/globalize'; -import 'elements/emby-button/emby-button'; -import Dashboard from 'utils/dashboard'; -import alert from 'components/alert'; - -function loadPage(page, config) { - page.querySelector('.liveTvSettingsForm').classList.remove('hide'); - page.querySelector('.noLiveTvServices')?.classList.add('hide'); - page.querySelector('#selectGuideDays').value = config.GuideDays || ''; - page.querySelector('#txtPrePaddingMinutes').value = config.PrePaddingSeconds / 60; - page.querySelector('#txtPostPaddingMinutes').value = config.PostPaddingSeconds / 60; - page.querySelector('#txtRecordingPath').value = config.RecordingPath || ''; - page.querySelector('#txtMovieRecordingPath').value = config.MovieRecordingPath || ''; - page.querySelector('#txtSeriesRecordingPath').value = config.SeriesRecordingPath || ''; - page.querySelector('#txtPostProcessor').value = config.RecordingPostProcessor || ''; - page.querySelector('#txtPostProcessorArguments').value = config.RecordingPostProcessorArguments || ''; - page.querySelector('#chkSaveRecordingNFO').checked = config.SaveRecordingNFO; - page.querySelector('#chkSaveRecordingImages').checked = config.SaveRecordingImages; - loading.hide(); -} - -function onSubmit() { - loading.show(); - const form = this; - ApiClient.getNamedConfiguration('livetv').then(function (config) { - config.GuideDays = form.querySelector('#selectGuideDays').value || null; - const recordingPath = form.querySelector('#txtRecordingPath').value || null; - const movieRecordingPath = form.querySelector('#txtMovieRecordingPath').value || null; - const seriesRecordingPath = form.querySelector('#txtSeriesRecordingPath').value || null; - const recordingPathChanged = recordingPath != config.RecordingPath || movieRecordingPath != config.MovieRecordingPath || seriesRecordingPath != config.SeriesRecordingPath; - config.RecordingPath = recordingPath; - config.MovieRecordingPath = movieRecordingPath; - config.SeriesRecordingPath = seriesRecordingPath; - config.RecordingEncodingFormat = 'mkv'; - config.PrePaddingSeconds = 60 * form.querySelector('#txtPrePaddingMinutes').value; - config.PostPaddingSeconds = 60 * form.querySelector('#txtPostPaddingMinutes').value; - config.RecordingPostProcessor = form.querySelector('#txtPostProcessor').value; - config.RecordingPostProcessorArguments = form.querySelector('#txtPostProcessorArguments').value; - config.SaveRecordingNFO = form.querySelector('#chkSaveRecordingNFO').checked; - config.SaveRecordingImages = form.querySelector('#chkSaveRecordingImages').checked; - ApiClient.updateNamedConfiguration('livetv', config).then(function () { - Dashboard.processServerConfigurationUpdateResult(); - showSaveMessage(recordingPathChanged); - }); - }); - return false; -} - -function showSaveMessage(recordingPathChanged) { - let msg = ''; - - if (recordingPathChanged) { - msg += globalize.translate('MessageChangeRecordingPath'); - } - - if (msg) { - alert(msg); - } -} - -$(document).on('pageinit', '#liveTvSettingsPage', function () { - const page = this; - $('.liveTvSettingsForm').off('submit', onSubmit).on('submit', onSubmit); - $('#btnSelectRecordingPath', page).on('click.selectDirectory', function () { - import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { - const picker = new DirectoryBrowser(); - picker.show({ - callback: function (path) { - if (path) { - page.querySelector('#txtRecordingPath').value = path; - } - - picker.close(); - }, - validateWriteable: true - }); - }); - }); - $('#btnSelectMovieRecordingPath', page).on('click.selectDirectory', function () { - import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { - const picker = new DirectoryBrowser(); - picker.show({ - callback: function (path) { - if (path) { - page.querySelector('#txtMovieRecordingPath').value = path; - } - - picker.close(); - }, - validateWriteable: true - }); - }); - }); - $('#btnSelectSeriesRecordingPath', page).on('click.selectDirectory', function () { - import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { - const picker = new DirectoryBrowser(); - picker.show({ - callback: function (path) { - if (path) { - page.querySelector('#txtSeriesRecordingPath').value = path; - } - - picker.close(); - }, - validateWriteable: true - }); - }); - }); - $('#btnSelectPostProcessorPath', page).on('click.selectDirectory', function () { - import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { - const picker = new DirectoryBrowser(); - picker.show({ - includeFiles: true, - callback: function (path) { - if (path) { - page.querySelector('#txtPostProcessor').value = path; - } - - picker.close(); - } - }); - }); - }); -}).on('pageshow', '#liveTvSettingsPage', function () { - loading.show(); - const page = this; - ApiClient.getNamedConfiguration('livetv').then(function (config) { - loadPage(page, config); - }); -}); diff --git a/src/apps/dashboard/routes/_asyncRoutes.ts b/src/apps/dashboard/routes/_asyncRoutes.ts index 268e90080..e1e741606 100644 --- a/src/apps/dashboard/routes/_asyncRoutes.ts +++ b/src/apps/dashboard/routes/_asyncRoutes.ts @@ -11,6 +11,7 @@ export const ASYNC_ADMIN_ROUTES: AsyncRoute[] = [ { path: 'libraries/display', type: AppType.Dashboard }, { path: 'libraries/metadata', type: AppType.Dashboard }, { path: 'libraries/nfo', type: AppType.Dashboard }, + { path: 'livetv/recordings', type: AppType.Dashboard }, { path: 'logs', type: AppType.Dashboard }, { path: 'logs/:file', page: 'logs/file', type: AppType.Dashboard }, { path: 'playback/resume', type: AppType.Dashboard }, diff --git a/src/apps/dashboard/routes/_legacyRoutes.ts b/src/apps/dashboard/routes/_legacyRoutes.ts index 00ca6f057..06bfb1a14 100644 --- a/src/apps/dashboard/routes/_legacyRoutes.ts +++ b/src/apps/dashboard/routes/_legacyRoutes.ts @@ -44,13 +44,6 @@ export const LEGACY_ADMIN_ROUTES: LegacyRoute[] = [ controller: 'livetvguideprovider', view: 'livetvguideprovider.html' } - }, { - path: 'recordings', - pageProps: { - appType: AppType.Dashboard, - controller: 'livetvsettings', - view: 'livetvsettings.html' - } }, { path: 'livetv', pageProps: { diff --git a/src/apps/dashboard/routes/livetv/recordings.tsx b/src/apps/dashboard/routes/livetv/recordings.tsx new file mode 100644 index 000000000..3307c1c54 --- /dev/null +++ b/src/apps/dashboard/routes/livetv/recordings.tsx @@ -0,0 +1,414 @@ +import React, { useCallback, useEffect, useState } from 'react'; +import Box from '@mui/material/Box'; +import MenuItem from '@mui/material/MenuItem'; +import Stack from '@mui/material/Stack'; +import TextField from '@mui/material/TextField'; +import Typography from '@mui/material/Typography'; +import Page from 'components/Page'; +import { QUERY_KEY, useNamedConfiguration } from 'hooks/useNamedConfiguration'; +import globalize from 'lib/globalize'; +import { ActionFunctionArgs, Form, useActionData, useNavigation, useSubmit } from 'react-router-dom'; +import type { LiveTvOptions } from '@jellyfin/sdk/lib/generated-client/models/live-tv-options'; +import Loading from 'components/loading/LoadingComponent'; +import Alert from '@mui/material/Alert'; +import InputAdornment from '@mui/material/InputAdornment'; +import IconButton from '@mui/material/IconButton'; +import SearchIcon from '@mui/icons-material/Search'; +import DirectoryBrowser from 'components/directorybrowser/directorybrowser'; +import FormControl from '@mui/material/FormControl'; +import FormControlLabel from '@mui/material/FormControlLabel'; +import Checkbox from '@mui/material/Checkbox'; +import FormHelperText from '@mui/material/FormHelperText'; +import Button from '@mui/material/Button'; +import { ServerConnections } from 'lib/jellyfin-apiclient'; +import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api'; +import { queryClient } from 'utils/query/queryClient'; +import { ActionData } from 'types/actionData'; + +const CONFIG_KEY = 'livetv'; + +export const action = async ({ request }: ActionFunctionArgs) => { + const api = ServerConnections.getCurrentApi(); + if (!api) throw new Error('No Api instance available'); + + const data = await request.json() as LiveTvOptions; + + await getConfigurationApi(api) + .updateNamedConfiguration({ key: CONFIG_KEY, body: data }); + + void queryClient.invalidateQueries({ + queryKey: [ QUERY_KEY, CONFIG_KEY ] + }); + + return { + isSaved: true + }; +}; + +export const Component = () => { + const navigation = useNavigation(); + const actionData = useActionData() as ActionData | undefined; + const { data: initialConfig, isPending, isError } = useNamedConfiguration(CONFIG_KEY); + const [ config, setConfig ] = useState(null); + const [ prePaddingMinutes, setPrePaddingMinutes ] = useState(''); + const [ postPaddingMinutes, setPostPaddingMinutes ] = useState(''); + const isSubmitting = navigation.state === 'submitting'; + const submit = useSubmit(); + + useEffect(() => { + if (initialConfig && config == null) { + setConfig(initialConfig); + if (initialConfig.PrePaddingSeconds) { + setPrePaddingMinutes((initialConfig.PrePaddingSeconds / 60).toString()); + } + if (initialConfig.PostPaddingSeconds) { + setPostPaddingMinutes((initialConfig.PostPaddingSeconds / 60).toString()); + } + } + }, [ initialConfig, config ]); + + const onPrePaddingMinutesChange = useCallback((e: React.ChangeEvent) => { + setPrePaddingMinutes(e.target.value); + setConfig({ + ...config, + PrePaddingSeconds: parseInt(e.target.value, 10) * 60 + }); + }, [ config ]); + + const onPostPaddingMinutesChange = useCallback((e: React.ChangeEvent) => { + setPostPaddingMinutes(e.target.value); + setConfig({ + ...config, + PostPaddingSeconds: parseInt(e.target.value, 10) * 60 + }); + }, [ config ]); + + const onChange = useCallback((e: React.ChangeEvent) => { + setConfig({ + ...config, + [e.target.name]: e.target.value + }); + }, [ config ]); + + const onCheckboxChange = useCallback((e: React.ChangeEvent) => { + setConfig({ + ...config, + [e.target.name]: e.target.checked + }); + }, [ config ]); + + const showRecordingPathPicker = useCallback(() => { + const picker = new DirectoryBrowser(); + + picker.show({ + callback: (path: string) => { + if (path) { + setConfig({ + ...config, + RecordingPath: path + }); + } + + picker.close(); + }, + validateWriteable: true + }); + }, [ config ]); + + const showMovieRecordingPathPicker = useCallback(() => { + const picker = new DirectoryBrowser(); + + picker.show({ + callback: (path: string) => { + if (path) { + setConfig({ + ...config, + MovieRecordingPath: path + }); + } + + picker.close(); + }, + validateWriteable: true + }); + }, [ config ]); + + const showSeriesRecordingPathPicker = useCallback(() => { + const picker = new DirectoryBrowser(); + + picker.show({ + callback: (path: string) => { + if (path) { + setConfig({ + ...config, + SeriesRecordingPath: path + }); + } + + picker.close(); + }, + validateWriteable: true + }); + }, [ config ]); + + const showPostProcessorPicker = useCallback(() => { + const picker = new DirectoryBrowser(); + + picker.show({ + callback: (path: string) => { + if (path) { + setConfig({ + ...config, + RecordingPostProcessor: path + }); + } + + picker.close(); + }, + validateWriteable: true + }); + }, [ config ]); + + const onSubmit = useCallback((e: React.FormEvent) => { + e.preventDefault(); + if (config) { + submit( + JSON.stringify(config), + { method: 'post', encType: 'application/json' } + ); + } + }, [ config, submit ]); + + if (isPending || !config) { + return ; + } + + return ( + + + {isError ? ( + {globalize.translate('LiveTVPageLoadError')} + ) : ( +
+ + {globalize.translate('HeaderDVR')} + + {(!isSubmitting && actionData?.isSaved) && ( + + {globalize.translate('SettingsSaved')} + + )} + + + {globalize.translate('Auto')} + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + + + + + + + ) + }, + + inputLabel: { + shrink: !!config.RecordingPath + } + }} + /> + + + + + + + ) + }, + + inputLabel: { + shrink: !!config.MovieRecordingPath + } + }} + /> + + + + + + + ) + }, + + inputLabel: { + shrink: !!config.SeriesRecordingPath + } + }} + /> + + {globalize.translate('HeaderDefaultRecordingSettings')} + + + {globalize.translate('MinutesBefore')} + + ) + } + }} + /> + + + {globalize.translate('MinutesAfter')} + + ) + } + }} + /> + + {globalize.translate('HeaderRecordingPostProcessing')} + + + + + + + ) + }, + + inputLabel: { + shrink: !!config.RecordingPostProcessor + } + }} + /> + + + + {globalize.translate('HeaderRecordingMetadataSaving')} + + + + } + label={globalize.translate('SaveRecordingNFO')} + /> + {globalize.translate('SaveRecordingNFOHelp')} + + + + + } + label={globalize.translate('SaveRecordingImages')} + /> + {globalize.translate('SaveRecordingImagesHelp')} + + + + +
+ )} +
+
+ ); +}; + +Component.displayName = 'LiveTvRecordingsPage'; diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 6909988d7..6f8a7339c 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1052,6 +1052,7 @@ "Live": "Live", "LiveBroadcasts": "Live broadcasts", "LiveTV": "Live TV", + "LiveTVPageLoadError": "Failed to load recordings page", "Localization": "Localization", "LogLevel.Trace": "Trace", "LogLevel.Debug": "Debug", From 45a3cb4137641f4a835cf3c9b5d7273663a8b2c9 Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Wed, 11 Jun 2025 01:09:55 +0300 Subject: [PATCH 437/645] Apply review feedback Co-authored-by: Bill Thornton --- .../features/plugins/components/NewRepositoryForm.tsx | 6 +++--- src/strings/en-us.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/apps/dashboard/features/plugins/components/NewRepositoryForm.tsx b/src/apps/dashboard/features/plugins/components/NewRepositoryForm.tsx index 7cc2a6912..122d2c231 100644 --- a/src/apps/dashboard/features/plugins/components/NewRepositoryForm.tsx +++ b/src/apps/dashboard/features/plugins/components/NewRepositoryForm.tsx @@ -23,9 +23,9 @@ const NewRepositoryForm = ({ open, onClose, onAdd }: IProps) => { const data = Object.fromEntries(formData.entries()); const repository: RepositoryInfo = { - 'Name': data.Name?.toString(), - 'Url': data.Url?.toString(), - 'Enabled': true + Name: data.Name?.toString(), + Url: data.Url?.toString(), + Enabled: true }; onAdd(repository); diff --git a/src/strings/en-us.json b/src/strings/en-us.json index d312cc9c0..fa59b572e 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -213,7 +213,7 @@ "DeleteCustomImage": "Delete Custom Image", "DeleteDeviceConfirmation": "Are you sure you wish to delete this device? It will reappear the next time a user signs in with it.", "DeleteDevicesConfirmation": "Are you sure you wish to delete all devices? All other sessions will be logged out. Devices will reappear the next time a user signs in.", - "DeleteRepositoryConfirmation": "Are you sure you'd like to delete this repository?", + "DeleteRepositoryConfirmation": "Are you sure you want to delete this repository?", "DeleteImage": "Delete Image", "DeleteImageConfirmation": "Are you sure you wish to delete this image?", "DeleteLyrics": "Delete lyrics", From 81401ebad68e87b4dce6ed39f00f96550e1bfda6 Mon Sep 17 00:00:00 2001 From: st7105 Date: Tue, 10 Jun 2025 18:39:55 -0400 Subject: [PATCH 438/645] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index d9a1f2291..5e17aa867 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -1419,7 +1419,7 @@ "OptionMaxActiveSessions": "Задать максимальное количество одновременных пользовательских сеансов.", "OptionAllowContentDownload": "Разрешить загрузку медиафайлов", "LabelMaxMuxingQueueSizeHelp": "Максимальное число пакетов, которое возможно буферизовать при ожидании инициализации всех потоков. Попробуйте увеличить значение, если всё ещё встречается ошибка «Too many packets buffered for output stream» (Слишком много пакетов буферизовано для выходного потока) в журналах FFmpeg. Рекомендуемое значение - 2048.", - "LabelTonemappingParamHelp": "Подстройка алгоритма тонмаппинга. Значение рекомендуемое и по умолчанию - NaN. Обычно оставляйте это поле пустым.", + "LabelTonemappingParamHelp": "Настроить алгоритм наложения тонов. Обычно это значение пустое.", "LabelTonemappingDesatHelp": "Применить понижение насыщенности для светлых участков, яркость которых превышает этот уровень. Рекомендуемое значение 0 (отключить).", "LabelTonemappingPeakHelp": "Переопределить пиковую яркость из метаданных этим значением. По умолчанию равно 100 (1000nit).", "LabelTonemappingThresholdHelp": "Параметры алгоритма тонмаппинга подстраиваются для каждой сцены. А порог используется, чтобы определить, изменилась ли сцена или нет. Если дистанция между средней яркостью текущего кадра и текущим скользящим средним превышает пороговое значение, мы пересчитаем среднюю и пиковую яркость сцены. Значения рекомендуемое и по умолчанию - 0.8 и 0.2.", @@ -2055,5 +2055,11 @@ "StorageType.Fixed": "Фиксированный", "StorageType.CDRom": "CD-ROM", "Success": "Успешно", - "BackupsPageLoadError": "Не удалось загрузить страницу резервирования" + "BackupsPageLoadError": "Не удалось загрузить страницу резервирования", + "PluginsLoadError": "При загрузке плагинов произошла ошибка.", + "ConfirmDeleteRepository": "Удалить репозиторий?", + "DeleteRepositoryConfirmation": "Вы уверены, что хотите удалить это репозиторий?", + "RepositoriesPageLoadError": "Не удалось загрузить репозитории", + "TranscodingLoadError": "Не удалось загрузить настройки транскодирования", + "ButtonLearnMore": "Узнать больше" } From d4506dbf0c228096176f274c3137bf50b5015d40 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Jun 2025 03:12:10 +0000 Subject: [PATCH 439/645] Update tanstack-query monorepo to v5.80.2 --- package-lock.json | 62 +++++++++++++++++++++++------------------------ package.json | 4 +-- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/package-lock.json b/package-lock.json index 340d95081..8a4047c45 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,8 +24,8 @@ "@mui/material": "6.4.12", "@mui/x-date-pickers": "7.29.4", "@react-hook/resize-observer": "2.0.2", - "@tanstack/react-query": "5.75.6", - "@tanstack/react-query-devtools": "5.75.6", + "@tanstack/react-query": "5.80.2", + "@tanstack/react-query-devtools": "5.80.2", "abortcontroller-polyfill": "1.7.8", "blurhash": "2.0.5", "classlist.js": "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz", @@ -5630,9 +5630,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.75.6", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.75.6.tgz", - "integrity": "sha512-r+WQ/z30KZF0TFkzCT7C8gWgrLuv7/t+gEjqeEp69JAIUS/omuieaHeIkoscjEcT6yaWebXGTyjdiIxJkYzEXg==", + "version": "5.80.2", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.80.2.tgz", + "integrity": "sha512-g2Es97uwFk7omkWiH9JmtLWSA8lTUFVseIyzqbjqJEEx7qN+Hg6jbBdDvelqtakamppaJtGORQ64hEJ5S6ojSg==", "license": "MIT", "funding": { "type": "github", @@ -5640,9 +5640,9 @@ } }, "node_modules/@tanstack/query-devtools": { - "version": "5.74.7", - "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.74.7.tgz", - "integrity": "sha512-nSNlfuGdnHf4yB0S+BoNYOE1o3oAH093weAYZolIHfS2stulyA/gWfSk/9H4ZFk5mAAHb5vNqAeJOmbdcGPEQw==", + "version": "5.80.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.80.0.tgz", + "integrity": "sha512-D6gH4asyjaoXrCOt5vG5Og/YSj0D/TxwNQgtLJIgWbhbWCC/emu2E92EFoVHh4ppVWg1qT2gKHvKyQBEFZhCuA==", "license": "MIT", "funding": { "type": "github", @@ -5650,12 +5650,12 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.75.6", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.75.6.tgz", - "integrity": "sha512-0d97uvpeHUNN5eTEsJzYgxLgAEyUM+XaJAWFFAaXH+dQgDN//TTDNbei/YVzN5BUJcWcnQ7YaQDtLLzSe+IvTg==", + "version": "5.80.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.80.2.tgz", + "integrity": "sha512-LfA0SVheJBOqC8RfJw/JbOW3yh2zuONQeWU5Prjm7yjUGUONeOedky1Bj39Cfj8MRdXrZV+DxNT7/DN/M907lQ==", "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.75.6" + "@tanstack/query-core": "5.80.2" }, "funding": { "type": "github", @@ -5666,19 +5666,19 @@ } }, "node_modules/@tanstack/react-query-devtools": { - "version": "5.75.6", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.75.6.tgz", - "integrity": "sha512-g8NH6E4F0ggatuu7Zhx3sBkvacsiMd+mrHxezlLLfftwhjRSVP1s6bvXYEAiCOQ+RNAVYFX0X1ujGSUqmcRY4w==", + "version": "5.80.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.80.2.tgz", + "integrity": "sha512-nGeCXBkSoYHKkQQO6pBr+DE8ML/EGd79MvFCkBPRcAA8u65OMNOJPXB0sg2AGgXX2+enTEQLHWZwjzukNB9gIA==", "license": "MIT", "dependencies": { - "@tanstack/query-devtools": "5.74.7" + "@tanstack/query-devtools": "5.80.0" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "^5.75.6", + "@tanstack/react-query": "^5.80.2", "react": "^18 || ^19" } }, @@ -28439,29 +28439,29 @@ } }, "@tanstack/query-core": { - "version": "5.75.6", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.75.6.tgz", - "integrity": "sha512-r+WQ/z30KZF0TFkzCT7C8gWgrLuv7/t+gEjqeEp69JAIUS/omuieaHeIkoscjEcT6yaWebXGTyjdiIxJkYzEXg==" + "version": "5.80.2", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.80.2.tgz", + "integrity": "sha512-g2Es97uwFk7omkWiH9JmtLWSA8lTUFVseIyzqbjqJEEx7qN+Hg6jbBdDvelqtakamppaJtGORQ64hEJ5S6ojSg==" }, "@tanstack/query-devtools": { - "version": "5.74.7", - "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.74.7.tgz", - "integrity": "sha512-nSNlfuGdnHf4yB0S+BoNYOE1o3oAH093weAYZolIHfS2stulyA/gWfSk/9H4ZFk5mAAHb5vNqAeJOmbdcGPEQw==" + "version": "5.80.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.80.0.tgz", + "integrity": "sha512-D6gH4asyjaoXrCOt5vG5Og/YSj0D/TxwNQgtLJIgWbhbWCC/emu2E92EFoVHh4ppVWg1qT2gKHvKyQBEFZhCuA==" }, "@tanstack/react-query": { - "version": "5.75.6", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.75.6.tgz", - "integrity": "sha512-0d97uvpeHUNN5eTEsJzYgxLgAEyUM+XaJAWFFAaXH+dQgDN//TTDNbei/YVzN5BUJcWcnQ7YaQDtLLzSe+IvTg==", + "version": "5.80.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.80.2.tgz", + "integrity": "sha512-LfA0SVheJBOqC8RfJw/JbOW3yh2zuONQeWU5Prjm7yjUGUONeOedky1Bj39Cfj8MRdXrZV+DxNT7/DN/M907lQ==", "requires": { - "@tanstack/query-core": "5.75.6" + "@tanstack/query-core": "5.80.2" } }, "@tanstack/react-query-devtools": { - "version": "5.75.6", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.75.6.tgz", - "integrity": "sha512-g8NH6E4F0ggatuu7Zhx3sBkvacsiMd+mrHxezlLLfftwhjRSVP1s6bvXYEAiCOQ+RNAVYFX0X1ujGSUqmcRY4w==", + "version": "5.80.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.80.2.tgz", + "integrity": "sha512-nGeCXBkSoYHKkQQO6pBr+DE8ML/EGd79MvFCkBPRcAA8u65OMNOJPXB0sg2AGgXX2+enTEQLHWZwjzukNB9gIA==", "requires": { - "@tanstack/query-devtools": "5.74.7" + "@tanstack/query-devtools": "5.80.0" } }, "@tanstack/react-table": { diff --git a/package.json b/package.json index 924b267bb..fe249b184 100644 --- a/package.json +++ b/package.json @@ -90,8 +90,8 @@ "@mui/material": "6.4.12", "@mui/x-date-pickers": "7.29.4", "@react-hook/resize-observer": "2.0.2", - "@tanstack/react-query": "5.75.6", - "@tanstack/react-query-devtools": "5.75.6", + "@tanstack/react-query": "5.80.2", + "@tanstack/react-query-devtools": "5.80.2", "abortcontroller-polyfill": "1.7.8", "blurhash": "2.0.5", "classlist.js": "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz", From c8cf2302ad9143d7bbb0570dc467ab73323172ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20Montan=C3=A9?= Date: Wed, 11 Jun 2025 02:24:54 -0400 Subject: [PATCH 440/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 41bc3d044..171095d46 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -158,7 +158,7 @@ "HeaderOnNow": "Transmetent ara", "HeaderParentalRatings": "Classificacions parentals", "HeaderPassword": "Contrasenya", - "HeaderPasswordReset": "Restablir contrasenya", + "HeaderPasswordReset": "Restableix la contrasenya", "HeaderPaths": "Directoris", "HeaderPlayAll": "Reprodueix-ho tot", "HeaderPlaybackError": "Error de reproducció", @@ -304,8 +304,8 @@ "LabelMovieRecordingPath": "Directori de gravació de pel·lícules", "LabelName": "Nom", "LabelNewName": "Nou nom", - "LabelNewPassword": "Nova contrasenya", - "LabelNewPasswordConfirm": "Confirma la nova contrasenya", + "LabelNewPassword": "Contrasenya nova", + "LabelNewPasswordConfirm": "Confirmeu la contrasenya nova", "LabelNotificationEnabled": "Habilita aquesta notificació", "LabelNumber": "Nombre", "LabelNumberOfGuideDays": "Nombre de dies de dades de la guia a descarregar", @@ -384,7 +384,7 @@ "MessageConfirmProfileDeletion": "N'estàs segur d'eliminar aquest perfil?", "MessageConfirmRecordingCancellation": "Estàs segur que vols cancel·lar aquest enregistrament?", "MessageConfirmRestart": "Esteu segur que voleu reiniciar Jellyfin?", - "MessageContactAdminToResetPassword": "Contacti amb l'administrador per restablir la contrasenya.", + "MessageContactAdminToResetPassword": "Contacteu amb l'administrador per a restablir la contrasenya.", "MessageDownloadQueued": "Descàrrega encuada.", "MessageEnablingOptionLongerScans": "Habilitar aquesta opció pot resultar en escanejos de la biblioteca significativament més lents.", "MessageItemSaved": "Ítem desat.", @@ -474,10 +474,10 @@ "OriginalAirDateValue": "Data original d'emissió: {0}", "PackageInstallCancelled": "Instal·lació de {0} (versió {1}) cancel·lada.", "ParentalRating": "Valoració Parental", - "PasswordMatchError": "La confirmació de la contrasenya i la contrasenya han de coincidir.", + "PasswordMatchError": "La contrasenya i la confirmació han de coincidir.", "PasswordResetComplete": "La contrasenya s'ha restablert.", - "PasswordResetConfirmation": "Estàs segur que vols restablir la contrasenya?", - "PasswordSaved": "Contrasenya desada.", + "PasswordResetConfirmation": "Esteu segur que voleu restablir la contrasenya?", + "PasswordSaved": "S'ha desat la contrasenya.", "People": "Repartiment i equip", "Play": "Reprodueix", "PlayAllFromHere": "Reprodueix-ho tot des d'aquí", @@ -614,7 +614,7 @@ "BirthDateValue": "Nascut: {0}", "Banner": "Pancarta", "Auto": "Auto", - "AuthProviderHelp": "Selecciona un proveïdor d'autenticació per utilitzar per autenticar la contrasenya d'aquest usuari.", + "AuthProviderHelp": "Trieu un proveïdor d'autenticació que s'usarà per a autenticar la contrasenya d'aquest usuari.", "AskAdminToCreateLibrary": "Demanar a un administrador que creï una biblioteca.", "Ascending": "Ascendent", "Art": "Clearart", @@ -722,7 +722,7 @@ "DisplayMissingEpisodesWithinSeasonsHelp": "Això també s'ha d'activar per a les biblioteques de TV a la configuració del servidor.", "DisplayInOtherHomeScreenSections": "Mostra a les seccions de la pantalla d'inici, com ara a 'Contingut multimèdia afegit darrerament' i 'Continueu mirant-ho'", "DisplayInMyMedia": "Mostra a la pantalla inicial", - "Display": "Mostra", + "Display": "Pantalla", "Disc": "Disc", "Directors": "Directors", "Director": "Director", @@ -754,7 +754,7 @@ "ButtonCast": "Transmetre a dispositiu", "ApiKeysCaption": "Llista de les claus API activades actualment", "AllowTonemappingHelp": "El mapeig de tons pot transformar el rang dinàmic d'un vídeo d'HDR a SDR mantenint els detalls i els colors de la imatge, que són informació molt important per representar l'escena original. Actualment només funciona amb vídeos 10 bit HDR10, HLG o DoVi. Això requereix el temps d'execució GPGPU corresponent.", - "ErrorPleaseSelectLineup": "Seleccioneu una alineació i torneu-ho a provar. Si no hi ha cap formació disponible, comproveu que el vostre nom d’usuari, contrasenya i codi postal siguin correctes.", + "ErrorPleaseSelectLineup": "Trieu una alineació i torneu-ho a provar. Si no hi ha cap formació disponible, comproveu que el vostre nom d’usuari, contrasenya i codi postal siguin correctes.", "ErrorAddingListingsToSchedulesDirect": "S'ha produït un error en afegir la programació al vostre compte de Schedules Direct. Schedules Direct només permet un nombre limitat de programacions per compte. És possible que hagueu d’iniciar sessió al lloc web de Schedules Direct i eliminar altres llistats del vostre compte abans de continuar.", "EnableThemeVideosHelp": "Reproduir vídeos temàtics en segon pla mentre navegues per la biblioteca.", "EnableStreamLoopingHelp": "Activeu aquesta opció si les transmissions en directe només contenen uns segons de dades i cal sol·licitar-les contínuament. Habilitar-ho quan no sigui necessari pot causar problemes.", @@ -967,11 +967,11 @@ "NoSubtitlesHelp": "Els subtítols no seran carregats per defecte. Encara es poden activar de forma manual durant la reproducció.", "Normal": "Normal", "NoNewDevicesFound": "No s'han trobat dispositius nous. Per afegir un nou sintonitzador, tanqueu aquest avís i introduïu la informació del dispositiu de forma manual.", - "NoCreatedLibraries": "Sembla que no s'ha creat cap biblioteca encara. {0} Li agradaria crear una ara? {1}", + "NoCreatedLibraries": "Sembla que no s'ha creat cap biblioteca encara. {0} Us agradaria crear-ne una ara? {1}", "No": "No", "NextUp": "A continuació", "NextTrack": "Passar a la següent", - "Next": "Pròxim", + "Next": "Endavant", "News": "Notícies", "New": "Nou", "Never": "Mai", @@ -1023,7 +1023,7 @@ "MessageImageTypeNotSelected": "Seleccioneu un tipus d'imatge al menú desplegable.", "MessageImageFileTypeAllowed": "Només els arxius JPEG i PNG són compatibles.", "MessageGetInstalledPluginsError": "S'ha produït un error a l'hora d'obtenir la llista de complements instal·lats.", - "MessageForgotPasswordInNetworkRequired": "Torneu a iniciar el procés de restabliment de contrasenya des de dins de la seva xarxa domèstica.", + "MessageForgotPasswordInNetworkRequired": "Torneu a iniciar el procés de restabliment de contrasenya des de la vostra xarxa domèstica.", "MessageForgotPasswordFileCreated": "El següent arxiu s'ha creat en el seu servidor i conté instruccions sobre com procedir", "MessageFileReadError": "Hi ha hagut un error a llegint l'arxiu. Torni-ho a provar.", "MessageDirectoryPickerLinuxInstruction": "Per a Linux amb Arch Linux, CentOS, Debian, Fedora, openSUSE, o Ubuntu, ha de concedir a l'usuari del servei com a mínim l'accés de lectura als llocs d'emmagatzematge.", @@ -1070,7 +1070,7 @@ "LiveBroadcasts": "Emissions en directe", "ListPaging": "{0} - {1} de {2}", "List": "Llista", - "LeaveBlankToNotSetAPassword": "Podeu deixar aquest camp en blanc per establir cap contrasenya.", + "LeaveBlankToNotSetAPassword": "Podeu deixar aquest camp en blanc per a no establir cap contrasenya.", "LearnHowYouCanContribute": "Aprendre com pot contribuir.", "LastSeen": "Última activitat {0}", "Large": "Gran", @@ -1201,7 +1201,7 @@ "LabelPlayerDimensions": "Dimensions del reproductor", "LabelPlayer": "Reproductor", "LabelPasswordResetProvider": "Restabliment de la contrasenya de l'proveïdor", - "LabelPasswordConfirm": "Contrasenya (confirmar)", + "LabelPasswordConfirm": "Contrasenya (confirmació)", "LabelParentNumber": "Nombre de Pares", "LabelParentalRating": "Classificació parental", "LabelOptionalNetworkPathHelp": "Si aquesta carpeta es comparteix a la xarxa, el subministrament de la ruta del recurs compartit de xarxa pot permetre als clients accedir directament als fitxers dels continguts multimèdia des d'altres dispositius. Per exemple, {0} o {1}.", @@ -1315,7 +1315,7 @@ "LabelColorPrimaries": "Colors primaris", "LabelChromecastVersion": "Versió Google Cast", "LabelCertificatePasswordHelp": "Si el seu certificat requereix una clau, ingressi-la aquí.", - "LabelCertificatePassword": "Verificar contrasenya", + "LabelCertificatePassword": "Verifica la contrasenya", "LabelBurnSubtitles": "Gravar subtítols", "LabelBlockContentWithTags": "Bloquejar elements amb etiquetes", "LabelBlastMessageIntervalHelp": "Determina la durada en segons entre ràfegues de missatges en directe.", @@ -1376,7 +1376,7 @@ "Runtime": "Temps d'execució", "Rewind": "Rebobinar", "Restart": "Reinicia", - "ResetPassword": "Restablir la contrasenya", + "ResetPassword": "Restableix la contrasenya", "RepeatOne": "Repetir 1", "RepeatMode": "Mode de repetició", "RepeatAll": "Repeteix-ho tot", @@ -1864,7 +1864,7 @@ "HeaderNoLyrics": "No s'ha trobat cap lletra", "Lyrics": "Lletres", "ViewLyrics": "Veure lletres", - "SavePassword": "Desar contrasenya", + "SavePassword": "Desa la contrasenya", "EnableDts": "Habilitar DTS (DCA)", "PlaylistError.AddFailed": "S'ha produït un error en agregar a la llista de reproducció", "PlaylistError.CreateFailed": "S'ha produït un error en crear la llista de reproducció", @@ -1938,7 +1938,7 @@ "HeaderNewPlaylist": "Llista de reproducció nova", "AlwaysRemuxFlacAudioFilesHelp": "Si el teu navegador rebutja reproduir certs arxius o calcula les marques de temps de manera imprecisa, activa això com a solució alternativa.", "AlwaysRemuxMp3AudioFilesHelp": "Si el teu navegador calcula les marques de temps de certs arxius de manera imprecisa, activa això com a solució alternativa.", - "EnableHi10pHelp": "Activar per evitar transcodificació de vídeos en H.264 10-bits. Desactivar-ho si la reproducció del vídeo mostra fotogrames buits.", + "EnableHi10pHelp": "Activar per a evitar transcodificació de vídeos en H.264 10-bits. Desactivar-ho si la reproducció del vídeo mostra fotogrames buits.", "DateModified": "Data de modificació", "HeaderAudioAdvanced": "Àudio avançat", "LabelAllowFmp4TranscodingContainer": "Permet el contenidor de transcodificació fMP4", @@ -1986,8 +1986,8 @@ "VideoCodecTagNotSupported": "L'etiqueta del còdec de vídeo no és compatible", "RenderPgsSubtitleHelp": "Determina si el client ha de renderitzar els subtítols PGS en lloc d'usar els subtítols incrustats. Això pot evitar la transcodificació de part del servidor a canvi del rendiment de renderitzat de part del client.", "FallbackMaxStreamingBitrateHelp": "El bitrate màxim s'usa com a alternativa quan ffprobe no pot determinar el flux de l'origen. Això ajuda a prevenir que els clients sol·licitin un bitrate de transcodificació excessivament alt, el qual provocaria errors en el reproductor o sobrecarregar el codificador.", - "HeaderNextEpisode": "Pròxim Episodi", - "HeaderNextVideo": "Pròxim Vídeo", + "HeaderNextEpisode": "Pròxim episodi", + "HeaderNextVideo": "Pròxim vídeo", "LabelMediaSegmentProviders": "Proveïdors de segments de continguts multimèdia", "MediaSegmentProvidersHelp": "Habiliteu i classifiqueu per ordre de prioritat els vostres proveïdors preferits de segments multimèdia.", "AutoSubtitleStylingHelp": "Aquest mode canviarà automàticament entre els mecanismes d'estils de subtítols natius i personalitzats, basant-se en el teu tipus de dispositiu.", @@ -2027,7 +2027,7 @@ "HeaderUpdateRequired": "Cal una actualització", "ViewSettings": "Configuració de visualització", "DownloadManager": "Descàrregues", - "MessageForgotPasswordPinReset": "Introdueix el PIN aquí per acabar el Restabliment de contrasenya", + "MessageForgotPasswordPinReset": "Introduïu el PIN aquí per a acabar el restabliment de la contrasenya", "LabelImageCache": "Imatges en el cache", "MessageBackupDisclaimer": "Depenent de la mida de la biblioteca, la còpia de seguretat pot trigar cert temps.", "MessageRestoreDisclaimer": "ATENCIÓ: Estàs a punt de restaurar una còpia de seguretat anterior. El seu servidor no serà utilitzable durant el procés i les dades creades des del moment de l'inici de la còpia seran perdudes.", From d1266034bfd84acb0890ee59eef58243b47219d8 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Wed, 11 Jun 2025 02:28:31 -0400 Subject: [PATCH 441/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 171095d46..cdb70442a 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -14,7 +14,7 @@ "AspectRatio": "Relació d'aspecte", "Audio": "Àudio", "MessageBrowsePluginCatalog": "Consulteu el nostre catàleg per veure els complements disponibles.", - "ButtonAddMediaLibrary": "Afegeix una biblioteca multimèdia", + "ButtonAddMediaLibrary": "Afegeix una mediateca", "ButtonAddScheduledTaskTrigger": "Afegeix un disparador", "ButtonAddServer": "Afegeix Servidor", "ButtonAddUser": "Afegeix un usuari", @@ -26,7 +26,7 @@ "ButtonEditOtherUserPreferences": "Editar el perfil, la imatge i les preferències d'aquest usuari.", "ButtonForgotPassword": "He oblidat la contrasenya", "ButtonGotIt": "Entesos", - "ButtonLibraryAccess": "Accés a la biblioteca", + "ButtonLibraryAccess": "Accés a la mediateca", "ButtonManualLogin": "Inici de sessió manual", "ButtonMore": "Més", "ButtonNextTrack": "Pista següent", @@ -176,7 +176,7 @@ "HeaderSendMessage": "Enviar missatge", "HeaderSeriesOptions": "Opcions de la sèrie", "HeaderServerSettings": "Preferències del servidor", - "HeaderSetupLibrary": "Configureu les vostres biblioteques multimèdia", + "HeaderSetupLibrary": "Configureu les vostres mediateques", "HeaderSortBy": "Ordenar per", "HeaderSortOrder": "Ordre", "HeaderStartNow": "Començar ara", @@ -367,7 +367,7 @@ "LabelYear": "Any", "LabelYoureDone": "Ja està!", "LatestFromLibrary": "Novetats a {0}", - "LibraryAccessHelp": "Seleccioneu les biblioteques que voleu compartir amb aquest usuari. Els administradors podran editar totes les carpetes mitjançant el gestor de metadades.", + "LibraryAccessHelp": "Seleccioneu les mediateques que voleu compartir amb aquest usuari. Els administradors podran editar totes les carpetes mitjançant el gestor de metadades.", "Live": "Directe", "MarkPlayed": "Marca com a reproduït", "MarkUnplayed": "Marca com a no reproduït", @@ -444,7 +444,7 @@ "OptionEmbedSubtitles": "Incrusta dins el contenidor", "OptionEnableAccessFromAllDevices": "Habilita l'accés des de tots els dispositius", "OptionEnableAccessToAllChannels": "Habilita l'accés a tots els canals", - "OptionEnableAccessToAllLibraries": "Habilita l'accés a totes les biblioteques", + "OptionEnableAccessToAllLibraries": "Habilita l'accés a totes les mediateques", "OptionEnableExternalContentInSuggestionsHelp": "Permet incloure tràilers d'internet i programes de TV en directe amb el continguts suggerits.", "OptionEquals": "Equival", "OptionEveryday": "Cada dia", @@ -600,7 +600,7 @@ "ButtonSplit": "Dividir", "ButtonStart": "Començar", "ButtonSelectView": "Seleccionar la vista", - "ButtonScanAllLibraries": "Escanejar totes les biblioteques", + "ButtonScanAllLibraries": "Escanejar totes les mediateques", "ButtonRevoke": "Revoca", "ButtonRename": "Canviar el nom", "ButtonNetwork": "Xarxa", @@ -615,7 +615,7 @@ "Banner": "Pancarta", "Auto": "Auto", "AuthProviderHelp": "Trieu un proveïdor d'autenticació que s'usarà per a autenticar la contrasenya d'aquest usuari.", - "AskAdminToCreateLibrary": "Demanar a un administrador que creï una biblioteca.", + "AskAdminToCreateLibrary": "Demana a un administrador que creï una mediateca.", "Ascending": "Ascendent", "Art": "Clearart", "Anytime": "En qualsevol moment", @@ -627,7 +627,7 @@ "AllowMediaConversionHelp": "Concedeix o denega l’accés a la funció de conversió de contingut multimèdia.", "AllowMediaConversion": "Permet la conversió de continguts multimèdia", "AllowHWTranscodingHelp": "Permet al sintonitzador transcodifique els fluxos sobre la marxa.", - "AllLibraries": "Totes les biblioteques", + "AllLibraries": "Totes les mediateques", "AllLanguages": "Tots els idiomes", "AllComplexFormats": "Tots els formats complexos (ASS, SSA, VobSub, PGS, SUB / IDX, etc.)", "Alerts": "Alertes", @@ -640,7 +640,7 @@ "ClientSettings": "Configuració del client", "CinemaModeConfigurationHelp": "El mode Cinema aporta l'experiència del teatre directament a la sala d'estar amb la possibilitat de jugar a tràilers i presentacions personalitzades abans de la funció principal.", "ChannelNameOnly": "Només el canal {0}", - "ChangingMetadataImageSettingsNewContent": "Els canvis als paràmetres de descàrrega de metadades o imatges només s'apliquen al contingut nou afegit a la biblioteca. Per aplicar els canvis als títols existents, haureu d'actualitzar les metadades manualment.", + "ChangingMetadataImageSettingsNewContent": "Els canvis als paràmetres de descàrrega de metadades o imatges només s'apliquen al contingut nou afegit a la mediateca. Per aplicar els canvis als títols existents, haureu d'actualitzar les metadades manualment.", "ButtonTogglePlaylist": "Llista de reproducció", "BurnSubtitlesHelp": "Determina si el servidor hauria de gravar els subtítols. Evitant això millorarà molt el rendiment. Selecciona Auto per gravar formats basats en imatges (VobSub, PGS, SUB, IDX) i certs subtítols ASS o SSA.", "Browse": "Navega", @@ -664,13 +664,13 @@ "ContinueWatching": "Continueu mirant-ho", "ConfirmEndPlayerSession": "Vols tancar Jellyfin a {0}?", "ConfirmDeleteItems": "L'eliminació d'aquests elements els suprimirà del sistema de fitxers i de la biblioteca multimèdia. N'esteu segur que desitgeu continuar?", - "ConfirmDeleteItem": "L'esborrat d'aquest element l'eliminarà del sistema de fitxers i de la biblioteca multimèdia. Esteu segurs que voleu continuar?", - "ConfigureDateAdded": "Configureu com es determinen les metadades de la \"Data d'afegit\" al Tauler > Biblioteques > Visualització", + "ConfirmDeleteItem": "L'esborrat d'aquest element l'eliminarà del sistema de fitxers i de la mediateca. N'esteu segur que desitgeu continuar?", + "ConfigureDateAdded": "Configureu com es determinen les metadades de la \"Data d'afegit\" al Tauler > Mediateques > Visualització", "CommunityRating": "Ràting comunitari", "ColorTransfer": "Transferència de color", "ColorSpace": "Espai de color", "ColorPrimaries": "Colors primaris", - "DefaultMetadataLangaugeDescription": "Aquests son els vostres valors per defecte i poden ser personalitzats per a cada biblioteca.", + "DefaultMetadataLangaugeDescription": "Aquests son els vostres valors per defecte i poden ser personalitzats per a cada mediateca.", "Default": "Per defecte", "DatePlayed": "Data reproduït", "DateAdded": "Data d'addició", @@ -713,13 +713,13 @@ "EnableExternalVideoPlayers": "Reproductors de vídeo externs", "EnableDecodingColorDepth10Vp9": "Activar la descodificació de maquinari de 10 bits per a VP9", "EnableDecodingColorDepth10Hevc": "Activar la descodificació de maquinari de 10 bits per a HEVC", - "EnableBackdropsHelp": "Mostra imatges al fons d'algunes pàgines mentre es navega per la biblioteca.", + "EnableBackdropsHelp": "Mostra imatges al fons d'algunes pàgines mentre es navega per la mediateca.", "EnableAutoCast": "Establir com a per defecte", "EditMetadata": "Edita les metadades", "EasyPasswordHelp": "El vostre codi Easy PIN s'utilitza per accedir fora de línia als clients compatibles i també es pot utilitzar per iniciar la sessió a la xarxa fàcilment.", "DrmChannelsNotImported": "Els canals amb DRM no s’importaran.", "DownloadsValue": "{0} descàrregues", - "DisplayMissingEpisodesWithinSeasonsHelp": "Això també s'ha d'activar per a les biblioteques de TV a la configuració del servidor.", + "DisplayMissingEpisodesWithinSeasonsHelp": "Això també s'ha d'activar per a les mediateques de TV a la configuració del servidor.", "DisplayInOtherHomeScreenSections": "Mostra a les seccions de la pantalla d'inici, com ara a 'Contingut multimèdia afegit darrerament' i 'Continueu mirant-ho'", "DisplayInMyMedia": "Mostra a la pantalla inicial", "Display": "Pantalla", @@ -1008,7 +1008,7 @@ "MessageReenableUser": "Vegeu més avall per tornar a activar", "MessagePluginInstallError": "S'ha produït un error durant la instal·lació del complement.", "MessagePluginInstalled": "El complement s'ha instal·lat correctament. És necessari reiniciar el servidor perquè els canvis tinguin efecte.", - "MessagePluginInstallDisclaimer": "ADVERTÈNCIA: La instal·lació d'un complement de tercers comporta riscos. Pot contenir codi inestable o maliciós, i pot canviar en qualsevol moment. Instal·leu només complements d'autors en els que confieu, i sigueu conscient dels efectes que poden tenir, incloent consultes a serveis externs, exploracions de biblioteques més llargues o processos addicionals de rerefons.", + "MessagePluginInstallDisclaimer": "ADVERTÈNCIA: La instal·lació d'un complement de tercers comporta riscos. Pot contenir codi inestable o maliciós, i pot canviar en qualsevol moment. Instal·leu només complements d'autors en els que confieu, i sigueu conscient dels efectes que poden tenir, incloent consultes a serveis externs, exploracions més llargues de mediateques o processos addicionals de rerefons.", "MessagePluginConfigurationRequiresLocalAccess": "Connecteu-vos amb el servidor local directament per configurar aquest complement.", "MessagePleaseWait": "Si us plau, espereu. Això pot trigar un minut.", "MessagePlayAccessRestricted": "La reproducció d'aquest contingut està restringit actualment. Poseu-vos en contacte amb l'administrador de servidor per obtenir més informació.", @@ -1410,7 +1410,7 @@ "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Utilitzar la informació de l'episodi de les metadades incrustades si està disponible.", "PreferEmbeddedEpisodeInfosOverFileNames": "Prefereixo informació de l'episodi incrustat sobre els noms d'arxiu", "PosterCard": "Targeta de pòster", - "Poster": "Pòster", + "Poster": "Cartell", "PleaseSelectTwoItems": "Seleccioneu al menys dos ítems.", "PleaseEnterNameOrId": "Introdueixi un nom o un ID extern.", "PleaseConfirmPluginInstallation": "Feu clic a 'D'acord' per confirmar que ha llegit el text de dalt i desitja procedir amb la instal·lació del complement.", @@ -1468,7 +1468,7 @@ "OptionEnableForAllTuners": "Habilitar per a tots els dispositius sintonitzadors", "OptionEnableExternalContentInSuggestions": "Habilitar contingut extern en suggeriments", "OptionDvd": "DVD", - "OptionDisplayFolderViewHelp": "Mostra els directoris juntament amb les vostres altres biblioteques multimèdia. Això pot ser útil si us agradaria tenir una vista senzilla de directoris.", + "OptionDisplayFolderViewHelp": "Mostra els directoris juntament amb les vostres altres mediateques. Això pot ser útil si us agradaria tenir una vista senzilla de directoris.", "OptionDisplayFolderView": "Mostra una vista de carpeta per a veure directoris multimèdia sense format", "OptionDateAddedFileTime": "Utilitzar la data de creació de l'arxiu", "OptionCustomUsers": "Personalitzat", @@ -1480,7 +1480,7 @@ "OptionAllowVideoPlaybackRemuxing": "Permet la reproducció de vídeo que requereix una conversió sense recodificació", "OptionAllowSyncTranscoding": "Permet la conversió del contingut multimèdia quan es descarregui i sincronitzi", "OptionAllowMediaPlaybackTranscodingHelp": "La restricció de l'accés a la transcodificació pot provocar errors de reproducció en els clients a causa dels formats multimèdia incompatibles.", - "OptionAllowContentDownloadHelp": "Els usuaris poden descarregar el contingut multimèdia i emmagatzemar-lo als seus dispositius. Això no és el mateix que una funció de sincronització. Les biblioteques de llibres ho requereixen per funcionar.", + "OptionAllowContentDownloadHelp": "Els usuaris poden descarregar el contingut multimèdia i emmagatzemar-lo als seus dispositius. Això no és el mateix que una funció de sincronització. Les mediateques de llibres ho requereixen per funcionar.", "OptionAllowContentDownload": "Permet la descàrrega del contingut multimèdia", "OptionAllowAudioPlaybackTranscoding": "Permet la reproducció d'àudio que requereix la transcodificació", "Option3D": "3D", @@ -1797,7 +1797,7 @@ "ChannelResolutionUHD4K": "UHD (4K)", "LabelTrickplayAccel": "Habilitar descodificació per maquinari", "NonBlockingScan": "Sense Bloqueig - generació de cues, després retorna", - "ConfirmDeleteSeries": "Eliminar aquesta sèrie eliminarà TOTS {0} episodis tant del sistema de fitxers com de la biblioteca multimèdia. N'esteu segur que desitgeu continuar?", + "ConfirmDeleteSeries": "Eliminar aquesta sèrie eliminarà TOTS {0} episodis tant del sistema de fitxers com de la mediateca. N'esteu segur que desitgeu continuar?", "LabelEncodingFormatOptions": "Opcions de format de codificació", "LabelTrickplayAccelHelp": "Assegura't d'habilitar 'Permetre codificació MJPEG' a Transcodificació si el teu maquinari ho suporta.", "LabelWidthResolutions": "Resolucions d'Amplada", @@ -1818,8 +1818,8 @@ "PlaybackError.NotAllowed": "La reproducció d'aquest contingut multimèdia no està permesa.", "Trickplay": "Trickplay", "PriorityHigh": "Alta", - "EnableLibrary": "Habilitar la biblioteca", - "EnableLibraryHelp": "Deshabilitar la biblioteca l'amagarà per a tots els usuaris.", + "EnableLibrary": "Habilita la mediateca", + "EnableLibraryHelp": "Deshabilitar la mediateca l'amagarà per a tots els usuaris.", "LimitSupportedVideoResolution": "Limitar la resolució màxima de vídeo suportada", "LimitSupportedVideoResolutionHelp": "Utilitzar \"La màxima resolució de transcodificació de vídeo permesa\" com a màxima resolució suportada.", "PlaybackError.FATAL_HLS_ERROR": "S'ha produït un error fatal al stream HLS.", @@ -1887,7 +1887,7 @@ "LabelSelectPreferredTranscodeVideoAudioCodec": "Còdec d'àudio de transcodificació preferit en la reproducció de vídeo", "LibraryScanFanoutConcurrencyHelp": "Nombre màxim de tasques paral·leles durant les exploracions de la biblioteca. Si es deixa buit, es triarà un límit basat en el nombre de nuclis del vostre sistema. ADVERTÈNCIA: establir aquest número massa alt pot causar problemes amb els sistemes de fitxers de xarxa; si trobeu problemes, baixeu aquest número.", "SelectPreferredTranscodeVideoAudioCodecHelp": "Seleccioneu el còdec d'àudio preferit per transcodificar per al contingut de vídeo. Si el còdec preferit no és compatible, el servidor utilitzarà el següent millor còdec disponible.", - "LibraryScanFanoutConcurrency": "Límit de tasques d'exploració paral·leles per a les biblioteques", + "LibraryScanFanoutConcurrency": "Límit de tasques d'exploració paral·leles per a les mediateques", "Penciller": "Dibuixant", "Inker": "Tintador", "Letterer": "Retolador", From 54571f76dc29ea9600412db595a49f546ce5078a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Wed, 11 Jun 2025 01:45:06 -0400 Subject: [PATCH 442/645] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index ccc9e1230..5b4f0bfd2 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -1374,7 +1374,7 @@ "Bwdif": "Odstranění prokládání \"Bob Weaver\" (BWDIF)", "UseDoubleRateDeinterlacingHelp": "Toto nastavení při odstranění prokládání zdvojnásobuje snímkovou frekvenci, aby výsledné video vypadalo stejně plynule, jako při přehrávání prokládaného obsahu v televizi.", "UseDoubleRateDeinterlacing": "Zdvojnásobit snímkovou frekvenci při odstranění prokládání", - "LabelTonemappingParamHelp": "Pro ladění algoritmu mapování tónů. Doporučená a výchozí hodnota je NaN. Obecně je pole ponecháváno prázdné.", + "LabelTonemappingParamHelp": "Pro ladění algoritmu mapování tónů. Obecně je pole ponecháváno prázdné.", "LabelTonemappingParam": "Parametr mapování tónů", "LabelTonemappingPeakHelp": "Přepsat hodnotu vstupního signálu v metadatech souboru touto vrcholnou hodnotou. Doporučená hodnota je 100 (1000 nitů).", "LabelTonemappingPeak": "Vrchol mapování tónů", @@ -2055,5 +2055,11 @@ "MessageWaitingForServer": "Čekání na odezvu serveru...", "Success": "Úspěch", "HeaderBackups": "Zálohy", - "LabelProgramData": "Programová data" + "LabelProgramData": "Programová data", + "ConfirmDeleteRepository": "Odstranit repozitář?", + "RepositoriesPageLoadError": "Načtení repozitářů se nezdařilo", + "PluginsLoadError": "Při načítání zásuvných modulů došlo k chybě.", + "ButtonLearnMore": "Více informací", + "DeleteRepositoryConfirmation": "Opravdu chcete odstranit tento repozitář?", + "TranscodingLoadError": "Načtení nastavení překódování se nezdařilo" } From 2edc7d3580e92f30ce26d9b0de18ecd5ebd00ca2 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Wed, 11 Jun 2025 02:44:26 -0400 Subject: [PATCH 443/645] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index 47eedfc07..cb267a810 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -1392,7 +1392,7 @@ "LabelMaxMuxingQueueSize": "Maximale grootte muxing-wachtrij", "LabelColorPrimaries": "Primaire kleur", "MediaInfoColorPrimaries": "Primaire kleuren", - "LabelTonemappingParamHelp": "Stel het tonemapping-algoritme af. Dit veld is standaard leeg; het wordt aanbevolen dit zo te laten.", + "LabelTonemappingParamHelp": "Stel het tonemapping-algoritme af. Normaliter kan dit veld leeg blijven.", "LabelTonemappingParam": "Tonemapping-parameter", "LabelTonemappingPeakHelp": "Gebruik deze piekwaarde voor het ingangssignaal in plaats van de waarde in de ingesloten metadata. De standaardwaarde is 100 (1000 nit).", "LabelTonemappingPeak": "Tonemapping-piek", @@ -2055,5 +2055,10 @@ "StorageType.Ram": "RAM", "StorageType.Removable": "Verwisselbaar", "StorageType.Unknown": "Onbekend", - "PluginsLoadError": "Er is een fout opgetreden bij het laden van plug-ins." + "PluginsLoadError": "Er is een fout opgetreden bij het laden van plug-ins.", + "ButtonLearnMore": "Meer informatie", + "ConfirmDeleteRepository": "Repository verwijderen?", + "DeleteRepositoryConfirmation": "Weet je zeker dat je dit repository wilt verwijderen?", + "RepositoriesPageLoadError": "Repository's laden mislukt", + "TranscodingLoadError": "Laden van transcodeerinstellingen mislukt" } From 3aaba84281192dd876ca4becfe46e4f24399cd11 Mon Sep 17 00:00:00 2001 From: Kityn Date: Wed, 11 Jun 2025 01:12:41 -0400 Subject: [PATCH 444/645] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 9590620f2..2953268d8 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -1409,7 +1409,7 @@ "LabelTonemappingRange": "Zakres mapowania tonów", "LabelTonemappingPeakHelp": "Zamiast tego zastąp osadzoną wartość metadanych dla sygnału wejściowego tą wartością szczytową. Wartość domyślna to 100 (1000 nitów).", "LabelTonemappingPeak": "Szczyt mapowania tonów", - "LabelTonemappingParamHelp": "Wyreguluj algorytm mapowania tonów. Zalecane i domyślne wartości to NaN. Ogólnie pozostaw to puste.", + "LabelTonemappingParamHelp": "Wyreguluj algorytm mapowania tonów. Zazwyczaj pozostaw to puste.", "LabelTonemappingParam": "Parametry mapowania tonów", "LabelTonemappingDesatHelp": "Zastosuj desaturację dla rozjaśnień, które przekraczają ten poziom jasności. Zalecana wartość to 0 (wyłącz).", "LabelTonemappingDesat": "Desaturacja mapowania tonów", @@ -2055,5 +2055,11 @@ "Success": "Powodzenie", "HeaderBackupsHelp": "Twórz i przywracaj migawki swojego serwera, które mogą zawierać bazę danych, metadane, napisy i trickplay.", "LabelImageCache": "Pamięć podręczna obrazów", - "MessageRestoreDisclaimer": "OSTRZEŻENIE: zamierzasz przywrócić dane z poprzedniej kopii zapasowej. Twój serwer będzie bezużyteczny przez cały czas trwania procesu, a wszelkie nowe dane utworzone od czasu utworzenia kopii zapasowej zostaną utracone." + "MessageRestoreDisclaimer": "OSTRZEŻENIE: zamierzasz przywrócić dane z poprzedniej kopii zapasowej. Twój serwer będzie bezużyteczny przez cały czas trwania procesu, a wszelkie nowe dane utworzone od czasu utworzenia kopii zapasowej zostaną utracone.", + "ConfirmDeleteRepository": "Usunąć repozytorium?", + "RepositoriesPageLoadError": "Nie udało się załadować repozytoriów", + "PluginsLoadError": "Wystąpił błąd podczas ładowania wtyczek.", + "ButtonLearnMore": "Dowiedz się więcej", + "TranscodingLoadError": "Nie udało się załadować ustawień transkodowania", + "DeleteRepositoryConfirmation": "Czy na pewno chcesz usunąć to repozytorium?" } From fd318139b65879dedce1e79bcd11601113e12efb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20Montan=C3=A9?= Date: Wed, 11 Jun 2025 04:34:16 -0400 Subject: [PATCH 445/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index cdb70442a..8a970c31d 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -37,7 +37,7 @@ "ButtonPreviousTrack": "Pista anterior", "ButtonQuickStartGuide": "Guia de configuració", "ButtonRefreshGuideData": "Actualitza les dades de la guia", - "ButtonRemove": "Eliminar", + "ButtonRemove": "Elimina", "ButtonResetEasyPassword": "Restabliu el codi Easy PIN", "ButtonResume": "Reprèn", "ButtonSelectDirectory": "Seleccionar el directori", @@ -50,7 +50,7 @@ "ButtonTrailer": "Tràiler", "CancelRecording": "Cancel·la enregistrament", "CancelSeries": "Cancel·la sèrie", - "ChannelAccessHelp": "Selecciona els canals a compartir amb aquest usuari. Els administradors podran editar tots els canals emprant el gestor de metadades.", + "ChannelAccessHelp": "Trieu els canals a compartir amb aquest usuari. Els administradors podran editar tots els canals emprant el gestor de metadades.", "Composer": "Compositor", "ConfirmDeleteImage": "Esborrar imatge?", "ConfirmDeletion": "Confirma supressió", @@ -115,7 +115,7 @@ "HeaderCustomDlnaProfiles": "Perfils personalitzats", "HeaderDateIssued": "Data d'emissió", "HeaderDefaultRecordingSettings": "Preferències d'enregistrament per defecte", - "HeaderDeleteDevice": "Eliminar dispositiu", + "HeaderDeleteDevice": "Elimina el dispositiu", "HeaderDeleteItem": "Esborrar l'ítem", "HeaderDeveloperInfo": "Informació del desenvolupador", "HeaderDeviceAccess": "Accés al dispositiu", @@ -367,7 +367,7 @@ "LabelYear": "Any", "LabelYoureDone": "Ja està!", "LatestFromLibrary": "Novetats a {0}", - "LibraryAccessHelp": "Seleccioneu les mediateques que voleu compartir amb aquest usuari. Els administradors podran editar totes les carpetes mitjançant el gestor de metadades.", + "LibraryAccessHelp": "Trieu les mediateques que voleu compartir amb aquest usuari. Els administradors podran editar totes les carpetes mitjançant el gestor de metadades.", "Live": "Directe", "MarkPlayed": "Marca com a reproduït", "MarkUnplayed": "Marca com a no reproduït", @@ -380,7 +380,7 @@ "MediaInfoPixelFormat": "Format de píxel", "MediaInfoProfile": "Perfil", "MediaInfoResolution": "Resolució", - "MessageAreYouSureDeleteSubtitles": "Estàs segur que vols eliminar aquest fitxer de subtítols?", + "MessageAreYouSureDeleteSubtitles": "Esteu segur que voleu eliminar aquest fitxer de subtítols?", "MessageConfirmProfileDeletion": "N'estàs segur d'eliminar aquest perfil?", "MessageConfirmRecordingCancellation": "Estàs segur que vols cancel·lar aquest enregistrament?", "MessageConfirmRestart": "Esteu segur que voleu reiniciar Jellyfin?", @@ -600,7 +600,7 @@ "ButtonSplit": "Dividir", "ButtonStart": "Començar", "ButtonSelectView": "Seleccionar la vista", - "ButtonScanAllLibraries": "Escanejar totes les mediateques", + "ButtonScanAllLibraries": "Escaneja totes les mediateques", "ButtonRevoke": "Revoca", "ButtonRename": "Canviar el nom", "ButtonNetwork": "Xarxa", @@ -664,7 +664,7 @@ "ContinueWatching": "Continueu mirant-ho", "ConfirmEndPlayerSession": "Vols tancar Jellyfin a {0}?", "ConfirmDeleteItems": "L'eliminació d'aquests elements els suprimirà del sistema de fitxers i de la biblioteca multimèdia. N'esteu segur que desitgeu continuar?", - "ConfirmDeleteItem": "L'esborrat d'aquest element l'eliminarà del sistema de fitxers i de la mediateca. N'esteu segur que desitgeu continuar?", + "ConfirmDeleteItem": "Eliminar aquest element l'eliminarà del sistema de fitxers i de la mediateca. N'esteu segur, que desitgeu continuar?", "ConfigureDateAdded": "Configureu com es determinen les metadades de la \"Data d'afegit\" al Tauler > Mediateques > Visualització", "CommunityRating": "Ràting comunitari", "ColorTransfer": "Transferència de color", @@ -731,7 +731,7 @@ "DirectPlaying": "Reproducció directe", "DetectingDevices": "Detectant dispositius", "Descending": "Descendent", - "DeleteUserConfirmation": "Esteu segurs que voleu eliminar aquest usuari?", + "DeleteUserConfirmation": "Esteu segur que voleu eliminar aquest usuari?", "DeleteDeviceConfirmation": "Esteu segurs que voleu suprimir aquest dispositiu? Tornarà a aparèixer la propera vegada que un usuari iniciï la sessió amb ell.", "Data": "Dades", "ButtonUseQuickConnect": "Utilitzar Quick Connect", @@ -755,7 +755,7 @@ "ApiKeysCaption": "Llista de les claus API activades actualment", "AllowTonemappingHelp": "El mapeig de tons pot transformar el rang dinàmic d'un vídeo d'HDR a SDR mantenint els detalls i els colors de la imatge, que són informació molt important per representar l'escena original. Actualment només funciona amb vídeos 10 bit HDR10, HLG o DoVi. Això requereix el temps d'execució GPGPU corresponent.", "ErrorPleaseSelectLineup": "Trieu una alineació i torneu-ho a provar. Si no hi ha cap formació disponible, comproveu que el vostre nom d’usuari, contrasenya i codi postal siguin correctes.", - "ErrorAddingListingsToSchedulesDirect": "S'ha produït un error en afegir la programació al vostre compte de Schedules Direct. Schedules Direct només permet un nombre limitat de programacions per compte. És possible que hagueu d’iniciar sessió al lloc web de Schedules Direct i eliminar altres llistats del vostre compte abans de continuar.", + "ErrorAddingListingsToSchedulesDirect": "S'ha produït un error en afegir la programació al vostre compte de Schedules Direct. Schedules Direct només permet un nombre limitat de programacions per compte. És possible que hàgiu d’iniciar sessió al lloc web de Schedules Direct i eliminar altres llistats del vostre compte abans de continuar.", "EnableThemeVideosHelp": "Reproduir vídeos temàtics en segon pla mentre navegues per la biblioteca.", "EnableStreamLoopingHelp": "Activeu aquesta opció si les transmissions en directe només contenen uns segons de dades i cal sol·licitar-les contínuament. Habilitar-ho quan no sigui necessari pot causar problemes.", "EnableFasterAnimationsHelp": "Utilitzeu animacions i transicions més ràpides.", @@ -1702,7 +1702,7 @@ "HeaderPerformance": "Rendiment", "LabelDummyChapterCountHelp": "El nombre màxim d'imatges del capítol que s'extreuran per a cada fitxer multimèdia.", "LabelParallelImageEncodingLimit": "Límit de codificació paral·lela d'imatges", - "LabelParallelImageEncodingLimitHelp": "Número màxim de codificacions d'imatge que es poden executar en paral·lel. Si es deixa buit, es triarà un límit en funció del número de nuclis.", + "LabelParallelImageEncodingLimitHelp": "Nombre màxim de codificacions d'imatge que es poden executar en paral·lel. Si es deixa buit, es triarà un límit en funció del nombre de nuclis.", "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Els extres sovint tenen el mateix nom incrustat que el principal, marqueu-ho per utilitzar-los títols incrustats de totes maneres.", "SaveRecordingNFO": "Desa les metadades EPG d'enregistrament a NFO", "SaveRecordingImages": "Guarda les imatges d'enregistrament EPG", @@ -1779,9 +1779,9 @@ "ForeignPartsOnly": "Només parts Forçades/Forànies", "HeaderGuestCast": "Estrelles Convidades", "HeaderAllRecordings": "Tots els enregistraments", - "LabelServerVersion": "Versió del Servidor", - "LabelWebVersion": "Versió Web", - "ButtonEditUser": "Editar usuari", + "LabelServerVersion": "Versió del servidor", + "LabelWebVersion": "Versió web", + "ButtonEditUser": "Edita l'usuari", "ChannelResolutionSD": "SD", "DeleteName": "Esborrar {0}", "ChannelResolutionFullHD": "Full HD", @@ -1915,14 +1915,14 @@ "MediaInfoRotation": "Rotació", "MoveToBottom": "Moure al final", "MoveToTop": "Moure al principi", - "EditLyrics": "Editar lletres", + "EditLyrics": "Edita la lletra", "HeaderAddLyrics": "Afegeix lletres", "HeaderPreviewLyrics": "Previsualitzar lletres", "HeaderUploadLyrics": "Pujar lletres", "LabelIsSynced": "Està sincronitzat", "NoLyricsSearchResultsFound": "No s'han trobat lletres.", "SearchForLyrics": "Cercar lletres", - "LibraryInvalidItemIdError": "La biblioteca està en un estat invàlid, i no es pot editar. És possible que hagis trobat un error: el camí de la base de dades no és un camí correcte al sistema de fitxers.", + "LibraryInvalidItemIdError": "La biblioteca està en un estat invàlid, i no es pot editar. És possible que hàgiu trobat un error: el camí de la base de dades no és un camí correcte al sistema de fitxers.", "LabelTrickplayKeyFrameOnlyExtraction": "Només generar imatges en fotogrames clau", "LabelTrickplayKeyFrameOnlyExtractionHelp": "Només extreure fotogrames clau per a un processament significativament més ràpid amb una sincronització menys precisa. Si el descodificador de maquinari configurat no admet aquest mode, en el seu lloc s'utilitzarà el descodificador per programari.", "AllowTonemappingSoftwareHelp": "El mapatge de tons pot transformar el rang dinàmic d'un vídeo d'HDR a SDR mantenint els detalls i els colors de la imatge, que són informació molt important per representar l'escena original. Actualment, només funciona amb vídeos HDR10, HLG i DoVi de 10 bits.", @@ -1997,7 +1997,7 @@ "Native": "Nadiu", "NativeSubtitleStylingHelp": "L'estilització de subtítols no funcionarà en alguns dispositius. Tot i això, no suposa cap sobrecàrrega de rendiment.", "LibraryNameInvalid": "El nom de la biblioteca no pot estar buit.", - "DeleteServerConfirmation": "De veritat vols eliminar aquest servidor?", + "DeleteServerConfirmation": "Esteu segur que voleu eliminar aquest servidor?", "LabelDevice": "Dispositiu", "LastActive": "Últim actiu", "CopyLogSuccess": "Registres copiats satisfactòriament.", @@ -2014,7 +2014,7 @@ "LabelGroupShowsIntoCollections": "Agrupar sèries en col·leccions", "LabelGroupShowsIntoCollectionsHelp": "Les sèries que estiguin dins d'una col·lecció es mostraran com un únic element agrupat quan es mostrin les llistes de sèries.", "CustomSplashScreenSize": "Les imatges personalitzades haurien de ser en 16x9 de ràtio d'aspecte i a una mida mínima de 1920x1080.", - "DeleteCustomImage": "Eliminar Imatge Personalitzada", + "DeleteCustomImage": "Elimina la imatge personalitzada", "ImageDeleteFailed": "Eliminació de la imatge fallida", "ImageUploadCancelled": "Pujada d'imatge cancel·lada", "ImageUploadFailed": "Pujada d'imatge fallida", From 9ed68413cbe751d4d5faa1d0b89c68521302fefb Mon Sep 17 00:00:00 2001 From: Martin Just Date: Wed, 11 Jun 2025 05:48:23 -0400 Subject: [PATCH 446/645] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/strings/de.json b/src/strings/de.json index 3f1192672..9d04dcfb4 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -1385,7 +1385,7 @@ "KnownProxiesHelp": "Kommagetrennte Liste von IP-Adressen oder Hostnamen bekannter Proxys, die bei der Verbindung mit dieser Jellyfin-Instanz verwendet werden. Dies ist erforderlich, um die X-Forwarded-For-Header korrekt verwenden zu können. Erfordert nach dem Speichern einen Neustart.", "LabelMaxMuxingQueueSizeHelp": "Maximale Anzahl von Paketen, die gepuffert werden können, während auf die Initialisierung aller Streams gewartet wird. Versuche diese zu erhöhen, wenn in den FFmpeg-Protokollen der Fehler \"Zu viele Pakete für den Ausgabestrom gepuffert\" auftaucht. Der empfohlene Wert ist 2048.", "LabelMaxMuxingQueueSize": "Maximale Größe der Muxing-Warteschlange", - "LabelTonemappingParamHelp": "Feinabstimmung des Tone-Mapping-Algorithmus. Die empfohlenen und Standardwerte sind NaN. Im Allgemeinen leer lassen.", + "LabelTonemappingParamHelp": "Feinabstimmung des Tone-Mapping-Algorithmus. Im Allgemeinen leer lassen.", "LabelTonemappingParam": "Tone-Mapping-Parameter", "LabelTonemappingPeakHelp": "Überschreibt den Maximalwert des Input Signals der eingebetteten Metadaten mit diesem Wert. Der Standardwert ist 100 (1000nit).", "LabelTonemappingPeak": "Tone-Mapping-Spitze", @@ -2055,5 +2055,11 @@ "StorageType.Network": "Netzwerk", "StorageType.Ram": "Arbeitsspeicher", "StorageType.Removable": "Wechselmedium", - "StorageType.Unknown": "Unbekannt" + "StorageType.Unknown": "Unbekannt", + "RepositoriesPageLoadError": "Repositories konnten nicht geladen werden", + "PluginsLoadError": "Beim Laden der Plugins ist ein Fehler aufgetreten.", + "ButtonLearnMore": "Mehr erfahren", + "TranscodingLoadError": "Transcodierungseinstellungen konnten nicht geladen werden", + "ConfirmDeleteRepository": "Repository löschen?", + "DeleteRepositoryConfirmation": "Sind Sie sicher, dass Sie dieses Repository löschen wollen?" } From a954af4628fb03ec3dae5bf9a949b16fc025df65 Mon Sep 17 00:00:00 2001 From: stanol Date: Wed, 11 Jun 2025 05:42:44 -0400 Subject: [PATCH 447/645] Translated using Weblate (Ukrainian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/uk/ --- src/strings/uk.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/strings/uk.json b/src/strings/uk.json index a7a8be5c7..30be018d8 100644 --- a/src/strings/uk.json +++ b/src/strings/uk.json @@ -960,7 +960,7 @@ "LabelTonemappingRange": "Діапазон тонального відображення", "LabelTonemappingPeakHelp": "Замініть вбудоване значення метаданих для вхідного сигналу на це пікове значення. Значення за замовчуванням - 100 (1000 ніт).", "LabelTonemappingPeak": "Пік тонального відображення", - "LabelTonemappingParamHelp": "Налаштуйте алгоритм тонального відображення. Рекомендоване значення та значення за замовчуванням - NaN. Зазвичай залиште його порожнім.", + "LabelTonemappingParamHelp": "Налаштуйте алгоритм тонального відображення. Зазвичай залиште його порожнім.", "LabelTonemappingParam": "Параметр тонального відображення", "LabelTonemappingDesat": "Зменшення насиченості тонального відображення", "LabelTonemappingAlgorithm": "Оберіть алгоритм тонального відображення, який потрібно використовувати", @@ -2052,5 +2052,11 @@ "StorageType.Removable": "Знімне", "StorageType.Unknown": "Невідоме", "Success": "Успіх", - "HeaderBackups": "Резервні копії" + "HeaderBackups": "Резервні копії", + "ConfirmDeleteRepository": "Видалити репозиторій?", + "DeleteRepositoryConfirmation": "Ви впевнені, що хочете видалити цей репозиторій?", + "PluginsLoadError": "Виникла помилка під час завантаження плагінів.", + "RepositoriesPageLoadError": "Не вдалося завантажити репозиторії", + "TranscodingLoadError": "Не вдалося завантажити налаштування перекодування", + "ButtonLearnMore": "Дізнатися більше" } From f0fcae35f535697057d552c70deadcaab5f1747b Mon Sep 17 00:00:00 2001 From: myrad2267 Date: Wed, 11 Jun 2025 06:25:42 -0400 Subject: [PATCH 448/645] Translated using Weblate (French (Canada)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr_CA/ --- src/strings/fr-ca.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/strings/fr-ca.json b/src/strings/fr-ca.json index 64d97aa0e..0b4dadf24 100644 --- a/src/strings/fr-ca.json +++ b/src/strings/fr-ca.json @@ -1053,7 +1053,7 @@ "LabelProtocolInfoHelp": "La valeur utilisée pour répondre aux requêtes « GetProtocolInfo » de l’appareil.", "Bold": "Gras", "LabelTonemappingDesatHelp": "Appliquer la désaturation pour les hautes lumières qui dépassent ce niveau de luminosité. La valeur recommandée est 0 (désactivé).", - "LabelTonemappingParamHelp": "Paramètre pour régler l’algorithme de tone-mapping. La valeur par défaut et recommandée est vide.", + "LabelTonemappingParamHelp": "Paramètre pour régler l’algorithme de tone-mapping. Recommandée de laisser vide.", "LabelSyncPlayLeaveGroupDescription": "Désactiver SyncPlay", "LabelSyncPlayNewGroup": "Nouveau groupe", "LabelPostProcessorArgumentsHelp": "Utilisez {path} comme le chemin d’accès au fichier d’enregistrement.", @@ -2000,5 +2000,10 @@ "Success": "Succès", "HeaderBackups": "Sauvegardes", "MessageBackupDisclaimer": "Selon la taille de votre médiathèque, le processus de sauvegarde peut prendre un certain temps.", - "PluginsLoadError": "Une erreur s'est produite lors du chargement des plugins." + "PluginsLoadError": "Une erreur s'est produite lors du chargement des plugins.", + "DeleteRepositoryConfirmation": "Êtes-vous sûr de vouloir supprimer ce dépôt ?", + "ButtonLearnMore": "En apprendre plus", + "TranscodingLoadError": "Échec du chargement des paramètres de transcodage", + "ConfirmDeleteRepository": "Supprimer le dépôt ?", + "RepositoriesPageLoadError": "Échec du chargement des dépôts" } From 2748001ba47617ec77a8572408145f32ceee31c3 Mon Sep 17 00:00:00 2001 From: myrad2267 Date: Wed, 11 Jun 2025 06:29:02 -0400 Subject: [PATCH 449/645] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index dd50e5b45..b8c5a62ba 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -1398,7 +1398,7 @@ "KnownProxiesHelp": "Liste séparée par des virgules des adresses IP ou noms des relais connus pour se connecter à ce serveur Jellyfin. Cette liste est nécessaire au bon fontionnement des en-têtes 'X-Forwarded-For'. Un redémarrage sera requis après sauvegarde.", "LabelTonemappingThreshold": "Seuil de mappage tonal", "LabelTonemappingDesatHelp": "Désaturer les couleurs qui dépassent ce niveau de luminosité. La valeur recommandée est 0 (désactivé).", - "LabelTonemappingParamHelp": "Régler l'algorithme de mappage tonal. Sauf cas particulier, il est recommandé de laisser ce champ vide.", + "LabelTonemappingParamHelp": "Paramètre pour régler l’algorithme de tone-mapping. Recommandée de laisser vide.", "LabelTonemappingPeak": "Pic de mappage tonal", "LabelTonemappingThresholdHelp": "Les paramètres de l'algorithme de mappage tonal sont affinés pour chaque scène. Définir ici le seuil utilisé pour détecter un changement de scène. Si la distance entre la moyenne actuelle de la luminosité du cadre et la moyenne mobile actuelle dépasse la valeur de ce seuil, la moyenne et le pic de la luminosité du cadre sont recalculés. La valeur recommandée est 0,8 ; la valeur par défaut est 0,2.", "LabelVideoRange": "Plage vidéo", @@ -2056,5 +2056,10 @@ "Success": "Succès", "MessageBackupDisclaimer": "Selon la taille de votre médiathèque, le processus de sauvegarde peut prendre un certain temps.", "MessageRestoreDisclaimer": "AVERTISSEMENT : Vous êtes sur le point de restaurer une sauvegarde précédente. Votre serveur sera inutilisable pendant toute la durée du processus et toutes les nouvelles données créées depuis la sauvegarde seront perdues.", - "PluginsLoadError": "Une erreur s'est produite lors du chargement des plugins." + "PluginsLoadError": "Une erreur s'est produite lors du chargement des plugins.", + "ButtonLearnMore": "En apprendre plus", + "TranscodingLoadError": "Échec du chargement des paramètres de transcodage", + "ConfirmDeleteRepository": "Supprimer le dépôt ?", + "DeleteRepositoryConfirmation": "Êtes-vous sûr de vouloir supprimer ce dépôt ?", + "RepositoriesPageLoadError": "Échec du chargement des dépôts" } From 92b7794136cb194ab622b7acd7420fe781091356 Mon Sep 17 00:00:00 2001 From: Battseren Badral Date: Wed, 11 Jun 2025 07:41:22 -0400 Subject: [PATCH 450/645] Translated using Weblate (Mongolian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/mn/ --- src/strings/mn.json | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/strings/mn.json b/src/strings/mn.json index 2972aec05..28fc85aff 100644 --- a/src/strings/mn.json +++ b/src/strings/mn.json @@ -3,10 +3,10 @@ "Songs": "Дуунууд", "Playlists": "Тоглуулах жагсаалт", "Movies": "Кино", - "Genres": "Төрөл зүйл", + "Genres": "Төрлүүд", "Favorites": "Дуртай", "Collections": "Багц", - "Artists": "Зураачуд", + "Artists": "Уран бүтээлчид", "ButtonCancel": "Цуцлах", "Artist": "Жүжигчин", "Album": "Цомог", @@ -100,5 +100,13 @@ "AccessRestrictedTryAgainLater": "Одоогоор хандалт хязгаарлагдмал байна. Дараа дахин оролдож үзнэ үү.", "Actor": "Жүжигчин", "Add": "Нэмэх", - "AddedOnValue": "Нэмсэн" + "AddedOnValue": "Нэмсэн", + "Shows": "Нэвтрүүлгүүд", + "Photos": "Зургууд", + "MusicVideos": "Дууны клип", + "Folders": "Хавтаснууд", + "Channels": "Сувгууд", + "HeaderAlbumArtists": "Цомгийн уран бүтээлчид", + "ValueSpecialEpisodeName": "Тусгай - {0}", + "Default": "Өгөгдмөл" } From 6b89afe3cc5be40e61b8f52a691b4063f041ae9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20Montan=C3=A9?= Date: Wed, 11 Jun 2025 08:21:15 -0400 Subject: [PATCH 451/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 8a970c31d..9a7127457 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -640,7 +640,7 @@ "ClientSettings": "Configuració del client", "CinemaModeConfigurationHelp": "El mode Cinema aporta l'experiència del teatre directament a la sala d'estar amb la possibilitat de jugar a tràilers i presentacions personalitzades abans de la funció principal.", "ChannelNameOnly": "Només el canal {0}", - "ChangingMetadataImageSettingsNewContent": "Els canvis als paràmetres de descàrrega de metadades o imatges només s'apliquen al contingut nou afegit a la mediateca. Per aplicar els canvis als títols existents, haureu d'actualitzar les metadades manualment.", + "ChangingMetadataImageSettingsNewContent": "Els canvis als paràmetres de descàrrega de metadades o imatges només s'apliquen al contingut nou afegit a la mediateca. Per a aplicar els canvis als títols existents, haureu d'actualitzar les metadades manualment.", "ButtonTogglePlaylist": "Llista de reproducció", "BurnSubtitlesHelp": "Determina si el servidor hauria de gravar els subtítols. Evitant això millorarà molt el rendiment. Selecciona Auto per gravar formats basats en imatges (VobSub, PGS, SUB, IDX) i certs subtítols ASS o SSA.", "Browse": "Navega", @@ -670,7 +670,7 @@ "ColorTransfer": "Transferència de color", "ColorSpace": "Espai de color", "ColorPrimaries": "Colors primaris", - "DefaultMetadataLangaugeDescription": "Aquests son els vostres valors per defecte i poden ser personalitzats per a cada mediateca.", + "DefaultMetadataLangaugeDescription": "Aquests són els vostres valors per defecte i poden ser personalitzats per a cada mediateca.", "Default": "Per defecte", "DatePlayed": "Data reproduït", "DateAdded": "Data d'addició", @@ -701,7 +701,7 @@ "ErrorAddingTunerDevice": "S'ha produït un error en afegir el dispositiu sintonitzador. Assegureu-vos que sigui accessible i torneu-ho a provar.", "ErrorAddingMediaPathToVirtualFolder": "S'ha produït un error en afegir la ruta multimèdia. Assegureu-vos que la ruta sigui vàlida i que Jellyfin tingui accés a aquesta ubicació.", "Episode": "Episodi", - "EnableThemeSongsHelp": "Reprodueix sintonies en segon pla mentre navegues per la biblioteca.", + "EnableThemeSongsHelp": "Reprodueix sintonies en segon pla mentre navegueu per la biblioteca.", "EnableStreamLooping": "Bucle automàtic en emisions en directe", "EnableQuickConnect": "Activar Quick Connect en aquest servidor", "EnablePhotosHelp": "Les imatges es detectaran i es mostraran al costat d'altres fitxers multimèdia.", @@ -756,7 +756,7 @@ "AllowTonemappingHelp": "El mapeig de tons pot transformar el rang dinàmic d'un vídeo d'HDR a SDR mantenint els detalls i els colors de la imatge, que són informació molt important per representar l'escena original. Actualment només funciona amb vídeos 10 bit HDR10, HLG o DoVi. Això requereix el temps d'execució GPGPU corresponent.", "ErrorPleaseSelectLineup": "Trieu una alineació i torneu-ho a provar. Si no hi ha cap formació disponible, comproveu que el vostre nom d’usuari, contrasenya i codi postal siguin correctes.", "ErrorAddingListingsToSchedulesDirect": "S'ha produït un error en afegir la programació al vostre compte de Schedules Direct. Schedules Direct només permet un nombre limitat de programacions per compte. És possible que hàgiu d’iniciar sessió al lloc web de Schedules Direct i eliminar altres llistats del vostre compte abans de continuar.", - "EnableThemeVideosHelp": "Reproduir vídeos temàtics en segon pla mentre navegues per la biblioteca.", + "EnableThemeVideosHelp": "Reprodueix vídeos temàtics en segon pla mentre navegueu per la biblioteca.", "EnableStreamLoopingHelp": "Activeu aquesta opció si les transmissions en directe només contenen uns segons de dades i cal sol·licitar-les contínuament. Habilitar-ho quan no sigui necessari pot causar problemes.", "EnableFasterAnimationsHelp": "Utilitzeu animacions i transicions més ràpides.", "EnableFasterAnimations": "Animacions més ràpides", @@ -1113,7 +1113,7 @@ "LabelTonemappingRange": "Gamma de mapa de tons", "LabelTonemappingPeakHelp": "Anul·la el valor de metadades incrustat pel senyal d'entrada amb aquest valor com a pic. El valor per defecte és 100 (1000 nits).", "LabelTonemappingPeak": "Pic del mapa de tons", - "LabelTonemappingParamHelp": "Afinar el algoritme d'assignació de to. Els valors recomanats i per defecte són NaN. Generalment deixar-la en blanc.", + "LabelTonemappingParamHelp": "Ajusta l'algoritme d'assignació de to. Generalment, deixeu-ho en blanc.", "LabelTonemappingParam": "Paràmetres de mapa de tons", "LabelTonemappingDesatHelp": "Aplicar dessaturació de punts destacats que superen aquest nivell de brillantor. El valor recomanat és 0 (desactivar).", "LabelTonemappingDesat": "Mapa de tons desat", @@ -2053,5 +2053,9 @@ "StorageType.Removable": "Retirable", "StorageType.Unknown": "Desconegut", "PluginsLoadError": "S'ha produït un error en carregar els complements.", - "ButtonLearnMore": "En voleu saber més?" + "ButtonLearnMore": "En voleu saber més?", + "RepositoriesPageLoadError": "No s'han pogut carregar els repositoris", + "TranscodingLoadError": "No s'han pogut carregar els paràmetres de transcodificació", + "ConfirmDeleteRepository": "Voleu esborrar el repositori?", + "DeleteRepositoryConfirmation": "Esteu segur de voler esborrar aquest repositori?" } From afc914b162982e354c11a74446635cd989c91b8c Mon Sep 17 00:00:00 2001 From: yoga sree jagadam Date: Wed, 11 Jun 2025 09:43:00 -0400 Subject: [PATCH 452/645] Translated using Weblate (Telugu) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/te/ --- src/strings/te.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/strings/te.json b/src/strings/te.json index bff96499c..ee89bc7dd 100644 --- a/src/strings/te.json +++ b/src/strings/te.json @@ -163,7 +163,7 @@ "Subtitles": "ఉపశీర్షికలు", "SubtitleOffset": "ఉపశీర్షిక ఆఫ్‌సెట్", "SubtitleDownloadersHelp": "ప్రాధాన్యత క్రమంలో మీకు ఇష్టమైన ఉపశీర్షిక డౌన్‌లోడ్‌లను ప్రారంభించండి మరియు ర్యాంక్ చేయండి.", - "SubtitleAppearanceSettingsDisclaimer": "ఈ సెట్టింగులు గ్రాఫికల్ ఉపశీర్షికలకు (పిజిఎస్, డివిడి, మొదలైనవి) లేదా వారి స్వంత శైలులను పొందుపరిచే ASS / SSA ఉపశీర్షికలకు వర్తించవు.", + "SubtitleAppearanceSettingsDisclaimer": "పైన పేర్కొన్న గ్రాఫికల్ ఉపశీర్షికలుకు లేదా వాటి స్వంత శైలులను ఎస్యాస్/యాస్యాస్ఎ ఉపశీర్షికలుకు కింది సెట్టింగ్‌లు వర్తించవు.", "ShowTitle": "శీర్షిక చూపించు", "Shows": "ప్రదర్శనలు", "ShowMore": "ఇంకా చూపించు", @@ -505,7 +505,7 @@ "LabelYear": "సంవత్సరం", "LabelXDlnaDocHelp": "X_DLNADOC మూలకం యొక్క కంటెంట్‌ను urn: schemas-dlna-org: device-1-0 నేమ్‌స్పేస్‌లో నిర్ణయిస్తుంది.", "LabelXDlnaDoc": "X-DLNA పత్రం", - "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "ఈ పరికరం ప్రారంభించిన ఏదైనా Chromecast ప్లేబ్యాక్‌కు కూడా ఈ సెట్టింగ్‌లు వర్తిస్తాయి.", + "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "ఈ పరికరం ద్వారా ప్రారంభించబడిన ఏదైనా గూగుల్ కాస్ట్ ప్లేబ్యాక్‌కు కూడా ఈ సెట్టింగ్‌లు వర్తిస్తాయి.", "Subtitle": "ఉపశీర్షిక", "Studios": "స్టూడియోస్", "StopRecording": "రికార్డింగ్ ఆపు", @@ -2006,5 +2006,6 @@ "TypeOptionPluralMusicAlbum": "సంగీత ఆల్బమ్‌లు", "LabelTrackGain": "ట్రాక్ లాభం", "AllowEmbeddedSubtitlesAllowNoneOption": "ఎవరినీ అనుమతించవద్దు", - "PluginLoadRepoError": "రిపోజిటరీ నుండి ప్లగిన్ వివరాలను పొందుతున్నప్పుడు లోపం సంభవించింది." + "PluginLoadRepoError": "రిపోజిటరీ నుండి ప్లగిన్ వివరాలను పొందుతున్నప్పుడు లోపం సంభవించింది.", + "StorageType.Unknown": "తెలియదు" } From c05178c6e2f0cf871d24185549824492d42f4f7b Mon Sep 17 00:00:00 2001 From: Battseren Badral Date: Wed, 11 Jun 2025 08:14:01 -0400 Subject: [PATCH 453/645] Translated using Weblate (Mongolian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/mn/ --- src/strings/mn.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/mn.json b/src/strings/mn.json index 28fc85aff..d0a63d892 100644 --- a/src/strings/mn.json +++ b/src/strings/mn.json @@ -108,5 +108,6 @@ "Channels": "Сувгууд", "HeaderAlbumArtists": "Цомгийн уран бүтээлчид", "ValueSpecialEpisodeName": "Тусгай - {0}", - "Default": "Өгөгдмөл" + "Default": "Өгөгдмөл", + "AddToCollection": "Цуглуулгад нэмэх" } From af0094691b793cc0587594b0edbfbabdfe4ba779 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Wed, 11 Jun 2025 13:00:45 -0400 Subject: [PATCH 454/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 9a7127457..971fe438d 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -142,11 +142,11 @@ "HeaderLatestMovies": "Pel·lícules afegides darrerament", "HeaderLatestMusic": "Música afegida darrerament", "HeaderLatestRecordings": "Enregistraments afegits darrerament", - "HeaderLibraries": "Llibreries", - "HeaderLibraryAccess": "Accés a la biblioteca", - "HeaderLibraryFolders": "Directoris de la biblioteca", - "HeaderLibraryOrder": "Ordre de la biblioteca", - "HeaderLibrarySettings": "Configuració de la biblioteca", + "HeaderLibraries": "Mediateques", + "HeaderLibraryAccess": "Accés a la mediateca", + "HeaderLibraryFolders": "Directoris de la mediateca", + "HeaderLibraryOrder": "Ordre de la mediateca", + "HeaderLibrarySettings": "Configuració de la mediateca", "HeaderMediaFolders": "Carpetes multimèdia", "HeaderMetadataSettings": "Preferències de les metadades", "HeaderMyDevice": "El meu dispositiu", @@ -663,7 +663,7 @@ "CopyStreamURL": "Copia l'URL de reproducció", "ContinueWatching": "Continueu mirant-ho", "ConfirmEndPlayerSession": "Vols tancar Jellyfin a {0}?", - "ConfirmDeleteItems": "L'eliminació d'aquests elements els suprimirà del sistema de fitxers i de la biblioteca multimèdia. N'esteu segur que desitgeu continuar?", + "ConfirmDeleteItems": "L'eliminació d'aquests elements els suprimirà del sistema de fitxers i de la mediateca. N'esteu segur que desitgeu continuar?", "ConfirmDeleteItem": "Eliminar aquest element l'eliminarà del sistema de fitxers i de la mediateca. N'esteu segur, que desitgeu continuar?", "ConfigureDateAdded": "Configureu com es determinen les metadades de la \"Data d'afegit\" al Tauler > Mediateques > Visualització", "CommunityRating": "Ràting comunitari", @@ -701,7 +701,7 @@ "ErrorAddingTunerDevice": "S'ha produït un error en afegir el dispositiu sintonitzador. Assegureu-vos que sigui accessible i torneu-ho a provar.", "ErrorAddingMediaPathToVirtualFolder": "S'ha produït un error en afegir la ruta multimèdia. Assegureu-vos que la ruta sigui vàlida i que Jellyfin tingui accés a aquesta ubicació.", "Episode": "Episodi", - "EnableThemeSongsHelp": "Reprodueix sintonies en segon pla mentre navegueu per la biblioteca.", + "EnableThemeSongsHelp": "Reprodueix sintonies en segon pla mentre es navega per la mediateca.", "EnableStreamLooping": "Bucle automàtic en emisions en directe", "EnableQuickConnect": "Activar Quick Connect en aquest servidor", "EnablePhotosHelp": "Les imatges es detectaran i es mostraran al costat d'altres fitxers multimèdia.", @@ -756,7 +756,7 @@ "AllowTonemappingHelp": "El mapeig de tons pot transformar el rang dinàmic d'un vídeo d'HDR a SDR mantenint els detalls i els colors de la imatge, que són informació molt important per representar l'escena original. Actualment només funciona amb vídeos 10 bit HDR10, HLG o DoVi. Això requereix el temps d'execució GPGPU corresponent.", "ErrorPleaseSelectLineup": "Trieu una alineació i torneu-ho a provar. Si no hi ha cap formació disponible, comproveu que el vostre nom d’usuari, contrasenya i codi postal siguin correctes.", "ErrorAddingListingsToSchedulesDirect": "S'ha produït un error en afegir la programació al vostre compte de Schedules Direct. Schedules Direct només permet un nombre limitat de programacions per compte. És possible que hàgiu d’iniciar sessió al lloc web de Schedules Direct i eliminar altres llistats del vostre compte abans de continuar.", - "EnableThemeVideosHelp": "Reprodueix vídeos temàtics en segon pla mentre navegueu per la biblioteca.", + "EnableThemeVideosHelp": "Reprodueix vídeos temàtics en segon pla mentre es navega per la mediateca.", "EnableStreamLoopingHelp": "Activeu aquesta opció si les transmissions en directe només contenen uns segons de dades i cal sol·licitar-les contínuament. Habilitar-ho quan no sigui necessari pot causar problemes.", "EnableFasterAnimationsHelp": "Utilitzeu animacions i transicions més ràpides.", "EnableFasterAnimations": "Animacions més ràpides", @@ -1526,7 +1526,7 @@ "HeaderMedia": "Contingut multimèdia", "HeaderLoginFailure": "Error en l'inici de sessió", "HeaderLiveTvTunerSetup": "Configuració del sintonitzador de TV", - "HeaderKodiMetadataHelp": "Per activar o desactivar les metadades NFO, editeu una biblioteca i busqueu la secció d'Estalviadors de metadades.", + "HeaderKodiMetadataHelp": "Per activar o desactivar les metadades NFO, editeu una mediateca i busqueu la secció d'Estalviadors de metadades.", "HeaderImageOptions": "Opcions de la imatge", "HeaderIdentifyItemHelp": "Introduïu un o més criteris de cerca. Elimineu criteris per augmentar els resultats de cerca.", "HeaderHttpsSettings": "Configuració de HTTPS", @@ -1857,7 +1857,7 @@ "ExtractTrickplayImagesHelp": "Les imatges de Trickplay són similars a les imatges de capítols, excepte que abasten tota la longitud del contingut i s'utilitzen per mostrar una vista prèvia quan es desplaça pels vídeos.", "LabelTrickplayAccelEncodingHelp": "En aquests moments només està disponible en QSV, VAAPI, VideoToolbox i RKMPP, aquesta opció no afecta els altres mètodes d'acceleració per maquinari.", "LabelTrickplayAccelEncoding": "Habilitar codificació MJPEG accelerada per maquinari", - "ConfirmDeleteLyrics": "L'esborrat d'aquestes lletres, les suprimirà tant del sistema de fitxers com de la vostra biblioteca multimèdia. Esteu segur que voleu continuar?", + "ConfirmDeleteLyrics": "L'esborrat d'aquestes lletres, les suprimirà tant del sistema de fitxers com de la vostra mediateca. N'esteu segur que desitgeu continuar?", "ErrorDeletingLyrics": "S'ha produït un error en suprimir les lletres del servidor. Si us plau, comproveu que Jellyfin tingui accés d'escriptura a la carpeta multimèdia i torneu-ho a provar.", "HeaderDeleteLyrics": "Esborrar Lletres", "DeleteLyrics": "Esborrar lletres", From 0b1a976d42839be01eb00660c8c3ef80a491e1bd Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Wed, 11 Jun 2025 14:29:57 -0400 Subject: [PATCH 455/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 52 ++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 971fe438d..e9b32d616 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -255,7 +255,7 @@ "LabelEpisodeNumber": "Episodi", "LabelEvent": "Esdeveniment", "LabelEveryXMinutes": "Cada", - "LabelExtractChaptersDuringLibraryScan": "Extrau imatges dels episodis durant l'escaneig de la biblioteca", + "LabelExtractChaptersDuringLibraryScan": "Extreu imatges dels episodis durant l'escaneig de la mediateca", "LabelFailed": "Fallit", "LabelFinish": "Finalitzar", "LabelFriendlyName": "Nom amistós", @@ -386,7 +386,7 @@ "MessageConfirmRestart": "Esteu segur que voleu reiniciar Jellyfin?", "MessageContactAdminToResetPassword": "Contacteu amb l'administrador per a restablir la contrasenya.", "MessageDownloadQueued": "Descàrrega encuada.", - "MessageEnablingOptionLongerScans": "Habilitar aquesta opció pot resultar en escanejos de la biblioteca significativament més lents.", + "MessageEnablingOptionLongerScans": "Habilitar aquesta opció pot resultar en escanejos significativament més lents de la mediateca.", "MessageItemSaved": "Ítem desat.", "MessageItemsAdded": "Ítems afegits.", "MessageNoAvailablePlugins": "No hi ha complements disponibles.", @@ -524,7 +524,7 @@ "Share": "Comparteix", "ShowIndicatorsFor": "Mostra indicadors per a", "Shuffle": "Aleatori", - "SkipEpisodesAlreadyInMyLibrary": "No enregistris episodis que ja estan a la meva biblioteca", + "SkipEpisodesAlreadyInMyLibrary": "No enregistris episodis que ja són a la mediateca", "SkipEpisodesAlreadyInMyLibraryHelp": "Els episodis es compararan emprant la temporada i el nombre d'episodi quan siguin disponibles.", "SortName": "Nom per endreçar", "Studios": "Estudis", @@ -576,7 +576,7 @@ "Watched": "Vist", "Wednesday": "Dimecres", "WelcomeToProject": "Et donem la benvinguda a Jellyfin!", - "WizardCompleted": "Això és tot el que necessitem per ara. Jellyfin ha començat a recollir informació de la vostra biblioteca multimèdia. Mireu-vos alguna de les nostres apps i llavors feu clic a Finalitzar per veure el Tauler de control.", + "WizardCompleted": "Això és tot el que necessitem per ara. Jellyfin ha començat a recollir informació de la vostra mediateca. Mireu-vos alguna de les nostres apps i llavors feu clic a Finalitzar per veure el Tauler de control.", "Writer": "Escriptor", "XmlTvKidsCategoriesHelp": "Els programes amb aquestes categories es mostraran com a programes infantils. Separa'n varis emprant '|'.", "XmlTvMovieCategoriesHelp": "Els programes amb aquestes categories es mostraran com a pel·lícules. Separa'n varis emprant '|'.", @@ -944,8 +944,8 @@ "SimultaneousConnectionLimitHelp": "El nombre màxim de transmissions simultànies permeses. Establiu 0 per a cap límit.", "ShowYear": "Mostrar l'any", "ShowTitle": "Mostrar el títol", - "ShowMore": "Mostra més", - "ShowLess": "Mostrar menys", + "ShowMore": "Mostra'n més", + "ShowLess": "Mostra menys", "ShowAdvancedSettings": "Mostra la configuració avançada", "SettingsWarning": "El canvi d'aquests valors pot causar errors d'inestabilitat o de connectivitat. Si teniu algun problema, es recomana canviar-les per defecte.", "ServerRestartNeededAfterPluginInstall": "Jellyfin haurà de ser reiniciat després d'instal·lar el complement.", @@ -960,14 +960,14 @@ "SearchResults": "Resultats de la cerca", "Screenshot": "Captura", "Schedule": "Programar", - "ScanLibrary": "biblioteca d'escaneig", + "ScanLibrary": "Escaneja la mediateca", "ScanForNewAndUpdatedFiles": "Cerca fitxers nous i actualitzats", "SaveSubtitlesIntoMediaFoldersHelp": "L'emmagatzematge de subtítols al costat dels arxius de vídeo que els permetrà ser manejats amb més facilitat.", "SaveSubtitlesIntoMediaFolders": "Desa els subtítols en els directoris de continguts multimèdia", "NoSubtitlesHelp": "Els subtítols no seran carregats per defecte. Encara es poden activar de forma manual durant la reproducció.", "Normal": "Normal", "NoNewDevicesFound": "No s'han trobat dispositius nous. Per afegir un nou sintonitzador, tanqueu aquest avís i introduïu la informació del dispositiu de forma manual.", - "NoCreatedLibraries": "Sembla que no s'ha creat cap biblioteca encara. {0} Us agradaria crear-ne una ara? {1}", + "NoCreatedLibraries": "Sembla que encara no s'ha creat cap mediateca. {0} Us agradaria crear-ne una ara? {1}", "No": "No", "NextUp": "A continuació", "NextTrack": "Passar a la següent", @@ -987,7 +987,7 @@ "Metadata": "Metadades", "MessageUnsetContentHelp": "El contingut es mostrarà com carpetes de civil. Per obtenir els millors resultats utilitzar el gestor de metadades per establir els tipus de contingut de les subcarpetes.", "MessageUnableToConnectToServer": "No es pot connectar amb el servidor seleccionat en aquest moment. Assegureu-vos que està funcionant i torni a intentar-ho.", - "MessageTheFollowingLocationWillBeRemovedFromLibrary": "S'eliminaran les següents ubicacions de la biblioteca multimèdia", + "MessageTheFollowingLocationWillBeRemovedFromLibrary": "Les ubicacions següents s'eliminaran de la mediateca", "MessageSyncPlayUserLeft": "{0} ha deixat el grup.", "MessageSyncPlayUserJoined": "{0} s'ha unit al grup.", "MessageSyncPlayPlaybackPermissionRequired": "Permís de reproducció requerit.", @@ -1064,7 +1064,7 @@ "MediaInfoAnamorphic": "Anamòrfic", "MapChannels": "Mapa de canals", "ManageRecording": "Maneig de gravació", - "ManageLibrary": "Maneig de la biblioteca", + "ManageLibrary": "Gestió de la mediateca", "Logo": "Logo", "LiveTV": "TV en directe", "LiveBroadcasts": "Emissions en directe", @@ -1234,8 +1234,8 @@ "LabelLocalHttpServerPortNumberHelp": "El número de port TCP per al servidor HTTP.", "LabelLocalCustomCss": "Estil CSS personalitzat que s'aplica només a aquest client. És possible que vulgueu desactivar el servidor de CSS personalitzat.", "LabelLineup": "Els titulars", - "LabelLibraryPageSizeHelp": "Estableix la quantitat d'elements a mostrar en una pàgina de la biblioteca. Es posa a 0 per tal de desactivar la paginació.", - "LabelLibraryPageSize": "Mida de pàgina de la biblioteca", + "LabelLibraryPageSizeHelp": "Estableix la quantitat d'elements a mostrar en una pàgina de la mediateca. Es posa a 0 per tal de desactivar la paginació.", + "LabelLibraryPageSize": "Mida de pàgina de la mediateca", "LabelLanNetworks": "Xarxes LAN", "LabelKodiMetadataUserHelp": "Guarda les dades de visionat en arxius NFO de manera que altres aplicacions les puguin utilitzar.", "LabelKodiMetadataUser": "Guardar les dades de visualització d'usuari en arxius NFO per a", @@ -1267,7 +1267,7 @@ "LabelFolder": "Carpeta", "LabelFileOrUrl": "Arxiu o URL", "LabelffmpegPath": "FFmpeg ruta", - "LabelExtractChaptersDuringLibraryScanHelp": "Generar imatges de capítols quan els vídeos s'importen durant l'exploració de la biblioteca. En cas contrari, seran extrets durant les imatges capítol tasca programada, el que permet l'exploració de la biblioteca regular per completar més ràpid.", + "LabelExtractChaptersDuringLibraryScanHelp": "Genera imatges de capítols quan els vídeos són importats durant l'escaneig de la mediateca. Desmarcant, les imatges es descarregaran quan s'executi la tasca programada, permetent un escaneig més ràpid de la mediateca.", "LabelEncoderPreset": "Codificació preestablert", "LabelEnableSSDPTracing": "Habilitar rastreig SSDP", "LabelEnableSingleImageInDidlLimitHelp": "Alguns dispositius no es mostri correctament si diverses imatges estan integrats dins de DIDL.", @@ -1382,7 +1382,7 @@ "RepeatAll": "Repeteix-ho tot", "RefreshDialogHelp": "Les metadades s'actualitzen segons la configuració i serveis d'internet habilitats al Tauler de control.", "Recordings": "Enregistraments", - "RecommendationStarring": "Protagonitzada {0}", + "RecommendationStarring": "Protagonitzada per {0}", "RecommendationDirectedBy": "Dirigida per {0}", "RecommendationBecauseYouLike": "Perquè t'agrada {0}", "Rate": "Rati", @@ -1414,7 +1414,7 @@ "PleaseSelectTwoItems": "Seleccioneu al menys dos ítems.", "PleaseEnterNameOrId": "Introdueixi un nom o un ID extern.", "PleaseConfirmPluginInstallation": "Feu clic a 'D'acord' per confirmar que ha llegit el text de dalt i desitja procedir amb la instal·lació del complement.", - "PleaseAddAtLeastOneFolder": "Afegiu al menys una carpeta a aquesta biblioteca fent clic al botó '+'.", + "PleaseAddAtLeastOneFolder": "Afegiu-hi almenys un directori fent clic al botó '+'.", "PlayNextEpisodeAutomatically": "Jugar el proper episodi de forma automàtica", "PlayNext": "Reproduir el següent", "PlayCount": "Contador de reproduccions", @@ -1474,7 +1474,7 @@ "OptionCustomUsers": "Personalitzat", "OptionCaptionInfoExSamsung": "CaptionInfoEx (Samsung)", "OptionBluray": "BD", - "OptionAutomaticallyGroupSeriesHelp": "Sèrie que es distribueixen en diverses carpetes dins d'aquesta biblioteca es combinarà automàticament en una sola sèrie.", + "OptionAutomaticallyGroupSeriesHelp": "Les sèries que es distribueixen entre diversos directoris d'aquesta mediateca es combinaran automàticament en una única sèrie.", "OptionAutomaticallyGroupSeries": "Automàticament sèrie que es distribueixen en diverses carpetes", "OptionAllowVideoPlaybackTranscoding": "Permet la reproducció de vídeo que requereix la transcodificació", "OptionAllowVideoPlaybackRemuxing": "Permet la reproducció de vídeo que requereix una conversió sense recodificació", @@ -1608,7 +1608,7 @@ "AllowEmbeddedSubtitlesAllowImageOption": "Permetre imatge", "AllowEmbeddedSubtitlesAllowNoneOption": "No permetre cap", "AllowEmbeddedSubtitlesAllowAllOption": "Permet-ho tot", - "AllowEmbeddedSubtitlesHelp": "Desactiveu els subtítols empaquetats dins dels contenidors multimèdia. Requereix una actualització completa de la biblioteca.", + "AllowEmbeddedSubtitlesHelp": "Desactiva els subtítols empaquetats dins dels contenidors multimèdia. Requereix una actualització completa de la mediateca.", "AllowEmbeddedSubtitles": "Desactivar diferents tipus de subtítols incrustats", "OriginalAirDate": "Data d'emissió original", "MixedMoviesShows": "Pel·lícules i sèries mixtes", @@ -1656,7 +1656,7 @@ "MessageNoFavoritesAvailable": "No hi han preferits disponibles actualment.", "OptionDateEpisodeAdded": "Data d'addició de l'episodi", "MessageNoItemsAvailable": "No hi han elements disponibles actualment.", - "MessageRenameMediaFolder": "Canviar una biblioteca de nom provocarà que es perdin totes les metadades, continueu amb precaució.", + "MessageRenameMediaFolder": "Canviar una mediateca de nom provocarà que es perdin totes les metadades, continueu amb precaució.", "LabelTextWeight": "Estil del text", "RememberSubtitleSelections": "Establir la pista de subtítols en funció de l'element anterior", "LabelVppTonemappingBrightnessHelp": "Aplicar el guany de brillantor al mapa de to VPP. El valor recomanat és 16.", @@ -1722,7 +1722,7 @@ "EnableAudioNormalization": "Normalització d'àudio", "LabelEnableLUFSScan": "Activar escaneig LUFS", "Select": "Seleccionar", - "LabelEnableLUFSScanHelp": "Els clients poden normalitzar la reproducció d'àudio per obtenir un nivell de volum igual entre totes les pistes d'àudio. Això farà que els escanejos de la biblioteca siguin més duraders i requereixin de més recursos.", + "LabelEnableLUFSScanHelp": "Els clients poden normalitzar la reproducció d'àudio per obtenir un nivell de volum igual entre pistes d'àudio. Això farà que els escanejos de la mediateca s'allarguin més i els calgui més recursos.", "TonemappingModeHelp": "Selecciona el mode de mapeig de to. Si experimentes zones sobreexposades, prova a canviar al mode RGB.", "EnableAudioNormalizationHelp": "La normalització de l'àudio afegirà un guany constant per mantenir la mitjana al nivell desitjat (-18dB).", "GetThePlugin": "Obtenir el Plugin", @@ -1801,7 +1801,7 @@ "LabelEncodingFormatOptions": "Opcions de format de codificació", "LabelTrickplayAccelHelp": "Assegura't d'habilitar 'Permetre codificació MJPEG' a Transcodificació si el teu maquinari ho suporta.", "LabelWidthResolutions": "Resolucions d'Amplada", - "LabelScanBehaviorHelp": "El comportament predeterminat és sense blocatge, cosa que afegirà contingut multimèdia a la biblioteca abans que la generació de la previsualització es completi. El bloqueig assegura que els fitxers de previsualització es generin abans que el contingut multimèdia no s'afegeixi a la biblioteca, però farà que l'escaneig sigui significativament més llarg.", + "LabelScanBehaviorHelp": "El comportament predeterminat és sense blocatge, cosa que afegirà contingut multimèdia a la mediateca abans que la generació de la previsualització es completi. El bloqueig assegura que els fitxers de previsualització es generin abans que el contingut multimèdia no s'afegeixi a la mediateca, però farà que l'escaneig sigui significativament més llarg.", "LabelProcessPriorityHelp": "Establint-ho més baix o més alt determinarà com el processador prioritza el procés de generació de trickplay ffmpeg en relació amb altres processos. Si observeu una ralentització mentre genereu imatges de trickplay, però no voleu aturar completament la seva generació, proveu de reduir-la així com el nombre de fils.", "AirPlay": "AirPlay", "AllowContentWithTagsHelp": "Mostra només el contingut multimèdia amb com a mínim alguna de les etiquetes especificades.", @@ -1837,8 +1837,8 @@ "LabelJpegQualityHelp": "Qualitat de compressió JPEG per a les imatges de trickplay.", "LabelQscale": "Qscale", "OptionExtractTrickplayImage": "Habilitar extracció d'imatges de trickplay", - "LabelExtractTrickplayDuringLibraryScan": "Extreure imatges de trickplay durant l'escaneig de la biblioteca", - "LabelExtractTrickplayDuringLibraryScanHelp": "Generar imatges de trickplay quan els vídeos són importats durant l'escaneig de la biblioteca. D'altra banda, seran extrets durant la tasca programada d'imatges de trickplay. Si la generació està marcada com a sense bloqueig, això no afectarà el temps que triga a completar l'exploració de la biblioteca.", + "LabelExtractTrickplayDuringLibraryScan": "Extreu imatges de previsualització durant l'escaneig de la mediateca", + "LabelExtractTrickplayDuringLibraryScanHelp": "Genera imatges de previsualització quan els vídeos són importats durant l'escaneig de la mediateca. D'altra banda, seran extrets durant la tasca programada d'imatges de previsualització. Si la generació està marcada com a sense bloqueig, això no afectarà el temps que triga a completar l'exploració de la mediateca.", "DeleteEntireSeries": "Elimina {0} episodis", "DeleteSeries": "Esborrar Sèries", "DeleteEpisode": "Elimina l'episodi", @@ -1885,7 +1885,7 @@ "SaveLyricsIntoMediaFolders": "Desa la lletra a les carpetes multimèdia", "SaveLyricsIntoMediaFoldersHelp": "Emmagatzemar les lletres al costat dels fitxers d'àudio permetrà gestionar-les més fàcilment.", "LabelSelectPreferredTranscodeVideoAudioCodec": "Còdec d'àudio de transcodificació preferit en la reproducció de vídeo", - "LibraryScanFanoutConcurrencyHelp": "Nombre màxim de tasques paral·leles durant les exploracions de la biblioteca. Si es deixa buit, es triarà un límit basat en el nombre de nuclis del vostre sistema. ADVERTÈNCIA: establir aquest número massa alt pot causar problemes amb els sistemes de fitxers de xarxa; si trobeu problemes, baixeu aquest número.", + "LibraryScanFanoutConcurrencyHelp": "Nombre màxim de tasques paral·leles durant les exploracions de la mediateca. Si es deixa buit, es triarà un límit basat en el nombre de nuclis del vostre sistema. ADVERTÈNCIA: establir aquest número massa alt pot causar problemes amb els sistemes de fitxers de xarxa; si trobeu problemes, baixeu aquest número.", "SelectPreferredTranscodeVideoAudioCodecHelp": "Seleccioneu el còdec d'àudio preferit per transcodificar per al contingut de vídeo. Si el còdec preferit no és compatible, el servidor utilitzarà el següent millor còdec disponible.", "LibraryScanFanoutConcurrency": "Límit de tasques d'exploració paral·leles per a les mediateques", "Penciller": "Dibuixant", @@ -1922,7 +1922,7 @@ "LabelIsSynced": "Està sincronitzat", "NoLyricsSearchResultsFound": "No s'han trobat lletres.", "SearchForLyrics": "Cercar lletres", - "LibraryInvalidItemIdError": "La biblioteca està en un estat invàlid, i no es pot editar. És possible que hàgiu trobat un error: el camí de la base de dades no és un camí correcte al sistema de fitxers.", + "LibraryInvalidItemIdError": "La mediateca està en un estat invàlid, i no es pot editar. És possible que hàgiu trobat un error: la ruta de la base de dades no és una ruta correcta al sistema de fitxers.", "LabelTrickplayKeyFrameOnlyExtraction": "Només generar imatges en fotogrames clau", "LabelTrickplayKeyFrameOnlyExtractionHelp": "Només extreure fotogrames clau per a un processament significativament més ràpid amb una sincronització menys precisa. Si el descodificador de maquinari configurat no admet aquest mode, en el seu lloc s'utilitzarà el descodificador per programari.", "AllowTonemappingSoftwareHelp": "El mapatge de tons pot transformar el rang dinàmic d'un vídeo d'HDR a SDR mantenint els detalls i els colors de la imatge, que són informació molt important per representar l'escena original. Actualment, només funciona amb vídeos HDR10, HLG i DoVi de 10 bits.", @@ -1996,7 +1996,7 @@ "LabelSubtitleStyling": "Estilització de subtítols", "Native": "Nadiu", "NativeSubtitleStylingHelp": "L'estilització de subtítols no funcionarà en alguns dispositius. Tot i això, no suposa cap sobrecàrrega de rendiment.", - "LibraryNameInvalid": "El nom de la biblioteca no pot estar buit.", + "LibraryNameInvalid": "El nom de la mediateca no pot estar buit.", "DeleteServerConfirmation": "Esteu segur que voleu eliminar aquest servidor?", "LabelDevice": "Dispositiu", "LastActive": "Últim actiu", @@ -2029,7 +2029,7 @@ "DownloadManager": "Descàrregues", "MessageForgotPasswordPinReset": "Introduïu el PIN aquí per a acabar el restabliment de la contrasenya", "LabelImageCache": "Imatges en el cache", - "MessageBackupDisclaimer": "Depenent de la mida de la biblioteca, la còpia de seguretat pot trigar cert temps.", + "MessageBackupDisclaimer": "Depenent de la mida de la mediateca, la còpia de seguretat pot trigar una estona.", "MessageRestoreDisclaimer": "ATENCIÓ: Estàs a punt de restaurar una còpia de seguretat anterior. El seu servidor no serà utilitzable durant el procés i les dades creades des del moment de l'inici de la còpia seran perdudes.", "MessageWaitingForServer": "Esperant al servidor...", "StorageType.CDRom": "CD-ROM", From e59e0a2815fec7b13621ad2ee99e684727ceaeb2 Mon Sep 17 00:00:00 2001 From: cmpsb Date: Wed, 11 Jun 2025 14:17:55 -0400 Subject: [PATCH 456/645] Translated using Weblate (Swedish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/ --- src/strings/sv.json | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/strings/sv.json b/src/strings/sv.json index d9878055d..3cdee4cdd 100644 --- a/src/strings/sv.json +++ b/src/strings/sv.json @@ -1467,7 +1467,7 @@ "LabelTonemappingRange": "Tonmappningsomfång", "LabelTonemappingPeakHelp": "Åsidosätt det inbäddade metadatavärdet för ingångssignalen med detta toppvärde istället. Standardvärdet är 100 (1000nit).", "LabelTonemappingPeak": "Tonmappningstoppvärde", - "LabelTonemappingParamHelp": "Ställ in algoritm för tonmappning. De rekommenderade och förvalda värdena är NaN. Vanligtvis kan man lämna det tomt.", + "LabelTonemappingParamHelp": "Ställ in algoritm för tonmappning. Vanligtvis kan man lämna det tomt.", "LabelTonemappingParam": "Tonmappningsparameter", "RemuxHelp1": "Median är i en inkompatibel filbehållare (MKV, AVI, WMV, etc) men både videoströmmen och ljudströmmen är kompatibla med enheten. Media kommer att förpackas förlustfritt i farten innan den skickas till enheten.", "AspectRatioCover": "Förstora", @@ -2043,5 +2043,18 @@ "StorageType.Network": "Nätverk", "StorageType.Ram": "RAM", "StorageType.Unknown": "Okänd", - "HeaderBackups": "Backuper" + "HeaderBackups": "Backuper", + "Success": "Lyckat", + "PluginsLoadError": "Ett fel uppstod vid inläsning av tillägg.", + "ConfirmDeleteRepository": "Ta bort arkiv?", + "DeleteRepositoryConfirmation": "Är du säker på att du vill ta bort detta arkiv?", + "HeaderBackupsHelp": "Skapa och återställ snapshots av din server, som kan innehålla databasen, metadata, undertexter och trickplay.", + "MessageRestoreDisclaimer": "VARNING: Du håller på att återställa från en tidigare säkerhetskopia. Din server kommer att vara otillgänglig under processen och all ny data som skapats efter säkerhetskopian kommer att förloras.", + "MessageRestoreSuccess": "Återställning slutförd", + "RepositoriesPageLoadError": "Kunde inte ladda arkiv", + "StorageType.Removable": "Borttagbar", + "TranscodingLoadError": "Kunde inte läsa in transkodningsinställningarna", + "ButtonLearnMore": "Läs mer", + "LabelImageCache": "Bildcache", + "StorageType.Fixed": "Åtgärdat" } From 5bee81111a9caf3834a784c6cbcaea3e378cf54d Mon Sep 17 00:00:00 2001 From: TOomaAh Date: Wed, 11 Jun 2025 23:11:56 +0200 Subject: [PATCH 457/645] fix: move Chapters,Trickplay fields to shuffle query only --- src/controllers/movies/movies.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/controllers/movies/movies.js b/src/controllers/movies/movies.js index 80d3f1d37..e8c37f7f9 100644 --- a/src/controllers/movies/movies.js +++ b/src/controllers/movies/movies.js @@ -33,7 +33,7 @@ export default function (view, params, tabContent, options) { function shuffle() { isLoading = true; loading.show(); - const newQuery = { ...query, SortBy: 'Random', StartIndex: 0, Limit: 300 }; + const newQuery = { ...query, SortBy: 'Random', StartIndex: 0, Limit: 300, Fields: 'PrimaryImageAspectRatio,MediaSourceCount,Chapters,Trickplay' }; return ApiClient.getItems(ApiClient.getCurrentUserId(), newQuery).then(({ Items }) => { playbackManager.play({ items: Items, @@ -277,7 +277,7 @@ export default function (view, params, tabContent, options) { SortOrder: 'Ascending', IncludeItemTypes: 'Movie', Recursive: true, - Fields: 'PrimaryImageAspectRatio,MediaSourceCount,Chapters,Trickplay', + Fields: 'PrimaryImageAspectRatio,MediaSourceCount', ImageTypeLimit: 1, EnableImageTypes: 'Primary,Backdrop,Banner,Thumb', StartIndex: 0, From 9921163d0ab4a84ccc49107064c40f8776a8072f Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Wed, 11 Jun 2025 18:33:51 -0400 Subject: [PATCH 458/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index e9b32d616..e80a22e36 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -583,7 +583,7 @@ "XmlTvNewsCategoriesHelp": "Els programes amb aquestes categories es mostraran com a programes de notícies. Separa'n varis emprant '|'.", "XmlTvSportsCategoriesHelp": "Els programes amb aquestes categories es mostraran com a programes esportius. Separa'n varis emprant '|'.", "Books": "Llibres", - "Folders": "Carpetes", + "Folders": "Directoris", "Photos": "Fotos", "Shows": "Sèries", "Songs": "Cançons", @@ -705,7 +705,7 @@ "EnableStreamLooping": "Bucle automàtic en emisions en directe", "EnableQuickConnect": "Activar Quick Connect en aquest servidor", "EnablePhotosHelp": "Les imatges es detectaran i es mostraran al costat d'altres fitxers multimèdia.", - "EnablePhotos": "Mostrar fotos", + "EnablePhotos": "Mostra les fotos", "EnableNextVideoInfoOverlayHelp": "Al final d'un vídeo, mostreu informació sobre el següent vídeo que apareix a la llista de reproducció actual.", "EnableNextVideoInfoOverlay": "Mostra la informació del següent vídeo durant la reproducció", "EnableHardwareEncoding": "Activa la codificació de maquinari", From 4c789eec9a7314e9fd1cdd6bc546983d2f40f709 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 12 Jun 2025 00:30:28 +0000 Subject: [PATCH 459/645] Update github/codeql-action action to v3.29.0 --- .github/workflows/__codeql.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/__codeql.yml b/.github/workflows/__codeql.yml index 9feb49c22..54aae70d7 100644 --- a/.github/workflows/__codeql.yml +++ b/.github/workflows/__codeql.yml @@ -26,15 +26,15 @@ jobs: show-progress: false - name: Initialize CodeQL 🛠️ - uses: github/codeql-action/init@fca7ace96b7d713c7035871441bd52efbe39e27e # v3.28.19 + uses: github/codeql-action/init@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0 with: queries: security-and-quality languages: ${{ matrix.language }} - name: Autobuild 📦 - uses: github/codeql-action/autobuild@fca7ace96b7d713c7035871441bd52efbe39e27e # v3.28.19 + uses: github/codeql-action/autobuild@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0 - name: Perform CodeQL Analysis 🧪 - uses: github/codeql-action/analyze@fca7ace96b7d713c7035871441bd52efbe39e27e # v3.28.19 + uses: github/codeql-action/analyze@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0 with: category: '/language:${{matrix.language}}' From e809040423e076cb62411d85adc937e840b43df0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20Montan=C3=A9?= Date: Thu, 12 Jun 2025 01:36:44 -0400 Subject: [PATCH 460/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index e80a22e36..cdac0404e 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -59,7 +59,7 @@ "ErrorDefault": "Hi ha hagut un error processant la petició. Intenteu-ho més tard.", "Delete": "Esborra", "DeleteImage": "Esborra Imatge", - "DeleteImageConfirmation": "Esteu segur que voleu suprimir aquesta imatge?", + "DeleteImageConfirmation": "N'esteu segur, que voleu suprimir aquesta imatge?", "DeleteMedia": "Esborra", "DeleteUser": "Esborrar usuari", "Desktop": "Escriptori", @@ -380,10 +380,10 @@ "MediaInfoPixelFormat": "Format de píxel", "MediaInfoProfile": "Perfil", "MediaInfoResolution": "Resolució", - "MessageAreYouSureDeleteSubtitles": "Esteu segur que voleu eliminar aquest fitxer de subtítols?", + "MessageAreYouSureDeleteSubtitles": "N'esteu segur, que voleu eliminar aquest fitxer de subtítols?", "MessageConfirmProfileDeletion": "N'estàs segur d'eliminar aquest perfil?", "MessageConfirmRecordingCancellation": "Estàs segur que vols cancel·lar aquest enregistrament?", - "MessageConfirmRestart": "Esteu segur que voleu reiniciar Jellyfin?", + "MessageConfirmRestart": "N'esteu segur, que voleu reiniciar Jellyfin?", "MessageContactAdminToResetPassword": "Contacteu amb l'administrador per a restablir la contrasenya.", "MessageDownloadQueued": "Descàrrega encuada.", "MessageEnablingOptionLongerScans": "Habilitar aquesta opció pot resultar en escanejos significativament més lents de la mediateca.", @@ -476,7 +476,7 @@ "ParentalRating": "Valoració Parental", "PasswordMatchError": "La contrasenya i la confirmació han de coincidir.", "PasswordResetComplete": "La contrasenya s'ha restablert.", - "PasswordResetConfirmation": "Esteu segur que voleu restablir la contrasenya?", + "PasswordResetConfirmation": "N'esteu segur, que voleu restablir la contrasenya?", "PasswordSaved": "S'ha desat la contrasenya.", "People": "Repartiment i equip", "Play": "Reprodueix", @@ -561,7 +561,7 @@ "TitlePlayback": "Reproducció", "TrackCount": "{0} pistes", "Tuesday": "Dimarts", - "UninstallPluginConfirmation": "Està segur que vol desinstal·lar {0}?", + "UninstallPluginConfirmation": "N'esteu segur, que voleu desinstal·lar {0}?", "HeaderUninstallPlugin": "Desinstal·lar complement", "Unmute": "De-silencia", "Unrated": "Sense valorar", @@ -663,7 +663,7 @@ "CopyStreamURL": "Copia l'URL de reproducció", "ContinueWatching": "Continueu mirant-ho", "ConfirmEndPlayerSession": "Vols tancar Jellyfin a {0}?", - "ConfirmDeleteItems": "L'eliminació d'aquests elements els suprimirà del sistema de fitxers i de la mediateca. N'esteu segur que desitgeu continuar?", + "ConfirmDeleteItems": "L'eliminació d'aquests elements els suprimirà del sistema de fitxers i de la mediateca. N'esteu segur, que desitgeu continuar?", "ConfirmDeleteItem": "Eliminar aquest element l'eliminarà del sistema de fitxers i de la mediateca. N'esteu segur, que desitgeu continuar?", "ConfigureDateAdded": "Configureu com es determinen les metadades de la \"Data d'afegit\" al Tauler > Mediateques > Visualització", "CommunityRating": "Ràting comunitari", @@ -731,8 +731,8 @@ "DirectPlaying": "Reproducció directe", "DetectingDevices": "Detectant dispositius", "Descending": "Descendent", - "DeleteUserConfirmation": "Esteu segur que voleu eliminar aquest usuari?", - "DeleteDeviceConfirmation": "Esteu segurs que voleu suprimir aquest dispositiu? Tornarà a aparèixer la propera vegada que un usuari iniciï la sessió amb ell.", + "DeleteUserConfirmation": "N'esteu segur, que voleu eliminar aquest usuari?", + "DeleteDeviceConfirmation": "N'esteu segur, que voleu suprimir aquest dispositiu? Tornarà a aparèixer la pròxima vegada que un usuari iniciï la sessió amb ell.", "Data": "Dades", "ButtonUseQuickConnect": "Utilitzar Quick Connect", "ButtonActivate": "Activar", @@ -770,7 +770,7 @@ "EnablePlugin": "Activar", "DirectStreamHelp1": "El flux de vídeo és compatible amb el dispositiu, però té un format d'àudio incompatible (DTS, Dolby TrueHD, etc.) o un nombre de canals d'àudio. El flux de vídeo es tornarà a empaquetar sense pèrdues sobre la marxa abans d'enviar-lo al dispositiu. Només es transcodificarà el flux d'àudio.", "DirectPlayHelp": "El fitxer font és totalment compatible amb aquest client i la sessió rep el fitxer sense modificacions.", - "DeleteDevicesConfirmation": "N'esteu segur que voleu suprimir tots els dispositius? Totes les altres sessions es tancaran. Els dispositius reapareixeran la propera vegada que un usuari iniciï la sessió.", + "DeleteDevicesConfirmation": "N'esteu segur, que voleu suprimir tots els dispositius? Totes les altres sessions es tancaran. Els dispositius reapareixeran la pròxima vegada que un usuari iniciï la sessió.", "DeleteAll": "Elimina-ho tot", "DeinterlaceMethodHelp": "Seleccioneu el mètode de desentrellaçat que voleu utilitzar quan transcodifiqueu el programari de contingut entrellaçat. Quan està activada l'acceleració de maquinari que admet el desentrellaçat de maquinari, s'utilitzarà el desentrellaçador de maquinari en lloc d'aquesta configuració.", "HeaderDirectPlayProfileHelp": "Afegiu perfils de reproducció directa per indicar quins formats pot gestionar el dispositiu de forma nativa.", @@ -1028,16 +1028,16 @@ "MessageFileReadError": "Hi ha hagut un error a llegint l'arxiu. Torni-ho a provar.", "MessageDirectoryPickerLinuxInstruction": "Per a Linux amb Arch Linux, CentOS, Debian, Fedora, openSUSE, o Ubuntu, ha de concedir a l'usuari del servei com a mínim l'accés de lectura als llocs d'emmagatzematge.", "MessageDirectoryPickerBSDInstruction": "Per a BSD, caldrà tenir configurat l'emmagatzematge del \"FreeNAS Jail\" perquè permeti a Jellyfin accedir al contingut multimèdia.", - "MessageDeleteTaskTrigger": "Esteu segur que voleu eliminar aquest disparador tasca?", + "MessageDeleteTaskTrigger": "N'esteu segur, que voleu eliminar aquest disparador tasca?", "MessageCreateAccountAt": "Crear un compte a {0}", - "MessageConfirmShutdown": "Esteu segur que voleu tancar el servidor?", - "MessageConfirmRevokeApiKey": "N'esteu segur de voler revocar aquesta clau d'API? La connexió de l'aplicació d'aquest servidor s'interromprà abruptament.", - "MessageConfirmRemoveMediaLocation": "Esteu segur que voleu suprimir aquesta ubicació?", - "MessageConfirmDeleteTunerDevice": "Està segur que desitja eliminar aquest dispositiu?", - "MessageConfirmDeleteGuideProvider": "Esteu segur que voleu eliminar aquest proveïdor de guia?", + "MessageConfirmShutdown": "N'esteu segur, que voleu tancar el servidor?", + "MessageConfirmRevokeApiKey": "N'esteu segur, de voler revocar aquesta clau d'API? La connexió de l'aplicació d'aquest servidor s'interromprà abruptament.", + "MessageConfirmRemoveMediaLocation": "N'esteu segur, que voleu suprimir aquesta ubicació?", + "MessageConfirmDeleteTunerDevice": "N'esteu segur, que voleu eliminar aquest dispositiu?", + "MessageConfirmDeleteGuideProvider": "N'esteu segur, que voleu eliminar aquest proveïdor de guia?", "MessageConfirmAppExit": "Vols sortir?", "MessageChangeRecordingPath": "Canviar la seva carpeta d'enregistrament no migrarà enregistraments existents des de la ubicació anterior a la nova. Haurà de moure manualment si es desitja.", - "MessageAreYouSureYouWishToRemoveMediaFolder": "N'esteu segur que desitgeu eliminar aquest directori multimèdia?", + "MessageAreYouSureYouWishToRemoveMediaFolder": "N'esteu segur, que desitgeu eliminar aquest directori multimèdia?", "MessageAlreadyInstalled": "Aquesta versió ja està instal·lada.", "MessageAddRepository": "Si voleu afegir un repositori, feu clic al botó situat al costat de la capçalera i completeu la informació sol·licitada.", "Menu": "Menú", @@ -1797,7 +1797,7 @@ "ChannelResolutionUHD4K": "UHD (4K)", "LabelTrickplayAccel": "Habilitar descodificació per maquinari", "NonBlockingScan": "Sense Bloqueig - generació de cues, després retorna", - "ConfirmDeleteSeries": "Eliminar aquesta sèrie eliminarà TOTS {0} episodis tant del sistema de fitxers com de la mediateca. N'esteu segur que desitgeu continuar?", + "ConfirmDeleteSeries": "Eliminar aquesta sèrie eliminarà TOTS {0} episodis tant del sistema de fitxers com de la mediateca. N'esteu segur, que desitgeu continuar?", "LabelEncodingFormatOptions": "Opcions de format de codificació", "LabelTrickplayAccelHelp": "Assegura't d'habilitar 'Permetre codificació MJPEG' a Transcodificació si el teu maquinari ho suporta.", "LabelWidthResolutions": "Resolucions d'Amplada", @@ -1857,7 +1857,7 @@ "ExtractTrickplayImagesHelp": "Les imatges de Trickplay són similars a les imatges de capítols, excepte que abasten tota la longitud del contingut i s'utilitzen per mostrar una vista prèvia quan es desplaça pels vídeos.", "LabelTrickplayAccelEncodingHelp": "En aquests moments només està disponible en QSV, VAAPI, VideoToolbox i RKMPP, aquesta opció no afecta els altres mètodes d'acceleració per maquinari.", "LabelTrickplayAccelEncoding": "Habilitar codificació MJPEG accelerada per maquinari", - "ConfirmDeleteLyrics": "L'esborrat d'aquestes lletres, les suprimirà tant del sistema de fitxers com de la vostra mediateca. N'esteu segur que desitgeu continuar?", + "ConfirmDeleteLyrics": "L'esborrat d'aquestes lletres, les suprimirà tant del sistema de fitxers com de la vostra mediateca. N'esteu segur, que desitgeu continuar?", "ErrorDeletingLyrics": "S'ha produït un error en suprimir les lletres del servidor. Si us plau, comproveu que Jellyfin tingui accés d'escriptura a la carpeta multimèdia i torneu-ho a provar.", "HeaderDeleteLyrics": "Esborrar Lletres", "DeleteLyrics": "Esborrar lletres", @@ -1997,7 +1997,7 @@ "Native": "Nadiu", "NativeSubtitleStylingHelp": "L'estilització de subtítols no funcionarà en alguns dispositius. Tot i això, no suposa cap sobrecàrrega de rendiment.", "LibraryNameInvalid": "El nom de la mediateca no pot estar buit.", - "DeleteServerConfirmation": "Esteu segur que voleu eliminar aquest servidor?", + "DeleteServerConfirmation": "N'esteu segur, que voleu eliminar aquest servidor?", "LabelDevice": "Dispositiu", "LastActive": "Últim actiu", "CopyLogSuccess": "Registres copiats satisfactòriament.", @@ -2057,5 +2057,5 @@ "RepositoriesPageLoadError": "No s'han pogut carregar els repositoris", "TranscodingLoadError": "No s'han pogut carregar els paràmetres de transcodificació", "ConfirmDeleteRepository": "Voleu esborrar el repositori?", - "DeleteRepositoryConfirmation": "Esteu segur de voler esborrar aquest repositori?" + "DeleteRepositoryConfirmation": "N'esteu segur, de voler esborrar aquest repositori?" } From 633a11532cb1d628709b1915d1a66aa6934aa21e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 12 Jun 2025 09:50:30 +0000 Subject: [PATCH 461/645] Update dependency @jellyfin/sdk to v0.0.0-unstable.202506120501 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8a4047c45..f733b5449 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202506100501", + "@jellyfin/sdk": "0.0.0-unstable.202506120501", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.12", "@mui/material": "6.4.12", @@ -4129,9 +4129,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202506100501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506100501.tgz", - "integrity": "sha512-Cwz6ZB3FBWXD7f9y+OQ/K2bUzvkT2yweRWgnA2DZenlhcChSTcHkH+9SigSCe0ely4FtYxp4czPdFFQnoXJE0g==", + "version": "0.0.0-unstable.202506120501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506120501.tgz", + "integrity": "sha512-Q6klssMF4FFVWE5zw3V2l7+xpU68FydCSLR9Wwol1LT/zoThpN56tBdscFCmLlTK4ZVCaj+dq3reML8U2h1czw==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -27669,9 +27669,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202506100501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506100501.tgz", - "integrity": "sha512-Cwz6ZB3FBWXD7f9y+OQ/K2bUzvkT2yweRWgnA2DZenlhcChSTcHkH+9SigSCe0ely4FtYxp4czPdFFQnoXJE0g==", + "version": "0.0.0-unstable.202506120501", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506120501.tgz", + "integrity": "sha512-Q6klssMF4FFVWE5zw3V2l7+xpU68FydCSLR9Wwol1LT/zoThpN56tBdscFCmLlTK4ZVCaj+dq3reML8U2h1czw==", "requires": {} }, "@jellyfin/ux-web": { diff --git a/package.json b/package.json index fe249b184..81add10d8 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202506100501", + "@jellyfin/sdk": "0.0.0-unstable.202506120501", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.12", "@mui/material": "6.4.12", From 92cdfcc1ea9bbf6ad86184bcfbad06eb384837fc Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Wed, 11 Jun 2025 16:53:51 +0300 Subject: [PATCH 462/645] Migrate plugins catalog to React --- src/apps/dashboard/components/BaseCard.tsx | 21 ++- .../controllers/plugins/available/index.html | 17 -- .../controllers/plugins/available/index.js | 163 ------------------ .../features/plugins/api/queryKey.ts | 2 +- .../features/plugins/api/usePackageInfo.ts | 14 +- .../features/plugins/api/usePackages.ts | 32 ++++ .../plugins/components/PackageCard.tsx | 28 +++ .../plugins/components/PluginCard.tsx | 20 ++- .../plugins/utils/getPackageCategories.ts | 17 ++ .../plugins/utils/getPackagesByCategory.ts | 15 ++ src/apps/dashboard/routes/_asyncRoutes.ts | 1 + src/apps/dashboard/routes/_legacyRoutes.ts | 7 - src/apps/dashboard/routes/plugins/catalog.tsx | 84 +++++++++ 13 files changed, 217 insertions(+), 204 deletions(-) delete mode 100644 src/apps/dashboard/controllers/plugins/available/index.html delete mode 100644 src/apps/dashboard/controllers/plugins/available/index.js create mode 100644 src/apps/dashboard/features/plugins/api/usePackages.ts create mode 100644 src/apps/dashboard/features/plugins/components/PackageCard.tsx create mode 100644 src/apps/dashboard/features/plugins/utils/getPackageCategories.ts create mode 100644 src/apps/dashboard/features/plugins/utils/getPackagesByCategory.ts create mode 100644 src/apps/dashboard/routes/plugins/catalog.tsx diff --git a/src/apps/dashboard/components/BaseCard.tsx b/src/apps/dashboard/components/BaseCard.tsx index f6e683146..8209ec3f0 100644 --- a/src/apps/dashboard/components/BaseCard.tsx +++ b/src/apps/dashboard/components/BaseCard.tsx @@ -9,6 +9,7 @@ import MoreVertIcon from '@mui/icons-material/MoreVert'; import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUtils'; import CardActionArea from '@mui/material/CardActionArea'; import Stack from '@mui/material/Stack'; +import { Link, To } from 'react-router-dom'; interface IProps { title?: string; @@ -16,13 +17,14 @@ interface IProps { text?: string; image?: string | null; icon?: React.ReactNode; + to?: To; onClick?: () => void; action?: boolean; actionRef?: React.MutableRefObject; onActionClick?: () => void; }; -const BaseCard = ({ title, secondaryTitle, text, image, icon, onClick, action, actionRef, onActionClick }: IProps) => { +const BaseCard = ({ title, secondaryTitle, text, image, icon, to, onClick, action, actionRef, onActionClick }: IProps) => { return ( - + {image ? ( -
-
-
-

${TabCatalog}

- - - -
-
- -
-
${MessageNoAvailablePlugins}
-
-
-
-
diff --git a/src/apps/dashboard/controllers/plugins/available/index.js b/src/apps/dashboard/controllers/plugins/available/index.js deleted file mode 100644 index f8b05197b..000000000 --- a/src/apps/dashboard/controllers/plugins/available/index.js +++ /dev/null @@ -1,163 +0,0 @@ -import escapeHTML from 'escape-html'; - -import { CATEGORY_LABELS } from 'apps/dashboard/features/plugins/constants/categoryLabels'; -import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUtils'; -import loading from 'components/loading/loading'; -import globalize from 'lib/globalize'; - -import 'components/cardbuilder/card.scss'; -import 'elements/emby-button/emby-button'; -import 'elements/emby-checkbox/emby-checkbox'; -import 'elements/emby-select/emby-select'; - -function reloadList(page) { - loading.show(); - const promise1 = ApiClient.getAvailablePlugins(); - const promise2 = ApiClient.getInstalledPlugins(); - Promise.all([promise1, promise2]).then(function (responses) { - populateList({ - catalogElement: page.querySelector('#pluginTiles'), - noItemsElement: page.querySelector('#noPlugins'), - availablePlugins: responses[0], - installedPlugins: responses[1] - }); - }); -} - -function getHeaderText(category) { - const categoryKey = category.replaceAll(' ', ''); - - if (CATEGORY_LABELS[categoryKey]) { - return globalize.translate(CATEGORY_LABELS[categoryKey]); - } - - console.warn('[AvailablePlugins] unmapped category label', category); - return category; -} - -function populateList(options) { - const availablePlugins = options.availablePlugins; - const installedPlugins = options.installedPlugins; - - availablePlugins.forEach(function (plugin, index, array) { - plugin.category = plugin.category || 'Other'; - plugin.categoryDisplayName = getHeaderText(plugin.category); - array[index] = plugin; - }); - - availablePlugins.sort(function (a, b) { - if (a.category > b.category) { - return 1; - } else if (b.category > a.category) { - return -1; - } - if (a.name > b.name) { - return 1; - } else if (b.name > a.name) { - return -1; - } - return 0; - }); - - let currentCategory = null; - let html = ''; - - for (const plugin of availablePlugins) { - const category = plugin.categoryDisplayName; - if (category != currentCategory) { - if (currentCategory) { - html += '
'; - html += ''; - } - html += '
'; - html += '

' + escapeHTML(category) + '

'; - html += '
'; - currentCategory = category; - } - html += getPluginHtml(plugin, options, installedPlugins); - } - html += '
'; - html += '
'; - - if (!availablePlugins.length && options.noItemsElement) { - options.noItemsElement.classList.remove('hide'); - } - - const searchBar = document.getElementById('txtSearchPlugins'); - if (searchBar) { - searchBar.addEventListener('input', () => onSearchBarType(searchBar)); - } - - options.catalogElement.innerHTML = html; - loading.hide(); -} - -function onSearchBarType(searchBar) { - const filter = searchBar.value.toLowerCase(); - for (const header of document.querySelectorAll('div .verticalSection')) { - // keep track of shown cards after each search - let shown = 0; - for (const card of header.querySelectorAll('div .card')) { - if (filter && filter != '' && !card.textContent.toLowerCase().includes(filter)) { - card.style.display = 'none'; - } else { - card.style.display = 'unset'; - shown++; - } - } - // hide title if no cards are shown - if (shown <= 0) { - header.style.display = 'none'; - } else { - header.style.display = 'unset'; - } - } -} - -function getPluginHtml(plugin, options, installedPlugins) { - let html = ''; - let href = plugin.externalUrl ? plugin.externalUrl : - `#/dashboard/plugins/${plugin.guid}?name=${encodeURIComponent(plugin.name)}`; - - if (options.context) { - href += '&context=' + options.context; - } - - const target = plugin.externalUrl ? ' target="_blank"' : ''; - html += "
"; - html += '
'; - html += ''; - html += '
'; - html += "
"; - html += escapeHTML(plugin.name); - html += '
'; - const installedPlugin = installedPlugins.find(installed => installed.Id === plugin.guid); - html += "
"; - html += installedPlugin ? globalize.translate('LabelVersionInstalled', installedPlugin.Version) : ' '; - html += '
'; - html += '
'; - html += '
'; - html += '
'; - return html; -} - -export default function (view) { - view.addEventListener('viewshow', function () { - reloadList(this); - }); -} diff --git a/src/apps/dashboard/features/plugins/api/queryKey.ts b/src/apps/dashboard/features/plugins/api/queryKey.ts index c999d3407..f63c94987 100644 --- a/src/apps/dashboard/features/plugins/api/queryKey.ts +++ b/src/apps/dashboard/features/plugins/api/queryKey.ts @@ -1,6 +1,6 @@ export enum QueryKey { ConfigurationPages = 'ConfigurationPages', - PackageInfo = 'PackageInfo', + Packages = 'Packages', Plugins = 'Plugins', Repositories = 'Repositories' } diff --git a/src/apps/dashboard/features/plugins/api/usePackageInfo.ts b/src/apps/dashboard/features/plugins/api/usePackageInfo.ts index e98ac50d3..43ef3f937 100644 --- a/src/apps/dashboard/features/plugins/api/usePackageInfo.ts +++ b/src/apps/dashboard/features/plugins/api/usePackageInfo.ts @@ -7,12 +7,24 @@ import type { AxiosRequestConfig } from 'axios'; import { useApi } from 'hooks/useApi'; import { QueryKey } from './queryKey'; +import { queryClient } from 'utils/query/queryClient'; +import type { PackageInfo } from '@jellyfin/sdk/lib/generated-client/models/package-info'; const fetchPackageInfo = async ( api: Api, params: PackageApiGetPackageInfoRequest, options?: AxiosRequestConfig ) => { + const packagesData = queryClient.getQueryData([ QueryKey.Packages ]) as PackageInfo[]; + if (packagesData && params.assemblyGuid) { + // Use cached query to avoid re-fetching + const pkg = packagesData.find(v => v.guid === params.assemblyGuid); + + if (pkg) { + return pkg; + } + } + const response = await getPackageApi(api) .getPackageInfo(params, options); return response.data; @@ -24,7 +36,7 @@ const getPackageInfoQuery = ( ) => queryOptions({ // Don't retry since requests for plugins not available in repos fail retry: false, - queryKey: [ QueryKey.PackageInfo, params?.name, params?.assemblyGuid ], + queryKey: [ QueryKey.Packages, params?.name, params?.assemblyGuid ], queryFn: ({ signal }) => fetchPackageInfo(api!, params!, { signal }), enabled: !!params && !!api && !!params.name }); diff --git a/src/apps/dashboard/features/plugins/api/usePackages.ts b/src/apps/dashboard/features/plugins/api/usePackages.ts new file mode 100644 index 000000000..45fe3e76e --- /dev/null +++ b/src/apps/dashboard/features/plugins/api/usePackages.ts @@ -0,0 +1,32 @@ +import type { Api } from '@jellyfin/sdk'; +import { getPackageApi } from '@jellyfin/sdk/lib/utils/api/package-api'; +import { queryOptions, useQuery } from '@tanstack/react-query'; +import type { AxiosRequestConfig } from 'axios'; + +import { useApi } from 'hooks/useApi'; + +import { QueryKey } from './queryKey'; + +const fetchPackages = async ( + api: Api, + options?: AxiosRequestConfig +) => { + const response = await getPackageApi(api) + .getPackages(options); + return response.data; +}; + +const getPackagesQuery = ( + api?: Api +) => queryOptions({ + queryKey: [ QueryKey.Packages ], + queryFn: ({ signal }) => fetchPackages(api!, { signal }), + enabled: !!api, + staleTime: 15 * 60 * 1000 // 15 minutes +}); + +export const usePackages = () => { + const { api } = useApi(); + return useQuery(getPackagesQuery(api)); +}; + diff --git a/src/apps/dashboard/features/plugins/components/PackageCard.tsx b/src/apps/dashboard/features/plugins/components/PackageCard.tsx new file mode 100644 index 000000000..0145a2eac --- /dev/null +++ b/src/apps/dashboard/features/plugins/components/PackageCard.tsx @@ -0,0 +1,28 @@ +import React from 'react'; +import type { PackageInfo } from '@jellyfin/sdk/lib/generated-client/models/package-info'; +import ExtensionIcon from '@mui/icons-material/Extension'; +import BaseCard from 'apps/dashboard/components/BaseCard'; +import { useLocation } from 'react-router-dom'; + +type IProps = { + pkg: PackageInfo; +}; + +const PackageCard = ({ pkg }: IProps) => { + const location = useLocation(); + + return ( + } + to={{ + pathname: `/dashboard/plugins/${pkg.guid}`, + search: `?name=${encodeURIComponent(pkg.name || '')}`, + hash: location.hash + }} + /> + ); +}; + +export default PackageCard; diff --git a/src/apps/dashboard/features/plugins/components/PluginCard.tsx b/src/apps/dashboard/features/plugins/components/PluginCard.tsx index 08bd40bbe..5ea7eef53 100644 --- a/src/apps/dashboard/features/plugins/components/PluginCard.tsx +++ b/src/apps/dashboard/features/plugins/components/PluginCard.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useRef, useState } from 'react'; +import React, { useCallback, useMemo, useRef, useState } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; import { useApi } from 'hooks/useApi'; import type { PluginInfo } from '@jellyfin/sdk/lib/generated-client/models/plugin-info'; @@ -37,14 +37,16 @@ const PluginCard = ({ plugin, configurationPage }: IProps) => { const [ isUninstallConfirmOpen, setIsUninstallConfirmOpen ] = useState(false); const { api } = useApi(); - const navigateToPluginSettings = useCallback(() => { - if (configurationPage) { - navigate({ - pathname: '/configurationpage', - search: `?name=${encodeURIComponent(configurationPage.Name || '')}`, - hash: location.hash - }); + const pluginPage = useMemo(() => ( + { + pathname: '/configurationpage', + search: `?name=${encodeURIComponent(configurationPage?.Name || '')}`, + hash: location.hash } + ), [ location, configurationPage ]); + + const navigateToPluginSettings = useCallback(() => { + navigate(pluginPage); }, [ navigate, location, configurationPage ]); const onEnablePlugin = useCallback(() => { @@ -105,12 +107,12 @@ const PluginCard = ({ plugin, configurationPage }: IProps) => { } action={true} actionRef={actionRef} - onClick={navigateToPluginSettings} onActionClick={onActionClick} /> { + if (!packages) return []; + + const categories: string[] = []; + + for (const pkg of packages) { + if (pkg.category && !categories.includes(pkg.category)) { + categories.push(pkg.category); + } + } + + return categories.sort((a, b) => a.localeCompare(b)); +}; + +export default getPackageCategories; diff --git a/src/apps/dashboard/features/plugins/utils/getPackagesByCategory.ts b/src/apps/dashboard/features/plugins/utils/getPackagesByCategory.ts new file mode 100644 index 000000000..afcbb7adc --- /dev/null +++ b/src/apps/dashboard/features/plugins/utils/getPackagesByCategory.ts @@ -0,0 +1,15 @@ +import type { PackageInfo } from '@jellyfin/sdk/lib/generated-client/models/package-info'; + +const getPackagesByCategory = (packages: PackageInfo[] | undefined, category: string) => { + if (!packages) return []; + + return packages.filter(pkg => pkg.category == category).sort((a, b) => { + if (a.name && b.name) { + return a.name?.localeCompare(b.name); + } else { + return 0; + } + }); +}; + +export default getPackagesByCategory; diff --git a/src/apps/dashboard/routes/_asyncRoutes.ts b/src/apps/dashboard/routes/_asyncRoutes.ts index 4617c1982..e1728b226 100644 --- a/src/apps/dashboard/routes/_asyncRoutes.ts +++ b/src/apps/dashboard/routes/_asyncRoutes.ts @@ -19,6 +19,7 @@ export const ASYNC_ADMIN_ROUTES: AsyncRoute[] = [ { path: 'playback/trickplay', type: AppType.Dashboard }, { path: 'plugins', type: AppType.Dashboard }, { path: 'plugins/:pluginId', page: 'plugins/plugin', type: AppType.Dashboard }, + { path: 'plugins/catalog', type: AppType.Dashboard }, { path: 'plugins/repositories', type: AppType.Dashboard }, { path: 'tasks', type: AppType.Dashboard }, { path: 'tasks/:id', page: 'tasks/task', type: AppType.Dashboard }, diff --git a/src/apps/dashboard/routes/_legacyRoutes.ts b/src/apps/dashboard/routes/_legacyRoutes.ts index 8d0a95679..d5d7f4ce2 100644 --- a/src/apps/dashboard/routes/_legacyRoutes.ts +++ b/src/apps/dashboard/routes/_legacyRoutes.ts @@ -23,13 +23,6 @@ export const LEGACY_ADMIN_ROUTES: LegacyRoute[] = [ controller: 'library', view: 'library.html' } - }, { - path: 'plugins/catalog', - pageProps: { - appType: AppType.Dashboard, - controller: 'plugins/available/index', - view: 'plugins/available/index.html' - } }, { path: 'livetv/guide', pageProps: { diff --git a/src/apps/dashboard/routes/plugins/catalog.tsx b/src/apps/dashboard/routes/plugins/catalog.tsx new file mode 100644 index 000000000..b2106d8fe --- /dev/null +++ b/src/apps/dashboard/routes/plugins/catalog.tsx @@ -0,0 +1,84 @@ +import React, { useCallback, useMemo, useState } from 'react'; +import Page from 'components/Page'; +import globalize from 'lib/globalize'; +import Box from '@mui/material/Box'; +import Typography from '@mui/material/Typography'; +import { usePackages } from 'apps/dashboard/features/plugins/api/usePackages'; +import Loading from 'components/loading/LoadingComponent'; +import getPackageCategories from 'apps/dashboard/features/plugins/utils/getPackageCategories'; +import Stack from '@mui/material/Stack'; +import getPackagesByCategory from 'apps/dashboard/features/plugins/utils/getPackagesByCategory'; +import PackageCard from 'apps/dashboard/features/plugins/components/PackageCard'; +import Grid from '@mui/material/Grid2'; +import TextField from '@mui/material/TextField'; +import IconButton from '@mui/material/IconButton'; +import Settings from '@mui/icons-material/Settings'; +import { Link } from 'react-router-dom'; + +export const Component = () => { + const { data: packages, isPending: isPackagesPending } = usePackages(); + const [ searchQuery, setSearchQuery ] = useState(''); + + const filteredPackages = useMemo(() => { + return packages?.filter(i => i.name?.toLocaleLowerCase().includes(searchQuery.toLocaleLowerCase())); + }, [ packages, searchQuery ]); + + const packageCategories = getPackageCategories(filteredPackages); + + const updateSearchQuery = useCallback((e: React.ChangeEvent) => { + setSearchQuery(e.target.value); + }, []); + + if (isPackagesPending) { + return ; + } + + return ( + + + + + {globalize.translate('TabCatalog')} + + + + + + + + {packageCategories.map(category => ( + + {category} + + + {getPackagesByCategory(filteredPackages, category).map(pkg => ( + + + + ))} + + + ))} + + + + ); +}; + +Component.displayName = 'PluginsCatalogPage'; From a47e85372028e653e72e75d6bae124bbc57fcef0 Mon Sep 17 00:00:00 2001 From: DyingSlacker <2391773977@outlook.com> Date: Thu, 12 Jun 2025 08:24:50 -0400 Subject: [PATCH 463/645] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index 106353385..ccd6ccb99 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1365,7 +1365,7 @@ "LabelTonemappingPeak": "色调映射峰值", "LabelTonemappingPeakHelp": "用该值覆盖覆盖文件中嵌入的最大亮度元数据值。默认值为100(1000尼特)。", "LabelTonemappingParam": "色调映射参数", - "LabelTonemappingParamHelp": "调整色调映射算法。建议值和默认值均为 NaN。通常将其留空。", + "LabelTonemappingParamHelp": "调整色调映射算法。通常将其留空。", "ButtonPlayer": "播放器", "ClearQueue": "清空队列", "StopPlayback": "停止播放", @@ -2055,5 +2055,11 @@ "StorageType.Ram": "内存盘", "StorageType.Unknown": "未知存储", "Success": "成功", - "HeaderBackups": "备份" + "HeaderBackups": "备份", + "DeleteRepositoryConfirmation": "你确定要删除此存储库吗?", + "ConfirmDeleteRepository": "删除存储库?", + "RepositoriesPageLoadError": "加载存储库失败", + "TranscodingLoadError": "加载转码设置失败", + "PluginsLoadError": "加载插件时发生错误。", + "ButtonLearnMore": "了解更多" } From b695c24489f0d9c8e04916279116f8dd7a3b94c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=92valds=20Zemturis?= Date: Thu, 12 Jun 2025 12:01:56 -0400 Subject: [PATCH 464/645] Translated using Weblate (Latvian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/lv/ --- src/strings/lv.json | 47 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 6 deletions(-) diff --git a/src/strings/lv.json b/src/strings/lv.json index 6f37fcf70..027e3f8e1 100644 --- a/src/strings/lv.json +++ b/src/strings/lv.json @@ -813,7 +813,7 @@ "ConfirmEndPlayerSession": "Vai vēlaties izslēgt Jellyfin uz servera {0}?", "ConfirmDeleteItems": "Dzēšot šos vienumus, tie tiks izdzēsti no failu sistēmas un multivides bibliotēkas. Vai tiešām turpināt?", "ConfirmDeleteItem": "Dzēšot šo vienumu, tas tiks izdzēsts no failu sistēmas un multivides bibliotēkas. Vai tiešām turpināt?", - "ConfigureDateAdded": "Uzstādīt kā metadati priekš 'Pievienošanas datums' tiek noteikts sadaļā Info panelis > Bibliotēkas > NFO Iestatījumi", + "ConfigureDateAdded": "Uzstādīt kā metadati priekš 'Pievienošanas datums' tiek noteikts sadaļā Info panelis > Bibliotēkas > Displejs", "Composer": "Komponists", "ColorSpace": "Krāsu telpa", "ColorPrimaries": "Primārās krāsas", @@ -821,7 +821,7 @@ "ChannelAccessHelp": "Izvēlieties kanālus, ko koplietot ar šo lietotāju. Administratori spēs rediģēt visus kanālus izmantojot metadatu pārvaldnieku.", "ChangingMetadataImageSettingsNewContent": "Izmaiņas metadatu vai mākslas lejupielādes iestatījumos tiks izmantotas tikai vēlāk pievienotajam bibliotēkas saturam. Lai pielietotu šīs izmaiņas jau esošiem vienumiem, jums nepieciešams atjaunināt šo vienumu metadatus manuāli.", "ButtonSubmit": "Iesniegt", - "ButtonQuickStartGuide": "Ātrā lietošanas instrukcija", + "ButtonQuickStartGuide": "Uzstādīšanas instrukcija", "ButtonManualLogin": "Manuāla pieteikšanās", "ButtonEditOtherUserPreferences": "Rediģēt šī lietotāja profilu, attēlu un personīgos iestatījumus.", "ButtonArrowRight": "Pa labi", @@ -1107,9 +1107,9 @@ "LabelTonemappingThresholdHelp": "Toņu kartēšanas algoritma parametri tiek precīzi noregulēti katrai ainai. Un tiek izmantots slieksnis, lai noteiktu, vai aina ir mainījusies vai nav. Ja attālums starp pašreizējo kadra vidējo spilgtumu un pašreizējo vidējo spilgtumu pārsniedz sliekšņa vērtību, mēs pārrēķinām ainas vidējo un maksimālo spilgtumu. Ieteicamās un noklusējuma vērtības ir 0.8 un 0.2 .", "LabelTonemappingThreshold": "Toņu kartēšanas slieksnis", "LabelTonemappingRange": "Toņu kartēšanas diapazons", - "LabelTonemappingPeakHelp": "Pārrakstīt signālu/nominālo/atsauces maksimumu ar šo vērtību. Noderīga, ja displeja metadatos iegultā maksimālā informācija nav uzticama vai arī notiek toņu kartēšana no zemāka diapazona uz augstāku diapazonu. Ieteicamās un noklusējuma vērtības ir 100 un 0.", + "LabelTonemappingPeakHelp": "Pārrakstīt iegulto metadatu vērtību ievadsignālam ar šo maksimālo vērtību. Noklusējuma vērtība ir 100 (1000nit).", "LabelTonemappingPeak": "Toņu kartēšanas maksimums", - "LabelTonemappingParamHelp": "Noregulējiet toņu kartēšanas algoritmu. Ieteicamās un noklusējuma vērtības ir NaN. Parasti atstājiet to tukšu.", + "LabelTonemappingParamHelp": "Noregulējiet toņu kartēšanas algoritmu. Parasti atstājiet to tukšu.", "LabelTonemappingParam": "Toņu kartēšanas parametrs", "LabelTonemappingDesatHelp": "Izmantojiet piesātinājuma samazināšanu izgaismotajiem objektiem, kas pārsniedz šo spilgtuma līmeni. Ieteicamās vērtība ir 0 (atslēgts).", "LabelTonemappingDesat": "Toņu kartēšanas piesātinājums \"desat\"", @@ -1345,7 +1345,7 @@ "MessageChangeRecordingPath": "Ierakstu mapes maiņa automātiski nepārvietos jau pastāvošus ierakstus no vecās uz jauno atrašanās vietu. Jums vajadzēs pašam tos manuāli pārvietot vajadzības gadījumā.", "MessageEnablingOptionLongerScans": "Šīs opcijas iespējošana var krietni paildzināt bibliotēku skenēšanu.", "HeaderPerformance": "Veiktspēja", - "LabelDummyChapterDurationHelp": "Intervāls starp fiktīvajām nodaļām. Iestatiet 0, lai atslēgtu fiktīvo nodaļu ģenerēšanu. Šīs vērtības maiņa neietekmēs esošās fiktīvās nodaļas.", + "LabelDummyChapterDurationHelp": "Intervāls starp fiktīvajām nodaļām sekundēs. Iestatiet 0, lai atslēgtu fiktīvo nodaļu ģenerēšanu. Šīs vērtības maiņa neietekmēs esošās fiktīvās nodaļas.", "LabelDummyChapterCountHelp": "Maksimālais nodaļu attēlu skaits, kas tiks ekstraktēts no katra multivides faila.", "LabelChapterImageResolutionHelp": "Izvilkto nodaļu attēlu izšķirtspēja. Šīs vērtības maiņa neietekmēs esošās fiktīvās nodaļas.", "LabelParallelImageEncodingLimit": "Paralēlas attēlu kodēšanas limits", @@ -1981,5 +1981,40 @@ "LabelDatabase": "Datu bāze", "MessageRestoreInProgress": "Atjaunošana ir procesā", "LabelImageCache": "Attēlu kešatmiņa", - "LabelRestore": "Atjaunot" + "LabelRestore": "Atjaunot", + "DeleteRepositoryConfirmation": "Vai tiešām vēlaties dzēst šo krātuvi?", + "NativeSubtitleStylingHelp": "Subtitru stilizēšana nedarbosies uz dažām ierīcēm. Lai gan tas nenāk ar veiktspējas pārpalikumiem.", + "PluginsLoadError": "Notika kļūme ielādējot spraudņus.", + "VideoCodecTagNotSupported": "Šis video kodeka tegs vairs nav atbalstīts", + "MessageSplitVersionsError": "Notika kļūme sadalot versijas", + "UseCustomTagDelimiters": "Izmantot pielāgotu tega atdalītāju", + "MessagePlaybackError": "Notika kļūme atskaņojot šo failu uz Jūsu Google Cast uztvērēja.", + "HeaderPageNotFound": "Lapa nav atrasta", + "AutoSubtitleStylingHelp": "Šis režīms automātiski pārslēgs starp vietējo un pielāgoto subtitru stilizēšanas mehānismiem, atkarībā no ierīces tipa.", + "LibraryInvalidItemIdError": "Bibliotēka ir nederīgā stāvoklī un to nevar rediģēt. Jūs, iespējams, saskaraties ar kļūmi - ceļš datubāzē nav pareizais ceļš failu sistēmā.", + "MediaSegmentProvidersHelp": "Ieslēgt un novērtēt savus vēlamos mediju segmentu sniedzējus prioritātes kārtībā.", + "RetryWithGlobalSearch": "Atkārtot ar globālu meklējumu", + "LabelDelimiterWhitelistHelp": "Vienumi, kur tiks izslēgti no tegu sadalīšanas. Viens vienums rindiņā.", + "LabelGroupShowsIntoCollectionsHelp": "Šovi kolekcijā tiks parādīti kā sagrupēts vienums, kad tiek parādīts šovu saraksts.", + "PreferNonstandardArtistsTag": "Priekšroku dot ARTISTS tegam, ja pieejams", + "ReadInputAtNativeFramerateHelp": "Ieslēdzot šo opciju var atrisināt dažas problēmas, t.i., tiešraides priekšlaicīgi apturas.", + "ReplaceTrickplayImages": "Aizvietot esošos Trickplay attēlus", + "RenderPgsSubtitleHelp": "Noteikt vai klientam vajadzētu atveidot PGS subtitrus nevis iededzinātos subtitrus. Tas var novērst servera puses transkodēšanu, tā vietā izmantojot klienta puses atveidošanas veiktspēju.", + "MessageCancelTimerError": "Notika kļūme atceļot taimeri", + "PreferNonstandardArtistsTagHelp": "Izmantot nestandarta ARTISTS tegu nevis ARTISTS tegu, kad pieejams.", + "LabelJpegQuality": "JPEG kvalitāte", + "UploadCustomImage": "Augšupielādēt pielāgotu attēlu", + "CustomSplashScreenSize": "Pielāgotiem attēliem vajadzētu būt 16:9 attiecībā un vismaz 1920x1080 pikseļu izmērā.", + "DownloadManager": "Lejupielādes", + "MessageCancelSeriesTimerError": "Notika kļūme atceļot sērijas taimeri", + "StreamCountExceedsLimit": "Straumju skaits pārsniedz ierobežojumu", + "MessageForgotPasswordPinReset": "Ievadiet PIN šeit lai pabeigtu paroles atiestatīšanu", + "ButtonLearnMore": "Uzzināt vairāk", + "ConfirmDeleteRepository": "Dzēst krātuvi?", + "ImageUploadCancelled": "Attēla augšupielāde atcelta", + "PageNotFound": "Šī nav lapa, kuru Jūs meklējat.", + "RepositoriesPageLoadError": "Neizdevās ielādēt krātuves", + "TranscodingLoadError": "Neizdevās ielādēt transkodēšanas iestatījumus", + "TonemappingModeHelp": "Izvēlēties toņu kartēšanas režīmu. Ja konstatētas izplūdušas spilgtās vietas, pamēģināt RGB režīmu.", + "LabelQscale": "Qscale" } From c533883a39abaf661068eedfe5c9e3563a0bda8a Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Thu, 12 Jun 2025 19:15:36 -0400 Subject: [PATCH 465/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 58 ++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index cdac0404e..7e6ca6289 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -153,8 +153,8 @@ "HeaderMyMedia": "Els meus continguts multimèdia", "HeaderMyMediaSmall": "Els meus continguts multimèdia (petit)", "HeaderNewApiKey": "Nova clau API", - "HeaderNextEpisodePlayingInValue": "El pròxim episodi es reproduirà en {0}", - "HeaderNextVideoPlayingInValue": "El pròxim vídeo es reproduirà en {0}", + "HeaderNextEpisodePlayingInValue": "L'episodi següent es reproduirà en {0}", + "HeaderNextVideoPlayingInValue": "El vídeo següent es reproduirà en {0}", "HeaderOnNow": "Transmetent ara", "HeaderParentalRatings": "Classificacions parentals", "HeaderPassword": "Contrasenya", @@ -403,12 +403,12 @@ "Monday": "Dilluns", "MoreFromValue": "Més de {0}", "MoreUsersCanBeAddedLater": "Es poden afegir més usuaris des del Tauler de control.", - "MoveLeft": "Moure a l'esquerra", - "MoveRight": "Moure a la dreta", + "MoveLeft": "Mou a l'esquerra", + "MoveRight": "Mou a la dreta", "Mute": "Silencia", "MySubtitles": "Els meus subtítols", "Name": "Nom", - "NewCollection": "Nova Col·lecció", + "NewCollection": "Col·lecció nova", "NewCollectionHelp": "Les col·leccions us permeten crear agrupacions personalitzades de pel·lícules i altres continguts.", "NewCollectionNameExample": "Exemple: Col·leció Star Wars", "NewEpisodes": "Nous episodis", @@ -638,7 +638,7 @@ "Actor": "Actor", "Absolute": "Absolut", "ClientSettings": "Configuració del client", - "CinemaModeConfigurationHelp": "El mode Cinema aporta l'experiència del teatre directament a la sala d'estar amb la possibilitat de jugar a tràilers i presentacions personalitzades abans de la funció principal.", + "CinemaModeConfigurationHelp": "El mode de cinema proporciona l'experiència d'aquest a la sala d'estar, amb la possibilitat de reproduir tràilers i presentacions personalitzades abans del títol principal.", "ChannelNameOnly": "Només el canal {0}", "ChangingMetadataImageSettingsNewContent": "Els canvis als paràmetres de descàrrega de metadades o imatges només s'apliquen al contingut nou afegit a la mediateca. Per a aplicar els canvis als títols existents, haureu d'actualitzar les metadades manualment.", "ButtonTogglePlaylist": "Llista de reproducció", @@ -970,14 +970,14 @@ "NoCreatedLibraries": "Sembla que encara no s'ha creat cap mediateca. {0} Us agradaria crear-ne una ara? {1}", "No": "No", "NextUp": "A continuació", - "NextTrack": "Passar a la següent", - "Next": "Endavant", + "NextTrack": "Salta a la següent", + "Next": "Següent", "News": "Notícies", "New": "Nou", "Never": "Mai", "MusicVideo": "Music video", "MusicLibraryHelp": "Revisar el {0} de la música guia de noms {1}.", - "MusicArtist": "Música Artista", + "MusicArtist": "Artista musical", "MusicAlbum": "Àlbum de música", "MovieLibraryHelp": "Revisar la pel·lícula {0} guia de noms {1}.", "Movie": "Pel·lícula", @@ -991,9 +991,9 @@ "MessageSyncPlayUserLeft": "{0} ha deixat el grup.", "MessageSyncPlayUserJoined": "{0} s'ha unit al grup.", "MessageSyncPlayPlaybackPermissionRequired": "Permís de reproducció requerit.", - "MessageSyncPlayNoGroupsAvailable": "No hi ha grups disponibles. Comença a jugar alguna cosa primer.", + "MessageSyncPlayNoGroupsAvailable": "No hi ha grups disponibles. Comenceu per primer reproduir alguna cosa.", "MessageSyncPlayLibraryAccessDenied": "L'accés a aquest contingut està restringit.", - "MessageSyncPlayJoinGroupDenied": "No s'ha pogut unir al grup", + "MessageSyncPlayJoinGroupDenied": "No s'ha pogut unir al grup.", "MessageSyncPlayIsDisabled": "El permís necessari per utilitzar SyncPlay.", "MessageSyncPlayGroupWait": "{0} és l'emmagatzematge en memòria intermèdia …", "MessageSyncPlayGroupDoesNotExist": "No s'ha pogut unir-se a el grup, ja que no existeix.", @@ -1118,8 +1118,8 @@ "LabelTonemappingDesatHelp": "Aplicar dessaturació de punts destacats que superen aquest nivell de brillantor. El valor recomanat és 0 (desactivar).", "LabelTonemappingDesat": "Mapa de tons desat", "LabelTonemappingAlgorithm": "Seleccioneu l'algoritme de \"Tone mapping\"", - "LabelTextSize": "Mida de el text", - "LabelTextColor": "Color de el text", + "LabelTextSize": "Mida de text", + "LabelTextColor": "Color de text", "LabelTextBackgroundColor": "Color del text de fons", "LabelTagline": "Lema", "LabelTag": "Etiqueta", @@ -1127,15 +1127,15 @@ "LabelSyncPlayTimeSyncDevice": "Temps de sincronització amb", "LabelSyncPlaySyncMethod": "Mètode de sincronització", "LabelSyncPlayResumePlaybackDescription": "Torneu a la reproducció grupal", - "LabelSyncPlayResumePlayback": "Reprendre la reproducció local", - "LabelSyncPlayPlaybackDiff": "Reproducció diferència de temps", + "LabelSyncPlayResumePlayback": "Reprèn la reproducció local", + "LabelSyncPlayPlaybackDiff": "Diferència de temps de reproducció", "LabelSyncPlayNewGroupDescription": "Crea un grup nou", - "LabelSyncPlayNewGroup": "Nou grup", + "LabelSyncPlayNewGroup": "Grup nou", "LabelSyncPlayLeaveGroupDescription": "Desactivar SyncPlay", "LabelSyncPlayLeaveGroup": "Marxar del grup", "LabelSyncPlayHaltPlaybackDescription": "I ignorar les actualitzacions de llista de reproducció actual", "LabelSyncPlayHaltPlayback": "Aturar la reproducció local", - "LabelSyncPlayAccessNone": "Desactivat per a aquest usuari", + "LabelSyncPlayAccessNone": "S'ha desactivat per a aquest usuari", "LabelSyncPlayAccessJoinGroups": "Permet als usuaris a unir-se als grups", "LabelSyncPlayAccessCreateAndJoinGroups": "Permet a l'usuari crear i unir-se a grups", "LabelSyncPlayAccess": "Accés SyncPlay", @@ -1148,9 +1148,9 @@ "LabelSSDPTracingFilterHelp": "Adreça IP opcional sobre la qual es registra un filtrat de el tràfic de SSDP.", "LabelSSDPTracingFilter": "SSDP Filtre", "LabelSportsCategories": "Modalitats esportives", - "LabelSpecialSeasonsDisplayName": "Especial nom de visualització temporada", + "LabelSpecialSeasonsDisplayName": "Nom de temporada especial", "LabelSortOrder": "Ordre de classificació", - "LabelSortBy": "Ordenar per", + "LabelSortBy": "Ordena per", "LabelSonyAggregationFlagsHelp": "Determina el contingut de l'element 'aggregationFlags' al espai de noms 'urn:schemas-sonycom:av'.", "LabelSonyAggregationFlags": "Banderes d'agregació de Sony", "Remuxing": "Recodificació", @@ -1415,8 +1415,8 @@ "PleaseEnterNameOrId": "Introdueixi un nom o un ID extern.", "PleaseConfirmPluginInstallation": "Feu clic a 'D'acord' per confirmar que ha llegit el text de dalt i desitja procedir amb la instal·lació del complement.", "PleaseAddAtLeastOneFolder": "Afegiu-hi almenys un directori fent clic al botó '+'.", - "PlayNextEpisodeAutomatically": "Jugar el proper episodi de forma automàtica", - "PlayNext": "Reproduir el següent", + "PlayNextEpisodeAutomatically": "Reprodueix l'episodi següent de forma automàtica", + "PlayNext": "Reprodueix el següent", "PlayCount": "Contador de reproduccions", "PlaybackRate": "Velocitat de reproducció", "PlaybackErrorNoCompatibleStream": "Aquest client no és compatible amb el contingut multimèdia i el servidor no està enviant un format multimèdia compatible.", @@ -1571,12 +1571,12 @@ "PreviousChapter": "Episodi anterior", "PlaybackErrorPlaceHolder": "Això és un marcador de posició per a suports físics que Jellyfin no pot reproduir. Inseriu el disc per reproduir-lo.", "OtherArtist": "Altres artistes", - "NextChapter": "Pròxim episodi", + "NextChapter": "Episodi següent", "Mixer": "Mesclador", "MediaInfoTitle": "Títol", "LabelSyncPlaySettingsSyncCorrection": "Correcció de sincronisme", "LabelSyncPlaySettingsExtraTimeOffset": "Temps afegit de decalatge", - "LabelSortName": "Ordenar per nom", + "LabelSortName": "Ordena per nom", "LabelAutomaticallyAddToCollectionHelp": "Quan, com a mínim dues pel·lícules, tenen el mateix nom de col·lecció, seran afegides a la col·lecció.", "LabelAutomaticallyAddToCollection": "Afegeix automàticament a la col·lecció", "Cursive": "Cursiva", @@ -1657,7 +1657,7 @@ "OptionDateEpisodeAdded": "Data d'addició de l'episodi", "MessageNoItemsAvailable": "No hi han elements disponibles actualment.", "MessageRenameMediaFolder": "Canviar una mediateca de nom provocarà que es perdin totes les metadades, continueu amb precaució.", - "LabelTextWeight": "Estil del text", + "LabelTextWeight": "Estil de text", "RememberSubtitleSelections": "Establir la pista de subtítols en funció de l'element anterior", "LabelVppTonemappingBrightnessHelp": "Aplicar el guany de brillantor al mapa de to VPP. El valor recomanat és 16.", "MediaInfoRpuPresentFlag": "Flag DV rpu predeterminat", @@ -1913,8 +1913,8 @@ "PreviewLyrics": "Previsualitzar lletres", "Reset": "Restablir", "MediaInfoRotation": "Rotació", - "MoveToBottom": "Moure al final", - "MoveToTop": "Moure al principi", + "MoveToBottom": "Mou al final", + "MoveToTop": "Mou al principi", "EditLyrics": "Edita la lletra", "HeaderAddLyrics": "Afegeix lletres", "HeaderPreviewLyrics": "Previsualitzar lletres", @@ -1954,7 +1954,7 @@ "LabelFallbackMaxStreamingBitrate": "Taxa de bitrate màxima de retorn (Mbps)", "MessageCancelSeriesTimerError": "S'ha produït un error cancel·lant el temporitzador de la sèrie", "MessageCancelTimerError": "S'ha produït un error cancel·lant el temporitzador", - "MoviesAndShows": "Pel·lícules i Sèries", + "MoviesAndShows": "Pel·lícules i sèries", "LabelLyricDownloaders": "Descarregador de lletres", "LabelQsvDeviceHelp": "Específica el dispositiu Intel QSV en els sistemes amb múltiples GPU. En sistemes Linux, això és un node de renderitzat, per exemple, /dev/dri/renderD128. En Windows, és un índex de dispositiu que comença a 0. Deixar en blanc si no se sap el que s'està fent.", "LabelScreensaverTime": "Temps de l'estalvi de pantalla", @@ -1986,8 +1986,8 @@ "VideoCodecTagNotSupported": "L'etiqueta del còdec de vídeo no és compatible", "RenderPgsSubtitleHelp": "Determina si el client ha de renderitzar els subtítols PGS en lloc d'usar els subtítols incrustats. Això pot evitar la transcodificació de part del servidor a canvi del rendiment de renderitzat de part del client.", "FallbackMaxStreamingBitrateHelp": "El bitrate màxim s'usa com a alternativa quan ffprobe no pot determinar el flux de l'origen. Això ajuda a prevenir que els clients sol·licitin un bitrate de transcodificació excessivament alt, el qual provocaria errors en el reproductor o sobrecarregar el codificador.", - "HeaderNextEpisode": "Pròxim episodi", - "HeaderNextVideo": "Pròxim vídeo", + "HeaderNextEpisode": "Episodi següent", + "HeaderNextVideo": "Vídeo següent", "LabelMediaSegmentProviders": "Proveïdors de segments de continguts multimèdia", "MediaSegmentProvidersHelp": "Habiliteu i classifiqueu per ordre de prioritat els vostres proveïdors preferits de segments multimèdia.", "AutoSubtitleStylingHelp": "Aquest mode canviarà automàticament entre els mecanismes d'estils de subtítols natius i personalitzats, basant-se en el teu tipus de dispositiu.", From 5b2148d8a321f48a6d9b3dbbd825adb18e82604d Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Fri, 13 Jun 2025 02:12:13 -0400 Subject: [PATCH 466/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 7e6ca6289..258ee8f6b 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -102,8 +102,8 @@ "HeaderApiKeysHelp": "Cal que les aplicacions externes tinguin una clau API per comunicar-se amb el servidor. Les claus s’emeten iniciant la sessió amb un compte d’usuari normal o concedint manualment una clau a l’aplicació.", "HeaderAudioSettings": "Preferències d'àudio", "HeaderBranding": "Aparença", - "HeaderCancelRecording": "Cancel·lar l'enregistrament", - "HeaderCancelSeries": "Cancel·lar la sèrie", + "HeaderCancelRecording": "Cancel·la l'enregistrament", + "HeaderCancelSeries": "Cancel·la la sèrie", "HeaderCastAndCrew": "Repartiment i equip", "HeaderCodecProfile": "Perfil del còdec", "HeaderConfirmProfileDeletion": "Confirmar l'esborrament del perfil", @@ -2037,7 +2037,7 @@ "BackupsPageLoadError": "No s'ha pogut carregar la pàgina de còpies de seguretat", "ButtonCreateBackup": "Crear còpia de seguretat", "Create": "Crear", - "HeaderBackupsHelp": "Crear i restaurar còpies del servidor, les quals poden incloure la base de dades, metadades, subtítols i imatges de trickplay.", + "HeaderBackupsHelp": "Crea i restaura còpies del servidor, les quals poden incloure la base de dades, metadades, subtítols i imatges de previsualització.", "LabelBackupsUnavailable": "No hi ha còpies de seguretat disponibles", "LabelDatabase": "Base de dades", "LabelRestore": "Restaurar", From 1b633a45eca969ad11c239bfaaf15b44b840c496 Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Fri, 13 Jun 2025 03:20:53 -0400 Subject: [PATCH 467/645] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index b421c8ff2..cba469f6e 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -1325,7 +1325,7 @@ "LabelOpenclDeviceHelp": "Đây là thiết bị OpenCL dùng để chỉnh tông màu. Phía bên trái của dấu chấm là số nền tảng và phía bên phải là số thiết bị trên nền tảng. Mặc định là 0.0. Cần có tệp ứng dụng FFmpeg chứa phương pháp tăng tốc phần cứng OpenCL.", "LabelMaxMuxingQueueSizeHelp": "Số gói tối đa có thể được lưu vào bộ đệm trong khi chờ tất cả các luồng khởi tạo. Hãy thử tăng lên nếu bạn vẫn gặp lỗi \"Quá nhiều gói được lưu vào bộ đệm cho luồng đầu ra\" trong nhật ký FFmpeg. Giá trị đề xuất là 2048.", "ClearQueue": "Xóa hàng đợi", - "LabelTonemappingParamHelp": "Điều chỉnh thuật toán ánh xạ tông màu. Các giá trị được đề xuất và mặc định là NaN. Nói chung là để trống.", + "LabelTonemappingParamHelp": "Điều chỉnh thuật toán ánh xạ tông màu. Thường thì để trống.", "LabelTonemappingParam": "Tham số ánh xạ tông màu", "LabelTonemappingPeakHelp": "Thay vào đó, hãy ghi đè giá trị siêu dữ liệu được nhúng cho tín hiệu đầu vào bằng giá trị cao nhất này. Giá trị mặc định là 100 (1000nit).", "LabelTonemappingPeak": "Đỉnh ánh xạ tông màu", @@ -2051,5 +2051,9 @@ "StorageType.Fixed": "Cố định", "Success": "Thành công", "HeaderBackups": "Sao lưu", - "PluginsLoadError": "Một lỗi đã xảy ra trong khi tải plugin." + "PluginsLoadError": "Một lỗi đã xảy ra trong khi tải plugin.", + "DeleteRepositoryConfirmation": "Bạn có chắc là bạn muốn xóa kho lưu trữ này?", + "ConfirmDeleteRepository": "Xóa kho lưu trữ?", + "RepositoriesPageLoadError": "Không tải được kho lưu trữ", + "ButtonLearnMore": "Tìm Hiểu Thêm" } From 3c29b1ad5de038bc6a51ec7f642b9c67ead9d2bc Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Fri, 13 Jun 2025 16:23:35 -0400 Subject: [PATCH 468/645] Hide metric cards if value is zero --- .../components/widgets/ItemCountsWidget.tsx | 154 ++++++++++-------- .../metrics/components/MetricCard.tsx | 2 +- 2 files changed, 87 insertions(+), 69 deletions(-) diff --git a/src/apps/dashboard/components/widgets/ItemCountsWidget.tsx b/src/apps/dashboard/components/widgets/ItemCountsWidget.tsx index 12a58a60e..f4a5e7987 100644 --- a/src/apps/dashboard/components/widgets/ItemCountsWidget.tsx +++ b/src/apps/dashboard/components/widgets/ItemCountsWidget.tsx @@ -5,14 +5,89 @@ import MusicVideo from '@mui/icons-material/MusicVideo'; import Tv from '@mui/icons-material/Tv'; import VideoLibrary from '@mui/icons-material/VideoLibrary'; import Grid from '@mui/material/Grid2'; -import React from 'react'; +import React, { useMemo } from 'react'; import { useItemCounts } from 'apps/dashboard/features/metrics/api/useItemCounts'; -import MetricCard from 'apps/dashboard/features/metrics/components/MetricCard'; +import MetricCard, { type MetricCardProps } from 'apps/dashboard/features/metrics/components/MetricCard'; import globalize from 'lib/globalize'; const ItemCountsWidget = () => { - const { data: counts } = useItemCounts(); + const { + data: counts, + isPending + } = useItemCounts(); + + const cards: MetricCardProps[] = useMemo(() => { + const cardProps: MetricCardProps[] = []; + + if (isPending || counts?.MovieCount) { + cardProps.push({ + Icon: Movie, + metrics: [{ + label: globalize.translate('Movies'), + value: counts?.MovieCount + }] + }); + } + + if (isPending || counts?.SeriesCount || counts?.EpisodeCount) { + cardProps.push({ + Icon: Tv, + metrics: [{ + label: globalize.translate('Series'), + value: counts?.SeriesCount + }, { + label: globalize.translate('Episodes'), + value: counts?.EpisodeCount + }] + }); + } + + if (isPending || counts?.AlbumCount || counts?.SongCount) { + cardProps.push({ + Icon: MusicNote, + metrics: [{ + label: globalize.translate('Albums'), + value: counts?.AlbumCount + }, { + label: globalize.translate('Songs'), + value: counts?.SongCount + }] + }); + } + + if (isPending || counts?.MusicVideoCount) { + cardProps.push({ + Icon: MusicVideo, + metrics: [{ + label: globalize.translate('MusicVideos'), + value: counts?.MusicVideoCount + }] + }); + } + + if (isPending || counts?.BookCount) { + cardProps.push({ + Icon: Book, + metrics: [{ + label: globalize.translate('Books'), + value: counts?.BookCount + }] + }); + } + + if (isPending || counts?.BoxSetCount) { + cardProps.push({ + Icon: VideoLibrary, + metrics: [{ + label: globalize.translate('Collections'), + value: counts?.BoxSetCount + }] + }); + } + + return cardProps; + }, [ counts, isPending ]); return ( { marginTop: 2 }} > - - - - - - - - - - - - - - - - - - - - - - - + {cards.map(card => ( + metric.label).join('-')} + size={{ xs: 12, sm: 6, lg: 4 }} + > + + + ))} ); }; diff --git a/src/apps/dashboard/features/metrics/components/MetricCard.tsx b/src/apps/dashboard/features/metrics/components/MetricCard.tsx index 5ab87bc16..f251d7aab 100644 --- a/src/apps/dashboard/features/metrics/components/MetricCard.tsx +++ b/src/apps/dashboard/features/metrics/components/MetricCard.tsx @@ -14,7 +14,7 @@ interface Metric { value?: number } -interface MetricCardProps { +export interface MetricCardProps { metrics: Metric[] Icon: typeof SvgIcon } From 4da41010875b30f80d2fc7c9f5850de1440cb640 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Sat, 14 Jun 2025 01:33:28 -0400 Subject: [PATCH 469/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 258ee8f6b..af35f0442 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -273,7 +273,7 @@ "LabelKodiMetadataSaveImagePaths": "Desar els directoris de les imatges als fitxers NFO", "LabelLanguage": "Idioma", "LabelLocalHttpServerPortNumber": "Port local HTTP", - "LabelLockItemToPreventChanges": "Bloca aquest ítem per evitar canvis futurs en les metadades", + "LabelLockItemToPreventChanges": "Bloca aquest element per a evitar canvis futurs en les metadades", "LabelLoginDisclaimerHelp": "El missatge es mostrarà a la part inferior de la pàgina d'inici de sessió.", "LabelLogs": "Registres", "LabelManufacturer": "Fabricant", @@ -901,7 +901,7 @@ "UseDoubleRateDeinterlacing": "El doble de la velocitat de fotogrames quan el desentrellaçat", "Upload": "Pujar", "UnsupportedPlayback": "Jellyfin no pot desxifrar el contingut protegit per DRM, però tot el contingut serà tractat independentment, incloent títols protegits. Alguns fitxers poden aparèixer a causa de completament negre xifrat o altres característiques no compatibles, com ara títols interactius.", - "Unplayed": "No reproduida", + "Unplayed": "No reproduït", "Uniform": "Uniforme", "TvLibraryHelp": "Revisar el {0} de TV guia de noms {1}.", "TV": "TV", @@ -1326,7 +1326,7 @@ "LabelBaseUrl": "URL base", "LabelAutomaticDiscoveryHelp": "Permet que les aplicacions detecten automàticament Jellyfin usant el port UDP 7359.", "LabelAutomaticDiscovery": "Activa el descobriment automàtic", - "LabelAutomaticallyRefreshInternetMetadataEvery": "Metadades d'actualització automàtica a través d'Internet", + "LabelAutomaticallyRefreshInternetMetadataEvery": "Actualitza automàticament les metadades, prenent-les d'Internet", "LabelAutoDiscoveryTracingHelp": "Quan està activat, es registraran els paquets rebuts en el port d'autodescobriment.", "LabelAutoDiscoveryTracing": "Activa el descobriment automàtic de rastreig.", "LabelAuthProvider": "L'autenticació de l'proveïdor", @@ -1362,7 +1362,7 @@ "HeaderVideos": "Vídeos", "HeaderVideoQuality": "Qualitat de vídeo", "HeaderUploadSubtitle": "Pujar subtítols", - "HeaderTypeImageFetchers": "Buscadors d'imatge ({0})", + "HeaderTypeImageFetchers": "Cercadors d'imatges ({0})", "HeaderTuners": "Sintonitzadors", "HeaderTunerDevices": "Dispositius sintonitzadors", "HeaderTranscodingProfileHelp": "Afegir perfils de transcodificació per ta ld'indicar quins formats han de ser utilitzats quan es requereixi la transcodificació.", @@ -1527,12 +1527,12 @@ "HeaderLoginFailure": "Error en l'inici de sessió", "HeaderLiveTvTunerSetup": "Configuració del sintonitzador de TV", "HeaderKodiMetadataHelp": "Per activar o desactivar les metadades NFO, editeu una mediateca i busqueu la secció d'Estalviadors de metadades.", - "HeaderImageOptions": "Opcions de la imatge", + "HeaderImageOptions": "Opcions de les imatges", "HeaderIdentifyItemHelp": "Introduïu un o més criteris de cerca. Elimineu criteris per augmentar els resultats de cerca.", "HeaderHttpsSettings": "Configuració de HTTPS", "HeaderGuideProviders": "Proveïdors de dades de la guia de TV", "HeaderForKids": "Per als nens", - "HeaderFetcherSettings": "Ajustaments del recollidor", + "HeaderFetcherSettings": "Configuració del capturador", "HeaderError": "Error", "HeaderEnabledFieldsHelp": "Desseleccionar un camp per a bloquejar-lo i impedir un canvi de les seves dades.", "HeaderDVR": "Gravador digital (DVR)", @@ -1720,7 +1720,7 @@ "LabelEnableAudioVbrHelp": "La taxa de bits variable ofereix una millor relació entre la qualitat i velocitat de bits mitjana, però en alguns casos rars pot provocar problemes de compatibilitat i de memòria intermèdia (buffering).", "LabelTonemappingMode": "Mode de mapeig de to", "EnableAudioNormalization": "Normalització d'àudio", - "LabelEnableLUFSScan": "Activar escaneig LUFS", + "LabelEnableLUFSScan": "Activa l'escaneig LUFS", "Select": "Seleccionar", "LabelEnableLUFSScanHelp": "Els clients poden normalitzar la reproducció d'àudio per obtenir un nivell de volum igual entre pistes d'àudio. Això farà que els escanejos de la mediateca s'allarguin més i els calgui més recursos.", "TonemappingModeHelp": "Selecciona el mode de mapeig de to. Si experimentes zones sobreexposades, prova a canviar al mode RGB.", @@ -1808,7 +1808,7 @@ "BlockContentWithTagsHelp": "Amaga el contingut multimèdia amb com a mínim una de les etiquetes especificades.", "LabelAllowContentWithTags": "Permetre elements amb etiquetes", "BlockingScan": "Bloqueig - generació de cues, bloqueja escaneig fins a completar-se", - "LabelScanBehavior": "Comportament d'Escaneig", + "LabelScanBehavior": "Comportament de l'escaneig", "PlaybackError.ASS_RENDER_ERROR": "S'ha produït un error al renderitzador de subtítols ASS/SSA.", "PlaybackError.MEDIA_NOT_SUPPORTED": "La reproducció ha fallat, perquè el contingut multimèdia no és compatible amb aquest client.", "PlaybackError.NETWORK_ERROR": "La reproducció ha fallat a causa d'un error de connexió.", From 3dceba2b469d35be26aee5ef6076f9cc4bd9bdca Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Sat, 14 Jun 2025 11:23:51 -0400 Subject: [PATCH 470/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index af35f0442..83345ac04 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -160,7 +160,7 @@ "HeaderPassword": "Contrasenya", "HeaderPasswordReset": "Restableix la contrasenya", "HeaderPaths": "Directoris", - "HeaderPlayAll": "Reprodueix-ho tot", + "HeaderPlayAll": "Reprodueix-los tots", "HeaderPlaybackError": "Error de reproducció", "HeaderPleaseSignIn": "Inicieu sessió", "HeaderPreferredMetadataLanguage": "Idioma de les metadades preferit", @@ -480,7 +480,7 @@ "PasswordSaved": "S'ha desat la contrasenya.", "People": "Repartiment i equip", "Play": "Reprodueix", - "PlayAllFromHere": "Reprodueix-ho tot des d'aquí", + "PlayAllFromHere": "Reprodueix-los tots des d'aquí", "PlayFromBeginning": "Reprodueix des de l'inici", "Played": "Reproduït", "Playlists": "Llistes de reproducció", @@ -659,7 +659,7 @@ "Album": "Àlbum", "ButtonSyncPlay": "Reproducció sincronitzada", "CriticRating": "Valoració dels сrítics", - "CopyStreamURLSuccess": "L'URL s'ha copiat correctament.", + "CopyStreamURLSuccess": "La URL s'ha copiat correctament.", "CopyStreamURL": "Copia l'URL de reproducció", "ContinueWatching": "Continueu mirant-ho", "ConfirmEndPlayerSession": "Vols tancar Jellyfin a {0}?", @@ -715,7 +715,7 @@ "EnableDecodingColorDepth10Hevc": "Activar la descodificació de maquinari de 10 bits per a HEVC", "EnableBackdropsHelp": "Mostra imatges al fons d'algunes pàgines mentre es navega per la mediateca.", "EnableAutoCast": "Establir com a per defecte", - "EditMetadata": "Edita les metadades", + "EditMetadata": "Edició de metadades", "EasyPasswordHelp": "El vostre codi Easy PIN s'utilitza per accedir fora de línia als clients compatibles i també es pot utilitzar per iniciar la sessió a la xarxa fàcilment.", "DrmChannelsNotImported": "Els canals amb DRM no s’importaran.", "DownloadsValue": "{0} descàrregues", @@ -913,7 +913,7 @@ "ThumbCard": "Targeta miniatura", "Thumb": "Miniatura", "ThemeVideos": "Vídeos temàtics", - "ThemeSongs": "Cançons del tema", + "ThemeSongs": "Sintonies", "TextSent": "Text enviat.", "TagsValue": "Etiquetes: {0}", "TabStreaming": "Reproducció en línia", From f381478cadf645fbc499189f68cd7a1ad8d6202c Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Sat, 14 Jun 2025 14:21:42 -0400 Subject: [PATCH 471/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 83345ac04..3809e3c48 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -760,8 +760,8 @@ "EnableStreamLoopingHelp": "Activeu aquesta opció si les transmissions en directe només contenen uns segons de dades i cal sol·licitar-les contínuament. Habilitar-ho quan no sigui necessari pot causar problemes.", "EnableFasterAnimationsHelp": "Utilitzeu animacions i transicions més ràpides.", "EnableFasterAnimations": "Animacions més ràpides", - "EnableDetailsBannerHelp": "Mostra una imatge de bàner a la part superior de la pàgina de detalls de l'article.", - "EnableDetailsBanner": "Bàner de detalls", + "EnableDetailsBannerHelp": "Mostra una pancarta al cim de la pàgina de detalls de l'element.", + "EnableDetailsBanner": "Pancarta de detalls", "EnableColorCodedBackgrounds": "Fons codificats per colors", "EnableBlurHashHelp": "Les imatges que encara s'estan carregant es mostraran amb un marcador de posició únic.", "EnableBlurHash": "Habilitar marcadors de posició borrosos per a imatges", @@ -799,7 +799,7 @@ "HeaderAddUpdateSubtitle": "Afegeix o actualitza els subtítols", "H264CrfHelp": "El factor de velocitat constant (CRF) és el valor de qualitat predeterminat per als codificadors de programari x264 i x265. Podeu definir els valors entre 0 i 51, on els valors més baixos donarien com a resultat una millor qualitat (a costa de mides de fitxer més altes). Els valors correctes oscil·len entre 18 i 28. El valor predeterminat per a x264 és 23 i per a x265 és 28, de manera que podeu utilitzar-lo com a punt de partida. Els codificadors per maquinari no utilitzen aquesta configuració.", "GuideProviderSelectListings": "Seleccionar Llistats", - "GroupVersions": "Grups de versions", + "GroupVersions": "Agrupa versions", "Framerate": "Velocitat de fotogrames", "Filter": "Filtre", "FFmpegSavePathNotFound": "No podem localitzar FFmpeg mitjançant el directori que heu introduït. FFprobe també és obligatori i ha d’existir a la mateixa carpeta. Aquests components normalment s’agrupen en la mateixa descàrrega. Comproveu el directori i torneu-ho a provar.", @@ -1396,7 +1396,7 @@ "QuickConnectAuthorizeFail": "Codi de Quick Connect no reconegut", "QuickConnectAuthorizeCode": "Introduïu el codi {0} per iniciar sessió", "QuickConnectActivationSuccessful": "Activat amb èxit", - "QuickConnect": "Connexió Ràpida", + "QuickConnect": "Quick Connect (connexió ràpida)", "PluginFromRepo": "{0} des del repositori {1}", "Profile": "Perfil", "ProductionLocations": "Centres de producció", @@ -1409,7 +1409,7 @@ "PreferEmbeddedTitlesOverFileNames": "Prefereixo títols integrats més de noms de fitxer", "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Utilitzar la informació de l'episodi de les metadades incrustades si està disponible.", "PreferEmbeddedEpisodeInfosOverFileNames": "Prefereixo informació de l'episodi incrustat sobre els noms d'arxiu", - "PosterCard": "Targeta de pòster", + "PosterCard": "Targeta de presentació", "Poster": "Cartell", "PleaseSelectTwoItems": "Seleccioneu al menys dos ítems.", "PleaseEnterNameOrId": "Introdueixi un nom o un ID extern.", From 9d190535b1480875b1f67cf862951537fe1ededc Mon Sep 17 00:00:00 2001 From: wastaken7 Date: Sat, 14 Jun 2025 14:52:32 -0400 Subject: [PATCH 472/645] Translated using Weblate (Portuguese (Brazil)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/ --- src/strings/pt-br.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/strings/pt-br.json b/src/strings/pt-br.json index d1870d19a..d5afdbfbe 100644 --- a/src/strings/pt-br.json +++ b/src/strings/pt-br.json @@ -2026,5 +2026,11 @@ "MetadataImagesLoadError": "Falha ao carregar as configurações de metadados", "MessageForgotPasswordPinReset": "Digite o PIN aqui para finalizar a redefinição da senha", "Native": "Nativo", - "StreamCountExceedsLimit": "O número de reproduções excede o limite" + "StreamCountExceedsLimit": "O número de reproduções excede o limite", + "Create": "Criar", + "BackupsPageLoadError": "Falha ao carregar a página de backups", + "ButtonCreateBackup": "Criar backup", + "ConfirmDeleteRepository": "Excluir repositório?", + "DeleteRepositoryConfirmation": "Tem certeza de que deseja excluir este repositório?", + "ButtonLearnMore": "Saiba Mais" } From d025442baf3203f2e810617a51960ee6ac3c7fd1 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Sun, 15 Jun 2025 12:59:03 -0400 Subject: [PATCH 473/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 3809e3c48..45bee08aa 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -1758,7 +1758,7 @@ "LabelLevel": "Nivell", "LabelMediaDetails": "Detalls del contingut multimèdia", "LogLevel.Trace": "Rastreig", - "SearchResultsEmpty": "Perdona! No s'han trobat resultats per \"{0}\"", + "SearchResultsEmpty": "Ups! No s'han trobat cap resultat per \"{0}\"", "Studio": "Estudi", "UnknownError": "S'ha produït un error desconegut.", "PleaseConfirmRepositoryInstallation": "Si us plau, pitgeu OK per confirmar que heu llegit el text anterior i desitgeu continuar amb la instal·lació del repositori de complements.", From 65e70e21dca4dbf6ccaffb62aaef76dd5a46bf60 Mon Sep 17 00:00:00 2001 From: "Thadah D. Denyse" Date: Sun, 15 Jun 2025 15:06:56 -0400 Subject: [PATCH 474/645] Translated using Weblate (Basque) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/eu/ --- src/strings/eu.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/strings/eu.json b/src/strings/eu.json index 7f0270650..5f1fc7b23 100644 --- a/src/strings/eu.json +++ b/src/strings/eu.json @@ -1007,7 +1007,7 @@ "LabelTonemappingRange": "Tonuaren mapaketa-tartea", "LabelTonemappingPeakHelp": "Gainditu sarrera-seinalearen metadatu txertatuaren balioa gailur-balio honekin. Balio lehenetsia 100 da (1000 nit).", "LabelTonemappingPeak": "Tonuaren mapaketaren pikoa", - "LabelTonemappingParamHelp": "Tonua mapatzeko algoritmoa doitzea. Gomendatutako eta aurrez zehaztutako balioa NaN da. Normalean, utzi hutsik.", + "LabelTonemappingParamHelp": "Tonua mapatzeko algoritmoa doitzea. Normalean, utzi hutsik.", "LabelTonemappingParam": "Tonuaren mapaketaren parametroak", "LabelTonemappingDesatHelp": "Aplikatu desaturazioa distira-maila hori gainditzen duten argi-izpietarako. Gomendatutako balioa 0 da (desgaitu).", "LabelTonemappingDesat": "Tonuen mapaketa gaingabetua", @@ -2036,5 +2036,11 @@ "StorageType.Removable": "Kengarria", "StorageType.Unknown": "Ezezaguna", "Success": "Arrakasta", - "HeaderBackups": "Babeskopiak" + "HeaderBackups": "Babeskopiak", + "ButtonLearnMore": "Ikasi gehiago", + "TranscodingLoadError": "Ezin izan dira transkodetze ezarpenak kargatu", + "PluginsLoadError": "Errore bat gertatu da pluginak kargatzean.", + "ConfirmDeleteRepository": "Ezabatu biltegia?", + "DeleteRepositoryConfirmation": "Ziur zaude biltegi hau ezabatu nahi duzula?", + "RepositoriesPageLoadError": "Biltegiak kargatzeak huts egin du" } From c254f7813e397d23a0691d809ff050f033a9edcf Mon Sep 17 00:00:00 2001 From: Daniel Szente Date: Sun, 15 Jun 2025 21:18:34 -0400 Subject: [PATCH 475/645] Translated using Weblate (Hungarian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/ --- src/strings/hu.json | 45 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/src/strings/hu.json b/src/strings/hu.json index 0b676069f..30805ad47 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -31,7 +31,7 @@ "ButtonParentalControl": "Szülői felügyelet", "ButtonPause": "Szünet", "ButtonPreviousTrack": "Előző sáv", - "ButtonQuickStartGuide": "Gyors beállítási varázsló", + "ButtonQuickStartGuide": "Beállítási útmutató", "ButtonRemove": "Eltávolítás", "ButtonRename": "Átnevezés", "ButtonResetEasyPassword": "PIN-kód visszaállítása", @@ -1335,7 +1335,7 @@ "MessageAddRepository": "Ha új tárolót szeretnél hozzáadni, kattints a gombra a fejlécben, és add meg a szükséges adatokat.", "LabelRepositoryNameHelp": "Egy egyedi név, amivel megkülönböztetheted a tárolót a többi, a szervezhez hozzáadott tárolótól.", "LabelRepositoryName": "Tároló neve", - "LabelRepositoryUrlHelp": "A hivatkozni kívánt tároló manifeszt helye.", + "LabelRepositoryUrlHelp": "A hivatkozni kívánt tároló jegyzékének helye.", "LabelRepositoryUrl": "Tároló URL-je", "HeaderNewRepository": "Új tároló", "MessageNoRepositories": "Nincs tároló.", @@ -1440,7 +1440,7 @@ "RemuxHelp2": "A Remux nagyon kevés feldolgozási teljesítményt használ, teljesen veszteségmentes médiaminőség mellett.", "RemuxHelp1": "Az adathordozók nem kompatibilis fájlok tárolójában vannak (MKV, AVI, WMV stb.), De mind a video, mind az audio adatfolyam kompatibilis az eszközzel. A médiát menet közben veszteségmentesen csomagolják át, mielőtt a készülékre küldik őket.", "Remuxing": "Remuxolás", - "AspectRatioCover": "Borító", + "AspectRatioCover": "Nagyítás", "EnableFallbackFontHelp": "Engedélyezze az egyéni alternatív betűtípusokat. Ezzel elkerülhető a helytelen felirat-megjelenítés problémája.", "EnableFallbackFont": "Engedélyezze a tartalék betűtípusokat", "LabelFallbackFontPathHelp": "Ezeket a betűtípusokat egyes ügyfelek feliratok megjelenítésére használják. További információért kérjük, olvassa el a dokumentációt.", @@ -1454,7 +1454,7 @@ "MediaInfoColorPrimaries": "Fő színek", "LabelUDPPortRangeHelp": "Korlátozza a Jellyfint, hogy ezt a porttartományt használja UDP-kapcsolatok létrehozásakor. (Alapértelmezés szerint 1024 - 65535).
Megjegyzés: Bizonyos funkciókhoz fix portok szükségesek, amelyek kívül eshetnek ezen a tartományon.", "LabelUDPPortRange": "UDP kommunikációs tartomány", - "LabelTonemappingParamHelp": "Hangolja be a tónusleképezési algoritmust. Az ajánlott és az alapértelmezett érték NaN. Általában hagyja üresen.", + "LabelTonemappingParamHelp": "Hangolja be a tónusleképezési algoritmust. Általában hagyja üresen.", "LabelSSDPTracingFilterHelp": "Opcionális IP-cím, amelyen szűrni lehet a naplózott SSDP-forgalmat.", "LabelSSDPTracingFilter": "SSDP Szűrő", "LabelPublishedServerUriHelp": "Felülírja a Jellyfin által használt URI-t az interfész vagy a kliens IP-címe alapján. Például: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, or all=https://jellyfin.example.com", @@ -1810,7 +1810,7 @@ "PlaybackError.MEDIA_NOT_SUPPORTED": "A lejátszás meghiúsult, mert a tartalmat a kliens nem támogatja.", "PlaybackError.NotAllowed": "Ennek a tartalomnak a lejátszása nem engedélyezett.", "BlockingScan": "Blokkoló – beütemezi az előállítást, a befejeződéséig blokkolja a tartalomkeresést", - "LabelTrickplayAccelEncodingHelp": "Jelenleg csak QSV és VAAPI gyorsítókon elérhető, más hardveres gyorsítókat nem befolyásol.", + "LabelTrickplayAccelEncodingHelp": "Ez a beállítás jelenleg csak a QSV, VA-API, VideoToolbox és RKMPP technológiáknál érhető el. Más hardveres gyorsítási módokra nincs hatással.", "PriorityHigh": "Magas", "LabelTrickplayAccelEncoding": "Hardveresen gyorsított MJPEG kódolás engedélyezése", "ConfirmDeleteLyrics": "A dalszövegek törlésével azok törlődni fognak a fájlrendszerből és a médiakönyvtárból is. Biztosan folytatni akarod?", @@ -2024,5 +2024,38 @@ "SelectPreferredTranscodeVideoAudioCodecHelp": "Válassza ki a videó tartalmak átkódolásához előnyben részesített audió kodeket. Ha az előnyben részesített kodek nem támogatott, a szerver a következő legjobb elérhető kodeket fogja használni.", "UseCustomTagDelimiters": "Egyéni címke elválasztó használata", "UseCustomTagDelimitersHelp": "Előadó/műfaj címkék szétválasztása egyéni karakterekkel.", - "UploadCustomImage": "Egyedi kép feltöltése" + "UploadCustomImage": "Egyedi kép feltöltése", + "BackupsPageLoadError": "Nem sikerült betölteni a biztonsági mentések oldalt", + "LabelRestore": "Visszaállítás", + "LabelDatabase": "Adatbázis", + "ViewSettings": "Beállítások megtekintése", + "PluginsLoadError": "Hiba lépett fel a bővítmények betöltése során.", + "StorageType.NoRootDirectory": "Több forrás", + "StorageType.Network": "Hálózati", + "StorageType.Ram": "RAM", + "Success": "Siker", + "HeaderBackups": "Mentések", + "DownloadManager": "Letöltések", + "ButtonLearnMore": "Bővebben", + "Create": "Létrehozás", + "HeaderBackupsHelp": "Hozzon létre és állítson vissza mentéseket a szerverről. A mentés tartalmazhatja az adatbázist, a metaadatokat, a feliratokat és a trükkfelvételeket.", + "MessageBackupDisclaimer": "A mentés a könyvtár méretétől függően hosszabb időt vehet igénybe.", + "MessageBackupInProgress": "Mentés folyamatban", + "MessageRestoreSuccess": "A visszaállítás sikeresen befejeződött", + "MessageWaitingForServer": "Várakozás a szerverre...", + "StorageType.CDRom": "CD-ROM", + "StorageType.Fixed": "Belső", + "StorageType.Removable": "Cserélhető", + "StorageType.Unknown": "Ismeretlen", + "TranscodingLoadError": "Nem sikerült betölteni az átkódolási beállításokat", + "MessageForgotPasswordPinReset": "A jelszó-visszaállítás befejezéséhez adja meg a PIN-kódot", + "ButtonCreateBackup": "Biztonsági mentés készítése", + "LabelBackupsUnavailable": "Nincsenek mentések", + "MessageRestoreInProgress": "Visszaállítás folyamatban", + "DeleteRepositoryConfirmation": "Biztosan törölni szeretnéd ezt a tárolót?", + "ConfirmDeleteRepository": "Tároló törlése?", + "MessageRestoreDisclaimer": "FIGYELEM: Ön egy korábbi mentés visszaállítására készül. A művelet alatt a szerver nem lesz használható, és a mentés óta létrehozott minden új adat elvész.", + "RepositoriesPageLoadError": "Tárolók betöltése sikertelen", + "LabelProgramData": "Alkalmazás adatai", + "LabelImageCache": "Képgyorsítótár" } From 4579943c5929be2478c760bb5f9b3af128b69da5 Mon Sep 17 00:00:00 2001 From: DyingSlacker <2391773977@outlook.com> Date: Sun, 15 Jun 2025 22:53:31 -0400 Subject: [PATCH 476/645] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index ccd6ccb99..ef5a694be 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -1909,7 +1909,7 @@ "PluginDisableError": "禁用插件时发生错误。", "PluginEnableError": "启用插件时发生错误。", "PluginLoadConfigError": "获取插件配置页面时发生错误。", - "PluginLoadRepoError": "从仓库获取插件详情时发生错误。", + "PluginLoadRepoError": "从存储库获取插件详情时发生错误。", "PluginUninstallError": "卸载插件时发生错误。", "HeaderNextItemPlayingInValue": "下一个 {0} 在 {1} 播放", "AndOtherArtists": "{0} 和 {1} 位其他艺术家。", From d0b06a0bf638d587987a8c2c81e427b4311fb352 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aindri=C3=BA=20Mac=20Giolla=20Eoin?= Date: Mon, 16 Jun 2025 03:25:02 -0400 Subject: [PATCH 477/645] Translated using Weblate (Irish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ga/ --- src/strings/ga.json | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/src/strings/ga.json b/src/strings/ga.json index 91017e5ef..00b83ca66 100644 --- a/src/strings/ga.json +++ b/src/strings/ga.json @@ -318,7 +318,7 @@ "LabelTonemappingDesat": "Desat mapála ton", "LabelTonemappingDesatHelp": "Cuir dísháithiú i bhfeidhm ar bhuaicphointí a sháraíonn an leibhéal gile seo. Is é an luach molta ná 0 (díchumasaigh).", "LabelTonemappingParam": "Param mapála ton", - "LabelTonemappingParamHelp": "Tiúnáil an algartam mapála ton. Is iad na luachanna molta agus réamhshocraithe NaN. Go ginearálta fág bán é.", + "LabelTonemappingParamHelp": "Tiúnáil an algartam mapála toin. Fág bán é go ginearálta.", "LabelTonemappingPeak": "Buaic mhapála ton", "LabelTonemappingPeakHelp": "Sáraigh luach meiteashonraí leabaithe an chomhartha ionchuir leis an buaicluach seo ina ionad. Is é an luach réamhshocraithe ná 100 (1000nit).", "LabelTonemappingRange": "Raon mapála ton", @@ -1832,7 +1832,7 @@ "LabelGroupShowsIntoCollections": "Taispeántais ghrúpa i mbailiúcháin", "LimitSegmentLength": "Úsáid codanna HLS níos giorra", "LimitSegmentLengthHelp": "D’fhéadfadh sé go gcuideodh cumasú an rogha seo le cosc a chur ar an seinnteoir HLS dul i bhfostú le linn cuardaigh ar ghléasanna áirithe, amhail teilifíseáin webOS.", - "Retry": "Déan iarracht arís", + "Retry": "Bain triail eile as", "RetryWithGlobalSearch": "Déan iarracht eile le cuardach domhanda", "ViewSettings": "Féach ar shocruithe", "CustomSplashScreenSize": "Ba chóir go mbeadh íomhánna saincheaptha i gcóimheas gné 16x9 agus méid íosta 1920x1080.", @@ -1843,5 +1843,35 @@ "StreamCountExceedsLimit": "Tá líon na sruthanna níos mó ná an teorainn", "UploadCustomImage": "Uaslódáil Íomhá Saincheaptha", "MetadataImagesLoadError": "Theip ar shocruithe meiteashonraí a lódáil", - "HeaderUpdateRequired": "Nuashonrú Riachtanach" + "HeaderUpdateRequired": "Nuashonrú Riachtanach", + "MessageWaitingForServer": "Ag fanacht leis an bhfreastalaí...", + "DeleteRepositoryConfirmation": "An bhfuil tú cinnte gur mian leat an stórlann seo a scriosadh?", + "LabelImageCache": "Taisce Íomhá", + "MessageRestoreDisclaimer": "RABHADH: Tá tú ar tí cúltaca roimhe seo a athchóiriú. Ní bheidh do fhreastalaí inúsáidte ar feadh ré an phróisis agus caillfear aon sonraí nua a cruthaíodh ó rinneadh an cúltaca.", + "RepositoriesPageLoadError": "Theip ar luchtú na stórtha", + "PluginsLoadError": "Tharla earráid agus breiseáin á luchtú.", + "StorageType.Fixed": "Seasta", + "StorageType.Unknown": "Anaithnid", + "Success": "Rath", + "ButtonLearnMore": "Foghlaim Tuilleadh", + "Create": "Cruthaigh", + "HeaderBackupsHelp": "Cruthaigh agus athchóirigh snapshots de do fhreastalaí lena n-áirítear an bunachar sonraí, meiteashonraí, fotheidil agus cleasaíocht.", + "LabelBackupsUnavailable": "Níl aon chúltacaí ar fáil", + "LabelDatabase": "Bunachar Sonraí", + "LabelProgramData": "Sonraí an Chláir", + "LabelRestore": "Athchóirigh", + "MessageBackupDisclaimer": "Ag brath ar mhéid do leabharlainne, d’fhéadfadh go dtógfadh an próiseas cúltaca tamall.", + "MessageBackupInProgress": "Cúltaca ar siúl", + "MessageRestoreInProgress": "Athchóiriú ar siúl", + "MessageRestoreSuccess": "Athchóiriú críochnaithe go rathúil", + "StorageType.CDRom": "CD-ROM", + "StorageType.Network": "Líonra", + "StorageType.NoRootDirectory": "Gan Eolaire Fréamhacha", + "StorageType.Ram": "RAM", + "StorageType.Removable": "Inbhainte", + "HeaderBackups": "Cúltacaí", + "TranscodingLoadError": "Theip ar shocruithe traschódaithe a lódáil", + "BackupsPageLoadError": "Theip ar an leathanach cúltaca a lódáil", + "ButtonCreateBackup": "Cruthaigh Cúltaca", + "ConfirmDeleteRepository": "Scrios an stórlann?" } From b3372c94b595443959d73e5b5f67c2ca614945b3 Mon Sep 17 00:00:00 2001 From: CapitanDirp Date: Mon, 16 Jun 2025 02:05:59 -0400 Subject: [PATCH 478/645] Translated using Weblate (Danish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/da/ --- src/strings/da.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/strings/da.json b/src/strings/da.json index 5a13e6d96..61c023650 100644 --- a/src/strings/da.json +++ b/src/strings/da.json @@ -2027,5 +2027,17 @@ "LimitSegmentLength": "Brug kortere HLS-segmenter", "ViewSettings": "Vis Indstillinger", "HeaderServerUnavailable": "Server Utilgængelig", - "HeaderUpdateRequired": "Opdatering Nødvendig" + "HeaderUpdateRequired": "Opdatering Nødvendig", + "PluginsLoadError": "En fejl opstod imens der blev loaded plugins.", + "ButtonLearnMore": "Lær Mere", + "MessageForgotPasswordPinReset": "Skriv PIN her for at færdigøre Adgangskode nulstilling", + "BackupsPageLoadError": "Fejlede ved at load backup side", + "ButtonCreateBackup": "Opret Backup", + "Create": "Opret", + "LabelBackupsUnavailable": "Ingen backups tilgængelige", + "LabelRestore": "Genopret", + "MessageBackupDisclaimer": "Afhængig af størrelsen på det biblotek, backup processen tager måske et stykke tid.", + "MessageBackupInProgress": "Backup igang", + "LabelDatabase": "Database", + "LabelProgramData": "Program Data" } From 0906959ab65ee35b2991de449075b7e1599f7639 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs?= Date: Mon, 16 Jun 2025 02:54:32 -0400 Subject: [PATCH 479/645] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/es.json b/src/strings/es.json index 22b184c62..4778c0731 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -1406,7 +1406,7 @@ "MediaInfoColorSpace": "Espacio de color", "MediaInfoVideoRange": "Rango de video", "LabelMaxMuxingQueueSize": "Tamaño máximo de la cola de entremezclado", - "LabelTonemappingParamHelp": "Ajuste el algoritmo de mapeo de Tono. El valor recomendado y predeterminados es NaN. Generalmente déjelo en blanco.", + "LabelTonemappingParamHelp": "Ajuste el algoritmo de mapeo de Tono. Generalmente déjelo en blanco.", "LabelTonemappingParam": "Parámetros del mapeo de tono", "LabelTonemappingPeak": "Pico del mapeo de tono", "LabelTonemappingDesat": "Mapeo de tonos desaturado", From b8f0f62aa7b98a0412ff0e82447af215cc455207 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Mon, 16 Jun 2025 16:51:28 -0400 Subject: [PATCH 480/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 68 ++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 45bee08aa..c867cf47c 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -8,7 +8,7 @@ "AllChannels": "Tots els canals", "AllEpisodes": "Tots els episodis", "AlwaysPlaySubtitles": "Reprodueix sempre", - "AroundTime": "Al voltant {0}", + "AroundTime": "Al voltant de {0}", "Artists": "Artistes", "AsManyAsPossible": "Tants com sigui possible", "AspectRatio": "Relació d'aspecte", @@ -16,18 +16,18 @@ "MessageBrowsePluginCatalog": "Consulteu el nostre catàleg per veure els complements disponibles.", "ButtonAddMediaLibrary": "Afegeix una mediateca", "ButtonAddScheduledTaskTrigger": "Afegeix un disparador", - "ButtonAddServer": "Afegeix Servidor", + "ButtonAddServer": "Afegeix un servidor", "ButtonAddUser": "Afegeix un usuari", "ButtonArrowLeft": "Esquerra", "ButtonArrowRight": "Dreta", - "ButtonBack": "Darrera", - "ButtonCancel": "Cancel·lar", - "ButtonChangeServer": "Canviar de Servidor", - "ButtonEditOtherUserPreferences": "Editar el perfil, la imatge i les preferències d'aquest usuari.", + "ButtonBack": "Enrere", + "ButtonCancel": "Cancel·la", + "ButtonChangeServer": "Canvia de servidor", + "ButtonEditOtherUserPreferences": "Edita el perfil, la imatge i les preferències d'aquest usuari.", "ButtonForgotPassword": "He oblidat la contrasenya", "ButtonGotIt": "Entesos", "ButtonLibraryAccess": "Accés a la mediateca", - "ButtonManualLogin": "Inici de sessió manual", + "ButtonManualLogin": "Inici manual de sessió", "ButtonMore": "Més", "ButtonNextTrack": "Pista següent", "ButtonOk": "D'acord", @@ -40,9 +40,9 @@ "ButtonRemove": "Elimina", "ButtonResetEasyPassword": "Restabliu el codi Easy PIN", "ButtonResume": "Reprèn", - "ButtonSelectDirectory": "Seleccionar el directori", - "ButtonSend": "Enviar", - "ButtonShutdown": "Apagar", + "ButtonSelectDirectory": "Seleccioneu el directori", + "ButtonSend": "Envia", + "ButtonShutdown": "Apaga", "ButtonSignIn": "Iniciar sessió", "ButtonSignOut": "Tanca la sessió", "ButtonStop": "Aturar", @@ -599,10 +599,10 @@ "ButtonUninstall": "Desinstal·lar", "ButtonSplit": "Dividir", "ButtonStart": "Començar", - "ButtonSelectView": "Seleccionar la vista", + "ButtonSelectView": "Seleccioneu la vista", "ButtonScanAllLibraries": "Escaneja totes les mediateques", "ButtonRevoke": "Revoca", - "ButtonRename": "Canviar el nom", + "ButtonRename": "Canvia el nom", "ButtonNetwork": "Xarxa", "ButtonInfo": "Informació", "ButtonFullscreen": "Pantalla completa", @@ -613,20 +613,20 @@ "BirthLocation": "Lloc de naixement", "BirthDateValue": "Nascut: {0}", "Banner": "Pancarta", - "Auto": "Auto", + "Auto": "Automàtic", "AuthProviderHelp": "Trieu un proveïdor d'autenticació que s'usarà per a autenticar la contrasenya d'aquest usuari.", "AskAdminToCreateLibrary": "Demana a un administrador que creï una mediateca.", "Ascending": "Ascendent", - "Art": "Clearart", + "Art": "Imatge transparent", "Anytime": "En qualsevol moment", "AnyLanguage": "Qualsevol idioma", "AlwaysPlaySubtitlesHelp": "Es carregaran els subtítols que coincideixin amb la preferència d’idioma independentment de l'idioma de l’àudio.", "AllowRemoteAccessHelp": "Si no es marca, totes les connexions remotes es bloquejaran.", - "AllowRemoteAccess": "Permetre connexions remotes a aquest servidor", - "AllowOnTheFlySubtitleExtraction": "Permetre extreure subtítols sobre la marxa", + "AllowRemoteAccess": "Permet connexions remotes a aquest servidor", + "AllowOnTheFlySubtitleExtraction": "Permet extreure subtítols sobre la marxa", "AllowMediaConversionHelp": "Concedeix o denega l’accés a la funció de conversió de contingut multimèdia.", "AllowMediaConversion": "Permet la conversió de continguts multimèdia", - "AllowHWTranscodingHelp": "Permet al sintonitzador transcodifique els fluxos sobre la marxa.", + "AllowHWTranscodingHelp": "Permet al sintonitzador que transcodifiqui els fluxos sobre la marxa. Això pot ajudar a reduir els requisits de transcodificació del servidor.", "AllLibraries": "Totes les mediateques", "AllLanguages": "Tots els idiomes", "AllComplexFormats": "Tots els formats complexos (ASS, SSA, VobSub, PGS, SUB / IDX, etc.)", @@ -642,18 +642,18 @@ "ChannelNameOnly": "Només el canal {0}", "ChangingMetadataImageSettingsNewContent": "Els canvis als paràmetres de descàrrega de metadades o imatges només s'apliquen al contingut nou afegit a la mediateca. Per a aplicar els canvis als títols existents, haureu d'actualitzar les metadades manualment.", "ButtonTogglePlaylist": "Llista de reproducció", - "BurnSubtitlesHelp": "Determina si el servidor hauria de gravar els subtítols. Evitant això millorarà molt el rendiment. Selecciona Auto per gravar formats basats en imatges (VobSub, PGS, SUB, IDX) i certs subtítols ASS o SSA.", + "BurnSubtitlesHelp": "Determina si el servidor hauria de gravar els subtítols. Evitant això millorarà molt el rendiment. Selecciona Automàtic per gravar formats basats en imatges (VobSub, PGS, SUB, IDX) i certs subtítols ASS o SSA.", "Browse": "Navega", "BoxRear": "Capsa (darrere)", - "BoxSet": "Col·leció", + "BoxSet": "Col·lecció", "Box": "Capsa", - "BookLibraryHelp": "Àudiollibres i llibres de text son compatibles. Reviseu la {0} guia de denominació de llibres {1}.", + "BookLibraryHelp": "Els àudiollibres i llibres de text funcionen. Reviseu la {0} guia de denominació de llibres {1}.", "Backdrops": "Fons", "Backdrop": "Fons", "Artist": "Artista", "AllowedRemoteAddressesHelp": "Llista d’adreces IP o d’entrades IP/netmask separades per comes per a xarxes que podran connectar-se de forma remota. Si es deixa en blanc, es permetran totes les adreces remotes.", "AllowFfmpegThrottlingHelp": "Quan una transcodificació o un remux s'avança prou de la posició de reproducció actual, atura el procés per a què consumeixi menys recursos. És especialment útil si no es fan gaire cerques mentre es reprodueix el contingut. Desactiveu-ho si dona problemes de reproducció o si canvieu sovint de posició mentre reproduïu continguts.", - "AllowFfmpegThrottling": "Regular les transcodificacions", + "AllowFfmpegThrottling": "Regula les transcodificacions", "AllowOnTheFlySubtitleExtractionHelp": "Els subtítols incrustats es poden extreure de vídeos i lliurar-los als clients en text pla, per tal d’evitar la transcodificació de vídeos. En alguns sistemes, això pot trigar molt de temps i fer que la reproducció de vídeo s'aturi durant el procés d’extracció. Desactiveu aquesta opció perquè els subtítols incrustats es gravin amb la transcodificació de vídeo quan el dispositiu client no els admeti de forma nativa.", "AlbumArtist": "Artista de l'àlbum", "Album": "Àlbum", @@ -735,8 +735,8 @@ "DeleteDeviceConfirmation": "N'esteu segur, que voleu suprimir aquest dispositiu? Tornarà a aparèixer la pròxima vegada que un usuari iniciï la sessió amb ell.", "Data": "Dades", "ButtonUseQuickConnect": "Utilitzar Quick Connect", - "ButtonActivate": "Activar", - "Authorize": "Autoritzar", + "ButtonActivate": "Activa", + "Authorize": "Autoritza", "LabelServerName": "Nom del servidor", "MessageChromecastConnectionError": "El seu receptor de Google Cast no pot contactar amb el servidor de Jellyfin. Comproveu la connexió i torneu-ho a provar.", "MessagePlaybackError": "Hi ha hagut un problema reproduïnt aquest arxiu al teu receptor de Google Cast.", @@ -751,7 +751,7 @@ "ClearQueue": "Esborra la cua", "Bwdif": "Bob Weaver DeInterlacing Filter (BWDIF)", "ButtonPlayer": "Reproductor", - "ButtonCast": "Transmetre a dispositiu", + "ButtonCast": "Transmet al dispositiu", "ApiKeysCaption": "Llista de les claus API activades actualment", "AllowTonemappingHelp": "El mapeig de tons pot transformar el rang dinàmic d'un vídeo d'HDR a SDR mantenint els detalls i els colors de la imatge, que són informació molt important per representar l'escena original. Actualment només funciona amb vídeos 10 bit HDR10, HLG o DoVi. Això requereix el temps d'execució GPGPU corresponent.", "ErrorPleaseSelectLineup": "Trieu una alineació i torneu-ho a provar. Si no hi ha cap formació disponible, comproveu que el vostre nom d’usuari, contrasenya i codi postal siguin correctes.", @@ -1641,7 +1641,7 @@ "Casual": "Informal", "ButtonSpace": "Espai", "ButtonExitApp": "Sortir de l'aplicació", - "ButtonClose": "Tancar", + "ButtonClose": "Tanca", "ButtonBackspace": "Retrocés", "Arranger": "Arranjador", "AddToFavorites": "Afegeix a preferits", @@ -1733,7 +1733,7 @@ "UserMenu": "Menú d'usuari", "AllowCollectionManagement": "Permet a aquest usuari gestionar col·leccions", "AllowSegmentDeletion": "Suprimeix segments", - "AllowSegmentDeletionHelp": "Suprimeix els segments antics després que el client els hagi descarregat. Això evita haver d'emmagatzemar tot el fitxer transcodificat al disc. Desactiva-ho si tens problemes de reproducció.", + "AllowSegmentDeletionHelp": "Suprimeix els segments antics després que el client els hagi descarregat. Això evita haver d'emmagatzemar tot el fitxer transcodificat al disc. Desactiveu-ho si teniu problemes de reproducció.", "LabelThrottleDelaySeconds": "Acceleració després de", "LabelThrottleDelaySecondsHelp": "Temps en segons, després del qual s'accelerarà el transcodificador. La durada ha de ser suficient per a que el client mantingui una memòria intermèdia saludable. Només funciona si l'acceleració està habilitada.", "LabelSegmentKeepSeconds": "Temps per mantenir els segments", @@ -1793,7 +1793,7 @@ "ChannelResolutionSDPAL": "SD (PAL)", "ChannelResolutionHD": "HD", "DlnaMovedMessage": "La funcionalitat DLNA s'ha mogut a complements.", - "AllowSubtitleManagement": "Permetre a aquest usuari editar subtítols", + "AllowSubtitleManagement": "Permet editar subtítols a aquest usuari", "ChannelResolutionUHD4K": "UHD (4K)", "LabelTrickplayAccel": "Habilitar descodificació per maquinari", "NonBlockingScan": "Sense Bloqueig - generació de cues, després retorna", @@ -1891,7 +1891,7 @@ "Penciller": "Dibuixant", "Inker": "Tintador", "Letterer": "Retolador", - "Alternate": "Alternar", + "Alternate": "Alterna", "AlternateDVD": "DVD alternatiu", "Regional": "Regional", "HeaderNextItemPlayingInValue": "Següent {0} Reproduint a {1}", @@ -1928,7 +1928,7 @@ "AllowTonemappingSoftwareHelp": "El mapatge de tons pot transformar el rang dinàmic d'un vídeo d'HDR a SDR mantenint els detalls i els colors de la imatge, que són informació molt important per representar l'escena original. Actualment, només funciona amb vídeos HDR10, HLG i DoVi de 10 bits.", "LabelDuration": "Duració", "LabelDropLyricsHere": "Arrossega i deixa anar les lletres aquí, o fes clic aquí per cercar-les.", - "AllowFmp4TranscodingContainerHelp": "Permet el contenidor de transcodificació fMP4 per a aquest sintonintzador, per habilitar continguts HEVC i HDR. No tots els sintonitzadors són compatibles amb aquest contenidor. Desactiva-ho si experimentes problemes de reproducció.", + "AllowFmp4TranscodingContainerHelp": "Permet el contenidor de transcodificació fMP4 per a aquest sintonitzador, per habilitar continguts HEVC i HDR. No tots els sintonitzadors són compatibles amb aquest contenidor. Desactiveu-ho si experimenteu problemes de reproducció.", "AllowStreamSharingHelp": "Permet que Jellyfin dupliqui el flux mpegts del sintonitzador i comparteixi aquest flux duplicat amb els seus clients. Això és útil quan el sintonitzador té un límit en la quantitat total de reproduccions, però també pot causar problemes de reproducció.", "LabelCustomTagDelimiters": "Limitador d'etiquetes personalitzat", "Anime": "Anime", @@ -1936,7 +1936,7 @@ "EnableHi10p": "Activar perfil H.264 High 10", "HeaderEditPlaylist": "Edita la llista de reproducció", "HeaderNewPlaylist": "Llista de reproducció nova", - "AlwaysRemuxFlacAudioFilesHelp": "Si el teu navegador rebutja reproduir certs arxius o calcula les marques de temps de manera imprecisa, activa això com a solució alternativa.", + "AlwaysRemuxFlacAudioFilesHelp": "Si el vostre navegador rebutja reproduir certs arxius o calcula les marques de temps de manera imprecisa, activeu això com a solució alternativa.", "AlwaysRemuxMp3AudioFilesHelp": "Si el teu navegador calcula les marques de temps de certs arxius de manera imprecisa, activa això com a solució alternativa.", "EnableHi10pHelp": "Activar per a evitar transcodificació de vídeos en H.264 10-bits. Desactivar-ho si la reproducció del vídeo mostra fotogrames buits.", "DateModified": "Data de modificació", @@ -1973,8 +1973,8 @@ "LyricDownloadersHelp": "Activa i classifica els descarregadors de lletres preferits en ordre de prioritat.", "MessageSplitVersionsError": "S'ha produït un error separant les versions", "LabelAllowStreamSharing": "Permet la reproducció compartida", - "AlwaysBurnInSubtitleWhenTranscoding": "Sempre incorporar els subtítols al transcodificar", - "AlwaysBurnInSubtitleWhenTranscodingHelp": "Incorporar tots els subtítols quan s'activi la transcodificació. Això assegura la sincronització dels subtítols després de la transcodificació, a canvi d'una menor velocitat de transcodificació.", + "AlwaysBurnInSubtitleWhenTranscoding": "En transcodificar, incrusta sempre els subtítols", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Incorpora tots els subtítols quan s'activi la transcodificació. Això assegura la sincronització dels subtítols després de la transcodificació, a canvi d'una menor velocitat de transcodificació.", "HeaderMediaSegmentActions": "Accions dels segments de continguts multimèdia", "LabelMediaSegmentsType": "{0} Segments", "PreferNonstandardArtistsTag": "Preferir l'etiqueta ARTISTS si estan disponibles", @@ -1990,7 +1990,7 @@ "HeaderNextVideo": "Vídeo següent", "LabelMediaSegmentProviders": "Proveïdors de segments de continguts multimèdia", "MediaSegmentProvidersHelp": "Habiliteu i classifiqueu per ordre de prioritat els vostres proveïdors preferits de segments multimèdia.", - "AutoSubtitleStylingHelp": "Aquest mode canviarà automàticament entre els mecanismes d'estils de subtítols natius i personalitzats, basant-se en el teu tipus de dispositiu.", + "AutoSubtitleStylingHelp": "Aquest mode canviarà automàticament entre els mecanismes d'estils de subtítols natius i personalitzats, basant-se en el vostre tipus de dispositiu.", "Custom": "Personalitzat", "CustomSubtitleStylingHelp": "L'estilització de subtítols funciona en la majoria dels dispositius, però suposa un cost addicional de rendiment.", "LabelSubtitleStyling": "Estilització de subtítols", @@ -2035,7 +2035,7 @@ "StorageType.CDRom": "CD-ROM", "StorageType.NoRootDirectory": "Cap directori arrel", "BackupsPageLoadError": "No s'ha pogut carregar la pàgina de còpies de seguretat", - "ButtonCreateBackup": "Crear còpia de seguretat", + "ButtonCreateBackup": "Crea una còpia de seguretat", "Create": "Crear", "HeaderBackupsHelp": "Crea i restaura còpies del servidor, les quals poden incloure la base de dades, metadades, subtítols i imatges de previsualització.", "LabelBackupsUnavailable": "No hi ha còpies de seguretat disponibles", From a4e6965cf236bbea01ee1ca6cdfb2df24e6b5c0b Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Mon, 16 Jun 2025 17:18:01 -0400 Subject: [PATCH 481/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 100 ++++++++++++++++++++++---------------------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index c867cf47c..485c1b2e4 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -43,25 +43,25 @@ "ButtonSelectDirectory": "Seleccioneu el directori", "ButtonSend": "Envia", "ButtonShutdown": "Apaga", - "ButtonSignIn": "Iniciar sessió", + "ButtonSignIn": "Inicia la sessió", "ButtonSignOut": "Tanca la sessió", - "ButtonStop": "Aturar", - "ButtonSubmit": "Enviar", + "ButtonStop": "Atura", + "ButtonSubmit": "Envia", "ButtonTrailer": "Tràiler", - "CancelRecording": "Cancel·la enregistrament", - "CancelSeries": "Cancel·la sèrie", + "CancelRecording": "Cancel·la l'enregistrament", + "CancelSeries": "Cancel·la la sèrie", "ChannelAccessHelp": "Trieu els canals a compartir amb aquest usuari. Els administradors podran editar tots els canals emprant el gestor de metadades.", "Composer": "Compositor", - "ConfirmDeleteImage": "Esborrar imatge?", + "ConfirmDeleteImage": "Desitgeu eliminar la imatge?", "ConfirmDeletion": "Confirma supressió", "Connect": "Connecta", "Continuing": "En curs", "ErrorDefault": "Hi ha hagut un error processant la petició. Intenteu-ho més tard.", - "Delete": "Esborra", - "DeleteImage": "Esborra Imatge", + "Delete": "Elimina", + "DeleteImage": "Elimina la imatge", "DeleteImageConfirmation": "N'esteu segur, que voleu suprimir aquesta imatge?", - "DeleteMedia": "Esborra", - "DeleteUser": "Esborrar usuari", + "DeleteMedia": "Elimina el contingut", + "DeleteUser": "Esborra l'usuari", "Desktop": "Escriptori", "DeviceAccessHelp": "Això només s'aplica a dispositius que poden ser identificats i no previndrà l'accés des del navegador. Filtrant l'accés de dispositius a l'usuari previndrà l'ús de nous dispositius fins que hagin estat aprovats aquí.", "Disconnect": "Desconnecta", @@ -73,7 +73,7 @@ "Edit": "Edita", "EditImages": "Edita les imatges", "EditSubtitles": "Edita els subtítols", - "EnableCinemaMode": "Mode cinema", + "EnableCinemaMode": "Mode de cinema", "EnableDisplayMirroring": "Duplicació de pantalla", "Ended": "Acabades", "EndsAtValue": "Acabaria a les {0}", @@ -596,9 +596,9 @@ "ChannelNumber": "Número de canal", "Categories": "Categories", "ButtonWebsite": "Lloc web", - "ButtonUninstall": "Desinstal·lar", - "ButtonSplit": "Dividir", - "ButtonStart": "Començar", + "ButtonUninstall": "Desinstal·la", + "ButtonSplit": "Divideix", + "ButtonStart": "Comença", "ButtonSelectView": "Seleccioneu la vista", "ButtonScanAllLibraries": "Escaneja totes les mediateques", "ButtonRevoke": "Revoca", @@ -658,21 +658,21 @@ "AlbumArtist": "Artista de l'àlbum", "Album": "Àlbum", "ButtonSyncPlay": "Reproducció sincronitzada", - "CriticRating": "Valoració dels сrítics", - "CopyStreamURLSuccess": "La URL s'ha copiat correctament.", + "CriticRating": "Valoració de les crítiques", + "CopyStreamURLSuccess": "L'URL s'ha copiat correctament.", "CopyStreamURL": "Copia l'URL de reproducció", "ContinueWatching": "Continueu mirant-ho", - "ConfirmEndPlayerSession": "Vols tancar Jellyfin a {0}?", + "ConfirmEndPlayerSession": "Desitgeu tancar Jellyfin a {0}?", "ConfirmDeleteItems": "L'eliminació d'aquests elements els suprimirà del sistema de fitxers i de la mediateca. N'esteu segur, que desitgeu continuar?", "ConfirmDeleteItem": "Eliminar aquest element l'eliminarà del sistema de fitxers i de la mediateca. N'esteu segur, que desitgeu continuar?", "ConfigureDateAdded": "Configureu com es determinen les metadades de la \"Data d'afegit\" al Tauler > Mediateques > Visualització", - "CommunityRating": "Ràting comunitari", + "CommunityRating": "Valoració de la comunitat", "ColorTransfer": "Transferència de color", "ColorSpace": "Espai de color", "ColorPrimaries": "Colors primaris", "DefaultMetadataLangaugeDescription": "Aquests són els vostres valors per defecte i poden ser personalitzats per a cada mediateca.", "Default": "Per defecte", - "DatePlayed": "Data reproduït", + "DatePlayed": "Data de reproducció", "DateAdded": "Data d'addició", "CustomDlnaProfilesHelp": "Crear un perfil personalitzat per a un nou dispositiu o substituir un perfil de sistema.", "HeaderAdmin": "Administració", @@ -702,19 +702,19 @@ "ErrorAddingMediaPathToVirtualFolder": "S'ha produït un error en afegir la ruta multimèdia. Assegureu-vos que la ruta sigui vàlida i que Jellyfin tingui accés a aquesta ubicació.", "Episode": "Episodi", "EnableThemeSongsHelp": "Reprodueix sintonies en segon pla mentre es navega per la mediateca.", - "EnableStreamLooping": "Bucle automàtic en emisions en directe", - "EnableQuickConnect": "Activar Quick Connect en aquest servidor", + "EnableStreamLooping": "Bucle automàtic en emissions en directe", + "EnableQuickConnect": "Habilita la connexió ràpida a aquest servidor", "EnablePhotosHelp": "Les imatges es detectaran i es mostraran al costat d'altres fitxers multimèdia.", "EnablePhotos": "Mostra les fotos", - "EnableNextVideoInfoOverlayHelp": "Al final d'un vídeo, mostreu informació sobre el següent vídeo que apareix a la llista de reproducció actual.", + "EnableNextVideoInfoOverlayHelp": "Al final d'un vídeo, mostreu informació sobre el següent vídeo que aparegui a la llista de reproducció actual.", "EnableNextVideoInfoOverlay": "Mostra la informació del següent vídeo durant la reproducció", "EnableHardwareEncoding": "Activa la codificació de maquinari", "EnableExternalVideoPlayersHelp": "Es mostrarà un menú de reproductor extern en iniciar la reproducció de vídeo.", - "EnableExternalVideoPlayers": "Reproductors de vídeo externs", - "EnableDecodingColorDepth10Vp9": "Activar la descodificació de maquinari de 10 bits per a VP9", - "EnableDecodingColorDepth10Hevc": "Activar la descodificació de maquinari de 10 bits per a HEVC", + "EnableExternalVideoPlayers": "Reproductors externs de vídeo", + "EnableDecodingColorDepth10Vp9": "Deshabilita la descodificació de maquinari de 10 bits per a VP9", + "EnableDecodingColorDepth10Hevc": "Habilita la descodificació de maquinari de 10 bits per a HEVC", "EnableBackdropsHelp": "Mostra imatges al fons d'algunes pàgines mentre es navega per la mediateca.", - "EnableAutoCast": "Establir com a per defecte", + "EnableAutoCast": "Estableix com a per defecte", "EditMetadata": "Edició de metadades", "EasyPasswordHelp": "El vostre codi Easy PIN s'utilitza per accedir fora de línia als clients compatibles i també es pot utilitzar per iniciar la sessió a la xarxa fàcilment.", "DrmChannelsNotImported": "Els canals amb DRM no s’importaran.", @@ -729,12 +729,12 @@ "DirectStreaming": "Transmissió directa", "DirectStreamHelp2": "La potència consumida per la transmissió directa normalment depèn del perfil d'àudio. Només el flux de vídeo no té pèrdues.", "DirectPlaying": "Reproducció directe", - "DetectingDevices": "Detectant dispositius", + "DetectingDevices": "S'està detectant dispositius", "Descending": "Descendent", "DeleteUserConfirmation": "N'esteu segur, que voleu eliminar aquest usuari?", - "DeleteDeviceConfirmation": "N'esteu segur, que voleu suprimir aquest dispositiu? Tornarà a aparèixer la pròxima vegada que un usuari iniciï la sessió amb ell.", + "DeleteDeviceConfirmation": "N'esteu segur, que voleu suprimir aquest dispositiu? Tornarà a aparèixer la pròxima vegada que un usuari iniciï la sessió amb aquest.", "Data": "Dades", - "ButtonUseQuickConnect": "Utilitzar Quick Connect", + "ButtonUseQuickConnect": "Fes servir la connexió ràpida", "ButtonActivate": "Activa", "Authorize": "Autoritza", "LabelServerName": "Nom del servidor", @@ -747,9 +747,9 @@ "DashboardServerName": "Servidor: {0}", "DashboardOperatingSystem": "Sistema Operatiu: {0}", "DashboardArchitecture": "Arquitectura: {0}", - "DailyAt": "Diariament a {0}", + "DailyAt": "Diàriament a {0}", "ClearQueue": "Esborra la cua", - "Bwdif": "Bob Weaver DeInterlacing Filter (BWDIF)", + "Bwdif": "Filtre de desentrellat de Bob Weaver", "ButtonPlayer": "Reproductor", "ButtonCast": "Transmet al dispositiu", "ApiKeysCaption": "Llista de les claus API activades actualment", @@ -763,11 +763,11 @@ "EnableDetailsBannerHelp": "Mostra una pancarta al cim de la pàgina de detalls de l'element.", "EnableDetailsBanner": "Pancarta de detalls", "EnableColorCodedBackgrounds": "Fons codificats per colors", - "EnableBlurHashHelp": "Les imatges que encara s'estan carregant es mostraran amb un marcador de posició únic.", - "EnableBlurHash": "Habilitar marcadors de posició borrosos per a imatges", - "DropShadow": "Projectar ombra", - "DisablePlugin": "Desactivar", - "EnablePlugin": "Activar", + "EnableBlurHashHelp": "Les imatges que encara s'estan carregant es mostraran amb un marcador únic de posició.", + "EnableBlurHash": "Habilita marcadors de posició borrosos per a imatges", + "DropShadow": "Projecta ombra", + "DisablePlugin": "Deshabilita", + "EnablePlugin": "Habilita", "DirectStreamHelp1": "El flux de vídeo és compatible amb el dispositiu, però té un format d'àudio incompatible (DTS, Dolby TrueHD, etc.) o un nombre de canals d'àudio. El flux de vídeo es tornarà a empaquetar sense pèrdues sobre la marxa abans d'enviar-lo al dispositiu. Només es transcodificarà el flux d'àudio.", "DirectPlayHelp": "El fitxer font és totalment compatible amb aquest client i la sessió rep el fitxer sense modificacions.", "DeleteDevicesConfirmation": "N'esteu segur, que voleu suprimir tots els dispositius? Totes les altres sessions es tancaran. Els dispositius reapareixeran la pròxima vegada que un usuari iniciï la sessió.", @@ -1631,16 +1631,16 @@ "LabelSyncPlaySettingsSyncCorrectionHelp": "Habilita la sincronització activa de la reproducció accelerant els continguts multimèdia o cercant la posició estimada. Desactiveu-ho en cas d'intermitències.", "ItemDetails": "Detalls d'element", "GoogleCastUnsupported": "Google Cast no suportat", - "EnableRewatchingNextUp": "Activar tornar a mirar a \"Següent\"", - "EnableRewatchingNextUpHelp": "Activar la mostra d'episodis ja vists a les seccions \"Següent\".", + "EnableRewatchingNextUp": "Habilita tornar a mirar", + "EnableRewatchingNextUpHelp": "Habilita la mostra d'episodis ja vists a les seccions \"Més\".", "Digital": "Digital", "CopyFailed": "No es pot copiar", - "Copy": "Copiar", + "Copy": "Copia", "Copied": "Copiat", "Conductor": "Conductor", "Casual": "Informal", "ButtonSpace": "Espai", - "ButtonExitApp": "Sortir de l'aplicació", + "ButtonExitApp": "Tanca l'aplicació", "ButtonClose": "Tanca", "ButtonBackspace": "Retrocés", "Arranger": "Arranjador", @@ -1783,7 +1783,7 @@ "LabelWebVersion": "Versió web", "ButtonEditUser": "Edita l'usuari", "ChannelResolutionSD": "SD", - "DeleteName": "Esborrar {0}", + "DeleteName": "Esborra {0}", "ChannelResolutionFullHD": "Full HD", "LabelBuildVersion": "Versió de compilació", "LabelUseReplayGainTagsHelp": "Escaneja els fitxers d'àudio per trobar etiquetes ReplayGain i fes-les servir en lloc de calcular el valor LUFS. (Utilitza menys potència. Invalidarà l'opció 'Escaneig LUFS')", @@ -1840,13 +1840,13 @@ "LabelExtractTrickplayDuringLibraryScan": "Extreu imatges de previsualització durant l'escaneig de la mediateca", "LabelExtractTrickplayDuringLibraryScanHelp": "Genera imatges de previsualització quan els vídeos són importats durant l'escaneig de la mediateca. D'altra banda, seran extrets durant la tasca programada d'imatges de previsualització. Si la generació està marcada com a sense bloqueig, això no afectarà el temps que triga a completar l'exploració de la mediateca.", "DeleteEntireSeries": "Elimina {0} episodis", - "DeleteSeries": "Esborrar Sèries", + "DeleteSeries": "Elimina la sèrie", "DeleteEpisode": "Elimina l'episodi", "PriorityIdle": "Parada", "LabelProcessPriority": "Prioritat de Processos", "LabelTrickplayThreadsHelp": "Nombre de fils a passar a l'argument de ffmpleg '-threads'.", "Lyric": "Lletra", - "EnableSmoothScroll": "Habilitar desplaçament suau", + "EnableSmoothScroll": "Habilita el desplaçament suau", "HeaderDeleteSeries": "Esborrar Sèries", "PlaybackError.MEDIA_DECODE_ERROR": "La reproducció ha fallat a causa d'un error en descodificar el contingut.", "AllowMjpegEncoding": "Permetre codificació en format MJPEG (utilitzat durant la generació de trickplay)", @@ -1860,18 +1860,18 @@ "ConfirmDeleteLyrics": "L'esborrat d'aquestes lletres, les suprimirà tant del sistema de fitxers com de la vostra mediateca. N'esteu segur, que desitgeu continuar?", "ErrorDeletingLyrics": "S'ha produït un error en suprimir les lletres del servidor. Si us plau, comproveu que Jellyfin tingui accés d'escriptura a la carpeta multimèdia i torneu-ho a provar.", "HeaderDeleteLyrics": "Esborrar Lletres", - "DeleteLyrics": "Esborrar lletres", + "DeleteLyrics": "Elimina les lletres", "HeaderNoLyrics": "No s'ha trobat cap lletra", "Lyrics": "Lletres", "ViewLyrics": "Veure lletres", "SavePassword": "Desa la contrasenya", - "EnableDts": "Habilitar DTS (DCA)", + "EnableDts": "Habilita DTS (DCA)", "PlaylistError.AddFailed": "S'ha produït un error en agregar a la llista de reproducció", "PlaylistError.CreateFailed": "S'ha produït un error en crear la llista de reproducció", "HeaderVideoAdvanced": "Vídeo Avançat", "Author": "Autor", "Colorist": "Colorista", - "CoverArtist": "Artista de portada", + "CoverArtist": "Artista de la portada", "Creator": "Creador", "Editor": "Editor", "EnableDtsHelp": "Habiliteu-lo només si el vostre dispositiu és compatible amb DTS o està connectat a un receptor d'àudio compatible, en cas contrari, pot provocar un error de reproducció.", @@ -1933,12 +1933,12 @@ "LabelCustomTagDelimiters": "Limitador d'etiquetes personalitzat", "Anime": "Anime", "DisableVbrAudioEncodingHelp": "Evita que el servidor codifiqui àudio en VBR per a aquest client.", - "EnableHi10p": "Activar perfil H.264 High 10", + "EnableHi10p": "Habilita el perfil H.264 High 10", "HeaderEditPlaylist": "Edita la llista de reproducció", "HeaderNewPlaylist": "Llista de reproducció nova", "AlwaysRemuxFlacAudioFilesHelp": "Si el vostre navegador rebutja reproduir certs arxius o calcula les marques de temps de manera imprecisa, activeu això com a solució alternativa.", "AlwaysRemuxMp3AudioFilesHelp": "Si el teu navegador calcula les marques de temps de certs arxius de manera imprecisa, activa això com a solució alternativa.", - "EnableHi10pHelp": "Activar per a evitar transcodificació de vídeos en H.264 10-bits. Desactivar-ho si la reproducció del vídeo mostra fotogrames buits.", + "EnableHi10pHelp": "Habilita per a evitar ls transcodificació de vídeos en H.264 10-bits. Deshabiliteu-ho si la reproducció del vídeo mostra fotogrames buits.", "DateModified": "Data de modificació", "HeaderAudioAdvanced": "Àudio avançat", "LabelAllowFmp4TranscodingContainer": "Permet el contenidor de transcodificació fMP4", @@ -2036,7 +2036,7 @@ "StorageType.NoRootDirectory": "Cap directori arrel", "BackupsPageLoadError": "No s'ha pogut carregar la pàgina de còpies de seguretat", "ButtonCreateBackup": "Crea una còpia de seguretat", - "Create": "Crear", + "Create": "Crea", "HeaderBackupsHelp": "Crea i restaura còpies del servidor, les quals poden incloure la base de dades, metadades, subtítols i imatges de previsualització.", "LabelBackupsUnavailable": "No hi ha còpies de seguretat disponibles", "LabelDatabase": "Base de dades", @@ -2056,6 +2056,6 @@ "ButtonLearnMore": "En voleu saber més?", "RepositoriesPageLoadError": "No s'han pogut carregar els repositoris", "TranscodingLoadError": "No s'han pogut carregar els paràmetres de transcodificació", - "ConfirmDeleteRepository": "Voleu esborrar el repositori?", + "ConfirmDeleteRepository": "Desitgeu eliminar el repositori?", "DeleteRepositoryConfirmation": "N'esteu segur, de voler esborrar aquest repositori?" } From a5b32697d7b55742f567f9a143bed2f79069dd31 Mon Sep 17 00:00:00 2001 From: nextlooper42 Date: Tue, 17 Jun 2025 04:58:47 -0400 Subject: [PATCH 482/645] Translated using Weblate (Slovak) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/ --- src/strings/sk.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/strings/sk.json b/src/strings/sk.json index fd01008e9..987e84575 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -1420,7 +1420,7 @@ "LabelTonemappingRange": "Rozsah mapovania tónov", "LabelTonemappingPeakHelp": "Prepísať vloženú hodnotu metadát pre vstupný signál touto špičkovou hodnotou. Predvolená hodnota je 100 (1000nit).", "LabelTonemappingPeak": "Vrchol mapovania tónov", - "LabelTonemappingParamHelp": "Pre ladenie algoritmu mapovania tónov. Odporúčané a predvolené hodnoty sú NaN. Všeobecne je pole ponechané prázdne.", + "LabelTonemappingParamHelp": "Pre ladenie algoritmu mapovania tónov. Všeobecne je pole ponechané prázdne.", "LabelTonemappingParam": "Parameter mapovania tónov", "LabelTonemappingDesatHelp": "Aplikovať desaturáciu pre svetlé miesta ktoré prekračujú úroveň jasu. Odporúčaná hodnota je 0 (zakázané).", "LabelTonemappingDesat": "Desaturácia pri mapovaní tónov", @@ -2055,5 +2055,10 @@ "StorageType.Ram": "RAM", "StorageType.Removable": "Odnímateľný", "StorageType.Unknown": "Neznáme", - "Success": "Úspech" + "Success": "Úspech", + "ButtonLearnMore": "Dozvedieť sa viac", + "DeleteRepositoryConfirmation": "Ste si istí, že chcete odstrániť tento repozitár?", + "ConfirmDeleteRepository": "Vymazať repozitár?", + "PluginsLoadError": "Pri načítavaní zásuvných modulov došlo k chybe.", + "RepositoriesPageLoadError": "Nepodarilo sa načítať repozitáre" } From a192cc0368c8704ee45de726bc10cf03b40b4815 Mon Sep 17 00:00:00 2001 From: nextlooper42 Date: Tue, 17 Jun 2025 05:00:42 -0400 Subject: [PATCH 483/645] Translated using Weblate (Slovak) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/ --- src/strings/sk.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/sk.json b/src/strings/sk.json index 987e84575..1655441c1 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -2060,5 +2060,6 @@ "DeleteRepositoryConfirmation": "Ste si istí, že chcete odstrániť tento repozitár?", "ConfirmDeleteRepository": "Vymazať repozitár?", "PluginsLoadError": "Pri načítavaní zásuvných modulov došlo k chybe.", - "RepositoriesPageLoadError": "Nepodarilo sa načítať repozitáre" + "RepositoriesPageLoadError": "Nepodarilo sa načítať repozitáre", + "TranscodingLoadError": "Nepodarilo sa načítať nastavenia prekódovania" } From ae7b1c6c3828827590a651294878f3e5e9f79759 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Tue, 17 Jun 2025 14:10:17 -0400 Subject: [PATCH 484/645] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index 02736434d..cb242f17d 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -223,7 +223,7 @@ "LabelBlastMessageIntervalHelp": "Determina a duração em segundos entre as mensagens de exploração enviadas pelo servidor.", "LabelBlockContentWithTags": "Bloquear itens com etiquetas", "LabelCachePath": "Localização da cache", - "LabelCachePathHelp": "Especifica uma localização personalizada para os ficheiros de cache do servidor, como imagens. Deixa em branco para usar a predefinição do servidor.", + "LabelCachePathHelp": "Especifica um local personalizado para os ficheiros de cache do servidor, como imagens. Deixa em branco para utilizar o local predefinido do servidor.", "LabelCancelled": "Cancelado", "LabelCollection": "Coleção", "LabelCommunityRating": "Classificação da comunidade", @@ -473,8 +473,8 @@ "OptionCustomUsers": "Personalizado", "OptionDaily": "Diariamente", "OptionDateAdded": "Data de adição", - "OptionDateAddedFileTime": "Usar a data de criação do ficheiro", - "OptionDateAddedImportTime": "Usar a data de importação para a biblioteca", + "OptionDateAddedFileTime": "Utilizar a data de criação do ficheiro", + "OptionDateAddedImportTime": "Utilizar a data de adição à biblioteca", "OptionDatePlayed": "Data de reprodução", "OptionDisableUser": "Desativar este utilizador", "OptionDisableUserHelp": "O servidor não permitirá nenhuma ligação feita por este utilizador. Ligações existentes serão abruptamente paradas.", @@ -1771,7 +1771,7 @@ "TonemappingModeHelp": "Seleciona o modo de mapeamento de tons. Se notares áreas muito claras ou estouradas, experimenta mudar para o modo RGB.", "MachineTranslated": "Traduzido Automaticamente", "ForeignPartsOnly": "Apenas partes forçadas/estrangeiras", - "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Os extras geralmente têm o mesmo nome incorporado do parente, marque isto para usar títulos incorporados de qualquer maneira.", + "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Os extras têm frequentemente o mesmo nome incorporado que o conteúdo principal; ativa esta opção para utilizar os títulos incorporados mesmo assim.", "SaveRecordingImagesHelp": "Guardar imagens do fornecedor de listas EPG juntamente com os ficheiros multimédia.", "MessageRepositoryInstallDisclaimer": "AVISO: A instalação de uma extensão de terceiros acarreta riscos. Ela pode conter código instável ou malicioso e pode ser alterado a qualquer momento. Instala apenas extensões de autores em quem confias.", "SaveRecordingNFO": "Guardar metadados EPG da gravação no NFO", @@ -1811,7 +1811,7 @@ "LabelQscale": "Fator de qualidade (Qscale)", "LabelJpegQualityHelp": "A qualidade de compressão JPEG para imagens trickplay.", "LabelJpegQuality": "Qualidade JPEG", - "EncodingFormatHelp": "Seleciona a codificação de vídeo para a qual o Jellyfin deve transcodificar. O Jellyfin usará a codificação de software quando a aceleração de hardware para o formato selecionado não estiver disponível. A codificação H264 será sempre ativada.", + "EncodingFormatHelp": "Seleciona a codificação de vídeo para a qual o Jellyfin deve transcodificar. O Jellyfin utilizará codificação por software quando não estiver disponível aceleração por hardware para o formato selecionado. A codificação H264 estará sempre ativada.", "LabelEncodingFormatOptions": "Opções de formato de codificação", "AirPlay": "AirPlay", "BlockContentWithTagsHelp": "Ocultar os conteúdos multimédia com pelo menos uma das etiquetas especificadas.", From 31d0a2381c7aa2cfdfea06f8ec1349b3c322a41b Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Tue, 17 Jun 2025 14:59:11 -0400 Subject: [PATCH 485/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 485c1b2e4..3950012d6 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -678,7 +678,7 @@ "HeaderAdmin": "Administració", "HeaderAccessScheduleHelp": "Creeu un horari d'accés per limitar l'accés a determinades hores.", "HardwareAccelerationWarning": "Habilitar l'acceleració del maquinari pot causar inestabilitat en alguns entorns. Assegureu-vos que el sistema operatiu i els controladors de vídeo estiguin totalment actualitzats. Si teniu dificultats per reproduir el vídeo després d’activar-lo, haureu de tornar a canviar la configuració a Cap.", - "EncoderPresetHelp": "Triar un valor més ràpid per millorar el rendiment o un valor més lent per millorar la qualitat.", + "EncoderPresetHelp": "Tria un valor més ràpid per millorar el rendiment o un valor més lent per millorar la qualitat.", "GuideProviderLogin": "Iniciar sessió", "Guide": "Guia", "GroupBySeries": "Agrupar per sèries", @@ -807,7 +807,7 @@ "EveryXMinutes": "Cada {0} minuts", "EveryXHours": "Cada {0} hores", "EveryHour": "Cada hora", - "EnableTonemapping": "Activa l'assignació de tons", + "EnableTonemapping": "Habilita l'assignació de tons", "DisableCustomCss": "Desactiveu el CSS personalitzat proporcionat pel servidor", "Depressed": "Deprimit", "AudioBitDepthNotSupported": "La profunditat de bits d'àudio no és compatible", @@ -1875,8 +1875,8 @@ "Creator": "Creador", "Editor": "Editor", "EnableDtsHelp": "Habiliteu-lo només si el vostre dispositiu és compatible amb DTS o està connectat a un receptor d'àudio compatible, en cas contrari, pot provocar un error de reproducció.", - "EnableTrueHd": "Habilitar TrueHD", - "EnableTrueHdHelp": "Habiliteu-lo només si el vostre dispositiu és compatible amb TrueHD o està connectat a un receptor d'àudio compatible, en cas contrari, pot provocar un error de reproducció.", + "EnableTrueHd": "Habilita TrueHD", + "EnableTrueHdHelp": "Habiliteu-ho només si el vostre dispositiu és compatible amb TrueHD o està connectat a un receptor d'àudio compatible, en cas contrari, pot provocar un error de reproducció.", "Illustrator": "Il·lustrador", "Translator": "Traductor", "PlaylistPublic": "Permetre accés públic", From 4cccdd3e8242e97de03270cfd2274477f12ea338 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Tue, 17 Jun 2025 14:48:27 -0400 Subject: [PATCH 486/645] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 48 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index cb242f17d..a54a49532 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -235,7 +235,7 @@ "LabelCustomCertificatePathHelp": "Localização do ficheiro PKCS #12 que contém um certificado e uma chave privada para ativar o suporte TLS num domínio personalizado.", "LabelCustomCss": "Código CSS personalizado", "LabelCustomCssHelp": "Aplica o teu código CSS personalizado à interface web.", - "LabelCustomDeviceDisplayNameHelp": "Forneça um nome a ser mostrado, ou deixe em branco para utilizar o nome reportado pelo dispositivo.", + "LabelCustomDeviceDisplayNameHelp": "Fornece um nome de exibição personalizado ou deixa em branco para usar o nome fornecido pelo dispositivo.", "LabelCustomRating": "Classificação personalizada", "LabelDateAdded": "Adicionado em", "LabelDateAddedBehavior": "Comportamento da data de adição para conteúdo novo", @@ -300,8 +300,8 @@ "LabelKodiMetadataDateFormatHelp": "Todas as datas presentes em ficheiros NFO serão analisadas utilizando este formato.", "LabelKodiMetadataEnableExtraThumbs": "Copiar o parâmetro 'extrafanart'para 'extrathumbs'", "LabelKodiMetadataEnableExtraThumbsHelp": "Ao transferir imagens, estas podem ser guardadas como extrafanart e extrathumbs para uma maior compatibilidade com os temas Kodi.", - "LabelKodiMetadataEnablePathSubstitution": "Ativar substituição de localização", - "LabelKodiMetadataEnablePathSubstitutionHelp": "Ativar a substituição da localização das imagens utilizando as opções de substituição da localização do servidor.", + "LabelKodiMetadataEnablePathSubstitution": "Ativar a substituição de caminhos", + "LabelKodiMetadataEnablePathSubstitutionHelp": "Ativa a substituição de caminhos de imagens usando as definições de substituição de caminhos do servidor.", "LabelKodiMetadataSaveImagePaths": "Guardar a localização de imagens em ficheiros NFO", "LabelKodiMetadataSaveImagePathsHelp": "Esta opção é recomendada se existirem nomes de imagens que não estejam de acordo com as recomendações do Kodi.", "LabelLanguage": "Idioma", @@ -783,7 +783,7 @@ "LabelBurnSubtitles": "Integrar legendas", "LabelBirthYear": "Ano de nascimento", "LabelBirthDate": "Data de nascimento", - "LabelBindToLocalNetworkAddressHelp": "Substituir o endereço IP local do servidor HTTP. Se deixado em branco, o servidor irá vincular-se a todos os endereços disponíveis. A alteração deste valor requer uma reinicialização.", + "LabelBindToLocalNetworkAddressHelp": "Substitui o endereço IP local do servidor HTTP. Se for deixado em branco, o servidor será associado a todos os endereços disponíveis. Alterar este valor requer o reinício do servidor.", "LabelBindToLocalNetworkAddress": "Vincular ao endereço de rede local", "LabelAutomaticallyRefreshInternetMetadataEvery": "Atualizar metadados automaticamente a partir da Internet", "LabelAuthProvider": "Fornecedor de autenticação", @@ -926,7 +926,7 @@ "LabelBaseUrlHelp": "Acrescenta um sub-diretório personalizado ao URL do servidor. Por exemplo: http://exemplo.com/<baseurl>", "LabelMoviePrefixHelp": "Se aplicares um prefixo aos títulos dos filmes, introduz aqui para que o servidor o possa tratar corretamente.", "LabelPleaseRestart": "As alterações produzirão efeito depois de recarregar a página.", - "LabelRecordingPathHelp": "Especifica a localização predefinida para guardar as gravações. Se for deixada em branco, será utilizada a pasta de dados do programa do servidor.", + "LabelRecordingPathHelp": "Especifica o caminho predefinido para guardar gravações. Se for deixado em branco, será utilizada a pasta de dados do programa do servidor.", "ColorTransfer": "Transferência de cores", "ExtractChapterImagesHelp": "Extrair imagens dos capítulos permite aos clientes apresentar menus de seleção de cenas com gráficos. O processo poderá ser lento e exigente em recursos, bem como ocupar múltiplos gigabytes em disco. Este processo é executado quando novos vídeos são encontrados e também através de uma tarefa agendada noturna. É possível configurar a hora de execução para que, idealmente, não coincida com horas de maior utilização.", "Features": "Funcionalidades", @@ -1402,7 +1402,7 @@ "LabelCurrentStatus": "Estado atual", "KnownProxiesHelp": "Lista separada por virgulas de endereços IP, ou nomes de anfitrião, de proxies usados para ligar ao seu servidor Jellyfin. Sem esta informação os cabeçalhos \"X-Forwarded-For\" não funcionarão correctamente. É necessário reiniciar o servidor para que as alterações façam efeito.", "Image": "Imagem", - "LabelTonemappingParamHelp": "Afina o algoritmo de mapeamento de tons. Os valores recomendados e predefinidos são NaN. Exceto em casos específicos, é recomendado deixar este campo em branco.", + "LabelTonemappingParamHelp": "Ajusta o algoritmo de mapeamento de tons. Exceto em casos específicos, é recomendado deixar este campo em branco.", "LabelTonemappingParam": "Parâmetros do mapeamento de tons", "LabelTonemappingPeakHelp": "Substitui o valor de metadados incorporado para o sinal de entrada por este valor de pico. O valor predefinido é 100 (1000nit).", "LabelTonemappingPeak": "Pico do mapeamento de tons", @@ -1702,7 +1702,7 @@ "LabelChapterImageResolution": "Resolução", "LabelChapterImageResolutionHelp": "A resolução das imagens dos capítulos extraídas. A alteração desta resolução não terá qualquer efeito nos capítulos fictícios existentes.", "LabelParallelImageEncodingLimit": "Limite de codificação paralela de imagens", - "LabelParallelImageEncodingLimitHelp": "Número máximo de codificações de imagem permitidas para execução em paralelo. Se deixares este campo vazio, será escolhido um limite baseado na contagem de núcleos do teu sistema.", + "LabelParallelImageEncodingLimitHelp": "Número máximo de codificações de imagem que podem ser executadas em paralelo. Deixar este campo em branco fará com que o limite seja definido automaticamente com base no número de núcleos do sistema.", "GetThePlugin": "Obter Plugin", "Notifications": "Notificações", "NotificationsMovedMessage": "A funcionalidade de notificações foi movida para o plugin Webhook.", @@ -1879,7 +1879,7 @@ "HeaderVideoAdvanced": "Definições avançadas de vídeo", "LabelSelectPreferredTranscodeVideoAudioCodec": "Codec de áudio de transcodificação preferido na reprodução de vídeo", "SelectPreferredTranscodeVideoAudioCodecHelp": "Seleciona o codec de áudio preferido para transcodificar o conteúdo de vídeo. Se o codec preferido não for suportado, o servidor utilizará o próximo melhor codec disponível.", - "LibraryScanFanoutConcurrencyHelp": "Número máximo de tarefas paralelas durante as verificações da biblioteca. Se deixar este campo vazio, escolherá um limite baseado na contagem de núcleos do teu sistema. AVISO: Definir este número demasiado alto pode causar problemas com os sistemas de ficheiros de rede; se tiveres problemas, reduz este número.", + "LibraryScanFanoutConcurrencyHelp": "Número máximo de tarefas paralelas durante a análise da biblioteca. Deixar este campo em branco fará com que o limite seja definido automaticamente com base no número de núcleos do sistema. AVISO: Definir este número demasiado alto pode causar problemas em sistemas de ficheiros de rede; se encontrares dificuldades, reduz este valor.", "LibraryScanFanoutConcurrency": "Limite das tarefas de análise da biblioteca paralela", "PlaylistError.AddFailed": "Erro ao adicionar à lista de reprodução", "PlaylistError.CreateFailed": "Erro ao criar a lista de reprodução", @@ -2026,5 +2026,35 @@ "HeaderUpdateRequired": "Atualização necessária", "ViewSettings": "Ver definições", "MessageForgotPasswordPinReset": "Introduz o PIN para concluir a redefinição da palavra-passe", - "DownloadManager": "Transferências" + "DownloadManager": "Transferências", + "ConfirmDeleteRepository": "Eliminar repositório?", + "DeleteRepositoryConfirmation": "Tens a certeza que queres eliminar este repositório?", + "PluginsLoadError": "Ocorreu um erro ao carregar os plugins.", + "StorageType.CDRom": "CD-ROM", + "StorageType.Fixed": "Fixo", + "StorageType.Unknown": "Desconhecido", + "HeaderBackups": "Cópias de segurança", + "ButtonLearnMore": "Saber mais", + "Create": "Criar", + "MessageBackupDisclaimer": "Dependendo do tamanho da tua biblioteca, o processo de cópia de segurança pode demorar algum tempo.", + "Success": "Sucesso", + "TranscodingLoadError": "Falha ao carregar as definições de transcodificação", + "HeaderBackupsHelp": "Cria e restaura snapshots do teu servidor, que podem incluir a base de dados, metadados, legendas e trickplay.", + "LabelBackupsUnavailable": "Nenhuma cópia de segurança disponível", + "LabelDatabase": "Base de dados", + "LabelProgramData": "Dados do programa", + "LabelRestore": "Restaurar", + "MessageBackupInProgress": "Cópia de segurança em curso", + "BackupsPageLoadError": "Falha ao carregar a página de cópias de segurança", + "ButtonCreateBackup": "Criar cópia de segurança", + "MessageRestoreInProgress": "Restauração em curso", + "MessageRestoreSuccess": "Restauração concluída com sucesso", + "MessageRestoreDisclaimer": "AVISO: Estás prestes a restaurar a partir de uma cópia de segurança anterior. O teu servidor ficará inutilizável durante o processo e quaisquer dados novos criados desde essa cópia serão perdidos.", + "MessageWaitingForServer": "À espera do servidor...", + "RepositoriesPageLoadError": "Falha ao carregar os repositórios", + "StorageType.Network": "Rede", + "StorageType.NoRootDirectory": "Sem pasta raiz", + "StorageType.Ram": "RAM", + "StorageType.Removable": "Removível", + "LabelImageCache": "Cache de imagens" } From ed3c072e0dc8f0bb63d6d58178421399778a5581 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Tue, 17 Jun 2025 14:35:01 -0400 Subject: [PATCH 487/645] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 4cfe9e38d..b1162e545 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -265,8 +265,8 @@ "LabelLanNetworks": "Redes locais (LAN)", "LabelKodiMetadataSaveImagePathsHelp": "Esta opção é recomendada se existirem nomes de imagens que não estejam de acordo com as recomendações do Kodi.", "LabelKodiMetadataSaveImagePaths": "Guardar a localização de imagens em ficheiros nfo", - "LabelKodiMetadataEnablePathSubstitutionHelp": "Ativar a substituição da localização das imagens utilizando as opções de substituição da localização do servidor.", - "LabelKodiMetadataEnablePathSubstitution": "Ativar substituição de localização", + "LabelKodiMetadataEnablePathSubstitutionHelp": "Ativa a substituição de caminhos de imagens usando as definições de substituição de caminhos do servidor.", + "LabelKodiMetadataEnablePathSubstitution": "Ativar a substituição de caminhos", "LabelKodiMetadataEnableExtraThumbsHelp": "Ao transferir imagens, estas podem ser guardadas como extrafanart e extrathumbs para uma maior compatibilidade com os temas Kodi.", "LabelKodiMetadataEnableExtraThumbs": "Copiar o parâmetro extrafanart para extrathumbs", "LabelKodiMetadataDateFormatHelp": "Todas as datas presentes em ficheiros NFO serão analisadas utilizando este formato.", From fbb49f2b29224944d5f2744467f232994a9f049e Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Tue, 17 Jun 2025 15:47:55 -0400 Subject: [PATCH 488/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 3950012d6..37ca2e0d4 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -56,7 +56,7 @@ "ConfirmDeletion": "Confirma supressió", "Connect": "Connecta", "Continuing": "En curs", - "ErrorDefault": "Hi ha hagut un error processant la petició. Intenteu-ho més tard.", + "ErrorDefault": "S'ha produït un error en processar la petició. Intenteu-ho més tard.", "Delete": "Elimina", "DeleteImage": "Elimina la imatge", "DeleteImageConfirmation": "N'esteu segur, que voleu suprimir aquesta imatge?", @@ -78,7 +78,7 @@ "Ended": "Acabades", "EndsAtValue": "Acabaria a les {0}", "Episodes": "Episodis", - "ExitFullscreen": "Surt de pantalla completa", + "ExitFullscreen": "Surt de la pantalla completa", "Favorite": "Favorit", "File": "Fitxer", "FileNotFound": "Arxiu no trobat.", @@ -631,7 +631,7 @@ "AllLanguages": "Tots els idiomes", "AllComplexFormats": "Tots els formats complexos (ASS, SSA, VobSub, PGS, SUB / IDX, etc.)", "Alerts": "Alertes", - "Aired": "Emès", + "Aired": "Emissió", "AirDate": "Data d'emissió", "AdditionalNotificationServices": "Examineu el catàleg de complements per instal·lar serveis de notificació addicionals.", "AddedOnValue": "Afegit {0}", @@ -695,8 +695,8 @@ "EveryNDays": "Cada {0} dies", "ErrorSavingTvProvider": "S'ha produït un error en desar el proveïdor de televisió. Assegureu-vos que sigui accessible i torneu-ho a provar.", "ErrorStartHourGreaterThanEnd": "L'hora de finalització ha de ser superior a l'hora d'inici.", - "ErrorGettingTvLineups": "S'ha produït un error al baixar les programacions de TV. Comproveu que la vostra informació sigui correcta i torneu-ho a provar.", - "ErrorDeletingItem": "S'ha produït un error al suprimir l'element del servidor. Comproveu que Jellyfin tingui accés d’escriptura a la carpeta multimèdia i torneu-ho a provar.", + "ErrorGettingTvLineups": "S'ha produït un error en descarregar les programacions de TV. Comproveu que la vostra informació sigui correcta i torneu-ho a provar.", + "ErrorDeletingItem": "S'ha produït un error en suprimir l'element del servidor. Comproveu que Jellyfin tingui accés d’escriptura a la carpeta multimèdia i torneu-ho a provar.", "ErrorAddingXmlTvFile": "S'ha produït un error en accedir al fitxer XMLTV. Assegureu-vos que el fitxer existeix i torneu-ho a provar.", "ErrorAddingTunerDevice": "S'ha produït un error en afegir el dispositiu sintonitzador. Assegureu-vos que sigui accessible i torneu-ho a provar.", "ErrorAddingMediaPathToVirtualFolder": "S'ha produït un error en afegir la ruta multimèdia. Assegureu-vos que la ruta sigui vàlida i que Jellyfin tingui accés a aquesta ubicació.", From 3715ff425a23b14d85c955194f31f89890d8c5da Mon Sep 17 00:00:00 2001 From: Roi Gabay Date: Tue, 17 Jun 2025 17:40:39 -0400 Subject: [PATCH 489/645] Translated using Weblate (Hebrew) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/ --- src/strings/he.json | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/strings/he.json b/src/strings/he.json index 3afe3a596..9503ace80 100644 --- a/src/strings/he.json +++ b/src/strings/he.json @@ -1963,5 +1963,16 @@ "HeaderServerUnavailable": "שרת לא זמין", "DownloadManager": "הורדות", "HeaderUpdateRequired": "נדרש עדכון", - "MessageForgotPasswordPinReset": "הכנס את קוד ה-PIN כאן כדי לסיים את איפוס הסיסמה" + "MessageForgotPasswordPinReset": "הכנס את קוד ה-PIN כאן כדי לסיים את איפוס הסיסמה", + "ConfirmDeleteRepository": "למחוק את המאגר?", + "DeleteRepositoryConfirmation": "בטוח שבכוונתך למחוק את המאגר?", + "ButtonLearnMore": "קרא עוד", + "Create": "יצירה", + "LabelBackupsUnavailable": "אין גיבויים זמינים", + "LabelProgramData": "תוכנייה", + "LabelRestore": "שחזור", + "BackupsPageLoadError": "טעינת עמוד הגיבויים נכשלה", + "ButtonCreateBackup": "יצירת גיבוי", + "LabelDatabase": "בסיס נתונים", + "LabelImageCache": "מטמון תמונות" } From fcaf870bd83336579f4788b2ab88adc088f9bcdc Mon Sep 17 00:00:00 2001 From: Roi Gabay Date: Tue, 17 Jun 2025 18:00:57 -0400 Subject: [PATCH 490/645] Translated using Weblate (Hebrew) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/ --- src/strings/he.json | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/strings/he.json b/src/strings/he.json index 9503ace80..96b3303a6 100644 --- a/src/strings/he.json +++ b/src/strings/he.json @@ -1433,7 +1433,7 @@ "LabelTranscodingFramerate": "קצב הפריימים של המרת קידוד", "TypeOptionPluralBoxSet": "מארזי מדיה", "LabelTonemappingParam": "פרמטר מיפוי גוונים", - "LabelTonemappingParamHelp": "נא לכוון אצ מיפוי הגוונים. הערכים המומלצים והדיפולטיים הם NaN. בכללי מומלץ להשאיר אותם ריקים.", + "LabelTonemappingParamHelp": "כיוונון מיפוי הגוונים. בכללי כדאי להשאיר ריק.", "LabelVaapiDeviceHelp": "זה רכיב הרינדור שמשמש להאצת חומרה.", "LabelUserLoginAttemptsBeforeLockout": "ניסיונות התחברות כושלים לפני שהמשתמש ננעל", "LabelUserMaxActiveSessions": "מספר מירבי של משתמשים מחוברים במקביל", @@ -1974,5 +1974,24 @@ "BackupsPageLoadError": "טעינת עמוד הגיבויים נכשלה", "ButtonCreateBackup": "יצירת גיבוי", "LabelDatabase": "בסיס נתונים", - "LabelImageCache": "מטמון תמונות" + "LabelImageCache": "מטמון תמונות", + "RepositoriesPageLoadError": "טעינת המאגרים נכשלה", + "PluginsLoadError": "אירעה שגיאה בזמן טעינת התוספים.", + "StorageType.Unknown": "לא ידוע", + "HeaderBackupsHelp": "יצירה ושחזור תמונות מצב של השרת שלך כוללת בסיס נתונים, מטא-דאטה, כתוביות ו-Trickplay.", + "MessageBackupDisclaimer": "תהליך הגיבוי ייקח זמן מה, כתלות בגודל הספרייה שלך.", + "MessageBackupInProgress": "מתבצע גיבוי", + "MessageWaitingForServer": "ממתין לשרת...", + "StorageType.CDRom": "CD-ROM", + "StorageType.Network": "רשת", + "StorageType.Fixed": "תוקן", + "StorageType.NoRootDirectory": "אין תיקיית שורש", + "StorageType.Ram": "RAM", + "StorageType.Removable": "נשלף", + "HeaderBackups": "גיבויים", + "TranscodingLoadError": "טעינת הגדרות השעתוק נכשלה", + "MessageRestoreDisclaimer": "אזהרה: שחזור מגיבוי קודם. השרת לא יהיה פעיל בזמן השחזור וכל מידע חדש שנוצר מאז הגיבוי יאבד.", + "Success": "הצלחה", + "MessageRestoreInProgress": "מתבצע שחזור", + "MessageRestoreSuccess": "השחזור הושלם בהצלחה" } From 61796dc7ed9c1deedd929a867462784f4b4c6ca4 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Wed, 18 Jun 2025 01:25:29 -0400 Subject: [PATCH 491/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 120 ++++++++++++++++++++++---------------------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 37ca2e0d4..024eba0d5 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -79,10 +79,10 @@ "EndsAtValue": "Acabaria a les {0}", "Episodes": "Episodis", "ExitFullscreen": "Surt de la pantalla completa", - "Favorite": "Favorit", + "Favorite": "Preferit", "File": "Fitxer", - "FileNotFound": "Arxiu no trobat.", - "FileReadCancelled": "La lectura de l'arxiu ha estat cancel·lada.", + "FileNotFound": "No s'ha trobat el fitxer.", + "FileReadCancelled": "La lectura del fitxer ha estat cancel·lada.", "FileReadError": "S'ha produït un error en llegir el fitxer.", "Friday": "Divendres", "Fullscreen": "Pantalla completa", @@ -107,7 +107,7 @@ "HeaderCastAndCrew": "Repartiment i equip", "HeaderCodecProfile": "Perfil del còdec", "HeaderConfirmProfileDeletion": "Confirmar l'esborrament del perfil", - "HeaderConnectToServer": "Connectar al servidor", + "HeaderConnectToServer": "Connecta al servidor", "HeaderContainerProfile": "Perfil del contenidor", "HeaderContainerProfileHelp": "Els perfils del contenidor indiquen limitacions d'un dispositiu en reproduir formats específics. Si la limitació és aplicable, llavors els mitjans es transcodificaran fins i tot si el format ha estat configurat per a reproducció directa.", "HeaderContinueListening": "Continueu escoltant", @@ -116,7 +116,7 @@ "HeaderDateIssued": "Data d'emissió", "HeaderDefaultRecordingSettings": "Preferències d'enregistrament per defecte", "HeaderDeleteDevice": "Elimina el dispositiu", - "HeaderDeleteItem": "Esborrar l'ítem", + "HeaderDeleteItem": "Elimina l'element", "HeaderDeveloperInfo": "Informació del desenvolupador", "HeaderDeviceAccess": "Accés al dispositiu", "HeaderDevices": "Dispositius", @@ -126,17 +126,17 @@ "HeaderEnabledFields": "Camps habilitats", "HeaderExternalIds": "IDs externs", "HeaderFeatureAccess": "Accés a funcions", - "HeaderFetchImages": "Obtenir imatges", + "HeaderFetchImages": "Explora imatges", "HeaderFrequentlyPlayed": "Reproduït freqüentment", "HeaderHttpHeaders": "Capçaleres HTTP", "HeaderIdentification": "Identificació", "HeaderIdentificationCriteriaHelp": "Insereix al menys un criteri d'identificació.", "HeaderIdentificationHeader": "Capçalera d'identificació", "HeaderImageSettings": "Preferències de la imatge", - "HeaderInstall": "Instal·lar", + "HeaderInstall": "Instal·la", "HeaderInstantMix": "Mescla instantània", "HeaderKeepRecording": "Continueu enregistrant", - "HeaderKeepSeries": "Mantenir la sèrie", + "HeaderKeepSeries": "Mantén la sèrie", "HeaderLatestEpisodes": "Episodis afegits darrerament", "HeaderLatestMedia": "Contingut multimèdia afegit darrerament", "HeaderLatestMovies": "Pel·lícules afegides darrerament", @@ -147,7 +147,7 @@ "HeaderLibraryFolders": "Directoris de la mediateca", "HeaderLibraryOrder": "Ordre de la mediateca", "HeaderLibrarySettings": "Configuració de la mediateca", - "HeaderMediaFolders": "Carpetes multimèdia", + "HeaderMediaFolders": "Directoris multimèdia", "HeaderMetadataSettings": "Preferències de les metadades", "HeaderMyDevice": "El meu dispositiu", "HeaderMyMedia": "Els meus continguts multimèdia", @@ -155,7 +155,7 @@ "HeaderNewApiKey": "Nova clau API", "HeaderNextEpisodePlayingInValue": "L'episodi següent es reproduirà en {0}", "HeaderNextVideoPlayingInValue": "El vídeo següent es reproduirà en {0}", - "HeaderOnNow": "Transmetent ara", + "HeaderOnNow": "En curs", "HeaderParentalRatings": "Classificacions parentals", "HeaderPassword": "Contrasenya", "HeaderPasswordReset": "Restableix la contrasenya", @@ -163,7 +163,7 @@ "HeaderPlayAll": "Reprodueix-los tots", "HeaderPlaybackError": "Error de reproducció", "HeaderPleaseSignIn": "Inicieu sessió", - "HeaderPreferredMetadataLanguage": "Idioma de les metadades preferit", + "HeaderPreferredMetadataLanguage": "Idioma preferit de les metadades", "HeaderProfileInformation": "Informació del perfil", "HeaderProfileServerSettingsHelp": "Aquests valors controlen com el servidor es presentarà als clients.", "HeaderRecentlyPlayed": "Reproduït recentment", @@ -173,13 +173,13 @@ "HeaderScenes": "Escenes", "HeaderSeasons": "Temporades", "HeaderSecondsValue": "{0} segons", - "HeaderSendMessage": "Enviar missatge", + "HeaderSendMessage": "Envia missatge", "HeaderSeriesOptions": "Opcions de la sèrie", "HeaderServerSettings": "Preferències del servidor", "HeaderSetupLibrary": "Configureu les vostres mediateques", - "HeaderSortBy": "Ordenar per", + "HeaderSortBy": "Ordena per", "HeaderSortOrder": "Ordre", - "HeaderStartNow": "Començar ara", + "HeaderStartNow": "Comença ara", "HeaderStatus": "Estat", "HeaderSubtitleAppearance": "Aparença dels subtítols", "HeaderSystemDlnaProfiles": "Perfils del sistema", @@ -187,7 +187,7 @@ "HeaderTranscodingProfile": "Perfil de transcodificació", "HeaderTypeText": "Introduïu text", "HeaderUpcomingOnTV": "Properes emissions", - "HeaderUploadImage": "Pujar imatge", + "HeaderUploadImage": "Pujada d'imatges", "HeaderUser": "Usuari", "HeaderUsers": "Usuaris", "HeaderVideoTypes": "Tipus de vídeo", @@ -199,9 +199,9 @@ "Hide": "Amaga", "Identify": "Identifica", "Images": "Imatges", - "InstallingPackage": "Instal·lant {0} (versió {1})", + "InstallingPackage": "S'està instal·lant {0} (versió {1})", "InstantMix": "Mescla instantània", - "ItemCount": "{0} ítems", + "ItemCount": "{0} elements", "LabelAccessDay": "Dia de la setmana", "LabelAccessEnd": "Hora de fi", "LabelAccessStart": "Hora d'inici", @@ -562,7 +562,7 @@ "TrackCount": "{0} pistes", "Tuesday": "Dimarts", "UninstallPluginConfirmation": "N'esteu segur, que voleu desinstal·lar {0}?", - "HeaderUninstallPlugin": "Desinstal·lar complement", + "HeaderUninstallPlugin": "Desinstal·la complement", "Unmute": "De-silencia", "Unrated": "Sense valorar", "Up": "Amunt", @@ -679,15 +679,15 @@ "HeaderAccessScheduleHelp": "Creeu un horari d'accés per limitar l'accés a determinades hores.", "HardwareAccelerationWarning": "Habilitar l'acceleració del maquinari pot causar inestabilitat en alguns entorns. Assegureu-vos que el sistema operatiu i els controladors de vídeo estiguin totalment actualitzats. Si teniu dificultats per reproduir el vídeo després d’activar-lo, haureu de tornar a canviar la configuració a Cap.", "EncoderPresetHelp": "Tria un valor més ràpid per millorar el rendiment o un valor més lent per millorar la qualitat.", - "GuideProviderLogin": "Iniciar sessió", + "GuideProviderLogin": "Inicieu la sessió", "Guide": "Guia", - "GroupBySeries": "Agrupar per sèries", + "GroupBySeries": "Agrupa per sèries", "Other": "Altres", "Genre": "Gènere", "General": "General", "FormatValue": "Format: {0}", "Filters": "Filtres", - "FetchingData": "Obtenint dades addicionals", + "FetchingData": "S'estan obtenint dades addicionals", "Features": "Característiques", "FastForward": "Avanç ràpid", "Extras": "Extres", @@ -774,17 +774,17 @@ "DeleteAll": "Elimina-ho tot", "DeinterlaceMethodHelp": "Seleccioneu el mètode de desentrellaçat que voleu utilitzar quan transcodifiqueu el programari de contingut entrellaçat. Quan està activada l'acceleració de maquinari que admet el desentrellaçat de maquinari, s'utilitzarà el desentrellaçador de maquinari en lloc d'aquesta configuració.", "HeaderDirectPlayProfileHelp": "Afegiu perfils de reproducció directa per indicar quins formats pot gestionar el dispositiu de forma nativa.", - "HeaderDetectMyDevices": "Detectar els meus dispositius", - "HeaderDeleteTaskTrigger": "Esborrar el disparador de tasques", - "HeaderDeleteProvider": "Esborrar el proveïdor", - "HeaderDeleteItems": "Esborrar els ítems", + "HeaderDetectMyDevices": "Elimina els meus dispositius", + "HeaderDeleteTaskTrigger": "S'està eliminant el disparador de tasques", + "HeaderDeleteProvider": "Elimina el proveïdor", + "HeaderDeleteItems": "Elimina els elements", "HeaderDeleteDevices": "Elimina tots els dispositius", "HeaderDebugging": "Depuració i traceig", "HeaderContinueReading": "Continueu llegint", "HeaderConnectionFailure": "Error de connexió", "HeaderConfirmRevokeApiKey": "Revoca la clau API", "HeaderConfirmPluginInstallation": "Confirmeu la instal·lació del complement", - "HeaderConfigureRemoteAccess": "Configurar l'accés remot", + "HeaderConfigureRemoteAccess": "Configura l'accés remot", "HeaderCodecProfileHelp": "Els perfils dels còdecs indiquen les limitacions d’un dispositiu quan es reprodueixen codecs específics. Si s'aplica una limitació, els mitjans es transcodificaran fins i tot si el còdec està configurat per a la reproducció directa.", "HeaderChapterImages": "Imatges dels capítols", "HeaderChannelAccess": "Accés al canal", @@ -798,12 +798,12 @@ "HeaderAddUser": "Afegeix un usuari", "HeaderAddUpdateSubtitle": "Afegeix o actualitza els subtítols", "H264CrfHelp": "El factor de velocitat constant (CRF) és el valor de qualitat predeterminat per als codificadors de programari x264 i x265. Podeu definir els valors entre 0 i 51, on els valors més baixos donarien com a resultat una millor qualitat (a costa de mides de fitxer més altes). Els valors correctes oscil·len entre 18 i 28. El valor predeterminat per a x264 és 23 i per a x265 és 28, de manera que podeu utilitzar-lo com a punt de partida. Els codificadors per maquinari no utilitzen aquesta configuració.", - "GuideProviderSelectListings": "Seleccionar Llistats", + "GuideProviderSelectListings": "Seleccioneu llistats", "GroupVersions": "Agrupa versions", "Framerate": "Velocitat de fotogrames", "Filter": "Filtre", - "FFmpegSavePathNotFound": "No podem localitzar FFmpeg mitjançant el directori que heu introduït. FFprobe també és obligatori i ha d’existir a la mateixa carpeta. Aquests components normalment s’agrupen en la mateixa descàrrega. Comproveu el directori i torneu-ho a provar.", - "ExtractChapterImagesHelp": "L'extracció d'imatges de capítols permetrà als clients mostrar menús gràfics de selecció d'escena. El procés pot ser lent, intensiu en recursos i pot requerir diversos gigabytes d’espai. S’executa quan es descobreixen els vídeos i també com una tasca programada cada nit. La programació es pot configurar a l'àrea de tasques programades. No es recomana executar aquesta tasca durant les hores màximes d'ús.", + "FFmpegSavePathNotFound": "No podem localitzar FFmpeg mitjançant la ruta que heu introduït. FFprobe també és obligatori i ha d’existir a la mateixa carpeta. Aquests components normalment s’agrupen en la mateixa descàrrega. Comproveu la ruta i torneu-ho a provar.", + "ExtractChapterImagesHelp": "L'extracció d'imatges de capítols permetrà als clients mostrar menús gràfics de selecció d'escena. El procés pot ser lent, intensiu en recursos i pot requerir diversos gigabytes d’espai. S’executa quan es descobreixen els vídeos i també com a una tasca programada cada nit. La programació es pot configurar a l'àrea de tasques programades. No es recomana executar aquesta tasca durant les hores de més ús.", "EveryXMinutes": "Cada {0} minuts", "EveryXHours": "Cada {0} hores", "EveryHour": "Cada hora", @@ -1352,16 +1352,16 @@ "KnownProxiesHelp": "Llista separada per comes de les adreces IP o els noms d'amfitrió de servidors proxy coneguts que s'utilitzen quan es connecta a la instància del Jellyfin. Això és necessari per fer un ús correcte dels headers 'X-Forwarded-For'. Requereix un reinici després de desar.", "Kids": "Nens", "Items": "Elements", - "ImportFavoriteChannelsHelp": "Només els canals que estiguin marcats com a favorits al dispositiu sintonitzador seran importats.", + "ImportFavoriteChannelsHelp": "Només s'importaran els canals que estiguin marcats com a favorits al dispositiu sintonitzador.", "Image": "Imatge", - "HttpsRequiresCert": "Per tal d'habilitar les connexions segures, haurà de proporcionar un certificat SSL de confiança com ara Let's Encrypt. Faciliti un certificat o desactivi les connexions segures.", + "HttpsRequiresCert": "Per tal d'habilitar les connexions segures, haureu de proporcionar un certificat SSL de confiança com ara Let's Encrypt. Faciliteu un certificat o desactiveu les connexions segures.", "Horizontal": "Horitzontal", "Home": "Inici", "HideWatchedContentFromLatestMedia": "Amaga el contingut visionat de \"Continguts multimèdia afegits darrerament\"", "HeaderVideoType": "Tipus de vídeo", "HeaderVideos": "Vídeos", "HeaderVideoQuality": "Qualitat de vídeo", - "HeaderUploadSubtitle": "Pujar subtítols", + "HeaderUploadSubtitle": "Pujada de subtítols", "HeaderTypeImageFetchers": "Cercadors d'imatges ({0})", "HeaderTuners": "Sintonitzadors", "HeaderTunerDevices": "Dispositius sintonitzadors", @@ -1491,18 +1491,18 @@ "Off": "Apagat", "HeaderSubtitleProfile": "Perfil dels subtítols", "HeaderSubtitleDownloads": "Descàrrega dels subtítols", - "HeaderStopRecording": "Aturar l'enregistrament", + "HeaderStopRecording": "Atura l'enregistrament", "HeaderSpecialEpisodeInfo": "Informació de l'episodi especial", "HeaderServerAddressSettings": "Configuració de l'adreça del servidor", "HeaderSeriesStatus": "Estat de la sèrie", - "HeaderSelectTranscodingPathHelp": "Examineu o introduïu la ruta a utilitzar per als arxius de transcodificació. La carpeta ha de tenir permís d'escriptura.", + "HeaderSelectTranscodingPathHelp": "Examineu o introduïu la ruta a utilitzar per als arxius de transcodificació. El directori ha de tenir permís d'escriptura.", "HeaderSelectTranscodingPath": "Seleccioneu la ruta de transcodificació", - "HeaderSelectServerCachePathHelp": "Examineu o introduïu la ruta a utilitzar per als arxius cau del servidor. La carpeta ha de tenir permís d'escriptura.", + "HeaderSelectServerCachePathHelp": "Examineu o introduïu la ruta a utilitzar per als arxius cau del servidor. El servidor ha de tenir permís d'escriptura.", "HeaderSelectServerCachePath": "Seleccioneu la ruta de la memòria cau del servidor", - "HeaderSelectPath": "Seleccionar ruta", - "HeaderSelectMetadataPathHelp": "Examineu o introduïu la ruta que volgueu utilitzar per a les metadades. La carpeta ha de tenir permís d'escriptura.", + "HeaderSelectPath": "Seleccioneu una ruta", + "HeaderSelectMetadataPathHelp": "Examineu o introduïu la ruta que vulgueu utilitzar per a les metadades. El directori ha de tenir permís d'escriptura.", "HeaderSelectMetadataPath": "Seleccioneu la ruta de les metadades", - "HeaderSelectCertificatePath": "Seleccionar la ruta del certificat", + "HeaderSelectCertificatePath": "Selecciona la ruta del certificat", "HeaderRevisionHistory": "Historial de versions", "HeaderResponseProfileHelp": "Els perfils de resposta proporcionen una manera de personalitzar la informació que s'envia a el dispositiu quan es reprodueixen certs tipus de mitjans.", "HeaderResponseProfile": "Perfil de resposta", @@ -1512,7 +1512,7 @@ "HeaderRecordingPostProcessing": "Post-processament de l'enregistrament", "HeaderPortRanges": "Firewall i configuració del proxy", "HeaderPluginInstallation": "Instal·lació de complements", - "HeaderPlayOn": "Reproduir a", + "HeaderPlayOn": "Reprodueix a", "HeaderPlayback": "Reproducció dels continguts multimèdia", "HeaderPinCodeReset": "Restablir el codi PIN", "HeaderPhotoAlbums": "Àlbums de fotos", @@ -1528,15 +1528,15 @@ "HeaderLiveTvTunerSetup": "Configuració del sintonitzador de TV", "HeaderKodiMetadataHelp": "Per activar o desactivar les metadades NFO, editeu una mediateca i busqueu la secció d'Estalviadors de metadades.", "HeaderImageOptions": "Opcions de les imatges", - "HeaderIdentifyItemHelp": "Introduïu un o més criteris de cerca. Elimineu criteris per augmentar els resultats de cerca.", + "HeaderIdentifyItemHelp": "Introduïu un o més criteris de cerca. Elimineu criteris per a augmentar els resultats de cerca.", "HeaderHttpsSettings": "Configuració de HTTPS", "HeaderGuideProviders": "Proveïdors de dades de la guia de TV", "HeaderForKids": "Per als nens", "HeaderFetcherSettings": "Configuració del capturador", "HeaderError": "Error", - "HeaderEnabledFieldsHelp": "Desseleccionar un camp per a bloquejar-lo i impedir un canvi de les seves dades.", - "HeaderDVR": "Gravador digital (DVR)", - "HeaderDownloadSync": "Descaregar i sincronitzar", + "HeaderEnabledFieldsHelp": "Desseleccioneu un camp per a bloquejar-lo i impedir un canvi de les seves dades.", + "HeaderDVR": "Enregistrador digital (DVR)", + "HeaderDownloadSync": "Descarrega i sincronitza", "LabelOriginalName": "Nom original", "LabelMaxDaysForNextUpHelp": "Estableix la quantitat màxima de dies que una sèrie ha de romandre a la llista \"A continuació\" sense haver-la mirat.", "HeaderSyncPlayTimeSyncSettings": "Sincronització de temps", @@ -1629,8 +1629,8 @@ "LabelSyncPlaySettingsMinDelaySpeedToSyncHelp": "Retard de reproducció mínim (en ms) després del qual SpeedToSync intenta corregir la posició de reproducció.", "LabelSyncPlaySettingsMinDelaySpeedToSync": "SpeedToSync retard mínim", "LabelSyncPlaySettingsSyncCorrectionHelp": "Habilita la sincronització activa de la reproducció accelerant els continguts multimèdia o cercant la posició estimada. Desactiveu-ho en cas d'intermitències.", - "ItemDetails": "Detalls d'element", - "GoogleCastUnsupported": "Google Cast no suportat", + "ItemDetails": "Detalls de l'element", + "GoogleCastUnsupported": "El Google Cast no és compatible", "EnableRewatchingNextUp": "Habilita tornar a mirar", "EnableRewatchingNextUpHelp": "Habilita la mostra d'episodis ja vists a les seccions \"Més\".", "Digital": "Digital", @@ -1650,7 +1650,7 @@ "Bold": "Negreta", "EnableCardLayout": "Mostra la CardBox visual", "HomeVideosPhotos": "Vídeos i fotos personals", - "IgnoreDts": "Ignora DTS (decodificar la marca de temps)", + "IgnoreDts": "Ignora DTS (descodificació de la marca de temps)", "IgnoreDtsHelp": "Desactivar aquesta opció pot resoldre alguns problemes. Per exemple, àudio absent a canals amb vídeo i àudio rebuts per separat.", "LabelMaxVideoResolution": "Resolució màxima permesa en transcodificar vídeo", "MessageNoFavoritesAvailable": "No hi han preferits disponibles actualment.", @@ -1739,12 +1739,12 @@ "LabelSegmentKeepSeconds": "Temps per mantenir els segments", "LabelIsHearingImpaired": "Per a persones amb discapacitat auditiva (SDH)", "LogLevel.Warning": "Advertència", - "GoHome": "Anar a l'inici", + "GoHome": "Ves a l'inici", "HearingImpairedShort": "HI/SDH", "LabelBackdropScreensaverInterval": "Interval del fons estalvi de pantalles", "LabelBackdropScreensaverIntervalHelp": "El temps en segons entre els diferents fons quan s'utilitza l'estalvi de pantalles amb els fons.", "LabelSyncPlayNoGroups": "No hi ha grups disponibles", - "GridView": "Vista de Graella", + "GridView": "Vista de graella", "BackdropScreensaver": "Estalvis de pantalla de fons", "ListView": "Vista de Llista", "LogLevel.Critical": "Crític", @@ -1764,7 +1764,7 @@ "PleaseConfirmRepositoryInstallation": "Si us plau, pitgeu OK per confirmar que heu llegit el text anterior i desitgeu continuar amb la instal·lació del repositori de complements.", "Unknown": "Desconegut", "SelectAudioNormalizationHelp": "Guany de pista - ajusta el volum de cada pista perquè la reproducció soni al mateix volum. Guany d'àlbum - ajusta el volum de totes les pistes d'un àlbum, mantenint el rang dinàmic de l'àlbum. Canviant entre “Apagat” i altres opcions requereix reiniciar la reproducció actual.", - "HeaderConfirmRepositoryInstallation": "Confirmi l'instal·lació del repositori de complements", + "HeaderConfirmRepositoryInstallation": "Confirmeu la instal·lació del repositori de complements", "LabelAlbumGain": "Guany de l'Àlbum", "LabelSelectAudioNormalization": "Normalització d'àudio", "LabelSystem": "Sistema", @@ -1777,7 +1777,7 @@ "AiTranslated": "Traduït per IA", "MachineTranslated": "Traduït per Màquina", "ForeignPartsOnly": "Només parts Forçades/Forànies", - "HeaderGuestCast": "Estrelles Convidades", + "HeaderGuestCast": "Estrelles convidades", "HeaderAllRecordings": "Tots els enregistraments", "LabelServerVersion": "Versió del servidor", "LabelWebVersion": "Versió web", @@ -1847,7 +1847,7 @@ "LabelTrickplayThreadsHelp": "Nombre de fils a passar a l'argument de ffmpleg '-threads'.", "Lyric": "Lletra", "EnableSmoothScroll": "Habilita el desplaçament suau", - "HeaderDeleteSeries": "Esborrar Sèries", + "HeaderDeleteSeries": "Elimina la sèrie", "PlaybackError.MEDIA_DECODE_ERROR": "La reproducció ha fallat a causa d'un error en descodificar el contingut.", "AllowMjpegEncoding": "Permetre codificació en format MJPEG (utilitzat durant la generació de trickplay)", "PriorityBelowNormal": "Per sota del Normal", @@ -1859,7 +1859,7 @@ "LabelTrickplayAccelEncoding": "Habilitar codificació MJPEG accelerada per maquinari", "ConfirmDeleteLyrics": "L'esborrat d'aquestes lletres, les suprimirà tant del sistema de fitxers com de la vostra mediateca. N'esteu segur, que desitgeu continuar?", "ErrorDeletingLyrics": "S'ha produït un error en suprimir les lletres del servidor. Si us plau, comproveu que Jellyfin tingui accés d'escriptura a la carpeta multimèdia i torneu-ho a provar.", - "HeaderDeleteLyrics": "Esborrar Lletres", + "HeaderDeleteLyrics": "Elimina la lletra", "DeleteLyrics": "Elimina les lletres", "HeaderNoLyrics": "No s'ha trobat cap lletra", "Lyrics": "Lletres", @@ -1868,7 +1868,7 @@ "EnableDts": "Habilita DTS (DCA)", "PlaylistError.AddFailed": "S'ha produït un error en agregar a la llista de reproducció", "PlaylistError.CreateFailed": "S'ha produït un error en crear la llista de reproducció", - "HeaderVideoAdvanced": "Vídeo Avançat", + "HeaderVideoAdvanced": "Vídeo avançat", "Author": "Autor", "Colorist": "Colorista", "CoverArtist": "Artista de la portada", @@ -1889,7 +1889,7 @@ "SelectPreferredTranscodeVideoAudioCodecHelp": "Seleccioneu el còdec d'àudio preferit per transcodificar per al contingut de vídeo. Si el còdec preferit no és compatible, el servidor utilitzarà el següent millor còdec disponible.", "LibraryScanFanoutConcurrency": "Límit de tasques d'exploració paral·leles per a les mediateques", "Penciller": "Dibuixant", - "Inker": "Tintador", + "Inker": "Entintador", "Letterer": "Retolador", "Alternate": "Alterna", "AlternateDVD": "DVD alternatiu", @@ -1917,8 +1917,8 @@ "MoveToTop": "Mou al principi", "EditLyrics": "Edita la lletra", "HeaderAddLyrics": "Afegeix lletres", - "HeaderPreviewLyrics": "Previsualitzar lletres", - "HeaderUploadLyrics": "Pujar lletres", + "HeaderPreviewLyrics": "Previsualitza lletres", + "HeaderUploadLyrics": "Pujada de lletres", "LabelIsSynced": "Està sincronitzat", "NoLyricsSearchResultsFound": "No s'han trobat lletres.", "SearchForLyrics": "Cercar lletres", @@ -1985,7 +1985,7 @@ "RenderPgsSubtitle": "Renderitzat experimental de subtitols PGS", "VideoCodecTagNotSupported": "L'etiqueta del còdec de vídeo no és compatible", "RenderPgsSubtitleHelp": "Determina si el client ha de renderitzar els subtítols PGS en lloc d'usar els subtítols incrustats. Això pot evitar la transcodificació de part del servidor a canvi del rendiment de renderitzat de part del client.", - "FallbackMaxStreamingBitrateHelp": "El bitrate màxim s'usa com a alternativa quan ffprobe no pot determinar el flux de l'origen. Això ajuda a prevenir que els clients sol·licitin un bitrate de transcodificació excessivament alt, el qual provocaria errors en el reproductor o sobrecarregar el codificador.", + "FallbackMaxStreamingBitrateHelp": "La transmissió màxima de bits s'usa com a alternativa quan ffprobe no pot determinar el flux de l'origen. Això ajuda a prevenir que els clients sol·licitin un bitrate de transcodificació excessivament alt, el qual provocaria errors en el reproductor o sobrecarregaria el codificador.", "HeaderNextEpisode": "Episodi següent", "HeaderNextVideo": "Vídeo següent", "LabelMediaSegmentProviders": "Proveïdors de segments de continguts multimèdia", @@ -2015,15 +2015,15 @@ "LabelGroupShowsIntoCollectionsHelp": "Les sèries que estiguin dins d'una col·lecció es mostraran com un únic element agrupat quan es mostrin les llistes de sèries.", "CustomSplashScreenSize": "Les imatges personalitzades haurien de ser en 16x9 de ràtio d'aspecte i a una mida mínima de 1920x1080.", "DeleteCustomImage": "Elimina la imatge personalitzada", - "ImageDeleteFailed": "Eliminació de la imatge fallida", + "ImageDeleteFailed": "No s'ha pogut eliminar la imatge", "ImageUploadCancelled": "Pujada d'imatge cancel·lada", - "ImageUploadFailed": "Pujada d'imatge fallida", + "ImageUploadFailed": "No s'ha pogut carregar la imatge", "UploadCustomImage": "Pujar imatge personalitzada", "ReadInputAtNativeFramerate": "Llegeix l'origen a la velocitat de fotogrames nativa", "ReadInputAtNativeFramerateHelp": "Activant aquesta opció pot solucionar alguns problemes, p. ex. retransmissions en directe que es paren sobtadament.", "LimitSegmentLength": "Utilitzar segments HLS escurçats", "LimitSegmentLengthHelp": "Activar aquesta opció pot ajudar a prevenir que el reproductor HLS es pengi durant la cerca en alguns dispositius, com televisors webOS.", - "HeaderServerUnavailable": "El Servidor no està disponible", + "HeaderServerUnavailable": "El servidor no està disponible", "HeaderUpdateRequired": "Cal una actualització", "ViewSettings": "Configuració de visualització", "DownloadManager": "Descàrregues", From bd52466dd477ce35aa0bf191c70fc8747096e0ed Mon Sep 17 00:00:00 2001 From: queeup Date: Wed, 18 Jun 2025 10:15:58 -0400 Subject: [PATCH 492/645] Translated using Weblate (Turkish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/tr/ --- src/strings/tr.json | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/src/strings/tr.json b/src/strings/tr.json index ecf928aa0..0fcca2371 100644 --- a/src/strings/tr.json +++ b/src/strings/tr.json @@ -60,7 +60,7 @@ "HeaderSetupLibrary": "Medya kütüphanelerinizi ayarlayın", "HeaderStatus": "Durum", "HeaderSystemDlnaProfiles": "Sistem Profilleri", - "HeaderTaskTriggers": "Görev tetikleyicileri", + "HeaderTaskTriggers": "Görev Tetikleyicileri", "HeaderTranscodingProfile": "Kod Dönüştürme Profili", "HeaderUsers": "Kullanıcılar", "LabelArtists": "Sanatçılar", @@ -1289,7 +1289,7 @@ "LabelTonemappingRange": "Ton eşleme aralığı", "LabelTonemappingPeakHelp": "Gömülü meta veri değerini, bunun yerine bu zirve değeriyle giriş sinyali için geçersiz kılın. Varsayılan değer 100'dür (1000nit).", "LabelTonemappingPeak": "Ton eşleme zirvesi", - "LabelTonemappingParamHelp": "Ton eşleme algoritmasını ayarlayın. Önerilen ve varsayılan değerler NaN'dir. Genelde boş bırakın.", + "LabelTonemappingParamHelp": "Ton eşleme algoritmasını ayarlayın. Genelde boş bırakın.", "LabelTonemappingParam": "Ton eşleme parametresi", "LabelTonemappingDesatHelp": "Bu parlaklık seviyesini aşan vurgular için desatürasyon uygulayın. Önerilen değer 0'dır (devre dışı bırak).", "LabelTonemappingDesat": "Ton eşleme desat", @@ -1690,7 +1690,7 @@ "EnableAudioNormalization": "Ses Normalizasyonu", "HeaderRecordingMetadataSaving": "Meta Verilerin Kaydedilmesi", "Short": "Kısa", - "LabelDummyChapterDurationHelp": "Sahte bölümler arasındaki aralık. Sahte bölüm oluşturmayı devre dışı bırakmak için 0 olarak ayarlayın. Bunu değiştirmenin mevcut sahte bölümler üzerinde hiçbir etkisi olmayacaktır.", + "LabelDummyChapterDurationHelp": "Sahte bölümler arasındaki saniye cinsinden aralık. Sahte bölüm oluşturmayı devre dışı bırakmak için 0 olarak ayarlayın. Bunu değiştirmenin mevcut sahte bölümler üzerinde hiçbir etkisi olmayacaktır.", "LabelChapterImageResolution": "Çözünürlük", "ResolutionMatchSource": "Eşleşme Kaynağı", "SaveRecordingImages": "EPG görüntülerini kaydet", @@ -2023,5 +2023,35 @@ "HeaderUpdateRequired": "Güncelleme Gerekli", "ViewSettings": "Ayarları görüntüle", "DownloadManager": "İndirilenler", - "MessageForgotPasswordPinReset": "Şifre sıfırlamayı bitirmek için PIN kodunu buraya girin" + "MessageForgotPasswordPinReset": "Şifre sıfırlamayı bitirmek için PIN kodunu buraya girin", + "ConfirmDeleteRepository": "Depo silinsin mi?", + "StorageType.CDRom": "CD-ROM", + "DeleteRepositoryConfirmation": "Bu depoyu silmek istediğinizden emin misiniz?", + "MessageRestoreDisclaimer": "UYARI: Önceki bir yedekten geri yükleme yapmak üzeresiniz. Sunucunuz işlem süresince kullanılamaz hale gelecek ve yedeklemeden bu yana oluşturulan tüm yeni veriler kaybolacaktır.", + "LabelProgramData": "Program Verisi", + "LabelRestore": "Geri Yükle", + "MessageBackupDisclaimer": "Kütüphanenizin boyutuna bağlı olarak, yedekleme işlemi biraz zaman alabilir.", + "MessageBackupInProgress": "Yedekleme devam ediyor", + "PluginsLoadError": "Eklentiler yüklenirken bir hata oluştu.", + "StorageType.Network": "Ağ", + "StorageType.NoRootDirectory": "Kök Dizin Yok", + "StorageType.Ram": "RAM", + "Success": "Başarılı", + "HeaderBackups": "Yedekler", + "HeaderBackupsHelp": "Sunucunuzun veritabanını, meta verilerini, altyazıları ve trickplay'i içerebilen anlık görüntülerini oluşturun ve geri yükleyin.", + "LabelBackupsUnavailable": "Yedekleme mevcut değil", + "LabelDatabase": "Veritabanı", + "RepositoriesPageLoadError": "Depolar yüklenemedi", + "StorageType.Fixed": "Sabit", + "StorageType.Removable": "Çıkarılabilir", + "StorageType.Unknown": "Bilinmiyor", + "TranscodingLoadError": "Kod dönüştürme ayarları yüklenemedi", + "ButtonLearnMore": "Daha fazla bilgi edinin", + "MessageRestoreInProgress": "Geri yükleme devam ediyor", + "BackupsPageLoadError": "Yedeklemeler sayfası yüklenemedi", + "ButtonCreateBackup": "Yedek Oluştur", + "Create": "Oluştur", + "LabelImageCache": "Görüntü Önbelleği", + "MessageRestoreSuccess": "Geri yükleme başarıyla tamamlandı", + "MessageWaitingForServer": "Sunucu bekleniyor..." } From f3633c19b9e6076c8b9899a3ed9ad271018e1fd4 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Wed, 18 Jun 2025 12:04:17 -0400 Subject: [PATCH 493/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 024eba0d5..2012d4088 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -203,10 +203,10 @@ "InstantMix": "Mescla instantània", "ItemCount": "{0} elements", "LabelAccessDay": "Dia de la setmana", - "LabelAccessEnd": "Hora de fi", + "LabelAccessEnd": "Hora final", "LabelAccessStart": "Hora d'inici", "LabelAirDays": "Dies en directe", - "LabelAirTime": "Horari en directe", + "LabelAirTime": "Horari d'emissió", "LabelAlbum": "Àlbum", "LabelAlbumArtMaxHeight": "Alçada màxima de l'art de l'àlbum", "LabelAlbumArtMaxWidth": "Amplada màxima de l'art de l'àlbum", @@ -1324,32 +1324,32 @@ "LabelBindToLocalNetworkAddressHelp": "Anul·lar l'adreça IP local per al servidor HTTP. Si és buit, el servidor s'unirà a totes les adreces disponibles. Canviar aquest valor requereix un reinici.", "LabelBindToLocalNetworkAddress": "S'uneixen a l'adreça de xarxa local", "LabelBaseUrl": "URL base", - "LabelAutomaticDiscoveryHelp": "Permet que les aplicacions detecten automàticament Jellyfin usant el port UDP 7359.", - "LabelAutomaticDiscovery": "Activa el descobriment automàtic", + "LabelAutomaticDiscoveryHelp": "Permet que les aplicacions detectin automàticament Jellyfin usant el port UDP 7359.", + "LabelAutomaticDiscovery": "Habilita el descobriment automàtic", "LabelAutomaticallyRefreshInternetMetadataEvery": "Actualitza automàticament les metadades, prenent-les d'Internet", "LabelAutoDiscoveryTracingHelp": "Quan està activat, es registraran els paquets rebuts en el port d'autodescobriment.", "LabelAutoDiscoveryTracing": "Activa el descobriment automàtic de rastreig.", - "LabelAuthProvider": "L'autenticació de l'proveïdor", + "LabelAuthProvider": "L'autenticació del proveïdor", "LabelAudioSampleRate": "Freqüència de mostreig d'àudio", "LabelAudioCodec": "Còdec d'àudio", "LabelAudioChannels": "Canals d'àudio", "LabelAudioBitrate": "Taxa de bits d'àudio", "LabelAudioBitDepth": "Profunditat de bits d'àudio", - "LabelAppNameExample": "Un nom llegible per persones per identificar les claus de l'API. Aquesta configuració no afectarà la funcionalitat.", + "LabelAppNameExample": "Un nom humà llegible per a identificar les claus de l'API. Aquesta configuració no afectarà la funcionalitat.", "LabelAppName": "Nom de l'aplicació", - "LabelAllowHWTranscoding": "Permetre la transcodificació de maquinari", - "LabelAllowedRemoteAddressesMode": "La manera de filtre d'adreces IP remota", - "LabelAllowedRemoteAddresses": "Filtres remot IP", + "LabelAllowHWTranscoding": "Permet la transcodificació de maquinari", + "LabelAllowedRemoteAddressesMode": "Mode de filtre d'adreces IP remotes", + "LabelAllowedRemoteAddresses": "Filtre d'adreça IP remota", "LabelAlbumArtPN": "Àlbum PN art", "LabelAlbumArtMaxResHelp": "La resolució màxima de la imatge de l'àlbum exposa a través de la propietat 'upnp:albumArtURI'.", "LabelAlbumArtists": "Artistes de l'àlbum", "LabelAlbumArtHelp": "PN utilitzat per a la portada de l'àlbum, dis de l'atribut 'dlna:profileID' a 'upnp:albumArtURI'. Alguns dispositius requereixen un valor específic, independentment de la mida de la imatge.", - "LabelAirsBeforeSeason": "Al aire abans de la temporada", - "LabelAirsBeforeEpisode": "Al aire abans episodi", - "LabelAirsAfterSeason": "Al aire després de la temporada", + "LabelAirsBeforeSeason": "S'emet abans de la temporada", + "LabelAirsBeforeEpisode": "S'emet abans de l'episodi", + "LabelAirsAfterSeason": "S'emet després de la temporada", "LabelAbortedByServerShutdown": "(Avortat pel tancament de servidor)", "Label3DFormat": "Format 3D", - "KnownProxiesHelp": "Llista separada per comes de les adreces IP o els noms d'amfitrió de servidors proxy coneguts que s'utilitzen quan es connecta a la instància del Jellyfin. Això és necessari per fer un ús correcte dels headers 'X-Forwarded-For'. Requereix un reinici després de desar.", + "KnownProxiesHelp": "Llista separada per comes de les adreces IP o els noms d'amfitrió de servidors proxy coneguts que s'utilitzen quan es connecta a la instància del Jellyfin. Això és necessari per fer un ús correcte de les capçaleres 'X-Forwarded-For'. Requereix un reinici després de desar.", "Kids": "Nens", "Items": "Elements", "ImportFavoriteChannelsHelp": "Només s'importaran els canals que estiguin marcats com a favorits al dispositiu sintonitzador.", @@ -1765,8 +1765,8 @@ "Unknown": "Desconegut", "SelectAudioNormalizationHelp": "Guany de pista - ajusta el volum de cada pista perquè la reproducció soni al mateix volum. Guany d'àlbum - ajusta el volum de totes les pistes d'un àlbum, mantenint el rang dinàmic de l'àlbum. Canviant entre “Apagat” i altres opcions requereix reiniciar la reproducció actual.", "HeaderConfirmRepositoryInstallation": "Confirmeu la instal·lació del repositori de complements", - "LabelAlbumGain": "Guany de l'Àlbum", - "LabelSelectAudioNormalization": "Normalització d'àudio", + "LabelAlbumGain": "Guany de l'àlbum", + "LabelSelectAudioNormalization": "Normalització de l'àudio", "LabelSystem": "Sistema", "LogLevel.Error": "Error", "MessageRepositoryInstallDisclaimer": "ADVERTÈNCIA: L'instal·lació d'un complement de tercers comporta riscos. Pot contenir còdi inestable o maliciós, i pot canviar en qualsevol moment. Només instal·li complements d'autors en els que confiï.", @@ -1806,7 +1806,7 @@ "AirPlay": "AirPlay", "AllowContentWithTagsHelp": "Mostra només el contingut multimèdia amb com a mínim alguna de les etiquetes especificades.", "BlockContentWithTagsHelp": "Amaga el contingut multimèdia amb com a mínim una de les etiquetes especificades.", - "LabelAllowContentWithTags": "Permetre elements amb etiquetes", + "LabelAllowContentWithTags": "Permet elements amb etiquetes", "BlockingScan": "Bloqueig - generació de cues, bloqueja escaneig fins a completar-se", "LabelScanBehavior": "Comportament de l'escaneig", "PlaybackError.ASS_RENDER_ERROR": "S'ha produït un error al renderitzador de subtítols ASS/SSA.", From 2b9f2c8ecce4bb7772c4b8a36ae896d31a0e4f21 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Wed, 18 Jun 2025 14:45:23 -0400 Subject: [PATCH 494/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 128 ++++++++++++++++++++++---------------------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 2012d4088..42c0730a4 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -216,18 +216,18 @@ "LabelBirthDate": "Data de naixement", "LabelBirthYear": "Any de naixement", "LabelCache": "Memòria cau", - "LabelCachePath": "Dir. de memòria cau", - "LabelCachePathHelp": "Especifiqueu una ubicació personalitzada per als fitxers cau del servidor, com ara les imatges. Deixeu-ho en blanc per utilitzar l'ubicació per defecte del servidor.", + "LabelCachePath": "Ruta de la memòria cau", + "LabelCachePathHelp": "Especifiqueu una ubicació personalitzada per als fitxers cau del servidor, com ara les imatges. Deixeu-ho en blanc per utilitzar la ubicació per defecte del servidor.", "LabelCancelled": "Cancel·lat", "LabelChannels": "Canals", "LabelCollection": "Col·lecció", "LabelCommunityRating": "Valoració de la comunitat", "LabelContentType": "Tipus de contingut", "LabelCountry": "País/Regió", - "LabelCriticRating": "Valoració dels сrítics", + "LabelCriticRating": "Valoració de la crítica", "LabelCurrentPassword": "Contrasenya actual", "LabelCustomCss": "Codi CSS propi", - "LabelCustomCssHelp": "Apliqueu els vostres propis estils personalitzats a la interfície web.", + "LabelCustomCssHelp": "Apliqueu els vostres propi codi CSS personalitzat per al tema/marca a la interfície web.", "LabelDashboardTheme": "Tema del tauler de control del servidor", "LabelDateAdded": "Data afegit", "LabelDay": "Dia de la setmana", @@ -235,11 +235,11 @@ "LabelDefaultUser": "Usuari per defecte", "LabelDefaultUserHelp": "Determina quina biblioteca d'usuari s'hauria de mostrar als dispositius connectats. Es pot anul·lar per a cada dispositiu emprant perfils.", "LabelDeviceDescription": "Descripció del dispositiu", - "LabelDiscNumber": "Disc", + "LabelDiscNumber": "Número de disc", "LabelDisplayLanguage": "Idioma de visualització", "LabelDisplayName": "Nom a mostrar", "LabelDisplayOrder": "Ordre de visualització", - "LabelDisplaySpecialsWithinSeasons": "Mostra els especials dins les temporades en que van ser emesos", + "LabelDisplaySpecialsWithinSeasons": "Mostra els especials a les temporades on van ser emesos", "LabelDownloadLanguages": "Descarrega idiomes", "LabelDropImageHere": "Deixa anar la imatge aquí.", "LabelDynamicExternalId": "Identificador {0}", @@ -249,18 +249,18 @@ "LabelEnableDlnaPlayToHelp": "Detecteu dispositius de la vostra xarxa i ofereu la possibilitat de controlar-los de forma remota.", "LabelEnableDlnaServer": "Habilita servidor DLNA", "LabelEnableDlnaServerHelp": "Permetre als dispositius UPnP de la vostra xarxa navegar i reproduir contingut.", - "LabelEnableRealtimeMonitor": "Habilitar el monitoratge a temps real", + "LabelEnableRealtimeMonitor": "Habilita el monitoratge a temps real", "LabelEnableRealtimeMonitorHelp": "Els canvis als fitxers es processaran immediatament als sistemes de fitxers compatibles.", "LabelEndDate": "Data de finalització", - "LabelEpisodeNumber": "Episodi", + "LabelEpisodeNumber": "Episodi número", "LabelEvent": "Esdeveniment", "LabelEveryXMinutes": "Cada", "LabelExtractChaptersDuringLibraryScan": "Extreu imatges dels episodis durant l'escaneig de la mediateca", "LabelFailed": "Fallit", - "LabelFinish": "Finalitzar", + "LabelFinish": "Finalitza", "LabelFriendlyName": "Nom amistós", "LabelServerNameHelp": "Aquest nom s'utilitzarà per identificar el servidor i es convertirà per defecte en el nom d'amfitrió del servidor.", - "LabelGroupMoviesIntoCollections": "Agrupa pel·lícules a col·leccions", + "LabelGroupMoviesIntoCollections": "Agrupa pel·lícules en col·leccions", "LabelHomeScreenSectionValue": "Secció {0} de la pantalla d'inici", "LabelHttpsPort": "Port local HTTPS", "LabelIconMaxHeight": "Alçada màxima de la icona", @@ -921,7 +921,7 @@ "TabNetworking": "Xarxes", "TabLogs": "Registres", "SystemDlnaProfilesHelp": "Perfils de el sistema són de només lectura. Els canvis en un perfil de sistema seran emmagatzemades a un nou perfil personalitzat.", - "SyncPlayGroupDefaultTitle": "Grup {0}'s", + "SyncPlayGroupDefaultTitle": "Grup de {0}", "SyncPlayAccessHelp": "La funció SyncPlay permet sincronitzar la reproducció amb altres dispositius. Seleccioneu el nivell d'accés a SyncPlay que té aquest usuari.", "SubtitleVerticalPositionHelp": "Número de línia on apareix el text. Els nombres positius indiquen dalt a baix. Els nombres negatius indiquen dalt a baix.", "SubtitleOffset": "Subtítol Offset", @@ -960,7 +960,7 @@ "SearchResults": "Resultats de la cerca", "Screenshot": "Captura", "Schedule": "Programar", - "ScanLibrary": "Escaneja la mediateca", + "ScanLibrary": "S'estan escanejant les mediateques", "ScanForNewAndUpdatedFiles": "Cerca fitxers nous i actualitzats", "SaveSubtitlesIntoMediaFoldersHelp": "L'emmagatzematge de subtítols al costat dels arxius de vídeo que els permetrà ser manejats amb més facilitat.", "SaveSubtitlesIntoMediaFolders": "Desa els subtítols en els directoris de continguts multimèdia", @@ -1132,11 +1132,11 @@ "LabelSyncPlayNewGroupDescription": "Crea un grup nou", "LabelSyncPlayNewGroup": "Grup nou", "LabelSyncPlayLeaveGroupDescription": "Desactivar SyncPlay", - "LabelSyncPlayLeaveGroup": "Marxar del grup", + "LabelSyncPlayLeaveGroup": "Surt del grup", "LabelSyncPlayHaltPlaybackDescription": "I ignorar les actualitzacions de llista de reproducció actual", "LabelSyncPlayHaltPlayback": "Aturar la reproducció local", "LabelSyncPlayAccessNone": "S'ha desactivat per a aquest usuari", - "LabelSyncPlayAccessJoinGroups": "Permet als usuaris a unir-se als grups", + "LabelSyncPlayAccessJoinGroups": "Permet als usuaris unir-se als grups", "LabelSyncPlayAccessCreateAndJoinGroups": "Permet a l'usuari crear i unir-se a grups", "LabelSyncPlayAccess": "Accés SyncPlay", "LabelSupportedMediaTypes": "Tipus de mitjans compatibles", @@ -1157,7 +1157,7 @@ "MusicVideos": "Videoclips", "Trailers": "Tràilers", "LabelGroupMoviesIntoCollectionsHelp": "Pel·lícules en una col·lecció seran agrupades com una sola llista en mostrar les llistes de pel·lícules.", - "LabelffmpegPathHelp": "La ruta d'accés a l'arxiu d'aplicació o carpeta que conté FFmpeg.", + "LabelffmpegPathHelp": "La ruta d'accés al fitxer de l'aplicació de FFmpeg o del directori que la conté.", "LabelEnableSSDPTracingHelp": "Permetin als detalls de la xarxa SSDP rastreig que s'ha de registrar.
ADVERTÈNCIA:. Això farà que seria degradació del rendiment.", "LabelBaseUrlHelp": "Afegiu un subdirectori personalitzat a l'adreça URL de servidor. Per exemple: http://example.com/<baseurl>", "LabelSlowResponseTime": "Temps en ms després de la qual cosa es considera una resposta lenta", @@ -1263,22 +1263,22 @@ "LabelH264Crf": "H.264 codifica CRF", "LabelFormat": "Format", "LabelForgotPasswordUsernameHelp": "Introduïu el nom d'usuari, si el recordeu.", - "LabelFont": "Font", - "LabelFolder": "Carpeta", - "LabelFileOrUrl": "Arxiu o URL", - "LabelffmpegPath": "FFmpeg ruta", + "LabelFont": "Tipus de lletra", + "LabelFolder": "Directori", + "LabelFileOrUrl": "Fitxer o URL", + "LabelffmpegPath": "Ruta de FFmpeg", "LabelExtractChaptersDuringLibraryScanHelp": "Genera imatges de capítols quan els vídeos són importats durant l'escaneig de la mediateca. Desmarcant, les imatges es descarregaran quan s'executi la tasca programada, permetent un escaneig més ràpid de la mediateca.", "LabelEncoderPreset": "Codificació preestablert", "LabelEnableSSDPTracing": "Habilitar rastreig SSDP", "LabelEnableSingleImageInDidlLimitHelp": "Alguns dispositius no es mostri correctament si diverses imatges estan integrats dins de DIDL.", "LabelEnableSingleImageInDidlLimit": "Limitar als una sola imatge incrustada", - "LabelEnableIP6Help": "Habilitar la funcionalitat IPv6.", - "LabelEnableIP6": "Activa IPv6", - "LabelEnableIP4Help": "Habilitar la funcionalitat IPv4.", - "LabelEnableIP4": "Activa IPv4", - "LabelEnableHttpsHelp": "Escoltar al port HTTPS configurat. Un certificat vàlid també ha de ser subministrat perquè això tingui efecte.", - "LabelEnableHttps": "Activar HTTPS", - "LabelEnableHardwareDecodingFor": "Activa descodificació de maquinari per", + "LabelEnableIP6Help": "Habilita la funcionalitat IPv6.", + "LabelEnableIP6": "Habilita IPv6", + "LabelEnableIP4Help": "Habilita la funcionalitat IPv4.", + "LabelEnableIP4": "Habilita IPv4", + "LabelEnableHttpsHelp": "Permet que el servidor escolti el port HTTPS configurat. També cal configurar un certificat vàlid perquè això tingui efecte.", + "LabelEnableHttps": "Habilita HTTPS", + "LabelEnableHardwareDecodingFor": "Habilita la descodificació de maquinari per a", "LabelEnableDlnaPlayTo": "Activar DLNA per reproduir", "LabelEnableDlnaDebugLogging": "Habilitar el registre de depuració DLNA", "LabelEnableDlnaClientDiscoveryIntervalHelp": "Determinar la durada en segons entre dues recerques SSDP.", @@ -1288,41 +1288,41 @@ "LabelEnableAutomaticPortMapHelp": "Ports automàticament cap endavant públiques al router als ports locals en el seu servidor a través d'UPnP. Això pot no funcionar amb alguns models de routers o configuracions de xarxa. Els canvis no s'aplicaran fins després de reiniciar el servidor.", "LabelEmbedAlbumArtDidlHelp": "Alguns dispositius prefereixen aquest mètode per obtenir la portada de l'àlbum. Altres poden deixar de jugar amb aquesta opció activada.", "LabelEmbedAlbumArtDidl": "Incrustar la portada de l'àlbum en DIDL", - "LabelDropSubtitleHere": "Projectar subtítols aquí, o feu clic per navegar.", - "LabelDropShadow": "Projectar ombra", - "LabelDroppedFrames": "Cuadres caiguts", - "LabelDownMixAudioScaleHelp": "Potenciador d'àudio quan es redueixi. Un valor d'un preservarà el volum original.", - "LabelDownMixAudioScale": "Potenciador d'àudio quan es redueixi", + "LabelDropSubtitleHere": "Deixeu anar els subtítols aquí, o feu clic per a navegar.", + "LabelDropShadow": "Projecta ombra", + "LabelDroppedFrames": "Fotogrames descartats", + "LabelDownMixAudioScaleHelp": "Potencia l'àudio en barrejar a la baixa. Un valor d'1 preservarà el volum original.", + "LabelDownMixAudioScale": "Potencia l'àudio en barrejar a la baixa", "LabelDisplayMode": "Mode de visualització", - "LabelDisplayLanguageHelp": "Traducció Jellyfin és un projecte en curs.", - "LabelDisableCustomCss": "Desactivar CSS tematització d'encàrrec / branding proporciona des del servidor.", + "LabelDisplayLanguageHelp": "La traducció de Jellyfin és un projecte en curs.", + "LabelDisableCustomCss": "Desactiva el codi CSS personalitzat per a tema/marca proporcionat des del servidor.", "LabelDidlMode": "DIDL manera", "LabelDeinterlaceMethod": "Mètode de desentrellaçat", "LabelDefaultScreen": "Pantalla per defecte", - "LabelDateTimeLocale": "Data Hora Local", - "LabelDateAddedBehaviorHelp": "Si un valor de metadades és present, sempre va ser utilitzat abans que qualsevol d'aquestes opcions.", + "LabelDateTimeLocale": "Data i hora local", + "LabelDateAddedBehaviorHelp": "Si hi ha un valor de metadades, sempre es farà servir abans de qualsevol d'aquestes opcions.", "LabelDateAddedBehavior": "Comportament de la data afegida per a contingut nou", - "LabelCustomRating": "Classificació personal", - "LabelCustomDeviceDisplayNameHelp": "De donar un nom de visualització personalitzat o deixar en blanc per usar el nom reportat pel dispositiu.", - "LabelCustomCertificatePathHelp": "Ruta a un arxiu PKCS #12 que contingui un certificat i una clau privada per activar el suport TLS en un domini personalitzat.", - "LabelCustomCertificatePath": "SSL personalitzat ruta de l'certificat", + "LabelCustomRating": "Valoració personalitzada", + "LabelCustomDeviceDisplayNameHelp": "Proporcioneu un nom personalitzat de visualització o deixeu-ho en blanc per a fer servir el nom reportat pel dispositiu.", + "LabelCustomCertificatePathHelp": "Ruta a un arxiu PKCS #12 que contingui un certificat i una clau privada per a activar el suport TLS en un domini personalitzat.", + "LabelCustomCertificatePath": "Ruta del certificat SSL personalitzat", "LabelCurrentStatus": "Estat actual", - "LabelCreateHttpPortMapHelp": "Permetre l'assignació de ports automàtica per crear una regla per al tràfic HTTP, a més de trànsit HTTPS.", - "LabelCreateHttpPortMap": "Habilitar l'assignació automàtica de ports per al tràfic HTTP, així com HTTPS.", - "LabelCorruptedFrames": "Cuadres corruptes", + "LabelCreateHttpPortMapHelp": "Permet l'assignació de ports automàtica per a crear una regla per al tràfic HTTP, a més a més del trànsit HTTPS.", + "LabelCreateHttpPortMap": "Habilita l'assignació automàtica de ports per al tràfic HTTP, així com HTTPS.", + "LabelCorruptedFrames": "Quadres corruptes", "LabelColorTransfer": "Transferència de color", "LabelColorSpace": "Espai de color", "LabelColorPrimaries": "Colors primaris", - "LabelChromecastVersion": "Versió Google Cast", - "LabelCertificatePasswordHelp": "Si el seu certificat requereix una clau, ingressi-la aquí.", + "LabelChromecastVersion": "Versió de Google Cast", + "LabelCertificatePasswordHelp": "Si el vostre certificat requereix una contrasenya, ingresseu-la aquí.", "LabelCertificatePassword": "Verifica la contrasenya", - "LabelBurnSubtitles": "Gravar subtítols", - "LabelBlockContentWithTags": "Bloquejar elements amb etiquetes", + "LabelBurnSubtitles": "Incrusta subtítols", + "LabelBlockContentWithTags": "Bloqueja elements amb etiquetes", "LabelBlastMessageIntervalHelp": "Determina la durada en segons entre ràfegues de missatges en directe.", - "LabelBlastMessageInterval": "Interval entre missatges de vida", - "LabelBitrate": "Tassa de bits", - "LabelBindToLocalNetworkAddressHelp": "Anul·lar l'adreça IP local per al servidor HTTP. Si és buit, el servidor s'unirà a totes les adreces disponibles. Canviar aquest valor requereix un reinici.", - "LabelBindToLocalNetworkAddress": "S'uneixen a l'adreça de xarxa local", + "LabelBlastMessageInterval": "Interval entre missatges en viu", + "LabelBitrate": "Taxa de bits", + "LabelBindToLocalNetworkAddressHelp": "Anul·la l'adreça IP local per al servidor HTTP. Si és buit, el servidor s'unirà a totes les adreces disponibles. Canviar aquest valor requereix un reinici.", + "LabelBindToLocalNetworkAddress": "Vincula a l'adreça local de xarxa", "LabelBaseUrl": "URL base", "LabelAutomaticDiscoveryHelp": "Permet que les aplicacions detectin automàticament Jellyfin usant el port UDP 7359.", "LabelAutomaticDiscovery": "Habilita el descobriment automàtic", @@ -1694,10 +1694,10 @@ "HeaderDummyChapter": "Imatges dels capítols", "LabelDummyChapterCount": "Límit", "LabelDummyChapterDuration": "Interval", - "LabelDummyChapterDurationHelp": "L'interval entre capítols ficticis en segons. Ajusta-ho a 0 per a desactivar la generació de capítols ficticis. Canviar-ho no afectarà els capítols ficticis existents.", + "LabelDummyChapterDurationHelp": "L'interval entre capítols ficticis en segons. Ajusteu-ho a 0 per a desactivar la generació de capítols ficticis. Canviar-ho no afectarà els capítols ficticis existents.", "LabelChapterImageResolution": "Resolució", - "LabelChapterImageResolutionHelp": "La resolució de les imatges del capítol extretes. Canviar-ho no afectarà els capítols ficticis existents.", - "ResolutionMatchSource": "Coincidir amb la font", + "LabelChapterImageResolutionHelp": "Resolució de les imatges extretes dels capítols. Canviar-ho no afectarà els capítols de proves existents.", + "ResolutionMatchSource": "La mateixa de la font", "SaveRecordingNFOHelp": "Desa les metadades del proveïdor de llistats EPG amb els fitxers multimèdia.", "HeaderPerformance": "Rendiment", "LabelDummyChapterCountHelp": "El nombre màxim d'imatges del capítol que s'extreuran per a cada fitxer multimèdia.", @@ -1716,11 +1716,11 @@ "SubtitleYellow": "Groc", "StereoDownmixAlgorithmHelp": "Algoritme utilitzat per barrejar àudio multicanal a estèreo.", "DownloadAll": "Descarrega-ho tot", - "LabelEnableAudioVbr": "Activar la codificació d'àudio VBR", - "LabelEnableAudioVbrHelp": "La taxa de bits variable ofereix una millor relació entre la qualitat i velocitat de bits mitjana, però en alguns casos rars pot provocar problemes de compatibilitat i de memòria intermèdia (buffering).", + "LabelEnableAudioVbr": "Habilita la codificació d'àudio VBR", + "LabelEnableAudioVbrHelp": "La taxa variable de bits ofereix una millor relació entre la qualitat i velocitat mitjana de bits, però en alguns casos rars pot provocar problemes de compatibilitat i de memòria intermèdia.", "LabelTonemappingMode": "Mode de mapeig de to", "EnableAudioNormalization": "Normalització d'àudio", - "LabelEnableLUFSScan": "Activa l'escaneig LUFS", + "LabelEnableLUFSScan": "Habilita l'escaneig LUFS", "Select": "Seleccionar", "LabelEnableLUFSScanHelp": "Els clients poden normalitzar la reproducció d'àudio per obtenir un nivell de volum igual entre pistes d'àudio. Això farà que els escanejos de la mediateca s'allarguin més i els calgui més recursos.", "TonemappingModeHelp": "Selecciona el mode de mapeig de to. Si experimentes zones sobreexposades, prova a canviar al mode RGB.", @@ -1741,8 +1741,8 @@ "LogLevel.Warning": "Advertència", "GoHome": "Ves a l'inici", "HearingImpairedShort": "HI/SDH", - "LabelBackdropScreensaverInterval": "Interval del fons estalvi de pantalles", - "LabelBackdropScreensaverIntervalHelp": "El temps en segons entre els diferents fons quan s'utilitza l'estalvi de pantalles amb els fons.", + "LabelBackdropScreensaverInterval": "Interval de l'estalvi de pantalla de fons", + "LabelBackdropScreensaverIntervalHelp": "El temps en segons entre els diferents fons quan s'utilitza l'estalvi de pantalla de fons.", "LabelSyncPlayNoGroups": "No hi ha grups disponibles", "GridView": "Vista de graella", "BackdropScreensaver": "Estalvis de pantalla de fons", @@ -1901,7 +1901,7 @@ "LabelNotInstalled": "No instal·lat", "PluginDisableError": "S'ha produït un error en deshabilitar el complement.", "PluginEnableError": "S'ha produït un error en habilitar el complement.", - "LabelEnablePlugin": "Habilitar complement", + "LabelEnablePlugin": "Habilita el complement", "LabelInstalled": "Instal·lat", "LabelNoChangelog": "No s'ha proporcionat cap registre de canvis per a aquesta versió.", "LabelRepository": "Repositori", @@ -1927,10 +1927,10 @@ "LabelTrickplayKeyFrameOnlyExtractionHelp": "Només extreure fotogrames clau per a un processament significativament més ràpid amb una sincronització menys precisa. Si el descodificador de maquinari configurat no admet aquest mode, en el seu lloc s'utilitzarà el descodificador per programari.", "AllowTonemappingSoftwareHelp": "El mapatge de tons pot transformar el rang dinàmic d'un vídeo d'HDR a SDR mantenint els detalls i els colors de la imatge, que són informació molt important per representar l'escena original. Actualment, només funciona amb vídeos HDR10, HLG i DoVi de 10 bits.", "LabelDuration": "Duració", - "LabelDropLyricsHere": "Arrossega i deixa anar les lletres aquí, o fes clic aquí per cercar-les.", + "LabelDropLyricsHere": "Arrossega i deixa-hi anar les lletres, o clica-hi per a cercar-les.", "AllowFmp4TranscodingContainerHelp": "Permet el contenidor de transcodificació fMP4 per a aquest sintonitzador, per habilitar continguts HEVC i HDR. No tots els sintonitzadors són compatibles amb aquest contenidor. Desactiveu-ho si experimenteu problemes de reproducció.", "AllowStreamSharingHelp": "Permet que Jellyfin dupliqui el flux mpegts del sintonitzador i comparteixi aquest flux duplicat amb els seus clients. Això és útil quan el sintonitzador té un límit en la quantitat total de reproduccions, però també pot causar problemes de reproducció.", - "LabelCustomTagDelimiters": "Limitador d'etiquetes personalitzat", + "LabelCustomTagDelimiters": "Limitador personalitzat d'etiquetes", "Anime": "Anime", "DisableVbrAudioEncodingHelp": "Evita que el servidor codifiqui àudio en VBR per a aquest client.", "EnableHi10p": "Habilita el perfil H.264 High 10", @@ -1943,15 +1943,15 @@ "HeaderAudioAdvanced": "Àudio avançat", "LabelAllowFmp4TranscodingContainer": "Permet el contenidor de transcodificació fMP4", "LabelAudioTagSettings": "Configuració de les etiquetes d'àudio", - "LabelCustomTagDelimitersHelp": "Caràcters que es consideraran delimitadors per separar etiquetes.", + "LabelCustomTagDelimitersHelp": "Caràcters que es consideraran delimitadors per a separar etiquetes.", "LabelQsvDevice": "Dispositiu QSV", "MediaSegmentAction.None": "Cap", "MediaSegmentAction.Skip": "Saltar", "MediaSegmentType.Intro": "Introducció", "LabelDelimiterWhitelist": "Llista blanca de delimitadors", "LabelDelimiterWhitelistHelp": "Elements a excloure de la divisió d'etiquetes. Un element per línia.", - "LabelDisableVbrAudioEncoding": "Desactivar codificació d'àudio VBR", - "LabelFallbackMaxStreamingBitrate": "Taxa de bitrate màxima de retorn (Mbps)", + "LabelDisableVbrAudioEncoding": "Desactiva la codificació d'àudio VBR", + "LabelFallbackMaxStreamingBitrate": "Velocitat de bits màxima de retorn (Mbps)", "MessageCancelSeriesTimerError": "S'ha produït un error cancel·lant el temporitzador de la sèrie", "MessageCancelTimerError": "S'ha produït un error cancel·lant el temporitzador", "MoviesAndShows": "Pel·lícules i sèries", From f226155e46a369bc85d19fdcd8ef3ee88bb48c7a Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Wed, 18 Jun 2025 15:12:20 -0400 Subject: [PATCH 495/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 92 ++++++++++++++++++++++----------------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 42c0730a4..755dd315b 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -71,7 +71,7 @@ "Down": "Avall", "Download": "Descarrega", "Edit": "Edita", - "EditImages": "Edita les imatges", + "EditImages": "Edició d'imatges", "EditSubtitles": "Edita els subtítols", "EnableCinemaMode": "Mode de cinema", "EnableDisplayMirroring": "Duplicació de pantalla", @@ -262,15 +262,15 @@ "LabelServerNameHelp": "Aquest nom s'utilitzarà per identificar el servidor i es convertirà per defecte en el nom d'amfitrió del servidor.", "LabelGroupMoviesIntoCollections": "Agrupa pel·lícules en col·leccions", "LabelHomeScreenSectionValue": "Secció {0} de la pantalla d'inici", - "LabelHttpsPort": "Port local HTTPS", + "LabelHttpsPort": "Número del port local HTTPS", "LabelIconMaxHeight": "Alçada màxima de la icona", "LabelIconMaxWidth": "Amplada màxima de la icona", "LabelImageType": "Tipus d'imatge", "LabelKeepUpTo": "Mantingues fins a", "LabelKodiMetadataDateFormat": "Format de la data d'estrena", - "LabelKodiMetadataEnablePathSubstitution": "Habilita la substitució de directoris", - "LabelKodiMetadataEnablePathSubstitutionHelp": "Habilitar la substitució de directoris emprant les opcions de substitució de directoris del servidor.", - "LabelKodiMetadataSaveImagePaths": "Desar els directoris de les imatges als fitxers NFO", + "LabelKodiMetadataEnablePathSubstitution": "Habilita la substitució de rutes", + "LabelKodiMetadataEnablePathSubstitutionHelp": "Habilita la substitució de rutes d'imatges, fent servir la configuració de rutes de substitució del servidor.", + "LabelKodiMetadataSaveImagePaths": "Desa les rutes de les imatges als fitxers NFO", "LabelLanguage": "Idioma", "LabelLocalHttpServerPortNumber": "Port local HTTP", "LabelLockItemToPreventChanges": "Bloca aquest element per a evitar canvis futurs en les metadades", @@ -279,8 +279,8 @@ "LabelManufacturer": "Fabricant", "LabelManufacturerUrl": "URL del fabricant", "LabelMaxBackdropsPerItem": "Nombre màxim d'imatges de fons per element", - "LabelMaxParentalRating": "Qualificació de control parental màxima permesa", - "LabelMaxResumePercentage": "Percentatge màxim per resumir", + "LabelMaxParentalRating": "Classificació màxima permesa de control parental", + "LabelMaxResumePercentage": "Percentatge màxim per a reprendre", "LabelMaxResumePercentageHelp": "Es considerarà que s'ha reproduït del tot si s'atura després d'aquest temps.", "LabelMaxScreenshotsPerItem": "Nombre màxim de captures de pantalla per ítem:", "LabelMaxStreamingBitrateHelp": "Especifica un bitrate màxim quan es faci streaming.", @@ -288,27 +288,27 @@ "LabelMessageTitle": "Títol del missatge", "LabelMetadata": "Metadada", "LabelMetadataDownloadLanguage": "Idioma preferit de descàrrega", - "LabelMetadataPath": "Directori de metadades", + "LabelMetadataPath": "Ruta de metadades", "LabelMetadataPathHelp": "Especifiqueu un directori personalitzat per a les imatges i metadades descarregades.", "LabelMethod": "Mètode", "LabelMinBackdropDownloadWidth": "Amplada mínima de descàrrega de la imatge de fons", - "LabelMinResumeDuration": "Durada mínima per resumir", - "LabelMinResumeDurationHelp": "La durada del vídeo més curta en segons que permetrà desar la ubicació de la reproducció i permetre reprendre-la.", - "LabelMinResumePercentage": "Percentatge mínim per resumir", + "LabelMinResumeDuration": "Durada mínima per a reprendre", + "LabelMinResumeDurationHelp": "La durada del vídeo mínima en segons que permetrà desar la ubicació de la reproducció i permetre reprendre-la.", + "LabelMinResumePercentage": "Percentatge mínim per a reprendre", "LabelMinResumePercentageHelp": "Es considerarà que no s'ha reproduït si s'atura abans d'aquest temps.", "LabelMinScreenshotDownloadWidth": "Amplada mínima de descàrrega de la captura de pantalla:", "LabelModelDescription": "Descripció del model", "LabelModelName": "Nom del model", "LabelModelNumber": "Nombre de model", "LabelMonitorUsers": "Supervisar l'activitat de", - "LabelMovieRecordingPath": "Directori de gravació de pel·lícules", + "LabelMovieRecordingPath": "Ruta d'enregistrament de pel·lícules", "LabelName": "Nom", - "LabelNewName": "Nou nom", + "LabelNewName": "Nom nou", "LabelNewPassword": "Contrasenya nova", "LabelNewPasswordConfirm": "Confirmeu la contrasenya nova", "LabelNotificationEnabled": "Habilita aquesta notificació", "LabelNumber": "Nombre", - "LabelNumberOfGuideDays": "Nombre de dies de dades de la guia a descarregar", + "LabelNumberOfGuideDays": "Nombre de dies a descarregar-ne les dades de la programació", "LabelOriginalAspectRatio": "Relació d'aspecte original", "LabelOriginalTitle": "Títol original", "LabelOverview": "Sinopsi", @@ -871,7 +871,7 @@ "WriteAccessRequired": "El Jellyfin necessita accés d'escriptura a aquesta carpeta. Garanteix l'accés d'escriptura i torna-ho a intentar.", "Whitelist": "Llista blanca", "WeeklyAt": "{0} S a {1}", - "ViewAlbumArtist": "Veure artista àlbum", + "ViewAlbumArtist": "Mostra l'artista de l'àlbum", "VideoAudio": "Vídeo Audio", "Video": "Vídeo", "Vertical": "Vertical", @@ -925,7 +925,7 @@ "SyncPlayAccessHelp": "La funció SyncPlay permet sincronitzar la reproducció amb altres dispositius. Seleccioneu el nivell d'accés a SyncPlay que té aquest usuari.", "SubtitleVerticalPositionHelp": "Número de línia on apareix el text. Els nombres positius indiquen dalt a baix. Els nombres negatius indiquen dalt a baix.", "SubtitleOffset": "Subtítol Offset", - "SubtitleDownloadersHelp": "Activa i classificar les seves descarregadors de subtítols preferits en ordre de prioritat.", + "SubtitleDownloadersHelp": "Habilita i classifica els descarregadors de subtítols preferits per ordre de prioritat.", "SubtitleAppearanceSettingsDisclaimer": "La configuració següent no s'aplica als subtítols gràfics esmentats anteriorment ni als subtítols ASS/SSA que incrusten els seus propis estils.", "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "Aquests ajustos s'apliquen també a qualsevol reproducció Google Cast iniciada per aquest dispositiu.", "Subtitle": "Subtítol", @@ -1071,7 +1071,7 @@ "ListPaging": "{0} - {1} de {2}", "List": "Llista", "LeaveBlankToNotSetAPassword": "Podeu deixar aquest camp en blanc per a no establir cap contrasenya.", - "LearnHowYouCanContribute": "Aprendre com pot contribuir.", + "LearnHowYouCanContribute": "Aprengueu com hi podeu contribuir.", "LastSeen": "Última activitat {0}", "Large": "Gran", "LanNetworksHelp": "Llista separada per comes d'adreces IP o IP/netmask que seran considerades part de la xarxa local a l'hora de fer complir les restriccions d'amplada de banda. Si s'estableix, totes les altres adreces IP es consideraran part de la xarxa externa i estaran subjectes a les restriccions d'amplada de banda externs. Si es deixa en blanc, només la subxarxa del servidor es considerarà part a la xarxa local.", @@ -1131,7 +1131,7 @@ "LabelSyncPlayPlaybackDiff": "Diferència de temps de reproducció", "LabelSyncPlayNewGroupDescription": "Crea un grup nou", "LabelSyncPlayNewGroup": "Grup nou", - "LabelSyncPlayLeaveGroupDescription": "Desactivar SyncPlay", + "LabelSyncPlayLeaveGroupDescription": "Desactiva SyncPlay", "LabelSyncPlayLeaveGroup": "Surt del grup", "LabelSyncPlayHaltPlaybackDescription": "I ignorar les actualitzacions de llista de reproducció actual", "LabelSyncPlayHaltPlayback": "Aturar la reproducció local", @@ -1156,7 +1156,7 @@ "Remuxing": "Recodificació", "MusicVideos": "Videoclips", "Trailers": "Tràilers", - "LabelGroupMoviesIntoCollectionsHelp": "Pel·lícules en una col·lecció seran agrupades com una sola llista en mostrar les llistes de pel·lícules.", + "LabelGroupMoviesIntoCollectionsHelp": "En mostrar les llistes de pel·lícules, les que pertanyin a una col·lecció es mostraran com a un element agrupat.", "LabelffmpegPathHelp": "La ruta d'accés al fitxer de l'aplicació de FFmpeg o del directori que la conté.", "LabelEnableSSDPTracingHelp": "Permetin als detalls de la xarxa SSDP rastreig que s'ha de registrar.
ADVERTÈNCIA:. Això farà que seria degradació del rendiment.", "LabelBaseUrlHelp": "Afegiu un subdirectori personalitzat a l'adreça URL de servidor. Per exemple: http://example.com/<baseurl>", @@ -1212,52 +1212,52 @@ "LabelNewsCategories": "Categories de notícies", "LabelMusicStreamingTranscodingBitrateHelp": "Especificar una taxa de bits màxima quan la transmissió de música.", "LabelMusicStreamingTranscodingBitrate": "Música transcodificació taxa de bits", - "LabelMoviePrefixHelp": "Si un prefix s'aplica als títols de pel·lícules, introduir-la aquí pel que el servidor pot gestionar de forma adequada.", + "LabelMoviePrefixHelp": "Si s'aplica a un prefix a títols de pel·lícules, introduïu-la aquí per a què el servidor pugui gestionar-ho de forma adequada.", "LabelMoviePrefix": "Prefix de la pel·lícula", - "LabelMovieCategories": "Categories Pel·lícula", + "LabelMovieCategories": "Categories de pel·lícules", "LabelModelUrl": "Model URL", "LabelMinAudiobookResumeHelp": "Es considera que els títols no s'han començat si la reproducció s'atura abans d'aquest temps.", "LabelMinAudiobookResume": "Represa mínima de l'audiollibre en minuts", - "LabelMetadataSaversHelp": "Triar els formats d'arxiu a utilitzar al desar les metadades.", + "LabelMetadataSaversHelp": "Trieu els formats de fitxers a fer servir en desar les metadades.", "LabelMetadataSavers": "Protectors de metadades", - "LabelMetadataReadersHelp": "Classificar les fonts de metadades locals preferides per ordre de prioritat. serà llegit el primer arxiu trobat.", + "LabelMetadataReadersHelp": "Classifica les fonts preferides de metadades locals per ordre de prioritat. El primer fitxer trobat serà llegit.", "LabelMetadataReaders": "Lectors de metadades", - "LabelMetadataDownloadersHelp": "Activa i classificar les seves descarregadors de metadades preferits en ordre de prioritat. Inferiors descarregadors de prioritat només s'utilitzen per suplir la falta d'informació.", + "LabelMetadataDownloadersHelp": "Habilita i classifica els descarregadors de metadades preferits en ordre de prioritat. Els de menor prioritat només es faran servir per a completar la manca d'informació.", "LabelMaxStreamingBitrate": "Màxima qualitat en streaming", - "LabelMaxMuxingQueueSizeHelp": "Nombre màxim de paquets que poden estar en buffer a l'espera que els fluxos s'inicialitzin. Intenteu incrementar-lo si teniu l'error \"Too many packets buffered for output stream\" als registres de FFmpeg. El valor recomanat és 2048.", - "LabelMaxMuxingQueueSize": "Max Muxing mida de la cua", - "LabelMaxChromecastBitrate": "Google Cast qualitat de streaming", + "LabelMaxMuxingQueueSizeHelp": "Nombre màxim de paquets que poden estar a la memòria intermèdia a l'espera que els fluxos s'inicialitzin. Intenteu incrementar-lo si teniu l'error \"Too many packets buffered for output stream\" als registres de FFmpeg. El valor recomanat és 2048.", + "LabelMaxMuxingQueueSize": "Mida màxima de la cua d'entremesclat", + "LabelMaxChromecastBitrate": "Qualitat de transmissió de vídeo del Google Cast", "LabelMaxAudiobookResumeHelp": "S'assumeix que els títols s'han vist fins al final si en aturar-se queda pendent una duració menor a aquesta.", "LabelMaxAudiobookResume": "Minuts que resten per a reiniciar l'audiollibre", "LabelMatchType": "Tipus de partida", - "LabelLoginDisclaimer": "Advertiment d'inici de sessió", + "LabelLoginDisclaimer": "Avís d'inici de sessió", "LabelLocalHttpServerPortNumberHelp": "El número de port TCP per al servidor HTTP.", - "LabelLocalCustomCss": "Estil CSS personalitzat que s'aplica només a aquest client. És possible que vulgueu desactivar el servidor de CSS personalitzat.", - "LabelLineup": "Els titulars", + "LabelLocalCustomCss": "Codi CSS personalitzat per a canvis d'estil que s'apliquen només a aquest client. És possible que vulgueu deshabilitar el servidor personalitzat de codi CSS.", + "LabelLineup": "Programació", "LabelLibraryPageSizeHelp": "Estableix la quantitat d'elements a mostrar en una pàgina de la mediateca. Es posa a 0 per tal de desactivar la paginació.", - "LabelLibraryPageSize": "Mida de pàgina de la mediateca", + "LabelLibraryPageSize": "Mida de la pàgina de la mediateca", "LabelLanNetworks": "Xarxes LAN", - "LabelKodiMetadataUserHelp": "Guarda les dades de visionat en arxius NFO de manera que altres aplicacions les puguin utilitzar.", - "LabelKodiMetadataUser": "Guardar les dades de visualització d'usuari en arxius NFO per a", - "LabelKodiMetadataSaveImagePathsHelp": "Això es recomana si vostè té els noms d'arxiu d'imatge que no s'ajusten a les directrius de Kodi.", - "LabelKodiMetadataEnableExtraThumbsHelp": "Quan es descarreguin imatges, es poden guardar tant a \"extrafanart\" i \"extrathumbs\" per assegurar la màxima compatibilitat amb els skins del Kodi.", - "LabelKodiMetadataEnableExtraThumbs": "Còpia extrafanart a el camp extrathumbs", - "LabelKodiMetadataDateFormatHelp": "Totes les dates dins d'arxius NFO seran analitzats usant aquest format.", - "LabelKnownProxies": "Proxies coneguts", - "LabelKidsCategories": "Categories dels nens", + "LabelKodiMetadataUserHelp": "Desa les dades de visionat en arxius NFO de manera que d'altres aplicacions les puguin fer servir.", + "LabelKodiMetadataUser": "Desa les dades de visualització d'usuari en fitxers NFO per a", + "LabelKodiMetadataSaveImagePathsHelp": "Això està recomanat si teniu fitxers d'imatge que no s'ajusten a les directrius de Kodi.", + "LabelKodiMetadataEnableExtraThumbsHelp": "Quan es descarreguin imatges, es poden guardar tant a \"extrafanart\" com a \"extrathumbs\" per a assegurar la màxima compatibilitat amb les aparences de Kodi.", + "LabelKodiMetadataEnableExtraThumbs": "Còpia extrafanart al camp extrathumbs", + "LabelKodiMetadataDateFormatHelp": "Totes les dates dins d'arxius NFO seran analitzades fent servir aquest format.", + "LabelKnownProxies": "Servidors intermediaris coneguts", + "LabelKidsCategories": "Categories infantils", "LabelIsForced": "Forçat", "LabelInternetQuality": "Qualitat d'Internet", "LabelInNetworkSignInWithEasyPasswordHelp": "Utilitzeu el codi PIN fàcil d'accedir als clients dins de la seva xarxa local. només es necessita la contrasenya habitual fora de casa. Si el codi PIN està en blanc esquerre, no es necessita una contrasenya dins de la seva xarxa domèstica.", "LabelInNetworkSignInWithEasyPassword": "Activa senyal dins de la xarxa amb el meu codi PIN fàcil", - "LabelImportOnlyFavoriteChannels": "Restringir als canals marcats com a favorits", - "LabelImageFetchersHelp": "Activa i classificar les seves Fetchers imatge preferents en ordre de prioritat.", + "LabelImportOnlyFavoriteChannels": "Restringeix als canals marcats com a preferits", + "LabelImageFetchersHelp": "Habilita i classifica els rastrejadors preferits d'imatges, en ordre de prioritat.", "LabelIdentificationFieldHelp": "Una subcadena entre majúscules i minúscules o expressió d'expressions regulars.", "LabelIconMaxResHelp": "La resolució màxima d'icones exposades a través de la propietat 'upnp:icon'.", "LabelHttpsPortHelp": "El número de port TCP per al servidor HTTPS.", "LabelHomeNetworkQuality": "Qualitat de la xarxa domèstica", "LabelHDHomerunPortRangeHelp": "Restringeix el rang de ports UDP HDHomeRun a aquest valor. (Per defecte és 1024-65535).", "LabelHDHomerunPortRange": "Rang de ports de l'HDHomeRun", - "LabelHardwareAccelerationTypeHelp": "L'acceleració de maquinari requereix una configuració addicional.", + "LabelHardwareAccelerationTypeHelp": "L'acceleració de maquinari requereix d'una configuració addicional.", "LabelHardwareAccelerationType": "L'acceleració de maquinari", "LabelH265Crf": "H.265 codifica CRF", "LabelH264Crf": "H.264 codifica CRF", @@ -1547,7 +1547,7 @@ "LabelSyncPlaySettingsExtraTimeOffsetHelp": "Ajusta manualment el temps de compensació amb el dispositiu seleccionat per la sincronització del temps. Ajustar amb cura.", "LabelSyncPlaySettingsDescription": "Canvia les preferències de SyncPlay", "LabelMaxDaysForNextUp": "Màxim de dies per \"A continuació\"", - "LabelHardwareEncoding": "Codificació per Hardware", + "LabelHardwareEncoding": "Codificació per maquinari", "ErrorPlayerNotFound": "No s'ha trobat cap reproductor per al fitxer multimèdia sol·licitat.", "SelectAll": "Selecciona-ho tot", "DirectPlayError": "Hi ha hagut un error en iniciar la reproducció en directe", @@ -1652,7 +1652,7 @@ "HomeVideosPhotos": "Vídeos i fotos personals", "IgnoreDts": "Ignora DTS (descodificació de la marca de temps)", "IgnoreDtsHelp": "Desactivar aquesta opció pot resoldre alguns problemes. Per exemple, àudio absent a canals amb vídeo i àudio rebuts per separat.", - "LabelMaxVideoResolution": "Resolució màxima permesa en transcodificar vídeo", + "LabelMaxVideoResolution": "Resolució màxima permesa en transcodificar un vídeo", "MessageNoFavoritesAvailable": "No hi han preferits disponibles actualment.", "OptionDateEpisodeAdded": "Data d'addició de l'episodi", "MessageNoItemsAvailable": "No hi han elements disponibles actualment.", @@ -2011,7 +2011,7 @@ "MetadataImagesLoadError": "No s'han pogut carregar les configuracions de metadades", "StreamCountExceedsLimit": "El número de flux excedeix el límit", "RetryWithGlobalSearch": "Reintentar amb una cerca global", - "LabelGroupShowsIntoCollections": "Agrupar sèries en col·leccions", + "LabelGroupShowsIntoCollections": "Agrupa sèries en col·leccions", "LabelGroupShowsIntoCollectionsHelp": "Les sèries que estiguin dins d'una col·lecció es mostraran com un únic element agrupat quan es mostrin les llistes de sèries.", "CustomSplashScreenSize": "Les imatges personalitzades haurien de ser en 16x9 de ràtio d'aspecte i a una mida mínima de 1920x1080.", "DeleteCustomImage": "Elimina la imatge personalitzada", @@ -2028,7 +2028,7 @@ "ViewSettings": "Configuració de visualització", "DownloadManager": "Descàrregues", "MessageForgotPasswordPinReset": "Introduïu el PIN aquí per a acabar el restabliment de la contrasenya", - "LabelImageCache": "Imatges en el cache", + "LabelImageCache": "Imatges a la memòria cau", "MessageBackupDisclaimer": "Depenent de la mida de la mediateca, la còpia de seguretat pot trigar una estona.", "MessageRestoreDisclaimer": "ATENCIÓ: Estàs a punt de restaurar una còpia de seguretat anterior. El seu servidor no serà utilitzable durant el procés i les dades creades des del moment de l'inici de la còpia seran perdudes.", "MessageWaitingForServer": "Esperant al servidor...", From 9d48649e80ae2ae98e6ad85c2ef62134a1bd797e Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Wed, 18 Jun 2025 17:50:31 -0400 Subject: [PATCH 496/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 68 ++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 755dd315b..f44aa9672 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -39,7 +39,7 @@ "ButtonRefreshGuideData": "Actualitza les dades de la guia", "ButtonRemove": "Elimina", "ButtonResetEasyPassword": "Restabliu el codi Easy PIN", - "ButtonResume": "Reprèn", + "ButtonResume": "Continuació", "ButtonSelectDirectory": "Seleccioneu el directori", "ButtonSend": "Envia", "ButtonShutdown": "Apaga", @@ -70,9 +70,9 @@ "DoNotRecord": "No enregistris", "Down": "Avall", "Download": "Descarrega", - "Edit": "Edita", + "Edit": "Edició", "EditImages": "Edició d'imatges", - "EditSubtitles": "Edita els subtítols", + "EditSubtitles": "Edició dels subtítols", "EnableCinemaMode": "Mode de cinema", "EnableDisplayMirroring": "Duplicació de pantalla", "Ended": "Acabades", @@ -314,21 +314,21 @@ "LabelOverview": "Sinopsi", "LabelPassword": "Contrasenya", "LabelPasswordRecoveryPinCode": "Codi PIN", - "LabelPath": "Directori", - "LabelPersonRole": "Rol", + "LabelPath": "Ruta", + "LabelPersonRole": "Paper", "LabelPersonRoleHelp": "Exemple: Conductor de camió de gelats", "LabelPlaceOfBirth": "Lloc de naixement", - "LabelPlayDefaultAudioTrack": "Reprodueix la pista d'àudio per defecte independentment de l'idioma", + "LabelPlayDefaultAudioTrack": "Reprodueix la pista d'àudio per defecte, independentment de l'idioma", "LabelPlaylist": "Llista de reproducció", - "LabelPreferredDisplayLanguage": "Idioma de visualització preferit", - "LabelPreferredSubtitleLanguage": "Idioma preferit de subtítols", + "LabelPreferredDisplayLanguage": "Idioma preferit de visualització", + "LabelPreferredSubtitleLanguage": "Idioma preferit dels subtítols", "LabelProfileAudioCodecs": "Còdecs d'àudio", "LabelProfileCodecs": "Còdecs", "LabelProfileContainer": "Contenidor", "LabelProfileVideoCodecs": "Còdecs de vídeo", "LabelProtocolInfo": "Informació del protocol", - "LabelPublicHttpPort": "Port HTTP públic", - "LabelPublicHttpsPort": "Port HTTPS públic", + "LabelPublicHttpPort": "Número del port públic HTTP", + "LabelPublicHttpsPort": "Número del port HTTPS públic", "LabelRecord": "Enregistra", "LabelRecordingPath": "Directori de gravació per defecte", "LabelRefreshMode": "Mode de refresc", @@ -432,10 +432,10 @@ "OptionAllowRemoteSharedDevices": "Permetre el control remot dels dispositius compartits", "OptionAllowRemoteSharedDevicesHelp": "Els dispositius DLNA es consideren compartits fins que un usuari comença a controlar-los.", "OptionAllowUserToManageServer": "Permet a aquest usuari gestionar el servidor", - "OptionCommunityRating": "Valoració de la Comunitat", - "OptionCriticRating": "Valoració dels Crítics", + "OptionCommunityRating": "Valoració de la comunitat", + "OptionCriticRating": "Valoració dels crítics", "OptionDaily": "Diari", - "OptionDateAdded": "Data Afegida", + "OptionDateAdded": "Data que es va afegir", "OptionDateAddedImportTime": "Empra la data d'escaneig", "OptionDatePlayed": "Data de Reproducció", "OptionDisableUser": "Desactiva aquest usuari", @@ -571,7 +571,7 @@ "ValueMusicVideoCount": "{0} vídeos musicals", "ValueOneMusicVideo": "1 vídeo musical", "ValueSpecialEpisodeName": "Especial - {0}", - "ViewAlbum": "Veure àlbum", + "ViewAlbum": "Mostra'n l'àlbum", "ViewPlaybackInfo": "Veure informació de reproducció", "Watched": "Vist", "Wednesday": "Dimecres", @@ -828,8 +828,8 @@ "SubtitleCodecNotSupported": "El còdec de subtítols no s'admet", "ContainerNotSupported": "El contenidor no està suportat", "AudioCodecNotSupported": "El còdec d'àudio no és compatible", - "EnableGamepadHelp": "Escoltar per l'entrada de qualsevol controladors connectats. (Requereix el mode de visualització \"TV\")", - "LabelEnableGamepad": "Habilitar Gamepad", + "EnableGamepadHelp": "Detecta l'entrada de qualsevol comandament connectat. (Requereix el mode de visualització \"TV\")", + "LabelEnableGamepad": "Habilita el comandament de videojocs", "Controls": "Controls", "AllowVppTonemappingHelp": "Mapeig de to basat en controladors Intel complets. Actualment només funciona amb cert maquinari amb vídeos HDR10. Això té una prioritat més alta en comparació amb una altra implementació d'OpenCL.", "EnableVppTonemapping": "Habilitar l'assignació de to VPP", @@ -1186,29 +1186,29 @@ "LabelReasonForTranscoding": "Motiu de transcodificació", "LabelQuickConnectCode": "Codi de Quick Connect", "LabelPublishedServerUriHelp": "Anul·lar l'URI utilitzat per Jellyfin, basat en la interfície, o l'adreça IP de client. Per exemple: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, or all=https://jellyfin.example.com", - "LabelPublishedServerUri": "URI servidor publicat", - "LabelPublicHttpsPortHelp": "El número de port públic que hauria de ser assignada a l'port HTTPS local.", - "LabelPublicHttpPortHelp": "El número de port públic que hauria de ser assignada a l'port local HTTP.", + "LabelPublishedServerUri": "URI del servidor publicades", + "LabelPublicHttpsPortHelp": "El número de port públic que hauria de ser enllaçat al port HTTPS local.", + "LabelPublicHttpPortHelp": "El número de port públic que hauria de ser enllaçat al port local HTTP.", "LabelProtocolInfoHelp": "El valor que s'utilitzarà quan es respon a GetProtocolInfo sol·licita des del dispositiu.", "LabelProtocol": "Protocol", "LabelProfileContainersHelp": "Separats per comes. Es pot deixar buit per aplicar a tots els contenidors.", "LabelProfileCodecsHelp": "Separats per comes. Es pot deixar buit per aplicar a tots els còdecs.", - "LabelPostProcessorArgumentsHelp": "Ús {ruta} com la ruta de l'arxiu de gravació.", - "LabelPostProcessorArguments": "Post-processador arguments de línia de comandes", + "LabelPostProcessorArgumentsHelp": "Fes servir {path} com a la ruta del fitxer d'enregistrament.", + "LabelPostProcessorArguments": "Arguments de la línia de comandes post-processador", "LabelPostProcessor": "Aplicació de post-processament", "LabelPleaseRestart": "Els canvis tindran efecte després de tornar a carregar el client web manualment.", "LabelPlayMethod": "Mètode de reproducció", "LabelPlayerDimensions": "Dimensions del reproductor", "LabelPlayer": "Reproductor", - "LabelPasswordResetProvider": "Restabliment de la contrasenya de l'proveïdor", + "LabelPasswordResetProvider": "Restabliment de la contrasenya del proveïdor", "LabelPasswordConfirm": "Contrasenya (confirmació)", - "LabelParentNumber": "Nombre de Pares", + "LabelParentNumber": "Nombre de pares", "LabelParentalRating": "Classificació parental", "LabelOptionalNetworkPathHelp": "Si aquesta carpeta es comparteix a la xarxa, el subministrament de la ruta del recurs compartit de xarxa pot permetre als clients accedir directament als fitxers dels continguts multimèdia des d'altres dispositius. Per exemple, {0} o {1}.", - "LabelOptionalNetworkPath": "Carpeta de xarxa compartida", - "LabelOpenclDeviceHelp": "Aquest és el dispositiu OpenCL que s'utilitza pel mapeig de to. El costat esquerra de el punt és el nombre de la plataforma, i el costat dret és el nombre de dispositiu a la plataforma. El valor per omissió és 0,0. Es requereix que l'arxiu de l'aplicació FFmpeg que conté el mètode d'acceleració de maquinari OpenCL.", - "LabelOpenclDevice": "OpenCL Dispositiu", - "LabelNumberOfGuideDaysHelp": "Descarregar més dies de dades de la guia ofereix la possibilitat de programar amb més antelació i veure més llistas, però també trigarà més temps a l'hora de descarregar. \"Auto\" triarà en funció del nombre de canals.", + "LabelOptionalNetworkPath": "Directori de xarxa compartida", + "LabelOpenclDeviceHelp": "Aquest és el dispositiu OpenCL que s'utilitza pel mapeig de tons. El costat esquerra del punt és el número de la plataforma, la dreta és el número de dispositiu a la plataforma. El valor per defecte és 0,0. Es requereix que el fitxer de l'aplicació FFmpeg que conté el mètode d'acceleració de maquinari OpenCL.", + "LabelOpenclDevice": "Dispositiu OpenCL", + "LabelNumberOfGuideDaysHelp": "Descarregar les dades de més dies de la guia ofereix la possibilitat de programar amb més antelació i veure més llistats, però també trigarà més temps a l'hora de descarregar. \"Auto\" triarà en funció del nombre de canals.", "LabelNewsCategories": "Categories de notícies", "LabelMusicStreamingTranscodingBitrateHelp": "Especificar una taxa de bits màxima quan la transmissió de música.", "LabelMusicStreamingTranscodingBitrate": "Música transcodificació taxa de bits", @@ -1350,7 +1350,7 @@ "LabelAbortedByServerShutdown": "(Avortat pel tancament de servidor)", "Label3DFormat": "Format 3D", "KnownProxiesHelp": "Llista separada per comes de les adreces IP o els noms d'amfitrió de servidors proxy coneguts que s'utilitzen quan es connecta a la instància del Jellyfin. Això és necessari per fer un ús correcte de les capçaleres 'X-Forwarded-For'. Requereix un reinici després de desar.", - "Kids": "Nens", + "Kids": "Infants", "Items": "Elements", "ImportFavoriteChannelsHelp": "Només s'importaran els canals que estiguin marcats com a favorits al dispositiu sintonitzador.", "Image": "Imatge", @@ -1531,7 +1531,7 @@ "HeaderIdentifyItemHelp": "Introduïu un o més criteris de cerca. Elimineu criteris per a augmentar els resultats de cerca.", "HeaderHttpsSettings": "Configuració de HTTPS", "HeaderGuideProviders": "Proveïdors de dades de la guia de TV", - "HeaderForKids": "Per als nens", + "HeaderForKids": "Per als infants", "HeaderFetcherSettings": "Configuració del capturador", "HeaderError": "Error", "HeaderEnabledFieldsHelp": "Desseleccioneu un camp per a bloquejar-lo i impedir un canvi de les seves dades.", @@ -1663,7 +1663,7 @@ "MediaInfoRpuPresentFlag": "Flag DV rpu predeterminat", "MediaInfoDvBlSignalCompatibilityId": "Identificador de compatibilitat del senyal DV bl", "Unreleased": "Encara no s'ha publicat", - "OptionDateShowAdded": "Data de la Sèrie afegida", + "OptionDateShowAdded": "Data de la sèrie afegida", "RememberAudioSelectionsHelp": "Intentar establir la pista d'àudio amb la coincidència més semblant a l'últim vídeo.", "RememberSubtitleSelectionsHelp": "Intentar configurar la pista de subtítols amb la coincidència més semblant a l'últim vídeo.", "RememberAudioSelections": "Establir la pista d'àudio en funció de l'element anterior", @@ -1701,7 +1701,7 @@ "SaveRecordingNFOHelp": "Desa les metadades del proveïdor de llistats EPG amb els fitxers multimèdia.", "HeaderPerformance": "Rendiment", "LabelDummyChapterCountHelp": "El nombre màxim d'imatges del capítol que s'extreuran per a cada fitxer multimèdia.", - "LabelParallelImageEncodingLimit": "Límit de codificació paral·lela d'imatges", + "LabelParallelImageEncodingLimit": "Límit de codificació d'imatges en paral·lel", "LabelParallelImageEncodingLimitHelp": "Nombre màxim de codificacions d'imatge que es poden executar en paral·lel. Si es deixa buit, es triarà un límit en funció del nombre de nuclis.", "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Els extres sovint tenen el mateix nom incrustat que el principal, marqueu-ho per utilitzar-los títols incrustats de totes maneres.", "SaveRecordingNFO": "Desa les metadades EPG d'enregistrament a NFO", @@ -1915,14 +1915,14 @@ "MediaInfoRotation": "Rotació", "MoveToBottom": "Mou al final", "MoveToTop": "Mou al principi", - "EditLyrics": "Edita la lletra", + "EditLyrics": "Edició de la lletra", "HeaderAddLyrics": "Afegeix lletres", "HeaderPreviewLyrics": "Previsualitza lletres", "HeaderUploadLyrics": "Pujada de lletres", "LabelIsSynced": "Està sincronitzat", "NoLyricsSearchResultsFound": "No s'han trobat lletres.", "SearchForLyrics": "Cercar lletres", - "LibraryInvalidItemIdError": "La mediateca està en un estat invàlid, i no es pot editar. És possible que hàgiu trobat un error: la ruta de la base de dades no és una ruta correcta al sistema de fitxers.", + "LibraryInvalidItemIdError": "La mediateca es troba en un estat no vàlid, i no es pot editar. És possible que hàgiu trobat un error: la ruta de la base de dades no és una ruta correcta en el sistema de fitxers.", "LabelTrickplayKeyFrameOnlyExtraction": "Només generar imatges en fotogrames clau", "LabelTrickplayKeyFrameOnlyExtractionHelp": "Només extreure fotogrames clau per a un processament significativament més ràpid amb una sincronització menys precisa. Si el descodificador de maquinari configurat no admet aquest mode, en el seu lloc s'utilitzarà el descodificador per programari.", "AllowTonemappingSoftwareHelp": "El mapatge de tons pot transformar el rang dinàmic d'un vídeo d'HDR a SDR mantenint els detalls i els colors de la imatge, que són informació molt important per representar l'escena original. Actualment, només funciona amb vídeos HDR10, HLG i DoVi de 10 bits.", @@ -1934,7 +1934,7 @@ "Anime": "Anime", "DisableVbrAudioEncodingHelp": "Evita que el servidor codifiqui àudio en VBR per a aquest client.", "EnableHi10p": "Habilita el perfil H.264 High 10", - "HeaderEditPlaylist": "Edita la llista de reproducció", + "HeaderEditPlaylist": "Edició de la llista de reproducció", "HeaderNewPlaylist": "Llista de reproducció nova", "AlwaysRemuxFlacAudioFilesHelp": "Si el vostre navegador rebutja reproduir certs arxius o calcula les marques de temps de manera imprecisa, activeu això com a solució alternativa.", "AlwaysRemuxMp3AudioFilesHelp": "Si el teu navegador calcula les marques de temps de certs arxius de manera imprecisa, activa això com a solució alternativa.", From 2bd632f4094cf67cb9a09661b33c54ffe9628339 Mon Sep 17 00:00:00 2001 From: T Cristian Date: Wed, 18 Jun 2025 17:48:05 -0400 Subject: [PATCH 497/645] Translated using Weblate (Romanian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/ --- src/strings/ro.json | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/strings/ro.json b/src/strings/ro.json index a222fa469..28812a125 100644 --- a/src/strings/ro.json +++ b/src/strings/ro.json @@ -2031,5 +2031,35 @@ "HeaderUpdateRequired": "Actualizare necesară", "ViewSettings": "Vedeți setările", "MessageForgotPasswordPinReset": "Introduceți PIN-ul aici pentru a finaliza resetarea parolei", - "DownloadManager": "Descărcări" + "DownloadManager": "Descărcări", + "MessageBackupDisclaimer": "În funcție de mărimea bibliotecii tale, procesul de copie de rezervă poate să dureze un timp.", + "MessageBackupInProgress": "Copie de rezervă în progres", + "ConfirmDeleteRepository": "Ștergi magazia?", + "DeleteRepositoryConfirmation": "Ești sigur că vrei să ștergi magazia?", + "HeaderBackupsHelp": "Crează și restaurează poze ale serverului care pot include baza de date, metadata, subtitrări și trickplay.", + "LabelBackupsUnavailable": "Nu sunt restaurări disponibile", + "LabelDatabase": "Bază de date", + "LabelProgramData": "Program Data", + "PluginsLoadError": "A apărut o eroare în timp ce încărca plugins.", + "LabelRestore": "Restaurează", + "StorageType.Fixed": "Fixat", + "StorageType.Removable": "Îndepărtabil", + "MessageRestoreDisclaimer": "AVERTISMENT: Ești pe cale să restaurezi dintr-o copie de rezervă anterioară. Serverul tău va fi neutilizabil pe durata acestui proces și orice dată nou creată după copia de rezervă se va pierde.", + "MessageRestoreInProgress": "Restaurare în progres", + "MessageRestoreSuccess": "Restaurarea sa completat cu succes", + "MessageWaitingForServer": "Așteaptă după server...", + "RepositoriesPageLoadError": "A eșuat încărcarea magaziilor", + "StorageType.CDRom": "CD-ROM", + "StorageType.Network": "Rețea", + "StorageType.NoRootDirectory": "Fără Director Sursă", + "StorageType.Ram": "RAM", + "StorageType.Unknown": "Necunoscut", + "Success": "Succes", + "HeaderBackups": "Copii rezervă", + "TranscodingLoadError": "A eșuat să încarce setările de transcodare", + "ButtonLearnMore": "Învață mai mult", + "Create": "Crează", + "BackupsPageLoadError": "A eșuat să încarce pagina de copii de rezervă", + "ButtonCreateBackup": "Crează copie de rezervă", + "LabelImageCache": "Cache imagine" } From 6adf7c2feac79f22997dbd04b4eae1e7625adda9 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Thu, 19 Jun 2025 01:48:56 -0400 Subject: [PATCH 498/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index f44aa9672..c9e83cb32 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -330,9 +330,9 @@ "LabelPublicHttpPort": "Número del port públic HTTP", "LabelPublicHttpsPort": "Número del port HTTPS públic", "LabelRecord": "Enregistra", - "LabelRecordingPath": "Directori de gravació per defecte", + "LabelRecordingPath": "Ruta d'enregistrament per defecte", "LabelRefreshMode": "Mode de refresc", - "LabelReleaseDate": "Estrena", + "LabelReleaseDate": "Data de llançament", "LabelSaveLocalMetadata": "Desa les imatges als directoris multimèdia", "LabelSaveLocalMetadataHelp": "Desar les imatges als directoris multimèdia les ubicarà a un lloc on podran ser editats fàcilment.", "LabelScreensaver": "Estalvi de pantalla", @@ -1181,11 +1181,11 @@ "LabelRepositoryNameHelp": "Un nom per distingir aquest repositori dels altres afegits al servidor.", "LabelRepositoryName": "Nom del repositori", "LabelRemoteClientBitrateLimitHelp": "Un límit opcional de taxa de bits per cada corrent de tot fora dels dispositius de xarxa. Això és útil per evitar que els dispositius de sol·licitar una taxa de bits més alta que la connexió a Internet pot gestionar. Això pot resultar en una major càrrega de la CPU en el servidor per tal de transcodificació de vídeos sobre la marxa a una menor taxa de bits.", - "LabelRemoteClientBitrateLimit": "Streaming per internet límit de taxa de bits (Mbps)", - "LabelRecordingPathHelp": "Especificar la ubicació per defecte per guardar els enregistraments. Si és buit, s'utilitzarà la carpeta de dades de programa de servidor.", + "LabelRemoteClientBitrateLimit": "Límit de la taxa de bits en transmetre per Internet (Mbps)", + "LabelRecordingPathHelp": "Especifiqueu la ubicació per defecte per a desar els enregistraments. Si es deixa buit, es farà servir el directori de dades de programa del servidor.", "LabelReasonForTranscoding": "Motiu de transcodificació", "LabelQuickConnectCode": "Codi de Quick Connect", - "LabelPublishedServerUriHelp": "Anul·lar l'URI utilitzat per Jellyfin, basat en la interfície, o l'adreça IP de client. Per exemple: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, or all=https://jellyfin.example.com", + "LabelPublishedServerUriHelp": "Anul·la l'URI utilitzat per Jellyfin, basat en la interfície, o l'adreça IP de client. Per exemple: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, or all=https://jellyfin.example.com", "LabelPublishedServerUri": "URI del servidor publicades", "LabelPublicHttpsPortHelp": "El número de port públic que hauria de ser enllaçat al port HTTPS local.", "LabelPublicHttpPortHelp": "El número de port públic que hauria de ser enllaçat al port local HTTP.", @@ -1956,7 +1956,7 @@ "MessageCancelTimerError": "S'ha produït un error cancel·lant el temporitzador", "MoviesAndShows": "Pel·lícules i sèries", "LabelLyricDownloaders": "Descarregador de lletres", - "LabelQsvDeviceHelp": "Específica el dispositiu Intel QSV en els sistemes amb múltiples GPU. En sistemes Linux, això és un node de renderitzat, per exemple, /dev/dri/renderD128. En Windows, és un índex de dispositiu que comença a 0. Deixar en blanc si no se sap el que s'està fent.", + "LabelQsvDeviceHelp": "Específica el dispositiu Intel QSV en els sistemes amb múltiples GPU. En sistemes Linux, això és un node de renderitzat, per exemple, /dev/dri/renderD128. En Windows, és un índex de dispositiu que comença al 0. Deixeu-ho en blanc a no ser que sapigueu què esteu fent.", "LabelScreensaverTime": "Temps de l'estalvi de pantalla", "LabelScreensaverTimeHelp": "La quantitat de temps d'inactivitat en segons necessària per activar l'estalvi de pantalla.", "MediaSegmentAction.AskToSkip": "Solicitar saltar", From e8251b2169a49760881e37f126be43b78af1916e Mon Sep 17 00:00:00 2001 From: millallo Date: Thu, 19 Jun 2025 06:58:11 -0400 Subject: [PATCH 499/645] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/it.json b/src/strings/it.json index a858b81ba..8664521ff 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -1461,7 +1461,7 @@ "LabelCreateHttpPortMapHelp": "Consenti la mappatura automatica delle porte per creare una regola per il traffico HTTP oltre al traffico HTTPS.", "LabelCreateHttpPortMap": "Abilita la mappatura automatica delle porte per il traffico HTTP e HTTPS.", "LabelTonemappingPeak": "Valore massimo della mappatura dei toni", - "LabelTonemappingParamHelp": "Regola l'algoritmo di mappatura dei toni. I valori raccomandati e di default sono NaN. Solitamente lasciare vuoto.", + "LabelTonemappingParamHelp": "Regola l'algoritmo di mappatura dei toni. Di solito si lascia vuoto.", "LabelTonemappingParam": "Parametro per la mappatura dei toni", "LabelTonemappingDesatHelp": "Applica la desaturazione per le alte-luci che superano questo livello di luminosità. Il valore raccomandato 0 (disabilitato).", "LabelSyncPlayTimeSyncOffset": "Offset del tempo", From 14b6163e7ba391899d0f3b344d8be194d8dc61b6 Mon Sep 17 00:00:00 2001 From: Romulo Alves Date: Thu, 19 Jun 2025 09:17:29 -0400 Subject: [PATCH 500/645] Translated using Weblate (Portuguese (Brazil)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_BR/ --- src/strings/pt-br.json | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/strings/pt-br.json b/src/strings/pt-br.json index d5afdbfbe..e60e09c7b 100644 --- a/src/strings/pt-br.json +++ b/src/strings/pt-br.json @@ -1194,7 +1194,7 @@ "TabCodecs": "Codecs", "TabContainers": "Formatos", "TabLogs": "Registros", - "TabNetworking": "Rede", + "TabNetworking": "Redes", "TabPlugins": "Plugins", "TabStreaming": "Transmissão", "Tags": "Etiquetas", @@ -1404,7 +1404,7 @@ "OptionMaxActiveSessionsHelp": "O valor 0 desativa esta funcão.", "LabelMaxMuxingQueueSizeHelp": "Número máximo de pacotes que podem ser armazenados em buffer enquanto aguardam a inicialização de todos os stream's. Tente aumentá-lo se você ainda encontrar o erro \"Muitos pacotes armazenados em buffer para stream\" nos logs do FFmpeg. O valor recomendado é 2048.", "LabelMaxMuxingQueueSize": "Tamanho máximo da fila de \"muxing\"", - "LabelTonemappingParamHelp": "Sintonize o algoritmo de tonemapping. Os valores padrões e recomendados são NaN. Geralmente, deixe em branco.", + "LabelTonemappingParamHelp": "Ajuste o algoritmo de mapeamento de tom. Geralmente, deixe-o em branco.", "LabelTonemappingParam": "Parâmetros de mapeamento de tom", "LabelTonemappingPeakHelp": "Substitui o valor de metadados incorporado para o sinal de entrada por este valor de pico. O valor predefinido é 100 (1000nit).", "LabelTonemappingPeak": "Pico do Mapeamento de tom", @@ -1857,7 +1857,7 @@ "LabelScanBehaviorHelp": "O comportamento padrão é não bloqueadora, o que adicionará mídia à biblioteca antes que a geração do trickplay seja feita. Bloquear garantirá que os arquivos trickplay sejam gerados antes que a mídia seja adicionada à biblioteca, mas tornará os escaneamentos significativamente mais longos.", "LabelTrickplayThreadsHelp": "O número de threads a ser passado para o argumento '-threads' do ffmpeg.", "LabelTrickplayThreads": "Tarefas de processamento FFmpeg", - "Trickplay": "Trickplay", + "Trickplay": "Pré-visualizações de vídeo", "Author": "Autor", "Colorist": "Colorista", "CoverArtist": "Artista de capa", @@ -2032,5 +2032,29 @@ "ButtonCreateBackup": "Criar backup", "ConfirmDeleteRepository": "Excluir repositório?", "DeleteRepositoryConfirmation": "Tem certeza de que deseja excluir este repositório?", - "ButtonLearnMore": "Saiba Mais" + "ButtonLearnMore": "Saiba Mais", + "HeaderBackupsHelp": "Crie e recupere cópias de segurança do seu servidor, incluindo banco de dados, legendas, informações dos arquivos e pré-visualizações de vídeo.", + "LabelBackupsUnavailable": "Nenhum backup disponível", + "MessageRestoreDisclaimer": "AVISO: Você está prestes a restaurar a partir de um backup anterior. Seu servidor ficará inutilizável durante o processo e todos os dados novos criados desde o backup serão perdidos.", + "StorageType.CDRom": "CD-ROM", + "StorageType.NoRootDirectory": "Sem diretório raiz", + "TranscodingLoadError": "Falha ao carregar as configurações de transcodificação", + "PluginsLoadError": "Ocorreu um erro ao carregar os plugins.", + "MessageBackupDisclaimer": "Dependendo do tamanho da sua biblioteca, o processo de backup pode demorar um pouco.", + "MessageBackupInProgress": "Backup em andamento", + "LabelDatabase": "Banco de dados", + "MessageRestoreInProgress": "Restauração em andamento", + "MessageRestoreSuccess": "Restauração concluída com sucesso", + "MessageWaitingForServer": "Aguardando o servidor...", + "RepositoriesPageLoadError": "Falha ao carregar repositórios", + "StorageType.Fixed": "Corrigido", + "StorageType.Network": "Rede", + "StorageType.Ram": "RAM", + "StorageType.Removable": "Removível", + "StorageType.Unknown": "Desconhecido", + "Success": "Sucesso", + "LabelProgramData": "Arquivos de programa", + "LabelRestore": "Restaurar", + "HeaderBackups": "Backups", + "LabelImageCache": "Arquivos de imagem temporários" } From 5c329c037dc968d535018188934ce511d29b3c8d Mon Sep 17 00:00:00 2001 From: Cooper D'Andilly Date: Thu, 19 Jun 2025 23:12:37 -0400 Subject: [PATCH 501/645] Added translation using Weblate (English (Middle)) --- src/strings/enm.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/strings/enm.json diff --git a/src/strings/enm.json b/src/strings/enm.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/src/strings/enm.json @@ -0,0 +1 @@ +{} From b274d89d0bafe8c72e42f262d421640bd853c788 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Sat, 21 Jun 2025 02:03:53 -0400 Subject: [PATCH 502/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index c9e83cb32..e7449f572 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -1785,7 +1785,7 @@ "ChannelResolutionSD": "SD", "DeleteName": "Esborra {0}", "ChannelResolutionFullHD": "Full HD", - "LabelBuildVersion": "Versió de compilació", + "LabelBuildVersion": "Versió de la compilació", "LabelUseReplayGainTagsHelp": "Escaneja els fitxers d'àudio per trobar etiquetes ReplayGain i fes-les servir en lloc de calcular el valor LUFS. (Utilitza menys potència. Invalidarà l'opció 'Escaneig LUFS')", "EnableVideoToolboxTonemapping": "Habilitar el mapatge de tons de VideoToolbox", "AllowVideoToolboxTonemappingHelp": "Acceleració per maquinari en el mapatge de tons per VideoToolbox. Funciona amb la majoria dels formats HDR, inclosos HDR10, HDR10+ i HLG, però no funciona amb Dolby Vision Profile 5. Això té una prioritat més alta en comparació amb una altra implementació de Metal.", From 31c38ff79b194950b1a44a6a5cfffd4f8a432d94 Mon Sep 17 00:00:00 2001 From: Onni Saarni Date: Sat, 21 Jun 2025 12:36:46 -0400 Subject: [PATCH 503/645] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index c8faea452..86cca25a7 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -2028,5 +2028,36 @@ "HeaderServerUnavailable": "Palvelin ei ole käytettävissä", "DownloadManager": "Lataukset", "ViewSettings": "Tarkastele asetuksia", - "HeaderUpdateRequired": "Päivitys vaaditaan" + "HeaderUpdateRequired": "Päivitys vaaditaan", + "DeleteRepositoryConfirmation": "Oletko varma, että haluat poistaa tämän ohjelmavaraston?", + "RepositoriesPageLoadError": "Ohjelmavarastojen lataus epäonnistui", + "TranscodingLoadError": "Transkoodaus asetusten lataus epäonnistui", + "StorageType.CDRom": "CD-levy", + "StorageType.Fixed": "Kiinteä", + "MessageForgotPasswordPinReset": "Anna PIN-koodi viimeistelläksesi salasanan palautuksen", + "ButtonLearnMore": "Lue lisää", + "HeaderBackupsHelp": "Luo ja palauta palvelimen tilannekuvia, jotka voivat sisältää tietokannan, metatiedot, tekstitykset ja trickplay-kuvat.", + "LabelBackupsUnavailable": "Ei varmuuskopioita saatavilla", + "PluginsLoadError": "Lisäosia ladatessa tapahtui virhe.", + "StorageType.NoRootDirectory": "Ei juurihakemistoa", + "StorageType.Ram": "Muisti", + "StorageType.Network": "Verkko", + "StorageType.Removable": "Irrotettava", + "StorageType.Unknown": "Tuntematon", + "Success": "Onnistui", + "BackupsPageLoadError": "Varmuuskopio sivun lataus epäonnistui", + "ButtonCreateBackup": "Luo varmuuskopio", + "Create": "Luo", + "LabelDatabase": "Tietokanta", + "LabelRestore": "Palauta", + "MessageBackupDisclaimer": "Varmuuskopiointi saattaa kestää jonkin aikaa riippuen kirjastosi koosta.", + "MessageBackupInProgress": "Varmuuskopiointi meneillään", + "MessageRestoreDisclaimer": "VAROITUS: Olet palauttamassa aiempaa varmuuskopiota. Palvelin ei ole käytettävissä palautuksen aikana, ja kaikki varmuuskopion ottamisen jälkeen tehdyt muutokset katoavat.", + "MessageRestoreInProgress": "Palautus meneillään", + "MessageRestoreSuccess": "Palautus onnistui", + "MessageWaitingForServer": "Odotetaan vastausta palvelimelta...", + "HeaderBackups": "Varmuuskopiot", + "ConfirmDeleteRepository": "Poista ohjelmavarasto?", + "LabelImageCache": "Kuvien välimuisti", + "LabelProgramData": "Ohjelman tiedot" } From 59d972e4211b25855ec7fff13713646c6bf981f7 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Sat, 21 Jun 2025 21:43:14 -0400 Subject: [PATCH 504/645] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index a54a49532..d98019b9e 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -841,7 +841,7 @@ "PlayNext": "Reproduzir a seguir", "PlayFromBeginning": "Reproduzir do início", "PlayCount": "N.º de Reproduções", - "PlaybackData": "Informações de Reprodução", + "PlaybackData": "Informações de reprodução", "PlayAllFromHere": "Reproduzir todos a partir daqui", "PerfectMatch": "Correspondência perfeita", "People": "Pessoas", @@ -1361,7 +1361,7 @@ "PosterCard": "Cartaz em forma de cartão", "Poster": "Cartaz", "PlaybackErrorNoCompatibleStream": "Este cliente não é compatível com o formato multimédia e o servidor não envia um formato que seja compatível.", - "PlaybackRate": "Velocidade de Reprodução", + "PlaybackRate": "Velocidade de reprodução", "Photo": "Fotografia", "Person": "Pessoa", "OptionRequirePerfectSubtitleMatchHelp": "Solicitar uma combinação perfeita filtrará as legendas para apenas as que tenham sido testadas e verificadas com seu ficheiro de vídeo. Desmarcar esta opção aumenta a probabilidade de transferência de legendas, aumentando também o número de casos de dessincronia de tempos ou textos incorrectos.", @@ -1419,7 +1419,7 @@ "DeleteDevicesConfirmation": "Tens a certeza de que pretendes eliminar todos os dispositivos? Todas as outras sessões serão encerradas. Os dispositivos voltarão a aparecer da próxima vez que um utilizador iniciar sessão.", "Bwdif": "Filtro de Desentrelação Bob Weaver (BWDIF)", "LabelAudioInfo": "Info da Áudio", - "LabelPlaybackInfo": "Info da Reprodução", + "LabelPlaybackInfo": "Informações de reprodução", "RemuxHelp2": "O Remux requer uma potência de processamento muito baixa, mas oferece uma qualidade de multimédia completamente sem perdas.", "RemuxHelp1": "O ficheiro multimédia está num container de ficheiros incompatível (MKV, AVI, WMV, etc.), mas tanto o fluxo de vídeo como o fluxo de áudio são compatíveis com o dispositivo. O ficheiro multimédia será reempacotado sem perdas em tempo real antes de ser enviado para o dispositivo.", "AspectRatioCover": "Zoom", From da316634a37e217673cc0e86224f0297dd54a363 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=92valds=20Zemturis?= Date: Sun, 22 Jun 2025 05:59:49 -0400 Subject: [PATCH 505/645] Translated using Weblate (Latvian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/lv/ --- src/strings/lv.json | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/strings/lv.json b/src/strings/lv.json index 027e3f8e1..afb097081 100644 --- a/src/strings/lv.json +++ b/src/strings/lv.json @@ -836,7 +836,7 @@ "AlwaysPlaySubtitlesHelp": "Valodas priekšrokai atbilstošie subtitri tiks ielādēti neatkarīgi no audio valodas.", "AllowFfmpegThrottling": "Ierobežot transkodējumus", "AllowHWTranscodingHelp": "Atļaut uztvērējam transkodēt straumes tiešsaistē. Tas var atvieglot transkodēšanu, kas jāveic serverim.", - "AirDate": "Tiešraides datums", + "AirDate": "Translācijas datums", "LabelHardwareAccelerationTypeHelp": "Aparatūras paātrināšanai ir vajadzīga papildus konfigurācija.", "LabelEncoderPreset": "Kodēšanas noklusējumi", "HardwareAccelerationWarning": "Iespējota aparatūras paātrināšana var izraisīt nestabilitāti atsevišķās vidēs. Pārliecinieties, ka operētājsistēma un video draiveri it pilnībā atjaunināti. Ja jums ir problēmas ar video atskaņošanu pēc šī iestatījuma iespējošanas, jums vajadzēs nomainīt to atpakaļ uz Neviens.", @@ -1234,7 +1234,7 @@ "Conductor": "Diriģents", "Casual": "Ikdienišķs", "Arranger": "Aranžetājs", - "AgeValue": "({0} gadu vecs)", + "AgeValue": "({0} gadi)", "LabelPublishedServerUriHelp": "Pārrakstīt URI, ko izmanto Jellyfin, vadoties pēc tīkla interfeisa vai klienta IP adreses. Piemēram: internal=http://jellyfin.example.com, external=https://jellyfin.example.com vai all=https://jellyfin.example.com", "LabelPublishedServerUri": "Publicētā servera URI", "LabelProtocolInfoHelp": "Vērtība, kas tiks izmantota, atbildot uz GetProtocolInfo pieprasījumiem no ierīces.", @@ -2016,5 +2016,17 @@ "RepositoriesPageLoadError": "Neizdevās ielādēt krātuves", "TranscodingLoadError": "Neizdevās ielādēt transkodēšanas iestatījumus", "TonemappingModeHelp": "Izvēlēties toņu kartēšanas režīmu. Ja konstatētas izplūdušas spilgtās vietas, pamēģināt RGB režīmu.", - "LabelQscale": "Qscale" + "LabelQscale": "Qscale", + "ReadInputAtNativeFramerate": "Lasīt ievadi vietējā kadru nomaiņas ātrumā", + "Reset": "Atiestatīt", + "FallbackMaxStreamingBitrateHelp": "Maksimālā straumēšanas bitu pārraides ātrums tiek izmantots kā rezerves variants, kad ffprobe nespēj noteikt avota straumes bitu pārraides ātrumu. Tas palīdz novērst pieprasījumus no klientiem ar pārmērīgi augstu transkodēšanas bitu pārraides ātrumu, kas var likt atskaņotājam nobrukt and pārslogot kodētāju.", + "LabelQsvDeviceHelp": "Precizēt ierīci Intel QSV izmantošanai vairāku video karšu sistēmā. Linux sistēmās tā ir atveidošanas mezgls, t.i., /dev/dri/renderD128. Windows sistēmās tas ir ierīču indekss sākot no 0. Atstāt lauku tukšu izņemot, ja zināt ko darāt.", + "StoryArc": "Stāsta loks", + "LabelFallbackMaxStreamingBitrate": "Rezerves variants maksimālajam bitu pārraides ātrumam (Mb/s)", + "AlwaysRemuxFlacAudioFilesHelp": "Ja Jums ir faili, kurus Jūsu pārlūkprogramma atsakās atskaņot vai neprecīzi aprēķina laika zīmogus, ieslēgt šo kā risinājumu.", + "SelectPreferredTranscodeVideoCodecHelp": "Izvēlēties vēlamo video kodeku tā transkodēšanai. Ja vēlamais kodeks netiek atbalstīts, serveris izmantos nākamo labāko pieejamo kodeku.", + "UseDoubleRateDeinterlacing": "Dubultot kadru nomaiņas ātrumu kad noņem rindpārleces izvērsi", + "UseCustomTagDelimitersHelp": "Sadalīt izpildītājus/žanru tegus ar pielāgotiem simboliem.", + "LabelSaveTrickplayLocallyHelp": "Saglabājot trickplay attēlus multivides mapēs novietos attēlus blakus tavai multividei vieglai migrācijai un piekļuvei.", + "AllowTonemappingSoftwareHelp": "Toņu kartēšana var pārveidot video dinamisko diapazonu uz HDR no SDR (uz augstu diapazonu no zema) paturot attēla detaļas un krāsas, kas ir ļoti būtiska informāciju reprezentējot oriģinālo ainu. Šobrīd darbojas tikai ar 10bit HDR10, HLG un DoVi video." } From b3a6d105322b3079cc40a8fd0fade4a23c8e2740 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Sun, 22 Jun 2025 13:40:45 -0400 Subject: [PATCH 506/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index e7449f572..ebc9e6607 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -1475,7 +1475,7 @@ "OptionCaptionInfoExSamsung": "CaptionInfoEx (Samsung)", "OptionBluray": "BD", "OptionAutomaticallyGroupSeriesHelp": "Les sèries que es distribueixen entre diversos directoris d'aquesta mediateca es combinaran automàticament en una única sèrie.", - "OptionAutomaticallyGroupSeries": "Automàticament sèrie que es distribueixen en diverses carpetes", + "OptionAutomaticallyGroupSeries": "Combina automàticament les sèries que estiguin distribuïdes entre diversos directoris", "OptionAllowVideoPlaybackTranscoding": "Permet la reproducció de vídeo que requereix la transcodificació", "OptionAllowVideoPlaybackRemuxing": "Permet la reproducció de vídeo que requereix una conversió sense recodificació", "OptionAllowSyncTranscoding": "Permet la conversió del contingut multimèdia quan es descarregui i sincronitzi", From 19102c4afd134107141f7ebe636ca02158c37b70 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Mon, 23 Jun 2025 01:39:08 -0400 Subject: [PATCH 507/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index ebc9e6607..a1b56ab51 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -1578,7 +1578,7 @@ "LabelSyncPlaySettingsExtraTimeOffset": "Temps afegit de decalatge", "LabelSortName": "Ordena per nom", "LabelAutomaticallyAddToCollectionHelp": "Quan, com a mínim dues pel·lícules, tenen el mateix nom de col·lecció, seran afegides a la col·lecció.", - "LabelAutomaticallyAddToCollection": "Afegeix automàticament a la col·lecció", + "LabelAutomaticallyAddToCollection": "Afegeix automàticament a una col·lecció", "Cursive": "Cursiva", "Console": "Terminal", "ThemeVideo": "Vídeo temàtic", From a3402d15bd42cea5a401345f5a5c39ae1af2b087 Mon Sep 17 00:00:00 2001 From: RoboDoc Date: Mon, 23 Jun 2025 15:28:52 -0400 Subject: [PATCH 508/645] Translated using Weblate (Finnish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fi/ --- src/strings/fi.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/fi.json b/src/strings/fi.json index 86cca25a7..55a2d39b4 100644 --- a/src/strings/fi.json +++ b/src/strings/fi.json @@ -1280,7 +1280,7 @@ "LabelTonemappingRange": "Sävykartoituksen alue", "LabelTonemappingPeakHelp": "Korvaa metatiedoissa ilmoitetun input signaalin arvon tällä huippuarvolla. Suositeltu arvo on 100 (1000nit).", "LabelTonemappingPeak": "Sävykartoituksen huippu", - "LabelTonemappingParamHelp": "Säädä sävykartoitusalgoritmia. Suositeltu ja oletusarvo on NaN. Tyypillisesti jätetään tyhjäksi.", + "LabelTonemappingParamHelp": "Säädä sävykartoitusalgoritmia. Tyypillisesti jätetään tyhjäksi.", "LabelTonemappingParam": "Sävykartoituksen parametrit", "LabelTonemappingDesatHelp": "Vähentää tämän kirkkaustason ylittävien värien kylläisyyttä. Suositeltu arvo on 0 (poista käytöstä).", "LabelTonemappingDesat": "Sävykartoituksen kylläisyys", @@ -1689,7 +1689,7 @@ "SaveRecordingImagesHelp": "Tallenna ohjelmaoppaan tietolähteen kuvat mediatiedoston oheen.", "HeaderDummyChapter": "Kappalekuvat", "LabelDummyChapterDuration": "Aikaväli", - "LabelDummyChapterDurationHelp": "Kappalekuvien purkuväli sekunteina. Poista kappalekuvien luonti käytöstä asettamalla arvoksi 0. Tämän muutos ei vaikuta olemassa oleviin kappaleisiin.", + "LabelDummyChapterDurationHelp": "Kappaleiden välinen aika sekunteina. Aseta arvoksi 0 poistaaksesi kappaleiden luomisen käytöstä. Tämä muutos ei vaikuta olemassa oleviin kappaleisiin.", "LabelDummyChapterCount": "Enimmäismäärä", "LabelDummyChapterCountHelp": "Yhdestä mediatiedostosta purettavien kappalekuvien enimmäismäärä.", "LabelChapterImageResolution": "Resoluutio", @@ -2059,5 +2059,5 @@ "HeaderBackups": "Varmuuskopiot", "ConfirmDeleteRepository": "Poista ohjelmavarasto?", "LabelImageCache": "Kuvien välimuisti", - "LabelProgramData": "Ohjelman tiedot" + "LabelProgramData": "Ohjelmatiedot" } From 78879ca2925bd2334f90e6fabdc887bb527a79f2 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Mon, 23 Jun 2025 18:13:49 -0400 Subject: [PATCH 509/645] Fix path references in themes --- webpack.common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webpack.common.js b/webpack.common.js index ad0019a0e..e571fe3e3 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -319,7 +319,7 @@ const config = { { loader: MiniCssExtractPlugin.loader, options: { - publicPath: '/' + publicPath: '../../' } }, 'css-loader', From cbc78e4ac740f81942fc382936b26ee5de5d142b Mon Sep 17 00:00:00 2001 From: Hasan Abdulaal Date: Tue, 24 Jun 2025 09:33:33 -0400 Subject: [PATCH 510/645] Translated using Weblate (Arabic) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ar/ --- src/strings/ar.json | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/src/strings/ar.json b/src/strings/ar.json index f3d43d851..59e2ad319 100644 --- a/src/strings/ar.json +++ b/src/strings/ar.json @@ -1555,7 +1555,7 @@ "HeaderNewRepository": "مستودع جديد", "DirectPlayHelp": "الملف المصدر متوافق تمامًا مع هذا العميل والجلسة تستقبل الملف بدون تعديلات.", "LabelDashboardTheme": "قالب لوحة تحكم الخادم", - "LabelTonemappingParamHelp": "ضبط خوارزمية تعيين النغمة.‌ القيم الموصى بها والافتراضية هي NaN. اتركه فارغًا بشكل عام.", + "LabelTonemappingParamHelp": "اضبط خوارزمية تعيين النغمة. عادةً ما يُترك هذا الحقل فارغًا.", "LabelTonemappingParam": "معلمة تعيين النغمة", "LabelTonemappingDesat": "مُعدل تعيين النغمة", "LabelTonemappingAlgorithm": "حدد خوارزمية تعيين النغمة لاستخدامها", @@ -2018,5 +2018,35 @@ "SubtitleCyan": "سماوي", "SubtitleMagenta": "أرجواني", "DownloadManager": "التنزيلات", - "MessageForgotPasswordPinReset": "اكتب رمز قفل البرنامج لانهاء عملية تغيير كلمة المرور" + "MessageForgotPasswordPinReset": "اكتب رمز قفل البرنامج لانهاء عملية تغيير كلمة المرور", + "TranscodingLoadError": "فشل تحميل إعدادات ترميز الفيديوهات", + "BackupsPageLoadError": "فشل تحميل صفحة النسخ الاحتياطية", + "ButtonCreateBackup": "أنشئ نسخة احتياطية", + "MessageRestoreDisclaimer": "تحذير: أنت على وشك استعادة نسخة احتياطية سابقة. سيصبح خادمك غير صالح للاستخدام أثناء العملية، وستفقد أي بيانات جديدة أُنشِأت منذ النسخ الاحتياطي.", + "MessageWaitingForServer": "في انتظار الخادم...", + "ButtonLearnMore": "تعرف المزيد", + "Create": "انشئ", + "HeaderBackupsHelp": "إنشاء واستعادة لقطات من خادمكَ والتي تتضمن قاعدة البيانات والبيانات الوصفية والترجمات والمعاينة السريعة.", + "LabelBackupsUnavailable": "لا توجد اي نسخ احتياطية متاحة", + "LabelDatabase": "قاعدة البيانات", + "LabelProgramData": "بيانات البرنامج", + "MessageBackupDisclaimer": "اعتمادًا على حجم مكتبتك، قد تستغرق عملية النسخ الاحتياطي بعض الوقت.", + "MessageBackupInProgress": "جارٍ النسخ الاحتياطي", + "MessageRestoreInProgress": "جارٍ الاستعادة", + "MessageRestoreSuccess": "تمت الاستعادة بنجاح", + "StorageType.CDRom": "قرص مضغوط", + "StorageType.Removable": "قابلة للإزالة", + "StorageType.Unknown": "مجهول", + "Success": "نجاح", + "HeaderBackups": "النسخ الاحتياطية", + "ConfirmDeleteRepository": "حذف المستودع؟", + "DeleteRepositoryConfirmation": "هل أنت متأكد من هذا المستودع؟", + "LabelRestore": "استعادة", + "PluginsLoadError": "حدث خطأ أثناء تحميل الإضافات.", + "RepositoriesPageLoadError": "فشل تحميل المستودعات", + "StorageType.Fixed": "مُثَبَّت", + "StorageType.Network": "شبكة", + "StorageType.NoRootDirectory": "لا يوجد دليل الجذر (No Root Directory)", + "StorageType.Ram": "ذاكرة الوصول العشوائي (RAM)", + "LabelImageCache": "ذاكرة التخزين المؤقت للصور" } From 5f97a9cf82a57ab8992d1f96613c0b46da9e15bb Mon Sep 17 00:00:00 2001 From: Andrejs Date: Tue, 24 Jun 2025 11:49:24 -0400 Subject: [PATCH 511/645] Translated using Weblate (Latvian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/lv/ --- src/strings/lv.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/lv.json b/src/strings/lv.json index afb097081..0e678f030 100644 --- a/src/strings/lv.json +++ b/src/strings/lv.json @@ -1778,7 +1778,7 @@ "PlaybackError.FATAL_HLS_ERROR": "Kritiska kļūda notika HLS straumē.", "PlaybackError.PLAYER_ERROR": "Atskaņošana nav iespējama sakarā ar atskaņotāja kritisko kļūdu.", "PlaybackError.NotAllowed": "Šito failu atskaņošana nav atļauta.", - "PlaybackError.RateLimitExceeded": "Šis fails šobrīd nevar būt atskaņots, jo serveris ierobežo pieprasījumus.", + "PlaybackError.RateLimitExceeded": "Šo failu šobrīd nevar atskaņot, jo serveris ierobežo pieprasījumus.", "PlaylistError.CreateFailed": "Nesanāca izveidot atskaņošanas sarakstu", "PlaylistError.AddFailed": "Nesanāca pievienot atskaņošanas sarakstam", "Smart": "Viedais", @@ -1825,7 +1825,7 @@ "PriorityNormal": "Normāls", "PriorityIdle": "Brīvs", "LabelProcessPriority": "Procesu prioritāte", - "IntelLowPowerEncHelp": "Zemas jaudas kodēšana var paturēt nevajadzīgo CPU-GPU sinhronizāciju. Linux sistēmā tiem jabūt izslēgtiem ja i915 HuC aparātprogrammatūra nav nokonfigurēta.", + "IntelLowPowerEncHelp": "Zemas jaudas kodēšana var paturēt nevajadzīgo CPU-GPU sinhronizāciju. Linux sistēmā tiem jābūt izslēgtiem, ja i915 HuC aparātprogrammatūra nav nokonfigurēta.", "EnableVideoToolboxTonemapping": "Iespējot VideoToolbox toņu kartēšanu", "PreferSystemNativeHwDecoder": "Dod priekšroku natīvam DXVA vai VA-API aparatūras paātrinājumiem", "LabelEncodingFormatOptions": "Kodēšanas formāta opcijas", From 8dcc089e3af09945ae5190613dfc8b7015aae0b5 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Tue, 24 Jun 2025 13:07:17 -0400 Subject: [PATCH 512/645] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index cb267a810..b3c5122ae 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -2059,6 +2059,7 @@ "ButtonLearnMore": "Meer informatie", "ConfirmDeleteRepository": "Repository verwijderen?", "DeleteRepositoryConfirmation": "Weet je zeker dat je dit repository wilt verwijderen?", - "RepositoriesPageLoadError": "Repository's laden mislukt", - "TranscodingLoadError": "Laden van transcodeerinstellingen mislukt" + "RepositoriesPageLoadError": "Laden van repository's mislukt", + "TranscodingLoadError": "Laden van transcodeerinstellingen mislukt", + "LiveTVPageLoadError": "Laden van opnamepagina mislukt" } From cabef2e4dcaa93301ffded58906571abb180d587 Mon Sep 17 00:00:00 2001 From: Kityn Date: Tue, 24 Jun 2025 15:47:22 -0400 Subject: [PATCH 513/645] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 2953268d8..a69ae7648 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -2061,5 +2061,6 @@ "PluginsLoadError": "Wystąpił błąd podczas ładowania wtyczek.", "ButtonLearnMore": "Dowiedz się więcej", "TranscodingLoadError": "Nie udało się załadować ustawień transkodowania", - "DeleteRepositoryConfirmation": "Czy na pewno chcesz usunąć to repozytorium?" + "DeleteRepositoryConfirmation": "Czy na pewno chcesz usunąć to repozytorium?", + "LiveTVPageLoadError": "Nie udało się załadować strony z nagraniami" } From a925c2deabf83dbe2f67bfcea256f95a6b1ebb65 Mon Sep 17 00:00:00 2001 From: nextlooper42 Date: Tue, 24 Jun 2025 15:27:43 -0400 Subject: [PATCH 514/645] Translated using Weblate (Slovak) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/ --- src/strings/sk.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/sk.json b/src/strings/sk.json index 1655441c1..712057fd5 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -2061,5 +2061,6 @@ "ConfirmDeleteRepository": "Vymazať repozitár?", "PluginsLoadError": "Pri načítavaní zásuvných modulov došlo k chybe.", "RepositoriesPageLoadError": "Nepodarilo sa načítať repozitáre", - "TranscodingLoadError": "Nepodarilo sa načítať nastavenia prekódovania" + "TranscodingLoadError": "Nepodarilo sa načítať nastavenia prekódovania", + "LiveTVPageLoadError": "Nepodarilo sa načítať stránku s nahrávkami" } From e59614f373d204143f8b2c131ee77fbf8ab60f7d Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Tue, 24 Jun 2025 19:15:33 -0400 Subject: [PATCH 515/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index a1b56ab51..f7cb6b7bc 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -197,7 +197,7 @@ "HeaderYears": "Anys", "Help": "Ajuda", "Hide": "Amaga", - "Identify": "Identifica", + "Identify": "Identificació", "Images": "Imatges", "InstallingPackage": "S'està instal·lant {0} (versió {1})", "InstantMix": "Mescla instantània", @@ -241,7 +241,7 @@ "LabelDisplayOrder": "Ordre de visualització", "LabelDisplaySpecialsWithinSeasons": "Mostra els especials a les temporades on van ser emesos", "LabelDownloadLanguages": "Descarrega idiomes", - "LabelDropImageHere": "Deixa anar la imatge aquí.", + "LabelDropImageHere": "Deixeu anar la imatge aquí.", "LabelDynamicExternalId": "Identificador {0}", "LabelEasyPinCode": "Codi PIN senzill", "LabelEnableAutomaticPortMap": "Habilita l'auto-mapatge de ports", @@ -331,7 +331,7 @@ "LabelPublicHttpsPort": "Número del port HTTPS públic", "LabelRecord": "Enregistra", "LabelRecordingPath": "Ruta d'enregistrament per defecte", - "LabelRefreshMode": "Mode de refresc", + "LabelRefreshMode": "Mode d'actualització", "LabelReleaseDate": "Data de llançament", "LabelSaveLocalMetadata": "Desa les imatges als directoris multimèdia", "LabelSaveLocalMetadataHelp": "Desar les imatges als directoris multimèdia les ubicarà a un lloc on podran ser editats fàcilment.", @@ -703,7 +703,7 @@ "Episode": "Episodi", "EnableThemeSongsHelp": "Reprodueix sintonies en segon pla mentre es navega per la mediateca.", "EnableStreamLooping": "Bucle automàtic en emissions en directe", - "EnableQuickConnect": "Habilita la connexió ràpida a aquest servidor", + "EnableQuickConnect": "Habilita Quick Connect (connexió ràpida) en aquest servidor", "EnablePhotosHelp": "Les imatges es detectaran i es mostraran al costat d'altres fitxers multimèdia.", "EnablePhotos": "Mostra les fotos", "EnableNextVideoInfoOverlayHelp": "Al final d'un vídeo, mostreu informació sobre el següent vídeo que aparegui a la llista de reproducció actual.", @@ -734,7 +734,7 @@ "DeleteUserConfirmation": "N'esteu segur, que voleu eliminar aquest usuari?", "DeleteDeviceConfirmation": "N'esteu segur, que voleu suprimir aquest dispositiu? Tornarà a aparèixer la pròxima vegada que un usuari iniciï la sessió amb aquest.", "Data": "Dades", - "ButtonUseQuickConnect": "Fes servir la connexió ràpida", + "ButtonUseQuickConnect": "Fes servir Quick Connect (connexió ràpida)", "ButtonActivate": "Activa", "Authorize": "Autoritza", "LabelServerName": "Nom del servidor", @@ -1183,9 +1183,9 @@ "LabelRemoteClientBitrateLimitHelp": "Un límit opcional de taxa de bits per cada corrent de tot fora dels dispositius de xarxa. Això és útil per evitar que els dispositius de sol·licitar una taxa de bits més alta que la connexió a Internet pot gestionar. Això pot resultar en una major càrrega de la CPU en el servidor per tal de transcodificació de vídeos sobre la marxa a una menor taxa de bits.", "LabelRemoteClientBitrateLimit": "Límit de la taxa de bits en transmetre per Internet (Mbps)", "LabelRecordingPathHelp": "Especifiqueu la ubicació per defecte per a desar els enregistraments. Si es deixa buit, es farà servir el directori de dades de programa del servidor.", - "LabelReasonForTranscoding": "Motiu de transcodificació", + "LabelReasonForTranscoding": "Motiu per a la transcodificació", "LabelQuickConnectCode": "Codi de Quick Connect", - "LabelPublishedServerUriHelp": "Anul·la l'URI utilitzat per Jellyfin, basat en la interfície, o l'adreça IP de client. Per exemple: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, or all=https://jellyfin.example.com", + "LabelPublishedServerUriHelp": "Sobreescriu l'URI fet servir per Jellyfin, basat en la interfície, o l'adreça IP de client. Per exemple: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, o all=https://jellyfin.example.com", "LabelPublishedServerUri": "URI del servidor publicades", "LabelPublicHttpsPortHelp": "El número de port públic que hauria de ser enllaçat al port HTTPS local.", "LabelPublicHttpPortHelp": "El número de port públic que hauria de ser enllaçat al port local HTTP.", @@ -1721,7 +1721,7 @@ "LabelTonemappingMode": "Mode de mapeig de to", "EnableAudioNormalization": "Normalització d'àudio", "LabelEnableLUFSScan": "Habilita l'escaneig LUFS", - "Select": "Seleccionar", + "Select": "Selecció", "LabelEnableLUFSScanHelp": "Els clients poden normalitzar la reproducció d'àudio per obtenir un nivell de volum igual entre pistes d'àudio. Això farà que els escanejos de la mediateca s'allarguin més i els calgui més recursos.", "TonemappingModeHelp": "Selecciona el mode de mapeig de to. Si experimentes zones sobreexposades, prova a canviar al mode RGB.", "EnableAudioNormalizationHelp": "La normalització de l'àudio afegirà un guany constant per mantenir la mitjana al nivell desitjat (-18dB).", From a1aeb7e990122392de773a089b5dce0e61811609 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Wed, 25 Jun 2025 13:39:33 -0400 Subject: [PATCH 516/645] Handle server id mismatches --- src/apiclient.d.ts | 1 + src/components/ConnectionErrorPage.tsx | 33 ++++++++++++-- src/components/ConnectionRequired.tsx | 8 +++- .../jellyfin-apiclient/connectionManager.js | 43 +++++++++++++------ src/lib/jellyfin-apiclient/connectionState.ts | 1 + src/strings/en-us.json | 3 ++ 6 files changed, 72 insertions(+), 17 deletions(-) diff --git a/src/apiclient.d.ts b/src/apiclient.d.ts index 0d8729e7d..fcb949fd2 100644 --- a/src/apiclient.d.ts +++ b/src/apiclient.d.ts @@ -336,6 +336,7 @@ declare module 'jellyfin-apiclient' { handleMessageReceived(msg: any): void; logout(): Promise; minServerVersion(val?: string): string; + updateSavedServerId(server: any): Promise; user(apiClient: ApiClient): Promise; } diff --git a/src/components/ConnectionErrorPage.tsx b/src/components/ConnectionErrorPage.tsx index 3dd69494b..a580214de 100644 --- a/src/components/ConnectionErrorPage.tsx +++ b/src/components/ConnectionErrorPage.tsx @@ -5,12 +5,22 @@ import Page from 'components/Page'; import { AppFeature } from 'constants/appFeature'; import LinkButton from 'elements/emby-button/LinkButton'; import globalize from 'lib/globalize'; -import { ConnectionState } from 'lib/jellyfin-apiclient'; +import { ConnectionState, ServerConnections } from 'lib/jellyfin-apiclient'; interface ConnectionErrorPageProps { state: ConnectionState } +async function onForceConnect() { + try { + const server = ServerConnections.getLastUsedServer(); + await ServerConnections.updateSavedServerId(server); + window.location.reload(); + } catch (err) { + console.error('[ConnectionErrorPage] Failed to force connect to server', err); + } +} + const ConnectionErrorPage: FC = ({ state }) => { @@ -20,6 +30,11 @@ const ConnectionErrorPage: FC = ({ useEffect(() => { switch (state) { + case ConnectionState.ServerMismatch: + setTitle(globalize.translate('HeaderServerMismatch')); + setHtmlMessage(undefined); + setMessage(globalize.translate('MessageServerMismatch')); + return; case ConnectionState.ServerUpdateNeeded: setTitle(globalize.translate('HeaderUpdateRequired')); setHtmlMessage(globalize.translate( @@ -46,10 +61,15 @@ const ConnectionErrorPage: FC = ({

{title}

{htmlMessage && ( -

+

)} {message && ( -

{message}

+

+ {message} +

)} {appHost.supports(AppFeature.MultiServer) && ( = ({ {globalize.translate('ButtonChangeServer')} )} + {state === ConnectionState.ServerMismatch && ( + + {globalize.translate('ConnectAnyway')} + + )}
); diff --git a/src/components/ConnectionRequired.tsx b/src/components/ConnectionRequired.tsx index 9fd4cd45d..5f69a10f6 100644 --- a/src/components/ConnectionRequired.tsx +++ b/src/components/ConnectionRequired.tsx @@ -31,6 +31,12 @@ type ConnectionRequiredProps = { level?: AccessLevelValue }; +const ERROR_STATES = [ + ConnectionState.ServerMismatch, + ConnectionState.ServerUpdateNeeded, + ConnectionState.Unavailable +]; + const fetchPublicSystemInfo = async (apiClient: ApiClient) => { const infoResponse = await fetch( `${apiClient.serverAddress()}/System/Info/Public`, @@ -184,7 +190,7 @@ const ConnectionRequired: FunctionComponent = ({ console.debug('[ConnectionRequired] connection state', firstConnection?.State); ServerConnections.firstConnection = true; - if ([ ConnectionState.ServerUpdateNeeded, ConnectionState.Unavailable ].includes(firstConnection?.State)) { + if (ERROR_STATES.includes(firstConnection?.State)) { setErrorState(firstConnection.State); } else if (level === AccessLevel.Wizard) { handleWizard(firstConnection) diff --git a/src/lib/jellyfin-apiclient/connectionManager.js b/src/lib/jellyfin-apiclient/connectionManager.js index 7c962c952..898844b6f 100644 --- a/src/lib/jellyfin-apiclient/connectionManager.js +++ b/src/lib/jellyfin-apiclient/connectionManager.js @@ -49,6 +49,10 @@ function normalizeAddress(address) { return address; } +function sortByAccess(a, b) { + return (b.DateLastAccessed || 0) - (a.DateLastAccessed || 0); +} + export default class ConnectionManager { constructor(credentialProvider, appName, appVersion, deviceName, deviceId, capabilities) { console.log('Begin ConnectionManager constructor'); @@ -78,7 +82,7 @@ export default class ConnectionManager { self.getLastUsedServer = () => { const servers = credentialProvider.credentials().Servers; - servers.sort((a, b) => (b.DateLastAccessed || 0) - (a.DateLastAccessed || 0)); + servers.sort(sortByAccess); if (!servers.length) { return null; @@ -345,25 +349,24 @@ export default class ConnectionManager { const servers = credentials.Servers.slice(0); - servers.sort((a, b) => (b.DateLastAccessed || 0) - (a.DateLastAccessed || 0)); + servers.sort(sortByAccess); return servers; }; self.getAvailableServers = () => { - console.log('Begin getAvailableServers'); + console.debug('[ConnectionManager] Begin getAvailableServers'); // Clone the array const credentials = credentialProvider.credentials(); - return Promise.all([findServers()]).then((responses) => { - const foundServers = responses[0]; + return findServers().then(foundServers => { const servers = credentials.Servers.slice(0); foundServers.forEach(server => { credentialProvider.addOrUpdateServer(servers, server); }); - servers.sort((a, b) => (b.DateLastAccessed || 0) - (a.DateLastAccessed || 0)); + servers.sort(sortByAccess); credentials.Servers = servers; credentialProvider.credentials(credentials); @@ -508,7 +511,7 @@ export default class ConnectionManager { addressesStrings.push(addresses[addresses.length - 1].url); } - console.log('tryReconnect: ' + addressesStrings.join('|')); + console.info('[ConnectionManager] tryReconnect addresses', addressesStrings); return new Promise((resolve, reject) => { const state = {}; @@ -523,10 +526,10 @@ export default class ConnectionManager { }, url.timeout); }); }); - } + }; self.connectToServer = (server, options) => { - console.log('begin connectToServer'); + console.debug('[ConnectionManager] begin connectToServer'); return new Promise((resolve) => { options = options || {}; @@ -538,17 +541,17 @@ export default class ConnectionManager { result = result.data; if (compareVersions(self.minServerVersion(), result.Version) === 1) { - console.log('minServerVersion requirement not met. Server version: ' + result.Version); + console.warn('[ConnectionManager] minServerVersion requirement not met. Server version:', result.Version); resolve({ State: ConnectionState.ServerUpdateNeeded, Servers: [server] }); } else if (server.Id && result.Id !== server.Id) { - console.log( - 'http request succeeded, but found a different server Id than what was expected' + console.warn( + '[ConnectionManager] http request succeeded, but found a different server Id than what was expected' ); resolve({ - State: ConnectionState.Unavailable + State: ConnectionState.ServerMismatch }); } else { onSuccessfulConnection(server, result, connectionMode, serverUrl, true, resolve, options); @@ -622,6 +625,20 @@ export default class ConnectionManager { } } + self.updateSavedServerId = async (server) => { + const { data: serverResponse } = await tryReconnect(server); + // Update the server ID to match the new value + server.Id = serverResponse.Id; + // Force the user to login again + server.AccessToken = null; + server.UserId = null; + + // Save the updated server in the credential provider + const credentials = credentialProvider.credentials(); + credentialProvider.addOrUpdateServer(credentials.Servers, server); + credentialProvider.credentials(credentials); + }; + function tryConnectToAddress(address, options) { const server = { ManualAddress: address, diff --git a/src/lib/jellyfin-apiclient/connectionState.ts b/src/lib/jellyfin-apiclient/connectionState.ts index 03ff95dc5..b47d6909c 100644 --- a/src/lib/jellyfin-apiclient/connectionState.ts +++ b/src/lib/jellyfin-apiclient/connectionState.ts @@ -3,6 +3,7 @@ */ export const enum ConnectionState { SignedIn = 'SignedIn', + ServerMismatch = 'ServerMismatch', ServerSignIn = 'ServerSignIn', ServerSelection = 'ServerSelection', ServerUpdateNeeded = 'ServerUpdateNeeded', diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 1a4879bf5..44189a154 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -184,6 +184,7 @@ "ConfirmDeletion": "Confirm Deletion", "ConfirmEndPlayerSession": "Would you like to shutdown Jellyfin on {0}?", "Connect": "Connect", + "ConnectAnyway": "Connect Anyway", "Console": "Console", "ContinueWatching": "Continue watching", "Continuing": "Continuing", @@ -523,6 +524,7 @@ "HeaderSeriesOptions": "Series Options", "HeaderSeriesStatus": "Series Status", "HeaderServerAddressSettings": "Server Address Settings", + "HeaderServerMismatch": "Server Mismatch", "HeaderServerUnavailable": "Server Unavailable", "HeaderSetupLibrary": "Set up your media libraries", "HeaderSortBy": "Sort By", @@ -1182,6 +1184,7 @@ "MessageRestoreInProgress": "Restore in progress", "MessageRestoreSuccess": "Restore successfully completed", "MessageSent": "Message sent.", + "MessageServerMismatch": "The server you are connecting to is not the same server that you previously connected to at this address. If this is expected please select \"Connect Anyway\". Otherwise your connection or the server might be compromised.", "MessageSplitVersionsError": "An error occurred while splitting versions", "MessageSyncPlayCreateGroupDenied": "Permission required to create a group.", "MessageSyncPlayDisabled": "SyncPlay disabled.", From 143ab7a395d50154f32a6184a5e1b220805cdb7e Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Wed, 25 Jun 2025 16:58:54 -0400 Subject: [PATCH 517/645] Add error handling to server id error handling --- src/components/ConnectionErrorPage.tsx | 34 +++++++++++++++++--------- src/strings/en-us.json | 2 +- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/components/ConnectionErrorPage.tsx b/src/components/ConnectionErrorPage.tsx index a580214de..db74acdc5 100644 --- a/src/components/ConnectionErrorPage.tsx +++ b/src/components/ConnectionErrorPage.tsx @@ -1,7 +1,9 @@ -import React, { FC, useEffect, useState } from 'react'; +import DOMPurify from 'dompurify'; +import React, { FC, useCallback, useEffect, useState } from 'react'; import { appHost } from 'components/apphost'; import Page from 'components/Page'; +import toast from 'components/toast/toast'; import { AppFeature } from 'constants/appFeature'; import LinkButton from 'elements/emby-button/LinkButton'; import globalize from 'lib/globalize'; @@ -11,22 +13,27 @@ interface ConnectionErrorPageProps { state: ConnectionState } -async function onForceConnect() { - try { - const server = ServerConnections.getLastUsedServer(); - await ServerConnections.updateSavedServerId(server); - window.location.reload(); - } catch (err) { - console.error('[ConnectionErrorPage] Failed to force connect to server', err); - } -} - const ConnectionErrorPage: FC = ({ state }) => { const [ title, setTitle ] = useState(); const [ htmlMessage, setHtmlMessage ] = useState(); const [ message, setMessage ] = useState(); + const [ isConnectDisabled, setIsConnectDisabled ] = useState(false); + + const onForceConnect = useCallback(async () => { + setIsConnectDisabled(true); + + try { + const server = ServerConnections.getLastUsedServer(); + await ServerConnections.updateSavedServerId(server); + window.location.reload(); + } catch (err) { + console.error('[ConnectionErrorPage] Failed to force connect to server', err); + toast(globalize.translate('HeaderConnectionFailure')); + setIsConnectDisabled(false); + } + }, []); useEffect(() => { switch (state) { @@ -62,7 +69,7 @@ const ConnectionErrorPage: FC = ({

{title}

{htmlMessage && (

)} @@ -71,6 +78,7 @@ const ConnectionErrorPage: FC = ({ {message}

)} + {appHost.supports(AppFeature.MultiServer) && ( = ({ {globalize.translate('ButtonChangeServer')} )} + {state === ConnectionState.ServerMismatch && ( {globalize.translate('ConnectAnyway')} diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 44189a154..105400ff2 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -1184,7 +1184,7 @@ "MessageRestoreInProgress": "Restore in progress", "MessageRestoreSuccess": "Restore successfully completed", "MessageSent": "Message sent.", - "MessageServerMismatch": "The server you are connecting to is not the same server that you previously connected to at this address. If this is expected please select \"Connect Anyway\". Otherwise your connection or the server might be compromised.", + "MessageServerMismatch": "The server you are connecting to is not the same server that you previously connected to at this address. If this is expected, please select \"Connect Anyway\". Otherwise, your connection or the server might be compromised.", "MessageSplitVersionsError": "An error occurred while splitting versions", "MessageSyncPlayCreateGroupDenied": "Permission required to create a group.", "MessageSyncPlayDisabled": "SyncPlay disabled.", From e9747adf4892a1927526290205f79f23f310b88f Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Wed, 25 Jun 2025 17:37:57 -0400 Subject: [PATCH 518/645] Refactor ItemCountsWidget to reduce duplication --- .../components/widgets/ItemCountsWidget.tsx | 123 ++++++++---------- 1 file changed, 54 insertions(+), 69 deletions(-) diff --git a/src/apps/dashboard/components/widgets/ItemCountsWidget.tsx b/src/apps/dashboard/components/widgets/ItemCountsWidget.tsx index f4a5e7987..1488b5ebf 100644 --- a/src/apps/dashboard/components/widgets/ItemCountsWidget.tsx +++ b/src/apps/dashboard/components/widgets/ItemCountsWidget.tsx @@ -1,3 +1,4 @@ +import type { ItemCounts } from '@jellyfin/sdk/lib/generated-client/models/item-counts'; import Book from '@mui/icons-material/Book'; import Movie from '@mui/icons-material/Movie'; import MusicNote from '@mui/icons-material/MusicNote'; @@ -5,12 +6,51 @@ import MusicVideo from '@mui/icons-material/MusicVideo'; import Tv from '@mui/icons-material/Tv'; import VideoLibrary from '@mui/icons-material/VideoLibrary'; import Grid from '@mui/material/Grid2'; +import SvgIcon from '@mui/material/SvgIcon'; import React, { useMemo } from 'react'; import { useItemCounts } from 'apps/dashboard/features/metrics/api/useItemCounts'; import MetricCard, { type MetricCardProps } from 'apps/dashboard/features/metrics/components/MetricCard'; import globalize from 'lib/globalize'; +interface MetricDefinition { + key: keyof ItemCounts + i18n: string +} + +interface CardDefinition { + Icon: typeof SvgIcon + metrics: MetricDefinition[] +} + +const CARD_DEFINITIONS: CardDefinition[] = [ + { + Icon: Movie, + metrics: [{ key: 'MovieCount', i18n: 'Movies' }] + }, { + Icon: Tv, + metrics: [ + { key: 'SeriesCount', i18n: 'Series' }, + { key: 'EpisodeCount', i18n: 'Episodes' } + ] + }, { + Icon: MusicNote, + metrics: [ + { key: 'AlbumCount', i18n: 'Albums' }, + { key: 'SongCount', i18n: 'Songs' } + ] + }, { + Icon: MusicVideo, + metrics: [{ key: 'MusicVideoCount', i18n: 'MusicVideos' }] + }, { + Icon: Book, + metrics: [{ key: 'BookCount', i18n: 'Books' }] + }, { + Icon: VideoLibrary, + metrics: [{ key: 'BoxSetCount', i18n: 'Collections' }] + } +]; + const ItemCountsWidget = () => { const { data: counts, @@ -18,75 +58,20 @@ const ItemCountsWidget = () => { } = useItemCounts(); const cards: MetricCardProps[] = useMemo(() => { - const cardProps: MetricCardProps[] = []; - - if (isPending || counts?.MovieCount) { - cardProps.push({ - Icon: Movie, - metrics: [{ - label: globalize.translate('Movies'), - value: counts?.MovieCount - }] - }); - } - - if (isPending || counts?.SeriesCount || counts?.EpisodeCount) { - cardProps.push({ - Icon: Tv, - metrics: [{ - label: globalize.translate('Series'), - value: counts?.SeriesCount - }, { - label: globalize.translate('Episodes'), - value: counts?.EpisodeCount - }] - }); - } - - if (isPending || counts?.AlbumCount || counts?.SongCount) { - cardProps.push({ - Icon: MusicNote, - metrics: [{ - label: globalize.translate('Albums'), - value: counts?.AlbumCount - }, { - label: globalize.translate('Songs'), - value: counts?.SongCount - }] - }); - } - - if (isPending || counts?.MusicVideoCount) { - cardProps.push({ - Icon: MusicVideo, - metrics: [{ - label: globalize.translate('MusicVideos'), - value: counts?.MusicVideoCount - }] - }); - } - - if (isPending || counts?.BookCount) { - cardProps.push({ - Icon: Book, - metrics: [{ - label: globalize.translate('Books'), - value: counts?.BookCount - }] - }); - } - - if (isPending || counts?.BoxSetCount) { - cardProps.push({ - Icon: VideoLibrary, - metrics: [{ - label: globalize.translate('Collections'), - value: counts?.BoxSetCount - }] - }); - } - - return cardProps; + return CARD_DEFINITIONS + .filter(def => ( + // Include all cards while the request is pending + isPending + // Check if the metrics are present in counts + || def.metrics.some(({ key }) => counts?.[key]) + )) + .map(({ Icon, metrics }) => ({ + Icon, + metrics: metrics.map(({ i18n, key }) => ({ + label: globalize.translate(i18n), + value: counts?.[key] + })) + })); }, [ counts, isPending ]); return ( From 11601c4018848bb0fc5ef47914fb15bf8cd78834 Mon Sep 17 00:00:00 2001 From: myrad2267 Date: Wed, 25 Jun 2025 22:56:06 -0400 Subject: [PATCH 519/645] Translated using Weblate (French (Canada)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr_CA/ --- src/strings/fr-ca.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/fr-ca.json b/src/strings/fr-ca.json index 0b4dadf24..b829a8a05 100644 --- a/src/strings/fr-ca.json +++ b/src/strings/fr-ca.json @@ -2005,5 +2005,6 @@ "ButtonLearnMore": "En apprendre plus", "TranscodingLoadError": "Échec du chargement des paramètres de transcodage", "ConfirmDeleteRepository": "Supprimer le dépôt ?", - "RepositoriesPageLoadError": "Échec du chargement des dépôts" + "RepositoriesPageLoadError": "Échec du chargement des dépôts", + "LiveTVPageLoadError": "Échec du chargement de la page d'enregistrements" } From ccb9b202220fcad5970c0e144a3414acb18638b3 Mon Sep 17 00:00:00 2001 From: myrad2267 Date: Wed, 25 Jun 2025 22:55:15 -0400 Subject: [PATCH 520/645] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index b8c5a62ba..5a7669283 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -2061,5 +2061,6 @@ "TranscodingLoadError": "Échec du chargement des paramètres de transcodage", "ConfirmDeleteRepository": "Supprimer le dépôt ?", "DeleteRepositoryConfirmation": "Êtes-vous sûr de vouloir supprimer ce dépôt ?", - "RepositoriesPageLoadError": "Échec du chargement des dépôts" + "RepositoriesPageLoadError": "Échec du chargement des dépôts", + "LiveTVPageLoadError": "Échec du chargement de la page d'enregistrements" } From acd6ccf3b3a902bd414ffd0e5738e3833d9a8cfa Mon Sep 17 00:00:00 2001 From: st7105 Date: Thu, 26 Jun 2025 01:55:43 -0400 Subject: [PATCH 521/645] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index 5e17aa867..6b77519eb 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -2061,5 +2061,6 @@ "DeleteRepositoryConfirmation": "Вы уверены, что хотите удалить это репозиторий?", "RepositoriesPageLoadError": "Не удалось загрузить репозитории", "TranscodingLoadError": "Не удалось загрузить настройки транскодирования", - "ButtonLearnMore": "Узнать больше" + "ButtonLearnMore": "Узнать больше", + "LiveTVPageLoadError": "Не удалось загрузить страницу с записями" } From 6598410c656c4b47ff7b09a77d398ba4b1dce0b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Thu, 26 Jun 2025 05:11:46 -0400 Subject: [PATCH 522/645] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index 5b4f0bfd2..9dec8ce2e 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -2061,5 +2061,6 @@ "PluginsLoadError": "Při načítání zásuvných modulů došlo k chybě.", "ButtonLearnMore": "Více informací", "DeleteRepositoryConfirmation": "Opravdu chcete odstranit tento repozitář?", - "TranscodingLoadError": "Načtení nastavení překódování se nezdařilo" + "TranscodingLoadError": "Načtení nastavení překódování se nezdařilo", + "LiveTVPageLoadError": "Načtení stránky s nahrávkami se nezdařilo" } From f4153ae7060642b2a7466393ef79a6cdc18d5cf0 Mon Sep 17 00:00:00 2001 From: Martin Just Date: Thu, 26 Jun 2025 04:18:53 -0400 Subject: [PATCH 523/645] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/de.json b/src/strings/de.json index 9d04dcfb4..efb96b38c 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -2061,5 +2061,6 @@ "ButtonLearnMore": "Mehr erfahren", "TranscodingLoadError": "Transcodierungseinstellungen konnten nicht geladen werden", "ConfirmDeleteRepository": "Repository löschen?", - "DeleteRepositoryConfirmation": "Sind Sie sicher, dass Sie dieses Repository löschen wollen?" + "DeleteRepositoryConfirmation": "Sind Sie sicher, dass Sie dieses Repository löschen wollen?", + "LiveTVPageLoadError": "Aufzeichnungsseite konnte nicht geladen werden" } From f2d23db4836c4f11626d5f4d0623f782e2042595 Mon Sep 17 00:00:00 2001 From: Oatavandi Date: Thu, 26 Jun 2025 09:49:00 -0400 Subject: [PATCH 524/645] Translated using Weblate (Tamil) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ta/ --- src/strings/ta.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/strings/ta.json b/src/strings/ta.json index 86b8efe8a..875d4e2bb 100644 --- a/src/strings/ta.json +++ b/src/strings/ta.json @@ -1477,7 +1477,7 @@ "LabelUDPPortRange": "UDP தொடர்பு வரம்பு", "LabelSSDPTracingFilterHelp": "உள்நுழைந்த SSDP போக்குவரத்தை வடிகட்ட விருப்ப ஐபி முகவரி.", "LabelSSDPTracingFilter": "SSDP வடிகட்டி", - "LabelPublishedServerUriHelp": "ஜெல்லிஃபின் பயன்படுத்தும் URI ஐ இடைமுகம் அல்லது கிளையன்ட் ஐபி முகவரியின் அடிப்படையில் மேலெழுதவும்.", + "LabelPublishedServerUriHelp": "இடைமுகம் அல்லது கிளையன்ட் ஐபி முகவரியின் அடிப்படையில் ஜெல்லிஃபின் பயன்படுத்தும் URI ஐ மேலெழுதவும். எடுத்துக்காட்டாக: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, அல்லது all=https://jellyfin.example.com", "LabelPublishedServerUri": "வெளியிடப்பட்ட சேவையக URI கள்", "LabelIsForced": "கட்டாயப்படுத்தப்பட்டது", "LabelHDHomerunPortRangeHelp": "இந்த மதிப்பிற்கு HDHomeRun UDP போர்ட் வரம்பைக் கட்டுப்படுத்துகிறது. (இயல்புநிலை 1024 - 65535).", @@ -1904,5 +1904,8 @@ "ErrorDeletingLyrics": "சேவையகத்திலிருந்து பாடல் வரிகளை நீக்குவதில் பிழை. ஜெல்லிஃபின் மீடியா கோப்புறையில் எழுதுவதற்கான அணுகலைப் பெற்றுள்ளதா என்பதைச் சரிபார்த்து, மீண்டும் முயற்சிக்கவும்.", "HeaderNoLyrics": "பாடல் வரிகள் எதுவும் கிடைக்கவில்லை", "HeaderLyricDownloads": "பாடல் வரிகள் பதிவிறக்கம்", - "AllowFmp4TranscodingContainerHelp": "HEVC மற்றும் HDR பதிவுகளை செயல்படுத்துவதற்க்கு இந்த டியூனரிற்கு fMP4 ட்ரான்ஸ்கோடிங் கண்டெய்னரை அனுமதிக்கவும். எல்லா விதமான டியூனர்களும் இந்த கண்டெய்னருடன் ஒத்துவராது. தரவுகளை செயல்படுத்துவதில் ஏதேனும் தடங்கல் ஏற்பட்டால் இதை ஆஃப் செய்யவும்." + "AllowFmp4TranscodingContainerHelp": "HEVC மற்றும் HDR பதிவுகளை செயல்படுத்துவதற்க்கு இந்த டியூனரிற்கு fMP4 ட்ரான்ஸ்கோடிங் கண்டெய்னரை அனுமதிக்கவும். எல்லா விதமான டியூனர்களும் இந்த கண்டெய்னருடன் ஒத்துவராது. தரவுகளை செயல்படுத்துவதில் ஏதேனும் தடங்கல் ஏற்பட்டால் இதை ஆஃப் செய்யவும்.", + "Retry": "மீண்டும் முயற்சிக்கவும்", + "AllowStreamSharingHelp": "ட்யூனரிலிருந்து mpegts ஸ்ட்ரீமை நகலெடுத்து, இந்த நகல் ஸ்ட்ரீமை அதன் வாடிக்கையாளர்களுடன் பகிர்ந்து கொள்ள ஜெல்லிஃபினை அனுமதிக்கவும். ட்யூனருக்கு மொத்த ஸ்ட்ரீம் எண்ணிக்கை வரம்பு இருக்கும்போது இது பயனுள்ளதாக இருக்கும், ஆனால் பிளேபேக் சிக்கல்களையும் ஏற்படுத்தக்கூடும்.", + "Alternate": "மாற்று" } From 8979508efec2e4d36b6dd3eb89c41bc00485bdf3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Jun 2025 15:14:29 +0000 Subject: [PATCH 525/645] Update dependency @jellyfin/sdk to v0.0.0-unstable.202506260502 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index f733b5449..0ee4c6760 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202506120501", + "@jellyfin/sdk": "0.0.0-unstable.202506260502", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.12", "@mui/material": "6.4.12", @@ -4129,9 +4129,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202506120501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506120501.tgz", - "integrity": "sha512-Q6klssMF4FFVWE5zw3V2l7+xpU68FydCSLR9Wwol1LT/zoThpN56tBdscFCmLlTK4ZVCaj+dq3reML8U2h1czw==", + "version": "0.0.0-unstable.202506260502", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506260502.tgz", + "integrity": "sha512-+lTM6BwCY4O25tnZ2ZIegodrHWBXv+Kql5fadRNm9MISoR/ZMcg30z21oLtNLxZoqG+D66AjIzOaqipygyLaoA==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -27669,9 +27669,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202506120501", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506120501.tgz", - "integrity": "sha512-Q6klssMF4FFVWE5zw3V2l7+xpU68FydCSLR9Wwol1LT/zoThpN56tBdscFCmLlTK4ZVCaj+dq3reML8U2h1czw==", + "version": "0.0.0-unstable.202506260502", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506260502.tgz", + "integrity": "sha512-+lTM6BwCY4O25tnZ2ZIegodrHWBXv+Kql5fadRNm9MISoR/ZMcg30z21oLtNLxZoqG+D66AjIzOaqipygyLaoA==", "requires": {} }, "@jellyfin/ux-web": { diff --git a/package.json b/package.json index 81add10d8..64300b4b6 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@fontsource/noto-sans-sc": "5.2.5", "@fontsource/noto-sans-tc": "5.2.5", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202506120501", + "@jellyfin/sdk": "0.0.0-unstable.202506260502", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.12", "@mui/material": "6.4.12", From 515585d5fdef02c63b5b80798dc623893c77ff3e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Jun 2025 15:14:44 +0000 Subject: [PATCH 526/645] Update tanstack-query monorepo to v5.80.10 --- package-lock.json | 46 +++++++++++++++++++++++----------------------- package.json | 4 ++-- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index f733b5449..530aff3f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,8 +24,8 @@ "@mui/material": "6.4.12", "@mui/x-date-pickers": "7.29.4", "@react-hook/resize-observer": "2.0.2", - "@tanstack/react-query": "5.80.2", - "@tanstack/react-query-devtools": "5.80.2", + "@tanstack/react-query": "5.80.10", + "@tanstack/react-query-devtools": "5.80.10", "abortcontroller-polyfill": "1.7.8", "blurhash": "2.0.5", "classlist.js": "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz", @@ -5630,9 +5630,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.80.2", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.80.2.tgz", - "integrity": "sha512-g2Es97uwFk7omkWiH9JmtLWSA8lTUFVseIyzqbjqJEEx7qN+Hg6jbBdDvelqtakamppaJtGORQ64hEJ5S6ojSg==", + "version": "5.80.10", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.80.10.tgz", + "integrity": "sha512-mUNQOtzxkjL6jLbyChZoSBP6A5gQDVRUiPvW+/zw/9ftOAz+H754zCj3D8PwnzPKyHzGkQ9JbH48ukhym9LK1Q==", "license": "MIT", "funding": { "type": "github", @@ -5650,12 +5650,12 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.80.2", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.80.2.tgz", - "integrity": "sha512-LfA0SVheJBOqC8RfJw/JbOW3yh2zuONQeWU5Prjm7yjUGUONeOedky1Bj39Cfj8MRdXrZV+DxNT7/DN/M907lQ==", + "version": "5.80.10", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.80.10.tgz", + "integrity": "sha512-6zM098J8sLy9oU60XAdzUlAH4wVzoMVsWUWiiE/Iz4fd67PplxeyL4sw/MPcVJJVhbwGGXCsHn9GrQt2mlAzig==", "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.80.2" + "@tanstack/query-core": "5.80.10" }, "funding": { "type": "github", @@ -5666,9 +5666,9 @@ } }, "node_modules/@tanstack/react-query-devtools": { - "version": "5.80.2", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.80.2.tgz", - "integrity": "sha512-nGeCXBkSoYHKkQQO6pBr+DE8ML/EGd79MvFCkBPRcAA8u65OMNOJPXB0sg2AGgXX2+enTEQLHWZwjzukNB9gIA==", + "version": "5.80.10", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.80.10.tgz", + "integrity": "sha512-6JL63fSc7kxyGOLV2w466SxhMn/m7LZk/ximQciy6OpVt+n2A8Mq3S0QwhIzfm4WEwLK/F3OELfzRToQburnYA==", "license": "MIT", "dependencies": { "@tanstack/query-devtools": "5.80.0" @@ -5678,7 +5678,7 @@ "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "^5.80.2", + "@tanstack/react-query": "^5.80.10", "react": "^18 || ^19" } }, @@ -28439,9 +28439,9 @@ } }, "@tanstack/query-core": { - "version": "5.80.2", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.80.2.tgz", - "integrity": "sha512-g2Es97uwFk7omkWiH9JmtLWSA8lTUFVseIyzqbjqJEEx7qN+Hg6jbBdDvelqtakamppaJtGORQ64hEJ5S6ojSg==" + "version": "5.80.10", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.80.10.tgz", + "integrity": "sha512-mUNQOtzxkjL6jLbyChZoSBP6A5gQDVRUiPvW+/zw/9ftOAz+H754zCj3D8PwnzPKyHzGkQ9JbH48ukhym9LK1Q==" }, "@tanstack/query-devtools": { "version": "5.80.0", @@ -28449,17 +28449,17 @@ "integrity": "sha512-D6gH4asyjaoXrCOt5vG5Og/YSj0D/TxwNQgtLJIgWbhbWCC/emu2E92EFoVHh4ppVWg1qT2gKHvKyQBEFZhCuA==" }, "@tanstack/react-query": { - "version": "5.80.2", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.80.2.tgz", - "integrity": "sha512-LfA0SVheJBOqC8RfJw/JbOW3yh2zuONQeWU5Prjm7yjUGUONeOedky1Bj39Cfj8MRdXrZV+DxNT7/DN/M907lQ==", + "version": "5.80.10", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.80.10.tgz", + "integrity": "sha512-6zM098J8sLy9oU60XAdzUlAH4wVzoMVsWUWiiE/Iz4fd67PplxeyL4sw/MPcVJJVhbwGGXCsHn9GrQt2mlAzig==", "requires": { - "@tanstack/query-core": "5.80.2" + "@tanstack/query-core": "5.80.10" } }, "@tanstack/react-query-devtools": { - "version": "5.80.2", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.80.2.tgz", - "integrity": "sha512-nGeCXBkSoYHKkQQO6pBr+DE8ML/EGd79MvFCkBPRcAA8u65OMNOJPXB0sg2AGgXX2+enTEQLHWZwjzukNB9gIA==", + "version": "5.80.10", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.80.10.tgz", + "integrity": "sha512-6JL63fSc7kxyGOLV2w466SxhMn/m7LZk/ximQciy6OpVt+n2A8Mq3S0QwhIzfm4WEwLK/F3OELfzRToQburnYA==", "requires": { "@tanstack/query-devtools": "5.80.0" } diff --git a/package.json b/package.json index 81add10d8..63480243b 100644 --- a/package.json +++ b/package.json @@ -90,8 +90,8 @@ "@mui/material": "6.4.12", "@mui/x-date-pickers": "7.29.4", "@react-hook/resize-observer": "2.0.2", - "@tanstack/react-query": "5.80.2", - "@tanstack/react-query-devtools": "5.80.2", + "@tanstack/react-query": "5.80.10", + "@tanstack/react-query-devtools": "5.80.10", "abortcontroller-polyfill": "1.7.8", "blurhash": "2.0.5", "classlist.js": "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz", From e425c8d89fc594f32b8c47fe969fb517fcaf1dcd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Jun 2025 15:15:08 +0000 Subject: [PATCH 527/645] Update Linters --- package-lock.json | 837 ++++++++++++++++++++++++++-------------------- package.json | 14 +- 2 files changed, 474 insertions(+), 377 deletions(-) diff --git a/package-lock.json b/package-lock.json index f733b5449..39c76d012 100644 --- a/package-lock.json +++ b/package-lock.json @@ -73,8 +73,8 @@ "@babel/preset-env": "7.27.2", "@babel/preset-react": "7.27.1", "@eslint-community/eslint-plugin-eslint-comments": "4.5.0", - "@eslint/js": "9.28.0", - "@stylistic/eslint-plugin": "4.4.0", + "@eslint/js": "9.29.0", + "@stylistic/eslint-plugin": "4.4.1", "@stylistic/stylelint-plugin": "3.1.2", "@types/dompurify": "3.0.5", "@types/escape-html": "1.0.4", @@ -85,7 +85,7 @@ "@types/react-dom": "18.3.7", "@types/react-lazy-load-image-component": "1.6.4", "@types/sortablejs": "1.15.8", - "@typescript-eslint/parser": "8.33.1", + "@typescript-eslint/parser": "8.34.1", "@uupaa/dynamic-import-polyfill": "1.0.2", "@vitest/coverage-v8": "3.2.1", "autoprefixer": "10.4.21", @@ -97,13 +97,13 @@ "css-loader": "7.1.2", "cssnano": "7.0.7", "es-check": "9.1.2", - "eslint": "9.28.0", + "eslint": "9.29.0", "eslint-plugin-compat": "6.0.2", "eslint-plugin-import": "2.31.0", "eslint-plugin-jsx-a11y": "6.10.2", "eslint-plugin-react": "7.37.5", "eslint-plugin-react-hooks": "5.2.0", - "eslint-plugin-sonarjs": "3.0.2", + "eslint-plugin-sonarjs": "3.0.3", "expose-loader": "5.0.1", "fast-glob": "3.3.3", "fork-ts-checker-webpack-plugin": "9.1.0", @@ -121,11 +121,11 @@ "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", "style-loader": "4.0.0", - "stylelint": "16.20.0", + "stylelint": "16.21.0", "stylelint-config-rational-order": "0.1.2", "stylelint-no-browser-hacks": "2.0.0", "stylelint-order": "7.0.0", - "stylelint-scss": "6.12.0", + "stylelint-scss": "6.12.1", "ts-loader": "9.5.2", "typescript": "5.8.3", "typescript-eslint": "8.33.1", @@ -3746,9 +3746,9 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", - "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz", + "integrity": "sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3886,9 +3886,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.28.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.28.0.tgz", - "integrity": "sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==", + "version": "9.29.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.29.0.tgz", + "integrity": "sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==", "dev": true, "license": "MIT", "engines": { @@ -5383,9 +5383,9 @@ "license": "MIT" }, "node_modules/@stylistic/eslint-plugin": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-4.4.0.tgz", - "integrity": "sha512-bIh/d9X+OQLCAMdhHtps+frvyjvAM4B1YlSJzcEEhl7wXLIqPar3ngn9DrHhkBOrTA/z9J0bUMtctAspe0dxdQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-4.4.1.tgz", + "integrity": "sha512-CEigAk7eOLyHvdgmpZsKFwtiqS2wFwI1fn4j09IU9GmD4euFM4jEBAViWeCqaNLlbX2k2+A/Fq9cje4HQBXuJQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5402,119 +5402,6 @@ "eslint": ">=9.0.0" } }, - "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.0.tgz", - "integrity": "sha512-9Ac0X8WiLykl0aj1oYQNcLZjHgBojT6cW68yAgZ19letYu+Hxd0rE0veI1XznSSst1X5lwnxhPbVdwjDRIomRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.34.0", - "@typescript-eslint/visitor-keys": "8.34.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.0.tgz", - "integrity": "sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.0.tgz", - "integrity": "sha512-rOi4KZxI7E0+BMqG7emPSK1bB4RICCpF7QD3KCLXn9ZvWoESsOMlHyZPAHyG04ujVplPaHbmEvs34m+wjgtVtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.34.0", - "@typescript-eslint/tsconfig-utils": "8.34.0", - "@typescript-eslint/types": "8.34.0", - "@typescript-eslint/visitor-keys": "8.34.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.0.tgz", - "integrity": "sha512-8L4tWatGchV9A1cKbjaavS6mwYwp39jql8xUmIIKJdm+qiaeHy5KMKlBrf30akXAWBzn2SqKsNOtSENWUwg7XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.34.0", - "@typescript-eslint/types": "8.34.0", - "@typescript-eslint/typescript-estree": "8.34.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.0.tgz", - "integrity": "sha512-qHV7pW7E85A0x6qyrFn+O+q1k1p3tQCsqIZ1KZ5ESLXY57aTvUd3/a4rdPTeXisvhXn2VQG0VSKUqs8KHF2zcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.34.0", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@stylistic/eslint-plugin/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/@stylistic/eslint-plugin/node_modules/eslint-visitor-keys": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", @@ -5538,22 +5425,6 @@ "node": ">=4.0" } }, - "node_modules/@stylistic/eslint-plugin/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@stylistic/eslint-plugin/node_modules/picomatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", @@ -5567,19 +5438,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@stylistic/eslint-plugin/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@stylistic/stylelint-plugin": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.1.2.tgz", @@ -6224,16 +6082,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.1.tgz", - "integrity": "sha512-qwxv6dq682yVvgKKp2qWwLgRbscDAYktPptK4JPojCwwi3R9cwrvIxS4lvBpzmcqzR4bdn54Z0IG1uHFskW4dA==", + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.1.tgz", + "integrity": "sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.33.1", - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/typescript-estree": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1", + "@typescript-eslint/scope-manager": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/typescript-estree": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", "debug": "^4.3.4" }, "engines": { @@ -6248,15 +6106,146 @@ "typescript": ">=4.8.4 <5.9.0" } }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.0.tgz", - "integrity": "sha512-iEgDALRf970/B2YExmtPMPF54NenZUf4xpL3wsCRx/lgjz6ul/l13R81ozP/ZNuXfnLCS+oPmG7JIxfdNYKELw==", + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz", + "integrity": "sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.34.0", - "@typescript-eslint/types": "^8.34.0", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.1.tgz", + "integrity": "sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz", + "integrity": "sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.34.1", + "@typescript-eslint/tsconfig-utils": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz", + "integrity": "sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.34.1", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.1.tgz", + "integrity": "sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.34.1", + "@typescript-eslint/types": "^8.34.1", "debug": "^4.3.4" }, "engines": { @@ -6271,9 +6260,9 @@ } }, "node_modules/@typescript-eslint/project-service/node_modules/@typescript-eslint/types": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.0.tgz", - "integrity": "sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==", + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.0.tgz", + "integrity": "sha512-0mYH3emanku0vHw2aRLNGqe7EXh9WHEhi7kZzscrMDf6IIRUQ5Jk4wp1QrledE/36KtdZrVfKnE32eZCf/vaVQ==", "dev": true, "license": "MIT", "engines": { @@ -6303,9 +6292,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.0.tgz", - "integrity": "sha512-+W9VYHKFIzA5cBeooqQxqNriAP0QeQ7xTiDuIOr71hzgffm3EL2hxwWBIIj4GuofIbKxGNarpKqIq6Q6YrShOA==", + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.1.tgz", + "integrity": "sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==", "dev": true, "license": "MIT", "engines": { @@ -10497,19 +10486,19 @@ } }, "node_modules/eslint": { - "version": "9.28.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.28.0.tgz", - "integrity": "sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==", + "version": "9.29.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz", + "integrity": "sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.20.0", + "@eslint/config-array": "^0.20.1", "@eslint/config-helpers": "^0.2.1", "@eslint/core": "^0.14.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.28.0", + "@eslint/js": "9.29.0", "@eslint/plugin-kit": "^0.3.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -10521,9 +10510,9 @@ "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.3.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -10890,9 +10879,9 @@ } }, "node_modules/eslint-plugin-sonarjs": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-3.0.2.tgz", - "integrity": "sha512-LxjbfwI7ypENeTmGyKmDyNux3COSkMi7H/6Cal5StSLQ6edf0naP45SZR43OclaNR7WfhVTZdhOn63q3/Y6puQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-3.0.3.tgz", + "integrity": "sha512-/UrTz8wyTW0MQVJKUF70vSjsMMf54+0cKHWAuYObuE82vNM8zrscm0wvZprolHNN0PIdnvVQ9Dm6MQkIzOKu4A==", "dev": true, "license": "LGPL-3.0-only", "dependencies": { @@ -10903,17 +10892,17 @@ "jsx-ast-utils": "3.3.5", "minimatch": "9.0.5", "scslre": "0.3.0", - "semver": "7.7.1", - "typescript": "^5" + "semver": "7.7.2", + "typescript": ">=5" }, "peerDependencies": { "eslint": "^8.0.0 || ^9.0.0" } }, "node_modules/eslint-plugin-sonarjs/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10947,9 +10936,9 @@ } }, "node_modules/eslint-plugin-sonarjs/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "license": "ISC", "bin": { @@ -11216,15 +11205,15 @@ } }, "node_modules/espree": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.14.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" + "eslint-visitor-keys": "^4.2.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -11233,10 +11222,23 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/espree/node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -21304,9 +21306,9 @@ } }, "node_modules/stylelint": { - "version": "16.20.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.20.0.tgz", - "integrity": "sha512-B5Myu9WRxrgKuLs3YyUXLP2H0mrbejwNxPmyADlACWwFsrL8Bmor/nTSh4OMae5sHjOz6gkSeccQH34gM4/nAw==", + "version": "16.21.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.21.0.tgz", + "integrity": "sha512-ki3PpJGG7xhm3WtINoWGnlvqAmbqSexoRMbEMJzlwewSIOqPRKPlq452c22xAdEJISVi80r+I7KL9GPUiwFgbg==", "dev": true, "funding": [ { @@ -21320,9 +21322,9 @@ ], "license": "MIT", "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3", "@csstools/selector-specificity": "^5.0.0", "@dual-bundle/import-meta-resolve": "^4.1.0", "balanced-match": "^2.0.0", @@ -21333,21 +21335,21 @@ "debug": "^4.4.1", "fast-glob": "^3.3.3", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^10.1.0", + "file-entry-cache": "^10.1.1", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^7.0.4", + "ignore": "^7.0.5", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.36.0", + "known-css-properties": "^0.37.0", "mathml-tag-names": "^2.1.3", "meow": "^13.2.0", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "picocolors": "^1.1.1", - "postcss": "^8.5.3", + "postcss": "^8.5.5", "postcss-resolve-nested-selector": "^0.1.6", "postcss-safe-parser": "^7.0.1", "postcss-selector-parser": "^7.1.0", @@ -22367,9 +22369,9 @@ } }, "node_modules/stylelint-scss": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.12.0.tgz", - "integrity": "sha512-U7CKhi1YNkM1pXUXl/GMUXi8xKdhl4Ayxdyceie1nZ1XNIdaUgMV6OArpooWcDzEggwgYD0HP/xIgVJo9a655w==", + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.12.1.tgz", + "integrity": "sha512-UJUfBFIvXfly8WKIgmqfmkGKPilKB4L5j38JfsDd+OCg2GBdU0vGUV08Uw82tsRZzd4TbsUURVVNGeOhJVF7pA==", "dev": true, "license": "MIT", "dependencies": { @@ -22421,9 +22423,9 @@ } }, "node_modules/stylelint-scss/node_modules/mdn-data": { - "version": "2.21.0", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.21.0.tgz", - "integrity": "sha512-+ZKPQezM5vYJIkCxaC+4DTnRrVZR1CgsKLu5zsQERQx6Tea8Y+wMx5A24rq8A8NepCeatIQufVAekKNgiBMsGQ==", + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.22.0.tgz", + "integrity": "sha512-IwcXqjPl4kgZbQH1WLb97/Pjt7XwPDSHnXsjENPhwx68bBf/Dw1/PwM8paXnFq974V1d8qP4o9ViVQqZuPAlCw==", "dev": true, "license": "CC0-1.0" }, @@ -22666,6 +22668,13 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/stylelint/node_modules/known-css-properties": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz", + "integrity": "sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==", + "dev": true, + "license": "MIT" + }, "node_modules/stylelint/node_modules/mdn-data": { "version": "2.12.2", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", @@ -22692,6 +22701,35 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/stylelint/node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/stylelint/node_modules/postcss-safe-parser": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", @@ -23918,6 +23956,31 @@ "typescript": ">=4.8.4 <5.9.0" } }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.1.tgz", + "integrity": "sha512-qwxv6dq682yVvgKKp2qWwLgRbscDAYktPptK4JPojCwwi3R9cwrvIxS4lvBpzmcqzR4bdn54Z0IG1uHFskW4dA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.33.1", + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/typescript-estree": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, "node_modules/uc.micro": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", @@ -27422,9 +27485,9 @@ "dev": true }, "@eslint/config-array": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", - "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz", + "integrity": "sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==", "dev": true, "requires": { "@eslint/object-schema": "^2.1.6", @@ -27522,9 +27585,9 @@ } }, "@eslint/js": { - "version": "9.28.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.28.0.tgz", - "integrity": "sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==", + "version": "9.29.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.29.0.tgz", + "integrity": "sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==", "dev": true }, "@eslint/object-schema": { @@ -28294,9 +28357,9 @@ "dev": true }, "@stylistic/eslint-plugin": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-4.4.0.tgz", - "integrity": "sha512-bIh/d9X+OQLCAMdhHtps+frvyjvAM4B1YlSJzcEEhl7wXLIqPar3ngn9DrHhkBOrTA/z9J0bUMtctAspe0dxdQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-4.4.1.tgz", + "integrity": "sha512-CEigAk7eOLyHvdgmpZsKFwtiqS2wFwI1fn4j09IU9GmD4euFM4jEBAViWeCqaNLlbX2k2+A/Fq9cje4HQBXuJQ==", "dev": true, "requires": { "@typescript-eslint/utils": "^8.32.1", @@ -28306,71 +28369,6 @@ "picomatch": "^4.0.2" }, "dependencies": { - "@typescript-eslint/scope-manager": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.0.tgz", - "integrity": "sha512-9Ac0X8WiLykl0aj1oYQNcLZjHgBojT6cW68yAgZ19letYu+Hxd0rE0veI1XznSSst1X5lwnxhPbVdwjDRIomRw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "8.34.0", - "@typescript-eslint/visitor-keys": "8.34.0" - } - }, - "@typescript-eslint/types": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.0.tgz", - "integrity": "sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.0.tgz", - "integrity": "sha512-rOi4KZxI7E0+BMqG7emPSK1bB4RICCpF7QD3KCLXn9ZvWoESsOMlHyZPAHyG04ujVplPaHbmEvs34m+wjgtVtg==", - "dev": true, - "requires": { - "@typescript-eslint/project-service": "8.34.0", - "@typescript-eslint/tsconfig-utils": "8.34.0", - "@typescript-eslint/types": "8.34.0", - "@typescript-eslint/visitor-keys": "8.34.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - } - }, - "@typescript-eslint/utils": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.0.tgz", - "integrity": "sha512-8L4tWatGchV9A1cKbjaavS6mwYwp39jql8xUmIIKJdm+qiaeHy5KMKlBrf30akXAWBzn2SqKsNOtSENWUwg7XQ==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.34.0", - "@typescript-eslint/types": "8.34.0", - "@typescript-eslint/typescript-estree": "8.34.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.0.tgz", - "integrity": "sha512-qHV7pW7E85A0x6qyrFn+O+q1k1p3tQCsqIZ1KZ5ESLXY57aTvUd3/a4rdPTeXisvhXn2VQG0VSKUqs8KHF2zcA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "8.34.0", - "eslint-visitor-keys": "^4.2.0" - } - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, "eslint-visitor-keys": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", @@ -28383,26 +28381,11 @@ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, - "minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, "picomatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true - }, - "semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true } } }, @@ -28919,33 +28902,109 @@ } }, "@typescript-eslint/parser": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.1.tgz", - "integrity": "sha512-qwxv6dq682yVvgKKp2qWwLgRbscDAYktPptK4JPojCwwi3R9cwrvIxS4lvBpzmcqzR4bdn54Z0IG1uHFskW4dA==", + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.1.tgz", + "integrity": "sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "8.33.1", - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/typescript-estree": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1", + "@typescript-eslint/scope-manager": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/typescript-estree": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", "debug": "^4.3.4" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz", + "integrity": "sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1" + } + }, + "@typescript-eslint/types": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.1.tgz", + "integrity": "sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz", + "integrity": "sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==", + "dev": true, + "requires": { + "@typescript-eslint/project-service": "8.34.1", + "@typescript-eslint/tsconfig-utils": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz", + "integrity": "sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.34.1", + "eslint-visitor-keys": "^4.2.1" + } + }, + "brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true + } } }, "@typescript-eslint/project-service": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.0.tgz", - "integrity": "sha512-iEgDALRf970/B2YExmtPMPF54NenZUf4xpL3wsCRx/lgjz6ul/l13R81ozP/ZNuXfnLCS+oPmG7JIxfdNYKELw==", + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.1.tgz", + "integrity": "sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==", "dev": true, "requires": { - "@typescript-eslint/tsconfig-utils": "^8.34.0", - "@typescript-eslint/types": "^8.34.0", + "@typescript-eslint/tsconfig-utils": "^8.34.1", + "@typescript-eslint/types": "^8.34.1", "debug": "^4.3.4" }, "dependencies": { "@typescript-eslint/types": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.0.tgz", - "integrity": "sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==", + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.0.tgz", + "integrity": "sha512-0mYH3emanku0vHw2aRLNGqe7EXh9WHEhi7kZzscrMDf6IIRUQ5Jk4wp1QrledE/36KtdZrVfKnE32eZCf/vaVQ==", "dev": true } } @@ -28961,9 +29020,9 @@ } }, "@typescript-eslint/tsconfig-utils": { - "version": "8.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.0.tgz", - "integrity": "sha512-+W9VYHKFIzA5cBeooqQxqNriAP0QeQ7xTiDuIOr71hzgffm3EL2hxwWBIIj4GuofIbKxGNarpKqIq6Q6YrShOA==", + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.1.tgz", + "integrity": "sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==", "dev": true, "requires": {} }, @@ -31900,18 +31959,18 @@ "dev": true }, "eslint": { - "version": "9.28.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.28.0.tgz", - "integrity": "sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==", + "version": "9.29.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz", + "integrity": "sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.20.0", + "@eslint/config-array": "^0.20.1", "@eslint/config-helpers": "^0.2.1", "@eslint/core": "^0.14.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.28.0", + "@eslint/js": "9.29.0", "@eslint/plugin-kit": "^0.3.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -31923,9 +31982,9 @@ "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.3.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -32327,9 +32386,9 @@ "requires": {} }, "eslint-plugin-sonarjs": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-3.0.2.tgz", - "integrity": "sha512-LxjbfwI7ypENeTmGyKmDyNux3COSkMi7H/6Cal5StSLQ6edf0naP45SZR43OclaNR7WfhVTZdhOn63q3/Y6puQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-3.0.3.tgz", + "integrity": "sha512-/UrTz8wyTW0MQVJKUF70vSjsMMf54+0cKHWAuYObuE82vNM8zrscm0wvZprolHNN0PIdnvVQ9Dm6MQkIzOKu4A==", "dev": true, "requires": { "@eslint-community/regexpp": "4.12.1", @@ -32339,14 +32398,14 @@ "jsx-ast-utils": "3.3.5", "minimatch": "9.0.5", "scslre": "0.3.0", - "semver": "7.7.1", - "typescript": "^5" + "semver": "7.7.2", + "typescript": ">=5" }, "dependencies": { "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -32368,9 +32427,9 @@ } }, "semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true } } @@ -32392,20 +32451,26 @@ "dev": true }, "espree": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "requires": { - "acorn": "^8.14.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" + "eslint-visitor-keys": "^4.2.1" }, "dependencies": { + "acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true + }, "eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true } } @@ -39304,14 +39369,14 @@ } }, "stylelint": { - "version": "16.20.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.20.0.tgz", - "integrity": "sha512-B5Myu9WRxrgKuLs3YyUXLP2H0mrbejwNxPmyADlACWwFsrL8Bmor/nTSh4OMae5sHjOz6gkSeccQH34gM4/nAw==", + "version": "16.21.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.21.0.tgz", + "integrity": "sha512-ki3PpJGG7xhm3WtINoWGnlvqAmbqSexoRMbEMJzlwewSIOqPRKPlq452c22xAdEJISVi80r+I7KL9GPUiwFgbg==", "dev": true, "requires": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "@csstools/media-query-list-parser": "^4.0.2", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3", "@csstools/selector-specificity": "^5.0.0", "@dual-bundle/import-meta-resolve": "^4.1.0", "balanced-match": "^2.0.0", @@ -39322,21 +39387,21 @@ "debug": "^4.4.1", "fast-glob": "^3.3.3", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^10.1.0", + "file-entry-cache": "^10.1.1", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^7.0.4", + "ignore": "^7.0.5", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.36.0", + "known-css-properties": "^0.37.0", "mathml-tag-names": "^2.1.3", "meow": "^13.2.0", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "picocolors": "^1.1.1", - "postcss": "^8.5.3", + "postcss": "^8.5.5", "postcss-resolve-nested-selector": "^0.1.6", "postcss-safe-parser": "^7.0.1", "postcss-selector-parser": "^7.1.0", @@ -39484,6 +39549,12 @@ "argparse": "^2.0.1" } }, + "known-css-properties": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz", + "integrity": "sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==", + "dev": true + }, "mdn-data": { "version": "2.12.2", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", @@ -39502,6 +39573,17 @@ "lines-and-columns": "^1.1.6" } }, + "postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "requires": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + } + }, "postcss-safe-parser": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", @@ -40322,9 +40404,9 @@ } }, "stylelint-scss": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.12.0.tgz", - "integrity": "sha512-U7CKhi1YNkM1pXUXl/GMUXi8xKdhl4Ayxdyceie1nZ1XNIdaUgMV6OArpooWcDzEggwgYD0HP/xIgVJo9a655w==", + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.12.1.tgz", + "integrity": "sha512-UJUfBFIvXfly8WKIgmqfmkGKPilKB4L5j38JfsDd+OCg2GBdU0vGUV08Uw82tsRZzd4TbsUURVVNGeOhJVF7pA==", "dev": true, "requires": { "css-tree": "^3.0.1", @@ -40362,9 +40444,9 @@ "dev": true }, "mdn-data": { - "version": "2.21.0", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.21.0.tgz", - "integrity": "sha512-+ZKPQezM5vYJIkCxaC+4DTnRrVZR1CgsKLu5zsQERQx6Tea8Y+wMx5A24rq8A8NepCeatIQufVAekKNgiBMsGQ==", + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.22.0.tgz", + "integrity": "sha512-IwcXqjPl4kgZbQH1WLb97/Pjt7XwPDSHnXsjENPhwx68bBf/Dw1/PwM8paXnFq974V1d8qP4o9ViVQqZuPAlCw==", "dev": true }, "postcss-selector-parser": { @@ -41171,6 +41253,21 @@ "@typescript-eslint/eslint-plugin": "8.33.1", "@typescript-eslint/parser": "8.33.1", "@typescript-eslint/utils": "8.33.1" + }, + "dependencies": { + "@typescript-eslint/parser": { + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.1.tgz", + "integrity": "sha512-qwxv6dq682yVvgKKp2qWwLgRbscDAYktPptK4JPojCwwi3R9cwrvIxS4lvBpzmcqzR4bdn54Z0IG1uHFskW4dA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "8.33.1", + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/typescript-estree": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1", + "debug": "^4.3.4" + } + } } }, "uc.micro": { diff --git a/package.json b/package.json index 81add10d8..a2dc46b74 100644 --- a/package.json +++ b/package.json @@ -10,8 +10,8 @@ "@babel/preset-env": "7.27.2", "@babel/preset-react": "7.27.1", "@eslint-community/eslint-plugin-eslint-comments": "4.5.0", - "@eslint/js": "9.28.0", - "@stylistic/eslint-plugin": "4.4.0", + "@eslint/js": "9.29.0", + "@stylistic/eslint-plugin": "4.4.1", "@stylistic/stylelint-plugin": "3.1.2", "@types/dompurify": "3.0.5", "@types/escape-html": "1.0.4", @@ -22,7 +22,7 @@ "@types/react-dom": "18.3.7", "@types/react-lazy-load-image-component": "1.6.4", "@types/sortablejs": "1.15.8", - "@typescript-eslint/parser": "8.33.1", + "@typescript-eslint/parser": "8.34.1", "@uupaa/dynamic-import-polyfill": "1.0.2", "@vitest/coverage-v8": "3.2.1", "autoprefixer": "10.4.21", @@ -34,13 +34,13 @@ "css-loader": "7.1.2", "cssnano": "7.0.7", "es-check": "9.1.2", - "eslint": "9.28.0", + "eslint": "9.29.0", "eslint-plugin-compat": "6.0.2", "eslint-plugin-import": "2.31.0", "eslint-plugin-jsx-a11y": "6.10.2", "eslint-plugin-react": "7.37.5", "eslint-plugin-react-hooks": "5.2.0", - "eslint-plugin-sonarjs": "3.0.2", + "eslint-plugin-sonarjs": "3.0.3", "expose-loader": "5.0.1", "fast-glob": "3.3.3", "fork-ts-checker-webpack-plugin": "9.1.0", @@ -58,11 +58,11 @@ "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", "style-loader": "4.0.0", - "stylelint": "16.20.0", + "stylelint": "16.21.0", "stylelint-config-rational-order": "0.1.2", "stylelint-no-browser-hacks": "2.0.0", "stylelint-order": "7.0.0", - "stylelint-scss": "6.12.0", + "stylelint-scss": "6.12.1", "ts-loader": "9.5.2", "typescript": "5.8.3", "typescript-eslint": "8.33.1", From b300ebdfda7bee837127473941956d43a7945ba5 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Thu, 26 Jun 2025 13:57:21 -0400 Subject: [PATCH 528/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 50 ++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index f7cb6b7bc..55342d1fb 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -334,16 +334,16 @@ "LabelRefreshMode": "Mode d'actualització", "LabelReleaseDate": "Data de llançament", "LabelSaveLocalMetadata": "Desa les imatges als directoris multimèdia", - "LabelSaveLocalMetadataHelp": "Desar les imatges als directoris multimèdia les ubicarà a un lloc on podran ser editats fàcilment.", + "LabelSaveLocalMetadataHelp": "Desar les imatges als directoris multimèdia les ubicarà a un lloc on podran ser editades fàcilment.", "LabelScreensaver": "Estalvi de pantalla", "LabelSeasonNumber": "Temporada", "LabelSelectFolderGroups": "Agrupa automàticament el contingut de les següents carpetes en col·leccions com 'Pel·lícules', 'Música' i 'TV'", - "LabelSelectFolderGroupsHelp": "Les carpetes desmarcades serán mostrades individualment en la seva pròpia vista.", + "LabelSelectFolderGroupsHelp": "Els directoris desmarcats seran mostrats individualment en la seva pròpia vista.", "LabelSelectUsers": "Selecciona usuaris", - "LabelSelectVersionToInstall": "Seleccioni la versió a instal·lar", + "LabelSelectVersionToInstall": "Seleccioneu la versió a instal·lar", "LabelSendNotificationToUsers": "Envia la notificació a", "LabelSerialNumber": "Nombre de sèrie", - "LabelSeriesRecordingPath": "Directori de gravació de sèries", + "LabelSeriesRecordingPath": "Ruta de l'enregistrament de sèries", "LabelSortTitle": "Títol d'endreçat", "LabelSource": "Font", "LabelStartWhenPossible": "Inicia quan sigui possible", @@ -840,7 +840,7 @@ "LabelSelectStereo": "Estèreo", "LabelSelectMono": "Mono", "LabelSelectAudioChannels": "Canals", - "LabelAllowedAudioChannels": "Màxim permès Canals d'àudio", + "LabelAllowedAudioChannels": "Màxim permès de canals d'àudio", "AllowHevcEncoding": "Permetre la codificació en format HEVC", "PreferFmp4HlsContainerHelp": "Prefereixen utilitzar FMP4 com el contenidor predeterminat per HLS, de manera que és possible corrent directe contingut HEVC i AV1 en els dispositius compatibles.", "PreferFmp4HlsContainer": "Prefereixo el contenidor multimèdia fMP4-HLS", @@ -1165,22 +1165,22 @@ "LabelSkipIfGraphicalSubsPresentHelp": "Mantenir versions de text de subtítols donarà lloc a un lliurament més eficient i disminuir la probabilitat de transcodificació de vídeo.", "LabelSkipIfGraphicalSubsPresent": "Saltar si el vídeo ja conté subtítols incrustats", "LabelSkipIfAudioTrackPresentHelp": "Desmarqueu això per assegurar tots els vídeos tenen subtítols, sense importar l'idioma d'àudio.", - "LabelSkipIfAudioTrackPresent": "Saltar si la pista d'àudio per defecte coincideix amb l'idioma descàrrega", - "LabelSkipForwardLength": "Saltar cap endavant longitud", - "LabelSkipBackLength": "Saltar llarg d'esquena", + "LabelSkipIfAudioTrackPresent": "Salta-ho si la pista d'àudio per defecte coincideix amb l'idioma de descàrrega", + "LabelSkipForwardLength": "Temps d'avançament", + "LabelSkipBackLength": "Temps de rebobinat", "LabelSize": "Mida", - "LabelSimultaneousConnectionLimit": "Límit de corrent simultània", + "LabelSimultaneousConnectionLimit": "Límit de fluxos simultanis de dades", "LabelServerHostHelp": "192.168.1.100:8096 o https://myserver.com", "LabelServerHost": "Amfitrió", - "LabelScheduledTaskLastRan": "Darrera execució {0}, ha trigat {1}.", + "LabelScheduledTaskLastRan": "La darrera execució {0}, ha trigat {1}.", "LabelRuntimeMinutes": "Temps d'execució", - "LabelRequireHttpsHelp": "Si se selecciona, el servidor redirigirà automàticament totes les sol·licituds a través d'HTTP a HTTPS. Això no té efecte si el servidor no està escoltant en HTTPS.", - "LabelRequireHttps": "Requerir HTTPS", - "LabelRepositoryUrlHelp": "La ubicació de l'manifest repositori que voleu incloure.", + "LabelRequireHttpsHelp": "Si se selecciona, el servidor redirigirà automàticament totes les sol·licituds d'HTTP cap a HTTPS. Això no té efecte si el servidor no està escoltant en HTTPS.", + "LabelRequireHttps": "Requereix HTTPS", + "LabelRepositoryUrlHelp": "La ubicació del manifest repositori que voleu incloure.", "LabelRepositoryUrl": "URL del repositori", "LabelRepositoryNameHelp": "Un nom per distingir aquest repositori dels altres afegits al servidor.", "LabelRepositoryName": "Nom del repositori", - "LabelRemoteClientBitrateLimitHelp": "Un límit opcional de taxa de bits per cada corrent de tot fora dels dispositius de xarxa. Això és útil per evitar que els dispositius de sol·licitar una taxa de bits més alta que la connexió a Internet pot gestionar. Això pot resultar en una major càrrega de la CPU en el servidor per tal de transcodificació de vídeos sobre la marxa a una menor taxa de bits.", + "LabelRemoteClientBitrateLimitHelp": "Un límit opcional de taxa de bits per als dispositius que es trobin fora de xarxa. És útil per evitar que els dispositius sol·licitin una taxa de bits més alta que la que pot gestionar la vostra connexió a Internet. Això pot resultar en una major càrrega de la CPU en el servidor per tal de transcodificar els vídeos sobre la marxa a una menor taxa de bits.", "LabelRemoteClientBitrateLimit": "Límit de la taxa de bits en transmetre per Internet (Mbps)", "LabelRecordingPathHelp": "Especifiqueu la ubicació per defecte per a desar els enregistraments. Si es deixa buit, es farà servir el directori de dades de programa del servidor.", "LabelReasonForTranscoding": "Motiu per a la transcodificació", @@ -1658,15 +1658,15 @@ "MessageNoItemsAvailable": "No hi han elements disponibles actualment.", "MessageRenameMediaFolder": "Canviar una mediateca de nom provocarà que es perdin totes les metadades, continueu amb precaució.", "LabelTextWeight": "Estil de text", - "RememberSubtitleSelections": "Establir la pista de subtítols en funció de l'element anterior", + "RememberSubtitleSelections": "Estableix la pista de subtítols en funció de l'element anterior", "LabelVppTonemappingBrightnessHelp": "Aplicar el guany de brillantor al mapa de to VPP. El valor recomanat és 16.", "MediaInfoRpuPresentFlag": "Flag DV rpu predeterminat", "MediaInfoDvBlSignalCompatibilityId": "Identificador de compatibilitat del senyal DV bl", "Unreleased": "Encara no s'ha publicat", "OptionDateShowAdded": "Data de la sèrie afegida", - "RememberAudioSelectionsHelp": "Intentar establir la pista d'àudio amb la coincidència més semblant a l'últim vídeo.", - "RememberSubtitleSelectionsHelp": "Intentar configurar la pista de subtítols amb la coincidència més semblant a l'últim vídeo.", - "RememberAudioSelections": "Establir la pista d'àudio en funció de l'element anterior", + "RememberAudioSelectionsHelp": "Intenta establir la pista d'àudio amb la coincidència més semblant a l'últim vídeo.", + "RememberSubtitleSelectionsHelp": "Intenta configurar la pista de subtítols amb la coincidència més semblant a l'últim vídeo.", + "RememberAudioSelections": "Estableix la pista d'àudio en funció de l'element anterior", "EnableEnhancedNvdecDecoderHelp": "Implementació millorada de NVDEC, desactiveu aquesta opció per a utilitzar CUVID si trobeu errors de descodificació.", "LabelVppTonemappingBrightness": "Guany de brillantor del mapa de to VPP", "LabelVppTonemappingContrast": "Guany de contrast de mapatge de to VPP", @@ -1820,7 +1820,7 @@ "PriorityHigh": "Alta", "EnableLibrary": "Habilita la mediateca", "EnableLibraryHelp": "Deshabilitar la mediateca l'amagarà per a tots els usuaris.", - "LimitSupportedVideoResolution": "Limitar la resolució màxima de vídeo suportada", + "LimitSupportedVideoResolution": "Limita la resolució màxima de vídeo suportada", "LimitSupportedVideoResolutionHelp": "Utilitzar \"La màxima resolució de transcodificació de vídeo permesa\" com a màxima resolució suportada.", "PlaybackError.FATAL_HLS_ERROR": "S'ha produït un error fatal al stream HLS.", "PlaybackError.RateLimitExceeded": "Aquest contingut multimèdia no es pot reproduir en aquests instants deguts a límits de transmissió.", @@ -1958,17 +1958,17 @@ "LabelLyricDownloaders": "Descarregador de lletres", "LabelQsvDeviceHelp": "Específica el dispositiu Intel QSV en els sistemes amb múltiples GPU. En sistemes Linux, això és un node de renderitzat, per exemple, /dev/dri/renderD128. En Windows, és un índex de dispositiu que comença al 0. Deixeu-ho en blanc a no ser que sapigueu què esteu fent.", "LabelScreensaverTime": "Temps de l'estalvi de pantalla", - "LabelScreensaverTimeHelp": "La quantitat de temps d'inactivitat en segons necessària per activar l'estalvi de pantalla.", + "LabelScreensaverTimeHelp": "La quantitat de temps, en segons d'inactivitat, necessària per activar l'estalvi de pantalla.", "MediaSegmentAction.AskToSkip": "Solicitar saltar", - "MediaSegmentSkipPrompt": "Saltar {0}", + "MediaSegmentSkipPrompt": "Salta {0}", "MediaSegmentType.Commercial": "Comercial", "MediaSegmentType.Recap": "Recapitulació", - "MediaSegmentType.Outro": "Tancament", + "MediaSegmentType.Outro": "Crèdits", "MediaSegmentType.Preview": "Previsualització", "PlaylistError.UpdateFailed": "Error en actualitzar la llista de reproducció", "LabelAlwaysRemuxFlacAudioFiles": "Sempre re-multiplexa els fitxers d'àudio FLAC", "LabelAlwaysRemuxMp3AudioFiles": "Sempre re-multiplexa els fitxers d'àudio MP3", - "LabelSaveTrickplayLocally": "Desa previsualitzacions junt amb els continguts multimèdia", + "LabelSaveTrickplayLocally": "Desa les imatges de previsualització junt amb els continguts multimèdia", "LabelSaveTrickplayLocallyHelp": "Desant les imatges de previsualització als directoris multimèdia, quedaran junt amb els continguts multimèdia per a més fàcil migració i accés.", "LyricDownloadersHelp": "Activa i classifica els descarregadors de lletres preferits en ordre de prioritat.", "MessageSplitVersionsError": "S'ha produït un error separant les versions", @@ -2021,7 +2021,7 @@ "UploadCustomImage": "Pujar imatge personalitzada", "ReadInputAtNativeFramerate": "Llegeix l'origen a la velocitat de fotogrames nativa", "ReadInputAtNativeFramerateHelp": "Activant aquesta opció pot solucionar alguns problemes, p. ex. retransmissions en directe que es paren sobtadament.", - "LimitSegmentLength": "Utilitzar segments HLS escurçats", + "LimitSegmentLength": "Fes servir els segments HLS més curts", "LimitSegmentLengthHelp": "Activar aquesta opció pot ajudar a prevenir que el reproductor HLS es pengi durant la cerca en alguns dispositius, com televisors webOS.", "HeaderServerUnavailable": "El servidor no està disponible", "HeaderUpdateRequired": "Cal una actualització", @@ -2040,7 +2040,7 @@ "HeaderBackupsHelp": "Crea i restaura còpies del servidor, les quals poden incloure la base de dades, metadades, subtítols i imatges de previsualització.", "LabelBackupsUnavailable": "No hi ha còpies de seguretat disponibles", "LabelDatabase": "Base de dades", - "LabelRestore": "Restaurar", + "LabelRestore": "Restaura", "MessageBackupInProgress": "Còpia de seguretat en progrés", "MessageRestoreInProgress": "Restabliment en procés", "Success": "Èxit", From 2efaf91a04d361da583a737c2b1916249306df54 Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Thu, 26 Jun 2025 13:28:20 -0400 Subject: [PATCH 529/645] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index d98019b9e..f0f172c8c 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -1728,7 +1728,7 @@ "OptionDateShowAdded": "Data de adição da Série", "LabelLevel": "Nível", "LabelSystem": "Sistema", - "LogLevel.Debug": "Debug", + "LogLevel.Debug": "Depuração", "LabelDeveloper": "Desenvolvedor", "LabelTonemappingMode": "Modo do mapeamento de tons", "LabelDate": "Data", @@ -1736,7 +1736,7 @@ "Unknown": "Desconhecido", "HeaderEpisodesStatus": "Estado do Episódio", "LabelMediaDetails": "Detalhes do conteúdo multimédia", - "LogLevel.Trace": "Vestígio", + "LogLevel.Trace": "Rastreio", "LogLevel.Error": "Erro", "LogLevel.Critical": "Crítico", "LogLevel.None": "Nenhum", @@ -2056,5 +2056,6 @@ "StorageType.NoRootDirectory": "Sem pasta raiz", "StorageType.Ram": "RAM", "StorageType.Removable": "Removível", - "LabelImageCache": "Cache de imagens" + "LabelImageCache": "Cache de imagens", + "LiveTVPageLoadError": "Falha ao carregar a página de gravações" } From 858da75601030916a215123a88c6aee92fe7c16a Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Thu, 26 Jun 2025 13:22:05 -0400 Subject: [PATCH 530/645] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index b1162e545..61778f895 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1587,7 +1587,7 @@ "LabelDate": "Data", "MessageRenameMediaFolder": "Mudar o nome de uma biblioteca multimédia fará com que todos os metadados se percam, por isso, procede com cuidado.", "LabelSyncPlaySettingsMinDelaySkipToSync": "Atraso mínimo do pulo de sincronização", - "LogLevel.None": "Nada", + "LogLevel.None": "Nenhum", "LogLevel.Critical": "Crítico", "New": "Novo", "SubtitleWhite": "Branco", @@ -1598,8 +1598,8 @@ "LabelSelectMono": "Mono", "HeaderEpisodesStatus": "Status dos episódios", "LabelSyncPlaySettingsSkipToSyncHelp": "Método de correção de sincronismo que consiste em buscar a posição estimada. A correção de sincronização deve estar habilitada.", - "LogLevel.Trace": "Vestígio", - "LogLevel.Debug": "Depurar", + "LogLevel.Trace": "Rastreio", + "LogLevel.Debug": "Depuração", "LogLevel.Information": "Informação", "MessageRepositoryInstallDisclaimer": "AVISO: A instalação de uma extensão de terceiros acarreta riscos. Ela pode conter código instável ou malicioso e pode ser alterado a qualquer momento. Instala apenas extensões de autores em quem confias.", "OptionAllowContentDownload": "Permitir transferências de multimédia", @@ -2024,5 +2024,6 @@ "HeaderUpdateRequired": "Atualização necessária", "ViewSettings": "Ver definições", "MessageForgotPasswordPinReset": "Introduz o PIN para concluir a redefinição da palavra-passe", - "DownloadManager": "Transferências" + "DownloadManager": "Transferências", + "LiveTVPageLoadError": "Falha ao carregar a página de gravações" } From 2ed7623d617979fb8bb44ca5f2d0d48f760c7a13 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Thu, 26 Jun 2025 16:35:24 -0400 Subject: [PATCH 531/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 55342d1fb..ae8cd088a 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -344,7 +344,7 @@ "LabelSendNotificationToUsers": "Envia la notificació a", "LabelSerialNumber": "Nombre de sèrie", "LabelSeriesRecordingPath": "Ruta de l'enregistrament de sèries", - "LabelSortTitle": "Títol d'endreçat", + "LabelSortTitle": "Ordena per títols", "LabelSource": "Font", "LabelStartWhenPossible": "Inicia quan sigui possible", "LabelStatus": "Estat", @@ -1133,22 +1133,22 @@ "LabelSyncPlayNewGroup": "Grup nou", "LabelSyncPlayLeaveGroupDescription": "Desactiva SyncPlay", "LabelSyncPlayLeaveGroup": "Surt del grup", - "LabelSyncPlayHaltPlaybackDescription": "I ignorar les actualitzacions de llista de reproducció actual", - "LabelSyncPlayHaltPlayback": "Aturar la reproducció local", + "LabelSyncPlayHaltPlaybackDescription": "I ignora les actualitzacions de la llista de reproducció", + "LabelSyncPlayHaltPlayback": "Atura la reproducció local", "LabelSyncPlayAccessNone": "S'ha desactivat per a aquest usuari", "LabelSyncPlayAccessJoinGroups": "Permet als usuaris unir-se als grups", - "LabelSyncPlayAccessCreateAndJoinGroups": "Permet a l'usuari crear i unir-se a grups", + "LabelSyncPlayAccessCreateAndJoinGroups": "Permet als usuaris crear i unir-se a grups", "LabelSyncPlayAccess": "Accés SyncPlay", "LabelSupportedMediaTypes": "Tipus de mitjans compatibles", "LabelSubtitleVerticalPosition": "Posició vertical", "LabelSubtitleDownloaders": "Descarregadors de subtítols", "LabelStreamType": "Tipus de seqüència", - "LabelStopping": "Parant", + "LabelStopping": "S'està aturant", "LabelStable": "Estable", "LabelSSDPTracingFilterHelp": "Adreça IP opcional sobre la qual es registra un filtrat de el tràfic de SSDP.", "LabelSSDPTracingFilter": "SSDP Filtre", "LabelSportsCategories": "Modalitats esportives", - "LabelSpecialSeasonsDisplayName": "Nom de temporada especial", + "LabelSpecialSeasonsDisplayName": "Nom de la temporada especial", "LabelSortOrder": "Ordre de classificació", "LabelSortBy": "Ordena per", "LabelSonyAggregationFlagsHelp": "Determina el contingut de l'element 'aggregationFlags' al espai de noms 'urn:schemas-sonycom:av'.", @@ -1160,11 +1160,11 @@ "LabelffmpegPathHelp": "La ruta d'accés al fitxer de l'aplicació de FFmpeg o del directori que la conté.", "LabelEnableSSDPTracingHelp": "Permetin als detalls de la xarxa SSDP rastreig que s'ha de registrar.
ADVERTÈNCIA:. Això farà que seria degradació del rendiment.", "LabelBaseUrlHelp": "Afegiu un subdirectori personalitzat a l'adreça URL de servidor. Per exemple: http://example.com/<baseurl>", - "LabelSlowResponseTime": "Temps en ms després de la qual cosa es considera una resposta lenta", - "LabelSlowResponseEnabled": "Registrar un avis si la resposta del servidor es lenta", - "LabelSkipIfGraphicalSubsPresentHelp": "Mantenir versions de text de subtítols donarà lloc a un lliurament més eficient i disminuir la probabilitat de transcodificació de vídeo.", - "LabelSkipIfGraphicalSubsPresent": "Saltar si el vídeo ja conté subtítols incrustats", - "LabelSkipIfAudioTrackPresentHelp": "Desmarqueu això per assegurar tots els vídeos tenen subtítols, sense importar l'idioma d'àudio.", + "LabelSlowResponseTime": "Temps en ms després del qual es considera que la resposta és lenta", + "LabelSlowResponseEnabled": "Registra un avís si la resposta del servidor és lenta", + "LabelSkipIfGraphicalSubsPresentHelp": "Mantenir versions de subtítols en text plans donarà lloc a un lliurament més eficient i disminuirà la probabilitat de transcodificació de vídeo.", + "LabelSkipIfGraphicalSubsPresent": "Salta, si el vídeo ja conté subtítols incrustats", + "LabelSkipIfAudioTrackPresentHelp": "Desmarqueu-ho per a assegurar tots els vídeos tenen subtítols, sense importar l'idioma de l'àudio.", "LabelSkipIfAudioTrackPresent": "Salta-ho si la pista d'àudio per defecte coincideix amb l'idioma de descàrrega", "LabelSkipForwardLength": "Temps d'avançament", "LabelSkipBackLength": "Temps de rebobinat", From f19bcf2e911a22e60c80c358fbeb7921abac5ccb Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Thu, 26 Jun 2025 17:26:44 -0400 Subject: [PATCH 532/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index ae8cd088a..efe3f5107 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -1123,7 +1123,7 @@ "LabelTextBackgroundColor": "Color del text de fons", "LabelTagline": "Lema", "LabelTag": "Etiqueta", - "LabelSyncPlayTimeSyncOffset": "Compensació de temps", + "LabelSyncPlayTimeSyncOffset": "Temps de decalatge", "LabelSyncPlayTimeSyncDevice": "Temps de sincronització amb", "LabelSyncPlaySyncMethod": "Mètode de sincronització", "LabelSyncPlayResumePlaybackDescription": "Torneu a la reproducció grupal", @@ -1544,7 +1544,7 @@ "HeaderSyncPlaySettings": "Configuració de SyncPlay", "Engineer": "Enginyer de so", "AgeValue": "({0} anys)", - "LabelSyncPlaySettingsExtraTimeOffsetHelp": "Ajusta manualment el temps de compensació amb el dispositiu seleccionat per la sincronització del temps. Ajustar amb cura.", + "LabelSyncPlaySettingsExtraTimeOffsetHelp": "Ajusteu manualment el temps de decalatge amb el dispositiu seleccionat per a la sincronització del temps. Ajusteu-ho amb cura.", "LabelSyncPlaySettingsDescription": "Canvia les preferències de SyncPlay", "LabelMaxDaysForNextUp": "Màxim de dies per \"A continuació\"", "LabelHardwareEncoding": "Codificació per maquinari", @@ -1617,17 +1617,17 @@ "Localization": "Localització", "Larger": "Més gran", "LabelSyncPlaySettingsSkipToSyncHelp": "Mètode de correcció de sincronització que consisteix a buscar la posició estimada. La correcció de sincronització ha d'estar activada.", - "LabelSyncPlaySettingsSkipToSync": "Activar SkipToSync", - "LabelSyncPlaySettingsSpeedToSyncHelp": "Mètode de correcció de sincronització que consisteix a accelerar la reproducció. La correcció de sincronització ha d'estar activada.", - "LabelSyncPlaySettingsSpeedToSync": "Activar SpeedToSync", + "LabelSyncPlaySettingsSkipToSync": "Habilita SkipToSync", + "LabelSyncPlaySettingsSpeedToSyncHelp": "Mètode de correcció de sincronització que consisteix a accelerar la reproducció. La correcció de sincronització ha d'estar habilitada.", + "LabelSyncPlaySettingsSpeedToSync": "Habilita SpeedToSync", "LabelSyncPlaySettingsMinDelaySkipToSyncHelp": "Retard mínim de reproducció (en ms) després del qual SkipToSync intenta corregir la posició de reproducció.", - "LabelSyncPlaySettingsMinDelaySkipToSync": "SkipToSync retard mínim", - "LabelSyncPlaySettingsSpeedToSyncDurationHelp": "Quantitat de mil·lisegons utilitzat per SpeedToSync per corregir la posició de reproducció.", - "LabelSyncPlaySettingsSpeedToSyncDuration": "SpeedToSync duració", + "LabelSyncPlaySettingsMinDelaySkipToSync": "Retard mínim de SkipToSync", + "LabelSyncPlaySettingsSpeedToSyncDurationHelp": "Quantitat de mil·lisegons utilitzat per SpeedToSync per a corregir la posició de reproducció.", + "LabelSyncPlaySettingsSpeedToSyncDuration": "Duració de SpeedToSync", "LabelSyncPlaySettingsMaxDelaySpeedToSyncHelp": "Retard màxim de reproducció (en ms) després del qual s'utilitza SkipToSync en lloc de SpeedToSync.", - "LabelSyncPlaySettingsMaxDelaySpeedToSync": "SpeedToSync retard màxim", - "LabelSyncPlaySettingsMinDelaySpeedToSyncHelp": "Retard de reproducció mínim (en ms) després del qual SpeedToSync intenta corregir la posició de reproducció.", - "LabelSyncPlaySettingsMinDelaySpeedToSync": "SpeedToSync retard mínim", + "LabelSyncPlaySettingsMaxDelaySpeedToSync": "Retard màxim de SpeedToSync", + "LabelSyncPlaySettingsMinDelaySpeedToSyncHelp": "Retard mínim de reproducció (en ms) després del qual SpeedToSync intenta corregir la posició de reproducció.", + "LabelSyncPlaySettingsMinDelaySpeedToSync": "Retard mínim de SpeedToSync", "LabelSyncPlaySettingsSyncCorrectionHelp": "Habilita la sincronització activa de la reproducció accelerant els continguts multimèdia o cercant la posició estimada. Desactiveu-ho en cas d'intermitències.", "ItemDetails": "Detalls de l'element", "GoogleCastUnsupported": "El Google Cast no és compatible", From 2b9b5530f33cdeee4d1d5cbccf2ccaa7615b1cee Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Fri, 27 Jun 2025 01:54:09 +0300 Subject: [PATCH 533/645] Apply review feedback --- .../features/plugins/components/PluginCard.tsx | 2 +- .../features/plugins/constants/categoryLabels.ts | 2 +- src/apps/dashboard/routes/plugins/catalog.tsx | 14 +++++++++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/apps/dashboard/features/plugins/components/PluginCard.tsx b/src/apps/dashboard/features/plugins/components/PluginCard.tsx index 5ea7eef53..3c9d26bca 100644 --- a/src/apps/dashboard/features/plugins/components/PluginCard.tsx +++ b/src/apps/dashboard/features/plugins/components/PluginCard.tsx @@ -47,7 +47,7 @@ const PluginCard = ({ plugin, configurationPage }: IProps) => { const navigateToPluginSettings = useCallback(() => { navigate(pluginPage); - }, [ navigate, location, configurationPage ]); + }, [ navigate, pluginPage ]); const onEnablePlugin = useCallback(() => { if (plugin.Id && plugin.Version) { diff --git a/src/apps/dashboard/features/plugins/constants/categoryLabels.ts b/src/apps/dashboard/features/plugins/constants/categoryLabels.ts index 52be2cef7..3cf460403 100644 --- a/src/apps/dashboard/features/plugins/constants/categoryLabels.ts +++ b/src/apps/dashboard/features/plugins/constants/categoryLabels.ts @@ -1,5 +1,5 @@ /** A mapping of category names used by the plugin repository to translation keys. */ -export const CATEGORY_LABELS = { +export const CATEGORY_LABELS: Record = { Administration: 'HeaderAdmin', Anime: 'Anime', Authentication: 'LabelAuthProvider', // Legacy diff --git a/src/apps/dashboard/routes/plugins/catalog.tsx b/src/apps/dashboard/routes/plugins/catalog.tsx index b2106d8fe..e55096338 100644 --- a/src/apps/dashboard/routes/plugins/catalog.tsx +++ b/src/apps/dashboard/routes/plugins/catalog.tsx @@ -14,6 +14,7 @@ import TextField from '@mui/material/TextField'; import IconButton from '@mui/material/IconButton'; import Settings from '@mui/icons-material/Settings'; import { Link } from 'react-router-dom'; +import { CATEGORY_LABELS } from 'apps/dashboard/features/plugins/constants/categoryLabels'; export const Component = () => { const { data: packages, isPending: isPackagesPending } = usePackages(); @@ -29,6 +30,17 @@ export const Component = () => { setSearchQuery(e.target.value); }, []); + const getCategoryLabel = (category: string) => { + const categoryKey = category.replace(/\s/g, ''); + + if (CATEGORY_LABELS[categoryKey]) { + return globalize.translate(CATEGORY_LABELS[categoryKey]); + } + + console.warn('[AvailablePlugins] unmapped category label', category); + return category; + }; + if (isPackagesPending) { return ; } @@ -62,7 +74,7 @@ export const Component = () => { {packageCategories.map(category => ( - {category} + {getCategoryLabel(category)} {getPackagesByCategory(filteredPackages, category).map(pkg => ( From 2db1141df201b596bae1e1163028409d56ef0b7f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Jun 2025 02:42:16 +0000 Subject: [PATCH 534/645] Update CatChen/eslint-suggestion-action action to v4.1.18 --- .github/workflows/pull_request.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index a1fa34dbe..6a16a0930 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -95,6 +95,6 @@ jobs: run: npm ci --no-audit - name: Run eslint - uses: CatChen/eslint-suggestion-action@04af6ad359e691c79287ee21c478e706fb482d1f # v4.1.17 + uses: CatChen/eslint-suggestion-action@4dda35decf912ab18ea3e071acec2c6c2eda00b6 # v4.1.18 with: github-token: ${{ secrets.GITHUB_TOKEN }} From dcfde8983467d3bdc1251c772c2c040de5d8f785 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Jun 2025 02:42:41 +0000 Subject: [PATCH 535/645] Update dependency es-check to v9.1.4 --- package-lock.json | 36 ++++++++++++++++++------------------ package.json | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index 39c76d012..354d8e4e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -96,7 +96,7 @@ "cross-env": "7.0.3", "css-loader": "7.1.2", "cssnano": "7.0.7", - "es-check": "9.1.2", + "es-check": "9.1.4", "eslint": "9.29.0", "eslint-plugin-compat": "6.0.2", "eslint-plugin-import": "2.31.0", @@ -10211,18 +10211,18 @@ } }, "node_modules/es-check": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/es-check/-/es-check-9.1.2.tgz", - "integrity": "sha512-aoVC4ROjhULurs3/CO9bAwJH0GDWNcnXNVPJulRWlo7ATHTxXtwee3loVfP6X8CvCqDsQs+CPMwOFrr5JwTFPQ==", + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/es-check/-/es-check-9.1.4.tgz", + "integrity": "sha512-oCElzPyMZTm7IpCbdBslOjPdpI3uoccctPVTJLJyi34k+nXSaqApMAfm0yleEKTyPGXkmtWwPFBSyN22cKUhJw==", "dev": true, "license": "MIT", "dependencies": { "acorn": "8.14.1", "acorn-walk": "^8.3.4", "browserslist": "^4.23.3", - "commander": "13.1.0", + "commander": "14.0.0", "fast-glob": "^3.3.3", - "lilconfig": "^3.0.0", + "lilconfig": "^3.1.3", "source-map": "^0.7.4", "supports-color": "8.1.1", "winston": "3.17.0" @@ -10235,13 +10235,13 @@ } }, "node_modules/es-check/node_modules/commander": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", - "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.0.tgz", + "integrity": "sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/es-check/node_modules/has-flag": { @@ -31750,26 +31750,26 @@ } }, "es-check": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/es-check/-/es-check-9.1.2.tgz", - "integrity": "sha512-aoVC4ROjhULurs3/CO9bAwJH0GDWNcnXNVPJulRWlo7ATHTxXtwee3loVfP6X8CvCqDsQs+CPMwOFrr5JwTFPQ==", + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/es-check/-/es-check-9.1.4.tgz", + "integrity": "sha512-oCElzPyMZTm7IpCbdBslOjPdpI3uoccctPVTJLJyi34k+nXSaqApMAfm0yleEKTyPGXkmtWwPFBSyN22cKUhJw==", "dev": true, "requires": { "acorn": "8.14.1", "acorn-walk": "^8.3.4", "browserslist": "^4.23.3", - "commander": "13.1.0", + "commander": "14.0.0", "fast-glob": "^3.3.3", - "lilconfig": "^3.0.0", + "lilconfig": "^3.1.3", "source-map": "^0.7.4", "supports-color": "8.1.1", "winston": "3.17.0" }, "dependencies": { "commander": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", - "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.0.tgz", + "integrity": "sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==", "dev": true }, "has-flag": { diff --git a/package.json b/package.json index a2dc46b74..27eda806a 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "cross-env": "7.0.3", "css-loader": "7.1.2", "cssnano": "7.0.7", - "es-check": "9.1.2", + "es-check": "9.1.4", "eslint": "9.29.0", "eslint-plugin-compat": "6.0.2", "eslint-plugin-import": "2.31.0", From 9ee17d13a34acf009e40be18e58445685ad0d158 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Jun 2025 02:44:12 +0000 Subject: [PATCH 536/645] Update Fonts to v5.2.6 --- package-lock.json | 70 +++++++++++++++++++++++------------------------ package.json | 10 +++---- 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/package-lock.json b/package-lock.json index a6d5fceeb..c049b798b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,11 +12,11 @@ "@emotion/react": "11.14.0", "@emotion/styled": "11.14.0", "@fontsource/noto-sans": "5.2.7", - "@fontsource/noto-sans-hk": "5.2.5", - "@fontsource/noto-sans-jp": "5.2.5", - "@fontsource/noto-sans-kr": "5.2.5", - "@fontsource/noto-sans-sc": "5.2.5", - "@fontsource/noto-sans-tc": "5.2.5", + "@fontsource/noto-sans-hk": "5.2.6", + "@fontsource/noto-sans-jp": "5.2.6", + "@fontsource/noto-sans-kr": "5.2.6", + "@fontsource/noto-sans-sc": "5.2.6", + "@fontsource/noto-sans-tc": "5.2.6", "@jellyfin/libass-wasm": "4.2.3", "@jellyfin/sdk": "0.0.0-unstable.202506260502", "@jellyfin/ux-web": "1.0.0", @@ -3932,45 +3932,45 @@ } }, "node_modules/@fontsource/noto-sans-hk": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-hk/-/noto-sans-hk-5.2.5.tgz", - "integrity": "sha512-dQK+2kLRChvlbvsXadnvfjBy1+hQojKu/zobeLiKXquFWJis9CdwNIaxTFa4Khwsq8HzR9JzxGb6L1tSK6JWYw==", + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-hk/-/noto-sans-hk-5.2.6.tgz", + "integrity": "sha512-EF7rFuy8jPthjDK8ciFRdVseAs01B93zeE74m/O6F71p9UdIlE9AbtPaMfNHzvnTixYcnHbcxQzx72lSpwvrPg==", "license": "OFL-1.1", "funding": { "url": "https://github.com/sponsors/ayuhito" } }, "node_modules/@fontsource/noto-sans-jp": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-jp/-/noto-sans-jp-5.2.5.tgz", - "integrity": "sha512-ISoJUQlsuSo4y56P+eJD+g022BRAF1BC2uCyEFGRsob0g8VvQAoWNMlWh+P0VQw68QzZHHj41zRzeRFpzAdA7w==", + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-jp/-/noto-sans-jp-5.2.6.tgz", + "integrity": "sha512-BvUHYZKL87yWGRNFqInxDciU/Czp6klOEcB9l/6CnjMN77F5jc21r/A4XkMx46eY8FzVvfjCYTYUB4zExlX2Ww==", "license": "OFL-1.1", "funding": { "url": "https://github.com/sponsors/ayuhito" } }, "node_modules/@fontsource/noto-sans-kr": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-kr/-/noto-sans-kr-5.2.5.tgz", - "integrity": "sha512-9swPyua410J00z+GhemPKK/StWdiW07dchS9JcskesdQrhnPBLD6zVQtQsrj+ZPXTFBftbcrMlWFsWhmFn6S9w==", + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-kr/-/noto-sans-kr-5.2.6.tgz", + "integrity": "sha512-8yVWUzOT+El3PAqY8ZKvNatgzL7EgrvLoNp0GjYSLkgDKvvX+xaIZ34W8gfATjeXKmolj9lQN4TqADfPlbmUsg==", "license": "OFL-1.1", "funding": { "url": "https://github.com/sponsors/ayuhito" } }, "node_modules/@fontsource/noto-sans-sc": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-sc/-/noto-sans-sc-5.2.5.tgz", - "integrity": "sha512-rYAl3Alcjo2PnI0sqzRfnA022H8yWePNrjYalApQwYE+fFlaXmD6Mm3E9wmJCpmJM8clwhQWq/E8IlPl1bmZHQ==", + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-sc/-/noto-sans-sc-5.2.6.tgz", + "integrity": "sha512-hk0xVQ+mL/W0rXDhBhud2U5te/slsQKcaU+3Ni6ZxeFP1jJmcNmxHEZOG5DjLBOi0L//0R5Nwvn6ebTiZrwVZw==", "license": "OFL-1.1", "funding": { "url": "https://github.com/sponsors/ayuhito" } }, "node_modules/@fontsource/noto-sans-tc": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-tc/-/noto-sans-tc-5.2.5.tgz", - "integrity": "sha512-+qQKW1slXsS5H5AvsiBfNo7krmuxyKkb6vV2l/nE7Uyd5TBpaomub+kuIO3iwgLBtVOesSkl6HwtR4SNxry+FA==", + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-tc/-/noto-sans-tc-5.2.6.tgz", + "integrity": "sha512-cXpi78o0adtqz/7/3Onpp2u/O8G2XC4WufuT8EQjEu2Mvdq2WRgLZk/KOrhh7kH/3BSijbKnYUwQ5mTEvaSF5A==", "license": "OFL-1.1", "funding": { "url": "https://github.com/sponsors/ayuhito" @@ -27612,29 +27612,29 @@ "integrity": "sha512-mTpMSMft6Nb+ZSF4DSiJVYnLzKCRjHNFieZ/swuxSDQK+v1hjUeDTBxLHKUdfmC+ZPg6TUEWw4oRq2ltnDbSjQ==" }, "@fontsource/noto-sans-hk": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-hk/-/noto-sans-hk-5.2.5.tgz", - "integrity": "sha512-dQK+2kLRChvlbvsXadnvfjBy1+hQojKu/zobeLiKXquFWJis9CdwNIaxTFa4Khwsq8HzR9JzxGb6L1tSK6JWYw==" + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-hk/-/noto-sans-hk-5.2.6.tgz", + "integrity": "sha512-EF7rFuy8jPthjDK8ciFRdVseAs01B93zeE74m/O6F71p9UdIlE9AbtPaMfNHzvnTixYcnHbcxQzx72lSpwvrPg==" }, "@fontsource/noto-sans-jp": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-jp/-/noto-sans-jp-5.2.5.tgz", - "integrity": "sha512-ISoJUQlsuSo4y56P+eJD+g022BRAF1BC2uCyEFGRsob0g8VvQAoWNMlWh+P0VQw68QzZHHj41zRzeRFpzAdA7w==" + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-jp/-/noto-sans-jp-5.2.6.tgz", + "integrity": "sha512-BvUHYZKL87yWGRNFqInxDciU/Czp6klOEcB9l/6CnjMN77F5jc21r/A4XkMx46eY8FzVvfjCYTYUB4zExlX2Ww==" }, "@fontsource/noto-sans-kr": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-kr/-/noto-sans-kr-5.2.5.tgz", - "integrity": "sha512-9swPyua410J00z+GhemPKK/StWdiW07dchS9JcskesdQrhnPBLD6zVQtQsrj+ZPXTFBftbcrMlWFsWhmFn6S9w==" + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-kr/-/noto-sans-kr-5.2.6.tgz", + "integrity": "sha512-8yVWUzOT+El3PAqY8ZKvNatgzL7EgrvLoNp0GjYSLkgDKvvX+xaIZ34W8gfATjeXKmolj9lQN4TqADfPlbmUsg==" }, "@fontsource/noto-sans-sc": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-sc/-/noto-sans-sc-5.2.5.tgz", - "integrity": "sha512-rYAl3Alcjo2PnI0sqzRfnA022H8yWePNrjYalApQwYE+fFlaXmD6Mm3E9wmJCpmJM8clwhQWq/E8IlPl1bmZHQ==" + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-sc/-/noto-sans-sc-5.2.6.tgz", + "integrity": "sha512-hk0xVQ+mL/W0rXDhBhud2U5te/slsQKcaU+3Ni6ZxeFP1jJmcNmxHEZOG5DjLBOi0L//0R5Nwvn6ebTiZrwVZw==" }, "@fontsource/noto-sans-tc": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-tc/-/noto-sans-tc-5.2.5.tgz", - "integrity": "sha512-+qQKW1slXsS5H5AvsiBfNo7krmuxyKkb6vV2l/nE7Uyd5TBpaomub+kuIO3iwgLBtVOesSkl6HwtR4SNxry+FA==" + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans-tc/-/noto-sans-tc-5.2.6.tgz", + "integrity": "sha512-cXpi78o0adtqz/7/3Onpp2u/O8G2XC4WufuT8EQjEu2Mvdq2WRgLZk/KOrhh7kH/3BSijbKnYUwQ5mTEvaSF5A==" }, "@humanfs/core": { "version": "0.19.1", diff --git a/package.json b/package.json index 103d4a7e8..f7fce6042 100644 --- a/package.json +++ b/package.json @@ -78,11 +78,11 @@ "@emotion/react": "11.14.0", "@emotion/styled": "11.14.0", "@fontsource/noto-sans": "5.2.7", - "@fontsource/noto-sans-hk": "5.2.5", - "@fontsource/noto-sans-jp": "5.2.5", - "@fontsource/noto-sans-kr": "5.2.5", - "@fontsource/noto-sans-sc": "5.2.5", - "@fontsource/noto-sans-tc": "5.2.5", + "@fontsource/noto-sans-hk": "5.2.6", + "@fontsource/noto-sans-jp": "5.2.6", + "@fontsource/noto-sans-kr": "5.2.6", + "@fontsource/noto-sans-sc": "5.2.6", + "@fontsource/noto-sans-tc": "5.2.6", "@jellyfin/libass-wasm": "4.2.3", "@jellyfin/sdk": "0.0.0-unstable.202506260502", "@jellyfin/ux-web": "1.0.0", From 432776b8f4048d182a904d7328417fbebd4bc899 Mon Sep 17 00:00:00 2001 From: hoanghuy309 Date: Thu, 26 Jun 2025 21:07:07 -0400 Subject: [PATCH 537/645] Translated using Weblate (Vietnamese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/vi/ --- src/strings/vi.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/vi.json b/src/strings/vi.json index cba469f6e..0de9056af 100644 --- a/src/strings/vi.json +++ b/src/strings/vi.json @@ -2055,5 +2055,9 @@ "DeleteRepositoryConfirmation": "Bạn có chắc là bạn muốn xóa kho lưu trữ này?", "ConfirmDeleteRepository": "Xóa kho lưu trữ?", "RepositoriesPageLoadError": "Không tải được kho lưu trữ", - "ButtonLearnMore": "Tìm Hiểu Thêm" + "ButtonLearnMore": "Tìm Hiểu Thêm", + "TranscodingLoadError": "Không tải được cài đặt chuyển mã", + "StorageType.CDRom": "CD-ROM", + "StorageType.Ram": "RAM", + "LiveTVPageLoadError": "Không tải được trang ghi" } From 7907cabcad2dc2468a01ce8e2ed10b690a43b82f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Jun 2025 02:52:47 +0000 Subject: [PATCH 538/645] Update dependency @jellyfin/sdk to v0.0.0-unstable.202506270243 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7691bfe17..364e8cbb0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.2.6", "@fontsource/noto-sans-tc": "5.2.6", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202506260502", + "@jellyfin/sdk": "0.0.0-unstable.202506270243", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.12", "@mui/material": "6.4.12", @@ -4129,9 +4129,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202506260502", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506260502.tgz", - "integrity": "sha512-+lTM6BwCY4O25tnZ2ZIegodrHWBXv+Kql5fadRNm9MISoR/ZMcg30z21oLtNLxZoqG+D66AjIzOaqipygyLaoA==", + "version": "0.0.0-unstable.202506270243", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506270243.tgz", + "integrity": "sha512-dTsPNmRUsWhmZn/8m4/8I00VvsFg7lrCJXk7BHhwYgKJjqphFWDupqSz7y9U4MvMf1Hnw3ms3hxWTxk0ZFnTTg==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -27732,9 +27732,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202506260502", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506260502.tgz", - "integrity": "sha512-+lTM6BwCY4O25tnZ2ZIegodrHWBXv+Kql5fadRNm9MISoR/ZMcg30z21oLtNLxZoqG+D66AjIzOaqipygyLaoA==", + "version": "0.0.0-unstable.202506270243", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506270243.tgz", + "integrity": "sha512-dTsPNmRUsWhmZn/8m4/8I00VvsFg7lrCJXk7BHhwYgKJjqphFWDupqSz7y9U4MvMf1Hnw3ms3hxWTxk0ZFnTTg==", "requires": {} }, "@jellyfin/ux-web": { diff --git a/package.json b/package.json index d8b55de4c..aa575f6e5 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@fontsource/noto-sans-sc": "5.2.6", "@fontsource/noto-sans-tc": "5.2.6", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202506260502", + "@jellyfin/sdk": "0.0.0-unstable.202506270243", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.12", "@mui/material": "6.4.12", From c5d760dff0e0f4a5244882def5fd77f350e4ca7a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Jun 2025 02:52:59 +0000 Subject: [PATCH 539/645] Update PostCSS --- package-lock.json | 168 ++++++++++++++++++---------------------------- package.json | 4 +- 2 files changed, 66 insertions(+), 106 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7691bfe17..42843d1fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,9 +112,9 @@ "html-webpack-plugin": "5.6.3", "jsdom": "26.1.0", "mini-css-extract-plugin": "2.9.2", - "postcss": "8.5.4", + "postcss": "8.5.6", "postcss-loader": "8.1.1", - "postcss-preset-env": "10.2.0", + "postcss-preset-env": "10.2.3", "postcss-scss": "4.0.9", "sass": "1.87.0", "sass-loader": "16.0.5", @@ -2387,9 +2387,9 @@ } }, "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.1.tgz", - "integrity": "sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz", + "integrity": "sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ==", "dev": true, "funding": [ { @@ -8045,9 +8045,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", - "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", "dev": true, "funding": [ { @@ -8065,8 +8065,8 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001716", - "electron-to-chromium": "^1.5.149", + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, @@ -8315,9 +8315,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001718", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz", - "integrity": "sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==", + "version": "1.0.30001726", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001726.tgz", + "integrity": "sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==", "dev": true, "funding": [ { @@ -10020,9 +10020,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.5.152", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.152.tgz", - "integrity": "sha512-xBOfg/EBaIlVsHipHl2VdTPJRSvErNUaqW8ejTq5OlOlIYx1wOllCHsAvAIrr55jD1IYEfdR86miUEt8H5IeJg==", + "version": "1.5.176", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.176.tgz", + "integrity": "sha512-2nDK9orkm7M9ZZkjO3PjbEd3VUulQLyg5T9O3enJdFvUg46Hzd4DUvTvAuEgbdHYXyFsiG4A5sO9IzToMH1cDg==", "dev": true, "license": "ISC" }, @@ -16420,9 +16420,9 @@ } }, "node_modules/postcss": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz", - "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, "funding": [ { @@ -17718,9 +17718,9 @@ } }, "node_modules/postcss-nesting": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz", - "integrity": "sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==", + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz", + "integrity": "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==", "dev": true, "funding": [ { @@ -17734,7 +17734,7 @@ ], "license": "MIT-0", "dependencies": { - "@csstools/selector-resolve-nested": "^3.0.0", + "@csstools/selector-resolve-nested": "^3.1.0", "@csstools/selector-specificity": "^5.0.0", "postcss-selector-parser": "^7.0.0" }, @@ -17746,9 +17746,9 @@ } }, "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz", - "integrity": "sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz", + "integrity": "sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==", "dev": true, "funding": [ { @@ -18049,9 +18049,9 @@ } }, "node_modules/postcss-preset-env": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.2.0.tgz", - "integrity": "sha512-cl13sPBbSqo1Q7Ryb19oT5NZO5IHFolRbIMdgDq4f9w1MHYiL6uZS7uSsjXJ1KzRIcX5BMjEeyxmAevVXENa3Q==", + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.2.3.tgz", + "integrity": "sha512-zlQN1yYmA7lFeM1wzQI14z97mKoM8qGng+198w1+h6sCud/XxOjcKtApY9jWr7pXNS3yHDEafPlClSsWnkY8ow==", "dev": true, "funding": [ { @@ -18077,7 +18077,7 @@ "@csstools/postcss-hwb-function": "^4.0.10", "@csstools/postcss-ic-unit": "^4.0.2", "@csstools/postcss-initial": "^2.0.1", - "@csstools/postcss-is-pseudo-class": "^5.0.1", + "@csstools/postcss-is-pseudo-class": "^5.0.3", "@csstools/postcss-light-dark-function": "^2.0.9", "@csstools/postcss-logical-float-and-clear": "^3.0.0", "@csstools/postcss-logical-overflow": "^2.0.0", @@ -18099,7 +18099,7 @@ "@csstools/postcss-trigonometric-functions": "^4.0.9", "@csstools/postcss-unset-value": "^4.0.0", "autoprefixer": "^10.4.21", - "browserslist": "^4.24.5", + "browserslist": "^4.25.0", "css-blank-pseudo": "^7.0.1", "css-has-pseudo": "^7.0.2", "css-prefers-color-scheme": "^10.0.0", @@ -18110,7 +18110,7 @@ "postcss-color-hex-alpha": "^10.0.0", "postcss-color-rebeccapurple": "^10.0.0", "postcss-custom-media": "^11.0.6", - "postcss-custom-properties": "^14.0.5", + "postcss-custom-properties": "^14.0.6", "postcss-custom-selectors": "^8.0.5", "postcss-dir-pseudo-class": "^9.0.1", "postcss-double-position-gradients": "^6.0.2", @@ -18121,7 +18121,7 @@ "postcss-image-set-function": "^7.0.0", "postcss-lab-function": "^7.0.10", "postcss-logical": "^8.1.0", - "postcss-nesting": "^13.0.1", + "postcss-nesting": "^13.0.2", "postcss-opacity-percentage": "^3.0.0", "postcss-overflow-shorthand": "^6.0.0", "postcss-page-break": "^3.0.4", @@ -22701,35 +22701,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stylelint/node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, "node_modules/stylelint/node_modules/postcss-safe-parser": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", @@ -26868,9 +26839,9 @@ "requires": {} }, "@csstools/postcss-is-pseudo-class": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.1.tgz", - "integrity": "sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz", + "integrity": "sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ==", "dev": true, "requires": { "@csstools/selector-specificity": "^5.0.0", @@ -30229,13 +30200,13 @@ } }, "browserslist": { - "version": "4.24.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", - "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001716", - "electron-to-chromium": "^1.5.149", + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" } @@ -30411,9 +30382,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001718", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz", - "integrity": "sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==", + "version": "1.0.30001726", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001726.tgz", + "integrity": "sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==", "dev": true }, "canvas": { @@ -31593,9 +31564,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.5.152", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.152.tgz", - "integrity": "sha512-xBOfg/EBaIlVsHipHl2VdTPJRSvErNUaqW8ejTq5OlOlIYx1wOllCHsAvAIrr55jD1IYEfdR86miUEt8H5IeJg==", + "version": "1.5.176", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.176.tgz", + "integrity": "sha512-2nDK9orkm7M9ZZkjO3PjbEd3VUulQLyg5T9O3enJdFvUg46Hzd4DUvTvAuEgbdHYXyFsiG4A5sO9IzToMH1cDg==", "dev": true }, "element-closest-polyfill": { @@ -36176,9 +36147,9 @@ "dev": true }, "postcss": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz", - "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, "requires": { "nanoid": "^3.3.11", @@ -36954,20 +36925,20 @@ } }, "postcss-nesting": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz", - "integrity": "sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==", + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz", + "integrity": "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==", "dev": true, "requires": { - "@csstools/selector-resolve-nested": "^3.0.0", + "@csstools/selector-resolve-nested": "^3.1.0", "@csstools/selector-specificity": "^5.0.0", "postcss-selector-parser": "^7.0.0" }, "dependencies": { "@csstools/selector-resolve-nested": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz", - "integrity": "sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz", + "integrity": "sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==", "dev": true, "requires": {} }, @@ -37113,9 +37084,9 @@ } }, "postcss-preset-env": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.2.0.tgz", - "integrity": "sha512-cl13sPBbSqo1Q7Ryb19oT5NZO5IHFolRbIMdgDq4f9w1MHYiL6uZS7uSsjXJ1KzRIcX5BMjEeyxmAevVXENa3Q==", + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.2.3.tgz", + "integrity": "sha512-zlQN1yYmA7lFeM1wzQI14z97mKoM8qGng+198w1+h6sCud/XxOjcKtApY9jWr7pXNS3yHDEafPlClSsWnkY8ow==", "dev": true, "requires": { "@csstools/postcss-cascade-layers": "^5.0.1", @@ -37130,7 +37101,7 @@ "@csstools/postcss-hwb-function": "^4.0.10", "@csstools/postcss-ic-unit": "^4.0.2", "@csstools/postcss-initial": "^2.0.1", - "@csstools/postcss-is-pseudo-class": "^5.0.1", + "@csstools/postcss-is-pseudo-class": "^5.0.3", "@csstools/postcss-light-dark-function": "^2.0.9", "@csstools/postcss-logical-float-and-clear": "^3.0.0", "@csstools/postcss-logical-overflow": "^2.0.0", @@ -37152,7 +37123,7 @@ "@csstools/postcss-trigonometric-functions": "^4.0.9", "@csstools/postcss-unset-value": "^4.0.0", "autoprefixer": "^10.4.21", - "browserslist": "^4.24.5", + "browserslist": "^4.25.0", "css-blank-pseudo": "^7.0.1", "css-has-pseudo": "^7.0.2", "css-prefers-color-scheme": "^10.0.0", @@ -37163,7 +37134,7 @@ "postcss-color-hex-alpha": "^10.0.0", "postcss-color-rebeccapurple": "^10.0.0", "postcss-custom-media": "^11.0.6", - "postcss-custom-properties": "^14.0.5", + "postcss-custom-properties": "^14.0.6", "postcss-custom-selectors": "^8.0.5", "postcss-dir-pseudo-class": "^9.0.1", "postcss-double-position-gradients": "^6.0.2", @@ -37174,7 +37145,7 @@ "postcss-image-set-function": "^7.0.0", "postcss-lab-function": "^7.0.10", "postcss-logical": "^8.1.0", - "postcss-nesting": "^13.0.1", + "postcss-nesting": "^13.0.2", "postcss-opacity-percentage": "^3.0.0", "postcss-overflow-shorthand": "^6.0.0", "postcss-page-break": "^3.0.4", @@ -39573,17 +39544,6 @@ "lines-and-columns": "^1.1.6" } }, - "postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, - "requires": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - } - }, "postcss-safe-parser": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", diff --git a/package.json b/package.json index d8b55de4c..f44a0be21 100644 --- a/package.json +++ b/package.json @@ -49,9 +49,9 @@ "html-webpack-plugin": "5.6.3", "jsdom": "26.1.0", "mini-css-extract-plugin": "2.9.2", - "postcss": "8.5.4", + "postcss": "8.5.6", "postcss-loader": "8.1.1", - "postcss-preset-env": "10.2.0", + "postcss-preset-env": "10.2.3", "postcss-scss": "4.0.9", "sass": "1.87.0", "sass-loader": "16.0.5", From 2b8d337aea9da81dcc6aafac7eed85c38f81cacc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Jun 2025 02:53:16 +0000 Subject: [PATCH 540/645] Update Vitest to v3.2.4 --- package-lock.json | 288 ++++++++++++++++++++++++---------------------- package.json | 4 +- 2 files changed, 155 insertions(+), 137 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7691bfe17..61e0778d9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -87,7 +87,7 @@ "@types/sortablejs": "1.15.8", "@typescript-eslint/parser": "8.34.1", "@uupaa/dynamic-import-polyfill": "1.0.2", - "@vitest/coverage-v8": "3.2.1", + "@vitest/coverage-v8": "3.2.4", "autoprefixer": "10.4.21", "babel-loader": "10.0.0", "clean-webpack-plugin": "4.0.0", @@ -129,7 +129,7 @@ "ts-loader": "9.5.2", "typescript": "5.8.3", "typescript-eslint": "8.33.1", - "vitest": "3.2.1", + "vitest": "3.2.4", "webpack": "5.99.9", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "6.0.1", @@ -6515,9 +6515,9 @@ "dev": true }, "node_modules/@vitest/coverage-v8": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.1.tgz", - "integrity": "sha512-6dy0uF/0BE3jpUW9bFzg0V2S4F7XVaZHL/7qma1XANvHPQGoJuc3wtx911zSoAgUnpfvcLVK1vancNJ95d+uxQ==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.4.tgz", + "integrity": "sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6539,8 +6539,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "3.2.1", - "vitest": "3.2.1" + "@vitest/browser": "3.2.4", + "vitest": "3.2.4" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -6549,15 +6549,15 @@ } }, "node_modules/@vitest/expect": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.1.tgz", - "integrity": "sha512-FqS/BnDOzV6+IpxrTg5GQRyLOCtcJqkwMwcS8qGCI2IyRVDwPAtutztaf1CjtPHlZlWtl1yUPCd7HM0cNiDOYw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", + "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", "dev": true, "license": "MIT", "dependencies": { "@types/chai": "^5.2.2", - "@vitest/spy": "3.2.1", - "@vitest/utils": "3.2.1", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" }, @@ -6566,13 +6566,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.1.tgz", - "integrity": "sha512-OXxMJnx1lkB+Vl65Re5BrsZEHc90s5NMjD23ZQ9NlU7f7nZiETGoX4NeKZSmsKjseuMq2uOYXdLOeoM0pJU+qw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", + "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "3.2.1", + "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, @@ -6593,9 +6593,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.1.tgz", - "integrity": "sha512-xBh1X2GPlOGBupp6E1RcUQWIxw0w/hRLd3XyBS6H+dMdKTAqHDNsIR2AnJwPA3yYe9DFy3VUKTe3VRTrAiQ01g==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", + "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", "dev": true, "license": "MIT", "dependencies": { @@ -6606,27 +6606,28 @@ } }, "node_modules/@vitest/runner": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.1.tgz", - "integrity": "sha512-kygXhNTu/wkMYbwYpS3z/9tBe0O8qpdBuC3dD/AW9sWa0LE/DAZEjnHtWA9sIad7lpD4nFW1yQ+zN7mEKNH3yA==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", + "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "3.2.1", - "pathe": "^2.0.3" + "@vitest/utils": "3.2.4", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/snapshot": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.1.tgz", - "integrity": "sha512-5xko/ZpW2Yc65NVK9Gpfg2y4BFvcF+At7yRT5AHUpTg9JvZ4xZoyuRY4ASlmNcBZjMslV08VRLDrBOmUe2YX3g==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", + "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.2.1", + "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" }, @@ -6635,9 +6636,9 @@ } }, "node_modules/@vitest/spy": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.1.tgz", - "integrity": "sha512-Nbfib34Z2rfcJGSetMxjDCznn4pCYPZOtQYox2kzebIJcgH75yheIKd5QYSFmR8DIZf2M8fwOm66qSDIfRFFfQ==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", + "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", "dev": true, "license": "MIT", "dependencies": { @@ -6648,14 +6649,14 @@ } }, "node_modules/@vitest/utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.1.tgz", - "integrity": "sha512-KkHlGhePEKZSub5ViknBcN5KEF+u7dSUr9NW8QsVICusUojrgrOnnY3DEWWO877ax2Pyopuk2qHmt+gkNKnBVw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", + "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.2.1", - "loupe": "^3.1.3", + "@vitest/pretty-format": "3.2.4", + "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" }, "funding": { @@ -14903,10 +14904,11 @@ } }, "node_modules/loupe": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", - "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", - "dev": true + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.4.tgz", + "integrity": "sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==", + "dev": true, + "license": "MIT" }, "node_modules/lower-case": { "version": "2.0.2", @@ -21251,6 +21253,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strip-literal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz", + "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, "node_modules/style-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz", @@ -23429,9 +23451,9 @@ } }, "node_modules/tinypool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.0.tgz", - "integrity": "sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", "dev": true, "license": "MIT", "engines": { @@ -24433,9 +24455,9 @@ } }, "node_modules/vite-node": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.1.tgz", - "integrity": "sha512-V4EyKQPxquurNJPtQJRZo8hKOoKNBRIhxcDbQFPFig0JdoWcUhwRgK8yoCXXrfYVPKS6XwirGHPszLnR8FbjCA==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", "dev": true, "license": "MIT", "dependencies": { @@ -24484,20 +24506,20 @@ } }, "node_modules/vitest": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.1.tgz", - "integrity": "sha512-VZ40MBnlE1/V5uTgdqY3DmjUgZtIzsYq758JGlyQrv5syIsaYcabkfPkEuWML49Ph0D/SoqpVFd0dyVTr551oA==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", + "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", "dev": true, "license": "MIT", "dependencies": { "@types/chai": "^5.2.2", - "@vitest/expect": "3.2.1", - "@vitest/mocker": "3.2.1", - "@vitest/pretty-format": "^3.2.1", - "@vitest/runner": "3.2.1", - "@vitest/snapshot": "3.2.1", - "@vitest/spy": "3.2.1", - "@vitest/utils": "3.2.1", + "@vitest/expect": "3.2.4", + "@vitest/mocker": "3.2.4", + "@vitest/pretty-format": "^3.2.4", + "@vitest/runner": "3.2.4", + "@vitest/snapshot": "3.2.4", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", @@ -24508,10 +24530,10 @@ "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", - "tinypool": "^1.1.0", + "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", - "vite-node": "3.2.1", + "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "bin": { @@ -24527,8 +24549,8 @@ "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.2.1", - "@vitest/ui": "3.2.1", + "@vitest/browser": "3.2.4", + "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, @@ -24556,19 +24578,6 @@ } } }, - "node_modules/vitest/node_modules/@vitest/pretty-format": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.3.tgz", - "integrity": "sha512-yFglXGkr9hW/yEXngO+IKMhP0jxyFw2/qys/CK4fFUZnSltD+MU7dVYGrH8rvPcK/O6feXQA+EU33gjaBBbAng==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, "node_modules/vitest/node_modules/picomatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", @@ -29143,9 +29152,9 @@ "dev": true }, "@vitest/coverage-v8": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.1.tgz", - "integrity": "sha512-6dy0uF/0BE3jpUW9bFzg0V2S4F7XVaZHL/7qma1XANvHPQGoJuc3wtx911zSoAgUnpfvcLVK1vancNJ95d+uxQ==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.4.tgz", + "integrity": "sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==", "dev": true, "requires": { "@ampproject/remapping": "^2.3.0", @@ -29164,76 +29173,77 @@ } }, "@vitest/expect": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.1.tgz", - "integrity": "sha512-FqS/BnDOzV6+IpxrTg5GQRyLOCtcJqkwMwcS8qGCI2IyRVDwPAtutztaf1CjtPHlZlWtl1yUPCd7HM0cNiDOYw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", + "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", "dev": true, "requires": { "@types/chai": "^5.2.2", - "@vitest/spy": "3.2.1", - "@vitest/utils": "3.2.1", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "@vitest/mocker": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.1.tgz", - "integrity": "sha512-OXxMJnx1lkB+Vl65Re5BrsZEHc90s5NMjD23ZQ9NlU7f7nZiETGoX4NeKZSmsKjseuMq2uOYXdLOeoM0pJU+qw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", + "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", "dev": true, "requires": { - "@vitest/spy": "3.2.1", + "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" } }, "@vitest/pretty-format": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.1.tgz", - "integrity": "sha512-xBh1X2GPlOGBupp6E1RcUQWIxw0w/hRLd3XyBS6H+dMdKTAqHDNsIR2AnJwPA3yYe9DFy3VUKTe3VRTrAiQ01g==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", + "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", "dev": true, "requires": { "tinyrainbow": "^2.0.0" } }, "@vitest/runner": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.1.tgz", - "integrity": "sha512-kygXhNTu/wkMYbwYpS3z/9tBe0O8qpdBuC3dD/AW9sWa0LE/DAZEjnHtWA9sIad7lpD4nFW1yQ+zN7mEKNH3yA==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", + "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", "dev": true, "requires": { - "@vitest/utils": "3.2.1", - "pathe": "^2.0.3" + "@vitest/utils": "3.2.4", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" } }, "@vitest/snapshot": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.1.tgz", - "integrity": "sha512-5xko/ZpW2Yc65NVK9Gpfg2y4BFvcF+At7yRT5AHUpTg9JvZ4xZoyuRY4ASlmNcBZjMslV08VRLDrBOmUe2YX3g==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", + "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", "dev": true, "requires": { - "@vitest/pretty-format": "3.2.1", + "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", "pathe": "^2.0.3" } }, "@vitest/spy": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.1.tgz", - "integrity": "sha512-Nbfib34Z2rfcJGSetMxjDCznn4pCYPZOtQYox2kzebIJcgH75yheIKd5QYSFmR8DIZf2M8fwOm66qSDIfRFFfQ==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", + "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", "dev": true, "requires": { "tinyspy": "^4.0.3" } }, "@vitest/utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.1.tgz", - "integrity": "sha512-KkHlGhePEKZSub5ViknBcN5KEF+u7dSUr9NW8QsVICusUojrgrOnnY3DEWWO877ax2Pyopuk2qHmt+gkNKnBVw==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", + "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", "dev": true, "requires": { - "@vitest/pretty-format": "3.2.1", - "loupe": "^3.1.3", + "@vitest/pretty-format": "3.2.4", + "loupe": "^3.1.4", "tinyrainbow": "^2.0.0" } }, @@ -35068,9 +35078,9 @@ } }, "loupe": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", - "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.4.tgz", + "integrity": "sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==", "dev": true }, "lower-case": { @@ -39333,6 +39343,23 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "strip-literal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz", + "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==", + "dev": true, + "requires": { + "js-tokens": "^9.0.1" + }, + "dependencies": { + "js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true + } + } + }, "style-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz", @@ -40898,9 +40925,9 @@ } }, "tinypool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.0.tgz", - "integrity": "sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", "dev": true }, "tinyrainbow": { @@ -41576,9 +41603,9 @@ } }, "vite-node": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.1.tgz", - "integrity": "sha512-V4EyKQPxquurNJPtQJRZo8hKOoKNBRIhxcDbQFPFig0JdoWcUhwRgK8yoCXXrfYVPKS6XwirGHPszLnR8FbjCA==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", "dev": true, "requires": { "cac": "^6.7.14", @@ -41589,19 +41616,19 @@ } }, "vitest": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.1.tgz", - "integrity": "sha512-VZ40MBnlE1/V5uTgdqY3DmjUgZtIzsYq758JGlyQrv5syIsaYcabkfPkEuWML49Ph0D/SoqpVFd0dyVTr551oA==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", + "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", "dev": true, "requires": { "@types/chai": "^5.2.2", - "@vitest/expect": "3.2.1", - "@vitest/mocker": "3.2.1", - "@vitest/pretty-format": "^3.2.1", - "@vitest/runner": "3.2.1", - "@vitest/snapshot": "3.2.1", - "@vitest/spy": "3.2.1", - "@vitest/utils": "3.2.1", + "@vitest/expect": "3.2.4", + "@vitest/mocker": "3.2.4", + "@vitest/pretty-format": "^3.2.4", + "@vitest/runner": "3.2.4", + "@vitest/snapshot": "3.2.4", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", @@ -41612,22 +41639,13 @@ "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", - "tinypool": "^1.1.0", + "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", - "vite-node": "3.2.1", + "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "dependencies": { - "@vitest/pretty-format": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.3.tgz", - "integrity": "sha512-yFglXGkr9hW/yEXngO+IKMhP0jxyFw2/qys/CK4fFUZnSltD+MU7dVYGrH8rvPcK/O6feXQA+EU33gjaBBbAng==", - "dev": true, - "requires": { - "tinyrainbow": "^2.0.0" - } - }, "picomatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", diff --git a/package.json b/package.json index d8b55de4c..12511ed64 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "@types/sortablejs": "1.15.8", "@typescript-eslint/parser": "8.34.1", "@uupaa/dynamic-import-polyfill": "1.0.2", - "@vitest/coverage-v8": "3.2.1", + "@vitest/coverage-v8": "3.2.4", "autoprefixer": "10.4.21", "babel-loader": "10.0.0", "clean-webpack-plugin": "4.0.0", @@ -66,7 +66,7 @@ "ts-loader": "9.5.2", "typescript": "5.8.3", "typescript-eslint": "8.33.1", - "vitest": "3.2.1", + "vitest": "3.2.4", "webpack": "5.99.9", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "6.0.1", From 3b6bb402226a2af898fffea31ef9c3b693b3b9d5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Jun 2025 02:53:25 +0000 Subject: [PATCH 541/645] Update dependency core-js to v3.43.0 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7691bfe17..fcbda331b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,7 @@ "blurhash": "2.0.5", "classlist.js": "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz", "classnames": "2.5.1", - "core-js": "3.42.0", + "core-js": "3.43.0", "date-fns": "2.30.0", "dompurify": "2.5.8", "element-closest-polyfill": "1.0.7", @@ -8898,9 +8898,9 @@ } }, "node_modules/core-js": { - "version": "3.42.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.42.0.tgz", - "integrity": "sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==", + "version": "3.43.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.43.0.tgz", + "integrity": "sha512-N6wEbTTZSYOY2rYAn85CuvWWkCK6QweMn7/4Nr3w+gDBeBhk/x4EJeY6FPo4QzDoJZxVTv8U7CMvgWk6pOHHqA==", "hasInstallScript": true, "license": "MIT", "funding": { @@ -30842,9 +30842,9 @@ } }, "core-js": { - "version": "3.42.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.42.0.tgz", - "integrity": "sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==" + "version": "3.43.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.43.0.tgz", + "integrity": "sha512-N6wEbTTZSYOY2rYAn85CuvWWkCK6QweMn7/4Nr3w+gDBeBhk/x4EJeY6FPo4QzDoJZxVTv8U7CMvgWk6pOHHqA==" }, "core-js-compat": { "version": "3.40.0", diff --git a/package.json b/package.json index d8b55de4c..6944eb11c 100644 --- a/package.json +++ b/package.json @@ -96,7 +96,7 @@ "blurhash": "2.0.5", "classlist.js": "https://github.com/eligrey/classList.js/archive/1.2.20180112.tar.gz", "classnames": "2.5.1", - "core-js": "3.42.0", + "core-js": "3.43.0", "date-fns": "2.30.0", "dompurify": "2.5.8", "element-closest-polyfill": "1.0.7", From e4f2b7e189aef560e314a2a1b6bfc7758c1b4deb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Jun 2025 02:53:54 +0000 Subject: [PATCH 542/645] Update Sass to v1.89.2 --- package-lock.json | 396 ++++++++++++++++++---------------------------- package.json | 4 +- 2 files changed, 152 insertions(+), 248 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7691bfe17..012558549 100644 --- a/package-lock.json +++ b/package-lock.json @@ -116,7 +116,7 @@ "postcss-loader": "8.1.1", "postcss-preset-env": "10.2.0", "postcss-scss": "4.0.9", - "sass": "1.87.0", + "sass": "1.89.2", "sass-loader": "16.0.5", "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", @@ -143,7 +143,7 @@ "yarn": "YARN NO LONGER USED - use npm instead." }, "optionalDependencies": { - "sass-embedded": "1.87.0" + "sass-embedded": "1.89.2" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -1830,9 +1830,9 @@ } }, "node_modules/@bufbuild/protobuf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.1.0.tgz", - "integrity": "sha512-+2Mx67Y3skJ4NCD/qNSdBJNWtu6x6Qr53jeNg+QcwiL6mt0wK+3jwHH2x1p7xaYH6Ve2JKOVn0OxU35WsmqI9A==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.5.2.tgz", + "integrity": "sha512-foZ7qr0IsUBjzWIq+SuBLfdQCpJ1j8cTuNNT4owngTHoN5KsJb8L9t65fzz7SCeSWzescoOil/0ldqiL041ABg==", "license": "(Apache-2.0 AND BSD-3-Clause)", "optional": true }, @@ -19425,9 +19425,9 @@ "dev": true }, "node_modules/sass": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.87.0.tgz", - "integrity": "sha512-d0NoFH4v6SjEK7BoX810Jsrhj7IQSYHAHLi/iSpgqKc7LaIDshFRlSg5LOymf9FqQhxEHs2W5ZQXlvy0KD45Uw==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz", + "integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==", "dev": true, "license": "MIT", "dependencies": { @@ -19446,13 +19446,13 @@ } }, "node_modules/sass-embedded": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.87.0.tgz", - "integrity": "sha512-1IA3iTJNh4BkkA/nidKiVwbmkxr9o6LsPegycHMX/JYs255zpocN5GdLF1+onohQCJxbs5ldr8osKV7qNaNBjg==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.89.2.tgz", + "integrity": "sha512-Ack2K8rc57kCFcYlf3HXpZEJFNUX8xd8DILldksREmYXQkRHI879yy8q4mRDJgrojkySMZqmmmW1NxrFxMsYaA==", "license": "MIT", "optional": true, "dependencies": { - "@bufbuild/protobuf": "^2.0.0", + "@bufbuild/protobuf": "^2.5.0", "buffer-builder": "^0.2.0", "colorjs.io": "^0.5.0", "immutable": "^5.0.2", @@ -19468,32 +19468,28 @@ "node": ">=16.0.0" }, "optionalDependencies": { - "sass-embedded-android-arm": "1.87.0", - "sass-embedded-android-arm64": "1.87.0", - "sass-embedded-android-ia32": "1.87.0", - "sass-embedded-android-riscv64": "1.87.0", - "sass-embedded-android-x64": "1.87.0", - "sass-embedded-darwin-arm64": "1.87.0", - "sass-embedded-darwin-x64": "1.87.0", - "sass-embedded-linux-arm": "1.87.0", - "sass-embedded-linux-arm64": "1.87.0", - "sass-embedded-linux-ia32": "1.87.0", - "sass-embedded-linux-musl-arm": "1.87.0", - "sass-embedded-linux-musl-arm64": "1.87.0", - "sass-embedded-linux-musl-ia32": "1.87.0", - "sass-embedded-linux-musl-riscv64": "1.87.0", - "sass-embedded-linux-musl-x64": "1.87.0", - "sass-embedded-linux-riscv64": "1.87.0", - "sass-embedded-linux-x64": "1.87.0", - "sass-embedded-win32-arm64": "1.87.0", - "sass-embedded-win32-ia32": "1.87.0", - "sass-embedded-win32-x64": "1.87.0" + "sass-embedded-android-arm": "1.89.2", + "sass-embedded-android-arm64": "1.89.2", + "sass-embedded-android-riscv64": "1.89.2", + "sass-embedded-android-x64": "1.89.2", + "sass-embedded-darwin-arm64": "1.89.2", + "sass-embedded-darwin-x64": "1.89.2", + "sass-embedded-linux-arm": "1.89.2", + "sass-embedded-linux-arm64": "1.89.2", + "sass-embedded-linux-musl-arm": "1.89.2", + "sass-embedded-linux-musl-arm64": "1.89.2", + "sass-embedded-linux-musl-riscv64": "1.89.2", + "sass-embedded-linux-musl-x64": "1.89.2", + "sass-embedded-linux-riscv64": "1.89.2", + "sass-embedded-linux-x64": "1.89.2", + "sass-embedded-win32-arm64": "1.89.2", + "sass-embedded-win32-x64": "1.89.2" } }, "node_modules/sass-embedded-android-arm": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.87.0.tgz", - "integrity": "sha512-Z20u/Y1kFDpMbgiloR5YPLxNuMVeKQRC8e/n68oAAxf3u7rDSmNn2msi7USqgT1f2zdBBNawn/ifbFEla6JiHw==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.89.2.tgz", + "integrity": "sha512-oHAPTboBHRZlDBhyRB6dvDKh4KvFs+DZibDHXbkSI6dBZxMTT+Yb2ivocHnctVGucKTLQeT7+OM5DjWHyynL/A==", "cpu": [ "arm" ], @@ -19507,9 +19503,9 @@ } }, "node_modules/sass-embedded-android-arm64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.87.0.tgz", - "integrity": "sha512-uqeZoBuXm3W2KhxolScAAfWOLHL21e50g7AxlLmG0he7WZsWw6e9kSnmq301iLIFp4kvmXYXbXbNKAeu9ItRYA==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.89.2.tgz", + "integrity": "sha512-+pq7a7AUpItNyPu61sRlP6G2A8pSPpyazASb+8AK2pVlFayCSPAEgpwpCE9A2/Xj86xJZeMizzKUHxM2CBCUxA==", "cpu": [ "arm64" ], @@ -19522,26 +19518,10 @@ "node": ">=14.0.0" } }, - "node_modules/sass-embedded-android-ia32": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.87.0.tgz", - "integrity": "sha512-hSWTqo2Igdig528cUb1W1+emw9d1J4+nqOoR4tERS04zcwRRFNDiuBT0o5meV7nkEwE982F+h57YdcRXj8gTtg==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/sass-embedded-android-riscv64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.87.0.tgz", - "integrity": "sha512-kBAPSjiTBLy5ua/0LRNAJwOAARhzFU7gP35fYORJcdBuz1lkIVPVnid1lh9qQ6Ce9MOJcr7VKFtGnTuqVeig5A==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.89.2.tgz", + "integrity": "sha512-HfJJWp/S6XSYvlGAqNdakeEMPOdhBkj2s2lN6SHnON54rahKem+z9pUbCriUJfM65Z90lakdGuOfidY61R9TYg==", "cpu": [ "riscv64" ], @@ -19555,9 +19535,9 @@ } }, "node_modules/sass-embedded-android-x64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.87.0.tgz", - "integrity": "sha512-ZHMrNdtdMSpJUYco2MesnlPwDTZftD3pqkkOMI2pbqarPoFUKJtP5k80nwCM0sJGtqfNE+O16w9yPght0CMiJg==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.89.2.tgz", + "integrity": "sha512-BGPzq53VH5z5HN8de6jfMqJjnRe1E6sfnCWFd4pK+CAiuM7iw5Fx6BQZu3ikfI1l2GY0y6pRXzsVLdp/j4EKEA==", "cpu": [ "x64" ], @@ -19571,9 +19551,9 @@ } }, "node_modules/sass-embedded-darwin-arm64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.87.0.tgz", - "integrity": "sha512-7TK1JWJdCIRSdZv5CJv/HpDz/wIfwUy2FoPz9sVOEj1pDTH0N+VfJd5VutCddIdoQN9jr0ap8vwkc65FbAxV2A==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.89.2.tgz", + "integrity": "sha512-UCm3RL/tzMpG7DsubARsvGUNXC5pgfQvP+RRFJo9XPIi6elopY5B6H4m9dRYDpHA+scjVthdiDwkPYr9+S/KGw==", "cpu": [ "arm64" ], @@ -19587,9 +19567,9 @@ } }, "node_modules/sass-embedded-darwin-x64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.87.0.tgz", - "integrity": "sha512-2JiQzt7FmgUC4MYT2QvbeH/Bi3e76WEhaYoc5P3WyTW8unsHksyTdMuTuYe0Qf9usIyt6bmm5no/4BBw7c8Cig==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.89.2.tgz", + "integrity": "sha512-D9WxtDY5VYtMApXRuhQK9VkPHB8R79NIIR6xxVlN2MIdEid/TZWi1MHNweieETXhWGrKhRKglwnHxxyKdJYMnA==", "cpu": [ "x64" ], @@ -19603,9 +19583,9 @@ } }, "node_modules/sass-embedded-linux-arm": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.87.0.tgz", - "integrity": "sha512-z5P6INMsGXiUcq1sRRbksyQUhalFFYjTEexuxfSYdK3U2YQMADHubQh8pGzkWvFRPOpnh83RiGuwvpaARYHnsw==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.89.2.tgz", + "integrity": "sha512-leP0t5U4r95dc90o8TCWfxNXwMAsQhpWxTkdtySDpngoqtTy3miMd7EYNYd1znI0FN1CBaUvbdCMbnbPwygDlA==", "cpu": [ "arm" ], @@ -19619,9 +19599,9 @@ } }, "node_modules/sass-embedded-linux-arm64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.87.0.tgz", - "integrity": "sha512-5z+mwJCbGZcg+q+MwdEVSh0ogFK7OSAe175Gsozzr/Izw34Q+RGUw9O82jsV2c4YNuTAQvzEHgIO5cvNvt3Quw==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.89.2.tgz", + "integrity": "sha512-2N4WW5LLsbtrWUJ7iTpjvhajGIbmDR18ZzYRywHdMLpfdPApuHPMDF5CYzHbS+LLx2UAx7CFKBnj5LLjY6eFgQ==", "cpu": [ "arm64" ], @@ -19634,26 +19614,10 @@ "node": ">=14.0.0" } }, - "node_modules/sass-embedded-linux-ia32": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.87.0.tgz", - "integrity": "sha512-Xzcp+YPp0iakGL148Jl57CO+MxLuj2jsry3M+rc1cSnDlvkjNVs6TMxaL70GFeV5HdU2V60voYcgE7adDUtJjw==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/sass-embedded-linux-musl-arm": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.87.0.tgz", - "integrity": "sha512-4PyqOWhRzyu06RRmpCCBOJdF4BOv7s446wrV6yODtEyyfSIDx3MJabo3KT0oJ1lTWSI/aU3R89bKx0JFXcIHHw==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.89.2.tgz", + "integrity": "sha512-Z6gG2FiVEEdxYHRi2sS5VIYBmp17351bWtOCUZ/thBM66+e70yiN6Eyqjz80DjL8haRUegNQgy9ZJqsLAAmr9g==", "cpu": [ "arm" ], @@ -19667,9 +19631,9 @@ } }, "node_modules/sass-embedded-linux-musl-arm64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.87.0.tgz", - "integrity": "sha512-HWE5eTRCoKzFZWsxOjDMTF5m4DDTQ0n7NJxSYiUXPBDydr9viPXbGOMYG7WVJLjiF7upr7DYo/mfp/SNTMlZyg==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.89.2.tgz", + "integrity": "sha512-nTyuaBX6U1A/cG7WJh0pKD1gY8hbg1m2SnzsyoFG+exQ0lBX/lwTLHq3nyhF+0atv7YYhYKbmfz+sjPP8CZ9lw==", "cpu": [ "arm64" ], @@ -19682,26 +19646,10 @@ "node": ">=14.0.0" } }, - "node_modules/sass-embedded-linux-musl-ia32": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.87.0.tgz", - "integrity": "sha512-aQaPvlRn3kh93PLQvl6BcFKu8Ji92+42blFEkg6nMVvmugD5ZwH2TGFrX25ibx4CYxRpMS4ssF7a0i7vy5HB1Q==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/sass-embedded-linux-musl-riscv64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.87.0.tgz", - "integrity": "sha512-o5DxcqiFzET3KRWo+futHr/lhAMBP3tJGGx8YIgpHQYfvDMbsvE0hiFC+nZ/GF9dbcGd+ceIQwfvE5mcc7Gsjw==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.89.2.tgz", + "integrity": "sha512-N6oul+qALO0SwGY8JW7H/Vs0oZIMrRMBM4GqX3AjM/6y8JsJRxkAwnfd0fDyK+aICMFarDqQonQNIx99gdTZqw==", "cpu": [ "riscv64" ], @@ -19715,9 +19663,9 @@ } }, "node_modules/sass-embedded-linux-musl-x64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.87.0.tgz", - "integrity": "sha512-dKxWsu9Wu/CyfzQmHdeiGqrRSzJ85VUjbSx+aP1/7ttmps3SSg+YW95PuqnCOa7GSuSreC3dKKpXHTywUxMLQA==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.89.2.tgz", + "integrity": "sha512-K+FmWcdj/uyP8GiG9foxOCPfb5OAZG0uSVq80DKgVSC0U44AdGjvAvVZkrgFEcZ6cCqlNC2JfYmslB5iqdL7tg==", "cpu": [ "x64" ], @@ -19731,9 +19679,9 @@ } }, "node_modules/sass-embedded-linux-riscv64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.87.0.tgz", - "integrity": "sha512-Sy3ESZ4FwBiijvmTA9n+0p0w3MNCue1AgINVPzpAY27EFi0h49eqQm9SWfOkFqmkFS2zFRYowdQOr5Bbr2gOXA==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.89.2.tgz", + "integrity": "sha512-g9nTbnD/3yhOaskeqeBQETbtfDQWRgsjHok6bn7DdAuwBsyrR3JlSFyqKc46pn9Xxd9SQQZU8AzM4IR+sY0A0w==", "cpu": [ "riscv64" ], @@ -19747,9 +19695,9 @@ } }, "node_modules/sass-embedded-linux-x64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.87.0.tgz", - "integrity": "sha512-+UfjakOcHHKTnEqB3EZ+KqzezQOe1emvy4Rs+eQhLyfekpYuNze/qlRvYxfKTmrtvDiUrIto8MXsyZfMLzkuMA==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.89.2.tgz", + "integrity": "sha512-Ax7dKvzncyQzIl4r7012KCMBvJzOz4uwSNoyoM5IV6y5I1f5hEwI25+U4WfuTqdkv42taCMgpjZbh9ERr6JVMQ==", "cpu": [ "x64" ], @@ -19763,9 +19711,9 @@ } }, "node_modules/sass-embedded-win32-arm64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.87.0.tgz", - "integrity": "sha512-m1DS6FYUE0/fv+vt38uQB/kxR4UjnyD+2zcSc298pFmA0aYh/XZIPWw7RxG1HL3KLE1ZrGyu3254MPoxRhs3ig==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.89.2.tgz", + "integrity": "sha512-j96iJni50ZUsfD6tRxDQE2QSYQ2WrfHxeiyAXf41Kw0V4w5KYR/Sf6rCZQLMTUOHnD16qTMVpQi20LQSqf4WGg==", "cpu": [ "arm64" ], @@ -19778,26 +19726,10 @@ "node": ">=14.0.0" } }, - "node_modules/sass-embedded-win32-ia32": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.87.0.tgz", - "integrity": "sha512-JztXLo59GMe2E6g+kCsyiERYhtZgkcyDYx6CrXoSTE5WaE+RbxRiCCCv8/1+hf406f08pUxJ8G0Ody7M5urtBA==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/sass-embedded-win32-x64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.87.0.tgz", - "integrity": "sha512-4nQErpauvhgSo+7ClumGdjdf9sGx+U9yBgvhI0+zUw+D5YvraVgvA0Lk8Wuwntx2PqnvKUk8YDr/vxHJostv4Q==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.89.2.tgz", + "integrity": "sha512-cS2j5ljdkQsb4PaORiClaVYynE9OAPZG/XjbOMxpQmjRIf7UroY4PEIH+Waf+y47PfXFX9SyxhYuw2NIKGbEng==", "cpu": [ "x64" ], @@ -26650,9 +26582,9 @@ "dev": true }, "@bufbuild/protobuf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.1.0.tgz", - "integrity": "sha512-+2Mx67Y3skJ4NCD/qNSdBJNWtu6x6Qr53jeNg+QcwiL6mt0wK+3jwHH2x1p7xaYH6Ve2JKOVn0OxU35WsmqI9A==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.5.2.tgz", + "integrity": "sha512-foZ7qr0IsUBjzWIq+SuBLfdQCpJ1j8cTuNNT4owngTHoN5KsJb8L9t65fzz7SCeSWzescoOil/0ldqiL041ABg==", "optional": true }, "@colors/colors": { @@ -38097,9 +38029,9 @@ "dev": true }, "sass": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.87.0.tgz", - "integrity": "sha512-d0NoFH4v6SjEK7BoX810Jsrhj7IQSYHAHLi/iSpgqKc7LaIDshFRlSg5LOymf9FqQhxEHs2W5ZQXlvy0KD45Uw==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz", + "integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==", "dev": true, "requires": { "@parcel/watcher": "^2.4.1", @@ -38126,36 +38058,32 @@ } }, "sass-embedded": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.87.0.tgz", - "integrity": "sha512-1IA3iTJNh4BkkA/nidKiVwbmkxr9o6LsPegycHMX/JYs255zpocN5GdLF1+onohQCJxbs5ldr8osKV7qNaNBjg==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.89.2.tgz", + "integrity": "sha512-Ack2K8rc57kCFcYlf3HXpZEJFNUX8xd8DILldksREmYXQkRHI879yy8q4mRDJgrojkySMZqmmmW1NxrFxMsYaA==", "optional": true, "requires": { - "@bufbuild/protobuf": "^2.0.0", + "@bufbuild/protobuf": "^2.5.0", "buffer-builder": "^0.2.0", "colorjs.io": "^0.5.0", "immutable": "^5.0.2", "rxjs": "^7.4.0", - "sass-embedded-android-arm": "1.87.0", - "sass-embedded-android-arm64": "1.87.0", - "sass-embedded-android-ia32": "1.87.0", - "sass-embedded-android-riscv64": "1.87.0", - "sass-embedded-android-x64": "1.87.0", - "sass-embedded-darwin-arm64": "1.87.0", - "sass-embedded-darwin-x64": "1.87.0", - "sass-embedded-linux-arm": "1.87.0", - "sass-embedded-linux-arm64": "1.87.0", - "sass-embedded-linux-ia32": "1.87.0", - "sass-embedded-linux-musl-arm": "1.87.0", - "sass-embedded-linux-musl-arm64": "1.87.0", - "sass-embedded-linux-musl-ia32": "1.87.0", - "sass-embedded-linux-musl-riscv64": "1.87.0", - "sass-embedded-linux-musl-x64": "1.87.0", - "sass-embedded-linux-riscv64": "1.87.0", - "sass-embedded-linux-x64": "1.87.0", - "sass-embedded-win32-arm64": "1.87.0", - "sass-embedded-win32-ia32": "1.87.0", - "sass-embedded-win32-x64": "1.87.0", + "sass-embedded-android-arm": "1.89.2", + "sass-embedded-android-arm64": "1.89.2", + "sass-embedded-android-riscv64": "1.89.2", + "sass-embedded-android-x64": "1.89.2", + "sass-embedded-darwin-arm64": "1.89.2", + "sass-embedded-darwin-x64": "1.89.2", + "sass-embedded-linux-arm": "1.89.2", + "sass-embedded-linux-arm64": "1.89.2", + "sass-embedded-linux-musl-arm": "1.89.2", + "sass-embedded-linux-musl-arm64": "1.89.2", + "sass-embedded-linux-musl-riscv64": "1.89.2", + "sass-embedded-linux-musl-x64": "1.89.2", + "sass-embedded-linux-riscv64": "1.89.2", + "sass-embedded-linux-x64": "1.89.2", + "sass-embedded-win32-arm64": "1.89.2", + "sass-embedded-win32-x64": "1.89.2", "supports-color": "^8.1.1", "sync-child-process": "^1.0.2", "varint": "^6.0.0" @@ -38179,123 +38107,99 @@ } }, "sass-embedded-android-arm": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.87.0.tgz", - "integrity": "sha512-Z20u/Y1kFDpMbgiloR5YPLxNuMVeKQRC8e/n68oAAxf3u7rDSmNn2msi7USqgT1f2zdBBNawn/ifbFEla6JiHw==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.89.2.tgz", + "integrity": "sha512-oHAPTboBHRZlDBhyRB6dvDKh4KvFs+DZibDHXbkSI6dBZxMTT+Yb2ivocHnctVGucKTLQeT7+OM5DjWHyynL/A==", "optional": true }, "sass-embedded-android-arm64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.87.0.tgz", - "integrity": "sha512-uqeZoBuXm3W2KhxolScAAfWOLHL21e50g7AxlLmG0he7WZsWw6e9kSnmq301iLIFp4kvmXYXbXbNKAeu9ItRYA==", - "optional": true - }, - "sass-embedded-android-ia32": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.87.0.tgz", - "integrity": "sha512-hSWTqo2Igdig528cUb1W1+emw9d1J4+nqOoR4tERS04zcwRRFNDiuBT0o5meV7nkEwE982F+h57YdcRXj8gTtg==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.89.2.tgz", + "integrity": "sha512-+pq7a7AUpItNyPu61sRlP6G2A8pSPpyazASb+8AK2pVlFayCSPAEgpwpCE9A2/Xj86xJZeMizzKUHxM2CBCUxA==", "optional": true }, "sass-embedded-android-riscv64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.87.0.tgz", - "integrity": "sha512-kBAPSjiTBLy5ua/0LRNAJwOAARhzFU7gP35fYORJcdBuz1lkIVPVnid1lh9qQ6Ce9MOJcr7VKFtGnTuqVeig5A==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.89.2.tgz", + "integrity": "sha512-HfJJWp/S6XSYvlGAqNdakeEMPOdhBkj2s2lN6SHnON54rahKem+z9pUbCriUJfM65Z90lakdGuOfidY61R9TYg==", "optional": true }, "sass-embedded-android-x64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.87.0.tgz", - "integrity": "sha512-ZHMrNdtdMSpJUYco2MesnlPwDTZftD3pqkkOMI2pbqarPoFUKJtP5k80nwCM0sJGtqfNE+O16w9yPght0CMiJg==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.89.2.tgz", + "integrity": "sha512-BGPzq53VH5z5HN8de6jfMqJjnRe1E6sfnCWFd4pK+CAiuM7iw5Fx6BQZu3ikfI1l2GY0y6pRXzsVLdp/j4EKEA==", "optional": true }, "sass-embedded-darwin-arm64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.87.0.tgz", - "integrity": "sha512-7TK1JWJdCIRSdZv5CJv/HpDz/wIfwUy2FoPz9sVOEj1pDTH0N+VfJd5VutCddIdoQN9jr0ap8vwkc65FbAxV2A==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.89.2.tgz", + "integrity": "sha512-UCm3RL/tzMpG7DsubARsvGUNXC5pgfQvP+RRFJo9XPIi6elopY5B6H4m9dRYDpHA+scjVthdiDwkPYr9+S/KGw==", "optional": true }, "sass-embedded-darwin-x64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.87.0.tgz", - "integrity": "sha512-2JiQzt7FmgUC4MYT2QvbeH/Bi3e76WEhaYoc5P3WyTW8unsHksyTdMuTuYe0Qf9usIyt6bmm5no/4BBw7c8Cig==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.89.2.tgz", + "integrity": "sha512-D9WxtDY5VYtMApXRuhQK9VkPHB8R79NIIR6xxVlN2MIdEid/TZWi1MHNweieETXhWGrKhRKglwnHxxyKdJYMnA==", "optional": true }, "sass-embedded-linux-arm": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.87.0.tgz", - "integrity": "sha512-z5P6INMsGXiUcq1sRRbksyQUhalFFYjTEexuxfSYdK3U2YQMADHubQh8pGzkWvFRPOpnh83RiGuwvpaARYHnsw==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.89.2.tgz", + "integrity": "sha512-leP0t5U4r95dc90o8TCWfxNXwMAsQhpWxTkdtySDpngoqtTy3miMd7EYNYd1znI0FN1CBaUvbdCMbnbPwygDlA==", "optional": true }, "sass-embedded-linux-arm64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.87.0.tgz", - "integrity": "sha512-5z+mwJCbGZcg+q+MwdEVSh0ogFK7OSAe175Gsozzr/Izw34Q+RGUw9O82jsV2c4YNuTAQvzEHgIO5cvNvt3Quw==", - "optional": true - }, - "sass-embedded-linux-ia32": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.87.0.tgz", - "integrity": "sha512-Xzcp+YPp0iakGL148Jl57CO+MxLuj2jsry3M+rc1cSnDlvkjNVs6TMxaL70GFeV5HdU2V60voYcgE7adDUtJjw==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.89.2.tgz", + "integrity": "sha512-2N4WW5LLsbtrWUJ7iTpjvhajGIbmDR18ZzYRywHdMLpfdPApuHPMDF5CYzHbS+LLx2UAx7CFKBnj5LLjY6eFgQ==", "optional": true }, "sass-embedded-linux-musl-arm": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.87.0.tgz", - "integrity": "sha512-4PyqOWhRzyu06RRmpCCBOJdF4BOv7s446wrV6yODtEyyfSIDx3MJabo3KT0oJ1lTWSI/aU3R89bKx0JFXcIHHw==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.89.2.tgz", + "integrity": "sha512-Z6gG2FiVEEdxYHRi2sS5VIYBmp17351bWtOCUZ/thBM66+e70yiN6Eyqjz80DjL8haRUegNQgy9ZJqsLAAmr9g==", "optional": true }, "sass-embedded-linux-musl-arm64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.87.0.tgz", - "integrity": "sha512-HWE5eTRCoKzFZWsxOjDMTF5m4DDTQ0n7NJxSYiUXPBDydr9viPXbGOMYG7WVJLjiF7upr7DYo/mfp/SNTMlZyg==", - "optional": true - }, - "sass-embedded-linux-musl-ia32": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.87.0.tgz", - "integrity": "sha512-aQaPvlRn3kh93PLQvl6BcFKu8Ji92+42blFEkg6nMVvmugD5ZwH2TGFrX25ibx4CYxRpMS4ssF7a0i7vy5HB1Q==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.89.2.tgz", + "integrity": "sha512-nTyuaBX6U1A/cG7WJh0pKD1gY8hbg1m2SnzsyoFG+exQ0lBX/lwTLHq3nyhF+0atv7YYhYKbmfz+sjPP8CZ9lw==", "optional": true }, "sass-embedded-linux-musl-riscv64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.87.0.tgz", - "integrity": "sha512-o5DxcqiFzET3KRWo+futHr/lhAMBP3tJGGx8YIgpHQYfvDMbsvE0hiFC+nZ/GF9dbcGd+ceIQwfvE5mcc7Gsjw==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.89.2.tgz", + "integrity": "sha512-N6oul+qALO0SwGY8JW7H/Vs0oZIMrRMBM4GqX3AjM/6y8JsJRxkAwnfd0fDyK+aICMFarDqQonQNIx99gdTZqw==", "optional": true }, "sass-embedded-linux-musl-x64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.87.0.tgz", - "integrity": "sha512-dKxWsu9Wu/CyfzQmHdeiGqrRSzJ85VUjbSx+aP1/7ttmps3SSg+YW95PuqnCOa7GSuSreC3dKKpXHTywUxMLQA==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.89.2.tgz", + "integrity": "sha512-K+FmWcdj/uyP8GiG9foxOCPfb5OAZG0uSVq80DKgVSC0U44AdGjvAvVZkrgFEcZ6cCqlNC2JfYmslB5iqdL7tg==", "optional": true }, "sass-embedded-linux-riscv64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.87.0.tgz", - "integrity": "sha512-Sy3ESZ4FwBiijvmTA9n+0p0w3MNCue1AgINVPzpAY27EFi0h49eqQm9SWfOkFqmkFS2zFRYowdQOr5Bbr2gOXA==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.89.2.tgz", + "integrity": "sha512-g9nTbnD/3yhOaskeqeBQETbtfDQWRgsjHok6bn7DdAuwBsyrR3JlSFyqKc46pn9Xxd9SQQZU8AzM4IR+sY0A0w==", "optional": true }, "sass-embedded-linux-x64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.87.0.tgz", - "integrity": "sha512-+UfjakOcHHKTnEqB3EZ+KqzezQOe1emvy4Rs+eQhLyfekpYuNze/qlRvYxfKTmrtvDiUrIto8MXsyZfMLzkuMA==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.89.2.tgz", + "integrity": "sha512-Ax7dKvzncyQzIl4r7012KCMBvJzOz4uwSNoyoM5IV6y5I1f5hEwI25+U4WfuTqdkv42taCMgpjZbh9ERr6JVMQ==", "optional": true }, "sass-embedded-win32-arm64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.87.0.tgz", - "integrity": "sha512-m1DS6FYUE0/fv+vt38uQB/kxR4UjnyD+2zcSc298pFmA0aYh/XZIPWw7RxG1HL3KLE1ZrGyu3254MPoxRhs3ig==", - "optional": true - }, - "sass-embedded-win32-ia32": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.87.0.tgz", - "integrity": "sha512-JztXLo59GMe2E6g+kCsyiERYhtZgkcyDYx6CrXoSTE5WaE+RbxRiCCCv8/1+hf406f08pUxJ8G0Ody7M5urtBA==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.89.2.tgz", + "integrity": "sha512-j96iJni50ZUsfD6tRxDQE2QSYQ2WrfHxeiyAXf41Kw0V4w5KYR/Sf6rCZQLMTUOHnD16qTMVpQi20LQSqf4WGg==", "optional": true }, "sass-embedded-win32-x64": { - "version": "1.87.0", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.87.0.tgz", - "integrity": "sha512-4nQErpauvhgSo+7ClumGdjdf9sGx+U9yBgvhI0+zUw+D5YvraVgvA0Lk8Wuwntx2PqnvKUk8YDr/vxHJostv4Q==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.89.2.tgz", + "integrity": "sha512-cS2j5ljdkQsb4PaORiClaVYynE9OAPZG/XjbOMxpQmjRIf7UroY4PEIH+Waf+y47PfXFX9SyxhYuw2NIKGbEng==", "optional": true }, "sass-loader": { diff --git a/package.json b/package.json index d8b55de4c..215f9d451 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "postcss-loader": "8.1.1", "postcss-preset-env": "10.2.0", "postcss-scss": "4.0.9", - "sass": "1.87.0", + "sass": "1.89.2", "sass-loader": "16.0.5", "source-map-loader": "5.0.0", "speed-measure-webpack-plugin": "1.5.0", @@ -134,7 +134,7 @@ "whatwg-fetch": "3.6.20" }, "optionalDependencies": { - "sass-embedded": "1.87.0" + "sass-embedded": "1.89.2" }, "browserslist": [ "last 2 Firefox versions", From 5e487bb60fb1cd215855b1b4b3cc05bdefc87e6a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Jun 2025 03:01:16 +0000 Subject: [PATCH 543/645] Update dependency typescript-eslint to v8.34.1 --- package-lock.json | 496 +++++++++------------------------------------- package.json | 2 +- 2 files changed, 97 insertions(+), 401 deletions(-) diff --git a/package-lock.json b/package-lock.json index 61e0778d9..7c1888ae2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -128,7 +128,7 @@ "stylelint-scss": "6.12.1", "ts-loader": "9.5.2", "typescript": "5.8.3", - "typescript-eslint": "8.33.1", + "typescript-eslint": "8.34.1", "vitest": "3.2.4", "webpack": "5.99.9", "webpack-bundle-analyzer": "4.10.2", @@ -6042,17 +6042,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.1.tgz", - "integrity": "sha512-TDCXj+YxLgtvxvFlAvpoRv9MAncDLBV2oT9Bd7YBGC/b/sEURoOYuIwLI99rjWOfY3QtDzO+mk0n4AmdFExW8A==", + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.1.tgz", + "integrity": "sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.33.1", - "@typescript-eslint/type-utils": "8.33.1", - "@typescript-eslint/utils": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1", + "@typescript-eslint/scope-manager": "8.34.1", + "@typescript-eslint/type-utils": "8.34.1", + "@typescript-eslint/utils": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -6066,7 +6066,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.33.1", + "@typescript-eslint/parser": "^8.34.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } @@ -6106,137 +6106,6 @@ "typescript": ">=4.8.4 <5.9.0" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz", - "integrity": "sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.34.1", - "@typescript-eslint/visitor-keys": "8.34.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.1.tgz", - "integrity": "sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz", - "integrity": "sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.34.1", - "@typescript-eslint/tsconfig-utils": "8.34.1", - "@typescript-eslint/types": "8.34.1", - "@typescript-eslint/visitor-keys": "8.34.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz", - "integrity": "sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.34.1", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/project-service": { "version": "8.34.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.1.tgz", @@ -6274,14 +6143,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.1.tgz", - "integrity": "sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==", + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz", + "integrity": "sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1" + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6309,14 +6178,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.33.1.tgz", - "integrity": "sha512-1cG37d9xOkhlykom55WVwG2QRNC7YXlxMaMzqw2uPeJixBFfKWZgaP/hjAObqMN/u3fr5BrTwTnc31/L9jQ2ww==", + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.34.1.tgz", + "integrity": "sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.33.1", - "@typescript-eslint/utils": "8.33.1", + "@typescript-eslint/typescript-estree": "8.34.1", + "@typescript-eslint/utils": "8.34.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -6333,9 +6202,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.1.tgz", - "integrity": "sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==", + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.1.tgz", + "integrity": "sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==", "dev": true, "license": "MIT", "engines": { @@ -6347,16 +6216,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.1.tgz", - "integrity": "sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==", + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz", + "integrity": "sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.33.1", - "@typescript-eslint/tsconfig-utils": "8.33.1", - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1", + "@typescript-eslint/project-service": "8.34.1", + "@typescript-eslint/tsconfig-utils": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -6375,49 +6244,10 @@ "typescript": ">=4.8.4 <5.9.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/project-service": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.1.tgz", - "integrity": "sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.33.1", - "@typescript-eslint/types": "^8.33.1", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.1.tgz", - "integrity": "sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6454,16 +6284,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.1.tgz", - "integrity": "sha512-52HaBiEQUaRYqAXpfzWSR2U3gxk92Kw006+xZpElaPMg3C4PgM+A5LqwoQI1f9E5aZ/qlxAZxzm42WX+vn92SQ==", + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.1.tgz", + "integrity": "sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.33.1", - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/typescript-estree": "8.33.1" + "@typescript-eslint/scope-manager": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/typescript-estree": "8.34.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6478,14 +6308,14 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.1.tgz", - "integrity": "sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==", + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz", + "integrity": "sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.33.1", - "eslint-visitor-keys": "^4.2.0" + "@typescript-eslint/types": "8.34.1", + "eslint-visitor-keys": "^4.2.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -23956,40 +23786,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.33.1.tgz", - "integrity": "sha512-AgRnV4sKkWOiZ0Kjbnf5ytTJXMUZQ0qhSVdQtDNYLPLnjsATEYhaO94GlRQwi4t4gO8FfjM6NnikHeKjUm8D7A==", + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.34.1.tgz", + "integrity": "sha512-XjS+b6Vg9oT1BaIUfkW3M3LvqZE++rbzAMEHuccCfO/YkP43ha6w3jTEMilQxMF92nVOYCcdjv1ZUhAa1D/0ow==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.33.1", - "@typescript-eslint/parser": "8.33.1", - "@typescript-eslint/utils": "8.33.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.1.tgz", - "integrity": "sha512-qwxv6dq682yVvgKKp2qWwLgRbscDAYktPptK4JPojCwwi3R9cwrvIxS4lvBpzmcqzR4bdn54Z0IG1uHFskW4dA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.33.1", - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/typescript-estree": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1", - "debug": "^4.3.4" + "@typescript-eslint/eslint-plugin": "8.34.1", + "@typescript-eslint/parser": "8.34.1", + "@typescript-eslint/utils": "8.34.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -28886,16 +28691,16 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.1.tgz", - "integrity": "sha512-TDCXj+YxLgtvxvFlAvpoRv9MAncDLBV2oT9Bd7YBGC/b/sEURoOYuIwLI99rjWOfY3QtDzO+mk0n4AmdFExW8A==", + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.1.tgz", + "integrity": "sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.33.1", - "@typescript-eslint/type-utils": "8.33.1", - "@typescript-eslint/utils": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1", + "@typescript-eslint/scope-manager": "8.34.1", + "@typescript-eslint/type-utils": "8.34.1", + "@typescript-eslint/utils": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -28921,82 +28726,6 @@ "@typescript-eslint/typescript-estree": "8.34.1", "@typescript-eslint/visitor-keys": "8.34.1", "debug": "^4.3.4" - }, - "dependencies": { - "@typescript-eslint/scope-manager": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz", - "integrity": "sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "8.34.1", - "@typescript-eslint/visitor-keys": "8.34.1" - } - }, - "@typescript-eslint/types": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.1.tgz", - "integrity": "sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz", - "integrity": "sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==", - "dev": true, - "requires": { - "@typescript-eslint/project-service": "8.34.1", - "@typescript-eslint/tsconfig-utils": "8.34.1", - "@typescript-eslint/types": "8.34.1", - "@typescript-eslint/visitor-keys": "8.34.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz", - "integrity": "sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "8.34.1", - "eslint-visitor-keys": "^4.2.1" - } - }, - "brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true - }, - "minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true - } } }, "@typescript-eslint/project-service": { @@ -29019,13 +28748,13 @@ } }, "@typescript-eslint/scope-manager": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.1.tgz", - "integrity": "sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==", + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz", + "integrity": "sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==", "dev": true, "requires": { - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1" + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1" } }, "@typescript-eslint/tsconfig-utils": { @@ -29036,33 +28765,33 @@ "requires": {} }, "@typescript-eslint/type-utils": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.33.1.tgz", - "integrity": "sha512-1cG37d9xOkhlykom55WVwG2QRNC7YXlxMaMzqw2uPeJixBFfKWZgaP/hjAObqMN/u3fr5BrTwTnc31/L9jQ2ww==", + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.34.1.tgz", + "integrity": "sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "8.33.1", - "@typescript-eslint/utils": "8.33.1", + "@typescript-eslint/typescript-estree": "8.34.1", + "@typescript-eslint/utils": "8.34.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" } }, "@typescript-eslint/types": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.1.tgz", - "integrity": "sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==", + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.1.tgz", + "integrity": "sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.1.tgz", - "integrity": "sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==", + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz", + "integrity": "sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==", "dev": true, "requires": { - "@typescript-eslint/project-service": "8.33.1", - "@typescript-eslint/tsconfig-utils": "8.33.1", - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1", + "@typescript-eslint/project-service": "8.34.1", + "@typescript-eslint/tsconfig-utils": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -29071,28 +28800,10 @@ "ts-api-utils": "^2.1.0" }, "dependencies": { - "@typescript-eslint/project-service": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.1.tgz", - "integrity": "sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw==", - "dev": true, - "requires": { - "@typescript-eslint/tsconfig-utils": "^8.33.1", - "@typescript-eslint/types": "^8.33.1", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/tsconfig-utils": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.1.tgz", - "integrity": "sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==", - "dev": true, - "requires": {} - }, "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -29116,25 +28827,25 @@ } }, "@typescript-eslint/utils": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.1.tgz", - "integrity": "sha512-52HaBiEQUaRYqAXpfzWSR2U3gxk92Kw006+xZpElaPMg3C4PgM+A5LqwoQI1f9E5aZ/qlxAZxzm42WX+vn92SQ==", + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.1.tgz", + "integrity": "sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.33.1", - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/typescript-estree": "8.33.1" + "@typescript-eslint/scope-manager": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/typescript-estree": "8.34.1" } }, "@typescript-eslint/visitor-keys": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.1.tgz", - "integrity": "sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==", + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz", + "integrity": "sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==", "dev": true, "requires": { - "@typescript-eslint/types": "8.33.1", - "eslint-visitor-keys": "^4.2.0" + "@typescript-eslint/types": "8.34.1", + "eslint-visitor-keys": "^4.2.1" }, "dependencies": { "eslint-visitor-keys": { @@ -41272,29 +40983,14 @@ "dev": true }, "typescript-eslint": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.33.1.tgz", - "integrity": "sha512-AgRnV4sKkWOiZ0Kjbnf5ytTJXMUZQ0qhSVdQtDNYLPLnjsATEYhaO94GlRQwi4t4gO8FfjM6NnikHeKjUm8D7A==", + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.34.1.tgz", + "integrity": "sha512-XjS+b6Vg9oT1BaIUfkW3M3LvqZE++rbzAMEHuccCfO/YkP43ha6w3jTEMilQxMF92nVOYCcdjv1ZUhAa1D/0ow==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "8.33.1", - "@typescript-eslint/parser": "8.33.1", - "@typescript-eslint/utils": "8.33.1" - }, - "dependencies": { - "@typescript-eslint/parser": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.1.tgz", - "integrity": "sha512-qwxv6dq682yVvgKKp2qWwLgRbscDAYktPptK4JPojCwwi3R9cwrvIxS4lvBpzmcqzR4bdn54Z0IG1uHFskW4dA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "8.33.1", - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/typescript-estree": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1", - "debug": "^4.3.4" - } - } + "@typescript-eslint/eslint-plugin": "8.34.1", + "@typescript-eslint/parser": "8.34.1", + "@typescript-eslint/utils": "8.34.1" } }, "uc.micro": { diff --git a/package.json b/package.json index 12511ed64..9efcb2fa2 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "stylelint-scss": "6.12.1", "ts-loader": "9.5.2", "typescript": "5.8.3", - "typescript-eslint": "8.33.1", + "typescript-eslint": "8.34.1", "vitest": "3.2.4", "webpack": "5.99.9", "webpack-bundle-analyzer": "4.10.2", From 7a02f3b21f56977b9f2551da5ee1e4928d2030e1 Mon Sep 17 00:00:00 2001 From: nyanmisaka Date: Fri, 27 Jun 2025 12:29:09 +0800 Subject: [PATCH 544/645] Set maxMaxBufferLength to avoid bufferAppendError on Chrome 138 ``` HLS Error: Type: mediaError Details: bufferAppendError Fatal: true ``` It seems that the default buffer eviction behavior has changed in Chrome 138, so the default maxMaxBufferLength from hls.js don't apply. Signed-off-by: nyanmisaka --- src/plugins/htmlVideoPlayer/plugin.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index 541a13e91..b647c5dcb 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -453,6 +453,7 @@ export class HtmlVideoPlayer { startPosition: options.playerStartPositionTicks / 10000000, manifestLoadingTimeOut: 20000, maxBufferLength: maxBufferLength, + maxMaxBufferLength: maxBufferLength, videoPreference: { preferHDR: true }, xhrSetup(xhr) { xhr.withCredentials = includeCorsCredentials; From 08bed0cae3f0b6929b3598c11bb14561ada90a0a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Jun 2025 09:29:00 +0000 Subject: [PATCH 545/645] Update dependency @jellyfin/sdk to v0.0.0-unstable.202506270502 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 13417ad00..030c8a2ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.2.6", "@fontsource/noto-sans-tc": "5.2.6", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202506270243", + "@jellyfin/sdk": "0.0.0-unstable.202506270502", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.12", "@mui/material": "6.4.12", @@ -4129,9 +4129,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202506270243", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506270243.tgz", - "integrity": "sha512-dTsPNmRUsWhmZn/8m4/8I00VvsFg7lrCJXk7BHhwYgKJjqphFWDupqSz7y9U4MvMf1Hnw3ms3hxWTxk0ZFnTTg==", + "version": "0.0.0-unstable.202506270502", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506270502.tgz", + "integrity": "sha512-PooFqKY/puCipm8YkkP91dj1Sq+VufXWD2V5yS5gEyEE1Usoj0CkWOaas2eUdf/3cUaPeLOXuczRA/Oht1PU5w==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -27449,9 +27449,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202506270243", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506270243.tgz", - "integrity": "sha512-dTsPNmRUsWhmZn/8m4/8I00VvsFg7lrCJXk7BHhwYgKJjqphFWDupqSz7y9U4MvMf1Hnw3ms3hxWTxk0ZFnTTg==", + "version": "0.0.0-unstable.202506270502", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506270502.tgz", + "integrity": "sha512-PooFqKY/puCipm8YkkP91dj1Sq+VufXWD2V5yS5gEyEE1Usoj0CkWOaas2eUdf/3cUaPeLOXuczRA/Oht1PU5w==", "requires": {} }, "@jellyfin/ux-web": { diff --git a/package.json b/package.json index 8f101f65b..d4fe98160 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@fontsource/noto-sans-sc": "5.2.6", "@fontsource/noto-sans-tc": "5.2.6", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202506270243", + "@jellyfin/sdk": "0.0.0-unstable.202506270502", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.12", "@mui/material": "6.4.12", From ab8b58f32428f339e0c254279b584e815a067da2 Mon Sep 17 00:00:00 2001 From: sarnoso Date: Fri, 27 Jun 2025 06:42:25 -0400 Subject: [PATCH 546/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index efe3f5107..1d4b896b8 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -2053,9 +2053,10 @@ "StorageType.Removable": "Retirable", "StorageType.Unknown": "Desconegut", "PluginsLoadError": "S'ha produït un error en carregar els complements.", - "ButtonLearnMore": "En voleu saber més?", + "ButtonLearnMore": "Saber més", "RepositoriesPageLoadError": "No s'han pogut carregar els repositoris", "TranscodingLoadError": "No s'han pogut carregar els paràmetres de transcodificació", "ConfirmDeleteRepository": "Desitgeu eliminar el repositori?", - "DeleteRepositoryConfirmation": "N'esteu segur, de voler esborrar aquest repositori?" + "DeleteRepositoryConfirmation": "N'esteu segur, de voler esborrar aquest repositori?", + "LiveTVPageLoadError": "La càrrega de la pàgina de gravacions ha fallat" } From d3c11320a438fba57cdeb5ab04b8b90778b2e221 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Jun 2025 14:34:26 +0000 Subject: [PATCH 547/645] Update github/codeql-action action to v3.29.1 --- .github/workflows/__codeql.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/__codeql.yml b/.github/workflows/__codeql.yml index 54aae70d7..54bccbf55 100644 --- a/.github/workflows/__codeql.yml +++ b/.github/workflows/__codeql.yml @@ -26,15 +26,15 @@ jobs: show-progress: false - name: Initialize CodeQL 🛠️ - uses: github/codeql-action/init@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0 + uses: github/codeql-action/init@39edc492dbe16b1465b0cafca41432d857bdb31a # v3.29.1 with: queries: security-and-quality languages: ${{ matrix.language }} - name: Autobuild 📦 - uses: github/codeql-action/autobuild@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0 + uses: github/codeql-action/autobuild@39edc492dbe16b1465b0cafca41432d857bdb31a # v3.29.1 - name: Perform CodeQL Analysis 🧪 - uses: github/codeql-action/analyze@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0 + uses: github/codeql-action/analyze@39edc492dbe16b1465b0cafca41432d857bdb31a # v3.29.1 with: category: '/language:${{matrix.language}}' From 19162e00b1d6aefb6d52e58697fed30dab0dc9c5 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Fri, 27 Jun 2025 11:28:54 -0400 Subject: [PATCH 548/645] Cleanup package filter Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- .../plugins/utils/getPackagesByCategory.ts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/apps/dashboard/features/plugins/utils/getPackagesByCategory.ts b/src/apps/dashboard/features/plugins/utils/getPackagesByCategory.ts index afcbb7adc..fcaa21ad4 100644 --- a/src/apps/dashboard/features/plugins/utils/getPackagesByCategory.ts +++ b/src/apps/dashboard/features/plugins/utils/getPackagesByCategory.ts @@ -3,13 +3,15 @@ import type { PackageInfo } from '@jellyfin/sdk/lib/generated-client/models/pack const getPackagesByCategory = (packages: PackageInfo[] | undefined, category: string) => { if (!packages) return []; - return packages.filter(pkg => pkg.category == category).sort((a, b) => { - if (a.name && b.name) { - return a.name?.localeCompare(b.name); - } else { - return 0; - } - }); + return packages + .filter(pkg => pkg.category === category) + .sort((a, b) => { + if (a.name && b.name) { + return a.name.localeCompare(b.name); + } else { + return 0; + } + }); }; export default getPackagesByCategory; From 5f632363b9c51f61564acf5a26e89e2635e559d3 Mon Sep 17 00:00:00 2001 From: Paul Donald Date: Fri, 27 Jun 2025 17:40:57 +0200 Subject: [PATCH 549/645] Fix split idiom shutdown -> shut down --- src/strings/en-us.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 1a4879bf5..a5d9c9534 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -182,7 +182,7 @@ "ConfirmDeleteLyrics": "Deleting these lyrics will delete them from both the file system and your media library. Are you sure you wish to continue?", "ConfirmDeleteRepository": "Delete repository?", "ConfirmDeletion": "Confirm Deletion", - "ConfirmEndPlayerSession": "Would you like to shutdown Jellyfin on {0}?", + "ConfirmEndPlayerSession": "Would you like to shut Jellyfin down on {0}?", "Connect": "Connect", "Console": "Console", "ContinueWatching": "Continue watching", @@ -1135,7 +1135,7 @@ "MessageConfirmRemoveMediaLocation": "Are you sure you wish to remove this location?", "MessageConfirmRestart": "Are you sure you wish to restart Jellyfin?", "MessageConfirmRevokeApiKey": "Are you sure you wish to revoke this API key? The application's connection to this server will be abruptly ended.", - "MessageConfirmShutdown": "Are you sure you wish to shutdown the server?", + "MessageConfirmShutdown": "Are you sure you wish to shut the server down?", "MessageContactAdminToResetPassword": "Please contact your system administrator to reset your password.", "MessageCreateAccountAt": "Create an account at {0}", "MessageDeleteTaskTrigger": "Are you sure you wish to delete this task trigger?", From b823d146855e4e75da9bff0bb38d2efcf32923fb Mon Sep 17 00:00:00 2001 From: sarnoso Date: Fri, 27 Jun 2025 11:53:14 -0400 Subject: [PATCH 550/645] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/strings/es.json b/src/strings/es.json index 4778c0731..83c1b08ef 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -2031,5 +2031,17 @@ "HeaderUpdateRequired": "Actualización requerida", "ViewSettings": "Ajustes de vista", "DownloadManager": "Descargas", - "MessageForgotPasswordPinReset": "Introducir PIN aquí para terminar el restablecimiento de contraseña" + "MessageForgotPasswordPinReset": "Introducir PIN aquí para terminar el restablecimiento de contraseña", + "ButtonLearnMore": "Saber Más", + "Create": "Crear", + "HeaderBackupsHelp": "Crea y restaura instantáneas de tu servidor, que pueden incluir la base de datos, los metadatos, los subtítulos y el trickplay.", + "LabelBackupsUnavailable": "No hay respaldos disponibles", + "LabelDatabase": "Base de datos", + "BackupsPageLoadError": "Fallo al cargar la página de respaldos de datos", + "ButtonCreateBackup": "Crear respaldo de datos", + "LabelRestore": "Restaurar", + "ConfirmDeleteRepository": "Eliminar repositorio?", + "DeleteRepositoryConfirmation": "Estás seguro que quieres eliminar este repositorio?", + "LabelProgramData": "Datos del programa", + "LabelImageCache": "Caché de imágenes" } From b9c0585d9df6e2850d9246bd598e42e4d18e423c Mon Sep 17 00:00:00 2001 From: sarnoso Date: Fri, 27 Jun 2025 11:59:24 -0400 Subject: [PATCH 551/645] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/strings/es.json b/src/strings/es.json index 83c1b08ef..e452cf109 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -2043,5 +2043,23 @@ "ConfirmDeleteRepository": "Eliminar repositorio?", "DeleteRepositoryConfirmation": "Estás seguro que quieres eliminar este repositorio?", "LabelProgramData": "Datos del programa", - "LabelImageCache": "Caché de imágenes" + "LabelImageCache": "Caché de imágenes", + "StorageType.Fixed": "Corregido", + "StorageType.CDRom": "CD-ROM", + "StorageType.Removable": "Extraíble", + "PluginsLoadError": "Se produjo un error al cargar los complementos.", + "RepositoriesPageLoadError": "Fallo al cargar los repositorios", + "MessageBackupDisclaimer": "Dependiendo del tamaño de tu biblioteca, el proceso de copia de seguridad puede tardar un rato.", + "MessageBackupInProgress": "Copia de seguridad en curso", + "MessageRestoreSuccess": "Restauración completada con éxito", + "StorageType.Network": "Red", + "StorageType.Ram": "RAM", + "StorageType.NoRootDirectory": "Directorio raíz no encontrado", + "StorageType.Unknown": "Desconocido", + "Success": "Operación exitosa", + "HeaderBackups": "Respaldos de datos", + "TranscodingLoadError": "Error al cargar la configuración de transcodificación", + "MessageRestoreDisclaimer": "ADVERTENCIA: Estás a punto de restaurar un respaldo de datos anterior. Tu servidor quedará inoperativo durante el proceso y se perderán todos los datos nuevos creados desde la fecha de esa copia.", + "MessageRestoreInProgress": "Restauración en progreso", + "MessageWaitingForServer": "Esperando al servidor..." } From 40d98ab6e15e9757f19d40bbaafe93b27b2e1023 Mon Sep 17 00:00:00 2001 From: Ruben Teixeira Date: Fri, 27 Jun 2025 12:22:44 -0400 Subject: [PATCH 552/645] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 61778f895..70536c9f1 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -2025,5 +2025,9 @@ "ViewSettings": "Ver definições", "MessageForgotPasswordPinReset": "Introduz o PIN para concluir a redefinição da palavra-passe", "DownloadManager": "Transferências", - "LiveTVPageLoadError": "Falha ao carregar a página de gravações" + "LiveTVPageLoadError": "Falha ao carregar a página de gravações", + "ButtonLearnMore": "Saber mais", + "ButtonCreateBackup": "Criar cópia de segurança", + "BackupsPageLoadError": "Falha ao carregar página de cópias de segurança", + "ConfirmDeleteRepository": "Apagar repositório?" } From 85fc9de45f774f5f4a4baf78f226544dcacc8775 Mon Sep 17 00:00:00 2001 From: Timi Tuohenmaa <8275701+timitt@users.noreply.github.com> Date: Sat, 29 Mar 2025 13:17:24 +0200 Subject: [PATCH 553/645] Enable use of hls.js when LG WebOS 4 or newer is used. --- src/components/htmlMediaHelper.js | 6 ++++++ src/scripts/browserDeviceProfile.js | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/src/components/htmlMediaHelper.js b/src/components/htmlMediaHelper.js index f876568ce..b2453c358 100644 --- a/src/components/htmlMediaHelper.js +++ b/src/components/htmlMediaHelper.js @@ -48,6 +48,12 @@ export function enableHlsJsPlayer(runTimeTicks, mediaType) { return false; } + // Native HLS support in WebOS only plays stereo sound. hls.js works better, but works only on WebOS 4 or newer. + // Using hls.js also seems to fix fast forward issues that native HLS has. + if (browser.web0sVersion >= 4) { + return true; + } + // The native players on these devices support seeking live streams, no need to use hls.js here if (browser.tizen || browser.web0s) { return false; diff --git a/src/scripts/browserDeviceProfile.js b/src/scripts/browserDeviceProfile.js index 086f9443a..80bf0f33e 100644 --- a/src/scripts/browserDeviceProfile.js +++ b/src/scripts/browserDeviceProfile.js @@ -137,6 +137,14 @@ function supportsEac3(videoTestElement) { } function supportsAc3InHls(videoTestElement) { + // We use hls.js on WebOS 4 and newer and hls.js uses Media Sources Extensions (MSE) API. + // On WebOS MSE does support AC-3 and EAC-3 only on audio mp4 file but not on audiovideo mp4 + // therefore until audio and video is not separated when generating stream and m3u8 this should + // return false. + if (browser.web0sVersion >= 4) { + return false; + } + if (browser.tizen || browser.web0s) { return true; } From c1678affff6d1c5e26c7518c467116084b47556e Mon Sep 17 00:00:00 2001 From: Ruben Teixeira Date: Fri, 27 Jun 2025 12:32:56 -0400 Subject: [PATCH 554/645] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 70536c9f1..2419279d4 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1223,7 +1223,7 @@ "AllowTonemappingHelp": "O mapeamento de tons pode transformar a gama dinâmica de um vídeo de HDR para SDR, mantendo os detalhes e as cores da imagem, que são informações muito importantes para representar a cena original. Atualmente funciona apenas com vídeos HDR10 de 10 bits, HLG e DoVi. Isso requer o tempo de execução GPGPU correspondente.", "MusicVideos": "Videoclipes", "LabelTonemappingPeak": "Pico do mapeamento de tons", - "LabelTonemappingParamHelp": "Afina o algoritmo de mapeamento de tons. Os valores recomendados e predefinidos são NaN. Exceto em casos específicos, é recomendado deixar este campo em branco.", + "LabelTonemappingParamHelp": "Afina o algoritmo de mapeamento de tons. É recomendado deixar este campo em branco.", "LabelTonemappingParam": "Parâmetros do mapeamento de tons", "LabelTonemappingDesatHelp": "Aplica a dessaturação aos realces que excedem este nível de brilho. O valor recomendado é 0 (desativar).", "LabelTonemappingDesat": "Dessaturação do mapeamento de tons", @@ -2029,5 +2029,19 @@ "ButtonLearnMore": "Saber mais", "ButtonCreateBackup": "Criar cópia de segurança", "BackupsPageLoadError": "Falha ao carregar página de cópias de segurança", - "ConfirmDeleteRepository": "Apagar repositório?" + "ConfirmDeleteRepository": "Apagar repositório?", + "LabelRestore": "Restauro", + "MessageBackupDisclaimer": "Dependendo do tamanho da mediateca, o processo de cópia de segurança poderá ser demorado.", + "HeaderBackups": "Cópias de segurança", + "TranscodingLoadError": "Falha ao carregar configurações de transcodificação", + "StorageType.Unknown": "Desconhecido", + "Success": "Sucesso", + "MessageBackupInProgress": "Cópia de segurança em progresso", + "Create": "Criar", + "DeleteRepositoryConfirmation": "Tem a certeza que pretende apagar este repositório?", + "HeaderBackupsHelp": "Criar e restaurar cópias do servidor, incluindo metadados, legendas e miniaturas de pré-visualização.", + "LabelBackupsUnavailable": "Sem cópias de segurança disponíveis", + "LabelDatabase": "Base de dados", + "LabelImageCache": "Memória cache de imagens", + "LabelProgramData": "Dados da aplicação" } From 7b94be3ec666f5171923e33dc2d248f53d768db3 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Fri, 27 Jun 2025 14:13:45 -0400 Subject: [PATCH 555/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 1d4b896b8..692bd35dc 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -1104,8 +1104,8 @@ "LabelTunerIpAddress": "Adreça IP de l'sintonitzador", "LabelTranscodingThreadCountHelp": "Seleccioneu el nombre màxim de fils que pot utilitzar la transcodificació. La reducció del nombre de fils disminuirà l'ús de la CPU, però es possible que no transcodifiqui prou ràpid per a una reproducció fluïda.", "LabelTranscodingThreadCount": "Transcodificació nombre de fils", - "LabelTranscodingProgress": "Transcodificació de progrés", - "LabelTranscodingFramerate": "Transcodificació d'imatges per segon", + "LabelTranscodingProgress": "Progrés de la transcodificació", + "LabelTranscodingFramerate": "Velocitat de transcodificació", "LabelTranscodes": "Transcodificadors", "LabelTranscodePath": "Ruta de transcodificació", "LabelTonemappingThresholdHelp": "Els paràmetres de l'algorisme de mapa de tons es van afinar per cada escena. I un llindar s'utilitza per detectar si l'escena ha canviat o no. Si la distància entre l'actual marc de brillantor mig i la mitjana d'execució actual supera un valor llindar, ens agradaria tornar a calcular la mitjana i l'escena lluentor màxima. Els valors recomanats i predeterminats són 0,8 i 0,2.", @@ -1113,15 +1113,15 @@ "LabelTonemappingRange": "Gamma de mapa de tons", "LabelTonemappingPeakHelp": "Anul·la el valor de metadades incrustat pel senyal d'entrada amb aquest valor com a pic. El valor per defecte és 100 (1000 nits).", "LabelTonemappingPeak": "Pic del mapa de tons", - "LabelTonemappingParamHelp": "Ajusta l'algoritme d'assignació de to. Generalment, deixeu-ho en blanc.", + "LabelTonemappingParamHelp": "Ajusta l'algoritme de mapeig de to. Generalment, deixeu-ho en blanc.", "LabelTonemappingParam": "Paràmetres de mapa de tons", - "LabelTonemappingDesatHelp": "Aplicar dessaturació de punts destacats que superen aquest nivell de brillantor. El valor recomanat és 0 (desactivar).", + "LabelTonemappingDesatHelp": "Aplica dessaturació de punts realçats que superen aquest nivell de brillantor. El valor recomanat és 0 (deshabilitat).", "LabelTonemappingDesat": "Mapa de tons desat", - "LabelTonemappingAlgorithm": "Seleccioneu l'algoritme de \"Tone mapping\"", - "LabelTextSize": "Mida de text", - "LabelTextColor": "Color de text", - "LabelTextBackgroundColor": "Color del text de fons", - "LabelTagline": "Lema", + "LabelTonemappingAlgorithm": "Seleccioneu l'algoritme de mapeig de tons", + "LabelTextSize": "Mida del text", + "LabelTextColor": "Color del text", + "LabelTextBackgroundColor": "Color de fons del text", + "LabelTagline": "Eslògan", "LabelTag": "Etiqueta", "LabelSyncPlayTimeSyncOffset": "Temps de decalatge", "LabelSyncPlayTimeSyncDevice": "Temps de sincronització amb", @@ -1616,7 +1616,7 @@ "Lyricist": "Lletrista", "Localization": "Localització", "Larger": "Més gran", - "LabelSyncPlaySettingsSkipToSyncHelp": "Mètode de correcció de sincronització que consisteix a buscar la posició estimada. La correcció de sincronització ha d'estar activada.", + "LabelSyncPlaySettingsSkipToSyncHelp": "Mètode de correcció de sincronització que consisteix a cercar la posició estimada. La correcció de sincronització ha d'estar activada.", "LabelSyncPlaySettingsSkipToSync": "Habilita SkipToSync", "LabelSyncPlaySettingsSpeedToSyncHelp": "Mètode de correcció de sincronització que consisteix a accelerar la reproducció. La correcció de sincronització ha d'estar habilitada.", "LabelSyncPlaySettingsSpeedToSync": "Habilita SpeedToSync", From dee168f63283c5e1f9341a86825de99914cfaf28 Mon Sep 17 00:00:00 2001 From: Tal Sarid Date: Fri, 27 Jun 2025 14:06:15 -0400 Subject: [PATCH 556/645] Translated using Weblate (Hebrew) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/ --- src/strings/he.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/he.json b/src/strings/he.json index 96b3303a6..9728c7c22 100644 --- a/src/strings/he.json +++ b/src/strings/he.json @@ -1993,5 +1993,6 @@ "MessageRestoreDisclaimer": "אזהרה: שחזור מגיבוי קודם. השרת לא יהיה פעיל בזמן השחזור וכל מידע חדש שנוצר מאז הגיבוי יאבד.", "Success": "הצלחה", "MessageRestoreInProgress": "מתבצע שחזור", - "MessageRestoreSuccess": "השחזור הושלם בהצלחה" + "MessageRestoreSuccess": "השחזור הושלם בהצלחה", + "LiveTVPageLoadError": "נכשל בטעינת דף ההקלטות" } From f38dc83ca681e8b3d4dad67549fa3c380b8ea3c1 Mon Sep 17 00:00:00 2001 From: Kityn Date: Fri, 27 Jun 2025 13:54:55 -0400 Subject: [PATCH 557/645] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index a69ae7648..6e7c2c9a0 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -115,7 +115,7 @@ "ConfirmDeleteItem": "Usunięcie tej pozycji usunie ją zarówno z systemu plików jak i z biblioteki mediów. Czy chcesz kontynuować?", "ConfirmDeleteItems": "Usunięcie tej pozycji usunie ją zarówno z systemu plików jak i z biblioteki mediów. Czy chcesz kontynuować?", "ConfirmDeletion": "Potwierdzenie usunięcia", - "ConfirmEndPlayerSession": "Czy chcesz zamknąć Jellyfin na {0}?", + "ConfirmEndPlayerSession": "Czy chcesz wyłączyć Jellyfin na {0}?", "Connect": "Połącz", "ContinueWatching": "Kontynuuj odtwarzanie", "Continuing": "Dalej wyświetlane", @@ -782,7 +782,7 @@ "MessageConfirmRemoveMediaLocation": "Czy na pewno chcesz usunąć tę lokalizację?", "MessageConfirmRestart": "Czy na pewno chcesz uruchomić Jellyfin ponownie?", "MessageConfirmRevokeApiKey": "Czy na pewno chcesz unieważnić klucz API? Połączenia aplikacji z serwerem zostaną natychmiastowo zakończone.", - "MessageConfirmShutdown": "Czy na pewno chcesz zamknąć serwer?", + "MessageConfirmShutdown": "Czy na pewno chcesz wyłączyć serwer?", "MessageContactAdminToResetPassword": "W celu wyczyszczenia hasła. skontaktuj się z administratorem systemu.", "MessageCreateAccountAt": "Utwórz konto na {0}", "MessageDeleteTaskTrigger": "Czy na pewno chcesz usunąć ten wyzwalacz zadania?", From b9e411c660c4c81ecbead436de71fc020875c5dc Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Fri, 27 Jun 2025 16:55:06 -0400 Subject: [PATCH 558/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 102 ++++++++++++++++++++++---------------------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 692bd35dc..bc3acdaa6 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -15,7 +15,7 @@ "Audio": "Àudio", "MessageBrowsePluginCatalog": "Consulteu el nostre catàleg per veure els complements disponibles.", "ButtonAddMediaLibrary": "Afegeix una mediateca", - "ButtonAddScheduledTaskTrigger": "Afegeix un disparador", + "ButtonAddScheduledTaskTrigger": "Afegeix un detonador", "ButtonAddServer": "Afegeix un servidor", "ButtonAddUser": "Afegeix un usuari", "ButtonArrowLeft": "Esquerra", @@ -183,7 +183,7 @@ "HeaderStatus": "Estat", "HeaderSubtitleAppearance": "Aparença dels subtítols", "HeaderSystemDlnaProfiles": "Perfils del sistema", - "HeaderTaskTriggers": "Disparadors de tasques", + "HeaderTaskTriggers": "Detonadors de tasques", "HeaderTranscodingProfile": "Perfil de transcodificació", "HeaderTypeText": "Introduïu text", "HeaderUpcomingOnTV": "Properes emissions", @@ -356,8 +356,8 @@ "LabelTimeLimitHours": "Temps límit (en hores)", "LabelTitle": "Títol", "LabelTrackNumber": "Pista", - "LabelTranscodingTempPathHelp": "Especifiqueu una ruta d'accés personalitzat per als fitxers de transcodificació servits als clients. Deixeu-ho en blanc per utilitzar el servidor per defecte.", - "LabelTriggerType": "Tipus de Disparador", + "LabelTranscodingTempPathHelp": "Especifiqueu una ruta personalitzada d'accés per als fitxers de transcodificació servits als clients. Deixeu-ho en blanc per a utilitzar el servidor per defecte.", + "LabelTriggerType": "Tipus de detonador", "LabelType": "Tipus", "LabelUseNotificationServices": "Empra els següents serveis", "LabelUser": "Usuari", @@ -371,7 +371,7 @@ "Live": "Directe", "MarkPlayed": "Marca com a reproduït", "MarkUnplayed": "Marca com a no reproduït", - "MaxParentalRatingHelp": "El contingut amb una classificació superior no serà mostrat a l'usuari.", + "MaxParentalRatingHelp": "El contingut amb una classificació superior s'amagarà a aquest usuari.", "MediaInfoAspectRatio": "Relació d'aspecte", "MediaInfoChannels": "Canals", "MediaInfoDefault": "Per defecte", @@ -382,15 +382,15 @@ "MediaInfoResolution": "Resolució", "MessageAreYouSureDeleteSubtitles": "N'esteu segur, que voleu eliminar aquest fitxer de subtítols?", "MessageConfirmProfileDeletion": "N'estàs segur d'eliminar aquest perfil?", - "MessageConfirmRecordingCancellation": "Estàs segur que vols cancel·lar aquest enregistrament?", + "MessageConfirmRecordingCancellation": "N'esteu segur, que voleu cancel·lar l'enregistrament?", "MessageConfirmRestart": "N'esteu segur, que voleu reiniciar Jellyfin?", "MessageContactAdminToResetPassword": "Contacteu amb l'administrador per a restablir la contrasenya.", - "MessageDownloadQueued": "Descàrrega encuada.", + "MessageDownloadQueued": "Descàrrega posada a la cua.", "MessageEnablingOptionLongerScans": "Habilitar aquesta opció pot resultar en escanejos significativament més lents de la mediateca.", - "MessageItemSaved": "Ítem desat.", - "MessageItemsAdded": "Ítems afegits.", + "MessageItemSaved": "Element desat.", + "MessageItemsAdded": "Elements afegits.", "MessageNoAvailablePlugins": "No hi ha complements disponibles.", - "MessageNoMovieSuggestionsAvailable": "Per ara no hi ha suggerències de pel·lícules. Comenceu a veure i valorar les pel·lícules i torneu aquí per veure les recomanacions.", + "MessageNoMovieSuggestionsAvailable": "Per ara no hi ha suggeriments de pel·lícules. Comenceu a veure i valorar les pel·lícules i torneu aquí per veure les recomanacions.", "MessageNoPluginsInstalled": "No té cap complement instal·lat.", "MessageNoTrailersFound": "Instal·leu el canal de tràilers per millorar la vostra experiència de pel·lícula afegint una biblioteca de tràilers d'internet.", "MessageNothingHere": "Res per aquí.", @@ -413,7 +413,7 @@ "NewCollectionNameExample": "Exemple: Col·leció Star Wars", "NewEpisodes": "Nous episodis", "NewEpisodesOnly": "Només episodis nous", - "MessageNoNextUpItems": "Cap trobat. Comença a mirar els teus programes!", + "MessageNoNextUpItems": "No s'ha trobat cap. Comenceu a mirar les vostres sèries!", "MessageNoPluginConfiguration": "Aquest complement no té opcions de configuració.", "NoSubtitleSearchResultsFound": "No s'han trobat resultats.", "None": "Cap", @@ -775,7 +775,7 @@ "DeinterlaceMethodHelp": "Seleccioneu el mètode de desentrellaçat que voleu utilitzar quan transcodifiqueu el programari de contingut entrellaçat. Quan està activada l'acceleració de maquinari que admet el desentrellaçat de maquinari, s'utilitzarà el desentrellaçador de maquinari en lloc d'aquesta configuració.", "HeaderDirectPlayProfileHelp": "Afegiu perfils de reproducció directa per indicar quins formats pot gestionar el dispositiu de forma nativa.", "HeaderDetectMyDevices": "Elimina els meus dispositius", - "HeaderDeleteTaskTrigger": "S'està eliminant el disparador de tasques", + "HeaderDeleteTaskTrigger": "S'està eliminant el detonador de tasques", "HeaderDeleteProvider": "Elimina el proveïdor", "HeaderDeleteItems": "Elimina els elements", "HeaderDeleteDevices": "Elimina tots els dispositius", @@ -1013,30 +1013,30 @@ "MessagePleaseWait": "Si us plau, espereu. Això pot trigar un minut.", "MessagePlayAccessRestricted": "La reproducció d'aquest contingut està restringit actualment. Poseu-vos en contacte amb l'administrador de servidor per obtenir més informació.", "MessagePasswordResetForUsers": "S'han restablert contrasenyes dels següents usuaris. Ara poden accedir amb codis PIN que van utilitzar per realitzar el restabliment.", - "MessageNoServersAvailable": "No hi ha servidors han estat trobats usant el descobriment automàtic de servidor.", + "MessageNoServersAvailable": "No s'ha trobat cap servidor fent sevir el detector automàtic de servidors.", "MessageNoRepositories": "No hi ha repositoris.", - "MessageNoGenresAvailable": "Permetre alguns proveïdors de metadades per tirar dels gèneres a través d'Internet.", - "MessageNoCollectionsAvailable": "Les col·leccions us permeten gaudir d'agrupacions personalitzades de pel·lícules, sèries i àlbums. Feu clic al botó '+' per començar a crear col·leccions.", - "MessageLeaveEmptyToInherit": "Deixar en blanc per Heretar configuració d'un element principal o el valor predeterminat global.", + "MessageNoGenresAvailable": "Habilita alguns proveïdors de metadades per a extreure els gèneres d'Internet.", + "MessageNoCollectionsAvailable": "Les col·leccions us permeten gaudir d'agrupacions personalitzades de pel·lícules, sèries i àlbums. Feu clic al botó '+' per a començar a crear col·leccions.", + "MessageLeaveEmptyToInherit": "Deixeu-ho en blanc per a heretar la configuració d'un element principal o el valor predeterminat global.", "MessageInvalidUser": "Nom d'usuari o contrasenya incorrectes. Torneu-ho a provar.", - "MessageInvalidForgotPasswordPin": "S'ha introduït un codi PIN no vàlid o caducat. Torni-ho a provar.", + "MessageInvalidForgotPasswordPin": "S'ha introduït un codi PIN no vàlid o caducat. Torneu-ho a provar.", "MessageImageTypeNotSelected": "Seleccioneu un tipus d'imatge al menú desplegable.", - "MessageImageFileTypeAllowed": "Només els arxius JPEG i PNG són compatibles.", + "MessageImageFileTypeAllowed": "Només els fitxers JPEG i PNG són compatibles.", "MessageGetInstalledPluginsError": "S'ha produït un error a l'hora d'obtenir la llista de complements instal·lats.", "MessageForgotPasswordInNetworkRequired": "Torneu a iniciar el procés de restabliment de contrasenya des de la vostra xarxa domèstica.", - "MessageForgotPasswordFileCreated": "El següent arxiu s'ha creat en el seu servidor i conté instruccions sobre com procedir", - "MessageFileReadError": "Hi ha hagut un error a llegint l'arxiu. Torni-ho a provar.", - "MessageDirectoryPickerLinuxInstruction": "Per a Linux amb Arch Linux, CentOS, Debian, Fedora, openSUSE, o Ubuntu, ha de concedir a l'usuari del servei com a mínim l'accés de lectura als llocs d'emmagatzematge.", + "MessageForgotPasswordFileCreated": "El següent fitxer s'ha creat en el seu servidor i conté instruccions sobre com procedir", + "MessageFileReadError": "S'ha produït un error en llegir el fitxer. Torneu-ho a provar.", + "MessageDirectoryPickerLinuxInstruction": "Per a Linux amb Arch Linux, CentOS, Debian, Fedora, openSUSE, o Ubuntu, heu de concedir a l'usuari del servei com a mínim l'accés de lectura als llocs d'emmagatzematge.", "MessageDirectoryPickerBSDInstruction": "Per a BSD, caldrà tenir configurat l'emmagatzematge del \"FreeNAS Jail\" perquè permeti a Jellyfin accedir al contingut multimèdia.", - "MessageDeleteTaskTrigger": "N'esteu segur, que voleu eliminar aquest disparador tasca?", - "MessageCreateAccountAt": "Crear un compte a {0}", + "MessageDeleteTaskTrigger": "N'esteu segur, que voleu eliminar aquest detonador de tasca?", + "MessageCreateAccountAt": "Crea un compte a {0}", "MessageConfirmShutdown": "N'esteu segur, que voleu tancar el servidor?", "MessageConfirmRevokeApiKey": "N'esteu segur, de voler revocar aquesta clau d'API? La connexió de l'aplicació d'aquest servidor s'interromprà abruptament.", "MessageConfirmRemoveMediaLocation": "N'esteu segur, que voleu suprimir aquesta ubicació?", "MessageConfirmDeleteTunerDevice": "N'esteu segur, que voleu eliminar aquest dispositiu?", "MessageConfirmDeleteGuideProvider": "N'esteu segur, que voleu eliminar aquest proveïdor de guia?", - "MessageConfirmAppExit": "Vols sortir?", - "MessageChangeRecordingPath": "Canviar la seva carpeta d'enregistrament no migrarà enregistraments existents des de la ubicació anterior a la nova. Haurà de moure manualment si es desitja.", + "MessageConfirmAppExit": "Desitgeu sortir?", + "MessageChangeRecordingPath": "Canviar la seva carpeta d'enregistrament no migrarà enregistraments existents des de la ubicació anterior a la nova. Si ho desitgeu, l'haureu de moure manualment.", "MessageAreYouSureYouWishToRemoveMediaFolder": "N'esteu segur, que desitgeu eliminar aquest directori multimèdia?", "MessageAlreadyInstalled": "Aquesta versió ja està instal·lada.", "MessageAddRepository": "Si voleu afegir un repositori, feu clic al botó situat al costat de la capçalera i completeu la informació sol·licitada.", @@ -1046,15 +1046,15 @@ "MediaInfoTimestamp": "Marca de temps", "MediaInfoSize": "Mida", "MediaInfoSampleRate": "Freqüència de mostreig", - "MediaInfoRefFrames": "Ref de quadres", + "MediaInfoRefFrames": "Fotogrames de referència", "MediaInfoPath": "Ruta", "MediaInfoLevel": "Nivell", - "MediaInfoLayout": "Disposició", + "MediaInfoLayout": "Format", "MediaInfoInterlaced": "Entrellaçat", "MediaInfoFramerate": "Imatges per segon", "MediaInfoExternal": "Extern", "MediaInfoContainer": "Contenidor", - "MediaInfoColorTransfer": "Transferencia de color", + "MediaInfoColorTransfer": "Transferència de color", "MediaInfoColorSpace": "Espai de color", "MediaInfoColorPrimaries": "Colors primaris", "MediaInfoCodecTag": "Etiqueta de còdec", @@ -1062,10 +1062,10 @@ "MediaInfoBitrate": "Taxa de bits", "MediaInfoBitDepth": "Profunditat de bits", "MediaInfoAnamorphic": "Anamòrfic", - "MapChannels": "Mapa de canals", - "ManageRecording": "Maneig de gravació", + "MapChannels": "Mapeja canals", + "ManageRecording": "Maneig d'enregistrament", "ManageLibrary": "Gestió de la mediateca", - "Logo": "Logo", + "Logo": "Logotip", "LiveTV": "TV en directe", "LiveBroadcasts": "Emissions en directe", "ListPaging": "{0} - {1} de {2}", @@ -1082,14 +1082,14 @@ "LabelXDlnaCap": "Dispositiu Capability ID", "LabelWeb": "Web", "LabelVideoResolution": "Resolució de vídeo", - "LabelVideoRange": "Gamma de vídeo", + "LabelVideoRange": "Rang de vídeo", "LabelVideoCodec": "Còdec de vídeo", "LabelVideoBitrate": "Taxa de bits de vídeo", "LabelVersionInstalled": "{0} instal·lats", "LabelVersion": "Versió", - "LabelVaapiDeviceHelp": "Aquest és el \"render node\" que s'utilitza per a l'acceleració de maquinari.", + "LabelVaapiDeviceHelp": "Aquest és el node de processament que es fa servir per a l'acceleració del maquinari.", "LabelVaapiDevice": "Dispositiu VA-API", - "LabelUserRemoteClientBitrateLimitHelp": "Substituir el valor global predeterminat establert a la configuració del servidor, vegeu Tauler de control > Reproducció > Streaming.", + "LabelUserRemoteClientBitrateLimitHelp": "Substitueix el valor global predeterminat establert a la configuració del servidor, vegeu Tauler de control > Reproducció > Reproducció en línia.", "LabelUserMaxActiveSessions": "Nombre màxim de sessions simultànies d'usuaris", "LabelUserLoginAttemptsBeforeLockout": "Intents de connexió fallits abans que l'usuari sigui bloquejat", "LabelUserLibraryHelp": "Seleccioneu quina biblioteca d'usuari es visualitza al dispositiu. Deixeu-ho en blanc per heretar la configuració predeterminada.", @@ -1101,9 +1101,9 @@ "LabelTypeMetadataDownloaders": "Descarregadors de metadades ({0})", "LabelTVHomeScreen": "Pantalla d'inici en mode TV", "LabelTunerType": "Tipus de sintonitzador", - "LabelTunerIpAddress": "Adreça IP de l'sintonitzador", + "LabelTunerIpAddress": "Adreça IP del sintonitzador", "LabelTranscodingThreadCountHelp": "Seleccioneu el nombre màxim de fils que pot utilitzar la transcodificació. La reducció del nombre de fils disminuirà l'ús de la CPU, però es possible que no transcodifiqui prou ràpid per a una reproducció fluïda.", - "LabelTranscodingThreadCount": "Transcodificació nombre de fils", + "LabelTranscodingThreadCount": "Nombre de fils de la transcodificació", "LabelTranscodingProgress": "Progrés de la transcodificació", "LabelTranscodingFramerate": "Velocitat de transcodificació", "LabelTranscodes": "Transcodificadors", @@ -1653,9 +1653,9 @@ "IgnoreDts": "Ignora DTS (descodificació de la marca de temps)", "IgnoreDtsHelp": "Desactivar aquesta opció pot resoldre alguns problemes. Per exemple, àudio absent a canals amb vídeo i àudio rebuts per separat.", "LabelMaxVideoResolution": "Resolució màxima permesa en transcodificar un vídeo", - "MessageNoFavoritesAvailable": "No hi han preferits disponibles actualment.", + "MessageNoFavoritesAvailable": "Actualment, no hi ha preferits disponibles.", "OptionDateEpisodeAdded": "Data d'addició de l'episodi", - "MessageNoItemsAvailable": "No hi han elements disponibles actualment.", + "MessageNoItemsAvailable": "Actualment, no hi ha elements disponibles.", "MessageRenameMediaFolder": "Canviar una mediateca de nom provocarà que es perdin totes les metadades, continueu amb precaució.", "LabelTextWeight": "Estil de text", "RememberSubtitleSelections": "Estableix la pista de subtítols en funció de l'element anterior", @@ -1726,8 +1726,8 @@ "TonemappingModeHelp": "Selecciona el mode de mapeig de to. Si experimentes zones sobreexposades, prova a canviar al mode RGB.", "EnableAudioNormalizationHelp": "La normalització de l'àudio afegirà un guany constant per mantenir la mitjana al nivell desitjat (-18dB).", "GetThePlugin": "Obtenir el Plugin", - "MenuClose": "Tancar el menú", - "MenuOpen": "Obrir el menú", + "MenuClose": "Tanca el menú", + "MenuOpen": "Obre el menú", "Notifications": "Notificacions", "NotificationsMovedMessage": "Les funcions de notificacions s'han mogut al plugin Webhook.", "UserMenu": "Menú d'usuari", @@ -1738,7 +1738,7 @@ "LabelThrottleDelaySecondsHelp": "Temps en segons, després del qual s'accelerarà el transcodificador. La durada ha de ser suficient per a que el client mantingui una memòria intermèdia saludable. Només funciona si l'acceleració està habilitada.", "LabelSegmentKeepSeconds": "Temps per mantenir els segments", "LabelIsHearingImpaired": "Per a persones amb discapacitat auditiva (SDH)", - "LogLevel.Warning": "Advertència", + "LogLevel.Warning": "Avís", "GoHome": "Ves a l'inici", "HearingImpairedShort": "HI/SDH", "LabelBackdropScreensaverInterval": "Interval de l'estalvi de pantalla de fons", @@ -1746,11 +1746,11 @@ "LabelSyncPlayNoGroups": "No hi ha grups disponibles", "GridView": "Vista de graella", "BackdropScreensaver": "Estalvis de pantalla de fons", - "ListView": "Vista de Llista", + "ListView": "Vista de llista", "LogLevel.Critical": "Crític", "LogLevel.Information": "Informació", "LogLevel.Debug": "Depuració", - "LogoScreensaver": "Salvapantalles de Logo", + "LogoScreensaver": "Estalvi de pantalles del logotip", "LogLevel.None": "Cap", "HeaderEpisodesStatus": "Estat dels episodis", "LabelDate": "Data", @@ -1820,8 +1820,8 @@ "PriorityHigh": "Alta", "EnableLibrary": "Habilita la mediateca", "EnableLibraryHelp": "Deshabilitar la mediateca l'amagarà per a tots els usuaris.", - "LimitSupportedVideoResolution": "Limita la resolució màxima de vídeo suportada", - "LimitSupportedVideoResolutionHelp": "Utilitzar \"La màxima resolució de transcodificació de vídeo permesa\" com a màxima resolució suportada.", + "LimitSupportedVideoResolution": "Limita la resolució màxima de vídeos compatibles", + "LimitSupportedVideoResolutionHelp": "Fes servir \"La màxima resolució de transcodificació de vídeo permesa\" com a màxima resolució permesa.", "PlaybackError.FATAL_HLS_ERROR": "S'ha produït un error fatal al stream HLS.", "PlaybackError.RateLimitExceeded": "Aquest contingut multimèdia no es pot reproduir en aquests instants deguts a límits de transmissió.", "EncodingFormatHelp": "Seleccioni la codificació de vídeo a la qual hauria de transcodificar Jellyfin. Jellyfin utilitzarà codificació mitjançant programari quan l'acceleració per maquinari no estigui disponible. La codificació H264 sempre estarà habilitada.", @@ -1885,12 +1885,12 @@ "SaveLyricsIntoMediaFolders": "Desa la lletra a les carpetes multimèdia", "SaveLyricsIntoMediaFoldersHelp": "Emmagatzemar les lletres al costat dels fitxers d'àudio permetrà gestionar-les més fàcilment.", "LabelSelectPreferredTranscodeVideoAudioCodec": "Còdec d'àudio de transcodificació preferit en la reproducció de vídeo", - "LibraryScanFanoutConcurrencyHelp": "Nombre màxim de tasques paral·leles durant les exploracions de la mediateca. Si es deixa buit, es triarà un límit basat en el nombre de nuclis del vostre sistema. ADVERTÈNCIA: establir aquest número massa alt pot causar problemes amb els sistemes de fitxers de xarxa; si trobeu problemes, baixeu aquest número.", + "LibraryScanFanoutConcurrencyHelp": "Nombre màxim de tasques paral·leles durant les exploracions de la mediateca. Si es deixa buit, es triarà un límit basat en el nombre de nuclis del vostre sistema. AVÍS: establir aquest número massa alt pot causar problemes amb els sistemes de fitxers de xarxa; si us dona problemes, abaixeu aquest número.", "SelectPreferredTranscodeVideoAudioCodecHelp": "Seleccioneu el còdec d'àudio preferit per transcodificar per al contingut de vídeo. Si el còdec preferit no és compatible, el servidor utilitzarà el següent millor còdec disponible.", "LibraryScanFanoutConcurrency": "Límit de tasques d'exploració paral·leles per a les mediateques", "Penciller": "Dibuixant", "Inker": "Entintador", - "Letterer": "Retolador", + "Letterer": "Retolista", "Alternate": "Alterna", "AlternateDVD": "DVD alternatiu", "Regional": "Regional", @@ -1946,7 +1946,7 @@ "LabelCustomTagDelimitersHelp": "Caràcters que es consideraran delimitadors per a separar etiquetes.", "LabelQsvDevice": "Dispositiu QSV", "MediaSegmentAction.None": "Cap", - "MediaSegmentAction.Skip": "Saltar", + "MediaSegmentAction.Skip": "Salta", "MediaSegmentType.Intro": "Introducció", "LabelDelimiterWhitelist": "Llista blanca de delimitadors", "LabelDelimiterWhitelistHelp": "Elements a excloure de la divisió d'etiquetes. Un element per línia.", @@ -1959,7 +1959,7 @@ "LabelQsvDeviceHelp": "Específica el dispositiu Intel QSV en els sistemes amb múltiples GPU. En sistemes Linux, això és un node de renderitzat, per exemple, /dev/dri/renderD128. En Windows, és un índex de dispositiu que comença al 0. Deixeu-ho en blanc a no ser que sapigueu què esteu fent.", "LabelScreensaverTime": "Temps de l'estalvi de pantalla", "LabelScreensaverTimeHelp": "La quantitat de temps, en segons d'inactivitat, necessària per activar l'estalvi de pantalla.", - "MediaSegmentAction.AskToSkip": "Solicitar saltar", + "MediaSegmentAction.AskToSkip": "Sol·licita saltar", "MediaSegmentSkipPrompt": "Salta {0}", "MediaSegmentType.Commercial": "Comercial", "MediaSegmentType.Recap": "Recapitulació", @@ -1970,7 +1970,7 @@ "LabelAlwaysRemuxMp3AudioFiles": "Sempre re-multiplexa els fitxers d'àudio MP3", "LabelSaveTrickplayLocally": "Desa les imatges de previsualització junt amb els continguts multimèdia", "LabelSaveTrickplayLocallyHelp": "Desant les imatges de previsualització als directoris multimèdia, quedaran junt amb els continguts multimèdia per a més fàcil migració i accés.", - "LyricDownloadersHelp": "Activa i classifica els descarregadors de lletres preferits en ordre de prioritat.", + "LyricDownloadersHelp": "Habilita i classifica en ordre de prioritat els descarregadors de lletres preferits.", "MessageSplitVersionsError": "S'ha produït un error separant les versions", "LabelAllowStreamSharing": "Permet la reproducció compartida", "AlwaysBurnInSubtitleWhenTranscoding": "En transcodificar, incrusta sempre els subtítols", @@ -2027,7 +2027,7 @@ "HeaderUpdateRequired": "Cal una actualització", "ViewSettings": "Configuració de visualització", "DownloadManager": "Descàrregues", - "MessageForgotPasswordPinReset": "Introduïu el PIN aquí per a acabar el restabliment de la contrasenya", + "MessageForgotPasswordPinReset": "Introduïu el PIN aquí per a concloure el restabliment de la contrasenya", "LabelImageCache": "Imatges a la memòria cau", "MessageBackupDisclaimer": "Depenent de la mida de la mediateca, la còpia de seguretat pot trigar una estona.", "MessageRestoreDisclaimer": "ATENCIÓ: Estàs a punt de restaurar una còpia de seguretat anterior. El seu servidor no serà utilitzable durant el procés i les dades creades des del moment de l'inici de la còpia seran perdudes.", From 9fc3bde43c63f4aa8c78efe63c91b77fc6d94c3c Mon Sep 17 00:00:00 2001 From: viown <48097677+viown@users.noreply.github.com> Date: Sat, 28 Jun 2025 03:39:39 +0300 Subject: [PATCH 559/645] Update header sizes to be consistent --- src/apps/dashboard/components/table/TablePage.tsx | 2 +- src/apps/dashboard/routes/libraries/display.tsx | 2 +- src/apps/dashboard/routes/libraries/nfo.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/apps/dashboard/components/table/TablePage.tsx b/src/apps/dashboard/components/table/TablePage.tsx index d9724c9d1..3b68ab851 100644 --- a/src/apps/dashboard/components/table/TablePage.tsx +++ b/src/apps/dashboard/components/table/TablePage.tsx @@ -53,7 +53,7 @@ const TablePage = ({ marginBottom: 1 }} > - + {title} {subtitle && ( diff --git a/src/apps/dashboard/routes/libraries/display.tsx b/src/apps/dashboard/routes/libraries/display.tsx index 7e47367ac..ad8667726 100644 --- a/src/apps/dashboard/routes/libraries/display.tsx +++ b/src/apps/dashboard/routes/libraries/display.tsx @@ -98,7 +98,7 @@ export const Component = () => { {globalize.translate('SettingsSaved')} )} - {globalize.translate('Display')} + {globalize.translate('Display')} { {globalize.translate('SettingsSaved')} )} - {globalize.translate('TabNfoSettings')} + {globalize.translate('TabNfoSettings')} {globalize.translate('HeaderKodiMetadataHelp')} Date: Fri, 27 Jun 2025 21:34:17 -0400 Subject: [PATCH 560/645] Translated using Weblate (Spanish (Latin America)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es_419/ --- src/strings/es_419.json | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/strings/es_419.json b/src/strings/es_419.json index d81cb244f..1f5e8fe44 100644 --- a/src/strings/es_419.json +++ b/src/strings/es_419.json @@ -1746,5 +1746,16 @@ "DeleteName": "Borrar {0}", "EnableDts": "Activar DTS (DCA)", "DownloadManager": "Descargas", - "EnableLibrary": "Habilitar la librería" + "EnableLibrary": "Habilitar la librería", + "EnableLibraryHelp": "Deshabilitar la librería ocultará la ayuda de todos las vistas de usuario.", + "EnableHi10pHelp": "Activar para evitar transcodificar vídeos a H.264 10-bit. Desactivar esta opción si el video muestra recuadros en blanco.", + "ButtonLearnMore": "Aprender Más", + "Create": "Crear", + "EnableTrueHd": "Activar TrueHD", + "BackupsPageLoadError": "Falló al cargar la página de respaldos", + "ButtonCreateBackup": "Crear Respaldo", + "EnableSmoothScroll": "Activar desplazamiento suavizado", + "ConfirmDeleteRepository": "¿Eliminar repositorio?", + "DeleteRepositoryConfirmation": "¿Estás seguro de que deseas eliminar este repositorio?", + "EnableTrueHdHelp": "Habilítelo solo si su dispositivo es compatible con TrueHD o está conectado a un receptor de audio compatible, de lo contrario, puede provocar fallas en la reproducción." } From c1b99115e8187e40112d4b6742fb369e8a697d06 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Sat, 28 Jun 2025 02:00:41 -0400 Subject: [PATCH 561/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 74 ++++++++++++++++++++++----------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index bc3acdaa6..c0b4bc6c0 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -394,15 +394,15 @@ "MessageNoPluginsInstalled": "No té cap complement instal·lat.", "MessageNoTrailersFound": "Instal·leu el canal de tràilers per millorar la vostra experiència de pel·lícula afegint una biblioteca de tràilers d'internet.", "MessageNothingHere": "Res per aquí.", - "MessagePleaseEnsureInternetMetadata": "Assegureu-vos que la descàrrega de metadades d'internet està habilitada.", + "MessagePleaseEnsureInternetMetadata": "Assegureu-vos que està habilitada la descàrrega de metadades d'internet.", "MessageYouHaveVersionInstalled": "Actualment teniu la versió {0} instal·lada.", - "MetadataManager": "Gestor de Metadades", + "MetadataManager": "Gestor de metadades", "MinutesAfter": "minuts després", "MinutesBefore": "minuts abans", "Mobile": "Mòbil", "Monday": "Dilluns", "MoreFromValue": "Més de {0}", - "MoreUsersCanBeAddedLater": "Es poden afegir més usuaris des del Tauler de control.", + "MoreUsersCanBeAddedLater": "Es poden afegir més usuaris des del tauler de control.", "MoveLeft": "Mou a l'esquerra", "MoveRight": "Mou a la dreta", "Mute": "Silencia", @@ -975,44 +975,44 @@ "News": "Notícies", "New": "Nou", "Never": "Mai", - "MusicVideo": "Music video", - "MusicLibraryHelp": "Revisar el {0} de la música guia de noms {1}.", + "MusicVideo": "Videoclip", + "MusicLibraryHelp": "Revisa la {0} guia de noms de música {1}.", "MusicArtist": "Artista musical", "MusicAlbum": "Àlbum de música", - "MovieLibraryHelp": "Revisar la pel·lícula {0} guia de noms {1}.", + "MovieLibraryHelp": "Revisa la {0} guia de noms de pel·lícules {1}.", "Movie": "Pel·lícula", "MoreMediaInfo": "Informació multimèdia", "MillisecondsUnit": "ms", - "MetadataSettingChangeHelp": "Canviar la configuració de les metadades afectarà al nou contingut afegit a partir d'ara. Per actualitzar el contingut existent, obriu la pantalla de detalls i feu clic al botó \"Actualitzar\" o actualitzeu-lo utilitzant el Gestor de metadades.", + "MetadataSettingChangeHelp": "Canviar la configuració de les metadades afectarà al nou contingut afegit a partir d'ara. Per s actualitzar el contingut existent, obriu la pantalla de detalls i feu clic al botó \"Actualitza\" o actualitzeu-lo utilitzant el \"Gestor de metadades\".", "Metadata": "Metadades", - "MessageUnsetContentHelp": "El contingut es mostrarà com carpetes de civil. Per obtenir els millors resultats utilitzar el gestor de metadades per establir els tipus de contingut de les subcarpetes.", - "MessageUnableToConnectToServer": "No es pot connectar amb el servidor seleccionat en aquest moment. Assegureu-vos que està funcionant i torni a intentar-ho.", + "MessageUnsetContentHelp": "El contingut es mostrarà com a directoris simples. Per a obtenir els millors resultats feu servir el gestor de metadades per a establir els tipus de contingut dels subdirectoris.", + "MessageUnableToConnectToServer": "No es pot connectar amb el servidor seleccionat en aquest moment. Assegureu-vos que estigui funcionant i torneu a intentar-ho.", "MessageTheFollowingLocationWillBeRemovedFromLibrary": "Les ubicacions següents s'eliminaran de la mediateca", "MessageSyncPlayUserLeft": "{0} ha deixat el grup.", "MessageSyncPlayUserJoined": "{0} s'ha unit al grup.", - "MessageSyncPlayPlaybackPermissionRequired": "Permís de reproducció requerit.", - "MessageSyncPlayNoGroupsAvailable": "No hi ha grups disponibles. Comenceu per primer reproduir alguna cosa.", + "MessageSyncPlayPlaybackPermissionRequired": "Requereix d'un permís per a la reproducció.", + "MessageSyncPlayNoGroupsAvailable": "No hi ha grups disponibles. Reproduïu primer alguna cosa.", "MessageSyncPlayLibraryAccessDenied": "L'accés a aquest contingut està restringit.", "MessageSyncPlayJoinGroupDenied": "No s'ha pogut unir al grup.", - "MessageSyncPlayIsDisabled": "El permís necessari per utilitzar SyncPlay.", - "MessageSyncPlayGroupWait": "{0} és l'emmagatzematge en memòria intermèdia …", - "MessageSyncPlayGroupDoesNotExist": "No s'ha pogut unir-se a el grup, ja que no existeix.", - "MessageSyncPlayErrorNoActivePlayer": "No s'ha trobat cap reproductor actiu. SyncPlay ha estat desactivat.", - "MessageSyncPlayErrorMissingSession": "No s'ha pogut activar SyncPlay! Falta sessió.", - "MessageSyncPlayErrorMedia": "Error a l'habilitar SyncPlay! error de suport.", - "MessageSyncPlayErrorAccessingGroups": "S'ha produït un error a l'accedir a la llista de grups.", - "MessageSyncPlayEnabled": "SyncPlay habilitat.", - "MessageSyncPlayDisabled": "SyncPlay discapacitats.", + "MessageSyncPlayIsDisabled": "Per a fer servir SyncPlay cal un permís.", + "MessageSyncPlayGroupWait": "{0} s'està carregant…", + "MessageSyncPlayGroupDoesNotExist": "La unió al grup ha fallat, perquè no existeix.", + "MessageSyncPlayErrorNoActivePlayer": "No s'ha trobat cap reproductor actiu. SyncPlay ha estat deshabilitat.", + "MessageSyncPlayErrorMissingSession": "No s'ha pogut activar SyncPlay! No s'ha trobat cap sessió.", + "MessageSyncPlayErrorMedia": "No s'ha pogut habilitar SyncPlay! S'ha produït un error de contingut multimèdia.", + "MessageSyncPlayErrorAccessingGroups": "S'ha produït un error en accedir a la llista de grups.", + "MessageSyncPlayEnabled": "SyncPlay està habilitat.", + "MessageSyncPlayDisabled": "SyncPlay està deshabilitat.", "MessageSyncPlayCreateGroupDenied": "Per a crear un grup cal un permís.", "MessageSent": "Missatge enviat.", - "MessageReenableUser": "Vegeu més avall per tornar a activar", + "MessageReenableUser": "Vegeu més avall per a tornar a habilitar", "MessagePluginInstallError": "S'ha produït un error durant la instal·lació del complement.", "MessagePluginInstalled": "El complement s'ha instal·lat correctament. És necessari reiniciar el servidor perquè els canvis tinguin efecte.", - "MessagePluginInstallDisclaimer": "ADVERTÈNCIA: La instal·lació d'un complement de tercers comporta riscos. Pot contenir codi inestable o maliciós, i pot canviar en qualsevol moment. Instal·leu només complements d'autors en els que confieu, i sigueu conscient dels efectes que poden tenir, incloent consultes a serveis externs, exploracions més llargues de mediateques o processos addicionals de rerefons.", - "MessagePluginConfigurationRequiresLocalAccess": "Connecteu-vos amb el servidor local directament per configurar aquest complement.", - "MessagePleaseWait": "Si us plau, espereu. Això pot trigar un minut.", - "MessagePlayAccessRestricted": "La reproducció d'aquest contingut està restringit actualment. Poseu-vos en contacte amb l'administrador de servidor per obtenir més informació.", - "MessagePasswordResetForUsers": "S'han restablert contrasenyes dels següents usuaris. Ara poden accedir amb codis PIN que van utilitzar per realitzar el restabliment.", + "MessagePluginInstallDisclaimer": "AVÍS: La instal·lació d'un complement de tercers comporta riscos. Pot contenir codi inestable o maliciós, i pot canviar en qualsevol moment. Instal·leu només complements d'autors en els que confieu, i sigueu conscient dels efectes que poden tenir, incloent peticions a serveis externs, exploracions més llargues de mediateques o processos addicionals en segon pla.", + "MessagePluginConfigurationRequiresLocalAccess": "Connecteu-vos directament amb el servidor local per a configurar aquest complement.", + "MessagePleaseWait": "Espereu, si us plau. Pot trigar un minut.", + "MessagePlayAccessRestricted": "La reproducció d'aquest contingut està actualment restringit. Poseu-vos en contacte amb l'administrador del servidor per a obtenir més informació.", + "MessagePasswordResetForUsers": "S'han restablert contrasenyes dels següents usuaris. Ara poden accedir amb els codis PIN que van utilitzar per reinicialitzar.", "MessageNoServersAvailable": "No s'ha trobat cap servidor fent sevir el detector automàtic de servidors.", "MessageNoRepositories": "No hi ha repositoris.", "MessageNoGenresAvailable": "Habilita alguns proveïdors de metadades per a extreure els gèneres d'Internet.", @@ -1611,8 +1611,8 @@ "AllowEmbeddedSubtitlesHelp": "Desactiva els subtítols empaquetats dins dels contenidors multimèdia. Requereix una actualització completa de la mediateca.", "AllowEmbeddedSubtitles": "Desactivar diferents tipus de subtítols incrustats", "OriginalAirDate": "Data d'emissió original", - "MixedMoviesShows": "Pel·lícules i sèries mixtes", - "MessageUnauthorizedUser": "No teniu autorització per accedir al servidor en aquest moment. Poseu-vos en contacte amb l'administrador del servidor per obtenir més informació.", + "MixedMoviesShows": "Barreja de pel·lícules i sèries", + "MessageUnauthorizedUser": "No teniu autorització per accedir en aquest moment al servidor. Per a més informació, poseu-vos en contacte amb l'administrador del servidor.", "Lyricist": "Lletrista", "Localization": "Localització", "Larger": "Més gran", @@ -1769,7 +1769,7 @@ "LabelSelectAudioNormalization": "Normalització de l'àudio", "LabelSystem": "Sistema", "LogLevel.Error": "Error", - "MessageRepositoryInstallDisclaimer": "ADVERTÈNCIA: L'instal·lació d'un complement de tercers comporta riscos. Pot contenir còdi inestable o maliciós, i pot canviar en qualsevol moment. Només instal·li complements d'autors en els que confiï.", + "MessageRepositoryInstallDisclaimer": "AVÍS: La instal·lació d'un complement de tercers comporta riscos. Pot contenir codi inestable o maliciós, i pot canviar en qualsevol moment. Instal·leu només complements d'autors en els que confieu.", "PasswordRequiredForAdmin": "Es requereix una contrasenya pels comptes d'administrador.", "LabelTrackGain": "Guany de pista", "AllowAv1Encoding": "Permetre l'encodificació en format AV1", @@ -1913,8 +1913,8 @@ "PreviewLyrics": "Previsualitzar lletres", "Reset": "Restablir", "MediaInfoRotation": "Rotació", - "MoveToBottom": "Mou al final", - "MoveToTop": "Mou al principi", + "MoveToBottom": "Mou al fons", + "MoveToTop": "Mou al cim", "EditLyrics": "Edició de la lletra", "HeaderAddLyrics": "Afegeix lletres", "HeaderPreviewLyrics": "Previsualitza lletres", @@ -1971,7 +1971,7 @@ "LabelSaveTrickplayLocally": "Desa les imatges de previsualització junt amb els continguts multimèdia", "LabelSaveTrickplayLocallyHelp": "Desant les imatges de previsualització als directoris multimèdia, quedaran junt amb els continguts multimèdia per a més fàcil migració i accés.", "LyricDownloadersHelp": "Habilita i classifica en ordre de prioritat els descarregadors de lletres preferits.", - "MessageSplitVersionsError": "S'ha produït un error separant les versions", + "MessageSplitVersionsError": "S'ha produït un error en separar les versions", "LabelAllowStreamSharing": "Permet la reproducció compartida", "AlwaysBurnInSubtitleWhenTranscoding": "En transcodificar, incrusta sempre els subtítols", "AlwaysBurnInSubtitleWhenTranscodingHelp": "Incorpora tots els subtítols quan s'activi la transcodificació. Això assegura la sincronització dels subtítols després de la transcodificació, a canvi d'una menor velocitat de transcodificació.", @@ -1995,7 +1995,7 @@ "CustomSubtitleStylingHelp": "L'estilització de subtítols funciona en la majoria dels dispositius, però suposa un cost addicional de rendiment.", "LabelSubtitleStyling": "Estilització de subtítols", "Native": "Nadiu", - "NativeSubtitleStylingHelp": "L'estilització de subtítols no funcionarà en alguns dispositius. Tot i això, no suposa cap sobrecàrrega de rendiment.", + "NativeSubtitleStylingHelp": "L'estilització dels subtítols no funcionarà en alguns dispositius. Tot i això, no suposa cap sobrecàrrega de rendiment.", "LibraryNameInvalid": "El nom de la mediateca no pot estar buit.", "DeleteServerConfirmation": "N'esteu segur, que voleu eliminar aquest servidor?", "LabelDevice": "Dispositiu", @@ -2030,8 +2030,8 @@ "MessageForgotPasswordPinReset": "Introduïu el PIN aquí per a concloure el restabliment de la contrasenya", "LabelImageCache": "Imatges a la memòria cau", "MessageBackupDisclaimer": "Depenent de la mida de la mediateca, la còpia de seguretat pot trigar una estona.", - "MessageRestoreDisclaimer": "ATENCIÓ: Estàs a punt de restaurar una còpia de seguretat anterior. El seu servidor no serà utilitzable durant el procés i les dades creades des del moment de l'inici de la còpia seran perdudes.", - "MessageWaitingForServer": "Esperant al servidor...", + "MessageRestoreDisclaimer": "ATENCIÓ: Esteu a punt de restaurar una còpia anterior de seguretat. El servidor no es podrà fer servir durant el procés i les dades creades des del moment de l'inici de la còpia es perdran.", + "MessageWaitingForServer": "S'està esperant el servidor...", "StorageType.CDRom": "CD-ROM", "StorageType.NoRootDirectory": "Cap directori arrel", "BackupsPageLoadError": "No s'ha pogut carregar la pàgina de còpies de seguretat", @@ -2042,11 +2042,11 @@ "LabelDatabase": "Base de dades", "LabelRestore": "Restaura", "MessageBackupInProgress": "Còpia de seguretat en progrés", - "MessageRestoreInProgress": "Restabliment en procés", + "MessageRestoreInProgress": "Restauració en procés", "Success": "Èxit", "HeaderBackups": "Cópies de seguretat", "LabelProgramData": "Dades del programa", - "MessageRestoreSuccess": "Restaurament completat exitosament", + "MessageRestoreSuccess": "Restauració completada exitosament", "StorageType.Fixed": "Arreglat", "StorageType.Network": "Xarxa", "StorageType.Ram": "RAM", From 3a9be356708682f2c411f36962fa34578252f46f Mon Sep 17 00:00:00 2001 From: myrad2267 Date: Sat, 28 Jun 2025 01:18:10 -0400 Subject: [PATCH 562/645] Translated using Weblate (French (Canada)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr_CA/ --- src/strings/fr-ca.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/fr-ca.json b/src/strings/fr-ca.json index b829a8a05..f253ac038 100644 --- a/src/strings/fr-ca.json +++ b/src/strings/fr-ca.json @@ -165,7 +165,7 @@ "CopyStreamURL": "Copier l'URL du stream", "ContinueWatching": "Continuer à visionner", "Connect": "Connexion", - "ConfirmEndPlayerSession": "Voulez-vous éteindre Jellyfin sur {0}?", + "ConfirmEndPlayerSession": "Voulez-vous arrêter Jellyfin sur {0}?", "ConfirmDeletion": "Confirmer la suppression", "ConfirmDeleteItems": "Supprimer ces éléments les effaceront du disque et de votre médiathèque. Êtes-vous sûr de vouloir continuer?", "ConfirmDeleteImage": "Effacer l'image?", From 1cbf73e92df92dc5f279ec1fa0d12a71a05f5ca2 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Sat, 28 Jun 2025 02:51:51 -0400 Subject: [PATCH 563/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 78 ++++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index c0b4bc6c0..e179a5dc0 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -410,8 +410,8 @@ "Name": "Nom", "NewCollection": "Col·lecció nova", "NewCollectionHelp": "Les col·leccions us permeten crear agrupacions personalitzades de pel·lícules i altres continguts.", - "NewCollectionNameExample": "Exemple: Col·leció Star Wars", - "NewEpisodes": "Nous episodis", + "NewCollectionNameExample": "Exemple: Star Wars - Col·leció", + "NewEpisodes": "Episodis nous", "NewEpisodesOnly": "Només episodis nous", "MessageNoNextUpItems": "No s'ha trobat cap. Comenceu a mirar les vostres sèries!", "MessageNoPluginConfiguration": "Aquest complement no té opcions de configuració.", @@ -422,44 +422,44 @@ "OnlyForcedSubtitlesHelp": "Només es carregaran aquells subtítols marcats com a forçats.", "OptionAdminUsers": "Administradors", "OptionAllUsers": "Tots els usuaris", - "OptionAllowBrowsingLiveTv": "Permetre accés a TV en directe", + "OptionAllowBrowsingLiveTv": "Permet l'accés a TV en directe", "OptionAllowContentDownloading": "Permetre descàrrega de mitjans", "OptionAllowLinkSharing": "Permet compartir a les xarxes socials", - "OptionAllowLinkSharingHelp": "Només les pàgines web contenint informació multimèdia seran compartides. En cap cas es comparteixen fitxers públicament. Les comparticions estan limitades per temps i expiraran després de {0} dies.", - "OptionAllowManageLiveTv": "Permetre gestionar l'enregistrament de TV en directe", - "OptionAllowMediaPlayback": "Permetre reproducció multimèdia", - "OptionAllowRemoteControlOthers": "Permetre el control remot d'altres usuaris", - "OptionAllowRemoteSharedDevices": "Permetre el control remot dels dispositius compartits", - "OptionAllowRemoteSharedDevicesHelp": "Els dispositius DLNA es consideren compartits fins que un usuari comença a controlar-los.", - "OptionAllowUserToManageServer": "Permet a aquest usuari gestionar el servidor", + "OptionAllowLinkSharingHelp": "Només es compartiran les pàgines web contenint informació multimèdia. En cap cas es comparteixen fitxers públicament. Les comparticions estan limitades per temps i expiraran després de {0} dies.", + "OptionAllowManageLiveTv": "Permet gestionar l'enregistrament de TV en directe", + "OptionAllowMediaPlayback": "Permet la reproducció multimèdia", + "OptionAllowRemoteControlOthers": "Permet el control remot d'altres usuaris", + "OptionAllowRemoteSharedDevices": "Permet el control remot dels dispositius compartits", + "OptionAllowRemoteSharedDevicesHelp": "Els dispositius DLNA es consideren compartits fins que un usuari comenci a controlar-los.", + "OptionAllowUserToManageServer": "Permet gestionar el servidor a aquest usuari", "OptionCommunityRating": "Valoració de la comunitat", - "OptionCriticRating": "Valoració dels crítics", + "OptionCriticRating": "Valoració de la crítica", "OptionDaily": "Diari", - "OptionDateAdded": "Data que es va afegir", - "OptionDateAddedImportTime": "Empra la data d'escaneig", + "OptionDateAdded": "Afegit el", + "OptionDateAddedImportTime": "Fes servir la data d'escaneig", "OptionDatePlayed": "Data de Reproducció", - "OptionDisableUser": "Desactiva aquest usuari", + "OptionDisableUser": "Habilita aquest usuari", "OptionDisableUserHelp": "El servidor no permetrà cap connexió d’aquest usuari. Les connexions existents es tancaran immediatament.", "OptionDislikes": "No m'agrada", "OptionEmbedSubtitles": "Incrusta dins el contenidor", "OptionEnableAccessFromAllDevices": "Habilita l'accés des de tots els dispositius", "OptionEnableAccessToAllChannels": "Habilita l'accés a tots els canals", "OptionEnableAccessToAllLibraries": "Habilita l'accés a totes les mediateques", - "OptionEnableExternalContentInSuggestionsHelp": "Permet incloure tràilers d'internet i programes de TV en directe amb el continguts suggerits.", + "OptionEnableExternalContentInSuggestionsHelp": "Permet incloure tràilers d'internet i programes de TV en directe entre el contingut suggerit.", "OptionEquals": "Equival", "OptionEveryday": "Cada dia", "OptionExternallyDownloaded": "Descàrrega externa", - "OptionHasThemeSong": "Cançó Temàtica", - "OptionHasThemeVideo": "Vídeo Temàtic", + "OptionHasThemeSong": "Tema musical", + "OptionHasThemeVideo": "Vídeo temàtic", "OptionHideUser": "Oculta aquest usuari de les pantalles d'inici de sessió", "OptionHideUserFromLoginHelp": "Pràctic per a comptes d'administrador ocults o privats. L'usuari necessitarà accedir manualment introduint el seu nom d'usuari i contrasenya.", "OptionImdbRating": "Qualificació IMDb", "OptionLikes": "M'agrada", - "OptionMissingEpisode": "Episodis Perduts", + "OptionMissingEpisode": "Episodis perduts", "OptionNew": "Nou…", "OptionOnInterval": "En un interval", "OptionParentalRating": "Classificació parental", - "OptionPlayCount": "Nombre de Reproduccions", + "OptionPlayCount": "Nombre de reproduccions", "OptionReleaseDate": "Data d'estrena", "OptionResumable": "Es pot reprendre", "OptionSaveMetadataAsHidden": "Desa les metadades i les imatges com a fitxers ocults", @@ -964,13 +964,13 @@ "ScanForNewAndUpdatedFiles": "Cerca fitxers nous i actualitzats", "SaveSubtitlesIntoMediaFoldersHelp": "L'emmagatzematge de subtítols al costat dels arxius de vídeo que els permetrà ser manejats amb més facilitat.", "SaveSubtitlesIntoMediaFolders": "Desa els subtítols en els directoris de continguts multimèdia", - "NoSubtitlesHelp": "Els subtítols no seran carregats per defecte. Encara es poden activar de forma manual durant la reproducció.", + "NoSubtitlesHelp": "Els subtítols no es carregaran per defecte. Encara es poden activar de forma manual durant la reproducció.", "Normal": "Normal", "NoNewDevicesFound": "No s'han trobat dispositius nous. Per afegir un nou sintonitzador, tanqueu aquest avís i introduïu la informació del dispositiu de forma manual.", "NoCreatedLibraries": "Sembla que encara no s'ha creat cap mediateca. {0} Us agradaria crear-ne una ara? {1}", "No": "No", "NextUp": "A continuació", - "NextTrack": "Salta a la següent", + "NextTrack": "Salta al següent", "Next": "Següent", "News": "Notícies", "New": "Nou", @@ -1437,8 +1437,8 @@ "OptionTrackName": "Nom de la pista", "OptionSaveMetadataAsHiddenHelp": "El canvi d'aquest s'aplicarà als nous metadades guardats en el futur. arxius de metadades existents s'actualitzaran la propera vegada que es guarden al servidor.", "OptionResElement": "'res' element", - "OptionRequirePerfectSubtitleMatchHelp": "Que requereix una combinació perfecta filtrarà subtítols per incloure només aquells que han estat provats i verificats amb l'arxiu de vídeo exacta. A l'desmarcar això augmentarà la probabilitat de subtítols està descarregant, però augmentarà les possibilitats de subtítols de text inoportuns o incorrecta.", - "OptionRequirePerfectSubtitleMatch": "Només descarregar subtítols que siguin una coincidència perfecta amb els arxius de vídeo", + "OptionRequirePerfectSubtitleMatchHelp": "Requerir una combinació perfecta filtrarà els subtítols per a incloure només aquells que s'ha testat i verificat que coincideixen amb el fitxer de vídeo. En desmarcar això augmentarà la probabilitat de descàrrega de subtítols, però augmentarà les possibilitats que els subtítols no acabin d'encaixar o siguin incorrectes.", + "OptionRequirePerfectSubtitleMatch": "Descarrega només els subtítols que siguin coincideixin perfectament amb els fitxers de vídeo", "OptionReportByteRangeSeekingWhenTranscodingHelp": "Necessari per a alguns dispositius que no busquen els fixters massa bé.", "OptionReportByteRangeSeekingWhenTranscoding": "Informe que dóna suport al servidor byte de la recerca, quan la transcodificació", "OptionRegex": "Expressions regulars", @@ -1450,10 +1450,10 @@ "OptionPlainVideoItems": "Mostra tots els vídeos com a elements de vídeo sense format", "OptionPlainStorageFoldersHelp": "Totes les carpetes estan representats en DIDL com 'object.container.storageFolder' en lloc d'un tipus específic més, com 'object.container.person.musicArtist'.", "OptionPlainStorageFolders": "Mostra totes les carpetes com carpetes d'emmagatzematge sense format", - "OptionMaxActiveSessionsHelp": "Un valor de 0 desactivarà la funció.", - "OptionMaxActiveSessions": "Establir el nombre màxim de sessions simultànies d'usuaris.", - "OptionMax": "Max", - "OptionLoginAttemptsBeforeLockoutHelp": "Un valor de 0 significa que s'hereten els valors per defecte: 3 intents per als usuaris normals i 5 per als administradors. Establir a -1 desactiva la funció.", + "OptionMaxActiveSessionsHelp": "Un valor de 0 deshabilitarà la funció.", + "OptionMaxActiveSessions": "Estableix el nombre màxim de sessions simultànies d'usuaris.", + "OptionMax": "Màx", + "OptionLoginAttemptsBeforeLockoutHelp": "Un valor de 0 significa que s'hereten els valors per defecte: 3 intents per als usuaris normals i 5 per als administradors. Posar-hi -1 deshabilita la funció.", "OptionLoginAttemptsBeforeLockout": "Determina el nombre d'intents d'inici de sessió incorrectes que es poden fer abans que es bloquegi.", "OptionIsSD": "SD", "OptionIsHD": "HD", @@ -1461,22 +1461,22 @@ "OptionIgnoreTranscodeByteRangeRequests": "No feu cas de les sol·licituds d'interval de bytes de transcodificació", "OptionHlsSegmentedSubtitles": "HLS segmentat subtítols", "OptionForceRemoteSourceTranscoding": "Força la transcodificació de fonts externes, com ara la televisió en directe", - "OptionExtractChapterImage": "Habilitar extracció de la imatge capítol", + "OptionExtractChapterImage": "Habilita l'extracció d'imatges de capítols", "OptionEstimateContentLength": "Estimar longitud d'el contingut quan la transcodificació", "OptionEnableM2tsModeHelp": "Activar el mode M2TS quan es codifica a MPEG-TS.", "OptionEnableM2tsMode": "Activar més modes M2TS", - "OptionEnableForAllTuners": "Habilitar per a tots els dispositius sintonitzadors", - "OptionEnableExternalContentInSuggestions": "Habilitar contingut extern en suggeriments", + "OptionEnableForAllTuners": "Habilita per a tots els dispositius sintonitzadors", + "OptionEnableExternalContentInSuggestions": "Habilita el contingut extern en els suggeriments", "OptionDvd": "DVD", - "OptionDisplayFolderViewHelp": "Mostra els directoris juntament amb les vostres altres mediateques. Això pot ser útil si us agradaria tenir una vista senzilla de directoris.", - "OptionDisplayFolderView": "Mostra una vista de carpeta per a veure directoris multimèdia sense format", - "OptionDateAddedFileTime": "Utilitzar la data de creació de l'arxiu", + "OptionDisplayFolderViewHelp": "Mostra els directoris juntament amb les altres mediateques. Això pot ser útil si us agradaria tenir una vista de directoris sense format.", + "OptionDisplayFolderView": "Mostra una vista de directori per a veure directoris multimèdia sense format", + "OptionDateAddedFileTime": "Fes servir la data de creació de l'arxiu", "OptionCustomUsers": "Personalitzat", "OptionCaptionInfoExSamsung": "CaptionInfoEx (Samsung)", "OptionBluray": "BD", - "OptionAutomaticallyGroupSeriesHelp": "Les sèries que es distribueixen entre diversos directoris d'aquesta mediateca es combinaran automàticament en una única sèrie.", + "OptionAutomaticallyGroupSeriesHelp": "Les sèries d'aquesta mediateca que es distribueixin entre diversos directoris es combinaran automàticament en una única sèrie.", "OptionAutomaticallyGroupSeries": "Combina automàticament les sèries que estiguin distribuïdes entre diversos directoris", - "OptionAllowVideoPlaybackTranscoding": "Permet la reproducció de vídeo que requereix la transcodificació", + "OptionAllowVideoPlaybackTranscoding": "Permet la reproducció de vídeo que requereix una transcodificació", "OptionAllowVideoPlaybackRemuxing": "Permet la reproducció de vídeo que requereix una conversió sense recodificació", "OptionAllowSyncTranscoding": "Permet la conversió del contingut multimèdia quan es descarregui i sincronitzi", "OptionAllowMediaPlaybackTranscodingHelp": "La restricció de l'accés a la transcodificació pot provocar errors de reproducció en els clients a causa dels formats multimèdia incompatibles.", @@ -1484,10 +1484,10 @@ "OptionAllowContentDownload": "Permet la descàrrega del contingut multimèdia", "OptionAllowAudioPlaybackTranscoding": "Permet la reproducció d'àudio que requereix la transcodificació", "Option3D": "3D", - "OnWakeFromSleep": "En deixant de la son", - "OnlyImageFormats": "Només Formats d'Imatge (VobSub, PGS, SUB)", + "OnWakeFromSleep": "En sortir de la suspensió", + "OnlyImageFormats": "Només formats d'imatge (VobSub, PGS, SUB)", "OneChannel": "Un canal", - "OnApplicationStartup": "A l'iniciar l'aplicació", + "OnApplicationStartup": "En iniciar l'aplicació", "Off": "Apagat", "HeaderSubtitleProfile": "Perfil dels subtítols", "HeaderSubtitleDownloads": "Descàrrega dels subtítols", @@ -1663,7 +1663,7 @@ "MediaInfoRpuPresentFlag": "Flag DV rpu predeterminat", "MediaInfoDvBlSignalCompatibilityId": "Identificador de compatibilitat del senyal DV bl", "Unreleased": "Encara no s'ha publicat", - "OptionDateShowAdded": "Data de la sèrie afegida", + "OptionDateShowAdded": "Data d'addició de la sèrie", "RememberAudioSelectionsHelp": "Intenta establir la pista d'àudio amb la coincidència més semblant a l'últim vídeo.", "RememberSubtitleSelectionsHelp": "Intenta configurar la pista de subtítols amb la coincidència més semblant a l'últim vídeo.", "RememberAudioSelections": "Estableix la pista d'àudio en funció de l'element anterior", From c930cdf83eac277a950e616fdd9798abc8adcb2f Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Sat, 28 Jun 2025 05:14:51 -0400 Subject: [PATCH 564/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 46 ++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index e179a5dc0..f28e18864 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -466,16 +466,16 @@ "OptionSpecialEpisode": "Especials", "OptionSubstring": "Subcadena", "OptionTvdbRating": "Valoració de TVDB", - "OptionUnairedEpisode": "Episodis No Emesos", - "OptionWakeFromSleep": "Despertar", + "OptionUnairedEpisode": "Episodis no emesos", + "OptionWakeFromSleep": "Desperta de la hibernació", "OptionWeekdays": "Entre setmana", "OptionWeekends": "Cap de setmana", "OptionWeekly": "Setmanal", "OriginalAirDateValue": "Data original d'emissió: {0}", - "PackageInstallCancelled": "Instal·lació de {0} (versió {1}) cancel·lada.", - "ParentalRating": "Valoració Parental", - "PasswordMatchError": "La contrasenya i la confirmació han de coincidir.", - "PasswordResetComplete": "La contrasenya s'ha restablert.", + "PackageInstallCancelled": "S'ha cancel·lat la instal·lació de {0} (versió {1}).", + "ParentalRating": "Valoració parental", + "PasswordMatchError": "La contrasenya i la confirmació de la contrasenya han de ser iguals.", + "PasswordResetComplete": "S'ha restablert la contrasenya.", "PasswordResetConfirmation": "N'esteu segur, que voleu restablir la contrasenya?", "PasswordSaved": "S'ha desat la contrasenya.", "People": "Repartiment i equip", @@ -1407,21 +1407,21 @@ "Premieres": "Estrenes", "PreferEmbeddedTitlesOverFileNamesHelp": "Determinar el títol de visualització que voleu utilitzar quan no hi hagi metadades d'Internet o metadades locals disponibles.", "PreferEmbeddedTitlesOverFileNames": "Prefereixo títols integrats més de noms de fitxer", - "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Utilitzar la informació de l'episodi de les metadades incrustades si està disponible.", - "PreferEmbeddedEpisodeInfosOverFileNames": "Prefereixo informació de l'episodi incrustat sobre els noms d'arxiu", + "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Fes servir la informació de l'episodi de les metadades xuclades, si es troba disponible.", + "PreferEmbeddedEpisodeInfosOverFileNames": "Prioritza la informació de l'episodi inclosa en els noms dels fitxers", "PosterCard": "Targeta de presentació", "Poster": "Cartell", - "PleaseSelectTwoItems": "Seleccioneu al menys dos ítems.", - "PleaseEnterNameOrId": "Introdueixi un nom o un ID extern.", + "PleaseSelectTwoItems": "Seleccioneu almenys dos elements.", + "PleaseEnterNameOrId": "Introduïu un nom o un identificador extern.", "PleaseConfirmPluginInstallation": "Feu clic a 'D'acord' per confirmar que ha llegit el text de dalt i desitja procedir amb la instal·lació del complement.", "PleaseAddAtLeastOneFolder": "Afegiu-hi almenys un directori fent clic al botó '+'.", "PlayNextEpisodeAutomatically": "Reprodueix l'episodi següent de forma automàtica", "PlayNext": "Reprodueix el següent", - "PlayCount": "Contador de reproduccions", + "PlayCount": "Comptador de reproduccions", "PlaybackRate": "Velocitat de reproducció", "PlaybackErrorNoCompatibleStream": "Aquest client no és compatible amb el contingut multimèdia i el servidor no està enviant un format multimèdia compatible.", "PlaybackData": "Informació de reproducció", - "PlaceFavoriteChannelsAtBeginning": "Col·loqui els canals favorits a l'començament", + "PlaceFavoriteChannelsAtBeginning": "Col·loca els canals preferits al començament", "PinCodeResetConfirmation": "Esteu segur que voleu restablir el codi PIN?", "PinCodeResetComplete": "El codi PIN s'ha restablert.", "PictureInPicture": "Imatge en imatge", @@ -1429,13 +1429,13 @@ "PersonRole": "com {0}", "Person": "Persona", "PerfectMatch": "Combinació perfecta", - "PathNotFound": "La ruta no s'ha pogut trobat. Assegureu-vos que la ruta és vàlida i torni a intentar-ho.", - "PasswordResetProviderHelp": "Escollir un proveïdor de restabliment de contrasenya que s'utilitzarà quan l'usuari sol·licita un restabliment de contrasenya.", - "PackageInstallFailed": "La instal·lació de {0} (versió {1}) ha fallat.", - "PackageInstallCompleted": "Instal·lació de {0} (versió {1}) acabada.", + "PathNotFound": "La ruta no s'ha pogut trobat. Assegureu-vos que la ruta és vàlida i torneu-ho a intentar.", + "PasswordResetProviderHelp": "Escollir un proveïdor de restabliment de contrasenya que s'utilitzarà quan l'usuari sol·liciti un restabliment de contrasenya.", + "PackageInstallFailed": "Ha fallat la instal·lació de {0} (versió {1}).", + "PackageInstallCompleted": "S'ha acabat la instal·lació de {0} (versió {1}).", "Overview": "Visió de conjunt", "OptionTrackName": "Nom de la pista", - "OptionSaveMetadataAsHiddenHelp": "El canvi d'aquest s'aplicarà als nous metadades guardats en el futur. arxius de metadades existents s'actualitzaran la propera vegada que es guarden al servidor.", + "OptionSaveMetadataAsHiddenHelp": "La configuració s'aplicarà a les metadades noves que es vagin creant. Els fitxers existents de metadades s'actualitzaran la propera vegada que es desin al servidor.", "OptionResElement": "'res' element", "OptionRequirePerfectSubtitleMatchHelp": "Requerir una combinació perfecta filtrarà els subtítols per a incloure només aquells que s'ha testat i verificat que coincideixen amb el fitxer de vídeo. En desmarcar això augmentarà la probabilitat de descàrrega de subtítols, però augmentarà les possibilitats que els subtítols no acabin d'encaixar o siguin incorrectes.", "OptionRequirePerfectSubtitleMatch": "Descarrega només els subtítols que siguin coincideixin perfectament amb els fitxers de vídeo", @@ -1484,7 +1484,7 @@ "OptionAllowContentDownload": "Permet la descàrrega del contingut multimèdia", "OptionAllowAudioPlaybackTranscoding": "Permet la reproducció d'àudio que requereix la transcodificació", "Option3D": "3D", - "OnWakeFromSleep": "En sortir de la suspensió", + "OnWakeFromSleep": "En despertar de la hibernació", "OnlyImageFormats": "Només formats d'imatge (VobSub, PGS, SUB)", "OneChannel": "Un canal", "OnApplicationStartup": "En iniciar l'aplicació", @@ -1569,7 +1569,7 @@ "Track": "Pista", "Print": "Imprimeix", "PreviousChapter": "Episodi anterior", - "PlaybackErrorPlaceHolder": "Això és un marcador de posició per a suports físics que Jellyfin no pot reproduir. Inseriu el disc per reproduir-lo.", + "PlaybackErrorPlaceHolder": "Això és un marcador de posició per a suports físics que Jellyfin no pot reproduir. Inseriu el disc per a reproduir-lo.", "OtherArtist": "Altres artistes", "NextChapter": "Episodi següent", "Mixer": "Mesclador", @@ -1809,7 +1809,7 @@ "LabelAllowContentWithTags": "Permet elements amb etiquetes", "BlockingScan": "Bloqueig - generació de cues, bloqueja escaneig fins a completar-se", "LabelScanBehavior": "Comportament de l'escaneig", - "PlaybackError.ASS_RENDER_ERROR": "S'ha produït un error al renderitzador de subtítols ASS/SSA.", + "PlaybackError.ASS_RENDER_ERROR": "S'ha produït un error en el renderitzador de subtítols ASS/SSA.", "PlaybackError.MEDIA_NOT_SUPPORTED": "La reproducció ha fallat, perquè el contingut multimèdia no és compatible amb aquest client.", "PlaybackError.NETWORK_ERROR": "La reproducció ha fallat a causa d'un error de connexió.", "PlaybackError.NO_MEDIA_ERROR": "No s'ha pogut trobar un contingut multimèdia vàlid per a reproduir.", @@ -1822,7 +1822,7 @@ "EnableLibraryHelp": "Deshabilitar la mediateca l'amagarà per a tots els usuaris.", "LimitSupportedVideoResolution": "Limita la resolució màxima de vídeos compatibles", "LimitSupportedVideoResolutionHelp": "Fes servir \"La màxima resolució de transcodificació de vídeo permesa\" com a màxima resolució permesa.", - "PlaybackError.FATAL_HLS_ERROR": "S'ha produït un error fatal al stream HLS.", + "PlaybackError.FATAL_HLS_ERROR": "S'ha produït un error fatal a l'stream HLS.", "PlaybackError.RateLimitExceeded": "Aquest contingut multimèdia no es pot reproduir en aquests instants deguts a límits de transmissió.", "EncodingFormatHelp": "Seleccioni la codificació de vídeo a la qual hauria de transcodificar Jellyfin. Jellyfin utilitzarà codificació mitjançant programari quan l'acceleració per maquinari no estigui disponible. La codificació H264 sempre estarà habilitada.", "PriorityAboveNormal": "Per sobre del Normal", @@ -1879,7 +1879,7 @@ "EnableTrueHdHelp": "Habiliteu-ho només si el vostre dispositiu és compatible amb TrueHD o està connectat a un receptor d'àudio compatible, en cas contrari, pot provocar un error de reproducció.", "Illustrator": "Il·lustrador", "Translator": "Traductor", - "PlaylistPublic": "Permetre accés públic", + "PlaylistPublic": "Permet l'accés públic", "PlaylistPublicDescription": "Permet que aquesta llista de reproducció sigui vista per qualsevol usuari registrat.", "HeaderLyricDownloads": "Descàrregues de lletres", "SaveLyricsIntoMediaFolders": "Desa la lletra a les carpetes multimèdia", @@ -1965,7 +1965,7 @@ "MediaSegmentType.Recap": "Recapitulació", "MediaSegmentType.Outro": "Crèdits", "MediaSegmentType.Preview": "Previsualització", - "PlaylistError.UpdateFailed": "Error en actualitzar la llista de reproducció", + "PlaylistError.UpdateFailed": "S'ha produït un error en actualitzar la llista de reproducció", "LabelAlwaysRemuxFlacAudioFiles": "Sempre re-multiplexa els fitxers d'àudio FLAC", "LabelAlwaysRemuxMp3AudioFiles": "Sempre re-multiplexa els fitxers d'àudio MP3", "LabelSaveTrickplayLocally": "Desa les imatges de previsualització junt amb els continguts multimèdia", From ca990e649cdcb4728fbadaff7e8b49fa01c53e44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=84=A1=E6=83=85=E5=A4=A9?= Date: Sat, 28 Jun 2025 06:18:07 -0400 Subject: [PATCH 565/645] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index ef5a694be..fe95332c0 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -750,7 +750,7 @@ "MessageConfirmRemoveMediaLocation": "你确定要移除此位置?", "MessageConfirmRestart": "你确定要重启 Jellyfin?", "MessageConfirmRevokeApiKey": "你确定你希望撤销这个 API 秘钥吗?这个应用程序与本服务器的连接将会被立刻中断。", - "MessageConfirmShutdown": "你确定要关闭服务端?", + "MessageConfirmShutdown": "您确定要关闭服务器吗?", "MessageContactAdminToResetPassword": "请联系你的管理员以重置你的密码。", "MessageCreateAccountAt": "在 {0} 创建帐户", "MessageDeleteTaskTrigger": "你确定删除这个任务触发条件?", @@ -1127,7 +1127,7 @@ "ColorTransfer": "色彩传递", "ConfirmDeleteItem": "删除此项目会将其从文件系统和媒体库中删除。您确定要继续吗(删除播放列表与合集不会删除文件)?", "ConfirmDeleteItems": "删除这些项目会将它们从文件系统和媒体库中删除。您确定要继续吗(删除播放列表与合集不会删除文件)?", - "ConfirmEndPlayerSession": "您要在 {0} 上关闭 Jellyfin 吗?", + "ConfirmEndPlayerSession": "您想关闭 {0} 上的 Jellyfin 吗?", "ValueSeconds": "{0} 秒", "Features": "功能", "Genre": "类型", @@ -2061,5 +2061,6 @@ "RepositoriesPageLoadError": "加载存储库失败", "TranscodingLoadError": "加载转码设置失败", "PluginsLoadError": "加载插件时发生错误。", - "ButtonLearnMore": "了解更多" + "ButtonLearnMore": "了解更多", + "LiveTVPageLoadError": "无法加载录制页面" } From 83f6a822ad861e426c254727b76821c808a496c2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 28 Jun 2025 11:40:22 +0000 Subject: [PATCH 566/645] Update dependency @jellyfin/sdk to v0.0.0-unstable.202506280502 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 030c8a2ae..ae75a3565 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.2.6", "@fontsource/noto-sans-tc": "5.2.6", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202506270502", + "@jellyfin/sdk": "0.0.0-unstable.202506280502", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.12", "@mui/material": "6.4.12", @@ -4129,9 +4129,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202506270502", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506270502.tgz", - "integrity": "sha512-PooFqKY/puCipm8YkkP91dj1Sq+VufXWD2V5yS5gEyEE1Usoj0CkWOaas2eUdf/3cUaPeLOXuczRA/Oht1PU5w==", + "version": "0.0.0-unstable.202506280502", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506280502.tgz", + "integrity": "sha512-6aOrvBvPhIqBhw0FttJ6cMSXVoEJIOkg1Vb9MVgPDqcqDpftrYlbFyzVWJ7zHN4Fc1X/CO338j/U1zOc72Arow==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -27449,9 +27449,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202506270502", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506270502.tgz", - "integrity": "sha512-PooFqKY/puCipm8YkkP91dj1Sq+VufXWD2V5yS5gEyEE1Usoj0CkWOaas2eUdf/3cUaPeLOXuczRA/Oht1PU5w==", + "version": "0.0.0-unstable.202506280502", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506280502.tgz", + "integrity": "sha512-6aOrvBvPhIqBhw0FttJ6cMSXVoEJIOkg1Vb9MVgPDqcqDpftrYlbFyzVWJ7zHN4Fc1X/CO338j/U1zOc72Arow==", "requires": {} }, "@jellyfin/ux-web": { diff --git a/package.json b/package.json index d4fe98160..5ebfafc46 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@fontsource/noto-sans-sc": "5.2.6", "@fontsource/noto-sans-tc": "5.2.6", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202506270502", + "@jellyfin/sdk": "0.0.0-unstable.202506280502", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.12", "@mui/material": "6.4.12", From 760dc0a1099c92e7a4a6ae2181ea0b8788ec8257 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Sat, 28 Jun 2025 06:53:30 -0400 Subject: [PATCH 567/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index f28e18864..717b613e6 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -1406,7 +1406,7 @@ "Preview": "Vista prèvia", "Premieres": "Estrenes", "PreferEmbeddedTitlesOverFileNamesHelp": "Determinar el títol de visualització que voleu utilitzar quan no hi hagi metadades d'Internet o metadades locals disponibles.", - "PreferEmbeddedTitlesOverFileNames": "Prefereixo títols integrats més de noms de fitxer", + "PreferEmbeddedTitlesOverFileNames": "Prioritza els títols xuclats per sobre dels noms dels fitxers", "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Fes servir la informació de l'episodi de les metadades xuclades, si es troba disponible.", "PreferEmbeddedEpisodeInfosOverFileNames": "Prioritza la informació de l'episodi inclosa en els noms dels fitxers", "PosterCard": "Targeta de presentació", @@ -1684,7 +1684,7 @@ "Featurette": "Migmetratge", "Short": "Curt", "HeaderRecordingMetadataSaving": "Metadades de l'enregistrament", - "PreferEmbeddedExtrasTitlesOverFileNames": "Preferir els títols incrustats als noms d'arxiu per als extres", + "PreferEmbeddedExtrasTitlesOverFileNames": "Prioritza els títols inclosos en els noms de fitxers per als extres", "SecondarySubtitles": "Subtítols secundaris", "SubtitleBlack": "Negre", "SubtitleGray": "Gris", @@ -1703,7 +1703,7 @@ "LabelDummyChapterCountHelp": "El nombre màxim d'imatges del capítol que s'extreuran per a cada fitxer multimèdia.", "LabelParallelImageEncodingLimit": "Límit de codificació d'imatges en paral·lel", "LabelParallelImageEncodingLimitHelp": "Nombre màxim de codificacions d'imatge que es poden executar en paral·lel. Si es deixa buit, es triarà un límit en funció del nombre de nuclis.", - "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Els extres sovint tenen el mateix nom incrustat que el principal, marqueu-ho per utilitzar-los títols incrustats de totes maneres.", + "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Els extres sovint tenen els mateixos noms dels títols als que pertanyen, marqueu-ho per fer-los servir de totes maneres.", "SaveRecordingNFO": "Desa les metadades EPG d'enregistrament a NFO", "SaveRecordingImages": "Guarda les imatges d'enregistrament EPG", "SaveRecordingImagesHelp": "Desa les imatges del proveïdor de llistes EPG amb el contingut multimèdia.", From 4200c4e208bb25fb82699f1e96d0ea8ffc73407f Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Sat, 28 Jun 2025 10:46:08 -0400 Subject: [PATCH 568/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 717b613e6..63438faf0 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -485,7 +485,7 @@ "Played": "Reproduït", "Playlists": "Llistes de reproducció", "PleaseRestartServerName": "Reinicieu el Jellyfin a {0}.", - "Premiere": "Première", + "Premiere": "Estrena", "Producer": "Productor", "Programs": "Programes", "Quality": "Qualitat", @@ -1401,11 +1401,11 @@ "Profile": "Perfil", "ProductionLocations": "Centres de producció", "Primary": "Principal", - "PreviousTrack": "Vés a l'anterior", + "PreviousTrack": "Ves a l'anterior", "Previous": "Anterior", "Preview": "Vista prèvia", "Premieres": "Estrenes", - "PreferEmbeddedTitlesOverFileNamesHelp": "Determinar el títol de visualització que voleu utilitzar quan no hi hagi metadades d'Internet o metadades locals disponibles.", + "PreferEmbeddedTitlesOverFileNamesHelp": "Determina el títol que farà servir quan no hi hagi metadades d'Internet o metadades locals disponibles.", "PreferEmbeddedTitlesOverFileNames": "Prioritza els títols xuclats per sobre dels noms dels fitxers", "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Fes servir la informació de l'episodi de les metadades xuclades, si es troba disponible.", "PreferEmbeddedEpisodeInfosOverFileNames": "Prioritza la informació de l'episodi inclosa en els noms dels fitxers", @@ -1604,12 +1604,12 @@ "Remixer": "Remesclador", "ReleaseGroup": "Grup de llançament", "Production": "Producció", - "AllowEmbeddedSubtitlesAllowTextOption": "Permetre text", - "AllowEmbeddedSubtitlesAllowImageOption": "Permetre imatge", - "AllowEmbeddedSubtitlesAllowNoneOption": "No permetre cap", + "AllowEmbeddedSubtitlesAllowTextOption": "Permet text", + "AllowEmbeddedSubtitlesAllowImageOption": "Permet imatge", + "AllowEmbeddedSubtitlesAllowNoneOption": "No en permetis cap", "AllowEmbeddedSubtitlesAllowAllOption": "Permet-ho tot", - "AllowEmbeddedSubtitlesHelp": "Desactiva els subtítols empaquetats dins dels contenidors multimèdia. Requereix una actualització completa de la mediateca.", - "AllowEmbeddedSubtitles": "Desactivar diferents tipus de subtítols incrustats", + "AllowEmbeddedSubtitlesHelp": "Deshabilita els subtítols empaquetats dins dels contenidors multimèdia. Requereix d'una actualització completa de la mediateca.", + "AllowEmbeddedSubtitles": "Deshabilita diferents tipus de subtítols incrustats", "OriginalAirDate": "Data d'emissió original", "MixedMoviesShows": "Barreja de pel·lícules i sèries", "MessageUnauthorizedUser": "No teniu autorització per accedir en aquest moment al servidor. Per a més informació, poseu-vos en contacte amb l'administrador del servidor.", @@ -1910,7 +1910,7 @@ "PluginUninstallError": "S'ha produït un error en desinstal·lar el complement.", "SelectPreferredTranscodeVideoCodecHelp": "Seleccioneu el còdec de vídeo preferit per transcodificar. Si el còdec preferit no és compatible, el servidor utilitzarà el següent millor còdec disponible.", "PasswordMissingSaveError": "La nova contrasenya no pot ser buida.", - "PreviewLyrics": "Previsualitzar lletres", + "PreviewLyrics": "Previsualitza lletres", "Reset": "Restablir", "MediaInfoRotation": "Rotació", "MoveToBottom": "Mou al fons", @@ -1977,10 +1977,10 @@ "AlwaysBurnInSubtitleWhenTranscodingHelp": "Incorpora tots els subtítols quan s'activi la transcodificació. Això assegura la sincronització dels subtítols després de la transcodificació, a canvi d'una menor velocitat de transcodificació.", "HeaderMediaSegmentActions": "Accions dels segments de continguts multimèdia", "LabelMediaSegmentsType": "{0} Segments", - "PreferNonstandardArtistsTag": "Preferir l'etiqueta ARTISTS si estan disponibles", + "PreferNonstandardArtistsTag": "Prioritza l'etiqueta ARTISTS si es troba disponible", "ReplaceTrickplayImages": "Substitueix les imatges trickplay existents", "UseCustomTagDelimiters": "Utilitza delimitador d'etiquetes personalitzat", - "PreferNonstandardArtistsTagHelp": "Utilitza l'etiqueta no estàndard ARTISTS en lloc de l'etiqueta ARTIST quan estigui disponible.", + "PreferNonstandardArtistsTagHelp": "Fes servir l'etiqueta no estàndard ARTISTS en lloc de l'etiqueta ARTIST quan estigui disponible.", "UseCustomTagDelimitersHelp": "Separa les etiquetes artista/gènere amb caràcters personalitzats.", "RenderPgsSubtitle": "Renderitzat experimental de subtitols PGS", "VideoCodecTagNotSupported": "L'etiqueta del còdec de vídeo no és compatible", From 821ae4b112375752f58afb7f560c21767063c2f9 Mon Sep 17 00:00:00 2001 From: Oatavandi Date: Sat, 28 Jun 2025 09:20:10 -0400 Subject: [PATCH 569/645] Translated using Weblate (Tamil) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ta/ --- src/strings/ta.json | 208 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 186 insertions(+), 22 deletions(-) diff --git a/src/strings/ta.json b/src/strings/ta.json index 875d4e2bb..52a898b42 100644 --- a/src/strings/ta.json +++ b/src/strings/ta.json @@ -63,7 +63,7 @@ "ButtonAddScheduledTaskTrigger": "தூண்டுதலைச் சேர்க்கவும்", "ButtonAddMediaLibrary": "ஊடக நூலகத்தைச் சேர்க்கவும்", "ButtonAddImage": "படத்தைச் சேர்க்கவும்", - "BurnSubtitlesHelp": "வீடியோக்களை டிரான்ஸ்கோடிங் செய்யும் போது சர்வர் வசனங்களில் எரிய வேண்டுமா என்பதைத் தீர்மானிக்கவும். இதைத் தவிர்ப்பது செயல்திறனை பெரிதும் மேம்படுத்தும். பட அடிப்படையிலான வடிவங்கள் (VobSub, PGS, SUB, IDX, முதலியன) மற்றும் சில ASS அல்லது SSA வசனங்களை எழுத தானியங்கு என்பதைத் தேர்ந்தெடுக்கவும்.", + "BurnSubtitlesHelp": "சர்வர் சப்டைட்டில்களில் எரிக்க வேண்டுமா என்பதைத் தீர்மானிக்கவும். இதைத் தவிர்ப்பது செயல்திறனை பெரிதும் மேம்படுத்தும். பட அடிப்படையிலான வடிவங்களை (VobSub, PGS, SUB, IDX, முதலியன) மற்றும் சில ASS அல்லது SSA சப்டைட்டில்களை எரிக்க ஆட்டோவைத் தேர்ந்தெடுக்கவும்.", "MessageBrowsePluginCatalog": "கிடைக்கக்கூடிய செருகுநிரல்களைக் காண எங்கள் சொருகி பட்டியலை உலாவுக.", "Browse": "உலவ", "BoxRear": "பெட்டி (பின்புறம்)", @@ -123,7 +123,7 @@ "ButtonRename": "மறுபெயரிடு", "ButtonRemove": "அகற்று", "ButtonRefreshGuideData": "வழிகாட்டி தரவைப் புதுப்பிக்கவும்", - "ButtonQuickStartGuide": "விரைவு தொடக்க வழிகாட்டி", + "ButtonQuickStartGuide": "அமைவு வழிகாட்டி", "ButtonPreviousTrack": "முந்தைய பாடல்", "ButtonPause": "இடைநிறுத்தம்", "ButtonParentalControl": "பெற்றோர் கட்டுப்பாடு", @@ -225,7 +225,7 @@ "ConfirmDeleteItems": "இந்த உருப்படிகளை நீக்குவது கோப்பு முறைமை மற்றும் உங்கள் ஊடக நூலகம் இரண்டிலிருந்தும் அவற்றை நீக்கும். நீங்கள் தொடர விரும்புகிறீர்களா?", "ConfirmDeleteItem": "இந்த உருப்படியை நீக்குவது கோப்பு முறைமை மற்றும் உங்கள் ஊடக நூலகம் இரண்டிலிருந்தும் நீக்கப்படும். நீங்கள் தொடர விரும்புகிறீர்களா?", "ConfirmDeleteImage": "படத்தை நீக்கவா?", - "ConfigureDateAdded": "டாஷ்போர்டு > நூலகங்கள் > NFO அமைப்புகளில் 'சேர்க்கப்பட்ட தேதி'க்கான மெட்டாடேட்டா எவ்வாறு தீர்மானிக்கப்படுகிறது என்பதை அமைக்கவும்", + "ConfigureDateAdded": "'சேர்க்கப்பட்ட தேதி'க்கான மெட்டாடேட்டா எவ்வாறு தீர்மானிக்கப்படுகிறது என்பதை டாஷ்போர்டு > நூலகங்கள் > காட்சி என்பதில் அமைக்கவும்", "Composer": "இசையமைப்பாளர்", "CommunityRating": "சமூக மதிப்பீடு", "ColorTransfer": "வண்ண பரிமாற்றம்", @@ -633,7 +633,7 @@ "LabelLogs": "பதிவுகள்", "LabelLoginDisclaimerHelp": "உள்நுழைவு பக்கத்தின் கீழே காண்பிக்கப்படும் செய்தி.", "LabelLoginDisclaimer": "உள்நுழைவு மறுப்பு", - "LabelLockItemToPreventChanges": "எதிர்கால மாற்றங்களைத் தடுக்க இந்த உருப்படியைப் பூட்டவும்", + "LabelLockItemToPreventChanges": "எதிர்கால மெட்டாடேட்டா மாற்றங்களைத் தடுக்க இந்த உருப்படியைப் பூட்டுங்கள்", "LabelLocalHttpServerPortNumberHelp": "HTTP சேவையகத்திற்கான TCP போர்ட் எண்.", "LabelLocalHttpServerPortNumber": "உள்ளூர் HTTP போர்ட் எண்", "LabelLineup": "வரிசை", @@ -929,7 +929,7 @@ "MessageDeleteTaskTrigger": "இந்த பணி தூண்டுதலை நீக்க விரும்புகிறீர்களா?", "MessageCreateAccountAt": "{0} இல் ஒரு கணக்கை உருவாக்கவும்", "MessageContactAdminToResetPassword": "உங்கள் கடவுச்சொல்லை மீட்டமைக்க உங்கள் கணினி நிர்வாகியைத் தொடர்பு கொள்ளவும்.", - "MessageConfirmShutdown": "சேவையகத்தை நிறுத்த விரும்புகிறீர்களா?", + "MessageConfirmShutdown": "நீங்கள் சேவையகத்தை நிச்சயமாக மூட விரும்புகிறீர்களா?", "MessageConfirmRevokeApiKey": "இந்த API விசையை நிச்சயமாகத் திரும்பப் பெற விரும்புகிறீர்களா? இந்த சேவையகத்திற்கான பயன்பாட்டின் இணைப்பு திடீரென துண்டிக்கப்படும்.", "MessageConfirmRestart": "ஜெல்லிஃபின் மறுதொடக்கம் செய்ய விரும்புகிறீர்களா?", "MessageConfirmRemoveMediaLocation": "இந்த இருப்பிடத்தை அகற்ற விரும்புகிறீர்களா?", @@ -1155,7 +1155,7 @@ "SettingsSaved": "அமைப்புகள் சேமிக்கப்பட்டன.", "Settings": "அமைப்புகள்", "ServerUpdateNeeded": "இந்த சேவையகத்தை புதுப்பிக்க வேண்டும். சமீபத்திய பதிப்பைப் பதிவிறக்க, தயவுசெய்து {0} ஐ பார்வையிடவும்", - "ServerRestartNeededAfterPluginInstall": "செருகுநிரலை நிறுவிய பின் ஜெல்லிஃபின் மறுதொடக்கம் செய்யப்பட வேண்டும்.", + "ServerRestartNeededAfterPluginInstall": "செருகுநிரலை நிறுவிய பின் ஜெல்லிஃபினை மறுதொடக்கம் செய்ய வேண்டும்.", "ServerNameIsShuttingDown": "{0} இல் உள்ள சேவையகம் மூடப்படும்.", "ServerNameIsRestarting": "{0} இல் உள்ள சேவையகம் மறுதொடக்கம் செய்யப்படுகிறது.", "SeriesYearToPresent": "{0} - தற்போது", @@ -1301,7 +1301,7 @@ "TitleHardwareAcceleration": "வன்பொருள் முடுக்கம்", "Thursday": "வியாழக்கிழமை", "Thumb": "சிறுபடம்", - "ThisWizardWillGuideYou": "இந்த வழிகாட்டி அமைவு செயல்முறை மூலம் உங்களுக்கு வழிகாட்ட உதவும். தொடங்க, நீங்கள் விரும்பும் மொழியைத் தேர்ந்தெடுக்கவும்.", + "ThisWizardWillGuideYou": "இந்த வழிகாட்டி அமைவு செயல்முறையின் மூலம் உங்களுக்கு வழிகாட்ட உதவும். தொடங்குவதற்கு, தயவுசெய்து ஒரு சேவையக பெயரை உள்ளிட்டு உங்களுக்கு விருப்பமான மொழியைத் தேர்ந்தெடுக்கவும்.", "TheseSettingsAffectSubtitlesOnThisDevice": "இந்த அமைப்புகள் இந்த சாதனத்தில் வசன வரிகள் பாதிக்கின்றன", "ThemeVideos": "தீம் வீடியோக்கள்", "ThemeSongs": "தீம் பாடல்கள்", @@ -1362,7 +1362,7 @@ "OnWakeFromSleep": "தூக்கத்திலிருந்து எழுந்தவுடன்", "WeeklyAt": "{1} இல் {0}", "DailyAt": "தினசரி {0}", - "LastSeen": "கடைசியாக பார்த்தது {0}", + "LastSeen": "கடைசி செயல்பாடு {0}", "PersonRole": "{0} என", "ListPaging": "{0} - {2} இன் {1}", "WriteAccessRequired": "ஜெல்லிஃபினுக்கு இந்த கோப்புறையில் எழுத அணுகல் தேவை. எழுதும் அணுகலை உறுதிசெய்து மீண்டும் முயற்சிக்கவும்.", @@ -1390,13 +1390,13 @@ "UseDoubleRateDeinterlacing": "செயலிழக்கும்போது பிரேம் வீதத்தை இரட்டிப்பாக்குங்கள்", "LabelMaxMuxingQueueSizeHelp": "அனைத்து ஸ்ட்ரீம்களும் தொடங்கும் வரை காத்திருக்கும் போது, இடையகப்படுத்தக்கூடிய பாக்கெட்டுகளின் அதிகபட்ச எண்ணிக்கை. FFmpeg பதிவுகளில் \"அவுட்புட் ஸ்ட்ரீமிற்காக பல பாக்கெட்டுகள் இடையகப்படுத்தப்பட்டுள்ளன\" என்ற பிழையை நீங்கள் இன்னும் சந்தித்தால் அதை அதிகரிக்க முயற்சிக்கவும். பரிந்துரைக்கப்பட்ட மதிப்பு 2048 ஆகும்.", "LabelMaxMuxingQueueSize": "அதிகபட்ச மக்ஸிங் வரிசை அளவு", - "LabelTonemappingParamHelp": "டோன் மேப்பிங் வழிமுறையை டியூன் செய்யுங்கள். பரிந்துரைக்கப்பட்ட மற்றும் இயல்புநிலை மதிப்புகள் NaN ஆகும். பொதுவாக அதை காலியாக விடவும்.", + "LabelTonemappingParamHelp": "டோன் மேப்பிங் அல்காரிதத்தை டியூன் செய்யவும். பொதுவாக அதை காலியாக விடவும்.", "LabelTonemappingParam": "டோன் மேப்பிங் அளவுரு", - "LabelTonemappingPeakHelp": "இந்த மதிப்புடன் சமிக்ஞை / பெயரளவு / குறிப்பு உச்சத்தை மேலெழுதவும். காட்சி மெட்டாடேட்டாவில் உட்பொதிக்கப்பட்ட உச்ச தகவல் நம்பகத்தன்மையற்றதாக இருக்கும்போது அல்லது குறைந்த வரம்பிலிருந்து அதிக வரம்பிற்கு டோன் மேப்பிங் செய்யும்போது பயனுள்ளதாக இருக்கும். பரிந்துரைக்கப்பட்ட மற்றும் இயல்புநிலை மதிப்புகள் 100 மற்றும் 0 ஆகும்.", + "LabelTonemappingPeakHelp": "உள்ளீட்டு சமிக்ஞைக்கான உட்பொதிக்கப்பட்ட மெட்டாடேட்டா மதிப்பை இந்த உச்ச மதிப்புடன் மேலெழுதவும். இயல்புநிலை மதிப்பு 100 (1000nit) ஆகும்.", "LabelTonemappingPeak": "டோன் மேப்பிங் உச்சம்", "LabelTonemappingThresholdHelp": "டோன் மேப்பிங் அல்காரிதம் அளவுருக்கள் ஒவ்வொரு காட்சிக்கும் நன்றாக வடிவமைக்கப்பட்டுள்ளன. காட்சி மாறியதா இல்லையா என்பதைக் கண்டறிய ஒரு வாசல் பயன்படுத்தப்படுகிறது. தற்போதைய ஃபிரேம் சராசரி பிரகாசத்திற்கும் தற்போதைய இயங்கும் சராசரிக்கும் இடையே உள்ள தூரம் ஒரு த்ரெஷோல்ட் மதிப்பை மீறினால், காட்சி சராசரி மற்றும் உச்ச பிரகாசத்தை மீண்டும் கணக்கிடுவோம். பரிந்துரைக்கப்பட்ட மற்றும் இயல்புநிலை மதிப்புகள் 0.8 மற்றும் 0.2 ஆகும்.", "LabelTonemappingThreshold": "டோன் மேப்பிங் வரம்பு", - "LabelTonemappingDesatHelp": "இந்த பிரகாசத்தின் அளவைத் தாண்டிய சிறப்பம்சங்களுக்கு தேய்மானத்தைப் பயன்படுத்துங்கள். அதிக அளவுரு, அதிக வண்ண தகவல்கள் பாதுகாக்கப்படும். இந்த அமைப்பு சூப்பர்-சிறப்பம்சங்களுக்கான இயற்கைக்கு மாறான வண்ணங்களைத் தடுக்க உதவுகிறது, அதற்கு பதிலாக (சுமூகமாக) வெள்ளை நிறமாக மாறுவதன் மூலம். இது வரம்பற்ற வண்ணங்களைப் பற்றிய தகவல்களைக் குறைக்கும் செலவில், படங்கள் மிகவும் இயல்பானதாக உணரவைக்கும். பரிந்துரைக்கப்பட்ட மற்றும் இயல்புநிலை மதிப்புகள் 0 மற்றும் 0.5 ஆகும்.", + "LabelTonemappingDesatHelp": "இந்த பிரகாச அளவை மீறும் ஹைலைட்டுகளுக்கு நிறைவுறாத்தன்மையைப் பயன்படுத்தவும். பரிந்துரைக்கப்பட்ட மதிப்பு 0 (முடக்கு).", "LabelTonemappingDesat": "டோன் மேப்பிங் சேமிக்கப்பட்டது", "TonemappingRangeHelp": "வெளியீட்டு வண்ண வரம்பைத் தேர்ந்தெடுக்கவும். ஆட்டோ என்பது உள்ளீட்டு வரம்பைப் போன்றது.", "LabelTonemappingRange": "டோன் மேப்பிங் சரகம்", @@ -1470,8 +1470,8 @@ "RemuxHelp2": "முற்றிலும் இழப்பற்ற ஊடகத் தரத்துடன் ரீமக்ஸ் மிகக் குறைந்த செயலாக்க சக்தியைப் பயன்படுத்துகிறது.", "RemuxHelp1": "மீடியா பொருந்தாத கோப்பு கொள்கலனில் (MKV, AVI, WMV போன்றவை) உள்ளது, ஆனால் வீடியோ ஸ்ட்ரீம் மற்றும் ஆடியோ ஸ்ட்ரீம் இரண்டும் சாதனத்துடன் இணக்கமாக உள்ளன. சாதனத்திற்கு அனுப்பப்படுவதற்கு முன்பு மீடியா பறக்காமல் இழப்பின்றி மீண்டும் தொகுக்கப்படும்.", "Remuxing": "ரீமக்ஸ்", - "AspectRatioFill": "நிரப்பு", - "AspectRatioCover": "உறை", + "AspectRatioFill": "நீட்டிக்கவும்", + "AspectRatioCover": "பெரிதாக்கு", "PluginFromRepo": "{1} களஞ்சியத்திலிருந்து {0}", "LabelUDPPortRangeHelp": "யுடிபி இணைப்புகளை உருவாக்கும்போது இந்த போர்ட் வரம்பைப் பயன்படுத்த ஜெல்லிஃபின் கட்டுப்படுத்தவும். (இயல்புநிலை 1024 - 65535).
குறிப்பு: சில செயல்பாடுகளுக்கு இந்த வரம்பிற்கு வெளியே இருக்கும் நிலையான துறைமுகங்கள் தேவைப்படுகின்றன.", "LabelUDPPortRange": "UDP தொடர்பு வரம்பு", @@ -1676,9 +1676,9 @@ "MediaInfoVideoRangeType": "வீடியோ வரம்பு வகை", "LabelVideoRangeType": "வீடியோ வரம்பு வகை", "VideoRangeTypeNotSupported": "வீடியோவின் வரம்பு வகை ஆதரிக்கப்படவில்லை", - "LabelVppTonemappingContrastHelp": "VPP tone மேப்பிங்கில் கான்ட்ராஸ்ட் ஆதாயத்தைப் பயன்படுத்தவும். பரிந்துரைக்கப்பட்ட மற்றும் இயல்புநிலை மதிப்புகள் இரண்டும் 1 ஆகும்.", - "LabelVppTonemappingBrightnessHelp": "VPP டோன் மேப்பிங்கில் பிரைட்னஸ் ஆதாயத்தை பயன்படுத்தவும். பரிந்துரைக்கப்பட்ட மற்றும் இயல்புநிலை மதிப்புகள் 16 மற்றும் 0 ஆகும்.", - "EnableSplashScreen": "ஸ்பிளாஸ் திரையை இயக்கவும்", + "LabelVppTonemappingContrastHelp": "VPP டோன் மேப்பிங்கில் கான்ட்ராஸ்ட் ஆதாயத்தைப் பயன்படுத்தவும். பரிந்துரைக்கப்பட்ட மதிப்பு 1 ஆகும்.", + "LabelVppTonemappingBrightnessHelp": "VPP டோன் மேப்பிங்கில் பிரகாசக் குறைப்பைப் பயன்படுத்தவும். பரிந்துரைக்கப்பட்ட மதிப்பு 16 ஆகும்.", + "EnableSplashScreen": "ஸ்பிளாஸ் திரை படத்தை இயக்கு", "ScreenResolution": "திரை அளவு", "RememberSubtitleSelectionsHelp": "சப்டைட்டில் டிராக்கை கடைசி வீடியோவுக்கு மிக நெருக்கமான பொருத்தமாக அமைக்க முயற்சிக்கவும்.", "RememberSubtitleSelections": "முந்தைய உருப்படியின் அடிப்படையில் வசன வரிகளை அமைக்கவும்", @@ -1691,7 +1691,7 @@ "IgnoreDts": "DTS புறக்கணிக்கவும்", "LabelThrottleDelaySecondsHelp": "டிரான்ஸ்கோடர் த்ரோட்டில் செய்த பிறகு உள்ள நேரத்தை இது குறிக்கிறது. நேரத்தின் அளவு அதிகமாக இருக்கும் பட்சத்தில் செயல்பாடு ஆரோக்கியமாக இருக்கும். த்ரோட்டில் செயல்பாட்டில் இருந்தால் மட்டுமே இது வேலை செய்யும்.", "LabelSegmentKeepSecondsHelp": "கிளையன்ட் பதிவிறக்கம் செய்த பிறகு, எந்தப் பகுதிகளை வைத்திருக்க வேண்டும் என்பதை நொடிகளில் நேரம். பிரிவு நீக்கம் இயக்கப்பட்டிருந்தால் மட்டுமே வேலை செய்யும்.", - "LabelDummyChapterDurationHelp": "போலி அத்தியாயங்களுக்கு இடையிலான இடைவெளி. போலி அத்தியாய உருவாக்கத்தை முடக்க 0 என அமைக்கவும். இதை மாற்றுவது ஏற்கனவே உள்ள போலி அத்தியாயங்களில் எந்த விளைவையும் ஏற்படுத்தாது.", + "LabelDummyChapterDurationHelp": "போலி அத்தியாயங்களுக்கு இடையிலான இடைவெளி வினாடிகளில். போலி அத்தியாய உருவாக்கத்தை முடக்க 0 என அமைக்கவும். இதை மாற்றுவது ஏற்கனவே உள்ள போலி அத்தியாயங்களில் எந்த விளைவையும் ஏற்படுத்தாது.", "MessageRepositoryInstallDisclaimer": "எச்சரிக்கை: மூன்றாம் தரப்பு செருகுநிரல் களஞ்சியத்தை நிறுவுவது அபாயங்களைக் கொண்டுள்ளது. இது நிலையற்ற அல்லது தீங்கிழைக்கும் குறியீட்டைக் கொண்டிருக்கலாம் மற்றும் எந்த நேரத்திலும் மாறலாம். நீங்கள் நம்பும் நபர்களிடம் மட்டுமே களஞ்சியங்களை நிறுவவும்.", "Featurette": "அம்சம்", "LabelTonemappingMode": "டோன் மேப்பிங் பயன்முறை", @@ -1764,7 +1764,7 @@ "LogLevel.Critical": "முக்கியம்", "NotificationsMovedMessage": "அறிவிப்புகள் செயல்பாடு Webhook செருகுநிரலுக்கு நகர்த்தப்பட்டது.", "LabelEnableLUFSScanHelp": "டிராக்குகள் முழுவதும் சமமான ஒலியைப் பெற செயலிகள் ஆடியோ பிளேபேக்கை இயல்பாக்கலாம். இது லைப்ரரி ஸ்கேன்களில் தாமதத்தை ஏற்படுத்தும் மற்றும் அதிக கணினி வளங்களை உபயோக படுத்தும் என்பதை நினைவில் கொள்ளவும்.", - "LabelParallelImageEncodingLimitHelp": "இணையாக இயக்க அனுமதிக்கப்படும் பட குறியாக்கங்களின் அதிகபட்ச எண்ணிக்கை. இதை 0 ஆக அமைப்பது உங்கள் கணினியின் முக்கிய எண்ணிக்கையின் அடிப்படையில் வரம்பை தேர்ந்தெடுக்கும்.", + "LabelParallelImageEncodingLimitHelp": "இணையாக இயங்க அனுமதிக்கப்பட்ட அதிகபட்ச பட குறியாக்கங்கள். இதை காலியாக விடுவது உங்கள் கணினியின் மைய எண்ணிக்கையின் அடிப்படையில் ஒரு வரம்பைத் தேர்ந்தெடுக்கும்.", "MessageRenameMediaFolder": "மீடியா லைப்ரரிக்கு மறுபெயரிடுவது அனைத்து மெட்டாடேட்டாவையும் இழக்க நேரிடும், எச்சரிக்கையுடன் தொடரவும்.", "SubtitleRed": "சிவப்பு", "SubtitleWhite": "வெள்ளை", @@ -1785,7 +1785,7 @@ "AllowSegmentDeletionHelp": "கிளையன்ட் பதிவிறக்கிய பிறகு பழைய பகுதிகளை நீக்கவும். இது முழு டிரான்ஸ்கோடட் கோப்பையும் வட்டில் சேமிப்பதைத் தடுக்கிறது. பிளேபேக் சிக்கல்களை நீங்கள் சந்தித்தால் இதை முடக்கவும்.", "LabelThrottleDelaySeconds": "செறிவூட்டு", "LabelSegmentKeepSeconds": "பகுதிகளை வைத்திருக்க வேண்டிய நேரம்", - "SelectAudioNormalizationHelp": "Track Gain - ஒவ்வொரு ஒலி அமைப்புகளுக்கும் சத்தத்தின் அளவை நிறுவுதல். Album Gain - ஒரு ஆல்பத்தில் உள்ள அனைத்து ஒலி அமைப்புகளுக்கும் ஒரே மாதிரியான சத்தத்தின் நிறுவுதல்.", + "SelectAudioNormalizationHelp": "டிராக் கெயின் - ஒவ்வொரு டிராக்கின் ஒலியளவையும் சரிசெய்கிறது, இதனால் அவை ஒரே சத்தத்துடன் பிளேபேக் ஆகும். ஆல்பம் கெயின் - ஆல்பத்தின் டைனமிக் வரம்பைப் பராமரிக்கும் வகையில், ஒரு ஆல்பத்தில் உள்ள அனைத்து டிராக்குகளின் ஒலியளவையும் மட்டும் சரிசெய்கிறது. \"ஆஃப்\" மற்றும் பிற விருப்பங்களுக்கு இடையில் மாறுவதற்கு தற்போதைய பிளேபேக்கை மறுதொடக்கம் செய்ய வேண்டும்.", "LabelAlbumGain": "ஆல்பத்தின் ஒலி அளவு வேறுபாடுகள்", "LabelSelectAudioNormalization": "ஒலி இயல்பாக்கம்", "AllowCollectionManagement": "சேகரிப்புகளை நிர்வகிக்க இந்தப் பயனரை அனுமதி", @@ -1871,7 +1871,7 @@ "LabelProcessPriority": "செயல்முறை முன்னுரிமை", "LabelQscale": "Qscale", "EnableTrueHdHelp": "உங்கள் சாதனம் TrueHD ஐ ஆதரித்தால் அல்லது இணக்கமான ஆடியோ ரிசீவருடன் இணைக்கப்பட்டிருந்தால் மட்டுமே இயக்கவும், இல்லையெனில் அது பிளேபேக் தோல்வியை ஏற்படுத்தலாம்.", - "LibraryScanFanoutConcurrencyHelp": "லைப்ரரி ஸ்கேன்களின் போது இணையான பணிகளின் அதிகபட்ச எண்ணிக்கை. இதை 0 ஆக அமைப்பது உங்கள் கணினியின் முக்கிய எண்ணிக்கையின் அடிப்படையில் வரம்பை தேர்ந்தெடுக்கும். எச்சரிக்கை: இந்த எண்ணை மிக அதிகமாக அமைப்பதால் பிணைய கோப்பு முறைமைகளில் சிக்கல்கள் ஏற்படலாம்; நீங்கள் சிக்கல்களை எதிர்கொண்டால், இந்த எண்ணைக் குறைக்கவும்.", + "LibraryScanFanoutConcurrencyHelp": "நூலக ஸ்கேன்களின் போது அதிகபட்ச இணையான பணிகளின் எண்ணிக்கை. இதை காலியாக விடுவது உங்கள் கணினியின் மைய எண்ணிக்கையின் அடிப்படையில் ஒரு வரம்பைத் தேர்ந்தெடுக்கும். எச்சரிக்கை: இந்த எண்ணை மிக அதிகமாக அமைப்பது பிணைய கோப்பு முறைமைகளில் சிக்கல்களை ஏற்படுத்தக்கூடும்; நீங்கள் சிக்கல்களை எதிர்கொண்டால் இந்த எண்ணைக் குறைக்கவும்.", "PlaylistError.CreateFailed": "பிளேலிஸ்ட்டை உருவாக்குவதில் பிழை", "PlaylistError.AddFailed": "பிளேலிஸ்ட்டில் சேர்ப்பதில் பிழை", "SaveLyricsIntoMediaFolders": "மீடியா கோப்புறைகளில் பாடல் வரிகளைச் சேமிக்கவும்", @@ -1897,7 +1897,7 @@ "HeaderVideoAdvanced": "வீடியோ மேம்பட்டது", "Lyrics": "பாடல் வரிகள்", "ConfirmDeleteLyrics": "இந்தப் பாடல் வரிகளை நீக்குவது கோப்பு முறைமை மற்றும் உங்கள் மீடியா லைப்ரரி இரண்டிலிருந்தும் நீக்கப்படும். நீங்கள் நிச்சயமாக தொடர விரும்புகிறீர்களா?", - "LabelTrickplayAccelEncodingHelp": "தற்போது QSV மற்றும் VAAPI இல் மட்டுமே கிடைக்கிறது, இந்த விருப்பம் மற்ற வன்பொருள் முடுக்க முறைகளில் எந்த விளைவையும் ஏற்படுத்தாது.", + "LabelTrickplayAccelEncodingHelp": "தற்போது QSV, VA-API, VideoToolbox மற்றும் RKMPP ஆகியவற்றில் மட்டுமே கிடைக்கிறது, இந்த விருப்பம் மற்ற வன்பொருள் முடுக்கம் முறைகளில் எந்த விளைவையும் ஏற்படுத்தாது.", "LabelTrickplayAccelEncoding": "வன்பொருள் துரிதப்படுத்தப்பட்ட MJPEG குறியாக்கத்தை இயக்கவும்", "PlaylistPublic": "பொது அணுகலை அனுமதிக்கவும்", "PlaylistPublicDescription": "உள்நுழைந்துள்ள எவரும் இந்த பிளேலிஸ்ட்டைப் பார்க்க அனுமதிக்கவும்.", @@ -1907,5 +1907,169 @@ "AllowFmp4TranscodingContainerHelp": "HEVC மற்றும் HDR பதிவுகளை செயல்படுத்துவதற்க்கு இந்த டியூனரிற்கு fMP4 ட்ரான்ஸ்கோடிங் கண்டெய்னரை அனுமதிக்கவும். எல்லா விதமான டியூனர்களும் இந்த கண்டெய்னருடன் ஒத்துவராது. தரவுகளை செயல்படுத்துவதில் ஏதேனும் தடங்கல் ஏற்பட்டால் இதை ஆஃப் செய்யவும்.", "Retry": "மீண்டும் முயற்சிக்கவும்", "AllowStreamSharingHelp": "ட்யூனரிலிருந்து mpegts ஸ்ட்ரீமை நகலெடுத்து, இந்த நகல் ஸ்ட்ரீமை அதன் வாடிக்கையாளர்களுடன் பகிர்ந்து கொள்ள ஜெல்லிஃபினை அனுமதிக்கவும். ட்யூனருக்கு மொத்த ஸ்ட்ரீம் எண்ணிக்கை வரம்பு இருக்கும்போது இது பயனுள்ளதாக இருக்கும், ஆனால் பிளேபேக் சிக்கல்களையும் ஏற்படுத்தக்கூடும்.", - "Alternate": "மாற்று" + "Alternate": "மாற்று", + "MessageRestoreSuccess": "மீட்டமைத்தல் வெற்றிகரமாக முடிந்தது", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "டிரான்ஸ்கோடிங் தூண்டப்படும்போது அனைத்து வசனங்களையும் எரிக்கவும். இது டிரான்ஸ்கோடிங் வேகத்தைக் குறைப்பதன் மூலம் டிரான்ஸ்கோடிங்கிற்குப் பிறகு வசன ஒத்திசைவை உறுதி செய்கிறது.", + "AllowTonemappingSoftwareHelp": "டோன்-மேப்பிங், அசல் காட்சியைப் பிரதிநிதித்துவப்படுத்துவதற்கு மிக முக்கியமான தகவலான பட விவரங்கள் மற்றும் வண்ணங்களைப் பராமரிக்கும் அதே வேளையில், ஒரு வீடியோவின் டைனமிக் வரம்பை HDR இலிருந்து SDR ஆக மாற்றும். தற்போது 10பிட் HDR10, HLG மற்றும் DoVi வீடியோக்களுடன் மட்டுமே இயங்குகிறது.", + "AlwaysRemuxMp3AudioFilesHelp": "உங்கள் உலாவி நேர முத்திரைகளை தவறாகக் கணக்கிடும் கோப்புகள் உங்களிடம் இருந்தால், இதை ஒரு தீர்வாக இயக்கவும்.", + "DeleteRepositoryConfirmation": "இந்த களஞ்சியத்தை நீக்க விரும்புகிறீர்களா?", + "DisableVbrAudioEncodingHelp": "இந்த கிளையண்டிற்கு VBR உடன் ஆடியோவை என்கோட் செய்வதிலிருந்து சர்வரைத் தடுக்கவும்.", + "FallbackMaxStreamingBitrateHelp": "ffprobe மூல ஸ்ட்ரீம் பிட்ரேட்டை தீர்மானிக்க முடியாதபோது, அதிகபட்ச ஸ்ட்ரீமிங் பிட்ரேட் ஒரு குறைப்பாகப் பயன்படுத்தப்படுகிறது. இது வாடிக்கையாளர்கள் அதிகப்படியான டிரான்ஸ்கோடிங் பிட்ரேட்டைக் கோருவதைத் தடுக்க உதவுகிறது, இது பிளேயரை செயலிழக்கச் செய்து என்கோடரை ஓவர்லோட் செய்யக்கூடும்.", + "LabelCustomTagDelimitersHelp": "தனித்தனி குறிச்சொற்களுக்கான வரம்புக் குறிகளாகக் கருதப்பட வேண்டிய எழுத்துக்கள்.", + "LabelDelimiterWhitelist": "வரம்பு நீக்கி அனுமதிப்பட்டியல்", + "LabelDelimiterWhitelistHelp": "குறிச்சொல் பிரிப்பிலிருந்து விலக்கப்பட வேண்டிய உருப்படிகள். ஒரு வரிக்கு ஒரு உருப்படி.", + "LabelDevice": "சாதனம்", + "LabelLyricDownloaders": "பாடல் வரி பதிவிறக்கிகள்", + "LabelQsvDeviceHelp": "பல-GPU அமைப்பில் Intel QSVக்கான சாதனத்தைக் குறிப்பிடவும். Linux-ல், இது ரெண்டர் நோட், எ.கா., /dev/dri/renderD128. Windows-ல், இது 0 இலிருந்து தொடங்கும் சாதனக் குறியீடு. நீங்கள் என்ன செய்கிறீர்கள் என்று தெரியாவிட்டால் காலியாக விடவும்.", + "LabelRepository": "களஞ்சியம்", + "LabelRestore": "மீட்டமை", + "LabelSaveTrickplayLocallyHelp": "டிரிக்பிளே படங்களை மீடியா கோப்புறைகளில் சேமிப்பது, எளிதாக இடம்பெயர்வு மற்றும் அணுகலுக்காக அவற்றை உங்கள் மீடியாவிற்கு அடுத்ததாக வைக்கும்.", + "LabelScreensaverTimeHelp": "ஸ்கிரீன்சேவரைத் தொடங்க தேவையான செயலற்ற நேரத்தின் அளவு வினாடிகளில்.", + "LabelSubtitleStyling": "வசன நடை", + "LabelSelectPreferredTranscodeVideoCodec": "விருப்பமான டிரான்ஸ்கோட் வீடியோ கோடெக்", + "LibraryInvalidItemIdError": "நூலகம் தவறான நிலையில் உள்ளது மற்றும் திருத்த முடியாது. நீங்கள் ஒரு பிழையை எதிர்கொள்ள நேரிடலாம்: தரவுத்தளத்தில் உள்ள பாதை கோப்பு முறைமையில் சரியான பாதை அல்ல.", + "MediaSegmentProvidersHelp": "உங்களுக்கு விருப்பமான ஊடகப் பிரிவு வழங்குநர்களை முன்னுரிமையின் வரிசையில் இயக்கி தரவரிசைப்படுத்துங்கள்.", + "MessageCancelTimerError": "டைமரை ரத்துசெய்யும்போது பிழை ஏற்பட்டது", + "MessageRestoreDisclaimer": "எச்சரிக்கை: நீங்கள் முந்தைய காப்புப்பிரதியிலிருந்து மீட்டெடுக்கப் போகிறீர்கள். செயல்முறை முடியும் வரை உங்கள் சேவையகம் பயன்படுத்த முடியாததாகிவிடும், மேலும் காப்புப்பிரதிக்குப் பிறகு உருவாக்கப்படும் எந்த புதிய தரவும் இழக்கப்படும்.", + "MoveToBottom": "கீழே நகர்த்து", + "NativeSubtitleStylingHelp": "சில சாதனங்களில் வசன நடை வேலை செய்யாது. இருப்பினும், இது எந்த செயல்திறன் செலவுகளையும் கொண்டிருக்கவில்லை.", + "PasswordMissingSaveError": "புதிய கடவுச்சொல் காலியாக இருக்கக்கூடாது.", + "PluginDisableError": "செருகுநிரலை முடக்கும்போது பிழை ஏற்பட்டது.", + "PluginEnableError": "செருகுநிரலை இயக்கும்போது பிழை ஏற்பட்டது.", + "PluginLoadConfigError": "செருகுநிரல் உள்ளமைவு பக்கங்களைப் பெறும்போது பிழை ஏற்பட்டது.", + "ReadInputAtNativeFramerateHelp": "இந்த விருப்பத்தை இயக்குவது சில சிக்கல்களைத் தீர்க்கக்கூடும், எ.கா. நேரடி ஒளிபரப்புகள் முன்கூட்டியே நிறுத்தப்படுவது.", + "RenderPgsSubtitleHelp": "கிளையன்ட், பர்ன்டு இன் சப்டைட்டில்களைப் பயன்படுத்துவதற்குப் பதிலாக PGS சப்டைட்டில்களை ரெண்டர் செய்ய வேண்டுமா என்பதைத் தீர்மானிக்கவும். இது கிளையன்ட்-சைட் ரெண்டரிங் செயல்திறனுக்கு ஈடாக சர்வர்-சைட் டிரான்ஸ்கோடிங்கைத் தவிர்க்கலாம்.", + "RetryWithGlobalSearch": "உலகளாவிய தேடலுடன் மீண்டும் முயற்சிக்கவும்", + "Reset": "மீட்டமைக்கவும்", + "RepositoriesPageLoadError": "களஞ்சியங்களை ஏற்றுவதில் தோல்வி", + "SelectPreferredTranscodeVideoAudioCodecHelp": "வீடியோ உள்ளடக்கத்திற்கு டிரான்ஸ்கோட் செய்ய விருப்பமான ஆடியோ கோடெக்கைத் தேர்ந்தெடுக்கவும். விருப்பமான கோடெக் ஆதரிக்கப்படவில்லை என்றால், சேவையகம் அடுத்து கிடைக்கக்கூடிய சிறந்த கோடெக்கைப் பயன்படுத்தும்.", + "StorageType.CDRom": "சிடி-ரோம்", + "StorageType.Fixed": "சரி செய்யப்பட்டது", + "StorageType.Network": "வலைப்பின்னல்", + "StorageType.NoRootDirectory": "ரூட் கோப்பகம் இல்லை", + "StorageType.Ram": "ரேம்", + "StorageType.Removable": "நீக்கக்கூடியது", + "StorageType.Unknown": "தெரியவில்லை", + "Success": "வெற்றி", + "LabelTrickplayKeyFrameOnlyExtractionHelp": "குறைவான துல்லியமான நேரத்துடன் குறிப்பிடத்தக்க வேகமான செயலாக்கத்திற்கு மட்டுமே கீ பிரேம்களைப் பிரித்தெடுக்கவும். உள்ளமைக்கப்பட்ட வன்பொருள் டிகோடர் இந்த பயன்முறையை ஆதரிக்கவில்லை என்றால், அதற்கு பதிலாக மென்பொருள் டிகோடரைப் பயன்படுத்தும்.", + "LogLoadFailure": "பதிவு கோப்பை ஏற்ற முடியவில்லை. அது இன்னும் செயலில் எழுதப்பட்டிருக்கலாம்.", + "LabelAlwaysRemuxMp3AudioFiles": "எப்போதும் MP3 ஆடியோ கோப்புகளை ரீமக்ஸ் செய்யவும்", + "PreferNonstandardArtistsTag": "கிடைத்தால், கலைஞர்கள் குறிச்சொல்லை விரும்புங்கள்", + "SettingsPageLoadError": "அமைப்புகள் பக்கத்தை ஏற்ற முடியவில்லை", + "LabelTrickplayKeyFrameOnlyExtraction": "முக்கிய சட்டகங்களிலிருந்து மட்டுமே படங்களை உருவாக்கவும்", + "ReadInputAtNativeFramerate": "உள்ளீட்டை நேட்டிவ் பிரேம் வீதத்தில் படிக்கவும்", + "AlwaysBurnInSubtitleWhenTranscoding": "டிரான்ஸ்கோடிங் செய்யும்போது எப்போதும் வசன வரிகளில் எழுது", + "CustomSplashScreenSize": "தனிப்பயன் படங்கள் குறைந்தபட்சம் 1920x1080 அளவில் 16x9 தோற்ற விகிதத்தில் இருக்க வேண்டும்.", + "DeleteCustomImage": "தனிப்பயன் படத்தை நீக்கு", + "MessageCancelSeriesTimerError": "தொடர் டைமரை ரத்து செய்யும் போது பிழை ஏற்பட்டது", + "DateModified": "திருத்தப்பட்ட தேதி", + "ImageUploadCancelled": "பட பதிவேற்றம் ரத்துசெய்யப்பட்டது", + "ImageUploadFailed": "படத்தைப் பதிவேற்ற முடியவில்லை", + "EnableHi10p": "H.264 உயர் 10 சுயவிவரத்தை இயக்கு", + "EnableHi10pHelp": "H.264 10-பிட் வீடியோக்களை டிரான்ஸ்கோட் செய்வதைத் தவிர்க்க இயக்கவும். வீடியோ வெற்று பிரேம்களைக் காட்டினால் இந்த விருப்பத்தை முடக்கவும்.", + "HeaderAudioAdvanced": "மேம்பட்ட ஆடியோ", + "HeaderPreviewLyrics": "முன்னோட்டப் பாடல் வரிகள்", + "LabelAllowStreamSharing": "ஸ்ட்ரீம் பகிர்வை அனுமதி", + "LabelDropLyricsHere": "பாடல் வரிகளை இங்கே விடுங்கள், அல்லது உலவ கிளிக் செய்யவும்.", + "LabelFallbackMaxStreamingBitrate": "ஃபால்பேக் அதிகபட்ச ஸ்ட்ரீம் பிட்ரேட் (Mbps)", + "LabelAllowFmp4TranscodingContainer": "fMP4 டிரான்ஸ்கோடிங் கண்டெய்னரை அனுமதிக்கவும்", + "LabelAlwaysRemuxFlacAudioFiles": "எப்போதும் FLAC ஆடியோ கோப்புகளை மறுதொடக்கம் செய்யவும்", + "LabelSelectPreferredTranscodeVideoAudioCodec": "வீடியோ பிளேபேக்கில் விருப்பமான டிரான்ஸ்கோட் ஆடியோ கோடெக்", + "MessageSplitVersionsError": "பதிப்புகளைப் பிரிக்கும்போது பிழை ஏற்பட்டது", + "MediaSegmentType.Outro": "அவுட்ரோ", + "MoviesAndShows": "திரைப்படங்கள் மற்றும் நிகழ்ச்சிகள்", + "PluginsLoadError": "செருகுநிரல்களை ஏற்றும்போது பிழை ஏற்பட்டது.", + "PluginUninstallError": "செருகுநிரலை நிறுவல் நீக்கும்போது பிழை ஏற்பட்டது.", + "HeaderBackups": "காப்புப்பிரதிகள்", + "MessageWaitingForServer": "சேவையகத்திற்காக காத்திருக்கிறது...", + "ConfirmDeleteRepository": "களஞ்சியத்தை நீக்கவா?", + "Create": "உருவாக்கு", + "HeaderNextEpisode": "அடுத்த அத்தியாயம்", + "HeaderNextVideo": "அடுத்த காணொளி", + "PreviewLyrics": "முன்னோட்டப் பாடல் வரிகள்", + "SelectPreferredTranscodeVideoCodecHelp": "டிரான்ஸ்கோட் செய்ய விருப்பமான வீடியோ கோடெக்கைத் தேர்ந்தெடுக்கவும். விருப்பமான கோடெக் ஆதரிக்கப்படவில்லை என்றால், சேவையகம் அடுத்து கிடைக்கக்கூடிய சிறந்த கோடெக்கைப் பயன்படுத்தும்.", + "StreamCountExceedsLimit": "ஸ்ட்ரீம்களின் எண்ணிக்கை வரம்பை மீறுகிறது", + "TranscodingLoadError": "டிரான்ஸ்கோடிங் அமைப்புகளை ஏற்ற முடியவில்லை", + "AutoSubtitleStylingHelp": "இந்த பயன்முறை உங்கள் சாதன வகையைப் பொறுத்து சொந்த மற்றும் தனிப்பயன் வசன ஸ்டைலிங் வழிமுறைகளுக்கு இடையில் தானாகவே மாறும்.", + "Custom": "தனிப்பயன்", + "CustomSubtitleStylingHelp": "வசன வரிகள் ஸ்டைலிங் பெரும்பாலான சாதனங்களில் வேலை செய்யும், ஆனால் கூடுதல் செயல்திறன் செலவுகளுடன் வருகிறது.", + "HeaderPageNotFound": "பக்கம் கிடைக்கவில்லை", + "UseCustomTagDelimiters": "தனிப்பயன் டேக் பிரிப்பானைப் பயன்படுத்தவும்", + "LabelNoChangelog": "இந்த வெளியீட்டிற்கு எந்த மாற்றப் பதிவும் வழங்கப்படவில்லை.", + "RenderPgsSubtitle": "பரிசோதனை PGS வசன ரெண்டரிங்", + "LabelEnablePlugin": "செருகுநிரலை இயக்கு", + "LabelIsSynced": "ஒத்திசைக்கப்பட்டது", + "LabelMediaSegmentsType": "{0} பிரிவுகள்", + "LabelAudioTagSettings": "ஆடியோ டேக் அமைப்புகள்", + "ReplaceTrickplayImages": "ஏற்கனவே உள்ள ட்ரிக்பிளே படங்களை மாற்றவும்", + "SearchForLyrics": "பாடல் வரிகளைத் தேடு", + "LabelScreensaverTime": "திரை சேமிப்பான் நேரம்", + "UseCustomTagDelimitersHelp": "கலைஞர்/வகை குறிச்சொற்களை தனிப்பயன் எழுத்துக்களுடன் பிரிக்கவும்.", + "LimitSegmentLength": "குறுகிய HLS பிரிவுகளைப் பயன்படுத்தவும்", + "LimitSegmentLengthHelp": "இந்த விருப்பத்தை இயக்குவது, webOS TVகள் போன்ற சில சாதனங்களில் தேடும் போது HLS பிளேயர் தொங்குவதைத் தடுக்க உதவும்.", + "LabelGroupShowsIntoCollections": "தொகுப்புகளில் குழு நிகழ்ச்சிகள்", + "LabelGroupShowsIntoCollectionsHelp": "காட்சிப் பட்டியல்களைக் காண்பிக்கும் போது, தொகுப்பில் உள்ள நிகழ்ச்சிகள் ஒரு தொகுக்கப்பட்ட உருப்படியாகக் காண்பிக்கப்படும்.", + "MediaSegmentAction.AskToSkip": "தவிர்க்கக் கேளுங்கள்", + "MediaSegmentSkipPrompt": "{0} ஐத் தவிர்", + "CopyLogSuccess": "பதிவு உள்ளடக்கங்கள் வெற்றிகரமாக நகலெடுக்கப்பட்டன.", + "DownloadManager": "பதிவிறக்கங்கள்", + "HeaderMediaSegmentActions": "ஊடகப் பிரிவு நடவடிக்கைகள்", + "HeaderNewPlaylist": "புதிய பிளேலிஸ்ட்", + "NoLyricsSearchResultsFound": "பாடல் வரிகள் எதுவும் கிடைக்கவில்லை.", + "AndOtherArtists": "{0} மற்றும் {1} பிற கலைஞர்கள்.", + "LiveTVPageLoadError": "பதிவுகள் பக்கத்தை ஏற்ற முடியவில்லை", + "LyricDownloadersHelp": "உங்களுக்கு விருப்பமான பாடல் வரி பதிவிறக்கிகளை முன்னுரிமையின் வரிசையில் இயக்கி தரவரிசைப்படுத்துங்கள்.", + "MediaInfoRotation": "சுழற்சி", + "HeaderUploadLyrics": "பாடல் வரிகளைப் பதிவேற்றவும்", + "MessageRestoreInProgress": "மீட்டமைவு செயலில் உள்ளது", + "MetadataNfoLoadError": "மெட்டாடேட்டா NFO அமைப்புகளை ஏற்ற முடியவில்லை", + "MoveToTop": "மேலே நகர்த்து", + "Native": "பூர்வீகம்", + "PlaylistError.UpdateFailed": "பட்டியலைப் புதுப்பிப்பதில் பிழை", + "PluginLoadRepoError": "களஞ்சியத்திலிருந்து செருகுநிரல் விவரங்களைப் பெறும்போது பிழை ஏற்பட்டது.", + "PreferNonstandardArtistsTagHelp": "கிடைக்கும்போது, ARTIST குறிச்சொல்லுக்குப் பதிலாக, தரமற்ற ARTISTS குறிச்சொல்லைப் பயன்படுத்தவும்.", + "Regional": "பிராந்திய", + "UploadCustomImage": "தனிப்பயன் படத்தை பதிவேற்று", + "ViewSettings": "அமைப்புகளைக் காண்க", + "VideoCodecTagNotSupported": "வீடியோ கோடெக் டேக் ஆதரிக்கப்படவில்லை", + "AlwaysRemuxFlacAudioFilesHelp": "உங்கள் உலாவி இயக்க நிராகரிக்கும் கோப்புகள் இருந்தால் அல்லது தவறாக நேர முத்திரைகளைக் கணக்கிடும் இடத்தில் இருந்தால், இதை ஒரு தீர்வாக இயக்கவும்.", + "HeaderEditPlaylist": "பிளேலிஸ்ட்டைத் திருத்து", + "DisplayLoadError": "காட்சி உள்ளமைவு தரவை ஏற்றும்போது பிழை ஏற்பட்டது.", + "LabelDisableVbrAudioEncoding": "VBR ஆடியோ குறியாக்கத்தை முடக்கு", + "PageNotFound": "நீங்கள் தேடும் பக்கம் இதுவல்ல.", + "MediaSegmentAction.Skip": "தவிர்", + "MediaSegmentType.Commercial": "வணிகம்", + "MessageBackupDisclaimer": "உங்கள் நூலகத்தின் அளவைப் பொறுத்து, காப்புப்பிரதி செயல்முறை சிறிது நேரம் ஆகலாம்.", + "MessageBackupInProgress": "காப்புப்பிரதி எடுக்கப்படுகிறது", + "MetadataImagesLoadError": "மெட்டாடேட்டா அமைப்புகளை ஏற்ற முடியவில்லை", + "AlternateDVD": "மாற்று DVD", + "DeleteServerConfirmation": "இந்த சேவையகத்தை நீக்க விரும்புகிறீர்களா?", + "LabelMediaSegmentProviders": "ஊடகப் பிரிவு வழங்குநர்கள்", + "MediaSegmentAction.None": "யாரும் இல்லை", + "MediaSegmentType.Recap": "சிறுகதை", + "Anime": "அனிமே", + "LabelQsvDevice": "QSV சாதனம்", + "LabelSaveTrickplayLocally": "மீடியாவுக்கு அடுத்து ட்ரிக்பிளே படங்களைச் சேமிக்கவும்", + "MediaSegmentType.Intro": "அறிமுகம்", + "MediaSegmentType.Preview": "முன்னோட்டம்", + "MessageForgotPasswordPinReset": "கடவுச்சொல் மீட்டமைப்பை முடிக்க, இங்கே பின்னை உள்ளிடவும்", + "HeaderServerUnavailable": "சேவையகம் கிடைக்கவில்லை", + "HeaderUpdateRequired": "புதுப்பிப்பு தேவை", + "LabelDuration": "கால அளவு", + "ButtonLearnMore": "மேலும் அறிக", + "HeaderBackupsHelp": "தரவுத்தளம், மெட்டாடேட்டா, வசன வரிகள் மற்றும் ட்ரிக்பிளே ஆகியவற்றை உள்ளடக்கிய உங்கள் சேவையகத்தின் ஸ்னாப்ஷாட்களை உருவாக்கி மீட்டெடுக்கவும்.", + "ImageDeleteFailed": "படத்தை நீக்க முடியவில்லை", + "LabelProgramData": "நிரல் தரவு", + "LibraryNameInvalid": "நூலகப் பெயர் காலியாக இருக்கக்கூடாது.", + "ButtonCreateBackup": "காப்புப்பிரதியை உருவாக்கு", + "BackupsPageLoadError": "காப்புப் பிரதி பக்கத்தை ஏற்ற முடியவில்லை", + "HeaderAddLyrics": "பாடல் வரிகளைச் சேர்க்கவும்", + "LabelCustomTagDelimiters": "தனிப்பயன் டேக் பிரிப்பான்", + "LabelDatabase": "தரவுத்தளம்", + "LabelBackupsUnavailable": "காப்புப்பிரதிகள் எதுவும் கிடைக்கவில்லை", + "EditLyrics": "பாடல் வரிகளைத் திருத்து", + "LabelImageCache": "பட தற்காலிக சேமிப்பு", + "LabelInstalled": "நிறுவப்பட்டது", + "LabelNotInstalled": "நிறுவப்படவில்லை", + "LastActive": "கடைசியாகச் செயல்பட்டது" } From 1121ce8a8dd4d966f8a61112a8e21a030f0eddef Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Sat, 28 Jun 2025 11:17:42 -0400 Subject: [PATCH 570/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 66 ++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 63438faf0..90d06d3e6 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -490,22 +490,22 @@ "Programs": "Programes", "Quality": "Qualitat", "RecentlyWatched": "Reproduït recentment", - "RecommendationBecauseYouWatched": "Ja que has vist {0}", - "Record": "Grava", + "RecommendationBecauseYouWatched": "Perquè heu vist {0}", + "Record": "Enregistra", "RecordSeries": "Enregistra la sèrie", "RecordingCancelled": "Enregistrament cancel·lat.", "RecordingScheduled": "Enregistrament programat.", "Refresh": "Actualitza", "RefreshMetadata": "Actualitza les metadades", - "RefreshQueued": "Actualització encuada.", - "ReleaseDate": "Estrena", - "RememberMe": "Recorda'm", + "RefreshQueued": "Actualització posada a la cua.", + "ReleaseDate": "Data d'estrena", + "RememberMe": "Recorda-m'ho", "RemoveFromCollection": "Elimina de la col·lecció", "RemoveFromPlaylist": "Esborra de la llista de reproducció", "Repeat": "Repeteix", - "RepeatEpisodes": "Repetir episodis", - "ReplaceAllMetadata": "Reemplaça totes les metadades", - "ReplaceExistingImages": "Reemplaça imatges existents", + "RepeatEpisodes": "Repeteix els episodis", + "ReplaceAllMetadata": "Substitueix totes les metadades", + "ReplaceExistingImages": "Substitueix les imatges existents", "ResumeAt": "Reprodueix des de {0}", "Saturday": "Dissabte", "Save": "Desa", @@ -1374,28 +1374,28 @@ "HeaderSubtitleProfiles": "Perfils dels subtítols", "SaveChanges": "Guardar canvis", "Runtime": "Temps d'execució", - "Rewind": "Rebobinar", + "Rewind": "Rebobina", "Restart": "Reinicia", "ResetPassword": "Restableix la contrasenya", - "RepeatOne": "Repetir 1", + "RepeatOne": "Repeteix un", "RepeatMode": "Mode de repetició", "RepeatAll": "Repeteix-ho tot", "RefreshDialogHelp": "Les metadades s'actualitzen segons la configuració i serveis d'internet habilitats al Tauler de control.", "Recordings": "Enregistraments", "RecommendationStarring": "Protagonitzada per {0}", "RecommendationDirectedBy": "Dirigida per {0}", - "RecommendationBecauseYouLike": "Perquè t'agrada {0}", - "Rate": "Rati", + "RecommendationBecauseYouLike": "Perquè us agrada {0}", + "Rate": "Valoreu", "Raised": "Elevat", "QuickConnectNotAvailable": "Demaneu a l'administrador del servidor que activi el Quick Connect", "QuickConnectNotActive": "Quick Connect no està activat en aquest servidor", "QuickConnectInvalidCode": "Codi de Quick Connect no vàlid", "QuickConnectDescription": "Per iniciar sessió amb Quick Connect, seleccioneu el botó 'Quick Connect' al dispositiu des del que us esteu connectant i introduïu el codi que apareix a continuació.", "QuickConnectDeactivated": "El Quick Connect s'ha desactivat abans que la sol·licitud d'inici de sessió pogués ser aprovada", - "QuickConnectAuthorizeSuccess": "Heu autenticat el vostre dispositiu correctament!", + "QuickConnectAuthorizeSuccess": "Heu autenticat correctament el vostre dispositiu!", "QuickConnectAuthorizeFail": "Codi de Quick Connect no reconegut", "QuickConnectAuthorizeCode": "Introduïu el codi {0} per iniciar sessió", - "QuickConnectActivationSuccessful": "Activat amb èxit", + "QuickConnectActivationSuccessful": "S'ha activat amb èxit", "QuickConnect": "Quick Connect (connexió ràpida)", "PluginFromRepo": "{0} des del repositori {1}", "Profile": "Perfil", @@ -1795,14 +1795,14 @@ "DlnaMovedMessage": "La funcionalitat DLNA s'ha mogut a complements.", "AllowSubtitleManagement": "Permet editar subtítols a aquest usuari", "ChannelResolutionUHD4K": "UHD (4K)", - "LabelTrickplayAccel": "Habilitar descodificació per maquinari", + "LabelTrickplayAccel": "Habilita la descodificació per maquinari", "NonBlockingScan": "Sense Bloqueig - generació de cues, després retorna", "ConfirmDeleteSeries": "Eliminar aquesta sèrie eliminarà TOTS {0} episodis tant del sistema de fitxers com de la mediateca. N'esteu segur, que desitgeu continuar?", "LabelEncodingFormatOptions": "Opcions de format de codificació", "LabelTrickplayAccelHelp": "Assegura't d'habilitar 'Permetre codificació MJPEG' a Transcodificació si el teu maquinari ho suporta.", "LabelWidthResolutions": "Resolucions d'Amplada", "LabelScanBehaviorHelp": "El comportament predeterminat és sense blocatge, cosa que afegirà contingut multimèdia a la mediateca abans que la generació de la previsualització es completi. El bloqueig assegura que els fitxers de previsualització es generin abans que el contingut multimèdia no s'afegeixi a la mediateca, però farà que l'escaneig sigui significativament més llarg.", - "LabelProcessPriorityHelp": "Establint-ho més baix o més alt determinarà com el processador prioritza el procés de generació de trickplay ffmpeg en relació amb altres processos. Si observeu una ralentització mentre genereu imatges de trickplay, però no voleu aturar completament la seva generació, proveu de reduir-la així com el nombre de fils.", + "LabelProcessPriorityHelp": "Establint-ho més baix o més alt determinarà com el processador prioritza el procés de generació de previsualització ffmpeg en relació amb altres processos. Si observeu una ralentització mentre genereu imatges de previsualització, però no voleu aturar completament la seva generació, proveu de reduir-la així com el nombre de fils.", "AirPlay": "AirPlay", "AllowContentWithTagsHelp": "Mostra només el contingut multimèdia amb com a mínim alguna de les etiquetes especificades.", "BlockContentWithTagsHelp": "Amaga el contingut multimèdia amb com a mínim una de les etiquetes especificades.", @@ -1816,7 +1816,7 @@ "PlaybackError.PLAYER_ERROR": "La reproducció ha fallat a causa d'un error fatal del reproductor.", "PlaybackError.SERVER_ERROR": "La reproducció ha fallat a causa d'un error del servidor.", "PlaybackError.NotAllowed": "La reproducció d'aquest contingut multimèdia no està permesa.", - "Trickplay": "Trickplay", + "Trickplay": "Previsualització", "PriorityHigh": "Alta", "EnableLibrary": "Habilita la mediateca", "EnableLibraryHelp": "Deshabilitar la mediateca l'amagarà per a tots els usuaris.", @@ -1827,16 +1827,16 @@ "EncodingFormatHelp": "Seleccioni la codificació de vídeo a la qual hauria de transcodificar Jellyfin. Jellyfin utilitzarà codificació mitjançant programari quan l'acceleració per maquinari no estigui disponible. La codificació H264 sempre estarà habilitada.", "PriorityAboveNormal": "Per sobre del Normal", "PriorityNormal": "Normal", - "LabelImageIntervalHelp": "Interval de temps (ms) entre cada imatge nova de trickplay.", - "LabelWidthResolutionsHelp": "Llista separada per comes de les amplades (px) en què es generaran les imatges de trickplay. Totes les imatges s'han de generar proporcionalment a la font, de manera que una amplada de 320 en un vídeo 16:9 acaba al voltant de 320x180.", + "LabelImageIntervalHelp": "Interval de temps (ms) entre cada imatge nova de previsualització.", + "LabelWidthResolutionsHelp": "Llista separada per comes de les amplades (px) en què es generaran les imatges de previsualització. Totes les imatges s'han de generar proporcionalment a la font, de manera que una amplada de 320 en un vídeo 16:9 acaba al voltant de 320x180.", "LabelTileWidth": "Amplada del Títol", "LabelTileWidthHelp": "Nombre màxim d'imatges per casella en la direcció X.", "LabelTileHeight": "Alçada del Títol", "LabelTileHeightHelp": "Nombre màxim d'imatges per casella en la direcció Y.", "LabelJpegQuality": "Qualitat JPEG", - "LabelJpegQualityHelp": "Qualitat de compressió JPEG per a les imatges de trickplay.", + "LabelJpegQualityHelp": "Qualitat de compressió JPEG per a les imatges de previsualització.", "LabelQscale": "Qscale", - "OptionExtractTrickplayImage": "Habilitar extracció d'imatges de trickplay", + "OptionExtractTrickplayImage": "Habilita l'extracció d'imatges de previsualització", "LabelExtractTrickplayDuringLibraryScan": "Extreu imatges de previsualització durant l'escaneig de la mediateca", "LabelExtractTrickplayDuringLibraryScanHelp": "Genera imatges de previsualització quan els vídeos són importats durant l'escaneig de la mediateca. D'altra banda, seran extrets durant la tasca programada d'imatges de previsualització. Si la generació està marcada com a sense bloqueig, això no afectarà el temps que triga a completar l'exploració de la mediateca.", "DeleteEntireSeries": "Elimina {0} episodis", @@ -1854,9 +1854,9 @@ "LabelImageInterval": "Interval d'Imatges", "LabelQscaleHelp": "Escala de qualitat de les imatges generades per ffmpeg, sent 2 la qualitat més alta i 31 la més baixa.", "LabelTrickplayThreads": "Fils de FFmpeg", - "ExtractTrickplayImagesHelp": "Les imatges de Trickplay són similars a les imatges de capítols, excepte que abasten tota la longitud del contingut i s'utilitzen per mostrar una vista prèvia quan es desplaça pels vídeos.", + "ExtractTrickplayImagesHelp": "Les imatges de previsualització són similars a les imatges de capítols, excepte que abasten tota la longitud del contingut i s'utilitzen per mostrar una vista prèvia en moure's pels vídeos.", "LabelTrickplayAccelEncodingHelp": "En aquests moments només està disponible en QSV, VAAPI, VideoToolbox i RKMPP, aquesta opció no afecta els altres mètodes d'acceleració per maquinari.", - "LabelTrickplayAccelEncoding": "Habilitar codificació MJPEG accelerada per maquinari", + "LabelTrickplayAccelEncoding": "Habilita la codificació MJPEG accelerada per maquinari", "ConfirmDeleteLyrics": "L'esborrat d'aquestes lletres, les suprimirà tant del sistema de fitxers com de la vostra mediateca. N'esteu segur, que desitgeu continuar?", "ErrorDeletingLyrics": "S'ha produït un error en suprimir les lletres del servidor. Si us plau, comproveu que Jellyfin tingui accés d'escriptura a la carpeta multimèdia i torneu-ho a provar.", "HeaderDeleteLyrics": "Elimina la lletra", @@ -1882,7 +1882,7 @@ "PlaylistPublic": "Permet l'accés públic", "PlaylistPublicDescription": "Permet que aquesta llista de reproducció sigui vista per qualsevol usuari registrat.", "HeaderLyricDownloads": "Descàrregues de lletres", - "SaveLyricsIntoMediaFolders": "Desa la lletra a les carpetes multimèdia", + "SaveLyricsIntoMediaFolders": "Desa les lletres al directoris multimèdia", "SaveLyricsIntoMediaFoldersHelp": "Emmagatzemar les lletres al costat dels fitxers d'àudio permetrà gestionar-les més fàcilment.", "LabelSelectPreferredTranscodeVideoAudioCodec": "Còdec d'àudio de transcodificació preferit en la reproducció de vídeo", "LibraryScanFanoutConcurrencyHelp": "Nombre màxim de tasques paral·leles durant les exploracions de la mediateca. Si es deixa buit, es triarà un límit basat en el nombre de nuclis del vostre sistema. AVÍS: establir aquest número massa alt pot causar problemes amb els sistemes de fitxers de xarxa; si us dona problemes, abaixeu aquest número.", @@ -1911,7 +1911,7 @@ "SelectPreferredTranscodeVideoCodecHelp": "Seleccioneu el còdec de vídeo preferit per transcodificar. Si el còdec preferit no és compatible, el servidor utilitzarà el següent millor còdec disponible.", "PasswordMissingSaveError": "La nova contrasenya no pot ser buida.", "PreviewLyrics": "Previsualitza lletres", - "Reset": "Restablir", + "Reset": "Restableix", "MediaInfoRotation": "Rotació", "MoveToBottom": "Mou al fons", "MoveToTop": "Mou al cim", @@ -1923,7 +1923,7 @@ "NoLyricsSearchResultsFound": "No s'han trobat lletres.", "SearchForLyrics": "Cercar lletres", "LibraryInvalidItemIdError": "La mediateca es troba en un estat no vàlid, i no es pot editar. És possible que hàgiu trobat un error: la ruta de la base de dades no és una ruta correcta en el sistema de fitxers.", - "LabelTrickplayKeyFrameOnlyExtraction": "Només generar imatges en fotogrames clau", + "LabelTrickplayKeyFrameOnlyExtraction": "Només genera imatges dels fotogrames clau", "LabelTrickplayKeyFrameOnlyExtractionHelp": "Només extreure fotogrames clau per a un processament significativament més ràpid amb una sincronització menys precisa. Si el descodificador de maquinari configurat no admet aquest mode, en el seu lloc s'utilitzarà el descodificador per programari.", "AllowTonemappingSoftwareHelp": "El mapatge de tons pot transformar el rang dinàmic d'un vídeo d'HDR a SDR mantenint els detalls i els colors de la imatge, que són informació molt important per representar l'escena original. Actualment, només funciona amb vídeos HDR10, HLG i DoVi de 10 bits.", "LabelDuration": "Duració", @@ -1978,13 +1978,13 @@ "HeaderMediaSegmentActions": "Accions dels segments de continguts multimèdia", "LabelMediaSegmentsType": "{0} Segments", "PreferNonstandardArtistsTag": "Prioritza l'etiqueta ARTISTS si es troba disponible", - "ReplaceTrickplayImages": "Substitueix les imatges trickplay existents", + "ReplaceTrickplayImages": "Substitueix les imatges de previsualització existents", "UseCustomTagDelimiters": "Utilitza delimitador d'etiquetes personalitzat", "PreferNonstandardArtistsTagHelp": "Fes servir l'etiqueta no estàndard ARTISTS en lloc de l'etiqueta ARTIST quan estigui disponible.", "UseCustomTagDelimitersHelp": "Separa les etiquetes artista/gènere amb caràcters personalitzats.", - "RenderPgsSubtitle": "Renderitzat experimental de subtitols PGS", + "RenderPgsSubtitle": "Renderitzat experimental de subtítols PGS", "VideoCodecTagNotSupported": "L'etiqueta del còdec de vídeo no és compatible", - "RenderPgsSubtitleHelp": "Determina si el client ha de renderitzar els subtítols PGS en lloc d'usar els subtítols incrustats. Això pot evitar la transcodificació de part del servidor a canvi del rendiment de renderitzat de part del client.", + "RenderPgsSubtitleHelp": "Determina si el client ha de renderitzar els subtítols PGS enlloc de fer servir els subtítols incrustats. Això pot evitar la transcodificació de part del servidor a canvi del rendiment de renderitzat de part del client.", "FallbackMaxStreamingBitrateHelp": "La transmissió màxima de bits s'usa com a alternativa quan ffprobe no pot determinar el flux de l'origen. Això ajuda a prevenir que els clients sol·licitin un bitrate de transcodificació excessivament alt, el qual provocaria errors en el reproductor o sobrecarregaria el codificador.", "HeaderNextEpisode": "Episodi següent", "HeaderNextVideo": "Vídeo següent", @@ -2001,7 +2001,7 @@ "LabelDevice": "Dispositiu", "LastActive": "Últim actiu", "CopyLogSuccess": "Registres copiats satisfactòriament.", - "Retry": "Tronar a provar", + "Retry": "Torna a provar-ho", "LogLoadFailure": "Error al carregar el registre. És probable que encara s'estigui escrivint en ell.", "MetadataNfoLoadError": "No s'han pogut carregar les configuracions de metadades NFO", "SettingsPageLoadError": "No s'ha pogut carregar la pàgina de configuracions", @@ -2010,7 +2010,7 @@ "PageNotFound": "Aquesta no és la pàgina que esteu cercant.", "MetadataImagesLoadError": "No s'han pogut carregar les configuracions de metadades", "StreamCountExceedsLimit": "El número de flux excedeix el límit", - "RetryWithGlobalSearch": "Reintentar amb una cerca global", + "RetryWithGlobalSearch": "Reintenta amb una cerca global", "LabelGroupShowsIntoCollections": "Agrupa sèries en col·leccions", "LabelGroupShowsIntoCollectionsHelp": "Les sèries que estiguin dins d'una col·lecció es mostraran com un únic element agrupat quan es mostrin les llistes de sèries.", "CustomSplashScreenSize": "Les imatges personalitzades haurien de ser en 16x9 de ràtio d'aspecte i a una mida mínima de 1920x1080.", @@ -2019,8 +2019,8 @@ "ImageUploadCancelled": "Pujada d'imatge cancel·lada", "ImageUploadFailed": "No s'ha pogut carregar la imatge", "UploadCustomImage": "Pujar imatge personalitzada", - "ReadInputAtNativeFramerate": "Llegeix l'origen a la velocitat de fotogrames nativa", - "ReadInputAtNativeFramerateHelp": "Activant aquesta opció pot solucionar alguns problemes, p. ex. retransmissions en directe que es paren sobtadament.", + "ReadInputAtNativeFramerate": "Fes servir la velocitat original de fotogrames", + "ReadInputAtNativeFramerateHelp": "Habilitar aquesta opció pot solucionar alguns problemes, p. ex. retransmissions en directe que s'aturen sobtadament.", "LimitSegmentLength": "Fes servir els segments HLS més curts", "LimitSegmentLengthHelp": "Activar aquesta opció pot ajudar a prevenir que el reproductor HLS es pengi durant la cerca en alguns dispositius, com televisors webOS.", "HeaderServerUnavailable": "El servidor no està disponible", From bb5771d2f5c24a9282b11762095137d47e9b7292 Mon Sep 17 00:00:00 2001 From: nextlooper42 Date: Sat, 28 Jun 2025 11:31:40 -0400 Subject: [PATCH 571/645] Translated using Weblate (Slovak) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/ --- src/strings/sk.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/sk.json b/src/strings/sk.json index 712057fd5..f2b8a462d 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -72,7 +72,7 @@ "Composer": "Skladateľ", "ConfirmDeleteImage": "Zmazať obrázok?", "ConfirmDeletion": "Potvrdiť zmazanie", - "ConfirmEndPlayerSession": "Chcete vypnúť Jellyfin na {0}?", + "ConfirmEndPlayerSession": "Chceli by ste vypnúť Jellyfin na {0}?", "Connect": "Pripojiť", "ContinueWatching": "Pokračovať v pozeraní", "CriticRating": "Hodnotenie kritikov", @@ -457,7 +457,7 @@ "MessageConfirmRecordingCancellation": "Zrušiť nahrávanie?", "MessageConfirmRemoveMediaLocation": "Ste si istý, že chcete odstrániť toto umiestnenie?", "MessageConfirmRestart": "Ste si istý, že chcete reštartovať Jellyfin?", - "MessageConfirmShutdown": "Ste si istý, že chcete vypnúť server?", + "MessageConfirmShutdown": "Ste si istí, že chcete vypnúť server?", "MessageEnablingOptionLongerScans": "Povolenie tejto možnosti môže mať za následok podstatne dlhšie skenovania knižníc.", "MessageFileReadError": "Pri načítaní súboru nastala chyba. Prosí, skúste to znova.", "MessageInvalidForgotPasswordPin": "Bol zadaný neplatný alebo expirovaný PIN. Prosím, skúste to znova.", From ea63d71fc0e7e9934f285b1efee94935a6681c39 Mon Sep 17 00:00:00 2001 From: Oliver Schuller Date: Sat, 28 Jun 2025 12:04:15 -0400 Subject: [PATCH 572/645] Translated using Weblate (Swedish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sv/ --- src/strings/sv.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/sv.json b/src/strings/sv.json index 3cdee4cdd..68665b054 100644 --- a/src/strings/sv.json +++ b/src/strings/sv.json @@ -2056,5 +2056,6 @@ "TranscodingLoadError": "Kunde inte läsa in transkodningsinställningarna", "ButtonLearnMore": "Läs mer", "LabelImageCache": "Bildcache", - "StorageType.Fixed": "Åtgärdat" + "StorageType.Fixed": "Åtgärdat", + "LiveTVPageLoadError": "Misslyckades med att ladda inspelningssidan" } From 9ad3076e39a9e388df3b1064c8f7171247392ced Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Sat, 28 Jun 2025 12:53:53 -0400 Subject: [PATCH 573/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 86 ++++++++++++++++++++++----------------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 90d06d3e6..00829c0d7 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -286,7 +286,7 @@ "LabelMaxStreamingBitrateHelp": "Especifica un bitrate màxim quan es faci streaming.", "LabelMessageText": "Text del missatge", "LabelMessageTitle": "Títol del missatge", - "LabelMetadata": "Metadada", + "LabelMetadata": "Metadades", "LabelMetadataDownloadLanguage": "Idioma preferit de descàrrega", "LabelMetadataPath": "Ruta de metadades", "LabelMetadataPathHelp": "Especifiqueu un directori personalitzat per a les imatges i metadades descarregades.", @@ -337,7 +337,7 @@ "LabelSaveLocalMetadataHelp": "Desar les imatges als directoris multimèdia les ubicarà a un lloc on podran ser editades fàcilment.", "LabelScreensaver": "Estalvi de pantalla", "LabelSeasonNumber": "Temporada", - "LabelSelectFolderGroups": "Agrupa automàticament el contingut de les següents carpetes en col·leccions com 'Pel·lícules', 'Música' i 'TV'", + "LabelSelectFolderGroups": "Agrupa automàticament el contingut dels següents directoris en vistes com 'Pel·lícules', 'Música' i 'TV'", "LabelSelectFolderGroupsHelp": "Els directoris desmarcats seran mostrats individualment en la seva pròpia vista.", "LabelSelectUsers": "Selecciona usuaris", "LabelSelectVersionToInstall": "Seleccioneu la versió a instal·lar", @@ -449,7 +449,7 @@ "OptionEquals": "Equival", "OptionEveryday": "Cada dia", "OptionExternallyDownloaded": "Descàrrega externa", - "OptionHasThemeSong": "Tema musical", + "OptionHasThemeSong": "Sintonia", "OptionHasThemeVideo": "Vídeo temàtic", "OptionHideUser": "Oculta aquest usuari de les pantalles d'inici de sessió", "OptionHideUserFromLoginHelp": "Pràctic per a comptes d'administrador ocults o privats. L'usuari necessitarà accedir manualment introduint el seu nom d'usuari i contrasenya.", @@ -511,25 +511,25 @@ "Save": "Desa", "Screenshots": "Captures de pantalla", "Search": "Cerca", - "SearchForCollectionInternetMetadata": "Cerca a internet imatges i metadades", + "SearchForCollectionInternetMetadata": "Cerca imatges i metadades a Internet", "SearchForMissingMetadata": "Cerca metadades perdudes", - "SearchForSubtitles": "Cerca Subtítols", - "SendMessage": "Envia missatge", + "SearchForSubtitles": "Cerca subtítols", + "SendMessage": "Envia un missatge", "SeriesCancelled": "Sèrie cancel·lada.", - "SeriesRecordingScheduled": "Enregistrament de la sèrie programat.", + "SeriesRecordingScheduled": "Enregistrament programat de la sèrie.", "SeriesSettings": "Preferències de la sèrie", - "ServerUpdateNeeded": "El servidor necessita ser actualitzat. Per descarregar la darrera versió, visiteu {0}", - "Settings": "Preferències", - "SettingsSaved": "Preferències desades.", + "ServerUpdateNeeded": "El servidor necessita ser actualitzat. Per a descarregar la darrera versió, visiteu {0}", + "Settings": "Configuració", + "SettingsSaved": "Configuració desada.", "Share": "Comparteix", "ShowIndicatorsFor": "Mostra indicadors per a", "Shuffle": "Aleatori", "SkipEpisodesAlreadyInMyLibrary": "No enregistris episodis que ja són a la mediateca", - "SkipEpisodesAlreadyInMyLibraryHelp": "Els episodis es compararan emprant la temporada i el nombre d'episodi quan siguin disponibles.", - "SortName": "Nom per endreçar", + "SkipEpisodesAlreadyInMyLibraryHelp": "Els episodis es compararan emprant la temporada i el nombre d'episodi quan estiguin disponibles.", + "SortName": "Nom d'ordenació", "Studios": "Estudis", "Subtitles": "Subtítols", - "Suggestions": "Suggerències", + "Suggestions": "Suggeriments", "Sunday": "Diumenge", "Sync": "Sincronitzar", "TabAccess": "Accés", @@ -550,11 +550,11 @@ "TabPlugins": "Complements", "TabProfiles": "Perfils", "TabResponses": "Respostes", - "TabScheduledTasks": "Tasques Programades", + "TabScheduledTasks": "Tasques programades", "TabServer": "Servidor", "TabUpcoming": "Properament", "Tags": "Etiquetes", - "TellUsAboutYourself": "Explica'ns sobre tu", + "TellUsAboutYourself": "Expliqueu-nos com sou", "TheseSettingsAffectSubtitlesOnThisDevice": "Aquestes preferències afecten els subtítols d'aquest dispositiu", "ThisWizardWillGuideYou": "Aquest assistent us guiarà durant el procés d'instal·lació. Per començar, si us plau, entreu el nom del servidor i seleccioneu el vostre idioma preferit.", "Thursday": "Dijous", @@ -721,7 +721,7 @@ "DownloadsValue": "{0} descàrregues", "DisplayMissingEpisodesWithinSeasonsHelp": "Això també s'ha d'activar per a les mediateques de TV a la configuració del servidor.", "DisplayInOtherHomeScreenSections": "Mostra a les seccions de la pantalla d'inici, com ara a 'Contingut multimèdia afegit darrerament' i 'Continueu mirant-ho'", - "DisplayInMyMedia": "Mostra a la pantalla inicial", + "DisplayInMyMedia": "Mostra a la pantalla principal", "Display": "Pantalla", "Disc": "Disc", "Directors": "Directors", @@ -765,7 +765,7 @@ "EnableColorCodedBackgrounds": "Fons codificats per colors", "EnableBlurHashHelp": "Les imatges que encara s'estan carregant es mostraran amb un marcador únic de posició.", "EnableBlurHash": "Habilita marcadors de posició borrosos per a imatges", - "DropShadow": "Projecta ombra", + "DropShadow": "Projecció d'ombra", "DisablePlugin": "Deshabilita", "EnablePlugin": "Habilita", "DirectStreamHelp1": "El flux de vídeo és compatible amb el dispositiu, però té un format d'àudio incompatible (DTS, Dolby TrueHD, etc.) o un nombre de canals d'àudio. El flux de vídeo es tornarà a empaquetar sense pèrdues sobre la marxa abans d'enviar-lo al dispositiu. Només es transcodificarà el flux d'àudio.", @@ -923,20 +923,20 @@ "SystemDlnaProfilesHelp": "Perfils de el sistema són de només lectura. Els canvis en un perfil de sistema seran emmagatzemades a un nou perfil personalitzat.", "SyncPlayGroupDefaultTitle": "Grup de {0}", "SyncPlayAccessHelp": "La funció SyncPlay permet sincronitzar la reproducció amb altres dispositius. Seleccioneu el nivell d'accés a SyncPlay que té aquest usuari.", - "SubtitleVerticalPositionHelp": "Número de línia on apareix el text. Els nombres positius indiquen dalt a baix. Els nombres negatius indiquen dalt a baix.", - "SubtitleOffset": "Subtítol Offset", + "SubtitleVerticalPositionHelp": "Número de línia on apareix el text. Les xifres positives numeren de dalt a baix. Les xifres negatives numeren de baix a dalt.", + "SubtitleOffset": "Decalatge de subtítols", "SubtitleDownloadersHelp": "Habilita i classifica els descarregadors de subtítols preferits per ordre de prioritat.", "SubtitleAppearanceSettingsDisclaimer": "La configuració següent no s'aplica als subtítols gràfics esmentats anteriorment ni als subtítols ASS/SSA que incrusten els seus propis estils.", "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "Aquests ajustos s'apliquen també a qualsevol reproducció Google Cast iniciada per aquest dispositiu.", "Subtitle": "Subtítol", - "StopRecording": "Aturar la gravació", - "StopPlayback": "Aturar la reproducció", + "StopRecording": "Atura la gravació", + "StopPlayback": "Atura la reproducció", "Sports": "Esports", "SpecialFeatures": "Característiques especials", - "SortChannelsBy": "Ordenar els canals per", - "SortByValue": "Ordenar per {0}", - "Sort": "Ordenar", - "SmartSubtitlesHelp": "Subtítols que concordin amb la preferència d'idioma seran carregats quan l'àudio està en un idioma estranger.", + "SortChannelsBy": "Ordena els canals per", + "SortByValue": "Ordena per {0}", + "Sort": "Ordre", + "SmartSubtitlesHelp": "Els subtítols que coincideixin amb l'idioma preferit es carregaran quan l'àudio estigui en un idioma estranger.", "Smart": "Intel·ligent", "Smaller": "Menor", "SmallCaps": "Versaletes", @@ -952,17 +952,17 @@ "ServerNameIsShuttingDown": "El servidor en {0} s'està tancant.", "ServerNameIsRestarting": "El servidor en {0} s'està reiniciant.", "SeriesYearToPresent": "{0} - Ara", - "SeriesDisplayOrderHelp": "Ordenar episodis per data d'emissió, ordre del DVD o numeració absoluta.", + "SeriesDisplayOrderHelp": "Ordena els episodis per data d'emissió, ordre dels DVD o numeració absoluta.", "Series": "Sèrie", - "SelectServer": "seleccionar servidor", + "SelectServer": "Seleccioneu un servidor", "SelectAdminUsername": "Seleccioneu un nom d'usuari per al compte d'administrador.", "Season": "Temporada", "SearchResults": "Resultats de la cerca", "Screenshot": "Captura", - "Schedule": "Programar", + "Schedule": "Programa", "ScanLibrary": "S'estan escanejant les mediateques", "ScanForNewAndUpdatedFiles": "Cerca fitxers nous i actualitzats", - "SaveSubtitlesIntoMediaFoldersHelp": "L'emmagatzematge de subtítols al costat dels arxius de vídeo que els permetrà ser manejats amb més facilitat.", + "SaveSubtitlesIntoMediaFoldersHelp": "L'emmagatzematge dels subtítols amb els fitxers de vídeo permetrà gestionar-los amb més facilitat.", "SaveSubtitlesIntoMediaFolders": "Desa els subtítols en els directoris de continguts multimèdia", "NoSubtitlesHelp": "Els subtítols no es carregaran per defecte. Encara es poden activar de forma manual durant la reproducció.", "Normal": "Normal", @@ -1567,7 +1567,7 @@ "TypeOptionPluralEpisode": "Episodis", "TypeOptionPluralBook": "Llibres", "Track": "Pista", - "Print": "Imprimeix", + "Print": "Impremta", "PreviousChapter": "Episodi anterior", "PlaybackErrorPlaceHolder": "Això és un marcador de posició per a suports físics que Jellyfin no pot reproduir. Inseriu el disc per a reproduir-lo.", "OtherArtist": "Altres artistes", @@ -1582,7 +1582,7 @@ "Cursive": "Cursiva", "Console": "Terminal", "ThemeVideo": "Vídeo temàtic", - "ThemeSong": "Tema musical", + "ThemeSong": "Sintonia", "Sample": "Mostra", "Scene": "Escena", "Interview": "Entrevista", @@ -1593,11 +1593,11 @@ "AudioIsExternal": "El flux d'àudio és extern", "IntelLowPowerEncHelp": "La codificació de baixa potència pot mantenir la sincronització CPU-GPU innecessària. A Linux s'han de desactivar si el microprogramari i915 HuC no està configurat.", "PreferSystemNativeHwDecoder": "Preferiu els descodificadors de maquinari DXVA o VA-API natius del SO", - "Typewriter": "Màquina d'escriure", + "Typewriter": "Mecanogràfica", "TypeOptionPluralSeries": "Sèries", "TypeOptionPluralBoxSet": "Col·leccions", "TypeOptionPluralAudio": "Àudios", - "StoryArc": "Arc de la història", + "StoryArc": "Arc argumental", "ShowParentImages": "Mostra imatges de sèrie", "SetUsingLastTracksHelp": "Intenta configurar la pista de subtítols/àudio amb la coincidència més semblant a l'últim vídeo.", "SetUsingLastTracks": "Establiu pistes de subtítols/àudio amb l'element anterior", @@ -1705,7 +1705,7 @@ "LabelParallelImageEncodingLimitHelp": "Nombre màxim de codificacions d'imatge que es poden executar en paral·lel. Si es deixa buit, es triarà un límit en funció del nombre de nuclis.", "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Els extres sovint tenen els mateixos noms dels títols als que pertanyen, marqueu-ho per fer-los servir de totes maneres.", "SaveRecordingNFO": "Desa les metadades EPG d'enregistrament a NFO", - "SaveRecordingImages": "Guarda les imatges d'enregistrament EPG", + "SaveRecordingImages": "Desa les imatges d'enregistrament EPG", "SaveRecordingImagesHelp": "Desa les imatges del proveïdor de llistes EPG amb el contingut multimèdia.", "SubtitleBlue": "Blau", "SubtitleCyan": "Cian", @@ -1714,7 +1714,7 @@ "SubtitleMagenta": "Magenta", "SubtitleRed": "Vermell", "SubtitleYellow": "Groc", - "StereoDownmixAlgorithmHelp": "Algoritme utilitzat per barrejar àudio multicanal a estèreo.", + "StereoDownmixAlgorithmHelp": "Algoritme fet servir per a barrejar l'àudio multicanal a estèreo.", "DownloadAll": "Descarrega-ho tot", "LabelEnableAudioVbr": "Habilita la codificació d'àudio VBR", "LabelEnableAudioVbrHelp": "La taxa variable de bits ofereix una millor relació entre la qualitat i velocitat mitjana de bits, però en alguns casos rars pot provocar problemes de compatibilitat i de memòria intermèdia.", @@ -1883,10 +1883,10 @@ "PlaylistPublicDescription": "Permet que aquesta llista de reproducció sigui vista per qualsevol usuari registrat.", "HeaderLyricDownloads": "Descàrregues de lletres", "SaveLyricsIntoMediaFolders": "Desa les lletres al directoris multimèdia", - "SaveLyricsIntoMediaFoldersHelp": "Emmagatzemar les lletres al costat dels fitxers d'àudio permetrà gestionar-les més fàcilment.", + "SaveLyricsIntoMediaFoldersHelp": "Emmagatzemar les lletres amb els fitxers d'àudio permetrà gestionar-les més fàcilment.", "LabelSelectPreferredTranscodeVideoAudioCodec": "Còdec d'àudio de transcodificació preferit en la reproducció de vídeo", "LibraryScanFanoutConcurrencyHelp": "Nombre màxim de tasques paral·leles durant les exploracions de la mediateca. Si es deixa buit, es triarà un límit basat en el nombre de nuclis del vostre sistema. AVÍS: establir aquest número massa alt pot causar problemes amb els sistemes de fitxers de xarxa; si us dona problemes, abaixeu aquest número.", - "SelectPreferredTranscodeVideoAudioCodecHelp": "Seleccioneu el còdec d'àudio preferit per transcodificar per al contingut de vídeo. Si el còdec preferit no és compatible, el servidor utilitzarà el següent millor còdec disponible.", + "SelectPreferredTranscodeVideoAudioCodecHelp": "Seleccioneu el còdec d'àudio preferit per a transcodificar per al contingut de vídeo. Si el còdec preferit no és compatible, el servidor utilitzarà el següent millor còdec disponible.", "LibraryScanFanoutConcurrency": "Límit de tasques d'exploració paral·leles per a les mediateques", "Penciller": "Dibuixant", "Inker": "Entintador", @@ -1908,7 +1908,7 @@ "PluginLoadConfigError": "S'ha produït un error en obtenir les pàgines de configuració del complement.", "PluginLoadRepoError": "S'ha produït un error en obtenir els detalls del repositori del complement.", "PluginUninstallError": "S'ha produït un error en desinstal·lar el complement.", - "SelectPreferredTranscodeVideoCodecHelp": "Seleccioneu el còdec de vídeo preferit per transcodificar. Si el còdec preferit no és compatible, el servidor utilitzarà el següent millor còdec disponible.", + "SelectPreferredTranscodeVideoCodecHelp": "Seleccioneu el còdec de vídeo preferit per a transcodificar. Si el còdec preferit no és compatible, el servidor utilitzarà el següent millor còdec disponible.", "PasswordMissingSaveError": "La nova contrasenya no pot ser buida.", "PreviewLyrics": "Previsualitza lletres", "Reset": "Restableix", @@ -1921,7 +1921,7 @@ "HeaderUploadLyrics": "Pujada de lletres", "LabelIsSynced": "Està sincronitzat", "NoLyricsSearchResultsFound": "No s'han trobat lletres.", - "SearchForLyrics": "Cercar lletres", + "SearchForLyrics": "Cerca lletres", "LibraryInvalidItemIdError": "La mediateca es troba en un estat no vàlid, i no es pot editar. És possible que hàgiu trobat un error: la ruta de la base de dades no és una ruta correcta en el sistema de fitxers.", "LabelTrickplayKeyFrameOnlyExtraction": "Només genera imatges dels fotogrames clau", "LabelTrickplayKeyFrameOnlyExtractionHelp": "Només extreure fotogrames clau per a un processament significativament més ràpid amb una sincronització menys precisa. Si el descodificador de maquinari configurat no admet aquest mode, en el seu lloc s'utilitzarà el descodificador per programari.", @@ -2004,12 +2004,12 @@ "Retry": "Torna a provar-ho", "LogLoadFailure": "Error al carregar el registre. És probable que encara s'estigui escrivint en ell.", "MetadataNfoLoadError": "No s'han pogut carregar les configuracions de metadades NFO", - "SettingsPageLoadError": "No s'ha pogut carregar la pàgina de configuracions", + "SettingsPageLoadError": "No s'ha pogut carregar la pàgina de configuració", "DisplayLoadError": "S'ha produït un error en carregar les dades de configuració de la pantalla.", "HeaderPageNotFound": "Pàgina no trobada", "PageNotFound": "Aquesta no és la pàgina que esteu cercant.", "MetadataImagesLoadError": "No s'han pogut carregar les configuracions de metadades", - "StreamCountExceedsLimit": "El número de flux excedeix el límit", + "StreamCountExceedsLimit": "El nombre de fluxos excedeix el límit", "RetryWithGlobalSearch": "Reintenta amb una cerca global", "LabelGroupShowsIntoCollections": "Agrupa sèries en col·leccions", "LabelGroupShowsIntoCollectionsHelp": "Les sèries que estiguin dins d'una col·lecció es mostraran com un únic element agrupat quan es mostrin les llistes de sèries.", @@ -2044,13 +2044,13 @@ "MessageBackupInProgress": "Còpia de seguretat en progrés", "MessageRestoreInProgress": "Restauració en procés", "Success": "Èxit", - "HeaderBackups": "Cópies de seguretat", + "HeaderBackups": "Còpies de seguretat", "LabelProgramData": "Dades del programa", "MessageRestoreSuccess": "Restauració completada exitosament", "StorageType.Fixed": "Arreglat", "StorageType.Network": "Xarxa", "StorageType.Ram": "RAM", - "StorageType.Removable": "Retirable", + "StorageType.Removable": "Extraïble", "StorageType.Unknown": "Desconegut", "PluginsLoadError": "S'ha produït un error en carregar els complements.", "ButtonLearnMore": "Saber més", From 0987d39eb3abf06f229cc8b5ee74834671edd945 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Sat, 28 Jun 2025 15:24:45 -0400 Subject: [PATCH 574/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 102 ++++++++++++++++++++++---------------------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 00829c0d7..9e9497968 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -337,7 +337,7 @@ "LabelSaveLocalMetadataHelp": "Desar les imatges als directoris multimèdia les ubicarà a un lloc on podran ser editades fàcilment.", "LabelScreensaver": "Estalvi de pantalla", "LabelSeasonNumber": "Temporada", - "LabelSelectFolderGroups": "Agrupa automàticament el contingut dels següents directoris en vistes com 'Pel·lícules', 'Música' i 'TV'", + "LabelSelectFolderGroups": "Agrupa automàticament el contingut dels següents directoris en vistes com 'Pel·lícules', 'Música' i 'Televisió'", "LabelSelectFolderGroupsHelp": "Els directoris desmarcats seran mostrats individualment en la seva pròpia vista.", "LabelSelectUsers": "Selecciona usuaris", "LabelSelectVersionToInstall": "Seleccioneu la versió a instal·lar", @@ -422,11 +422,11 @@ "OnlyForcedSubtitlesHelp": "Només es carregaran aquells subtítols marcats com a forçats.", "OptionAdminUsers": "Administradors", "OptionAllUsers": "Tots els usuaris", - "OptionAllowBrowsingLiveTv": "Permet l'accés a TV en directe", + "OptionAllowBrowsingLiveTv": "Permet l'accés a la televisió en directe", "OptionAllowContentDownloading": "Permetre descàrrega de mitjans", "OptionAllowLinkSharing": "Permet compartir a les xarxes socials", "OptionAllowLinkSharingHelp": "Només es compartiran les pàgines web contenint informació multimèdia. En cap cas es comparteixen fitxers públicament. Les comparticions estan limitades per temps i expiraran després de {0} dies.", - "OptionAllowManageLiveTv": "Permet gestionar l'enregistrament de TV en directe", + "OptionAllowManageLiveTv": "Permet gestionar l'enregistrament de la televisió en directe", "OptionAllowMediaPlayback": "Permet la reproducció multimèdia", "OptionAllowRemoteControlOthers": "Permet el control remot d'altres usuaris", "OptionAllowRemoteSharedDevices": "Permet el control remot dels dispositius compartits", @@ -445,7 +445,7 @@ "OptionEnableAccessFromAllDevices": "Habilita l'accés des de tots els dispositius", "OptionEnableAccessToAllChannels": "Habilita l'accés a tots els canals", "OptionEnableAccessToAllLibraries": "Habilita l'accés a totes les mediateques", - "OptionEnableExternalContentInSuggestionsHelp": "Permet incloure tràilers d'internet i programes de TV en directe entre el contingut suggerit.", + "OptionEnableExternalContentInSuggestionsHelp": "Permet incloure tràilers d'internet i programes de televisió en directe entre el contingut suggerit.", "OptionEquals": "Equival", "OptionEveryday": "Cada dia", "OptionExternallyDownloaded": "Descàrrega externa", @@ -542,7 +542,7 @@ "TabLatest": "Novetats", "TabMusic": "Música", "TabMyPlugins": "Els meus complements", - "TabNetworks": "Cadenes de TV", + "TabNetworks": "Cadenes de televisió", "TabNfoSettings": "Preferències NFO", "TabNotifications": "Notificacions", "TabOther": "Altres", @@ -556,7 +556,7 @@ "Tags": "Etiquetes", "TellUsAboutYourself": "Expliqueu-nos com sou", "TheseSettingsAffectSubtitlesOnThisDevice": "Aquestes preferències afecten els subtítols d'aquest dispositiu", - "ThisWizardWillGuideYou": "Aquest assistent us guiarà durant el procés d'instal·lació. Per començar, si us plau, entreu el nom del servidor i seleccioneu el vostre idioma preferit.", + "ThisWizardWillGuideYou": "Aquest assistent us guiarà durant el procés d'instal·lació. Per començar, entreu el nom del servidor i seleccioneu el vostre idioma preferit.", "Thursday": "Dijous", "TitlePlayback": "Reproducció", "TrackCount": "{0} pistes", @@ -566,17 +566,17 @@ "Unmute": "De-silencia", "Unrated": "Sense valorar", "Up": "Amunt", - "UserProfilesIntro": "El Jellyfin inclou suport per a perfils d'usuari amb configuració de pantalla granular, estat de reproducció i controls parentals.", + "UserProfilesIntro": "Jellyfin inclou suport per a perfils d'usuari amb configuració de pantalla granular, estat de reproducció i controls parentals.", "ValueEpisodeCount": "{0} episodis", - "ValueMusicVideoCount": "{0} vídeos musicals", - "ValueOneMusicVideo": "1 vídeo musical", + "ValueMusicVideoCount": "{0} videoclips", + "ValueOneMusicVideo": "1 videoclip", "ValueSpecialEpisodeName": "Especial - {0}", "ViewAlbum": "Mostra'n l'àlbum", - "ViewPlaybackInfo": "Veure informació de reproducció", + "ViewPlaybackInfo": "Mostra la informació de reproducció", "Watched": "Vist", "Wednesday": "Dimecres", - "WelcomeToProject": "Et donem la benvinguda a Jellyfin!", - "WizardCompleted": "Això és tot el que necessitem per ara. Jellyfin ha començat a recollir informació de la vostra mediateca. Mireu-vos alguna de les nostres apps i llavors feu clic a Finalitzar per veure el Tauler de control.", + "WelcomeToProject": "Us donem la benvinguda a Jellyfin!", + "WizardCompleted": "Això és tot el que necessitem per ara. Jellyfin ha començat a recollir informació de la vostra mediateca. Mireu-vos alguna de les nostres apps i llavors feu clic a Finalitza per veure el Tauler de control.", "Writer": "Escriptor", "XmlTvKidsCategoriesHelp": "Els programes amb aquestes categories es mostraran com a programes infantils. Separa'n varis emprant '|'.", "XmlTvMovieCategoriesHelp": "Els programes amb aquestes categories es mostraran com a pel·lícules. Separa'n varis emprant '|'.", @@ -645,7 +645,7 @@ "BurnSubtitlesHelp": "Determina si el servidor hauria de gravar els subtítols. Evitant això millorarà molt el rendiment. Selecciona Automàtic per gravar formats basats en imatges (VobSub, PGS, SUB, IDX) i certs subtítols ASS o SSA.", "Browse": "Navega", "BoxRear": "Capsa (darrere)", - "BoxSet": "Col·lecció", + "BoxSet": "Cofre", "Box": "Capsa", "BookLibraryHelp": "Els àudiollibres i llibres de text funcionen. Reviseu la {0} guia de denominació de llibres {1}.", "Backdrops": "Fons", @@ -695,7 +695,7 @@ "EveryNDays": "Cada {0} dies", "ErrorSavingTvProvider": "S'ha produït un error en desar el proveïdor de televisió. Assegureu-vos que sigui accessible i torneu-ho a provar.", "ErrorStartHourGreaterThanEnd": "L'hora de finalització ha de ser superior a l'hora d'inici.", - "ErrorGettingTvLineups": "S'ha produït un error en descarregar les programacions de TV. Comproveu que la vostra informació sigui correcta i torneu-ho a provar.", + "ErrorGettingTvLineups": "S'ha produït un error en descarregar les programacions de televisió. Comproveu que la vostra informació sigui correcta i torneu-ho a provar.", "ErrorDeletingItem": "S'ha produït un error en suprimir l'element del servidor. Comproveu que Jellyfin tingui accés d’escriptura a la carpeta multimèdia i torneu-ho a provar.", "ErrorAddingXmlTvFile": "S'ha produït un error en accedir al fitxer XMLTV. Assegureu-vos que el fitxer existeix i torneu-ho a provar.", "ErrorAddingTunerDevice": "S'ha produït un error en afegir el dispositiu sintonitzador. Assegureu-vos que sigui accessible i torneu-ho a provar.", @@ -719,7 +719,7 @@ "EasyPasswordHelp": "El vostre codi Easy PIN s'utilitza per accedir fora de línia als clients compatibles i també es pot utilitzar per iniciar la sessió a la xarxa fàcilment.", "DrmChannelsNotImported": "Els canals amb DRM no s’importaran.", "DownloadsValue": "{0} descàrregues", - "DisplayMissingEpisodesWithinSeasonsHelp": "Això també s'ha d'activar per a les mediateques de TV a la configuració del servidor.", + "DisplayMissingEpisodesWithinSeasonsHelp": "Això també s'ha d'activar per a les mediateques de televisió a la configuració del servidor.", "DisplayInOtherHomeScreenSections": "Mostra a les seccions de la pantalla d'inici, com ara a 'Contingut multimèdia afegit darrerament' i 'Continueu mirant-ho'", "DisplayInMyMedia": "Mostra a la pantalla principal", "Display": "Pantalla", @@ -828,7 +828,7 @@ "SubtitleCodecNotSupported": "El còdec de subtítols no s'admet", "ContainerNotSupported": "El contenidor no està suportat", "AudioCodecNotSupported": "El còdec d'àudio no és compatible", - "EnableGamepadHelp": "Detecta l'entrada de qualsevol comandament connectat. (Requereix el mode de visualització \"TV\")", + "EnableGamepadHelp": "Detecta l'entrada de qualsevol comandament connectat. (Requereix el mode de visualització \"Televisió\")", "LabelEnableGamepad": "Habilita el comandament de videojocs", "Controls": "Controls", "AllowVppTonemappingHelp": "Mapeig de to basat en controladors Intel complets. Actualment només funciona amb cert maquinari amb vídeos HDR10. Això té una prioritat més alta en comparació amb una altra implementació d'OpenCL.", @@ -854,32 +854,32 @@ "LabelPlaybackInfo": "Informació de reproducció", "RemuxHelp2": "Remux utilitza molt poca potència de processament amb una qualitat multimèdia sense pèrdues.", "RemuxHelp1": "El contingut multimèdia es troba en un contenidor de fitxers incompatible (MKV, AVI, WMV, etc.), però tant el flux de vídeo com el flux d'àudio són compatibles amb el dispositiu. El contingut multimèdia es reempaquetarà sobre la marxa i sense pèrdues, abans d'enviar-se al dispositiu.", - "AspectRatioFill": "Estirar", - "AspectRatioCover": "Zoom", - "EnableFallbackFontHelp": "Habilitar fonts alternes d'encàrrec. Això es pot evitar el problema de renderitzat de subtítols incorrectes.", - "EnableFallbackFont": "Habilitar fonts de replegament", - "LabelFallbackFontPathHelp": "Aquestes fonts sont utilitzades per alguns clients per generar subtítols. Si us plau, consulteu la documentació per a més informació.", - "LabelFallbackFontPath": "Replegament ruta de la carpeta de la font", - "HeaderSelectFallbackFontPathHelp": "Examineu o introduïu la ruta de la carpeta de fonts que s'utilitzaran per renderitzar els subtítols ASS/SSA.", - "HeaderSelectFallbackFontPath": "Seleccioneu la ruta de la carpeta de fonts", + "AspectRatioFill": "Estira", + "AspectRatioCover": "Escala", + "EnableFallbackFontHelp": "Habilita tipus de lletra alternatives personalitzades. Això pot evitar el problema de renderitzat incorrecte de subtítols.", + "EnableFallbackFont": "Habilita els tipus de lletra de contingència", + "LabelFallbackFontPathHelp": "Aquests tipus de lletra són fetes servir per a alguns clients per a generar subtítols. Consulteu la documentació per a més informació.", + "LabelFallbackFontPath": "Ruta del directori de tipus de lletres de contingència", + "HeaderSelectFallbackFontPathHelp": "Examineu o introduïu la ruta del directori de tipus de lletres que s'utilitzaran per renderitzar els subtítols ASS/SSA.", + "HeaderSelectFallbackFontPath": "Seleccioneu la ruta de la ruta de tipus de lletres", "Yesterday": "Ahir", - "Yes": "Si", + "Yes": "Sí", "Yadif": "Yet Another DeInterlacing Filter (YADIF)", - "XmlTvPathHelp": "Una ruta a un arxiu XMLTV. Jellyfin llegirà aquesta imatge i comprovar periòdicament si hi ha actualitzacions. Vostè és responsable de crear i actualitzar l'arxiu.", + "XmlTvPathHelp": "Una ruta a un arxiu XMLTV. Jellyfin llegirà aquest fitxer i comprovarà periòdicament si hi ha actualitzacions. Sou el responsable de crear i actualitzar l'arxiu.", "XmlDocumentAttributeListHelp": "Aquests atributs s'apliquen a l'element arrel de cada resposta XML.", "Writers": "Escriptors", - "WriteAccessRequired": "El Jellyfin necessita accés d'escriptura a aquesta carpeta. Garanteix l'accés d'escriptura i torna-ho a intentar.", + "WriteAccessRequired": "Jellyfin necessita accés d'escriptura a aquest directori. Garantiu l'accés d'escriptura i torneu-ho a intentar.", "Whitelist": "Llista blanca", - "WeeklyAt": "{0} S a {1}", + "WeeklyAt": "Tots els {0} a {1}", "ViewAlbumArtist": "Mostra l'artista de l'àlbum", - "VideoAudio": "Vídeo Audio", + "VideoAudio": "Pista d'àudio", "Video": "Vídeo", "Vertical": "Vertical", "ValueVideoCodec": "Vídeo Codec: {0}", "ValueTimeLimitSingleHour": "Límit de temps: 1 hora", "ValueTimeLimitMultiHour": "Termini: {0} hores", "ValueSongCount": "{0} cançons", - "ValueSeriesCount": "{0} sèrie", + "ValueSeriesCount": "{0} sèries", "ValueSeconds": "{0} segons", "ValueOneSong": "1 cançó", "ValueOneSeries": "1 sèrie", @@ -894,23 +894,23 @@ "ValueCodec": "Codec: {0}", "ValueAudioCodec": "Audio Codec: {0}", "ValueAlbumCount": "{0} àlbums", - "UserAgentHelp": "Subministrar una capçalera HTTP 'User-Agent' personalitzat.", + "UserAgentHelp": "Subministrar una capçalera HTTP 'User-Agent' personalitzada.", "UseEpisodeImagesInNextUpHelp": "Les seccions 'A continuació' i 'Continueu mirant' utilitzaran imatges episodi com miniatures en lloc de la imatge principal de la sèrie.", - "UseEpisodeImagesInNextUp": "Utilitza imatges d'episodi en les seccions 'A continuació' i 'Continueu veient'", - "UseDoubleRateDeinterlacingHelp": "Aquesta configuració utilitza el tipus de camp quan el desentrellaçat, sovint referit com el desentrellaçat Bob, el que duplica la taxa de fotogrames de vídeo per proporcionar moviment complet com el que es veu quan es visualitza vídeo entrellaçat en un televisor.", - "UseDoubleRateDeinterlacing": "El doble de la velocitat de fotogrames quan el desentrellaçat", - "Upload": "Pujar", - "UnsupportedPlayback": "Jellyfin no pot desxifrar el contingut protegit per DRM, però tot el contingut serà tractat independentment, incloent títols protegits. Alguns fitxers poden aparèixer a causa de completament negre xifrat o altres característiques no compatibles, com ara títols interactius.", + "UseEpisodeImagesInNextUp": "Fes servir imatges d'episodis en les seccions 'A continuació' i 'Continueu mirant'", + "UseDoubleRateDeinterlacingHelp": "Aquesta configuració fa servir la velocitat de camp quan en desentrellaçar, sovint referit com el desentrellaçat bob, que duplica la taxa de fotogrames de vídeo per a proporcionar un moviment continu com el que es veu en mirar un vídeo entrellaçat en un televisor.", + "UseDoubleRateDeinterlacing": "El doble de fotogrames per segon en entrellaçar", + "Upload": "Puja", + "UnsupportedPlayback": "Jellyfin no pot desxifrar el contingut protegit per DRM, però tot el contingut serà tractat independentment, incloent títols protegits. Alguns fitxers poden aparèixer completament negres degut al xifrat o altres característiques no compatibles, com ara títols interactius.", "Unplayed": "No reproduït", "Uniform": "Uniforme", - "TvLibraryHelp": "Revisar el {0} de TV guia de noms {1}.", - "TV": "TV", + "TvLibraryHelp": "Revisa la {0}guia de noms de la programació de televisió{1}.", + "TV": "Televisió", "Transcoding": "Transcodificació", "TonemappingRangeHelp": "Seleccioneu el rang de color de sortida. Auto és el mateix que el rang d'entrada.", - "TonemappingAlgorithmHelp": "Mapeig de tons pot ser afinat. Si vostè no està familiaritzat amb aquestes opcions, simplement mantingui el valor per omissió. El valor recomanat és 'BT.2390'.", - "TitleHostingSettings": "Ajustaments de Hosting", - "TitleHardwareAcceleration": "Acceleració per hardware", - "ThumbCard": "Targeta miniatura", + "TonemappingAlgorithmHelp": "El mapeig de tons es pot afinar amb precisió. Si no esteu familiaritzat amb aquestes opcions, millor que mantingueu el valor predeterminat. El valor recomanat és 'BT.2390'.", + "TitleHostingSettings": "Configuració d'allotjament", + "TitleHardwareAcceleration": "Acceleració per maquinari", + "ThumbCard": "Targeta de miniatura", "Thumb": "Miniatura", "ThemeVideos": "Vídeos temàtics", "ThemeSongs": "Sintonies", @@ -1066,7 +1066,7 @@ "ManageRecording": "Maneig d'enregistrament", "ManageLibrary": "Gestió de la mediateca", "Logo": "Logotip", - "LiveTV": "TV en directe", + "LiveTV": "Televisió en directe", "LiveBroadcasts": "Emissions en directe", "ListPaging": "{0} - {1} de {2}", "List": "Llista", @@ -1099,7 +1099,7 @@ "LabelUDPPortRange": "UDP Comunicacions de Camp", "LabelTypeText": "Text", "LabelTypeMetadataDownloaders": "Descarregadors de metadades ({0})", - "LabelTVHomeScreen": "Pantalla d'inici en mode TV", + "LabelTVHomeScreen": "Pantalla d'inici en mode televisió", "LabelTunerType": "Tipus de sintonitzador", "LabelTunerIpAddress": "Adreça IP del sintonitzador", "LabelTranscodingThreadCountHelp": "Seleccioneu el nombre màxim de fils que pot utilitzar la transcodificació. La reducció del nombre de fils disminuirà l'ús de la CPU, però es possible que no transcodifiqui prou ràpid per a una reproducció fluïda.", @@ -1525,12 +1525,12 @@ "HeaderMoreLikeThis": "Similars", "HeaderMedia": "Contingut multimèdia", "HeaderLoginFailure": "Error en l'inici de sessió", - "HeaderLiveTvTunerSetup": "Configuració del sintonitzador de TV", + "HeaderLiveTvTunerSetup": "Configuració del sintonitzador de televisió", "HeaderKodiMetadataHelp": "Per activar o desactivar les metadades NFO, editeu una mediateca i busqueu la secció d'Estalviadors de metadades.", "HeaderImageOptions": "Opcions de les imatges", "HeaderIdentifyItemHelp": "Introduïu un o més criteris de cerca. Elimineu criteris per a augmentar els resultats de cerca.", "HeaderHttpsSettings": "Configuració de HTTPS", - "HeaderGuideProviders": "Proveïdors de dades de la guia de TV", + "HeaderGuideProviders": "Proveïdors de dades de la guia de televisió", "HeaderForKids": "Per als infants", "HeaderFetcherSettings": "Configuració del capturador", "HeaderError": "Error", @@ -1560,7 +1560,7 @@ "ContainerBitrateExceedsLimit": "El còdec de vídeo excedeix el límit", "TypeOptionPluralVideo": "Vídeos", "TypeOptionPluralSeason": "Temporades", - "TypeOptionPluralMusicVideo": "Vídeos Musicals", + "TypeOptionPluralMusicVideo": "Videoclips", "TypeOptionPluralMusicArtist": "Artistes musicals", "TypeOptionPluralMusicAlbum": "Àlbums de música", "TypeOptionPluralMovie": "Pel·lícules", @@ -1595,7 +1595,7 @@ "PreferSystemNativeHwDecoder": "Preferiu els descodificadors de maquinari DXVA o VA-API natius del SO", "Typewriter": "Mecanogràfica", "TypeOptionPluralSeries": "Sèries", - "TypeOptionPluralBoxSet": "Col·leccions", + "TypeOptionPluralBoxSet": "Cofres", "TypeOptionPluralAudio": "Àudios", "StoryArc": "Arc argumental", "ShowParentImages": "Mostra imatges de sèrie", @@ -1863,7 +1863,7 @@ "DeleteLyrics": "Elimina les lletres", "HeaderNoLyrics": "No s'ha trobat cap lletra", "Lyrics": "Lletres", - "ViewLyrics": "Veure lletres", + "ViewLyrics": "Mostra les lletres", "SavePassword": "Desa la contrasenya", "EnableDts": "Habilita DTS (DCA)", "PlaylistError.AddFailed": "S'ha produït un error en agregar a la llista de reproducció", @@ -1979,9 +1979,9 @@ "LabelMediaSegmentsType": "{0} Segments", "PreferNonstandardArtistsTag": "Prioritza l'etiqueta ARTISTS si es troba disponible", "ReplaceTrickplayImages": "Substitueix les imatges de previsualització existents", - "UseCustomTagDelimiters": "Utilitza delimitador d'etiquetes personalitzat", + "UseCustomTagDelimiters": "Fes servir un delimitador personalitzat d'etiquetes", "PreferNonstandardArtistsTagHelp": "Fes servir l'etiqueta no estàndard ARTISTS en lloc de l'etiqueta ARTIST quan estigui disponible.", - "UseCustomTagDelimitersHelp": "Separa les etiquetes artista/gènere amb caràcters personalitzats.", + "UseCustomTagDelimitersHelp": "Separa les etiquetes d'artista/gènere amb caràcters personalitzats.", "RenderPgsSubtitle": "Renderitzat experimental de subtítols PGS", "VideoCodecTagNotSupported": "L'etiqueta del còdec de vídeo no és compatible", "RenderPgsSubtitleHelp": "Determina si el client ha de renderitzar els subtítols PGS enlloc de fer servir els subtítols incrustats. Això pot evitar la transcodificació de part del servidor a canvi del rendiment de renderitzat de part del client.", From a0091546f9fba6760c759df3d6065898935ee7f6 Mon Sep 17 00:00:00 2001 From: Acrotos Date: Sat, 28 Jun 2025 16:07:52 -0400 Subject: [PATCH 575/645] Translated using Weblate (Romanian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/ --- src/strings/ro.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/strings/ro.json b/src/strings/ro.json index 28812a125..25afc0e5c 100644 --- a/src/strings/ro.json +++ b/src/strings/ro.json @@ -244,7 +244,7 @@ "ButtonOpen": "Deschide", "ButtonParentalControl": "Control parental", "ButtonPause": "Pauză", - "ConfirmEndPlayerSession": "Dorești să oprești serverul Jellyfin pe {0}?", + "ConfirmEndPlayerSession": "Doriti sa inchideti Jellyfin pe {0}?", "Connect": "Conectare", "ContinueWatching": "Continuă vizionarea", "DatePlayed": "Data redării", @@ -897,7 +897,7 @@ "MessageDeleteTaskTrigger": "Sigur doriți să ștergeți acest declanșator de activitate?", "MessageCreateAccountAt": "Crează un cont la {0}", "MessageContactAdminToResetPassword": "Vă rugăm să contactați administratorul de sistem pentru a vă reseta parola.", - "MessageConfirmShutdown": "Sigur doriți să opriți serverul?", + "MessageConfirmShutdown": "Sigur dorești sa inchizi serverul?", "MessageConfirmRevokeApiKey": "Sigur doriți să revocați această cheie API? Conexiunea aplicației la acest server va fi terminată brusc.", "MessageConfirmRestart": "Sigur doriți să restartați Jellyfin?", "MessageConfirmRemoveMediaLocation": "Sigur doriți să eliminați această locație?", @@ -1381,7 +1381,7 @@ "Authorize": "Autorizează", "LabelMaxMuxingQueueSizeHelp": "Numărul maxim de pachete care pot fi tamponate în așteptarea inițializării tuturor fluxurilor. Încercați să o măriți dacă întâmpinați încă o eroare „Prea multe pachete tamponate pentru fluxul de ieșire” în jurnalele FFmpeg. Valoarea recomandată este 2048.", "LabelMaxMuxingQueueSize": "Dimensiunea maximă a cozii de mux", - "LabelTonemappingParamHelp": "Reglați algoritmul de mapare a tonurilor. Valorile recomandate și implicite sunt NaN. În general, lăsați-l necompletat.", + "LabelTonemappingParamHelp": "Ajustați algoritmul de mapare a tonurilor. In general, lasati-l gol.", "LabelTonemappingParam": "Parametrii mapării tonurilor", "LabelTonemappingPeakHelp": "În schimb, înlocuiți valoarea metadatelor încorporate pentru semnalul de intrare cu această valoare de vârf. Valoarea implicită este 100 (1000 nit).", "LabelTonemappingPeak": "Vârful mapării tonurilor", @@ -2061,5 +2061,6 @@ "Create": "Crează", "BackupsPageLoadError": "A eșuat să încarce pagina de copii de rezervă", "ButtonCreateBackup": "Crează copie de rezervă", - "LabelImageCache": "Cache imagine" + "LabelImageCache": "Cache imagine", + "LiveTVPageLoadError": "Nu s-a putut incarca pagina de înregistrari" } From 2508a3e45bdd34096310af7647a1ddeaf2a75da4 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Sat, 28 Jun 2025 17:28:27 -0400 Subject: [PATCH 576/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 9e9497968..384fa96da 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -738,9 +738,9 @@ "ButtonActivate": "Activa", "Authorize": "Autoritza", "LabelServerName": "Nom del servidor", - "MessageChromecastConnectionError": "El seu receptor de Google Cast no pot contactar amb el servidor de Jellyfin. Comproveu la connexió i torneu-ho a provar.", - "MessagePlaybackError": "Hi ha hagut un problema reproduïnt aquest arxiu al teu receptor de Google Cast.", - "EnableEnhancedNvdecDecoder": "Activa el decodificador NVDEC millorat", + "MessageChromecastConnectionError": "El receptor de Google Cast no pot contactar amb el servidor de Jellyfin. Comproveu la connexió i torneu-ho a provar.", + "MessagePlaybackError": "S'ha produït un error en reproduir aquest fitxer en el receptor de Google Cast.", + "EnableEnhancedNvdecDecoder": "Habilita el descodificador NVDEC millorat", "DefaultSubtitlesHelp": "Els subtítols es carreguen en funció de les marques forçades i per defecte de les metadades incrustades. Les preferències d'idioma es consideren quan hi ha diverses opcions disponibles.", "DeathDateValue": "Mort: {0}", "DashboardVersionNumber": "Versió: {0}", @@ -753,7 +753,7 @@ "ButtonPlayer": "Reproductor", "ButtonCast": "Transmet al dispositiu", "ApiKeysCaption": "Llista de les claus API activades actualment", - "AllowTonemappingHelp": "El mapeig de tons pot transformar el rang dinàmic d'un vídeo d'HDR a SDR mantenint els detalls i els colors de la imatge, que són informació molt important per representar l'escena original. Actualment només funciona amb vídeos 10 bit HDR10, HLG o DoVi. Això requereix el temps d'execució GPGPU corresponent.", + "AllowTonemappingHelp": "El mapatge de tons pot transformar el rang dinàmic d'un vídeo d'HDR a SDR mantenint els detalls i els colors de la imatge, que són informació molt important per representar l'escena original. Actualment només funciona amb vídeos 10 bit HDR10, HLG o DoVi. Això requereix el temps d'execució GPGPU corresponent.", "ErrorPleaseSelectLineup": "Trieu una alineació i torneu-ho a provar. Si no hi ha cap formació disponible, comproveu que el vostre nom d’usuari, contrasenya i codi postal siguin correctes.", "ErrorAddingListingsToSchedulesDirect": "S'ha produït un error en afegir la programació al vostre compte de Schedules Direct. Schedules Direct només permet un nombre limitat de programacions per compte. És possible que hàgiu d’iniciar sessió al lloc web de Schedules Direct i eliminar altres llistats del vostre compte abans de continuar.", "EnableThemeVideosHelp": "Reprodueix vídeos temàtics en segon pla mentre es navega per la mediateca.", @@ -831,28 +831,28 @@ "EnableGamepadHelp": "Detecta l'entrada de qualsevol comandament connectat. (Requereix el mode de visualització \"Televisió\")", "LabelEnableGamepad": "Habilita el comandament de videojocs", "Controls": "Controls", - "AllowVppTonemappingHelp": "Mapeig de to basat en controladors Intel complets. Actualment només funciona amb cert maquinari amb vídeos HDR10. Això té una prioritat més alta en comparació amb una altra implementació d'OpenCL.", - "EnableVppTonemapping": "Habilitar l'assignació de to VPP", + "AllowVppTonemappingHelp": "Mapatge de to basat en controladors Intel complets. Actualment només funciona amb cert maquinari amb vídeos HDR10. Això té una prioritat més alta en comparació amb una altra implementació d'OpenCL.", + "EnableVppTonemapping": "Habilita el mapatge VPP de to", "YoutubeDenied": "El vídeo sol·licitat no es pot reproduir en reproductors integrats.", - "YoutubeNotFound": "Vídeo no trobat.", - "YoutubePlaybackError": "vídeo sol·licitat no es pot reproduir.", + "YoutubeNotFound": "No s'ha pogut trobar el vídeo.", + "YoutubePlaybackError": "No s'ha pogut reproduir el vídeo sol·licitat.", "YoutubeBadRequest": "Sol·licitud errònia.", "LabelSelectStereo": "Estèreo", "LabelSelectMono": "Mono", "LabelSelectAudioChannels": "Canals", "LabelAllowedAudioChannels": "Màxim permès de canals d'àudio", - "AllowHevcEncoding": "Permetre la codificació en format HEVC", - "PreferFmp4HlsContainerHelp": "Prefereixen utilitzar FMP4 com el contenidor predeterminat per HLS, de manera que és possible corrent directe contingut HEVC i AV1 en els dispositius compatibles.", - "PreferFmp4HlsContainer": "Prefereixo el contenidor multimèdia fMP4-HLS", - "LabelSyncPlayInfo": "Informació SyncPlay", + "AllowHevcEncoding": "Permet la codificació en format HEVC", + "PreferFmp4HlsContainerHelp": "Fes servir FMP4 com el contenidor predeterminat per a HLS, fent possible transmetre el contingut directe HEVC i AV1 en els dispositius compatibles.", + "PreferFmp4HlsContainer": "Prioritza el contenidor multimèdia fMP4-HLS", + "LabelSyncPlayInfo": "Informació de SyncPlay", "LabelOriginalMediaInfo": "Informació original del contingut multimèdia", "LabelRemuxingInfo": "informació remuxing", - "LabelDirectStreamingInfo": "Transmissió d'Informació Directa", + "LabelDirectStreamingInfo": "Informació de transmissió directa", "LabelTranscodingInfo": "Informació de transcodificació", "LabelVideoInfo": "Sobre el vídeo", "LabelAudioInfo": "Informació d'àudio", "LabelPlaybackInfo": "Informació de reproducció", - "RemuxHelp2": "Remux utilitza molt poca potència de processament amb una qualitat multimèdia sense pèrdues.", + "RemuxHelp2": "Remux fa servir molt poca potència de processament amb una qualitat multimèdia sense pèrdues.", "RemuxHelp1": "El contingut multimèdia es troba en un contenidor de fitxers incompatible (MKV, AVI, WMV, etc.), però tant el flux de vídeo com el flux d'àudio són compatibles amb el dispositiu. El contingut multimèdia es reempaquetarà sobre la marxa i sense pèrdues, abans d'enviar-se al dispositiu.", "AspectRatioFill": "Estira", "AspectRatioCover": "Escala", @@ -907,7 +907,7 @@ "TV": "Televisió", "Transcoding": "Transcodificació", "TonemappingRangeHelp": "Seleccioneu el rang de color de sortida. Auto és el mateix que el rang d'entrada.", - "TonemappingAlgorithmHelp": "El mapeig de tons es pot afinar amb precisió. Si no esteu familiaritzat amb aquestes opcions, millor que mantingueu el valor predeterminat. El valor recomanat és 'BT.2390'.", + "TonemappingAlgorithmHelp": "El mapatge de tons es pot afinar amb precisió. Si no esteu familiaritzat amb aquestes opcions, millor que mantingueu el valor predeterminat. El valor recomanat és 'BT.2390'.", "TitleHostingSettings": "Configuració d'allotjament", "TitleHardwareAcceleration": "Acceleració per maquinari", "ThumbCard": "Targeta de miniatura", @@ -1113,11 +1113,11 @@ "LabelTonemappingRange": "Gamma de mapa de tons", "LabelTonemappingPeakHelp": "Anul·la el valor de metadades incrustat pel senyal d'entrada amb aquest valor com a pic. El valor per defecte és 100 (1000 nits).", "LabelTonemappingPeak": "Pic del mapa de tons", - "LabelTonemappingParamHelp": "Ajusta l'algoritme de mapeig de to. Generalment, deixeu-ho en blanc.", + "LabelTonemappingParamHelp": "Ajusta l'algoritme de mapatge de to. Generalment, deixeu-ho en blanc.", "LabelTonemappingParam": "Paràmetres de mapa de tons", "LabelTonemappingDesatHelp": "Aplica dessaturació de punts realçats que superen aquest nivell de brillantor. El valor recomanat és 0 (deshabilitat).", "LabelTonemappingDesat": "Mapa de tons desat", - "LabelTonemappingAlgorithm": "Seleccioneu l'algoritme de mapeig de tons", + "LabelTonemappingAlgorithm": "Seleccioneu l'algoritme de mapatge de tons", "LabelTextSize": "Mida del text", "LabelTextColor": "Color del text", "LabelTextBackgroundColor": "Color de fons del text", @@ -1206,7 +1206,7 @@ "LabelParentalRating": "Classificació parental", "LabelOptionalNetworkPathHelp": "Si aquesta carpeta es comparteix a la xarxa, el subministrament de la ruta del recurs compartit de xarxa pot permetre als clients accedir directament als fitxers dels continguts multimèdia des d'altres dispositius. Per exemple, {0} o {1}.", "LabelOptionalNetworkPath": "Directori de xarxa compartida", - "LabelOpenclDeviceHelp": "Aquest és el dispositiu OpenCL que s'utilitza pel mapeig de tons. El costat esquerra del punt és el número de la plataforma, la dreta és el número de dispositiu a la plataforma. El valor per defecte és 0,0. Es requereix que el fitxer de l'aplicació FFmpeg que conté el mètode d'acceleració de maquinari OpenCL.", + "LabelOpenclDeviceHelp": "Aquest és el dispositiu OpenCL que s'utilitza pel mapatge de tons. El costat esquerra del punt és el número de la plataforma, la dreta és el número de dispositiu a la plataforma. El valor per defecte és 0,0. Es requereix que el fitxer de l'aplicació FFmpeg que conté el mètode d'acceleració de maquinari OpenCL.", "LabelOpenclDevice": "Dispositiu OpenCL", "LabelNumberOfGuideDaysHelp": "Descarregar les dades de més dies de la guia ofereix la possibilitat de programar amb més antelació i veure més llistats, però també trigarà més temps a l'hora de descarregar. \"Auto\" triarà en funció del nombre de canals.", "LabelNewsCategories": "Categories de notícies", @@ -1718,12 +1718,12 @@ "DownloadAll": "Descarrega-ho tot", "LabelEnableAudioVbr": "Habilita la codificació d'àudio VBR", "LabelEnableAudioVbrHelp": "La taxa variable de bits ofereix una millor relació entre la qualitat i velocitat mitjana de bits, però en alguns casos rars pot provocar problemes de compatibilitat i de memòria intermèdia.", - "LabelTonemappingMode": "Mode de mapeig de to", + "LabelTonemappingMode": "Mode de mapatge de to", "EnableAudioNormalization": "Normalització d'àudio", "LabelEnableLUFSScan": "Habilita l'escaneig LUFS", "Select": "Selecció", "LabelEnableLUFSScanHelp": "Els clients poden normalitzar la reproducció d'àudio per obtenir un nivell de volum igual entre pistes d'àudio. Això farà que els escanejos de la mediateca s'allarguin més i els calgui més recursos.", - "TonemappingModeHelp": "Selecciona el mode de mapeig de to. Si experimentes zones sobreexposades, prova a canviar al mode RGB.", + "TonemappingModeHelp": "Selecciona el mode de mapatge de to. Si experimentes zones sobreexposades, prova a canviar al mode RGB.", "EnableAudioNormalizationHelp": "La normalització de l'àudio afegirà un guany constant per mantenir la mitjana al nivell desitjat (-18dB).", "GetThePlugin": "Obtenir el Plugin", "MenuClose": "Tanca el menú", @@ -1787,7 +1787,7 @@ "ChannelResolutionFullHD": "Full HD", "LabelBuildVersion": "Versió de la compilació", "LabelUseReplayGainTagsHelp": "Escaneja els fitxers d'àudio per trobar etiquetes ReplayGain i fes-les servir en lloc de calcular el valor LUFS. (Utilitza menys potència. Invalidarà l'opció 'Escaneig LUFS')", - "EnableVideoToolboxTonemapping": "Habilitar el mapatge de tons de VideoToolbox", + "EnableVideoToolboxTonemapping": "Habilita el mapatge de tons de VideoToolbox", "AllowVideoToolboxTonemappingHelp": "Acceleració per maquinari en el mapatge de tons per VideoToolbox. Funciona amb la majoria dels formats HDR, inclosos HDR10, HDR10+ i HLG, però no funciona amb Dolby Vision Profile 5. Això té una prioritat més alta en comparació amb una altra implementació de Metal.", "LabelUseReplayGainTags": "Utilitzar etiquetes ReplayGain", "ChannelResolutionSDPAL": "SD (PAL)", From cfa3d64b6038bba7960adc19619e728ee7825d32 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Sat, 28 Jun 2025 17:52:01 -0400 Subject: [PATCH 577/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 384fa96da..58dd057bb 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -812,21 +812,21 @@ "Depressed": "Deprimit", "AudioBitDepthNotSupported": "La profunditat de bits d'àudio no és compatible", "VideoProfileNotSupported": "El perfil d'el còdec de vídeo no és compatible", - "VideoLevelNotSupported": "El nivell de l'còdec de vídeo no és compatible", + "VideoLevelNotSupported": "El nivell del còdec de vídeo no és compatible", "VideoFramerateNotSupported": "La velocitat de fotogrames de vídeo no és compatible", "VideoBitDepthNotSupported": "La profunditat de bits de vídeo no és compatible", - "RefFramesNotSupported": "Sistemes de referència no són compatibles", - "SecondaryAudioNotSupported": "Pistes d'àudio secundaris no són compatibles", - "InterlacedVideoNotSupported": "Vídeo entrellaçat no és compatible", - "AnamorphicVideoNotSupported": "Vídeo anamòrfic no és compatible", - "AudioSampleRateNotSupported": "Velocitat de mostreig de l'àudio no és compatible", - "AudioProfileNotSupported": "El perfil d'el còdec d'àudio no és compatible", - "VideoResolutionNotSupported": "No s'admet la resolució de el vídeo", - "AudioChannelsNotSupported": "No s'admet el nombre de canals d'àudio", - "AudioBitrateNotSupported": "Taxa de bits d'àudio no és compatible", + "RefFramesNotSupported": "Els fotogrames de referència no són compatibles", + "SecondaryAudioNotSupported": "Les pistes d'àudio secundàries no són compatibles", + "InterlacedVideoNotSupported": "El vídeo entrellaçat no és compatible", + "AnamorphicVideoNotSupported": "El vídeo anamòrfic no és compatible", + "AudioSampleRateNotSupported": "La velocitat de mostreig de l'àudio no és compatible", + "AudioProfileNotSupported": "El perfil del còdec d'àudio no és compatible", + "VideoResolutionNotSupported": "La resolució del vídeo no és compatible", + "AudioChannelsNotSupported": "El nombre de canals d'àudio no és compatible", + "AudioBitrateNotSupported": "La taxa de bits d'àudio no és compatible", "VideoCodecNotSupported": "El còdec de vídeo no és compatible", - "SubtitleCodecNotSupported": "El còdec de subtítols no s'admet", - "ContainerNotSupported": "El contenidor no està suportat", + "SubtitleCodecNotSupported": "El còdec de subtítols no és compatible", + "ContainerNotSupported": "El contenidor no és compatible", "AudioCodecNotSupported": "El còdec d'àudio no és compatible", "EnableGamepadHelp": "Detecta l'entrada de qualsevol comandament connectat. (Requereix el mode de visualització \"Televisió\")", "LabelEnableGamepad": "Habilita el comandament de videojocs", From 5dcd020b1c24d1dc563475c1244f855a02f40294 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Sat, 28 Jun 2025 18:24:11 -0400 Subject: [PATCH 578/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 70 ++++++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 58dd057bb..f2c302c37 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -807,11 +807,11 @@ "EveryXMinutes": "Cada {0} minuts", "EveryXHours": "Cada {0} hores", "EveryHour": "Cada hora", - "EnableTonemapping": "Habilita l'assignació de tons", + "EnableTonemapping": "Habilita el mapatge de tons", "DisableCustomCss": "Desactiveu el CSS personalitzat proporcionat pel servidor", "Depressed": "Deprimit", "AudioBitDepthNotSupported": "La profunditat de bits d'àudio no és compatible", - "VideoProfileNotSupported": "El perfil d'el còdec de vídeo no és compatible", + "VideoProfileNotSupported": "El perfil del còdec de vídeo no és compatible", "VideoLevelNotSupported": "El nivell del còdec de vídeo no és compatible", "VideoFramerateNotSupported": "La velocitat de fotogrames de vídeo no és compatible", "VideoBitDepthNotSupported": "La profunditat de bits de vídeo no és compatible", @@ -831,7 +831,7 @@ "EnableGamepadHelp": "Detecta l'entrada de qualsevol comandament connectat. (Requereix el mode de visualització \"Televisió\")", "LabelEnableGamepad": "Habilita el comandament de videojocs", "Controls": "Controls", - "AllowVppTonemappingHelp": "Mapatge de to basat en controladors Intel complets. Actualment només funciona amb cert maquinari amb vídeos HDR10. Això té una prioritat més alta en comparació amb una altra implementació d'OpenCL.", + "AllowVppTonemappingHelp": "Mapatge de tons basat en controladors Intel complets. Actualment només funciona amb cert maquinari amb vídeos HDR10. Això té una prioritat més alta en comparació amb una altra implementació d'OpenCL.", "EnableVppTonemapping": "Habilita el mapatge VPP de to", "YoutubeDenied": "El vídeo sol·licitat no es pot reproduir en reproductors integrats.", "YoutubeNotFound": "No s'ha pogut trobar el vídeo.", @@ -1113,7 +1113,7 @@ "LabelTonemappingRange": "Gamma de mapa de tons", "LabelTonemappingPeakHelp": "Anul·la el valor de metadades incrustat pel senyal d'entrada amb aquest valor com a pic. El valor per defecte és 100 (1000 nits).", "LabelTonemappingPeak": "Pic del mapa de tons", - "LabelTonemappingParamHelp": "Ajusta l'algoritme de mapatge de to. Generalment, deixeu-ho en blanc.", + "LabelTonemappingParamHelp": "Ajusta l'algoritme de mapatge de tons. Generalment, deixeu-ho en blanc.", "LabelTonemappingParam": "Paràmetres de mapa de tons", "LabelTonemappingDesatHelp": "Aplica dessaturació de punts realçats que superen aquest nivell de brillantor. El valor recomanat és 0 (deshabilitat).", "LabelTonemappingDesat": "Mapa de tons desat", @@ -1307,8 +1307,8 @@ "LabelCustomCertificatePathHelp": "Ruta a un arxiu PKCS #12 que contingui un certificat i una clau privada per a activar el suport TLS en un domini personalitzat.", "LabelCustomCertificatePath": "Ruta del certificat SSL personalitzat", "LabelCurrentStatus": "Estat actual", - "LabelCreateHttpPortMapHelp": "Permet l'assignació de ports automàtica per a crear una regla per al tràfic HTTP, a més a més del trànsit HTTPS.", - "LabelCreateHttpPortMap": "Habilita l'assignació automàtica de ports per al tràfic HTTP, així com HTTPS.", + "LabelCreateHttpPortMapHelp": "Permet el mapatge automàtic de ports per a crear una regla per al tràfic HTTP, a més a més del trànsit HTTPS.", + "LabelCreateHttpPortMap": "Habilita el mapatge automàtic de ports per al tràfic HTTP, així com HTTPS.", "LabelCorruptedFrames": "Quadres corruptes", "LabelColorTransfer": "Transferència de color", "LabelColorSpace": "Espai de color", @@ -1550,14 +1550,14 @@ "LabelHardwareEncoding": "Codificació per maquinari", "ErrorPlayerNotFound": "No s'ha trobat cap reproductor per al fitxer multimèdia sol·licitat.", "SelectAll": "Selecciona-ho tot", - "DirectPlayError": "Hi ha hagut un error en iniciar la reproducció en directe", + "DirectPlayError": "S'ha produït un error en iniciar la reproducció en directe", "UnknownAudioStreamInfo": "La informació del flux d'àudio és desconeguda", "UnknownVideoStreamInfo": "La informació del flux de vídeo és desconeguda", - "VideoBitrateNotSupported": "La velocitat de transmissió del vídeo no està suportada", + "VideoBitrateNotSupported": "La velocitat de transmissió del vídeo no és compatible", "LabelHardwareEncodingOptions": "Opcions de codificació per maquinari", "EnableIntelLowPowerHevcHwEncoder": "Habilita el còdec per maquinari Intel Low-Power HEVC", "EnableIntelLowPowerH264HwEncoder": "Habilita el còdec per maquinari Intel Low-Power H.264", - "ContainerBitrateExceedsLimit": "El còdec de vídeo excedeix el límit", + "ContainerBitrateExceedsLimit": "La taxa de bits de vídeo excedeix el límit", "TypeOptionPluralVideo": "Vídeos", "TypeOptionPluralSeason": "Temporades", "TypeOptionPluralMusicVideo": "Videoclips", @@ -1592,7 +1592,7 @@ "Clip": "Clip", "AudioIsExternal": "El flux d'àudio és extern", "IntelLowPowerEncHelp": "La codificació de baixa potència pot mantenir la sincronització CPU-GPU innecessària. A Linux s'han de desactivar si el microprogramari i915 HuC no està configurat.", - "PreferSystemNativeHwDecoder": "Preferiu els descodificadors de maquinari DXVA o VA-API natius del SO", + "PreferSystemNativeHwDecoder": "Prioritza els descodificadors de maquinari DXVA o VA-API natius del sistema operatiu", "Typewriter": "Mecanogràfica", "TypeOptionPluralSeries": "Sèries", "TypeOptionPluralBoxSet": "Cofres", @@ -1659,8 +1659,8 @@ "MessageRenameMediaFolder": "Canviar una mediateca de nom provocarà que es perdin totes les metadades, continueu amb precaució.", "LabelTextWeight": "Estil de text", "RememberSubtitleSelections": "Estableix la pista de subtítols en funció de l'element anterior", - "LabelVppTonemappingBrightnessHelp": "Aplicar el guany de brillantor al mapa de to VPP. El valor recomanat és 16.", - "MediaInfoRpuPresentFlag": "Flag DV rpu predeterminat", + "LabelVppTonemappingBrightnessHelp": "Aplica el guany de brillantor al mapatge de tons VPP. El valor recomanat és 16.", + "MediaInfoRpuPresentFlag": "Senyalització DV rpu predeterminada", "MediaInfoDvBlSignalCompatibilityId": "Identificador de compatibilitat del senyal DV bl", "Unreleased": "Encara no s'ha publicat", "OptionDateShowAdded": "Data d'addició de la sèrie", @@ -1668,9 +1668,9 @@ "RememberSubtitleSelectionsHelp": "Intenta configurar la pista de subtítols amb la coincidència més semblant a l'últim vídeo.", "RememberAudioSelections": "Estableix la pista d'àudio en funció de l'element anterior", "EnableEnhancedNvdecDecoderHelp": "Implementació millorada de NVDEC, desactiveu aquesta opció per a utilitzar CUVID si trobeu errors de descodificació.", - "LabelVppTonemappingBrightness": "Guany de brillantor del mapa de to VPP", - "LabelVppTonemappingContrast": "Guany de contrast de mapatge de to VPP", - "LabelVppTonemappingContrastHelp": "Aplicar el guany de contrast a l'assignació de to VPP. El valor recomanat és 1.", + "LabelVppTonemappingBrightness": "Guany de brillantor del mapatge de tons VPP", + "LabelVppTonemappingContrast": "Guany de contrast de mapatge de tons VPP", + "LabelVppTonemappingContrastHelp": "Aplica el guany de contrast al mapatge de tons VPP. El valor recomanat és 1.", "VideoRangeTypeNotSupported": "El tipus d'interval del vídeo no és compatible", "LabelVideoRangeType": "Tipus d'interval de vídeo", "MediaInfoVideoRangeType": "Tipus d'interval de vídeo", @@ -1679,8 +1679,8 @@ "MediaInfoDvVersionMinor": "Versió inferior DV", "MediaInfoDvProfile": "Perfil DV", "MediaInfoDvLevel": "Nivell DV", - "MediaInfoElPresentFlag": "Flag DV el predeterminat", - "MediaInfoBlPresentFlag": "Flag DV bl predeterminat", + "MediaInfoElPresentFlag": "Senyalització \"DV el\" predeterminada", + "MediaInfoBlPresentFlag": "Senyalització DV bl predeterminada", "Featurette": "Migmetratge", "Short": "Curt", "HeaderRecordingMetadataSaving": "Metadades de l'enregistrament", @@ -1718,12 +1718,12 @@ "DownloadAll": "Descarrega-ho tot", "LabelEnableAudioVbr": "Habilita la codificació d'àudio VBR", "LabelEnableAudioVbrHelp": "La taxa variable de bits ofereix una millor relació entre la qualitat i velocitat mitjana de bits, però en alguns casos rars pot provocar problemes de compatibilitat i de memòria intermèdia.", - "LabelTonemappingMode": "Mode de mapatge de to", + "LabelTonemappingMode": "Mode de mapatge de tons", "EnableAudioNormalization": "Normalització d'àudio", "LabelEnableLUFSScan": "Habilita l'escaneig LUFS", "Select": "Selecció", "LabelEnableLUFSScanHelp": "Els clients poden normalitzar la reproducció d'àudio per obtenir un nivell de volum igual entre pistes d'àudio. Això farà que els escanejos de la mediateca s'allarguin més i els calgui més recursos.", - "TonemappingModeHelp": "Selecciona el mode de mapatge de to. Si experimentes zones sobreexposades, prova a canviar al mode RGB.", + "TonemappingModeHelp": "Seleccioneu el mode de mapatge de tons. Si experimenteu zones sobreexposades, proveu a canviar al mode RGB.", "EnableAudioNormalizationHelp": "La normalització de l'àudio afegirà un guany constant per mantenir la mitjana al nivell desitjat (-18dB).", "GetThePlugin": "Obtenir el Plugin", "MenuClose": "Tanca el menú", @@ -1772,11 +1772,11 @@ "MessageRepositoryInstallDisclaimer": "AVÍS: La instal·lació d'un complement de tercers comporta riscos. Pot contenir codi inestable o maliciós, i pot canviar en qualsevol moment. Instal·leu només complements d'autors en els que confieu.", "PasswordRequiredForAdmin": "Es requereix una contrasenya pels comptes d'administrador.", "LabelTrackGain": "Guany de pista", - "AllowAv1Encoding": "Permetre l'encodificació en format AV1", + "AllowAv1Encoding": "Permet la codificació en format AV1", "LabelSegmentKeepSecondsHelp": "Temps en segons per aquells segments que s'han de mantenir després que el client els hagi descarregat. Només funciona si l'esborrat de segments està habilitat.", "AiTranslated": "Traduït per IA", - "MachineTranslated": "Traduït per Màquina", - "ForeignPartsOnly": "Només parts Forçades/Forànies", + "MachineTranslated": "Traduït automàticament", + "ForeignPartsOnly": "Només parts forçades/foranes", "HeaderGuestCast": "Estrelles convidades", "HeaderAllRecordings": "Tots els enregistraments", "LabelServerVersion": "Versió del servidor", @@ -1800,14 +1800,14 @@ "ConfirmDeleteSeries": "Eliminar aquesta sèrie eliminarà TOTS {0} episodis tant del sistema de fitxers com de la mediateca. N'esteu segur, que desitgeu continuar?", "LabelEncodingFormatOptions": "Opcions de format de codificació", "LabelTrickplayAccelHelp": "Assegura't d'habilitar 'Permetre codificació MJPEG' a Transcodificació si el teu maquinari ho suporta.", - "LabelWidthResolutions": "Resolucions d'Amplada", + "LabelWidthResolutions": "Resolucions d'amplada", "LabelScanBehaviorHelp": "El comportament predeterminat és sense blocatge, cosa que afegirà contingut multimèdia a la mediateca abans que la generació de la previsualització es completi. El bloqueig assegura que els fitxers de previsualització es generin abans que el contingut multimèdia no s'afegeixi a la mediateca, però farà que l'escaneig sigui significativament més llarg.", - "LabelProcessPriorityHelp": "Establint-ho més baix o més alt determinarà com el processador prioritza el procés de generació de previsualització ffmpeg en relació amb altres processos. Si observeu una ralentització mentre genereu imatges de previsualització, però no voleu aturar completament la seva generació, proveu de reduir-la així com el nombre de fils.", + "LabelProcessPriorityHelp": "Configurant-ho més baix o més alt determinarà com el processador prioritza el procés de generació de previsualització ffmpeg en relació amb altres processos. Si observeu una ralentització mentre genereu imatges de previsualització, però no voleu aturar completament la seva generació, proveu de reduir-la així com el nombre de fils.", "AirPlay": "AirPlay", "AllowContentWithTagsHelp": "Mostra només el contingut multimèdia amb com a mínim alguna de les etiquetes especificades.", "BlockContentWithTagsHelp": "Amaga el contingut multimèdia amb com a mínim una de les etiquetes especificades.", "LabelAllowContentWithTags": "Permet elements amb etiquetes", - "BlockingScan": "Bloqueig - generació de cues, bloqueja escaneig fins a completar-se", + "BlockingScan": "Bloqueig - generació de cues, bloqueja l'escaneig fins a completar-se", "LabelScanBehavior": "Comportament de l'escaneig", "PlaybackError.ASS_RENDER_ERROR": "S'ha produït un error en el renderitzador de subtítols ASS/SSA.", "PlaybackError.MEDIA_NOT_SUPPORTED": "La reproducció ha fallat, perquè el contingut multimèdia no és compatible amb aquest client.", @@ -1824,14 +1824,14 @@ "LimitSupportedVideoResolutionHelp": "Fes servir \"La màxima resolució de transcodificació de vídeo permesa\" com a màxima resolució permesa.", "PlaybackError.FATAL_HLS_ERROR": "S'ha produït un error fatal a l'stream HLS.", "PlaybackError.RateLimitExceeded": "Aquest contingut multimèdia no es pot reproduir en aquests instants deguts a límits de transmissió.", - "EncodingFormatHelp": "Seleccioni la codificació de vídeo a la qual hauria de transcodificar Jellyfin. Jellyfin utilitzarà codificació mitjançant programari quan l'acceleració per maquinari no estigui disponible. La codificació H264 sempre estarà habilitada.", - "PriorityAboveNormal": "Per sobre del Normal", + "EncodingFormatHelp": "Seleccioneu la codificació de vídeo a la qual hauria de transcodificar Jellyfin. Jellyfin farà servir codificació per programari quan l'acceleració per maquinari per al format seleccionat no estigui disponible. La codificació H264 sempre estarà habilitada.", + "PriorityAboveNormal": "Per sobre del normal", "PriorityNormal": "Normal", "LabelImageIntervalHelp": "Interval de temps (ms) entre cada imatge nova de previsualització.", "LabelWidthResolutionsHelp": "Llista separada per comes de les amplades (px) en què es generaran les imatges de previsualització. Totes les imatges s'han de generar proporcionalment a la font, de manera que una amplada de 320 en un vídeo 16:9 acaba al voltant de 320x180.", - "LabelTileWidth": "Amplada del Títol", + "LabelTileWidth": "Amplada del títol", "LabelTileWidthHelp": "Nombre màxim d'imatges per casella en la direcció X.", - "LabelTileHeight": "Alçada del Títol", + "LabelTileHeight": "Alçada del títol", "LabelTileHeightHelp": "Nombre màxim d'imatges per casella en la direcció Y.", "LabelJpegQuality": "Qualitat JPEG", "LabelJpegQualityHelp": "Qualitat de compressió JPEG per a les imatges de previsualització.", @@ -1843,15 +1843,15 @@ "DeleteSeries": "Elimina la sèrie", "DeleteEpisode": "Elimina l'episodi", "PriorityIdle": "Parada", - "LabelProcessPriority": "Prioritat de Processos", - "LabelTrickplayThreadsHelp": "Nombre de fils a passar a l'argument de ffmpleg '-threads'.", + "LabelProcessPriority": "Prioritat de processos", + "LabelTrickplayThreadsHelp": "El nombre de fils per a passar a l'argument '-threads' de ffmpleg.", "Lyric": "Lletra", "EnableSmoothScroll": "Habilita el desplaçament suau", "HeaderDeleteSeries": "Elimina la sèrie", "PlaybackError.MEDIA_DECODE_ERROR": "La reproducció ha fallat a causa d'un error en descodificar el contingut.", "AllowMjpegEncoding": "Permetre codificació en format MJPEG (utilitzat durant la generació de trickplay)", - "PriorityBelowNormal": "Per sota del Normal", - "LabelImageInterval": "Interval d'Imatges", + "PriorityBelowNormal": "Per sota del normal", + "LabelImageInterval": "Interval d'imatges", "LabelQscaleHelp": "Escala de qualitat de les imatges generades per ffmpeg, sent 2 la qualitat més alta i 31 la més baixa.", "LabelTrickplayThreads": "Fils de FFmpeg", "ExtractTrickplayImagesHelp": "Les imatges de previsualització són similars a les imatges de capítols, excepte que abasten tota la longitud del contingut i s'utilitzen per mostrar una vista prèvia en moure's pels vídeos.", @@ -1924,7 +1924,7 @@ "SearchForLyrics": "Cerca lletres", "LibraryInvalidItemIdError": "La mediateca es troba en un estat no vàlid, i no es pot editar. És possible que hàgiu trobat un error: la ruta de la base de dades no és una ruta correcta en el sistema de fitxers.", "LabelTrickplayKeyFrameOnlyExtraction": "Només genera imatges dels fotogrames clau", - "LabelTrickplayKeyFrameOnlyExtractionHelp": "Només extreure fotogrames clau per a un processament significativament més ràpid amb una sincronització menys precisa. Si el descodificador de maquinari configurat no admet aquest mode, en el seu lloc s'utilitzarà el descodificador per programari.", + "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extreu només els fotogrames clau per a un processament significativament més ràpid amb una sincronització menys precisa. Si el descodificador configurat de maquinari no admet aquest mode, en el seu lloc es farà servir el descodificador per programari.", "AllowTonemappingSoftwareHelp": "El mapatge de tons pot transformar el rang dinàmic d'un vídeo d'HDR a SDR mantenint els detalls i els colors de la imatge, que són informació molt important per representar l'escena original. Actualment, només funciona amb vídeos HDR10, HLG i DoVi de 10 bits.", "LabelDuration": "Duració", "LabelDropLyricsHere": "Arrossega i deixa-hi anar les lletres, o clica-hi per a cercar-les.", @@ -2002,7 +2002,7 @@ "LastActive": "Últim actiu", "CopyLogSuccess": "Registres copiats satisfactòriament.", "Retry": "Torna a provar-ho", - "LogLoadFailure": "Error al carregar el registre. És probable que encara s'estigui escrivint en ell.", + "LogLoadFailure": "S'ha produït un error en carregar el registre. És probable que encara s'hi estigui escrivint.", "MetadataNfoLoadError": "No s'han pogut carregar les configuracions de metadades NFO", "SettingsPageLoadError": "No s'ha pogut carregar la pàgina de configuració", "DisplayLoadError": "S'ha produït un error en carregar les dades de configuració de la pantalla.", From 44c499973a40ce12c34cc8d6cbdd379f940d5397 Mon Sep 17 00:00:00 2001 From: Nirwan Date: Sat, 28 Jun 2025 19:57:30 -0400 Subject: [PATCH 579/645] Translated using Weblate (Indonesian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/id/ --- src/strings/id.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/id.json b/src/strings/id.json index 190156c45..5b1152656 100644 --- a/src/strings/id.json +++ b/src/strings/id.json @@ -1948,5 +1948,6 @@ "LabelAudioTagSettings": "Pengaturan Tag Audio", "Custom": "Kustom", "CopyLogSuccess": "Catatan konten berhasil di salin.", - "CustomSplashScreenSize": "Kustom gambar harus dalam 16x9 aspek rasio dengan ukuran minimum 1920x1080." + "CustomSplashScreenSize": "Kustom gambar harus dalam 16x9 aspek rasio dengan ukuran minimum 1920x1080.", + "AllowFmp4TranscodingContainerHelp": "Izinkan kontainer transkode fMP4 pada tuner ini untuk mengaktifkan konten HEVC dan HDR. Tidak semua tuner kompatibel dengan kontainer ini. Nonaktifkan jika Anda mengalami masalah pemutaran." } From a93fda3e239128430be2e2e15bc44c4bd3f77a8a Mon Sep 17 00:00:00 2001 From: Nirwan Date: Sun, 29 Jun 2025 01:50:46 -0400 Subject: [PATCH 580/645] Translated using Weblate (Indonesian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/id/ --- src/strings/id.json | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/src/strings/id.json b/src/strings/id.json index 5b1152656..8bff80574 100644 --- a/src/strings/id.json +++ b/src/strings/id.json @@ -1,5 +1,5 @@ { - "ButtonQuickStartGuide": "Panduan cepat", + "ButtonQuickStartGuide": "Panduan Pengaturan", "ButtonSignOut": "Sign out", "HeaderEasyPinCode": "Kode PIN Mudah", "HeaderSetupLibrary": "Siapkan perpustakaan media Anda", @@ -52,12 +52,12 @@ "Continuing": "Melanjutkan", "ContinueWatching": "Lanjutkan menonton", "Connect": "Sambung", - "ConfirmEndPlayerSession": "Apakah Anda ingin mematikan Jellyfin pada {0}?", + "ConfirmEndPlayerSession": "Apakah Anda ingin mematikan Jellyfin di {0}?", "ConfirmDeletion": "Konfirmasi Penghapusan", "ConfirmDeleteItems": "Penghapusan item-item ini akan menghapus baik pada sistem berkas maupun pustaka media Anda. Apakah Anda yakin untuk melanjutkan?", "ConfirmDeleteItem": "Penghapusan item ini akan menghapus baik pada sistem berkas maupun pustaka media Anda. Apakah Anda yakin untuk melanjutkan?", "ConfirmDeleteImage": "Hapus gambar?", - "ConfigureDateAdded": "Atur cara kerja penentuan metadata untuk 'Tanggal ditambahkan' di menu Dasbor > Pustaka > Pengaturan NFO", + "ConfigureDateAdded": "Atur bagaimana metadata untuk 'Tanggal Ditambahkan' ditentukan di Dasbor > Pustaka > Tampilan.", "Composer": "Komposer", "CommunityRating": "Peringkat komunitas", "ChannelNumber": "Nomor saluran", @@ -1949,5 +1949,27 @@ "Custom": "Kustom", "CopyLogSuccess": "Catatan konten berhasil di salin.", "CustomSplashScreenSize": "Kustom gambar harus dalam 16x9 aspek rasio dengan ukuran minimum 1920x1080.", - "AllowFmp4TranscodingContainerHelp": "Izinkan kontainer transkode fMP4 pada tuner ini untuk mengaktifkan konten HEVC dan HDR. Tidak semua tuner kompatibel dengan kontainer ini. Nonaktifkan jika Anda mengalami masalah pemutaran." + "AllowFmp4TranscodingContainerHelp": "Izinkan kontainer transkode fMP4 pada tuner ini untuk mengaktifkan konten HEVC dan HDR. Tidak semua tuner kompatibel dengan kontainer ini. Nonaktifkan jika Anda mengalami masalah pemutaran.", + "AllowTonemappingSoftwareHelp": "Pemetaan nada dapat mengubah rentang dinamis video dari HDR ke SDR sambil mempertahankan detail gambar dan warna, yang merupakan informasi sangat penting untuk merepresentasikan adegan asli. Saat ini hanya berfungsi dengan video 10-bit HDR10, HLG, dan DoVi.", + "DisplayLoadError": "Terjadi kesalahan saat memuat data konfigurasi tampilan.", + "FallbackMaxStreamingBitrateHelp": "Bitrate streaming maksimum digunakan sebagai nilai pengganti saat ffprobe tidak dapat menentukan bitrate aliran sumber. Ini membantu mencegah klien meminta bitrate transkode yang sangat tinggi, yang dapat menyebabkan pemutar gagal dan membebani encoder secara berlebihan.", + "AllowStreamSharingHelp": "Izinkan Jellyfin menggandakan aliran mpegts dari tuner dan membagikan salinannya ke klien. Fitur ini berguna jika tuner memiliki batas jumlah aliran, namun berisiko menyebabkan masalah pemutaran.", + "HeaderPageNotFound": "Halaman tidak ditemukan", + "DownloadManager": "Unduhan", + "HeaderAudioAdvanced": "Audio Lanjutan", + "AutoSubtitleStylingHelp": "Mode ini akan secara otomatis beralih antara mekanisme gaya subtitle bawaan dan kustom berdasarkan jenis perangkat Anda.", + "CustomSubtitleStylingHelp": "Gaya subtitle akan berfungsi di sebagian besar perangkat, namun disertai dengan beban performa tambahan.", + "DeleteServerConfirmation": "Apakah Anda yakin ingin menghapus server ini?", + "ButtonLearnMore": "Pelajari Lebih Lanjut", + "Create": "Buat", + "DeleteCustomImage": "Hapus Gambar Kustom", + "HeaderBackupsHelp": "Buat dan pulihkan snapshot server Anda yang dapat mencakup database, metadata, subtitle, dan trickplay.", + "BackupsPageLoadError": "Gagal memuat halaman cadangan", + "ButtonCreateBackup": "Buat Cadangan", + "HeaderMediaSegmentActions": "Tindakan Segmen Media", + "HeaderUpdateRequired": "Pembaruan Diperlukan", + "ConfirmDeleteRepository": "Hapus Repositori?", + "DeleteRepositoryConfirmation": "Apakah Anda yakin ingin menghapus repositori ini?", + "HeaderServerUnavailable": "Server tidak tersedia", + "ImageDeleteFailed": "Gagal menghapus gambar" } From 2311203d1c40b40c9009070c01b92ec1cb5ee350 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Sun, 29 Jun 2025 03:23:28 -0400 Subject: [PATCH 581/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index f2c302c37..633b4529d 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -152,7 +152,7 @@ "HeaderMyDevice": "El meu dispositiu", "HeaderMyMedia": "Els meus continguts multimèdia", "HeaderMyMediaSmall": "Els meus continguts multimèdia (petit)", - "HeaderNewApiKey": "Nova clau API", + "HeaderNewApiKey": "Clau API nova", "HeaderNextEpisodePlayingInValue": "L'episodi següent es reproduirà en {0}", "HeaderNextVideoPlayingInValue": "El vídeo següent es reproduirà en {0}", "HeaderOnNow": "En curs", @@ -437,7 +437,7 @@ "OptionDaily": "Diari", "OptionDateAdded": "Afegit el", "OptionDateAddedImportTime": "Fes servir la data d'escaneig", - "OptionDatePlayed": "Data de Reproducció", + "OptionDatePlayed": "Reproduït el", "OptionDisableUser": "Habilita aquest usuari", "OptionDisableUserHelp": "El servidor no permetrà cap connexió d’aquest usuari. Les connexions existents es tancaran immediatament.", "OptionDislikes": "No m'agrada", @@ -672,7 +672,7 @@ "ColorPrimaries": "Colors primaris", "DefaultMetadataLangaugeDescription": "Aquests són els vostres valors per defecte i poden ser personalitzats per a cada mediateca.", "Default": "Per defecte", - "DatePlayed": "Data de reproducció", + "DatePlayed": "Reproduït el", "DateAdded": "Data d'addició", "CustomDlnaProfilesHelp": "Crear un perfil personalitzat per a un nou dispositiu o substituir un perfil de sistema.", "HeaderAdmin": "Administració", @@ -1149,7 +1149,7 @@ "LabelSSDPTracingFilter": "SSDP Filtre", "LabelSportsCategories": "Modalitats esportives", "LabelSpecialSeasonsDisplayName": "Nom de la temporada especial", - "LabelSortOrder": "Ordre de classificació", + "LabelSortOrder": "Ordre", "LabelSortBy": "Ordena per", "LabelSonyAggregationFlagsHelp": "Determina el contingut de l'element 'aggregationFlags' al espai de noms 'urn:schemas-sonycom:av'.", "LabelSonyAggregationFlags": "Banderes d'agregació de Sony", From bd6e235806ac3e2cb63bd41023ed54c680d564ab Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Sun, 29 Jun 2025 05:06:55 -0400 Subject: [PATCH 582/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 633b4529d..a76ab691c 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -14,7 +14,7 @@ "AspectRatio": "Relació d'aspecte", "Audio": "Àudio", "MessageBrowsePluginCatalog": "Consulteu el nostre catàleg per veure els complements disponibles.", - "ButtonAddMediaLibrary": "Afegeix una mediateca", + "ButtonAddMediaLibrary": "Afegiu-hi una mediateca", "ButtonAddScheduledTaskTrigger": "Afegeix un detonador", "ButtonAddServer": "Afegeix un servidor", "ButtonAddUser": "Afegeix un usuari", @@ -469,8 +469,8 @@ "OptionUnairedEpisode": "Episodis no emesos", "OptionWakeFromSleep": "Desperta de la hibernació", "OptionWeekdays": "Entre setmana", - "OptionWeekends": "Cap de setmana", - "OptionWeekly": "Setmanal", + "OptionWeekends": "Caps de setmana", + "OptionWeekly": "Setmanalment", "OriginalAirDateValue": "Data original d'emissió: {0}", "PackageInstallCancelled": "S'ha cancel·lat la instal·lació de {0} (versió {1}).", "ParentalRating": "Valoració parental", @@ -607,7 +607,7 @@ "ButtonInfo": "Informació", "ButtonFullscreen": "Pantalla completa", "ButtonAudioTracks": "Pistes d'àudio", - "ButtonAddImage": "Afegeix una imatge", + "ButtonAddImage": "Afegiu-hi una imatge", "Blacklist": "Llista negra", "BirthPlaceValue": "Lloc de naixement: {0}", "BirthLocation": "Lloc de naixement", @@ -747,7 +747,7 @@ "DashboardServerName": "Servidor: {0}", "DashboardOperatingSystem": "Sistema Operatiu: {0}", "DashboardArchitecture": "Arquitectura: {0}", - "DailyAt": "Diàriament a {0}", + "DailyAt": "Diàriament a les {0}", "ClearQueue": "Esborra la cua", "Bwdif": "Filtre de desentrellat de Bob Weaver", "ButtonPlayer": "Reproductor", @@ -1611,7 +1611,7 @@ "AllowEmbeddedSubtitlesHelp": "Deshabilita els subtítols empaquetats dins dels contenidors multimèdia. Requereix d'una actualització completa de la mediateca.", "AllowEmbeddedSubtitles": "Deshabilita diferents tipus de subtítols incrustats", "OriginalAirDate": "Data d'emissió original", - "MixedMoviesShows": "Barreja de pel·lícules i sèries", + "MixedMoviesShows": "Pel·lícules i sèries barrejades", "MessageUnauthorizedUser": "No teniu autorització per accedir en aquest moment al servidor. Per a més informació, poseu-vos en contacte amb l'administrador del servidor.", "Lyricist": "Lletrista", "Localization": "Localització", From 5d009c5b88b101d6bd92277f0271d2eb4264616d Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Sun, 29 Jun 2025 10:38:50 -0400 Subject: [PATCH 583/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index a76ab691c..e834999c6 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -100,7 +100,7 @@ "HeaderApiKey": "Clau API", "HeaderApiKeys": "Claus API", "HeaderApiKeysHelp": "Cal que les aplicacions externes tinguin una clau API per comunicar-se amb el servidor. Les claus s’emeten iniciant la sessió amb un compte d’usuari normal o concedint manualment una clau a l’aplicació.", - "HeaderAudioSettings": "Preferències d'àudio", + "HeaderAudioSettings": "Configuració d'àudio", "HeaderBranding": "Aparença", "HeaderCancelRecording": "Cancel·la l'enregistrament", "HeaderCancelSeries": "Cancel·la la sèrie", @@ -114,7 +114,7 @@ "HeaderContinueWatching": "Continueu mirant", "HeaderCustomDlnaProfiles": "Perfils personalitzats", "HeaderDateIssued": "Data d'emissió", - "HeaderDefaultRecordingSettings": "Preferències d'enregistrament per defecte", + "HeaderDefaultRecordingSettings": "Configuració per defecte de l'enregistrament", "HeaderDeleteDevice": "Elimina el dispositiu", "HeaderDeleteItem": "Elimina l'element", "HeaderDeveloperInfo": "Informació del desenvolupador", @@ -148,7 +148,7 @@ "HeaderLibraryOrder": "Ordre de la mediateca", "HeaderLibrarySettings": "Configuració de la mediateca", "HeaderMediaFolders": "Directoris multimèdia", - "HeaderMetadataSettings": "Preferències de les metadades", + "HeaderMetadataSettings": "Configuració de les metadades", "HeaderMyDevice": "El meu dispositiu", "HeaderMyMedia": "Els meus continguts multimèdia", "HeaderMyMediaSmall": "Els meus continguts multimèdia (petit)", @@ -517,7 +517,7 @@ "SendMessage": "Envia un missatge", "SeriesCancelled": "Sèrie cancel·lada.", "SeriesRecordingScheduled": "Enregistrament programat de la sèrie.", - "SeriesSettings": "Preferències de la sèrie", + "SeriesSettings": "Configuració de les sèries", "ServerUpdateNeeded": "El servidor necessita ser actualitzat. Per a descarregar la darrera versió, visiteu {0}", "Settings": "Configuració", "SettingsSaved": "Configuració desada.", @@ -543,7 +543,7 @@ "TabMusic": "Música", "TabMyPlugins": "Els meus complements", "TabNetworks": "Cadenes de televisió", - "TabNfoSettings": "Preferències NFO", + "TabNfoSettings": "Configuració de NFO", "TabNotifications": "Notificacions", "TabOther": "Altres", "TabParentalControl": "Control parental", @@ -555,7 +555,7 @@ "TabUpcoming": "Properament", "Tags": "Etiquetes", "TellUsAboutYourself": "Expliqueu-nos com sou", - "TheseSettingsAffectSubtitlesOnThisDevice": "Aquestes preferències afecten els subtítols d'aquest dispositiu", + "TheseSettingsAffectSubtitlesOnThisDevice": "Aquestes configuracions afecten els subtítols d'aquest dispositiu", "ThisWizardWillGuideYou": "Aquest assistent us guiarà durant el procés d'instal·lació. Per començar, entreu el nom del servidor i seleccioneu el vostre idioma preferit.", "Thursday": "Dijous", "TitlePlayback": "Reproducció", From a8d19f0dac4d1e9625d77ed707c6808e99402acb Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Sun, 29 Jun 2025 13:49:30 -0400 Subject: [PATCH 584/645] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 2419279d4..10a0e4052 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -194,7 +194,7 @@ "LabelPostProcessor": "Aplicação de pós-processamento", "LabelPleaseRestart": "As alterações produzirão efeito depois de recarregar a página web.", "LabelPlayMethod": "Método de reprodução", - "LabelPlaylist": "Lista de Reprodução", + "LabelPlaylist": "Playlist", "LabelPlayer": "Leitor", "LabelPersonRoleHelp": "Exemplo: motorista da carrinha de gelados", "LabelPersonRole": "Personagem", @@ -986,7 +986,7 @@ "HeaderAlbumArtists": "Artistas do Álbum", "HeaderAdditionalParts": "Partes Adicionais", "HeaderAddUpdateImage": "Adicionar/Atualizar imagem", - "HeaderAddToPlaylist": "Adicionar à lista de reprodução", + "HeaderAddToPlaylist": "Adicionar à playlist", "HeaderAddToCollection": "Adicionar à coleção", "HeaderActivity": "Atividade", "HeaderActiveRecordings": "Gravações ativas", @@ -1238,7 +1238,7 @@ "LabelSyncPlayNewGroup": "Novo grupo", "LabelSyncPlayLeaveGroupDescription": "Desativar SyncPlay", "LabelSyncPlayLeaveGroup": "Deixar o grupo", - "LabelSyncPlayHaltPlaybackDescription": "E ignorar as atualizações recentes da lista de reprodução", + "LabelSyncPlayHaltPlaybackDescription": "E ignorar as atualizações recentes da playlist", "LabelSyncPlayHaltPlayback": "Parar reprodução local", "LabelSyncPlayAccessNone": "Desativado para este utilizador", "LabelSyncPlayAccessJoinGroups": "Permitir ao utilizador aderir a grupos", @@ -1879,11 +1879,11 @@ "SelectPreferredTranscodeVideoAudioCodecHelp": "Seleciona o codec de áudio preferido para transcodificar o conteúdo de vídeo. Se o codec preferido não for suportado, o servidor utilizará o próximo melhor codec disponível.", "LibraryScanFanoutConcurrencyHelp": "Número máximo de tarefas paralelas durante as análises da biblioteca. Se deixares este campo vazio, será escolhido um limite com base no número de núcleos do teu sistema. AVISO: Definir um valor demasiado elevado pode causar problemas com sistemas de ficheiros em rede; se encontrares problemas, reduz este número.", "LibraryScanFanoutConcurrency": "Limite de tarefas paralelas de análise da biblioteca", - "PlaylistPublicDescription": "Permitir que esta lista de reprodução seja vista por qualquer utilizador com sessão iniciada.", + "PlaylistPublicDescription": "Permitir que esta playlist seja vista por qualquer utilizador com sessão iniciada.", "PlaylistPublic": "Permitir acesso público", "SaveLyricsIntoMediaFoldersHelp": "Guardar letras junto a ficheiros de áudio permiti-las-á ser mais facilmente geridas.", - "PlaylistError.AddFailed": "Erro ao adicionar à lista de reprodução", - "PlaylistError.CreateFailed": "Erro ao criar a lista de reprodução", + "PlaylistError.AddFailed": "Erro ao adicionar à playlist", + "PlaylistError.CreateFailed": "Erro ao criar a playlist", "Translator": "Tradutor", "Inker": "Tinteiro", "Alternate": "Alternar", From b61b96c94ddc3ac26c0b8c660445f6b74522b9da Mon Sep 17 00:00:00 2001 From: Blackspirits Date: Sun, 29 Jun 2025 13:46:31 -0400 Subject: [PATCH 585/645] Translated using Weblate (Portuguese (Portugal)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt_PT/ --- src/strings/pt-pt.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/strings/pt-pt.json b/src/strings/pt-pt.json index f0f172c8c..a2ffeb8e8 100644 --- a/src/strings/pt-pt.json +++ b/src/strings/pt-pt.json @@ -1,7 +1,7 @@ { "Actor": "Ator", "Add": "Adicionar", - "AddToPlaylist": "Adicionar à lista de reprodução", + "AddToPlaylist": "Adicionar à playlist", "AdditionalNotificationServices": "Explore o catálogo de extensões para instalar serviços de notificação adicionais.", "All": "Todos", "Audio": "Áudio", @@ -701,7 +701,7 @@ "HeaderAudioBooks": "Áudiolivro", "HeaderAllowMediaDeletionFrom": "Permitir remoção de multimídia a partir de", "HeaderAlert": "Alerta", - "HeaderAddToPlaylist": "Adicionar à lista de reprodução", + "HeaderAddToPlaylist": "Adicionar à playlist", "HDPrograms": "Programas em Alta-Definição", "EncoderPresetHelp": "Escolha um valor mais rápido para melhorar o desempenho, ou um valor mais lento para melhorar a qualidade.", "Guide": "Programação", @@ -727,7 +727,7 @@ "EndsAtValue": "Termina às {0}", "EnablePhotosHelp": "Imagens serão detectadas e exibidas em conjunto com outros ficheiros multimédia.", "EnablePhotos": "Mostrar fotografias", - "EnableNextVideoInfoOverlayHelp": "No final de um vídeo, mostrar informação sobre o próximo vídeo da lista de reprodução.", + "EnableNextVideoInfoOverlayHelp": "No final de um vídeo, mostrar informações sobre o próximo vídeo da playlist atual.", "EnableNextVideoInfoOverlay": "Mostrar informação sobre o próximo vídeo durante a reprodução", "EnableHardwareEncoding": "Ativar codificação por hardware", "EnableExternalVideoPlayersHelp": "O menu do leitor externo surgirá ao iniciar a reprodução de vídeo.", @@ -858,12 +858,12 @@ "HeaderStartNow": "Iniciar", "HeaderOnNow": "No ar", "Unplayed": "Por reproduzir", - "RemoveFromPlaylist": "Remover da lista de reprodução", + "RemoveFromPlaylist": "Remover da playlist", "LabelUserRemoteClientBitrateLimitHelp": "Esta opção substituirá o valor predefinido do servidor, definido no Painel de Controlo > Reprodução > Transmissão.", "MarkUnplayed": "Marcar como não visto", "MarkPlayed": "Marcar como visto", "LabelSelectFolderGroupsHelp": "Pastas não selecionadas serão apresentadas sozinhas, na sua própria vista.", - "LabelPlaylist": "Lista de reprodução", + "LabelPlaylist": "Playlist", "HeaderPlayOn": "Reproduzir em", "HeaderNextVideoPlayingInValue": "O próximo vídeo começa dentro de {0}", "HeaderNextEpisodePlayingInValue": "O próximo episódio começa dentro de {0}", @@ -1274,7 +1274,7 @@ "EnableDecodingColorDepth10Hevc": "Ativar descodificação de hardware de 10-bits para HEVC", "DeinterlaceMethodHelp": "Seleciona o método de desentrelaçamento a utilizar quando o software transcodifica conteúdo entrelaçado. Caso esteja ativo, o desentrelaçamento através de aceleração por hardware terá prioridade sobre esta opção.", "ClientSettings": "Definições do cliente", - "ButtonTogglePlaylist": "lista de reprodução", + "ButtonTogglePlaylist": "Playlist", "BoxSet": "Coleção", "Artist": "Artista", "AlbumArtist": "Artista do álbum", @@ -1501,7 +1501,7 @@ "LabelDirectStreamingInfo": "Informações de transmissão direta", "LabelTranscodingInfo": "Informações de transcodificação", "LabelSyncPlayTimeSyncDevice": "Sincronizar o tempo com", - "LabelSyncPlayHaltPlaybackDescription": "E ignorar as atualizações recentes da lista de reprodução", + "LabelSyncPlayHaltPlaybackDescription": "E ignorar as atualizações recentes da playlist", "LabelSyncPlaySettingsDescription": "Mudar definições SyncPlay", "LabelSortName": "Filtrar nome", "LabelSlowResponseTime": "Tempo em ms após o qual a resposta é considerada lenta", @@ -1530,7 +1530,7 @@ "LabelAutomaticallyAddToCollection": "Adicionar automaticamente à coleção", "ItemDetails": "Detalhes", "GoogleCastUnsupported": "O Google Cast não é suportado", - "EnableRewatchingNextUpHelp": "Mostrar episódios já vistos nas secções 'A Seguir'.", + "EnableRewatchingNextUpHelp": "Mostrar episódios já vistos na secção \"A seguir\".", "EnableRewatchingNextUp": "Ativar Rever em 'A Seguir'", "Digital": "Digital", "Cursive": "Cursivo", @@ -1881,15 +1881,15 @@ "SelectPreferredTranscodeVideoAudioCodecHelp": "Seleciona o codec de áudio preferido para transcodificar o conteúdo de vídeo. Se o codec preferido não for suportado, o servidor utilizará o próximo melhor codec disponível.", "LibraryScanFanoutConcurrencyHelp": "Número máximo de tarefas paralelas durante a análise da biblioteca. Deixar este campo em branco fará com que o limite seja definido automaticamente com base no número de núcleos do sistema. AVISO: Definir este número demasiado alto pode causar problemas em sistemas de ficheiros de rede; se encontrares dificuldades, reduz este valor.", "LibraryScanFanoutConcurrency": "Limite das tarefas de análise da biblioteca paralela", - "PlaylistError.AddFailed": "Erro ao adicionar à lista de reprodução", - "PlaylistError.CreateFailed": "Erro ao criar a lista de reprodução", + "PlaylistError.AddFailed": "Erro ao adicionar à playlist", + "PlaylistError.CreateFailed": "Erro ao criar a playlist", "SaveLyricsIntoMediaFoldersHelp": "Guardar letras junto a ficheiros de áudio permiti-las-á ser mais facilmente geridas.", "Inker": "Tinteiro", "Penciller": "Lapiseira", "Alternate": "Alternar", "AlternateDVD": "DVD alternativo", "PlaylistPublic": "Permitir acesso público", - "PlaylistPublicDescription": "Permitir que esta lista de reprodução seja vista por qualquer utilizador com sessão iniciada.", + "PlaylistPublicDescription": "Permitir que esta playlist seja vista por qualquer utilizador com sessão iniciada.", "Regional": "Regional", "SaveLyricsIntoMediaFolders": "Guardar letras em pastas multimédia", "Translator": "Tradutor", From d33412370e7f51db445e88b67800ff39174730b0 Mon Sep 17 00:00:00 2001 From: Tal Sarid Date: Mon, 30 Jun 2025 03:49:13 -0400 Subject: [PATCH 586/645] Translated using Weblate (Hebrew) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/ --- src/strings/he.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/he.json b/src/strings/he.json index 9728c7c22..336668e8f 100644 --- a/src/strings/he.json +++ b/src/strings/he.json @@ -558,7 +558,7 @@ "CopyStreamURLSuccess": "הקישור הועתק בהצלחה.", "CopyStreamURL": "העתק קישור זרם", "Connect": "התחבר", - "ConfirmEndPlayerSession": "‫האם לכבות את ג'ליפין על {0}?", + "ConfirmEndPlayerSession": "‫האם ברצונך לכבות את Jellyfin ב-{0}?", "CommunityRating": "דירוג קהילה", "ButtonWebsite": "אתר אינטרנט", "ButtonSubmit": "שלח", From 5aaa16f9340c4e8afac9c1ffad7b03fff88d199f Mon Sep 17 00:00:00 2001 From: felix920506 Date: Mon, 30 Jun 2025 03:49:11 -0400 Subject: [PATCH 587/645] Translated using Weblate (Chinese (Traditional Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hant/ --- src/strings/zh-tw.json | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/strings/zh-tw.json b/src/strings/zh-tw.json index 847e1fd29..b3c0d589c 100644 --- a/src/strings/zh-tw.json +++ b/src/strings/zh-tw.json @@ -10,7 +10,7 @@ "ButtonForgotPassword": "忘記密碼", "ButtonGotIt": "我知道了", "ButtonOk": "確定", - "ButtonQuickStartGuide": "快速入門指南", + "ButtonQuickStartGuide": "設定指南", "ButtonRefreshGuideData": "更新電視節目表", "ButtonRemove": "移除", "ButtonSelectDirectory": "選擇資料夾", @@ -296,7 +296,7 @@ "ConfigureDateAdded": "在「控制台 > 媒體庫 > 顯示」中設定「添加日期」的判斷方式", "ConfirmDeleteImage": "是否確定刪除圖片?", "ConfirmDeleteItems": "刪除這些項目會將檔案從檔案系統和媒體庫中刪除。你真的要繼續嗎?", - "ConfirmEndPlayerSession": "您要在 {0} 秒後將 Jellyfin 關閉嗎?", + "ConfirmEndPlayerSession": "您要關閉 {0} 上的Jellyfin嗎?", "Connect": "連線", "ContinueWatching": "繼續觀看", "CriticRating": "影評評分", @@ -2013,5 +2013,12 @@ "DisplayLoadError": "載入顯示設定時發生錯誤。", "HeaderUpdateRequired": "需要更新", "ImageUploadCancelled": "圖片上傳已取消", - "ImageUploadFailed": "圖片上傳失敗" + "ImageUploadFailed": "圖片上傳失敗", + "DownloadManager": "下載", + "BackupsPageLoadError": "無法載入備份頁面", + "ConfirmDeleteRepository": "刪除儲存庫?", + "Create": "建立", + "DeleteRepositoryConfirmation": "您確定要刪除此儲存庫嗎?", + "ButtonLearnMore": "瞭解更多", + "ButtonCreateBackup": "建立備份" } From 2fd6ce69befd084d4c797792e4e11cf50e9d5626 Mon Sep 17 00:00:00 2001 From: Akshay Prabhu Date: Mon, 30 Jun 2025 02:29:04 -0400 Subject: [PATCH 588/645] Translated using Weblate (Kannada) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/kn/ --- src/strings/kn.json | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/strings/kn.json b/src/strings/kn.json index 2162b1e31..fcd8a5323 100644 --- a/src/strings/kn.json +++ b/src/strings/kn.json @@ -26,5 +26,24 @@ "Shows": "ಧಾರವಾಹಿಗಳು", "Photos": "ಚಿತ್ರಗಳು", "Artists": "ಕಲಾವಿದರು", - "Books": "ಪುಸ್ತಕಗಳು" + "Books": "ಪುಸ್ತಕಗಳು", + "AddedOnValue": "{0} ಸೇರಿಸಲಾಗಿದೆ", + "AddToPlaylist": "ಪ್ಲೇಲಿಸ್ಟ್‌ಗೆ ಸೇರಿಸಿ", + "Aired": "ಪ್ರಸಾರಗೊಂಡಿದೆ", + "AllComplexFormats": "ಎಲ್ಲಾ ಸಂಕೀರ್ಣ ಫಾರ್ಮ್ಯಾಟ್‌ಗಳು (ASS, SSA, VobSub, PGS, SUB, IDX, …)", + "All": "ಎಲ್ಲಾ", + "AirPlay": "ಎರ್‌ಪ್ಲೇ", + "Add": "ಸೇರಿಸಿ", + "AddToCollection": "ಸಂಗ್ರಹಕ್ಕೆ ಸೇರಿಸಿ", + "AllEpisodes": "ಎಲ್ಲಾ ಎಪಿಸೋಡ್‌ಗಳು", + "AllChannels": "ಎಲ್ಲಾ ಚಾನೆಲ್‌ಗಳು", + "Album": "ಆಲ್ಬಮ್", + "AddToFavorites": "ಮೆಚ್ಚಿನವುಗಳಿಗೆ ಸೇರಿಸಿ", + "AlbumArtist": "ಆಲ್ಬಮ್ ಕಲಾವಿದ", + "Alerts": "ಅಲರ್ಟ್‌ಗಳು", + "AllLanguages": "ಎಲ್ಲಾ ಭಾಷೆಗಳು", + "AllLibraries": "ಎಲ್ಲಾ ಲೈಬ್ರರಿ ಗಳು", + "AddToPlayQueue": "ಪ್ಲೇ ಕ್ಯೂಗೆ ಸೇರಿಸಿ", + "AgeValue": "({0} ವರ್ಷಗಳಷ್ಟು ಹಳೆಯದು)", + "AirDate": "ಪ್ರಸಾರ ದಿನಾಂಕ" } From 855276e8afe0ef42d4754918d9e8c6d647ff9f65 Mon Sep 17 00:00:00 2001 From: MrPlow Date: Mon, 30 Jun 2025 05:05:52 -0400 Subject: [PATCH 589/645] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/de.json b/src/strings/de.json index efb96b38c..384d5ceed 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -101,7 +101,7 @@ "ConfirmDeleteItem": "Das Löschen dieses Objekts löscht die Datei vom Laufwerk und aus deiner Medienbibliothek. Bist du wirklich sicher?", "ConfirmDeleteItems": "Das Löschen dieser Objekte löscht die Dateien vom Laufwerk und aus deiner Medienbibliothek. Bist du wirklich sicher?", "ConfirmDeletion": "Löschen bestätigen", - "ConfirmEndPlayerSession": "Möchtest du Jellyfin auf {0} beenden?", + "ConfirmEndPlayerSession": "Möchtest du Jellyfin um {0} herunterfahren?", "Connect": "Verbinden", "ContinueWatching": "Weiterschauen", "Continuing": "Fortlaufend", @@ -737,8 +737,8 @@ "MessageConfirmRemoveMediaLocation": "Bist du sicher, dass du diese Medienquelle entfernen willst?", "MessageConfirmRestart": "Willst du Jellyfin wirklich neu starten?", "MessageConfirmRevokeApiKey": "Bist du sicher, dass du diesen API-Schlüssel löschen willst? Die Verbindung der Anwendung zu diesem Server wird sofort unterbrochen werden.", - "MessageConfirmShutdown": "Willst du den Server wirklich herunterfahren?", - "MessageContactAdminToResetPassword": "Bitte kontaktiere deinen Systemadministrator, um dein Passwort zurücksetzen zu lassen.", + "MessageConfirmShutdown": "Bist du sicher, dass du den Server herunterfahren möchtest?", + "MessageContactAdminToResetPassword": "Bitte kontaktiere deinen Systemadministrator, um dein Passwort zurückzusetzen.", "MessageCreateAccountAt": "Erstelle ein Konto bei {0}", "MessageDeleteTaskTrigger": "Bist du sicher, dass du diesen Aufgabenauslöser entfernen möchtest?", "MessageDirectoryPickerBSDInstruction": "Für BSD musst du ggf. Speicherplatz in deinem 'FreeNAS Jail' so konfigurieren, damit Jellyfin auf deine Medien zugreifen kann.", From a53a2a6c86c924b3aab9a3c3e58a48f95691cbd3 Mon Sep 17 00:00:00 2001 From: muqtda Date: Mon, 30 Jun 2025 11:33:53 -0400 Subject: [PATCH 590/645] Translated using Weblate (Arabic) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ar/ --- src/strings/ar.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/strings/ar.json b/src/strings/ar.json index 59e2ad319..c58f0f05d 100644 --- a/src/strings/ar.json +++ b/src/strings/ar.json @@ -10,7 +10,7 @@ "BirthDateValue": "وُلد: {0}", "BirthPlaceValue": "مكان الميلاد: {0}", "Browse": "تصفح", - "MessageBrowsePluginCatalog": "تصفح قائمتنا للملحق لترى المتوفر من الملاحق.", + "MessageBrowsePluginCatalog": "تصفح قائمتنا للاضافات لترى المتوفر .", "ButtonAddMediaLibrary": "إضافة مكتبة وسائط", "ButtonAddScheduledTaskTrigger": "إضافة معيار", "ButtonAddServer": "إضافة خادم", @@ -500,13 +500,13 @@ "MessageAlreadyInstalled": "هذا الإصدار تم تثبيته مسبقاً.", "MessageAreYouSureYouWishToRemoveMediaFolder": "هل أنت متأكد أنك تريد إزالة مجلد الوسائط هذا؟", "MessageConfirmDeleteGuideProvider": "هل أنت متأكد أنك ترغب في حذف مزود الدليل هذا؟", - "MessageConfirmDeleteTunerDevice": "هل أنت متأكد أنك تريد حذف هذا المولف؟", + "MessageConfirmDeleteTunerDevice": "هل أنت متأكد أنك تريد حذف هذا الجهاز؟", "MessageConfirmProfileDeletion": "هل أنت متأكد أنك تريد حذف هذه العريضة؟", - "MessageConfirmRemoveMediaLocation": "هل أنت متأكد أنك تريد حذف هذا المكان؟", - "MessageConfirmRestart": "هل أنت متأكد أنك تريد أن تعيد تشغيل خادم Jellyfin؟", + "MessageConfirmRemoveMediaLocation": "هل أنت متأكد أنك تريد حذف هذا الموقع؟", + "MessageConfirmRestart": "هل أنت متأكد أنك تريد أن تعيد تشغيل سيرفر Jellyfin؟", "MessageConfirmRevokeApiKey": "هل أنت متأكد من رغبتك في إبطال مفتاح واجهة برمجة التطبيقات هذا؟ سيتم إنهاء اتصال التطبيق بهذا الخادم بشكل مفاجئ.", - "MessageConfirmShutdown": "هل أنت متأكد أنك تريد أن تنهي تشغيل الخادم؟", - "MessageContactAdminToResetPassword": "الرجاء التواصل مع مدير النظام لإعادة أعداد كملة سرّك.", + "MessageConfirmShutdown": "هل أنت متأكد أنك تريد ايقاف السيرفر؟", + "MessageContactAdminToResetPassword": "الرجاء التواصل مع مدير النظام لإعادة أعداد كلمة السر.", "MessageCreateAccountAt": "أنشئ حساب في {0}", "MessageDeleteTaskTrigger": "هل أنت متأكد أنك تريد حذف زناد المهمة؟", "MessageDirectoryPickerBSDInstruction": "بالنسبة إلى BSD ، قد تحتاج إلى إعداد التخزين داخل \"FreeNAS Jail\" حتى يتمكن Jellyfin من الوصول إلى الوسائط الخاصة بك.", @@ -645,7 +645,7 @@ "RecommendationBecauseYouWatched": "لأنك شاهدت {0}", "RecommendationDirectedBy": "إخراج {0}", "RecommendationStarring": "بطولة {0}", - "MessageChangeRecordingPath": "إن تغيير مجلد التسجيل لم يهجّر التسجيلات الموجودة من الموقع القديم إلى الموقع الجديد. سيتعين عليك أن تنقلهم بنفسك لو شئت.", + "MessageChangeRecordingPath": "إن تغيير مجلد التسجيل لن ينقل التسجيلات الموجودة من الموقع القديم إلى الموقع الجديد. سيتعين عليك أن تنقلهم بنفسك .", "RememberMe": "تذكرنى", "Rewind": "الترجيع", "Saturday": "السبت", @@ -814,7 +814,7 @@ "MessageImageTypeNotSelected": "الرجاء اختيار نوع الصورة من القائمة المنسدلة.", "MessageImageFileTypeAllowed": "ملفات JPEG و PNG مدعومون فقط.", "MessageDownloadQueued": "تمت إضافة التحميل إلى قائمة الانتظار.", - "MessageConfirmRecordingCancellation": "الغاء التسجيل؟", + "MessageConfirmRecordingCancellation": "هل تريد الغاء التسجيل؟", "MessageAreYouSureDeleteSubtitles": "هل انت متأكد انك تريد حذف ملف الترجمة هذا؟", "Menu": "القائمة", "MediaIsBeingConverted": "يتم تحويل الوسط الى صيغة متوافقة مع الحهاز الذي يشغل الوسط.", From b38df3d55289ddd3b675c6e8726ef4d316d40e0f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 30 Jun 2025 17:56:56 +0000 Subject: [PATCH 591/645] Update github/codeql-action action to v3.29.2 --- .github/workflows/__codeql.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/__codeql.yml b/.github/workflows/__codeql.yml index 54bccbf55..c001ec143 100644 --- a/.github/workflows/__codeql.yml +++ b/.github/workflows/__codeql.yml @@ -26,15 +26,15 @@ jobs: show-progress: false - name: Initialize CodeQL 🛠️ - uses: github/codeql-action/init@39edc492dbe16b1465b0cafca41432d857bdb31a # v3.29.1 + uses: github/codeql-action/init@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2 with: queries: security-and-quality languages: ${{ matrix.language }} - name: Autobuild 📦 - uses: github/codeql-action/autobuild@39edc492dbe16b1465b0cafca41432d857bdb31a # v3.29.1 + uses: github/codeql-action/autobuild@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2 - name: Perform CodeQL Analysis 🧪 - uses: github/codeql-action/analyze@39edc492dbe16b1465b0cafca41432d857bdb31a # v3.29.1 + uses: github/codeql-action/analyze@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2 with: category: '/language:${{matrix.language}}' From 5a1f44391df66e9c6d70dcf297e446b55666b1a4 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Mon, 30 Jun 2025 13:43:16 -0400 Subject: [PATCH 592/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index e834999c6..da19a915d 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -496,7 +496,7 @@ "RecordingCancelled": "Enregistrament cancel·lat.", "RecordingScheduled": "Enregistrament programat.", "Refresh": "Actualitza", - "RefreshMetadata": "Actualitza les metadades", + "RefreshMetadata": "Actualització de les metadades", "RefreshQueued": "Actualització posada a la cua.", "ReleaseDate": "Data d'estrena", "RememberMe": "Recorda-m'ho", @@ -504,7 +504,7 @@ "RemoveFromPlaylist": "Esborra de la llista de reproducció", "Repeat": "Repeteix", "RepeatEpisodes": "Repeteix els episodis", - "ReplaceAllMetadata": "Substitueix totes les metadades", + "ReplaceAllMetadata": "Substitució de totes les metadades", "ReplaceExistingImages": "Substitueix les imatges existents", "ResumeAt": "Reprodueix des de {0}", "Saturday": "Dissabte", @@ -512,7 +512,7 @@ "Screenshots": "Captures de pantalla", "Search": "Cerca", "SearchForCollectionInternetMetadata": "Cerca imatges i metadades a Internet", - "SearchForMissingMetadata": "Cerca metadades perdudes", + "SearchForMissingMetadata": "Cerca de metadades perdudes", "SearchForSubtitles": "Cerca subtítols", "SendMessage": "Envia un missatge", "SeriesCancelled": "Sèrie cancel·lada.", @@ -961,7 +961,7 @@ "Screenshot": "Captura", "Schedule": "Programa", "ScanLibrary": "S'estan escanejant les mediateques", - "ScanForNewAndUpdatedFiles": "Cerca fitxers nous i actualitzats", + "ScanForNewAndUpdatedFiles": "Cerca de fitxers nous i actualitzats", "SaveSubtitlesIntoMediaFoldersHelp": "L'emmagatzematge dels subtítols amb els fitxers de vídeo permetrà gestionar-los amb més facilitat.", "SaveSubtitlesIntoMediaFolders": "Desa els subtítols en els directoris de continguts multimèdia", "NoSubtitlesHelp": "Els subtítols no es carregaran per defecte. Encara es poden activar de forma manual durant la reproducció.", From 9f6e3c306190726384e4251217a8110b3e13258b Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Mon, 30 Jun 2025 17:05:22 -0400 Subject: [PATCH 593/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index da19a915d..b7ddc4b15 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -437,7 +437,7 @@ "OptionDaily": "Diari", "OptionDateAdded": "Afegit el", "OptionDateAddedImportTime": "Fes servir la data d'escaneig", - "OptionDatePlayed": "Reproduït el", + "OptionDatePlayed": "Data de reproducció", "OptionDisableUser": "Habilita aquest usuari", "OptionDisableUserHelp": "El servidor no permetrà cap connexió d’aquest usuari. Les connexions existents es tancaran immediatament.", "OptionDislikes": "No m'agrada", @@ -672,7 +672,7 @@ "ColorPrimaries": "Colors primaris", "DefaultMetadataLangaugeDescription": "Aquests són els vostres valors per defecte i poden ser personalitzats per a cada mediateca.", "Default": "Per defecte", - "DatePlayed": "Reproduït el", + "DatePlayed": "Data de reproducció", "DateAdded": "Data d'addició", "CustomDlnaProfilesHelp": "Crear un perfil personalitzat per a un nou dispositiu o substituir un perfil de sistema.", "HeaderAdmin": "Administració", @@ -1417,7 +1417,7 @@ "PleaseAddAtLeastOneFolder": "Afegiu-hi almenys un directori fent clic al botó '+'.", "PlayNextEpisodeAutomatically": "Reprodueix l'episodi següent de forma automàtica", "PlayNext": "Reprodueix el següent", - "PlayCount": "Comptador de reproduccions", + "PlayCount": "Nombre de reproduccions", "PlaybackRate": "Velocitat de reproducció", "PlaybackErrorNoCompatibleStream": "Aquest client no és compatible amb el contingut multimèdia i el servidor no està enviant un format multimèdia compatible.", "PlaybackData": "Informació de reproducció", @@ -1433,7 +1433,7 @@ "PasswordResetProviderHelp": "Escollir un proveïdor de restabliment de contrasenya que s'utilitzarà quan l'usuari sol·liciti un restabliment de contrasenya.", "PackageInstallFailed": "Ha fallat la instal·lació de {0} (versió {1}).", "PackageInstallCompleted": "S'ha acabat la instal·lació de {0} (versió {1}).", - "Overview": "Visió de conjunt", + "Overview": "Sinopsi", "OptionTrackName": "Nom de la pista", "OptionSaveMetadataAsHiddenHelp": "La configuració s'aplicarà a les metadades noves que es vagin creant. Els fitxers existents de metadades s'actualitzaran la propera vegada que es desin al servidor.", "OptionResElement": "'res' element", From 78ea4d934246f5ffc96218d69043ec843c9947aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petric=C4=83=20Andrei-Cosmin?= Date: Mon, 30 Jun 2025 20:25:27 -0400 Subject: [PATCH 594/645] Translated using Weblate (Romanian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/ --- src/strings/ro.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/ro.json b/src/strings/ro.json index 25afc0e5c..f47f74a15 100644 --- a/src/strings/ro.json +++ b/src/strings/ro.json @@ -255,7 +255,7 @@ "ButtonRename": "Redenumește", "ButtonResetEasyPassword": "Resetează codul Easy PIN", "ButtonResume": "Continuă", - "ButtonScanAllLibraries": "Scanează Toate Librariile", + "ButtonScanAllLibraries": "Scanează Toate Librăriile", "ButtonSelectView": "Selectați perspectivă", "ButtonSend": "Trimite", "ButtonShutdown": "Oprește", @@ -1363,7 +1363,7 @@ "Subtitle": "Subtitrare", "SpecialFeatures": "Caracteristici Speciale", "SelectServer": "Selectează server", - "Restart": "Redemarare", + "Restart": "Restartează", "ResetPassword": "Resetează Parola", "Profile": "Profil", "PosterCard": "Afiș", From b979240a9fcecce49c29d8a600bea591832db777 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petric=C4=83=20Andrei-Cosmin?= Date: Mon, 30 Jun 2025 20:35:47 -0400 Subject: [PATCH 595/645] Translated using Weblate (Romanian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/ --- src/strings/ro.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/ro.json b/src/strings/ro.json index f47f74a15..9400d154a 100644 --- a/src/strings/ro.json +++ b/src/strings/ro.json @@ -1681,7 +1681,7 @@ "LabelParallelImageEncodingLimitHelp": "Numărul maxim de encodări ale imaginilor care sunt permise să ruleze simultan. Lăsând această opțiune goală, se va alege automat o limită bazată pe specificațiile tehnice ale sistemului.", "HeaderDummyChapter": "Imaginile Capitolelor", "HeaderRecordingMetadataSaving": "Înregistrarea Metadatelor", - "EnableSplashScreen": "Activează imaginea ecranului de pornire", + "EnableSplashScreen": "Activează ecranul de pornire", "StereoDownmixAlgorithmHelp": "Algoritm utilizat pentru downmix multi-canale audio la stereo.", "Short": "Scurt", "MediaInfoDoViTitle": "Titlu DV", From 6316bdb53bfd1548bf8742e5c48d1f009e3dcfa9 Mon Sep 17 00:00:00 2001 From: Edson Date: Tue, 1 Jul 2025 00:54:16 -0400 Subject: [PATCH 596/645] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 10a0e4052..5a1a791bd 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1524,7 +1524,7 @@ "OnApplicationStartup": "Na inicialização do aplicativo", "MessageSyncPlayLibraryAccessDenied": "O acesso a este conteúdo é restrito.", "SortName": "Classificar nome", - "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "Estas definições também se aplicam a qualquer reprodução do Google Cast iniciada por este dispositivo.", + "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "Essas configurações também se aplicam a qualquer reprodução do Google Cast iniciada por este dispositivo.", "OnWakeFromSleep": "Ao acordar da suspensão", "OptionMaxActiveSessionsHelp": "Um valor 0 desativará o recurso.", "Watched": "Assistido", @@ -1591,7 +1591,7 @@ "LogLevel.Critical": "Crítico", "New": "Novo", "SubtitleWhite": "Branco", - "SubtitleLightGray": "Cinzento-claro", + "SubtitleLightGray": "Cinza claro", "Track": "Faixa", "TypeOptionPluralMusicArtist": "Artistas musicais", "TypeOptionPluralSeason": "Temporadas", @@ -1631,7 +1631,7 @@ "LogoScreensaver": "Logótipo da proteção de ecrã", "MediaInfoColorSpace": "Espaço colorido", "Studio": "Estúdio", - "SubtitleGray": "Cinzento", + "SubtitleGray": "Cinza", "TabLogs": "Registos (Logs)", "Tags": "Etiquetas", "Vertical": "Vertical", @@ -1705,7 +1705,7 @@ "LabelBuildVersion": "Versão de compilação", "LabelWebVersion": "Versão web", "SubtitleCyan": "Ciano", - "SubtitleOffset": "Desvio das legendas", + "SubtitleOffset": "Deslocamento de legenda", "ValueOneMusicVideo": "1 videoclipe", "ValueOneSeries": "1 série", "XmlTvSportsCategoriesHelp": "Lista de categorias, separadas por '|', que correspondem a programas de desporto.", @@ -2043,5 +2043,17 @@ "LabelBackupsUnavailable": "Sem cópias de segurança disponíveis", "LabelDatabase": "Base de dados", "LabelImageCache": "Memória cache de imagens", - "LabelProgramData": "Dados da aplicação" + "LabelProgramData": "Dados da aplicação", + "MessageRestoreDisclaimer": "AVISO: Você está prestes a restaurar a partir de um backup anterior. Seu servidor ficará inutilizável durante o processo e todos os novos dados criados desde o backup serão perdidos.", + "RepositoriesPageLoadError": "Falha ao carregar repositórios", + "PluginsLoadError": "Ocorreu um erro ao carregar os plugins.", + "MessageRestoreInProgress": "Restauração em andamento", + "MessageRestoreSuccess": "Restauração concluída com sucesso", + "StorageType.CDRom": "CD-ROM", + "StorageType.NoRootDirectory": "Nenhum diretório raiz", + "StorageType.Ram": "RAM", + "StorageType.Removable": "Removível", + "StorageType.Fixed": "Consertado", + "StorageType.Network": "Network", + "MessageWaitingForServer": "Aguardando servidor..." } From 78c24696d0c13852038761d47d2f1b9afd93386a Mon Sep 17 00:00:00 2001 From: Spiros Vita Date: Tue, 1 Jul 2025 05:03:07 -0400 Subject: [PATCH 597/645] Translated using Weblate (Greek) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/el/ --- src/strings/el.json | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/src/strings/el.json b/src/strings/el.json index d661aafee..7c8c2927a 100644 --- a/src/strings/el.json +++ b/src/strings/el.json @@ -66,7 +66,7 @@ "ButtonParentalControl": "Γονικός έλεγχος", "ButtonPause": "Παύση", "ButtonPreviousTrack": "Προηγούμενο", - "ButtonQuickStartGuide": "Οδηγός Γρήγορης Εκκίνησης", + "ButtonQuickStartGuide": "Οδηγός Ρύθμισης", "ButtonRefreshGuideData": "Ανανέωση Δεδομένων Οδηγού", "ButtonRemove": "Κατάργηση", "ButtonRename": "Μετονομασία", @@ -1304,7 +1304,7 @@ "LabelSyncPlaySettingsSpeedToSyncHelp": "Μέθοδος διόρθωσης συγχρονισμού που συνίσταται στην επιτάχυνση της αναπαραγωγής. Η διόρθωση συγχρονισμού πρέπει να είναι ενεργοποιημένη.", "LabelSyncPlaySettingsSkipToSyncHelp": "Μέθοδος διόρθωσης συγχρονισμού που συνίσταται στην αναζήτηση της εκτιμώμενης θέσης. Η διόρθωση συγχρονισμού πρέπει να είναι ενεργοποιημένη.", "LabelTonemappingDesatHelp": "Εφαρμόστε αποκορεσμό για τονισμένα σημεία που υπερβαίνουν αυτό το επίπεδο φωτεινότητας. Οι συνιστώμενη τιμή είναι 0 (απενεργοποίηση).", - "LabelTonemappingParamHelp": "Συντονίστε τον αλγόριθμο χαρτογράφησης τόνου. Οι συνιστώμενες και προεπιλεγμένες τιμές είναι NaN. Γενικά αφήστε το κενό.", + "LabelTonemappingParamHelp": "Συντονίστε τον αλγόριθμο χαρτογράφησης τόνου. Γενικά αφήστε το κενό.", "LabelTonemappingPeakHelp": "Παράκαμψη τιμής ενσωματωμένων μεταδεδομένων για ένα σήμα εισόδου με αυτή τη τιμή κορυφής. Οι προεπιλεγμένη τιμή είναι 100 (1000nit).", "LabelTonemappingThresholdHelp": "Οι παράμετροι του αλγορίθμου χαρτογράφησης τόνου ρυθμίζονται με ακρίβεια ανά σκηνή. Και χρησιμοποιείται ένα κατώφλι για να ανιχνεύσει εάν η σκηνή έχει αλλάξει ή όχι. Εάν η απόσταση μεταξύ της τρέχουσας μέσης φωτεινότητας του καρέ και του τρέχοντος μέσου όρου λειτουργίας υπερβαίνει μια τιμή κατωφλίου, θα υπολογίσουμε εκ νέου τη μέση φωτεινότητα της σκηνής και τη μέγιστη φωτεινότητα. Οι συνιστώμενες και προεπιλεγμένες τιμές είναι 0,8 και 0,2.", "LabelTranscodingProgress": "Πρόοδος διακωδικοποίησης", @@ -1691,7 +1691,7 @@ "LabelParallelImageEncodingLimit": "Οριο παράλληλης κωδικοποίησης εικόνων", "HeaderRecordingMetadataSaving": "Καταγραφή Μεταδεδομένων", "HeaderPerformance": "Επίδοση", - "LabelDummyChapterDurationHelp": "Το διάστημα ανάμεσα στα ψεύτικα κεφάλαια. Ορισμός σε 0 για την απενεργοποίηση παραγωγής ψεύτικων κεφαλαίων. Η μεταβολή αυτού δεν θα έχει επίδραση στα ήδη υπάρχοντα ψεύτικα κεφάλαια.", + "LabelDummyChapterDurationHelp": "Το διάστημα ανάμεσα στα ψεύτικα κεφάλαια σε δευτερόλεπτα. Ορίστε το σε 0 για την απενεργοποίηση δημιουργίας ψεύτικων κεφαλαίων. Η αλλαγή της ρύθμισης δεν θα έχει επίδραση στα ήδη υπάρχοντα ψεύτικα κεφάλαια.", "HeaderDummyChapter": "Εικόνες Κεφαλαίου", "LabelDummyChapterCount": "Όριο", "LabelDummyChapterCountHelp": "Ο μέγιστος αριθμός εικόνων κεφαλαίου που θα εξαχθεί για κάθε αρχείο πολυμέσων.", @@ -2001,5 +2001,37 @@ "LimitSegmentLengthHelp": "Η ενεργοποίηση αυτής της επιλογής μπορεί να βοηθήσει στην αποτροπή κολλήματος του προγράμματος αναπαραγωγής HLS κατά την αναζήτηση σε ορισμένες συσκευές, όπως οι τηλεοράσεις webOS.", "LabelQscale": "Qscale", "HeaderUpdateRequired": "Απαιτείται ενημέρωση", - "ReadInputAtNativeFramerate": "Ανάγνωση εισόδου σε εγγενή ρυθμό καρέ" + "ReadInputAtNativeFramerate": "Ανάγνωση εισόδου σε εγγενή ρυθμό καρέ", + "DownloadManager": "Λήψεις", + "LabelBackupsUnavailable": "Δεν υπάρχουν διαθέσιμα αντίγραφα ασφαλείας", + "MessageForgotPasswordPinReset": "Εισάγετε το PIN εδώ για να ολοκληρώσετε την επαναφορά κωδικού πρόσβασης", + "MessageRestoreDisclaimer": "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Θα επαναφέρετε ένα προηγούμενο αντίγραφο ασφαλείας. Ο διακομιστής σας δεν θα λειτουργεί για όσο διαρκεί η διαδικασία επαναφοράς, και όλα τα δεδομένα που δημιουργήθηκαν μετά την δημιουργία του αντίγραφου ασφαλείας θα χαθούν.", + "PluginsLoadError": "Ένα σφάλμα συνέβη κατά την φόρτωση των προσθέτων.", + "StorageType.NoRootDirectory": "Δεν υπάρχει ριζικός κατάλογος", + "LiveTVPageLoadError": "Αποτυχία φόρτωσης σελίδας καταγραφών", + "MessageRestoreSuccess": "Η επαναφορά ολοκληρώθηκε επιτυχώς", + "RepositoriesPageLoadError": "Αποτυχία φόρτωσης αποθετηρίων", + "ButtonLearnMore": "Μάθετε περισσότερα", + "LabelImageCache": "Κρυφή μνήμη εικόνων", + "StorageType.CDRom": "CD-ROM", + "StorageType.Fixed": "Σταθερός", + "StorageType.Network": "Δίκτυο", + "StorageType.Ram": "RAM", + "StorageType.Unknown": "Άγνωστος", + "Success": "Επιτυχία", + "TranscodingLoadError": "Αποτυχία φόρτωσης ρυθμίσεων διακωδικοποίησης", + "BackupsPageLoadError": "Αποτυχία φόρτωσης σελίδας αντιγράφων ασφαλείας", + "ButtonCreateBackup": "Δημιουργία αντίγραφου ασφαλείας", + "Create": "Δημιουργία", + "LabelDatabase": "Βάση δεδομένων", + "LabelRestore": "Επαναφορά", + "MessageBackupDisclaimer": "Ανάλογα με το μέγεθος της βιβλιοθήκης σας, η διαδικασία δημιουργίας αντιγράφων ασφαλείας μπορεί να διαρκέσει πολύ ώρα.", + "MessageBackupInProgress": "Δημιουργία αντιγράφων ασφαλείας σε εξέλιξη", + "MessageWaitingForServer": "Αναμονή για τον διακομιστή...", + "HeaderBackups": "Αντίγραφα ασφαλείας", + "ConfirmDeleteRepository": "Διαγραφή αποθετηρίου;", + "DeleteRepositoryConfirmation": "Είστε σίγουροι ότι θέλετε να σβήσετε αυτό το αποθετήριο;", + "HeaderBackupsHelp": "Δημιουργήστε και επαναφέρετε στιγμιότυπα του διακομιστή σας, τα οποία μπορεί να περιλαμβάνουν τη βάση δεδομένων, τα μεταδεδομένα, τους υποτίτλους και το Trickplay.", + "LabelProgramData": "Δεδομένα προγράμματος", + "MessageRestoreInProgress": "Επαναφορά σε εξέλιξη" } From e10b5cda578d3c6e8fdcb5ffa4b82ce60e4621e9 Mon Sep 17 00:00:00 2001 From: Francesco Lo Faro Date: Tue, 1 Jul 2025 06:19:51 -0400 Subject: [PATCH 598/645] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/strings/it.json b/src/strings/it.json index 8664521ff..581a78a0a 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -2031,5 +2031,36 @@ "HeaderUpdateRequired": "Aggiornamento Necessario", "ViewSettings": "Mostra impostazioni", "DownloadManager": "Scaricati", - "MessageForgotPasswordPinReset": "Inserisci il PIN per resettare la Password" + "MessageForgotPasswordPinReset": "Inserisci il PIN per resettare la Password", + "LiveTVPageLoadError": "Impossibile caricare la pagina delle registrazioni", + "MessageBackupDisclaimer": "In base alla grandezza della tua libreria, il processo di backup può impiegare un po' di tempo.", + "MessageRestoreDisclaimer": "ATTENZIONE: Stai per ripristinare un backup precedente. Il tuo server verrà reso inutilizzabile durante il processo e tutti i dati creati dopo il backup verranno persi.", + "RepositoriesPageLoadError": "Impossibile caricare i repository", + "PluginsLoadError": "Si è verificato un errore durante il caricamento dei plugin.", + "StorageType.NoRootDirectory": "Nessuna Cartella Radice", + "Success": "Successo", + "StorageType.Network": "Rete", + "HeaderBackups": "Backup", + "MessageBackupInProgress": "Backup in corso", + "StorageType.CDRom": "CD-ROM", + "StorageType.Fixed": "Fisso", + "StorageType.Ram": "RAM", + "StorageType.Removable": "Removibile", + "StorageType.Unknown": "Sconosciuto", + "ButtonLearnMore": "Scopri di più", + "Create": "Crea", + "HeaderBackupsHelp": "Crea e ripristina snapshot del tuo server che possono includere il database, metadati, sottotitoli e trickplay.", + "LabelBackupsUnavailable": "Nessun backup disponibile", + "LabelDatabase": "Database", + "MessageRestoreSuccess": "Ripristino completato con successo", + "MessageWaitingForServer": "In attesa del server...", + "TranscodingLoadError": "Impossibile caricare le impostazioni di transcodifica", + "BackupsPageLoadError": "Impossibile caricare la pagina dei backup", + "ButtonCreateBackup": "Crea Backup", + "ConfirmDeleteRepository": "Eliminare repository?", + "DeleteRepositoryConfirmation": "Sei sicuro di voler eliminare questo repository?", + "LabelRestore": "Ripristina", + "MessageRestoreInProgress": "Ripristino in corso", + "LabelImageCache": "Cache delle immagini", + "LabelProgramData": "Dati del programma" } From fcc8c8c879a8055b20ba3838e4c009ec336048a7 Mon Sep 17 00:00:00 2001 From: Edson Date: Tue, 1 Jul 2025 13:59:09 -0400 Subject: [PATCH 599/645] Translated using Weblate (Portuguese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pt/ --- src/strings/pt.json | 2584 +++++++++++++++++++++---------------------- 1 file changed, 1292 insertions(+), 1292 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 5a1a791bd..3c2e3ad00 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1,155 +1,155 @@ { - "HeaderTypeImageFetchers": "Fornecedores de imagens ({0})", - "HeaderSubtitleDownloads": "Transferências de Legendas", - "HeaderKodiMetadataHelp": "Para ativar ou desativar os metadados NFO, edita uma biblioteca e localiza a secção dos metadados.", - "HeaderFetcherSettings": "Definições do Pesquisador", - "HeaderCastAndCrew": "Elenco e equipa técnica", - "HeaderAppearsOn": "Presente em", + "HeaderTypeImageFetchers": "Buscadores de imagem ({0})", + "HeaderSubtitleDownloads": "Downloads de Legendas", + "HeaderKodiMetadataHelp": "Para ativar ou desativar os metadados NFO, edite uma biblioteca e encontre a seção 'Salvadores de metadados'.", + "HeaderFetcherSettings": "Configurações do Fetcher", + "HeaderCastAndCrew": "Elenco & Equipe", + "HeaderAppearsOn": "Aparece Em", "HeaderAdmin": "Administração", - "GuideProviderLogin": "Iniciar sessão", - "XmlTvPathHelp": "Caminho para um ficheiro XMLTV. O Jellyfin vai ler o ficheiro periodicamente para atualizar a programação da TV. O utilizador é responsável pela criação e atualização do ficheiro.", + "GuideProviderLogin": "Login", + "XmlTvPathHelp": "Um caminho para um arquivo XMLTV. O Jellyfin lerá este arquivo e verificará periodicamente se há atualizações. Você é responsável por criar e atualizar o arquivo.", "XmlDocumentAttributeListHelp": "Estes atributos são aplicados ao elemento principal de cada resposta XML.", - "Writer": "Argumento", - "WizardCompleted": "É tudo o que precisamos por agora. O Jellyfin começou a recolher informações sobre a tua biblioteca multimédia. Vê algumas das nossas aplicações e, em seguida, clica em Terminar para ver o Painel de Controlo.", + "Writer": "Escritor", + "WizardCompleted": "Isso é tudo que precisamos por agora. O Jellyfin começou a coletar informações sobre sua biblioteca de mídia. Confira alguns de nossos aplicativos e, em seguida, clique em Concluir para ver o Painel.", "WelcomeToProject": "Bem-vindo ao Jellyfin!", - "Wednesday": "Quarta", + "Wednesday": "Quarta-feira", "ValueVideoCodec": "Codec de Vídeo: {0}", "ValueTimeLimitSingleHour": "Limite de tempo: 1 hora", "ValueTimeLimitMultiHour": "Limite de tempo: {0} horas", "ValueSpecialEpisodeName": "Especial - {0}", "ValueConditions": "Condições: {0}", "ValueAudioCodec": "Codec de Áudio: {0}", - "UserProfilesIntro": "O Jellyfin suporta perfis de utilizadores, permitindo que cada utilizador tenha as suas definições de visualização, estado de reprodução e controlos parentais.", - "UserAgentHelp": "Forneça um 'User-Agent' HTTP personalizado.", - "Unplayed": "Por reproduzir", + "UserProfilesIntro": "O Jellyfin inclui suporte para perfis de usuário com configurações de exibição granulares, estado de reprodução e controles dos pais.", + "UserAgentHelp": "Fornecer um cabeçalho HTTP 'User-Agent' personalizado.", + "Unplayed": "Não reproduzido", "Unmute": "Ativar som", - "HeaderUninstallPlugin": "Desinstalar extensão", - "UninstallPluginConfirmation": "Tem a certeza que deseja desinstalar {0}?", + "HeaderUninstallPlugin": "Desinstalar Plugin", + "UninstallPluginConfirmation": "Tem certeza de que deseja desinstalar {0}?", "Uniform": "Uniforme", - "Tuesday": "Terça", + "Tuesday": "Terça-feira", "TrackCount": "{0} faixas", "TitlePlayback": "Reprodução", - "Thursday": "Quinta", - "ThisWizardWillGuideYou": "Este assistente irá ajudar-te durante o processo de configuração. Para começar, introduz o nome do servidor e seleciona o teu idioma.", - "TellUsAboutYourself": "Fale-nos sobre si", + "Thursday": "Quinta-feira", + "ThisWizardWillGuideYou": "Este assistente ajudará você a passar pelo processo de configuração. Para começar, insira um nome de servidor e selecione seu idioma preferido.", + "TellUsAboutYourself": "Conte-nos sobre você", "TabUpcoming": "Próximos", - "TabStreaming": "Transmissão", + "TabStreaming": "Streaming", "TabServer": "Servidor", - "TabScheduledTasks": "Tarefas agendadas", + "TabScheduledTasks": "Tarefas Agendadas", "TabResponses": "Respostas", "TabProfiles": "Perfis", - "TabPlugins": "Extensões", - "TabParentalControl": "Controlo parental", + "TabPlugins": "Plugins", + "TabParentalControl": "Controle dos pais", "TabOther": "Outro", "TabNotifications": "Notificações", - "TabNfoSettings": "Definições de ficheiros NFO", - "TabNetworks": "Canais de TV", - "TabMyPlugins": "As minhas extensões", + "TabNfoSettings": "Configurações NFO", + "TabNetworks": "Redes de TV", + "TabMyPlugins": "Meus Plugins", "TabMusic": "Música", - "TabLatest": "Adicionado recentemente", + "TabLatest": "Recentemente Adicionado", "TabDirectPlay": "Reprodução Directa", - "TabDashboard": "Painel de controlo", + "TabDashboard": "Painel", "TabContainers": "Contentores", "TabCatalog": "Catálogo", - "TabAdvanced": "Definições avançadas", + "TabAdvanced": "Avançado", "TabAccess": "Acesso", "TV": "TV", "SystemDlnaProfilesHelp": "Os perfis de sistema são apenas de leitura. Mudanças a um perfil de sistema serão guardadas num novo perfil personalizado.", "Sync": "Sincronização", "Sunday": "Domingo", "Subtitles": "Legendas", - "Sports": "Desporto", + "Sports": "Esportes", "SortChannelsBy": "Ordenar canais por", "Songs": "Músicas", - "SkipEpisodesAlreadyInMyLibraryHelp": "Os episódios serão comparados utilizando os números de episódio e temporada, quando disponíveis.", - "SkipEpisodesAlreadyInMyLibrary": "Não gravar episódios que já estejam presentes na Biblioteca", - "SimultaneousConnectionLimitHelp": "O número máximo de transmissões simultâneas permitidas. Introduz 0 para não haver limite.", - "Shuffle": "Aleatório", - "Shows": "Séries", - "ShowAdvancedSettings": "Mostrar definições avançadas", - "Share": "Partilhar", - "SettingsSaved": "Definições guardadas.", - "Settings": "Definições", - "ServerUpdateNeeded": "Este servidor precisa de ser atualizado. Para transferir a versão mais recente, visite {0}", - "ServerRestartNeededAfterPluginInstall": "O Jellyfin terá que reiniciar após instalar a extensão.", - "SeriesDisplayOrderHelp": "Ordenar episódios por data de estreia, ordem no DVD ou numeração absoluta.", - "Series": "Séries", + "SkipEpisodesAlreadyInMyLibraryHelp": "Os episódios serão comparados usando os números da temporada e do episódio, quando disponíveis.", + "SkipEpisodesAlreadyInMyLibrary": "Não gravar episódios que já estão na minha biblioteca", + "SimultaneousConnectionLimitHelp": "O número máximo de streams simultâneos permitidos. Digite 0 para sem limite.", + "Shuffle": "Embaralhar", + "Shows": "Programas", + "ShowAdvancedSettings": "Mostrar configurações avançadas", + "Share": "Compartilhar", + "SettingsSaved": "Configurações salvas.", + "Settings": "Configurações", + "ServerUpdateNeeded": "Este servidor precisa ser atualizado. Para baixar a versão mais recente, visite {0}", + "ServerRestartNeededAfterPluginInstall": "O Jellyfin precisará ser reiniciado após a instalação do plugin.", + "SeriesDisplayOrderHelp": "Ordenar episódios por data de exibição, ordem do DVD ou numeração absoluta.", + "Series": "Série", "SendMessage": "Enviar mensagem", "SearchResults": "Resultados da pesquisa", - "SearchForSubtitles": "Procurar legendas", - "SearchForCollectionInternetMetadata": "Procurar na internet por imagens e metadados", + "SearchForSubtitles": "Pesquisar legendas", + "SearchForCollectionInternetMetadata": "Pesquisar na internet por arte e metadados", "Search": "Pesquisar", "Screenshots": "Capturas de Ecrã", "Screenshot": "Captura de Ecrã", - "Schedule": "Agendamentos", - "ScanForNewAndUpdatedFiles": "Procurar ficheiros novos ou atualizados", - "SaveSubtitlesIntoMediaFoldersHelp": "Guardar ficheiros de legendas junto aos ficheiros vídeo irá facilitar a sua gestão.", - "SaveSubtitlesIntoMediaFolders": "Guardar legendas em pastas multimédia", - "Save": "Guardar", + "Schedule": "Agendar", + "ScanForNewAndUpdatedFiles": "Verificar novos arquivos e arquivos atualizados", + "SaveSubtitlesIntoMediaFoldersHelp": "Armazenar legendas ao lado de arquivos de vídeo permitirá que sejam gerenciadas mais facilmente.", + "SaveSubtitlesIntoMediaFolders": "Salvar legendas nas pastas de mídia", + "Save": "Salvar", "Saturday": "Sábado", - "Runtime": "Tempo de execução", + "Runtime": "Duração", "Rewind": "Retroceder", - "ResumeAt": "Retomar a partir de {0}", + "ResumeAt": "Retomar de {0}", "ReplaceExistingImages": "Substituir imagens existentes", "ReplaceAllMetadata": "Substituir todos os metadados", - "RepeatOne": "Repetir uma vez", + "RepeatOne": "Repetir um", "RepeatMode": "Modo de repetição", "Repeat": "Repetir", - "RemoveFromPlaylist": "Remover da lista de reprodução", + "RemoveFromPlaylist": "Remover da playlist", "Refresh": "Atualizar", "RecordingScheduled": "Gravação agendada.", "RecordingCancelled": "Gravação cancelada.", "RecordSeries": "Gravar série", "Record": "Gravar", - "RecommendationStarring": "{0} como protagonista", - "RecommendationDirectedBy": "Realizado por {0}", - "RecommendationBecauseYouWatched": "Porque viu {0}", - "RecommendationBecauseYouLike": "Porque gosta de {0}", - "Raised": "Elevado", + "RecommendationStarring": "Com {0}", + "RecommendationDirectedBy": "Dirigido por {0}", + "RecommendationBecauseYouWatched": "Porque você assistiu {0}", + "RecommendationBecauseYouLike": "Porque você gosta de {0}", + "Raised": "Levantado", "Programs": "Programas", "Producer": "Produtor", - "MessagePluginInstalled": "A extensão foi instalada com sucesso. O servidor necessitará de ser reiniciado para aplicar as alterações.", - "PleaseSelectTwoItems": "Por favor selecione pelo menos dois itens.", - "PleaseRestartServerName": "Por favor, reinicia o Jellyfin no {0}.", - "PleaseEnterNameOrId": "Introduz um nome ou um ID externo.", + "MessagePluginInstalled": "O plugin foi instalado com sucesso. O servidor precisará ser reiniciado para que as alterações tenham efeito.", + "PleaseSelectTwoItems": "Por favor, selecione pelo menos dois itens.", + "PleaseRestartServerName": "Por favor, reinicie o Jellyfin em {0}.", + "PleaseEnterNameOrId": "Por favor, insira um nome ou um ID externo.", "PleaseConfirmPluginInstallation": "Por favor clique em OK para confirmar que leu o conteúdo acima e que deseja prosseguir com a instalação da extensão.", - "PleaseAddAtLeastOneFolder": "Adiciona pelo menos uma pasta a esta biblioteca, clicando no botão '+' na secção 'Pastas'.", + "PleaseAddAtLeastOneFolder": "Por favor, adicione pelo menos uma pasta a esta biblioteca clicando no botão '+' na seção 'Pastas'.", "Playlists": "Playlists", "Played": "Reproduzido", "PlayNextEpisodeAutomatically": "Reproduzir próximo episódio automaticamente", - "PlayNext": "Reproduzir a seguir", - "PlayFromBeginning": "Reproduzir do início", - "PlayCount": "N.º de Reproduções", - "PlaybackData": "Dados de Reprodução", - "PlayAllFromHere": "Reproduzir todos a partir daqui", + "PlayNext": "Reproduzir próximo", + "PlayFromBeginning": "Reproduzir desde o início", + "PlayCount": "Contagem de Reprodução", + "PlaybackData": "Informações de Reprodução", + "PlayAllFromHere": "Reproduzir tudo a partir daqui", "Play": "Reproduzir", - "PlaceFavoriteChannelsAtBeginning": "Mover canais favoritos para o início", + "PlaceFavoriteChannelsAtBeginning": "Colocar canais favoritos no início", "PinCodeResetConfirmation": "Tem a certeza de que devia repôr o código PIN?", "PinCodeResetComplete": "O código PIN foi redefinido.", - "Photos": "Fotografias", + "Photos": "Fotos", "PerfectMatch": "Correspondência perfeita", "People": "Pessoas", - "PasswordSaved": "Palavra passe guardada.", - "PasswordResetProviderHelp": "Selecione um fornecedor de redefinição de palavra-passe a ser utilizado quando um utilizador solicitar uma redefinição de palavra-passe.", - "PasswordResetConfirmation": "Tem a certeza de que deseja redefinir a palavra-passe?", - "PasswordResetComplete": "A palavra-passe foi redefinida.", - "PasswordMatchError": "A palavra passe e a palavra passe de confirmação devem ser iguais.", - "ParentalRating": "Classificação etária", - "PackageInstallFailed": "A instalação de {0} (versão{1}) falhou.", - "PackageInstallCompleted": "A instalação de {0} (versão {1}) foi concluída.", - "PackageInstallCancelled": "A instalação de {0} (versão {1}) foi cancelada.", - "Overview": "Resumo", - "OriginalAirDateValue": "Data de estreia original: {0}", + "PasswordSaved": "Senha salva.", + "PasswordResetProviderHelp": "Escolha um provedor de redefinição de senha a ser usado quando este usuário solicitar uma redefinição de senha.", + "PasswordResetConfirmation": "Tem certeza de que deseja redefinir a senha?", + "PasswordResetComplete": "A senha foi redefinida.", + "PasswordMatchError": "A senha e a confirmação da senha devem corresponder.", + "ParentalRating": "Classificação parental", + "PackageInstallFailed": "{0} (versão {1}) instalação falhou.", + "PackageInstallCompleted": "{0} (versão {1}) instalação concluída.", + "PackageInstallCancelled": "{0} (versão {1}) instalação cancelada.", + "Overview": "Visão geral", + "OriginalAirDateValue": "Data original de exibição: {0}", "OptionWeekly": "Semanalmente", - "OptionWeekends": "Fins-de-semana", + "OptionWeekends": "Fins de semana", "OptionWeekdays": "Dias da semana", - "OptionWakeFromSleep": "Retomar da suspensão", - "OptionUnairedEpisode": "Episódios por Estrear", - "OptionTvdbRating": "Classificação no TVDB", - "OptionTrackName": "Nome da pista", + "OptionWakeFromSleep": "Despertar do sono", + "OptionUnairedEpisode": "Episódios Não Exibidos", + "OptionTvdbRating": "Avaliação TheTVDB", + "OptionTrackName": "Nome da Faixa", "OptionSubstring": "Subcadeia", "OptionSpecialEpisode": "Especiais", - "OptionSaveMetadataAsHidden": "Guardar metadados e imagens como ficheiros ocultos", + "OptionSaveMetadataAsHidden": "Salvar metadados e imagens como arquivos ocultos", "OptionResumable": "Retomável", "OptionResElement": "elemento res", "OptionReportByteRangeSeekingWhenTranscodingHelp": "Isto é necessário para alguns dispositivos que não pesquisam o tempo muito bem.", @@ -157,71 +157,71 @@ "OptionReleaseDate": "Data de Lançamento", "OptionProtocolHttp": "HTTP", "OptionProtocolHls": "Emissão HTTP em direto", - "OptionPremiereDate": "Data de Estreia", - "OptionPlayCount": "N.º de Visualizações", + "OptionPremiereDate": "Data da Estreia", + "OptionPlayCount": "Contagem de Reprodução", "OptionPlainVideoItemsHelp": "Quando activado, todos os vídeos são representados no DIDL como \"object.item.videoItem\" ao invés de um tipo mais específico como, por exemplo, \"object.item.videoItem.movie\".", "OptionPlainVideoItems": "Mostrar todos os vídeos como itens de vídeo simples", "OptionPlainStorageFoldersHelp": "Quando activado, todas as pastas são representadas no DIDL como \"object.container.storageFolder\" ao invés de um tipo mais específico como, por exemplo, \"object.container.person.musicArtist\".", "OptionPlainStorageFolders": "Mostrar todas as pastas como simples pastas de armazenamento", - "OptionParentalRating": "Classificação etária", - "OptionOnInterval": "Num intervalo", - "OptionNew": "Nova…", - "LabelSaveLocalMetadataHelp": "Guardar imagens diretamente nas pastas multimédia facilita o acesso para a sua edição.", - "LabelSaveLocalMetadata": "Guardar imagens e metadados nas pastas multimédia", - "LabelRuntimeMinutes": "Tempo de execução", - "LabelRemoteClientBitrateLimit": "Taxa de bits máxima para transmissão para a Internet (Mbps)", + "OptionParentalRating": "Classificação Parental", + "OptionOnInterval": "Em um intervalo", + "OptionNew": "Novo…", + "LabelSaveLocalMetadataHelp": "Salvar arte nas pastas de mídia as colocará em um local onde podem ser facilmente editadas.", + "LabelSaveLocalMetadata": "Salvar arte nas pastas de mídia", + "LabelRuntimeMinutes": "Duração", + "LabelRemoteClientBitrateLimit": "Limite de taxa de bits para streaming pela Internet (Mbps)", "LabelReleaseDate": "Data de lançamento", - "LabelRecordingPathHelp": "Especifica a localização predefinida para guardar as gravações. Se for deixada em branco, será utilizada a pasta de dados do programa do servidor.", - "LabelRecordingPath": "Localização predefinida das gravações", + "LabelRecordingPathHelp": "Especifique o local padrão para salvar gravações. Se deixado em branco, a pasta de dados do programa do servidor será usada.", + "LabelRecordingPath": "Caminho padrão de gravação", "LabelReasonForTranscoding": "Razão para transcodificação", - "LabelPublicHttpsPortHelp": "Número da porta pública que deverá ser transferida para a porta HTTPS local.", + "LabelPublicHttpsPortHelp": "O número da porta pública que deve ser mapeado para a porta HTTPS local.", "LabelPublicHttpsPort": "Número da porta HTTPS pública", - "LabelPublicHttpPortHelp": "Número da porta pública que deverá ser transferida para a porta HTTP local.", + "LabelPublicHttpPortHelp": "O número da porta pública que deve ser mapeado para a porta HTTP local.", "LabelPublicHttpPort": "Número da porta HTTP pública", "LabelProtocolInfoHelp": "O valor que será usado ao responder aos pedidos GetProtocolInfo do dispositivo.", "LabelProtocolInfo": "Informação do protocolo", "LabelProtocol": "Protocolo", "LabelProfileVideoCodecs": "Codecs do vídeo", "LabelProfileContainersHelp": "Separados por vírgula. Pode ser deixado em branco para usar com todos os contentores.", - "LabelProfileContainer": "Container", + "LabelProfileContainer": "Contêiner", "LabelProfileCodecsHelp": "Separados por vírgula. Pode ser deixado em branco para usar com todos os codecs.", "LabelProfileCodecs": "Codificadores", "LabelProfileAudioCodecs": "Codecs do áudio", - "LabelPreferredSubtitleLanguage": "Idioma de legendas preferido", - "LabelPreferredDisplayLanguage": "Idioma de visualização preferido", - "LabelPostProcessorArgumentsHelp": "Utilizar {path} como caminho para o ficheiro de gravação.", - "LabelPostProcessorArguments": "Argumentos de linha de comandos para a aplicação de pós-processamento", - "LabelPostProcessor": "Aplicação de pós-processamento", - "LabelPleaseRestart": "As alterações produzirão efeito depois de recarregar a página web.", + "LabelPreferredSubtitleLanguage": "Idioma de legenda preferido", + "LabelPreferredDisplayLanguage": "Idioma de exibição preferido", + "LabelPostProcessorArgumentsHelp": "Use {path} como o caminho para o arquivo de gravação.", + "LabelPostProcessorArguments": "Argumentos da linha de comando do pós-processador", + "LabelPostProcessor": "Aplicativo de pós-processamento", + "LabelPleaseRestart": "As alterações terão efeito após recarregar manualmente o cliente da web.", "LabelPlayMethod": "Método de reprodução", "LabelPlaylist": "Playlist", - "LabelPlayer": "Leitor", - "LabelPersonRoleHelp": "Exemplo: motorista da carrinha de gelados", - "LabelPersonRole": "Personagem", - "LabelPath": "Localização", + "LabelPlayer": "Reprodutor", + "LabelPersonRoleHelp": "Exemplo: Motorista do caminhão de sorvete", + "LabelPersonRole": "Papel", + "LabelPath": "Caminho", "LabelPasswordRecoveryPinCode": "Código PIN", - "LabelPasswordConfirm": "Palavra-passe (confirmar)", - "LabelPassword": "Palavra-passe", - "LabelParentalRating": "Classificação etária", - "LabelOverview": "Sinopse", + "LabelPasswordConfirm": "Senha (confirmação)", + "LabelPassword": "Senha", + "LabelParentalRating": "Classificação parental", + "LabelOverview": "Visão geral", "LabelOriginalTitle": "Título original", "LabelOriginalAspectRatio": "Proporção original", - "LabelOptionalNetworkPathHelp": "Caso a pasta esteja partilhada, fornecer o caminho de rede pode permitir aos clientes aceder diretamente aos ficheiros multimédia. Por exemplo, {0} ou {1}.", + "LabelOptionalNetworkPathHelp": "Se esta pasta estiver compartilhada na sua rede, fornecer o caminho do compartilhamento de rede pode permitir que clientes em outros dispositivos acessem os arquivos de mídia diretamente. Por exemplo, {0} ou {1}.", "LabelOptionalNetworkPath": "Pasta de rede compartilhada", - "LabelNumberOfGuideDaysHelp": "Transferir mais dias de Guia TV permite agendar com maior antecedência e ver mais listagens, no entanto, levará mais tempo a transferir. Se selecionares Automático, será escolhido o período baseado no número de canais.", - "LabelNumberOfGuideDays": "Número de dias de Guia TV a transferir", + "LabelNumberOfGuideDaysHelp": "Baixar mais dias de dados do guia fornece a capacidade de agendar com mais antecedência e ver mais listagens, mas também levará mais tempo para baixar. O automático escolherá com base no número de canais.", + "LabelNumberOfGuideDays": "Número de dias de dados do guia para baixar", "LabelNumber": "Número", "LabelNotificationEnabled": "Activar esta notificação", "LabelNewsCategories": "Categorias de notícias", - "LabelNewPasswordConfirm": "Confirmar nova palavra-passe", - "LabelNewPassword": "Nova palavra-passe", + "LabelNewPasswordConfirm": "Confirmação da nova senha", + "LabelNewPassword": "Nova senha", "LabelNewName": "Novo nome", "LabelName": "Nome", "LabelMusicStreamingTranscodingBitrateHelp": "Especifique uma taxa de bits máxima ao fazer streaming de música.", "LabelMusicStreamingTranscodingBitrate": "Taxa de transcodificação de música", - "LabelMovieRecordingPath": "Localização para gravação de filmes", - "LabelMoviePrefixHelp": "Se aplicares um prefixo aos títulos dos filmes, introduz aqui para que o servidor o possa tratar corretamente.", - "LabelMoviePrefix": "Prefixo para filmes", + "LabelMovieRecordingPath": "Caminho de gravação de filmes", + "LabelMoviePrefixHelp": "Se um prefixo for aplicado aos títulos dos filmes, insira-o aqui para que o servidor possa lidar com isso corretamente.", + "LabelMoviePrefix": "Prefixo do filme", "LabelMovieCategories": "Categorias de filmes", "LabelMonitorUsers": "Monitorizar actividade de", "LabelModelUrl": "URL do modelo", @@ -229,89 +229,89 @@ "LabelModelName": "Nome do modelo", "LabelModelDescription": "Descrição do modelo", "LabelMinScreenshotDownloadWidth": "Transferir capturas de ecrã com este tamanho mínimo:", - "LabelMinResumePercentageHelp": "Os títulos são considerados como não vistos se parados antes desta percentagem da duração.", - "LabelMinResumePercentage": "Percentagem mínima de visualização para permitir retomar", - "LabelMinResumeDurationHelp": "A duração mínima de um vídeo, em segundos, que te permite guardar o progresso e retomar a reprodução.", - "LabelMinResumeDuration": "Duração mínima para permitir retomar a reprodução", - "LabelMinBackdropDownloadWidth": "Transferir imagens de fundo com este tamanho mínimo", + "LabelMinResumePercentageHelp": "Os títulos são considerados não reproduzidos se parados antes deste tempo.", + "LabelMinResumePercentage": "Porcentagem mínima de retomar", + "LabelMinResumeDurationHelp": "O menor comprimento de vídeo em segundos que salvará a localização da reprodução e permitirá que você retome.", + "LabelMinResumeDuration": "Duração mínima para retomar", + "LabelMinBackdropDownloadWidth": "Largura mínima para download de plano de fundo", "LabelMethod": "Método", - "LabelEndDate": "Data de fim", + "LabelEndDate": "Data de término", "HeaderXmlDocumentAttributes": "Atributos do Documento XML", - "HeaderLoginFailure": "Falha no início de sessão", - "LabelMetadataPathHelp": "Introduz a localização para guardar imagens e metadados transferidos da internet.", - "LabelMetadataPath": "Localização dos metadados", - "LabelMetadataDownloadLanguage": "Idioma preferido para transferência", + "HeaderLoginFailure": "Falha no Login", + "LabelMetadataPathHelp": "Especifique um local personalizado para a arte e metadados baixados.", + "LabelMetadataPath": "Caminho dos metadados", + "LabelMetadataDownloadLanguage": "Idioma de download preferido", "LabelMetadata": "Metadados", - "LabelMessageTitle": "Titulo da mensagem", + "LabelMessageTitle": "Título da mensagem", "LabelMessageText": "Texto da mensagem", "LabelMaxStreamingBitrateHelp": "Defina uma taxa máxima de transmissão.", "LabelMaxStreamingBitrate": "Qualidade máxima de transmissão", "LabelMaxScreenshotsPerItem": "Número máximo de capturas de ecrã por item:", - "LabelMaxResumePercentageHelp": "Os títulos são considerados como vistos se parados após esta percentagem da duração.", - "LabelMaxResumePercentage": "Percentagem máxima de visualização para permitir retomar", - "LabelMaxParentalRating": "Classificação etária máxima permitida", - "LabelMaxChromecastBitrate": "Qualidade de transmissão para Chromecast", - "LabelMaxBackdropsPerItem": "Número máximo de imagens de fundo por item", + "LabelMaxResumePercentageHelp": "Os títulos são considerados totalmente reproduzidos se parados após este tempo.", + "LabelMaxResumePercentage": "Porcentagem máxima de retomar", + "LabelMaxParentalRating": "Classificação parental máxima permitida", + "LabelMaxChromecastBitrate": "Qualidade de streaming do Google Cast", + "LabelMaxBackdropsPerItem": "Número máximo de planos de fundo por item", "LabelMatchType": "Tipo de correspondência", "LabelManufacturerUrl": "URL do Fabricante", "LabelManufacturer": "Fabricante", - "LabelLoginDisclaimerHelp": "Este aviso será mostrado na parte inferior da página de início de sessão.", - "LabelLoginDisclaimer": "Aviso legal de início de sessão", - "LabelLockItemToPreventChanges": "Bloquear este item para evitar futuras alterações de metadados", + "LabelLoginDisclaimerHelp": "Uma mensagem que será exibida na parte inferior da página de login.", + "LabelLoginDisclaimer": "Aviso de login", + "LabelLockItemToPreventChanges": "Bloquear este item para evitar futuras alterações nos metadados", "LabelLocalHttpServerPortNumberHelp": "O número da porta TCP para o servidor HTTP.", "LabelLocalHttpServerPortNumber": "Número da porta HTTP local", "LabelLineup": "Programação", "LabelLanguage": "Idioma", - "LabelLanNetworks": "Redes locais (LAN)", - "LabelKodiMetadataSaveImagePathsHelp": "Esta opção é recomendada se existirem nomes de imagens que não estejam de acordo com as recomendações do Kodi.", - "LabelKodiMetadataSaveImagePaths": "Guardar a localização de imagens em ficheiros nfo", - "LabelKodiMetadataEnablePathSubstitutionHelp": "Ativa a substituição de caminhos de imagens usando as definições de substituição de caminhos do servidor.", - "LabelKodiMetadataEnablePathSubstitution": "Ativar a substituição de caminhos", - "LabelKodiMetadataEnableExtraThumbsHelp": "Ao transferir imagens, estas podem ser guardadas como extrafanart e extrathumbs para uma maior compatibilidade com os temas Kodi.", - "LabelKodiMetadataEnableExtraThumbs": "Copiar o parâmetro extrafanart para extrathumbs", - "LabelKodiMetadataDateFormatHelp": "Todas as datas presentes em ficheiros NFO serão analisadas utilizando este formato.", + "LabelLanNetworks": "Redes LAN", + "LabelKodiMetadataSaveImagePathsHelp": "Isso é recomendado se você tiver nomes de arquivos de imagem que não estão em conformidade com as diretrizes do Kodi.", + "LabelKodiMetadataSaveImagePaths": "Salvar caminhos de imagem dentro dos arquivos NFO", + "LabelKodiMetadataEnablePathSubstitutionHelp": "Ativar a substituição de caminho das imagens usando as configurações de substituição de caminho do servidor.", + "LabelKodiMetadataEnablePathSubstitution": "Ativar substituição de caminho", + "LabelKodiMetadataEnableExtraThumbsHelp": "Ao baixar imagens, elas podem ser salvas tanto em extrafanart quanto em extrathumbs para máxima compatibilidade com skins do Kodi.", + "LabelKodiMetadataEnableExtraThumbs": "Copiar extrafanart para o campo extrathumbs", + "LabelKodiMetadataDateFormatHelp": "Todas as datas dentro dos arquivos NFO serão analisadas usando este formato.", "LabelKodiMetadataDateFormat": "Formato da data de lançamento", - "LabelKidsCategories": "Categorias infantis", - "LabelKeepUpTo": "Manter, no máximo", - "LabelInternetQuality": "Qualidade para a Internet", + "LabelKidsCategories": "Categorias Infantis", + "LabelKeepUpTo": "Manter até", + "LabelInternetQuality": "Qualidade da Internet", "LabelInNetworkSignInWithEasyPasswordHelp": "Utilizar um código PIN para entrar no Jellyfin dentro da rede. A palavra-passe só será necessária fora da rede. Se o código PIN for deixado em branco, não será necessária autenticação dentro da rede.", "LabelInNetworkSignInWithEasyPassword": "Activar acesso dentro da rede com código PIN", "LabelImportOnlyFavoriteChannels": "Restringir a canais marcados como favoritos", - "LabelImageType": "Tipo de imagem", + "LabelImageType": "Tipo de Imagem", "LabelIdentificationFieldHelp": "Uma subcadeia ou expressão regex que não diferencia maiúscula de minúsculas.", "LabelIconMaxWidth": "Largura máxima do ícone", "LabelIconMaxHeight": "Altura máxima do ícone", "LabelHttpsPortHelp": "O número da porta TCP para o servidor HTTPS.", "LabelHttpsPort": "Número da porta HTTPS local", - "LabelHomeScreenSectionValue": "Secção {0} do painel principal", - "LabelHomeNetworkQuality": "Qualidade da rede interna", - "LabelHardwareAccelerationTypeHelp": "A aceleração de hardware requer configuração adicional.", + "LabelHomeScreenSectionValue": "Seção da tela inicial {0}", + "LabelHomeNetworkQuality": "Qualidade da rede local", + "LabelHardwareAccelerationTypeHelp": "A aceleração por hardware requer configuração adicional.", "LabelHardwareAccelerationType": "Aceleração por hardware", "LabelEncoderPreset": "Predefinição de codificação", - "LabelH264Crf": "CRF para codificação H.264", - "LabelGroupMoviesIntoCollectionsHelp": "Ao mostrar listas de filmes, aqueles que pertençam a uma coleção serão apresentados como um único item agrupado.", + "LabelH264Crf": "Codificação H.264 CRF", + "LabelGroupMoviesIntoCollectionsHelp": "Filmes em uma coleção serão exibidos como um único item agrupado ao exibir listas de filmes.", "LabelGroupMoviesIntoCollections": "Agrupar filmes em coleções", - "LabelServerNameHelp": "Este nome será utilizado para identificar o servidor. Hostname do servidor usado por defeito.", + "LabelServerNameHelp": "Este nome será usado para identificar o servidor e será definido como o nome do host do servidor.", "LabelFriendlyName": "Nome amigável", "LabelFormat": "Formato", - "LabelForgotPasswordUsernameHelp": "Introduz o teu nome de utilizador, se te lembrares dele.", - "LabelFont": "Tipo de Letra", + "LabelForgotPasswordUsernameHelp": "Insira seu nome de usuário, se você se lembrar.", + "LabelFont": "Fonte", "LabelFolder": "Pasta", - "LabelFinish": "Terminar", - "LabelFileOrUrl": "Ficheiro ou URL", + "LabelFinish": "Concluir", + "LabelFileOrUrl": "Arquivo ou URL", "LabelFailed": "Falhou", - "LabelExtractChaptersDuringLibraryScanHelp": "Gerar imagens dos capítulos ao importar vídeos durante a análise da biblioteca. Caso contrário, as imagens serão extraídas mais tarde, através da tarefa agendada de extração de imagens de capítulos, permitindo que a análise regular da biblioteca seja concluída mais rapidamente.", - "LabelExtractChaptersDuringLibraryScan": "Extrair imagens dos capítulos durante a análise da biblioteca", - "LabelBaseUrlHelp": "Adicione um subdiretório personalizado ao URL do servidor. Por exemplo: http://example.com/<baseurl>", - "LabelBaseUrl": "URL Base", + "LabelExtractChaptersDuringLibraryScanHelp": "Gerar imagens de capítulos ao importar vídeos durante a verificação da biblioteca. Caso contrário, elas serão extraídas durante a tarefa agendada de imagens de capítulos, permitindo que a verificação regular da biblioteca seja concluída mais rapidamente.", + "LabelExtractChaptersDuringLibraryScan": "Extrair imagens de capítulos durante a verificação da biblioteca", + "LabelBaseUrlHelp": "Adicione um subdiretório personalizado à URL do servidor. Por exemplo: http://example.com/<baseurl>", + "LabelBaseUrl": "URL base", "LabelEveryXMinutes": "A cada", "LabelEvent": "Evento", "LabelEpisodeNumber": "Número do episódio", "LabelEnableSingleImageInDidlLimitHelp": "Alguns dispositivos não interpretarão o ficheiro apropriadamente se múltiplas imagens forem incorporadas no DIDL.", "LabelEnableSingleImageInDidlLimit": "Limitar a uma imagem incorporada", - "LabelEnableRealtimeMonitorHelp": "As alterações nos arquivos serão processadas imediatamente nos sistemas de arquivos suportados.", - "LabelEnableRealtimeMonitor": "Ativar monitorização em tempo real", - "LabelEnableHardwareDecodingFor": "Ativar descodificação por hardware para", + "LabelEnableRealtimeMonitorHelp": "Alterações nos arquivos serão processadas imediatamente em sistemas de arquivos suportados.", + "LabelEnableRealtimeMonitor": "Ativar monitoramento em tempo real", + "LabelEnableHardwareDecodingFor": "Ativar decodificação de hardware para", "LabelEnableDlnaServerHelp": "Permite que dispositivos UPnP na rede naveguem e reproduzam conteúdo.", "LabelEnableDlnaServer": "Activar servidor DLNA", "LabelEnableDlnaPlayToHelp": "Detecte dispositivos em sua rede e ofereça a capacidade de controlá-los remotamente.", @@ -327,78 +327,78 @@ "LabelEmbedAlbumArtDidlHelp": "Alguns dispositivos preferem este método para obter a capa do álbum. Outros pode não ser capazes de reproduzir com esta opção activada.", "LabelEmbedAlbumArtDidl": "Incorporar a capa do álbum no DIDL", "LabelEasyPinCode": "Código PIN", - "LabelDynamicExternalId": "{0} ID", - "LabelDropShadow": "Realce", - "LabelDropImageHere": "Arraste a imagem para aqui, ou clique para procurar.", - "LabelDownloadLanguages": "Transferir os idiomas", - "LabelDownMixAudioScaleHelp": "Aumentar o volume de áudio durante o downmix. O valor 1 preserva o volume original.", - "LabelDownMixAudioScale": "Reforço de áudio durante o downmix", - "LabelDisplaySpecialsWithinSeasons": "Mostrar episódios especiais dentro das temporadas em que estrearam", - "LabelDisplayOrder": "Ordem de apresentação", - "LabelDisplayName": "Nome para apresentação", - "LabelDisplayMode": "Modo de apresentação", - "LabelDisplayLanguageHelp": "A tradução do Jellyfin é um projeto em desenvolvimento contínuo.", - "LabelDisplayLanguage": "Idioma", + "LabelDynamicExternalId": "{0} Id", + "LabelDropShadow": "Sombra projetada", + "LabelDropImageHere": "Solte a imagem aqui, ou clique para navegar.", + "LabelDownloadLanguages": "Idiomas para download", + "LabelDownMixAudioScaleHelp": "Aumenta o áudio ao fazer downmix. Um valor de um preserva o volume original.", + "LabelDownMixAudioScale": "Aumento de áudio ao fazer downmix", + "LabelDisplaySpecialsWithinSeasons": "Exibir especiais dentro das temporadas em que foram exibidos", + "LabelDisplayOrder": "Ordem de exibição", + "LabelDisplayName": "Nome de exibição", + "LabelDisplayMode": "Modo de exibição", + "LabelDisplayLanguageHelp": "Traduzir o Jellyfin é um projeto em andamento.", + "LabelDisplayLanguage": "Idioma de exibição", "LabelDiscNumber": "Número do disco", "LabelDidlMode": "Modo DIDL", "LabelDeviceDescription": "Descrição do dispositivo", "LabelDefaultUserHelp": "Determina que biblioteca será apresentada aos dispositivos ligados. Pode ser redefinido para cada dispositivo através de perfis.", "LabelDefaultUser": "Utilizador por omissão", - "LabelDefaultScreen": "Ecrã por omissão", + "LabelDefaultScreen": "Tela padrão", "LabelDeathDate": "Data de falecimento", "LabelRefreshMode": "Modo de atualização", - "LabelRecord": "Registo", - "LabelPasswordResetProvider": "Fornecedor de redefinição da palavra-passe", - "LabelMetadataSaversHelp": "Escolhe os formatos de ficheiro a utilizar para guardar os teus metadados.", - "LabelMetadataReadersHelp": "Ordene as fontes locais de metadados por ordem de prioridade. O primeiro ficheiro a ser encontrado será lido.", - "LabelMetadataReaders": "Fornecedores de metadados", - "LabelMetadataDownloadersHelp": "Ativa e ordena os teus fornecedores de metadados preferidos por ordem de prioridade. Os de menor prioridade só serão utilizados para preencher as informações em falta.", - "LabelLogs": "Registos (Logs)", - "LabelKodiMetadataUserHelp": "Guardar dados de utilização em NFO para que outras aplicações os utilizem.", - "LabelKodiMetadataUser": "Guardar dados de utilização em NFO para", - "LabelImageFetchersHelp": "Ativa e ordena os fornecedores de imagens por ordem de preferência.", + "LabelRecord": "Gravar", + "LabelPasswordResetProvider": "Provedor de Redefinição de Senha", + "LabelMetadataSaversHelp": "Escolha os formatos de arquivo a serem usados ao salvar seus metadados.", + "LabelMetadataReadersHelp": "Classifique suas fontes de metadados locais preferidas por ordem de prioridade. O primeiro arquivo encontrado será lido.", + "LabelMetadataReaders": "Leitores de metadados", + "LabelMetadataDownloadersHelp": "Ative e classifique seus downloaders de metadados preferidos por ordem de prioridade. Downloaders de prioridade mais baixa serão usados apenas para preencher informações ausentes.", + "LabelLogs": "Logs", + "LabelKodiMetadataUserHelp": "Salvar dados de visualização em arquivos NFO para outros aplicativos usarem.", + "LabelKodiMetadataUser": "Salvar dados de visualização do usuário em arquivos NFO para", + "LabelImageFetchersHelp": "Ative e classifique seus buscadores de imagem preferidos por ordem de prioridade.", "Home": "Início", "LabelDay": "Dia da semana", - "LabelDateTimeLocale": "Formato da data/hora", - "LabelDateAddedBehaviorHelp": "Se um valor de metadados estiver presente, ele sempre será usado antes de qualquer uma dessas opções.", - "LabelDateAddedBehavior": "Comportamento da data de adição para novo conteúdo", - "LabelDateAdded": "Adicionado a", - "LabelDashboardTheme": "Tema do Painel de Controlo", + "LabelDateTimeLocale": "Localidade de data e hora", + "LabelDateAddedBehaviorHelp": "Se um valor de metadado estiver presente, ele será sempre usado antes de qualquer uma dessas opções.", + "LabelDateAddedBehavior": "Comportamento da data adicionada para novos conteúdos", + "LabelDateAdded": "Data adicionada", + "LabelDashboardTheme": "Tema do Painel do Servidor", "LabelCustomRating": "Classificação personalizada", - "LabelCustomDeviceDisplayNameHelp": "Forneça um nome a ser mostrado, ou deixe em branco para utilizar o nome reportado pelo dispositivo.", - "LabelCustomCssHelp": "Aplica o teu código CSS personalizado à interface web.", - "LabelCustomCss": "codigo CSS personalizado", - "LabelCustomCertificatePathHelp": "Localização do ficheiro PKCS #12 que contém um certificado e uma chave privada para ativar o suporte TLS num domínio personalizado.", - "LabelCustomCertificatePath": "Localização do certificado SSL personalizado", - "LabelCurrentPassword": "Palavra-passe atual", + "LabelCustomDeviceDisplayNameHelp": "Forneça um nome de exibição personalizado ou deixe em branco para usar o nome informado pelo dispositivo.", + "LabelCustomCssHelp": "Aplique seu código CSS personalizado para personalização/marcação na interface da web.", + "LabelCustomCss": "Código CSS personalizado", + "LabelCustomCertificatePathHelp": "Caminho para um arquivo PKCS #12 contendo um certificado e uma chave privada para ativar o suporte a TLS em um domínio personalizado.", + "LabelCustomCertificatePath": "Caminho do certificado SSL personalizado", + "LabelCurrentPassword": "Senha atual", "LabelCriticRating": "Avaliação da crítica", "LabelCountry": "País/Região", "LabelContentType": "Tipo de conteúdo", - "LabelCommunityRating": "Classificação da comunidade", + "LabelCommunityRating": "Avaliação da comunidade", "LabelCollection": "Coleção", "LabelChannels": "Canais", - "LabelCertificatePasswordHelp": "Se o certificado requer uma palavra-passe, escreva-a aqui.", - "LabelCertificatePassword": "Palavra-passe do certificado", + "LabelCertificatePasswordHelp": "Se o seu certificado exigir uma senha, insira-a aqui.", + "LabelCertificatePassword": "Senha do certificado", "LabelCancelled": "Cancelado", - "LabelCachePathHelp": "Especifica uma localização personalizada para os ficheiros de cache do servidor, como imagens. Deixa em branco para usar a predefinição do servidor.", - "LabelCachePath": "Localização da cache", + "LabelCachePathHelp": "Especifique um local personalizado para arquivos de cache do servidor, como imagens. Deixe em branco para usar o padrão do servidor.", + "LabelCachePath": "Caminho do cache", "LabelCache": "Cache", "LabelBirthDate": "Data de nascimento", - "LabelBindToLocalNetworkAddressHelp": "Substitua o endereço IP local do servidor HTTP. Se deixado em branco, o servidor se vinculará a todos os endereços disponíveis. Alterar este valor requer um reinício.", - "LabelBindToLocalNetworkAddress": "Endereço local para colocar o servidor à escuta", - "LabelAutomaticallyRefreshInternetMetadataEvery": "Atualizar metadados automaticamente a partir da Internet", - "LabelAuthProvider": "Fornecedor de autenticação", + "LabelBindToLocalNetworkAddressHelp": "Substitua o endereço IP local para o servidor HTTP. Se deixado em branco, o servidor será vinculado a todos os endereços disponíveis. Alterar este valor requer uma reinicialização.", + "LabelBindToLocalNetworkAddress": "Vincular ao endereço de rede local", + "LabelAutomaticallyRefreshInternetMetadataEvery": "Atualizar automaticamente metadados da internet a cada", + "LabelAuthProvider": "Provedor de Autenticação", "LabelAudioSampleRate": "Taxa de amostragem de áudio", "LabelAudioLanguagePreference": "Idioma de áudio preferido", "LabelAudioCodec": "Codec de áudio", "LabelAudioChannels": "Canais de áudio", - "LabelAudioBitrate": "Taxa de bits de áudio", - "LabelArtistsHelp": "Separe artistas múltiplos com um ponto e vírgula.", + "LabelAudioBitrate": "Taxa de bits do áudio", + "LabelArtistsHelp": "Separe vários artistas com ponto e vírgula.", "LabelArtists": "Artistas", - "LabelAppNameExample": "Um nome legível por humanos para identificar as chaves da API. Esta definição não afetará a funcionalidade.", - "LabelAppName": "Nome da aplicação", - "LabelAllowedRemoteAddressesMode": "Tipo de filtro de IP remoto", - "LabelAllowedRemoteAddresses": "Filtro de IP remoto", + "LabelAppNameExample": "Um nome legível para identificar chaves de API. Esta configuração não afetará a funcionalidade.", + "LabelAppName": "Nome do app", + "LabelAllowedRemoteAddressesMode": "Modo de filtro de endereço IP remoto", + "LabelAllowedRemoteAddresses": "Filtro de endereço IP remoto", "LabelAllowHWTranscoding": "Permitir transcodificação por hardware", "LabelAlbumArtists": "Artistas do Álbum", "LabelAlbumArtPN": "PN da capa do álbum", @@ -406,27 +406,27 @@ "LabelAlbumArtMaxHeight": "Altura máxima da capa do álbum", "LabelAlbumArtHelp": "PN utilizado para a capa do álbum no atributo dlna:profileID/upnp:albumArtURI. Alguns dispositivos requerem um valor específico, independentemente do tamanho da imagem.", "LabelAlbum": "Álbum", - "LabelAirsBeforeSeason": "Estreou antes da temporada", - "LabelAirsBeforeEpisode": "Estreou antes do episódio", - "LabelAirsAfterSeason": "Estreou depois da temporada", - "LabelAirTime": "Horário", - "LabelAirDays": "Dias da Exibição", - "LabelAccessStart": "Hora de Início", - "LabelAccessEnd": "Hora de Fim", + "LabelAirsBeforeSeason": "Exibe antes da temporada", + "LabelAirsBeforeEpisode": "Exibe antes do episódio", + "LabelAirsAfterSeason": "Exibe após a temporada", + "LabelAirTime": "Horário de exibição", + "LabelAirDays": "Dias de exibição", + "LabelAccessStart": "Hora de início", + "LabelAccessEnd": "Hora de término", "LabelAccessDay": "Dia da semana", - "LabelAbortedByServerShutdown": "(Abortado - Servidor encerrado)", + "LabelAbortedByServerShutdown": "(Abortado pelo desligamento do servidor)", "Label3DFormat": "Formato 3D", "Kids": "Crianças", "Items": "Itens", "ItemCount": "{0} itens", - "InstantMix": "Mistura instântanea", - "InstallingPackage": "A instalar {0} (version {1})", - "ImportFavoriteChannelsHelp": "Apenas serão importados canais marcados como favoritos no sintonizador.", + "InstantMix": "Mistura instantânea", + "InstallingPackage": "Instalando {0} (versão {1})", + "ImportFavoriteChannelsHelp": "Apenas os canais marcados como favoritos no dispositivo sintonizador serão importados.", "Images": "Imagens", "Identify": "Identificar", - "HttpsRequiresCert": "Para ativares as ligações seguras, terás de fornecer um certificado SSL fiável, como o Let's Encrypt. Caso contrário, desativa as ligações seguras.", + "HttpsRequiresCert": "Para habilitar conexões seguras, você precisará fornecer um certificado SSL confiável, como o Let's Encrypt. Por favor, forneça um certificado ou desative as conexões seguras.", "Horizontal": "Horizontal", - "HideWatchedContentFromLatestMedia": "Ocultar títulos já vistos da secção \"Conteúdo adicionado recentemente\"", + "HideWatchedContentFromLatestMedia": "Ocultar conteúdo assistido de 'Mídia Recentemente Adicionada'", "Hide": "Ocultar", "Help": "Ajuda", "HeaderYears": "Anos", @@ -436,1084 +436,1084 @@ "HeaderVideoTypes": "Tipos de Vídeo", "HeaderVideoType": "Tipo de Vídeo", "HeaderVideoQuality": "Qualidade do Vídeo", - "HeaderUsers": "Utilizadores", - "HeaderUser": "Utilizador", + "HeaderUsers": "Usuários", + "HeaderUser": "Usuário", "HeaderUploadImage": "Enviar Imagem", - "HeaderUpcomingOnTV": "A Seguir", - "HeaderTypeText": "Inserir texto", + "HeaderUpcomingOnTV": "Próximos na TV", + "HeaderTypeText": "Inserir Texto", "HeaderTuners": "Sintonizadores", - "HeaderTunerDevices": "Sintonizadores", + "HeaderTunerDevices": "Dispositivos Sintonizadores", "HeaderTranscodingProfileHelp": "Adicionar perfis de transcodificação que indiquem que formatos deverão ser usados quando a transcodificação é necessária.", "HeaderTranscodingProfile": "Perfil da Transcodificação", "HeaderTracks": "Faixas", - "HeaderThisUserIsCurrentlyDisabled": "Este utilizador está atualmente desativado", - "HeaderTaskTriggers": "Tarefas agendadas", + "HeaderThisUserIsCurrentlyDisabled": "Este usuário está atualmente desativado", + "HeaderTaskTriggers": "Gatilhos de Tarefa", "HeaderSystemDlnaProfiles": "Perfis de Sistema", "HeaderSubtitleProfilesHelp": "Os perfis da legenda descrevem os formatos da legenda suportados pelo dispositivo.", "HeaderSubtitleProfiles": "Perfis da Legenda", "HeaderSubtitleProfile": "Perfil da Legenda", - "HeaderSubtitleAppearance": "Aparência das Legendas", - "HeaderStopRecording": "Parar gravação", - "HeaderStatus": "Estado", - "HeaderStartNow": "Iniciar", - "HeaderSpecialEpisodeInfo": "Informação sobre o episódio especial", - "HeaderSortOrder": "Sequência de ordenação", - "HeaderSortBy": "Ordenar por", - "HeaderSetupLibrary": "Configurar bibliotecas multimédia", + "HeaderSubtitleAppearance": "Aparência da Legenda", + "HeaderStopRecording": "Parar Gravação", + "HeaderStatus": "Status", + "HeaderStartNow": "Iniciar Agora", + "HeaderSpecialEpisodeInfo": "Informações sobre Episódios Especiais", + "HeaderSortOrder": "Ordem de Classificação", + "HeaderSortBy": "Ordenar Por", + "HeaderSetupLibrary": "Configurar suas bibliotecas de mídia", "HeaderServerSettings": "Configurações do Servidor", - "HeaderSeriesStatus": "Estado da Série", + "HeaderSeriesStatus": "Status da Série", "HeaderSeriesOptions": "Opções da Série", - "HeaderSendMessage": "Enviar mensagem", - "HeaderSelectTranscodingPathHelp": "Pesquisa ou introduz a localização que pretendes utilizar para os ficheiros de transcodificação. O servidor requer permissões de escrita nesta pasta.", - "HeaderSelectTranscodingPath": "Seleccione o Local Temporário da Transcodificação", - "HeaderSelectServerCachePathHelp": "Pesquisa ou introduz a localização que pretendes utilizar para os ficheiros de cache do servidor. O servidor requer permissões de escrita nesta pasta.", - "HeaderSelectServerCachePath": "Seleciona a localização da cache do servidor", - "HeaderSelectPath": "Seleciona a localização", - "HeaderSelectMetadataPathHelp": "Pesquisa ou introduz a localização que pretendes utilizar para os metadados. O servidor requer permissões de escrita nesta pasta.", - "HeaderSelectMetadataPath": "Seleciona a localização dos metadados", - "HeaderSelectCertificatePath": "Seleciona a localização do certificado", - "HeaderSecondsValue": "{0} segundos", + "HeaderSendMessage": "Enviar Mensagem", + "HeaderSelectTranscodingPathHelp": "Navegue ou insira o caminho a ser usado para arquivos de transcodificação. A pasta deve ser gravável.", + "HeaderSelectTranscodingPath": "Selecionar Caminho Temporário de Transcodificação", + "HeaderSelectServerCachePathHelp": "Navegue ou insira o caminho a ser usado para arquivos de cache do servidor. A pasta deve ser gravável.", + "HeaderSelectServerCachePath": "Selecionar Caminho do Cache do Servidor", + "HeaderSelectPath": "Selecionar Caminho", + "HeaderSelectMetadataPathHelp": "Navegue ou insira o caminho que deseja usar para os metadados. A pasta deve ser gravável.", + "HeaderSelectMetadataPath": "Selecionar Caminho dos Metadados", + "HeaderSelectCertificatePath": "Selecionar Caminho do Certificado", + "HeaderSecondsValue": "{0} Segundos", "HeaderSeasons": "Temporadas", "HeaderScenes": "Cenas", "HeaderRunningTasks": "Tarefas em Execução", - "HeaderRevisionHistory": "Histórico de Versões", + "HeaderRevisionHistory": "Histórico de Revisões", "HeaderResponseProfileHelp": "Os perfis de resposta oferecem uma forma de individualizar a informação enviada para o dispositivo ao executar certos ficheiros multimédia.", "HeaderResponseProfile": "Perfil de Resposta", - "HeaderRemoveMediaLocation": "Remover Localização dos ficheiros multimédia", - "HeaderRemoveMediaFolder": "Excluir Pasta Multimédia", - "HeaderRemoteControl": "Telecomando", - "HeaderRecordingPostProcessing": "Pós-processamento de gravação", - "HeaderRecordingOptions": "Opções de gravação", - "HeaderRecentlyPlayed": "Reproduzido Recentemente", + "HeaderRemoveMediaLocation": "Remover Local de Mídia", + "HeaderRemoveMediaFolder": "Remover Pasta de Mídia", + "HeaderRemoteControl": "Controle Remoto", + "HeaderRecordingPostProcessing": "Pós-processamento de Gravação", + "HeaderRecordingOptions": "Opções de Gravação", + "HeaderRecentlyPlayed": "Reproduzidos Recentemente", "HeaderProfileServerSettingsHelp": "Estes campos controlam como o servidor se apresenta aos clientes.", "HeaderProfileInformation": "Informação do Perfil", - "HeaderPreferredMetadataLanguage": "Idioma Preferido dos Metadados", + "HeaderPreferredMetadataLanguage": "Idioma de Metadados Preferido", "HeaderPluginInstallation": "Instalar Extensão", - "HeaderPleaseSignIn": "Iniciar sessão", - "HeaderPlaybackError": "Erro na reprodução", - "HeaderPlayback": "Reprodução de multimédia", - "HeaderPlayOn": "Reproduzir em", - "HeaderPlayAll": "Reproduzir tudo", + "HeaderPleaseSignIn": "Por favor, faça login", + "HeaderPlaybackError": "Erro de Reprodução", + "HeaderPlayback": "Reprodução de Mídia", + "HeaderPlayOn": "Reproduzir Em", + "HeaderPlayAll": "Reproduzir Tudo", "HeaderPinCodeReset": "Redefinir Código PIN", - "HeaderPhotoAlbums": "Álbuns de fotografias", - "HeaderPaths": "Localizações", - "HeaderPasswordReset": "Redefinição de palavra-passe", - "HeaderPassword": "Palavra-passe", - "HeaderParentalRatings": "Classificações etárias", - "HeaderOtherItems": "Outros itens", - "HeaderOnNow": "No ar", - "HeaderNextVideoPlayingInValue": "O próximo vídeo começa dentro de {0}", - "HeaderNextEpisodePlayingInValue": "O próximo episódio começa dentro de {0}", - "HeaderNewDevices": "Novos dispositivos", - "HeaderNewApiKey": "Nova chave API", - "HeaderMyMediaSmall": "O meu conteúdo (pequeno)", - "HeaderMyMedia": "O meu conteúdo", + "HeaderPhotoAlbums": "Álbuns de Fotos", + "HeaderPaths": "Caminhos", + "HeaderPasswordReset": "Redefinição de Senha", + "HeaderPassword": "Senha", + "HeaderParentalRatings": "Classificações dos Pais", + "HeaderOtherItems": "Outros Itens", + "HeaderOnNow": "Agora", + "HeaderNextVideoPlayingInValue": "Próximo Vídeo Tocando em {0}", + "HeaderNextEpisodePlayingInValue": "Próximo Episódio Tocando em {0}", + "HeaderNewDevices": "Novos Dispositivos", + "HeaderNewApiKey": "Nova Chave da API", + "HeaderMyMediaSmall": "Minha Mídia (pequeno)", + "HeaderMyMedia": "Minha Mídia", "HeaderMyDevice": "O meu dispositivo", - "HeaderMusicQuality": "Qualidade da música", - "HeaderMoreLikeThis": "Títulos semelhantes", - "HeaderMetadataSettings": "Definições de metadados", - "HeaderMediaFolders": "Pastas Multimédia", - "HeaderMedia": "Multimédia", - "HeaderLiveTvTunerSetup": "Configurar Sintonizador de TV", - "HeaderLibrarySettings": "Definições da biblioteca", - "HeaderLibraryOrder": "Ordenação da Biblioteca", - "HeaderLibraryFolders": "Pastas Multimédia", - "HeaderLibraryAccess": "Acesso à biblioteca", + "HeaderMusicQuality": "Qualidade da Música", + "HeaderMoreLikeThis": "Mais Como Isso", + "HeaderMetadataSettings": "Configurações de Metadados", + "HeaderMediaFolders": "Pastas de Mídia", + "HeaderMedia": "Mídia", + "HeaderLiveTvTunerSetup": "Configuração do Sintonizador de TV Ao Vivo", + "HeaderLibrarySettings": "Configurações da Biblioteca", + "HeaderLibraryOrder": "Ordem da Biblioteca", + "HeaderLibraryFolders": "Pastas da Biblioteca", + "HeaderLibraryAccess": "Acesso à Biblioteca", "HeaderLibraries": "Bibliotecas", - "HeaderLatestRecordings": "Gravações adicionadas recentemente", - "HeaderLatestMusic": "Músicas adicionadas recentemente", - "HeaderLatestMovies": "Filmes adicionados recentemente", - "HeaderLatestMedia": "Conteúdo adicionado recentemente", - "HeaderLatestEpisodes": "Episódios adicionados recentemente", + "HeaderLatestRecordings": "Gravações Recentemente Adicionadas", + "HeaderLatestMusic": "Músicas Recentemente Adicionadas", + "HeaderLatestMovies": "Filmes Recentemente Adicionados", + "HeaderLatestMedia": "Mídia Recentemente Adicionada", + "HeaderLatestEpisodes": "Episódios Recentemente Adicionados", "HeaderKeepSeries": "Manter Série", - "HeaderKeepRecording": "Continuar a gravar", - "HeaderInstantMix": "Mistura instantânea", + "HeaderKeepRecording": "Manter Gravação", + "HeaderInstantMix": "Mistura Instantânea", "HeaderInstall": "Instalar", "HeaderImageSettings": "Configurações de Imagem", "HeaderImageOptions": "Opções de Imagem", - "HeaderIdentifyItemHelp": "Introduz um ou mais critérios de pesquisa. Remove os critérios para aumentar os resultados da pesquisa.", + "HeaderIdentifyItemHelp": "Insira um ou mais critérios de pesquisa. Remova critérios para aumentar os resultados da pesquisa.", "HeaderIdentificationHeader": "Cabeçalho de Identificação", "HeaderIdentificationCriteriaHelp": "Introduza, pelo menos, um critério de identificação.", "HeaderIdentification": "Identificação", "HeaderHttpHeaders": "Cabeçalhos HTTP", - "HeaderGuideProviders": "Fornecedores de Guia TV", - "HeaderDeleteTaskTrigger": "Remover tarefa agendada", - "HeaderBranding": "Marca", - "HeaderFrequentlyPlayed": "Reproduzido Frequentemente", - "HeaderForKids": "Para crianças", - "HeaderFetchImages": "Procurar Imagens", + "HeaderGuideProviders": "Provedores de Dados da Guia de TV", + "HeaderDeleteTaskTrigger": "Excluir Gatilho da Tarefa", + "HeaderBranding": "Branding", + "HeaderFrequentlyPlayed": "Reproduzidos com Frequência", + "HeaderForKids": "Para Crianças", + "HeaderFetchImages": "Buscar Imagens", "OptionDownloadImagesInAdvanceHelp": "Por omissão, a maioria das imagens são transferidas apenas quando uma aplicação do Jellyfin as solicita. Active esta opção para descarregar todas as imagens antecipadamente, assim que novos ficheiros multimédia sejam importados. Isto pode aumentar significativamente a duração da análise da biblioteca.", "OptionDownloadImagesInAdvance": "Transferir imagens antecipadamente", "OptionDislikes": "Não gostos", - "OptionDisableUserHelp": "O servidor não permitirá nenhuma conexão deste usuário. As conexões existentes serão encerradas abruptamente.", - "OptionDisableUser": "Desativar este utilizador", - "OptionDatePlayed": "Data de reprodução", - "OptionDateAddedImportTime": "Utilizar a data da análise para a biblioteca", - "OptionDateAddedFileTime": "Usar a data de criação do ficheiro", - "OptionDateAdded": "Data de adição", + "OptionDisableUserHelp": "O servidor não permitirá conexões deste usuário. Conexões existentes serão encerradas abruptamente.", + "OptionDisableUser": "Desativar este usuário", + "OptionDatePlayed": "Data Reproduzida", + "OptionDateAddedImportTime": "Usar data escaneada na biblioteca", + "OptionDateAddedFileTime": "Usar data de criação do arquivo", + "OptionDateAdded": "Data Adicionada", "OptionDaily": "Diariamente", "OptionCustomUsers": "Personalizado", - "OptionCriticRating": "Classificação dos críticos", - "OptionCommunityRating": "Classificação da comunidade", - "OptionAllowVideoPlaybackTranscoding": "Permitir reprodução de vídeo que necessite de transcodificação", - "OptionAllowUserToManageServer": "Permitir a este utilizador gerir o servidor", - "OptionAllowRemoteSharedDevicesHelp": "Dispositivos DLNA são considerados partilhados até que um utilizador comece a controlá-lo.", - "OptionAllowRemoteSharedDevices": "Permitir controlo remoto de dispositivos partilhados", - "MessageConfirmDeleteTunerDevice": "Tem a certeza que deseja remover este dispositivo?", - "MapChannels": "Mapear canais", - "ManageLibrary": "Gerir biblioteca", + "OptionCriticRating": "Avaliação da Crítica", + "OptionCommunityRating": "Avaliação da Comunidade", + "OptionAllowVideoPlaybackTranscoding": "Permitir reprodução de vídeo que requer transcodificação", + "OptionAllowUserToManageServer": "Permitir que este usuário gerencie o servidor", + "OptionAllowRemoteSharedDevicesHelp": "Dispositivos DLNA são considerados compartilhados até que um usuário comece a controlá-los.", + "OptionAllowRemoteSharedDevices": "Permitir controle remoto de dispositivos compartilhados", + "MessageConfirmDeleteTunerDevice": "Tem certeza de que deseja excluir este dispositivo?", + "MapChannels": "Mapear Canais", + "ManageLibrary": "Gerenciar biblioteca", "LabelSize": "Tamanho", - "LabelPlayDefaultAudioTrack": "Reproduzir a faixa de áudio predefinida independentemente do idioma", + "LabelPlayDefaultAudioTrack": "Reproduzir faixa de áudio padrão, independentemente do idioma", "LabelPlaceOfBirth": "Local de nascimento", - "OptionAllowRemoteControlOthers": "Permitir controlo remoto de outros utilizadores", - "OptionAllowMediaPlaybackTranscodingHelp": "Restringir o acesso à transcodificação pode causar falhas de reprodução em clientes devido a formatos de mídia não suportados.", - "OptionAllowMediaPlayback": "Permitir reprodução de multimédia", - "OptionAllowManageLiveTv": "Permitir gestão de gravações de TV em Direto", - "OptionAllowLinkSharing": "Permitir partilha nas redes sociais", + "OptionAllowRemoteControlOthers": "Permitir controle remoto de outros usuários", + "OptionAllowMediaPlaybackTranscodingHelp": "Restringir o acesso à transcodificação pode causar falhas na reprodução em clientes devido a formatos de mídia não suportados.", + "OptionAllowMediaPlayback": "Permitir reprodução de mídia", + "OptionAllowManageLiveTv": "Permitir gerenciamento de gravações da TV Ao Vivo", + "OptionAllowLinkSharing": "Permitir compartilhamento em redes sociais", "OptionAllowContentDownloading": "Permitir download dos ficheiros multimédia", - "OptionAllowBrowsingLiveTv": "Permitir acesso a TV em Directo", - "OptionAllowAudioPlaybackTranscoding": "Permitir reprodução de áudio que necessite transcodificação", + "OptionAllowBrowsingLiveTv": "Permitir acesso à TV Ao Vivo", + "OptionAllowAudioPlaybackTranscoding": "Permitir transcodificação de reprodução de áudio", "OptionAllUsers": "Todos os utilizadores", "OptionAdminUsers": "Administradores", "OneChannel": "Um canal", - "MessageNoPluginConfiguration": "Esta extensão não tem definições que possas alterar.", - "MessageNoNextUpItems": "Nenhum encontrado. Comece a ver os seus programas!", + "MessageNoPluginConfiguration": "Este plugin não possui configurações para serem definidas.", + "MessageNoNextUpItems": "Nenhum encontrado. Comece a assistir seus programas!", "News": "Notícias", - "NewCollectionNameExample": "Exemplo: Coleção Guerra das Estrelas", - "NewCollection": "Nova coleção", - "Mute": "Desativar som", + "NewCollectionNameExample": "Exemplo: Coleção Star Wars", + "NewCollection": "Nova Coleção", + "Mute": "Silenciar", "Movies": "Filmes", - "MoreUsersCanBeAddedLater": "É possível adicionar utilizadores posteriormente através do Painel de Controlo.", - "Monday": "Segunda", + "MoreUsersCanBeAddedLater": "Mais usuários podem ser adicionados depois, a partir do Painel.", + "Monday": "Segunda-feira", "MinutesBefore": "minutos antes", - "MinutesAfter": "minutos depois", - "MessageUnableToConnectToServer": "Não foi possível estabelecer ligação ao servidor. Por favor, certifique-se que o servidor está a correr e tente de novo.", - "MessageTheFollowingLocationWillBeRemovedFromLibrary": "As seguintes pastas multimédia serão removidas da tua biblioteca", - "MessageReenableUser": "Vê abaixo para reativar", - "MessagePluginInstallDisclaimer": "AVISO: Instalar uma extensão de terceiros implica riscos. Pode conter código instável ou malicioso e pode ser alterada a qualquer momento. Instala apenas extensões de autores em quem confies e está atento aos possíveis efeitos, incluindo consultas a serviços externos, análises da biblioteca mais longas ou processamento adicional em segundo plano.", - "MessagePluginConfigurationRequiresLocalAccess": "Para configurar esta extensão, inicia sessão localmente no servidor.", - "MessagePleaseEnsureInternetMetadata": "Certifique-se de que a transferência de metadados da Internet está ativada.", - "MessagePasswordResetForUsers": "Os seguintes utilizadores tiveram as suas palavras-passe redefinidas. Podem agora iniciar sessão com os códigos PIN que foram utilizados para efetuar a redefinição.", + "MinutesAfter": "minutos após", + "MessageUnableToConnectToServer": "Não conseguimos conectar ao servidor selecionado no momento. Por favor, certifique-se de que ele está em execução e tente novamente.", + "MessageTheFollowingLocationWillBeRemovedFromLibrary": "A seguinte localização de mídia será removida da sua biblioteca", + "MessageReenableUser": "Veja abaixo para reativar", + "MessagePluginInstallDisclaimer": "ATENÇÃO: Instalar um plugin de terceiros envolve riscos. Ele pode conter código instável ou malicioso, e pode mudar a qualquer momento. Instale apenas plugins de autores confiáveis e esteja ciente dos efeitos potenciais, incluindo consultas a serviços externos, verificações de biblioteca mais longas ou processamento adicional em segundo plano.", + "MessagePluginConfigurationRequiresLocalAccess": "Para configurar este plugin, faça login diretamente no seu servidor local.", + "MessagePleaseEnsureInternetMetadata": "Por favor, assegure-se de que o download de metadados da internet está ativado.", + "MessagePasswordResetForUsers": "Os seguintes usuários tiveram suas senhas redefinidas. Eles agora podem fazer login com os códigos PIN que foram usados para realizar a redefinição.", "MessageNothingHere": "Nada aqui.", "MessageNoTrailersFound": "Instale o canal de trailers para aprimorar sua experiência de cinema, adicionando uma biblioteca de trailers da Internet.", - "MessageNoPluginsInstalled": "Não existe nenhuma extensão instalada.", - "MessageNoMovieSuggestionsAvailable": "De momento, não existem sugestões de filmes disponíveis. Veja filmes e avalie-os, e regresse para ver as suas recomendações.", - "MessageNoAvailablePlugins": "Não existem extensões disponíveis.", - "MessageLeaveEmptyToInherit": "Deixa em branco para herdar as definições de um item pai ou do valor predefinido global.", + "MessageNoPluginsInstalled": "Você não tem plugins instalados.", + "MessageNoMovieSuggestionsAvailable": "Nenhuma sugestão de filme disponível no momento. Comece a assistir e avaliar seus filmes, e então volte para ver suas recomendações.", + "MessageNoAvailablePlugins": "Nenhum plugin disponível.", + "MessageLeaveEmptyToInherit": "Deixe em branco para herdar as configurações de um item pai ou o valor padrão global.", "MessageItemsAdded": "Itens adicionados.", - "MessageItemSaved": "Item guardado.", - "MessageInvalidUser": "Nome de utilizador ou palavra-passe inválidos. Por favor, tenta novamente.", - "MessageInvalidForgotPasswordPin": "Introduziste um código PIN inválido ou expirado. Tenta novamente.", - "MessageImageTypeNotSelected": "Por favor, seleccione um tipo de imagem da lista.", - "MessageImageFileTypeAllowed": "Apenas são suportados ficheiros JPEG ou PNG.", - "MessageForgotPasswordInNetworkRequired": "Por favor, volte a tentar o processo de redefinição de palavra-passe quando se encontrar dentro da sua rede local.", - "MessageForgotPasswordFileCreated": "Foi criado no servidor o ficheiro abaixo que contém instruções de como prosseguir", - "MessageFileReadError": "Ocorreu um erro ao ler este ficheiro.", - "MessageEnablingOptionLongerScans": "Ativar esta opção pode prolongar significativamente o tempo das análises da biblioteca.", - "MessageDownloadQueued": "Transferência pendente.", - "MessageDirectoryPickerLinuxInstruction": "Em sistemas operativos como Arch Linux, CentOS, Debian, Fedora, OpenSuse ou Ubuntu, é necessário dar permissão ao utilizador que executa o processo Jellyfin para ter, no mínimo, acesso de leitura à pasta.", - "MessageDirectoryPickerBSDInstruction": "Para BSD, você talvez precise configurar o armazenamento em seu FreeNAS Jail para que o Jellyfin possa acessar sua mídia.", - "MessageDeleteTaskTrigger": "Tem a certeza que deseja remover o agendamento desta tarefa?", + "MessageItemSaved": "Item salvo.", + "MessageInvalidUser": "Nome de usuário ou senha inválidos. Por favor, tente novamente.", + "MessageInvalidForgotPasswordPin": "Um código PIN inválido ou expirado foi inserido. Por favor, tente novamente.", + "MessageImageTypeNotSelected": "Por favor, selecione um tipo de imagem no menu suspenso.", + "MessageImageFileTypeAllowed": "Apenas arquivos JPEG e PNG são suportados.", + "MessageForgotPasswordInNetworkRequired": "Por favor, tente novamente dentro da sua rede doméstica para iniciar o processo de redefinição de senha.", + "MessageForgotPasswordFileCreated": "O seguinte arquivo foi criado em seu servidor e contém instruções sobre como proceder", + "MessageFileReadError": "Ocorreu um erro ao ler o arquivo. Por favor, tente novamente.", + "MessageEnablingOptionLongerScans": "Ativar esta opção pode resultar em verificações de biblioteca significativamente mais longas.", + "MessageDownloadQueued": "Download na fila.", + "MessageDirectoryPickerLinuxInstruction": "Para Linux em Arch Linux, CentOS, Debian, Fedora, openSUSE ou Ubuntu, você deve conceder ao usuário do serviço pelo menos acesso de leitura aos seus locais de armazenamento.", + "MessageDirectoryPickerBSDInstruction": "Para BSD, pode ser necessário configurar o armazenamento dentro do 'FreeNAS Jail' para que o Jellyfin possa acessar sua mídia.", + "MessageDeleteTaskTrigger": "Tem certeza de que deseja excluir este gatilho de tarefa?", "MessageCreateAccountAt": "Criar uma conta em {0}", - "MessageContactAdminToResetPassword": "Contacte o administrador do sistema para redefinir a sua palavra-passe.", - "MessageConfirmShutdown": "Tem a certeza que deseja encerrar o servidor?", - "MessageConfirmRevokeApiKey": "Tem certeza de que deseja revogar esta chave de API? A conexão do aplicativo com este servidor será encerrada abruptamente.", + "MessageContactAdminToResetPassword": "Por favor, entre em contato com o administrador do sistema para redefinir sua senha.", + "MessageConfirmShutdown": "Tem certeza de que deseja desligar o servidor?", + "MessageConfirmRevokeApiKey": "Tem certeza de que deseja revogar esta chave da API? A conexão do aplicativo com este servidor será encerrada abruptamente.", "MessageConfirmRestart": "Tem certeza de que deseja reiniciar o Jellyfin?", - "MessageConfirmRemoveMediaLocation": "Tem a certeza que deseja remover esta localização?", - "MessageConfirmRecordingCancellation": "Cancelar a gravação?", + "MessageConfirmRemoveMediaLocation": "Tem certeza de que deseja remover este local?", + "MessageConfirmRecordingCancellation": "Cancelar gravação?", "MessageConfirmProfileDeletion": "Tem a certeza de que deseja remover este perfil?", - "MessageConfirmDeleteGuideProvider": "Tem a certeza de que pretende eliminar este fornecedor de programação de TV?", - "MessageAreYouSureYouWishToRemoveMediaFolder": "Tem a certeza de que deseja remover esta pasta?", - "MessageAreYouSureDeleteSubtitles": "Tem a certeza que deseja remover este ficheiro de legendas?", + "MessageConfirmDeleteGuideProvider": "Tem certeza de que deseja excluir este provedor de guia?", + "MessageAreYouSureYouWishToRemoveMediaFolder": "Tem certeza de que deseja remover esta pasta de mídia?", + "MessageAreYouSureDeleteSubtitles": "Tem certeza de que deseja excluir este arquivo de legenda?", "MessageAlreadyInstalled": "Esta versão já se encontra instalada.", "Menu": "Menu", - "MediaIsBeingConverted": "O conteúdo está a ser convertido para um formato compatível com o dispositivo em que o está a reproduzir.", - "MediaInfoTimestamp": "Data e Hora", + "MediaIsBeingConverted": "A mídia está sendo convertida para um formato compatível com o dispositivo que está reproduzindo a mídia.", + "MediaInfoTimestamp": "Timestamp", "MediaInfoSize": "Tamanho", "MediaInfoSampleRate": "Taxa de amostragem", "MediaInfoResolution": "Resolução", "MediaInfoProfile": "Perfil", - "MediaInfoPixelFormat": "Formato dos píxeis", + "MediaInfoPixelFormat": "Formato de pixel", "MediaInfoPath": "Caminho", "MediaInfoLevel": "Nível", "MediaInfoChannels": "Canais", - "MaxParentalRatingHelp": "O conteúdo com uma classificação etária mais elevada será ocultado a este utilizador.", - "MarkUnplayed": "Marcar como não visto", - "MarkPlayed": "Marcar como visto", - "LiveTV": "TV em Directo", - "LiveBroadcasts": "Emissões em Directo", - "Live": "Em Directo", - "LibraryAccessHelp": "Seleciona as bibliotecas a partilhar com este utilizador. Os administradores poderão editar todas as pastas utilizando o gestor de metadados.", - "LatestFromLibrary": "Adicionado recentemente em {0}", + "MaxParentalRatingHelp": "Conteúdo com uma classificação mais alta será ocultado deste usuário.", + "MarkUnplayed": "Marcar como não reproduzido", + "MarkPlayed": "Marcar como reproduzido", + "LiveTV": "TV Ao Vivo", + "LiveBroadcasts": "Transmissões ao vivo", + "Live": "Ao Vivo", + "LibraryAccessHelp": "Selecione as bibliotecas para compartilhar com este usuário. Administradores poderão editar todas as pastas usando o gerenciador de metadados.", + "LatestFromLibrary": "Recentemente Adicionado em {0}", "LabelZipCode": "Código Postal", - "LabelYoureDone": "Concluiu!", + "LabelYoureDone": "Você Concluiu!", "LabelXDlnaDocHelp": "Determina o conteúdo do elemento X_DLNADOC no namespace urn:schemas-dlna-org:device-1-0.", "LabelXDlnaCapHelp": "Determina o conteúdo do elemento X_DLNACAP no namespace urn:schemas-dlna-org:device-1-0.", - "LabelVersionInstalled": "{0} instalado", + "LabelVersionInstalled": "{0} instalada", "LabelValue": "Valor", - "LabelUsername": "Nome de utilizador", - "LabelUserRemoteClientBitrateLimitHelp": "Esta opção substituirá o valor predefinido do servidor, definido no Painel de Controlo > Reprodução > Transmissão.", + "LabelUsername": "Nome de usuário", + "LabelUserRemoteClientBitrateLimitHelp": "Substitua o valor global padrão definido nas configurações do servidor, veja Painel > Reprodução > Streaming.", "LabelUserLibraryHelp": "Seleccione a biblioteca de utilizador a mostrar no dispositivo. Deixe em branco para herdar a definição padrão.", "LabelUserLibrary": "Biblioteca do Utilizador", - "LabelUser": "Utilizador", + "LabelUser": "Usuário", "LabelUseNotificationServices": "Usar os seguintes serviços", "LabelTypeText": "Texto", "LabelType": "Tipo", - "LabelTunerType": "Tipo do sintonizador", - "LabelTunerIpAddress": "Endereço IP do sintonizador", - "LabelTriggerType": "Tipo do Accionador", - "LabelTranscodingThreadCountHelp": "Seleciona o número máximo de processos a utilizar durante a transcodificação. Reduzir o número de processos diminuirá a utilização do CPU, mas pode não converter com rapidez suficiente para uma experiência de reprodução suave.", - "LabelTranscodingThreadCount": "Número de processos de transcodificação", - "LabelTranscodingTempPathHelp": "Especifica um caminho personalizado para os ficheiros transcodificados enviados aos clientes, ou deixa em branco para utilizar o caminho predefinido do servidor.", + "LabelTunerType": "Tipo de sintonizador", + "LabelTunerIpAddress": "Endereço IP do Sintonizador", + "LabelTriggerType": "Tipo de gatilho", + "LabelTranscodingThreadCountHelp": "Selecione o número máximo de threads a serem usadas durante a transcodificação. Reduzir a contagem de threads diminuirá o uso da CPU, mas pode não converter rápido o suficiente para uma experiência de reprodução suave.", + "LabelTranscodingThreadCount": "Contagem de threads da transcodificação", + "LabelTranscodingTempPathHelp": "Especifique um caminho personalizado para os arquivos de transcodificação servidos aos clientes. Deixe em branco para usar o padrão do servidor.", "LabelTimeLimitHours": "Limite de tempo (horas)", - "LabelTime": "Tempo", - "LabelTextSize": "Tamanho do Texto", - "LabelTagline": "Slogan", + "LabelTime": "Hora", + "LabelTextSize": "Tamanho do texto", + "LabelTagline": "Tagline", "LabelSupportedMediaTypes": "Tipos de Conteúdos Suportados", - "LabelSubtitlePlaybackMode": "Modo de legendas", + "LabelSubtitlePlaybackMode": "Modo de legenda", "LabelSubtitleFormatHelp": "Exemplo: srt", - "LabelStopping": "A parar", - "LabelStopWhenPossible": "Parar, quando possível", - "LabelStatus": "Estado", - "LabelStartWhenPossible": "Começar, quando possível", + "LabelStopping": "Parando", + "LabelStopWhenPossible": "Parar quando possível", + "LabelStatus": "Status", + "LabelStartWhenPossible": "Iniciar quando possível", "LabelSource": "Fonte", "LabelSonyAggregationFlagsHelp": "Determina o conteúdo do elemento aggregationFlags no namespace urn:schemas-sonycom:av.", "LabelSonyAggregationFlags": "Marcas de agregação da Sony", - "LabelSkipIfGraphicalSubsPresentHelp": "Manter versões em texto das legendas resultará numa transmissão mais eficiente e diminuirá a necessidade de transcodificação de vídeo.", - "LabelSkipIfGraphicalSubsPresent": "Ignorar se o vídeo já possuir legendas integradas", - "LabelSkipIfAudioTrackPresentHelp": "Desmarque esta opção para garantir que todos os vídeos têm legendas, independentemente do idioma do áudio.", - "LabelSkipIfAudioTrackPresent": "Ignorar no caso de o idioma da faixa de áudio principal coincidir com o idioma de transferência", - "LabelSkipForwardLength": "Avançar reprodução (segundos)", - "LabelSkipBackLength": "Recuar reprodução (segundos)", - "LabelSimultaneousConnectionLimit": "Limite de transmissões simultâneas", + "LabelSkipIfGraphicalSubsPresentHelp": "Manter versões de texto das legendas resultará em entrega mais eficiente e diminuirá a probabilidade de transcodificação de vídeo.", + "LabelSkipIfGraphicalSubsPresent": "Pular se o vídeo já contiver legendas embutidas", + "LabelSkipIfAudioTrackPresentHelp": "Desmarque isso para garantir que todos os vídeos tenham legendas, independentemente do idioma do áudio.", + "LabelSkipIfAudioTrackPresent": "Pular se a faixa de áudio padrão corresponder ao idioma de download", + "LabelSkipForwardLength": "Duração do avanço", + "LabelSkipBackLength": "Duração do retrocesso", + "LabelSimultaneousConnectionLimit": "Limite de streams simultâneos", "LabelServerName": "Nome do servidor", - "LabelServerHostHelp": "192.168.1.100:8096 ou https://omeudominio.com", - "LabelServerHost": "Servidor", - "LabelSeriesRecordingPath": "Localização para gravação de séries", + "LabelServerHostHelp": "192.168.1.100:8096 ou https://meuservidor.com", + "LabelServerHost": "Host", + "LabelSeriesRecordingPath": "Caminho de gravação da série", "LabelSerialNumber": "Número de série", "LabelSendNotificationToUsers": "Enviar notificação para", - "LabelSelectVersionToInstall": "Seleciona a versão a instalar", + "LabelSelectVersionToInstall": "Selecionar versão para instalar", "LabelSelectUsers": "Seleccionar utilizadores", - "LabelSelectFolderGroupsHelp": "Pastas não selecionadas serão apresentadas sozinhas, na sua própria vista.", - "LabelSelectFolderGroups": "Agrupar automaticamente o conteúdo das pastas seguintes em vistas como Filmes, Música e TV", + "LabelSelectFolderGroupsHelp": "Pastas que não estão marcadas serão exibidas sozinhas em sua própria visualização.", + "LabelSelectFolderGroups": "Agrupar automaticamente o conteúdo das seguintes pastas em visualizações como 'Filmes', 'Música' e 'TV'", "LabelSeasonNumber": "Número da temporada", - "LabelScreensaver": "Proteção de ecrã", - "LabelScheduledTaskLastRan": "Última execução {0}. Tempo de execução {1}.", - "HeaderFeatureAccess": "Acesso a funcionalidades", + "LabelScreensaver": "Protetor de tela", + "LabelScheduledTaskLastRan": "Última execução {0}, levando {1}.", + "HeaderFeatureAccess": "Acesso a Recursos", "HeaderExternalIds": "IDs Externos", "HeaderError": "Erro", - "HeaderEnabledFieldsHelp": "Desmarque um campo para bloqueá-lo e evitar que os seus dados sejam alterados.", - "HeaderEnabledFields": "Campos ativados", - "HeaderEditImages": "Editar imagens", + "HeaderEnabledFieldsHelp": "Desmarque um campo para bloqueá-lo e impedir que seus dados sejam alterados.", + "HeaderEnabledFields": "Campos Ativados", + "HeaderEditImages": "Editar Imagens", "HeaderEasyPinCode": "Código PIN", - "HeaderDownloadSync": "Transferência e Sincronização", + "HeaderDownloadSync": "Baixar & Sincronizar", "HeaderDirectPlayProfileHelp": "Adicionar perfis de reprodução directa que indiquem que formatos o dispositivo pode suportar nativamente.", "HeaderDirectPlayProfile": "Perfil da Reprodução Directa", "HeaderDevices": "Dispositivos", "HeaderDeviceAccess": "Acesso ao Dispositivo", - "HeaderDeveloperInfo": "Informação do programador", - "HeaderDetectMyDevices": "Detetar os meus dispositivos", - "HeaderDeleteProvider": "Eliminar fornecedor", - "HeaderDeleteItems": "Remover Itens", + "HeaderDeveloperInfo": "Informações do Desenvolvedor", + "HeaderDetectMyDevices": "Detectar Meus Dispositivos", + "HeaderDeleteProvider": "Excluir Provedor", + "HeaderDeleteItems": "Excluir Itens", "Filters": "Filtros", - "FileReadError": "Ocorreu um erro ao ler o ficheiro.", - "FileReadCancelled": "A leitura do ficheiro foi cancelada.", - "FileNotFound": "Ficheiro não encontrado.", - "File": "Ficheiro", - "Features": "Funcionalidades", + "FileReadError": "Ocorreu um erro ao ler o arquivo.", + "FileReadCancelled": "A leitura do arquivo foi cancelada.", + "FileNotFound": "Arquivo não encontrado.", + "File": "Arquivo", + "Features": "Recursos", "Favorites": "Favoritos", "Favorite": "Favorito", - "FastForward": "Avanço rápido", - "FFmpegSavePathNotFound": "Não conseguimos encontrar o FFmpeg na localização que introduziste. O FFprobe também é necessário e deve estar na mesma pasta. Estes componentes são, por norma, instalados em conjunto. Por favor, verifica a localização e tenta novamente.", + "FastForward": "Avançar", + "FFmpegSavePathNotFound": "Não conseguimos encontrar o FFmpeg usando o caminho informado. O FFprobe também é necessário e deve existir na mesma pasta. Esses componentes normalmente vêm juntos no mesmo download. Verifique o caminho e tente novamente.", "Extras": "Extras", - "ExtractChapterImagesHelp": "Extrair imagens dos capítulos permite aos clientes apresentar menus de seleção de cenas com gráficos. O processo poderá ser lento e exigente em recursos, bem como ocupar múltiplos gigabytes em disco. Este processo é executado quando novos vídeos são encontrados e também através de uma tarefa agendada noturna. É possível configurar a hora de execução para que, idealmente, não coincida com horas de maior utilização.", + "ExtractChapterImagesHelp": "Extrair imagens de capítulos permitirá que os clientes exibam menus gráficos de seleção de cenas. O processo pode ser lento, intensivo em recursos e pode exigir vários gigabytes de espaço. Ele é executado quando os vídeos são descobertos e também como uma tarefa agendada noturna. O agendamento é configurável na área de tarefas agendadas. Não é recomendável executar essa tarefa durante horários de pico.", "ExtraLarge": "Extra Grande", - "ExitFullscreen": "Sair do ecrã inteiro", + "ExitFullscreen": "Sair da tela cheia", "EveryNDays": "A cada {0} dias", - "ErrorSavingTvProvider": "Ocorreu um erro ao guardar o fornecedor de televisão. Certifique-se de que está acessível e tente novamente.", - "ErrorPleaseSelectLineup": "Seleciona a programação e tenta novamente. Se não houver programações disponíveis, verifica se o teu nome de utilizador, palavra-passe e código postal estão corretos.", - "ErrorStartHourGreaterThanEnd": "A hora de fim deve ser superior à hora de início.", - "ErrorGettingTvLineups": "Ocorreu um erro ao transferir a programação de TV. Por favor, certifique-se que a sua informação está correcta e tente novamente.", - "ErrorDeletingItem": "Ocorreu um erro ao eliminar o item do servidor. Verifica se o Jellyfin tem acesso de escrita à pasta multimédia e tenta novamente.", - "ErrorAddingXmlTvFile": "Ocorreu um erro ao aceder ao ficheiro XmlTV. Por favor, garanta que o ficheiro está acessível e tente de novo.", - "ErrorAddingTunerDevice": "Ocorreu um erro ao adicionar o dispositivo de sintonização. Por favor, garanta que está acessível e tente de novo.", - "ErrorAddingMediaPathToVirtualFolder": "Ocorreu um erro ao adicionares a localização dos ficheiros. Certifica-te de que o caminho é valido e que o Jellyfin tem acesso ao mesmo.", + "ErrorSavingTvProvider": "Ocorreu um erro ao salvar o provedor de TV. Verifique se ele está acessível e tente novamente.", + "ErrorPleaseSelectLineup": "Por favor, selecione uma programação e tente novamente. Se nenhuma programação estiver disponível, verifique se seu nome de usuário, senha e código postal estão corretos.", + "ErrorStartHourGreaterThanEnd": "A hora de término deve ser maior que a hora de início.", + "ErrorGettingTvLineups": "Ocorreu um erro ao baixar as programações de TV. Verifique se suas informações estão corretas e tente novamente.", + "ErrorDeletingItem": "Ocorreu um erro ao excluir o item do servidor. Verifique se o Jellyfin tem acesso de gravação à pasta de mídia e tente novamente.", + "ErrorAddingXmlTvFile": "Ocorreu um erro ao acessar o arquivo XMLTV. Verifique se o arquivo existe e tente novamente.", + "ErrorAddingTunerDevice": "Ocorreu um erro ao adicionar o dispositivo sintonizador. Verifique se ele está acessível e tente novamente.", + "ErrorAddingMediaPathToVirtualFolder": "Ocorreu um erro ao adicionar o caminho da mídia. Verifique se o caminho é válido e se o Jellyfin tem acesso a esse local.", "Episodes": "Episódios", - "EndsAtValue": "Termina às {0}", - "EnableThemeVideosHelp": "Reproduzir vídeos do tema em plano de fundo durante a navegação pela Biblioteca.", - "EnableThemeSongsHelp": "Reproduz as bandas sonoras em segundo plano enquanto navegas na biblioteca.", - "EnableStreamLoopingHelp": "Ativa esta opção se as transmissões em direto contiverem apenas alguns segundos de dados e precisarem de ser solicitadas continuamente. Ativar esta opção quando não é necessária pode causar problemas.", - "EnablePhotosHelp": "Imagens serão detectadas e mostradas em conjunto com outros ficheiros multimédia.", - "EnablePhotos": "Mostrar fotografias", - "EnableNextVideoInfoOverlayHelp": "No final de um vídeo, mostrar informação sobre o próximo vídeo na lista de reprodução.", - "EnableNextVideoInfoOverlay": "Mostrar informação sobre o próximo vídeo durante a reprodução", + "EndsAtValue": "Termina em {0}", + "EnableThemeVideosHelp": "Reproduzir vídeos tema em segundo plano enquanto navega pela biblioteca.", + "EnableThemeSongsHelp": "Reproduzir as músicas tema em segundo plano enquanto navega pela biblioteca.", + "EnableStreamLoopingHelp": "Ative isso se os streams ao vivo contiverem apenas alguns segundos de dados e precisarem ser solicitados continuamente. Ativar isso quando não necessário pode causar problemas.", + "EnablePhotosHelp": "Imagens serão detectadas e exibidas junto com outros arquivos de mídia.", + "EnablePhotos": "Exibir as fotos", + "EnableNextVideoInfoOverlayHelp": "Ao final de um vídeo, exibir informações sobre o próximo vídeo na lista de reprodução atual.", + "EnableNextVideoInfoOverlay": "Mostrar informações do próximo vídeo durante a reprodução", "EnableHardwareEncoding": "Ativar codificação por hardware", - "EnableExternalVideoPlayersHelp": "O menu do leitor externo surgirá ao iniciar a reprodução de vídeo.", - "EnableExternalVideoPlayers": "Leitores de vídeo externos", - "EnableDisplayMirroring": "Duplicação de ecrã", - "EnableColorCodedBackgrounds": "Código de cores para o fundo", + "EnableExternalVideoPlayersHelp": "Um menu de reprodutor externo será exibido ao iniciar a reprodução de vídeo.", + "EnableExternalVideoPlayers": "Reprodutores de vídeo externos", + "EnableDisplayMirroring": "Espelhamento de exibição", + "EnableColorCodedBackgrounds": "Fundos com cores codificadas", "EnableCinemaMode": "Modo cinema", - "EnableBackdropsHelp": "Mostrar imagens de fundo em algumas páginas durante a navegação pela Biblioteca.", + "EnableBackdropsHelp": "Exibir os planos de fundo em algumas páginas enquanto navega pela biblioteca.", "EditSubtitles": "Editar legendas", "EditMetadata": "Editar metadados", "EditImages": "Editar imagens", "Edit": "Editar", "EasyPasswordHelp": "O código PIN é utilizado para acesso off-line em clientes suportados e pode ser usado para um acesso fácil dentro da rede.", - "DropShadow": "sombra projetada", - "DrmChannelsNotImported": "Canais com proteção DRM não serão importados.", - "DownloadsValue": "{0} transferências", - "Download": "Transferir", + "DropShadow": "Sombra projetada", + "DrmChannelsNotImported": "Canais com DRM não serão importados.", + "DownloadsValue": "{0} downloads", + "Download": "Baixar", "DoNotRecord": "Não gravar", - "DisplayModeHelp": "Seleciona o estilo de apresentação da interface.", - "DisplayMissingEpisodesWithinSeasonsHelp": "Deve também ser ativado para as bibliotecas de TV nas configurações do servidor.", - "DisplayMissingEpisodesWithinSeasons": "Mostrar episódios em falta numa série", - "DisplayInOtherHomeScreenSections": "Mostrar na página Início em secções como 'Conteúdo adicionado recentemente' e 'Continuar a ver'", - "DisplayInMyMedia": "Mostrar no ecrã principal", - "Display": "Visualização", - "Disconnect": "Desligar", + "DisplayModeHelp": "Selecione o estilo de layout que você deseja para a interface.", + "DisplayMissingEpisodesWithinSeasonsHelp": "Isso também deve estar ativado para bibliotecas de TV na configuração do servidor.", + "DisplayMissingEpisodesWithinSeasons": "Exibir episódios ausentes dentro das temporadas", + "DisplayInOtherHomeScreenSections": "Exibir em seções da tela inicial como 'Mídia Recentemente Adicionada' e 'Continuar Assistindo'", + "DisplayInMyMedia": "Exibir na tela inicial", + "Display": "Exibição", + "Disconnect": "Desconectar", "Disc": "Disco", - "Directors": "Realização", - "Director": "Realização", - "DirectStreaming": "Transmissão direta", - "DirectStreamHelp2": "A energia consumida pela transmissão direta depende normalmente do perfil de áudio. Apenas a transmissão do vídeo é feita sem perdas.", - "DirectStreamHelp1": "A transmissão de vídeo é compatível com o dispositivo, mas possui um formato de áudio (DTS, Dolby TrueHD, etc.) ou número de canais de áudio incompatível. A transmissão será reempacotada sem perda em tempo real antes de ser enviada para o dispositivo. Apenas a transmissão de áudio será transcodificada.", + "Directors": "Diretores", + "Director": "Diretor", + "DirectStreaming": "Streaming direto", + "DirectStreamHelp2": "O consumo de energia pelo streaming direto geralmente depende do perfil de áudio. Apenas o stream de vídeo é sem perdas.", + "DirectStreamHelp1": "O stream de vídeo é compatível com o dispositivo, mas possui um formato de áudio incompatível (DTS, Dolby TrueHD, etc.) ou número de canais de áudio. O stream de vídeo será reembalado sem perdas em tempo real antes de ser enviado ao dispositivo. Apenas o stream de áudio será transcodificado.", "DirectPlaying": "Reprodução direta", - "DeviceAccessHelp": "Apenas se aplica a dispositivos que podem ser identificados como únicos e que não impedem o acesso ao navegador. Filtrar o acesso a dispositivos a um utilizador, impede-o de utilizar novos dispositivos, até estes serem aprovados aqui.", - "DetectingDevices": "Procurando dispositivos", - "Desktop": "Área de Trabalho", + "DeviceAccessHelp": "Isso se aplica apenas a dispositivos que podem ser identificados de forma única e não impedirá o acesso pelo navegador. Filtrar o acesso do dispositivo do usuário impedirá que eles usem novos dispositivos até que tenham sido aprovados aqui.", + "DetectingDevices": "Detectando dispositivos", + "Desktop": "Desktop", "Descending": "Descendente", - "Depressed": "Baixo relevo", - "DeleteUserConfirmation": "Tens a certeza de que pretendes eliminar este utilizador?", - "DeleteUser": "Eliminar utilizador", - "DeleteMedia": "Remover multimédia", - "DeleteImageConfirmation": "Tens a certeza de que pretendes eliminar esta imagem?", - "DeleteImage": "Eliminar imagem", - "DeleteDeviceConfirmation": "Tem a certeza que deseja remover este dispositivo? Reaparecerá na próxima vez que o utilizador inicie sessão a partir dele.", - "Delete": "Eliminar", - "DefaultSubtitlesHelp": "As legendas são carregadas com base nas definições predefinidas e forçadas para os metadados incorporados. As preferências de idioma são consideradas quando existem múltiplas opções disponíveis.", - "ErrorDefault": "Ocorreu um erro ao processar o pedido. Por favor, tente novamente mais tarde.", - "Default": "Predefinição", - "DeathDateValue": "Faleceu: {0}", - "DatePlayed": "Reproduzido a", - "DateAdded": "Adicionado a", + "Depressed": "Depressivo", + "DeleteUserConfirmation": "Tem certeza de que deseja excluir este usuário?", + "DeleteUser": "Excluir usuário", + "DeleteMedia": "Excluir mídia", + "DeleteImageConfirmation": "Tem certeza de que deseja excluir esta imagem?", + "DeleteImage": "Excluir imagem", + "DeleteDeviceConfirmation": "Tem certeza de que deseja excluir este dispositivo? Ele reaparecerá na próxima vez que um usuário fizer login com ele.", + "Delete": "Excluir", + "DefaultSubtitlesHelp": "As legendas são carregadas com base nas flags padrão e forçadas nos metadados embutidos. As preferências de idioma são consideradas quando várias opções estão disponíveis.", + "ErrorDefault": "Ocorreu um erro ao processar a solicitação. Por favor, tente novamente mais tarde.", + "Default": "Padrão", + "DeathDateValue": "Falecido: {0}", + "DatePlayed": "Data de reprodução", + "DateAdded": "Data adicionada", "CustomDlnaProfilesHelp": "Crie um perfil personalizado para um novo dispositivo ou para sobrepor a um perfil de sistema.", - "CriticRating": "Classificação dos críticos", - "CopyStreamURLSuccess": "URL copiado com sucesso.", - "CopyStreamURL": "Copiar URL da corrente", - "Continuing": "A Continuar", - "ContinueWatching": "Continuar a ver", - "Connect": "Ligar", - "ConfirmEndPlayerSession": "Deseja encerrar o Servidor Jellyfin em {0}?", - "ConfirmDeletion": "Confirmar remoção", - "ConfirmDeleteItems": "A eliminação destes itens elimina-os do sistema de ficheiros e da tua biblioteca multimédia. Tens a certeza de que queres continuar?", - "ConfirmDeleteItem": "A eliminação deste item irá eliminá-lo do sistema de ficheiros e da tua biblioteca multimédia. Tens a certeza de que queres continuar?", - "ConfirmDeleteImage": "Eliminar a imagem?", - "ConfigureDateAdded": "Configura a forma como é atribuída a data de adição, no Painel de controlo > Bibliotecas > Visualização", + "CriticRating": "Avaliação da crítica", + "CopyStreamURLSuccess": "URL copiada com sucesso.", + "CopyStreamURL": "Copiar URL do Stream", + "Continuing": "Continuando", + "ContinueWatching": "Continuar assistindo", + "Connect": "Conectar", + "ConfirmEndPlayerSession": "Você gostaria de desligar o Jellyfin em {0}?", + "ConfirmDeletion": "Confirmar exclusão", + "ConfirmDeleteItems": "Excluir estes itens irá removê-los do sistema de arquivos e da sua biblioteca de mídia. Tem certeza de que deseja continuar?", + "ConfirmDeleteItem": "Excluir este item irá removê-lo do sistema de arquivos e da sua biblioteca de mídia. Tem certeza de que deseja continuar?", + "ConfirmDeleteImage": "Excluir imagem?", + "ConfigureDateAdded": "Configurar como os metadados de 'Data adicionada' são determinados em Painel > Bibliotecas > Exibição", "Composer": "Compositor", - "CommunityRating": "Classificação da comunidade", - "ColorTransfer": "Transferência de cores", - "ColorSpace": "Espaço de cores", - "ColorPrimaries": "Cores primárias", + "CommunityRating": "Avaliação da comunidade", + "ColorTransfer": "Transferência de cor", + "ColorSpace": "Espaço de cor", + "ColorPrimaries": "Primárias de cor", "Collections": "Coleções", - "CinemaModeConfigurationHelp": "O modo cinema traz a experiência do cinema diretamente para a tua sala de estar, com a possibilidade de reproduzir trailers e introduções personalizadas antes da longa-metragem.", + "CinemaModeConfigurationHelp": "O modo cinema traz a experiência do cinema para sua casa, permitindo exibir trailers e introduções personalizadas antes do conteúdo principal.", "Channels": "Canais", "ChannelNumber": "Número do canal", "ChannelNameOnly": "Apenas canal {0}", - "ChannelAccessHelp": "Seleciona os canais para partilhar com este utilizador. Os administradores poderão editar todos os canais utilizando o gestor de metadados.", - "ChangingMetadataImageSettingsNewContent": "As alterações às definições de transferência de metadados ou de imagens só se aplicam a novos conteúdos adicionados à tua biblioteca. Para aplicar as alterações aos títulos existentes, terás de atualizar os metadados manualmente.", + "ChannelAccessHelp": "Selecione os canais para compartilhar com este usuário. Administradores podem editar todos os canais usando o gerenciador de metadados.", + "ChangingMetadataImageSettingsNewContent": "Alterações nas configurações de download de metadados ou imagens só se aplicam a novos conteúdos adicionados à sua biblioteca. Para aplicar em títulos existentes, atualize os metadados manualmente.", "Categories": "Categorias", - "CancelSeries": "Cancelar gravação de série", + "CancelSeries": "Cancelar série", "CancelRecording": "Cancelar gravação", - "ButtonWebsite": "Website", + "ButtonWebsite": "Site", "ButtonUninstall": "Desinstalar", "ButtonTrailer": "Trailer", "ButtonSubmit": "Enviar", "ButtonStop": "Parar", "ButtonStart": "Iniciar", - "ButtonSignOut": "Terminar sessão", - "ButtonSignIn": "Iniciar sessão", - "ButtonShutdown": "Encerrar", + "ButtonSignOut": "Sair", + "ButtonSignIn": "Entrar", + "ButtonShutdown": "Desligar", "ButtonSend": "Enviar", "ButtonSelectView": "Selecionar visualização", - "ButtonSelectDirectory": "Seleccione a Pasta", - "ButtonScanAllLibraries": "Analisar todas as bibliotecas", + "ButtonSelectDirectory": "Selecionar diretório", + "ButtonScanAllLibraries": "Verificar todas as bibliotecas", "ButtonRevoke": "Revogar", "ButtonResume": "Retomar", "ButtonResetEasyPassword": "Redefinir código PIN", - "ButtonRename": "Alterar o nome", + "ButtonRename": "Renomear", "ButtonRemove": "Remover", - "ButtonRefreshGuideData": "Atualizar Guia TV", - "ButtonQuickStartGuide": "Guia de instalação", + "ButtonRefreshGuideData": "Atualizar dados do guia", + "ButtonQuickStartGuide": "Guia de configuração", "ButtonPreviousTrack": "Faixa anterior", "ButtonPause": "Pausar", - "ButtonParentalControl": "Controlo parental", + "ButtonParentalControl": "Controle dos pais", "ButtonOpen": "Abrir", - "ButtonOk": "OK", - "ButtonNextTrack": "Faixa seguinte", + "ButtonOk": "Ok", + "ButtonNextTrack": "Próxima faixa", "ButtonNetwork": "Rede", "ButtonMore": "Mais", - "ButtonManualLogin": "Início de sessão manual", + "ButtonManualLogin": "Login manual", "ButtonLibraryAccess": "Acesso à biblioteca", - "ButtonInfo": "Informação", - "ButtonFullscreen": "Ecrã inteiro", - "ButtonForgotPassword": "Esqueci-me da palavra-passe", - "ButtonEditOtherUserPreferences": "Editar este perfil de utilizador, imagem e preferências pessoais.", + "ButtonInfo": "Informações", + "ButtonFullscreen": "Tela cheia", + "ButtonForgotPassword": "Esqueci minha senha", + "ButtonEditOtherUserPreferences": "Editar perfil, imagem e preferências deste usuário.", "Auto": "Automático", - "AlwaysPlaySubtitles": "Mostrar sempre legendas", - "AllowMediaConversionHelp": "Permitir ou negar acesso à funcionalidade de conversão multimédia.", - "AllowMediaConversion": "Permitir conversão multimédia", - "ButtonGotIt": "Entendido", - "ButtonChangeServer": "Alterar Servidor", + "AlwaysPlaySubtitles": "Sempre exibir", + "AllowMediaConversionHelp": "Conceder ou negar acesso ao recurso de conversão de mídia.", + "AllowMediaConversion": "Permitir conversão de mídia", + "ButtonGotIt": "Entendi", + "ButtonChangeServer": "Trocar servidor", "ButtonCancel": "Cancelar", "ButtonBack": "Voltar", - "OptionMissingEpisode": "Episódios em Falta", - "OptionMax": "Máximo", + "OptionMissingEpisode": "Episódios Ausentes", + "OptionMax": "Máx", "OptionLikes": "Gostos", "OptionImdbRating": "Classificação no IMDb", "OptionIgnoreTranscodeByteRangeRequestsHelp": "Essas solicitações serão atendidas, mas irão ignorar o cabeçalho do intervalo de bytes.", "OptionHlsSegmentedSubtitles": "Legendas segmentadas HLS", - "OptionHideUserFromLoginHelp": "Útil para contas de administrador privadas ou ocultas. O utilizador terá de iniciar sessão manualmente, introduzindo o nome de utilizador e a palavra-passe.", - "OptionHideUser": "Ocultar este utilizador nos formulários de início de sessão", - "OptionHasThemeVideo": "Vídeo do tema", - "OptionHasThemeSong": "Banda sonora do tema", + "OptionHideUserFromLoginHelp": "Útil para contas de administrador privadas ou ocultas. O usuário precisará fazer login manualmente inserindo seu nome de usuário e senha.", + "OptionHideUser": "Ocultar este usuário das telas de login", + "OptionHasThemeVideo": "Vídeo Tema", + "OptionHasThemeSong": "Música Tema", "OptionExternallyDownloaded": "Download Externo", "OptionEveryday": "Todos os dias", "OptionEstimateContentLength": "Estimar o tamanho do conteúdo ao transcodificar", "OptionEquals": "Igual a", "OptionEnableM2tsModeHelp": "Activar o modo m2ts ao codificar para mpegts.", "OptionEnableM2tsMode": "Activar modo M2ts", - "OptionEnableExternalContentInSuggestionsHelp": "Permitir que trailers da Internet e programas de TV em Directo sejam incluídos no conteúdo sugerido.", - "OptionEnableAccessToAllLibraries": "Permitir acesso a todas as bibliotecas", - "OptionEnableAccessFromAllDevices": "Permitir o acesso a partir de todos os dispositivos", + "OptionEnableExternalContentInSuggestionsHelp": "Permitir que trailers da internet e programas de TV ao vivo sejam incluídos dentro do conteúdo sugerido.", + "OptionEnableAccessToAllLibraries": "Ativar acesso a todas as bibliotecas", + "OptionEnableAccessFromAllDevices": "Ativar acesso de todos os dispositivos", "OptionEmbedSubtitles": "Incorporar no contentor", "OptionDvd": "DVD", - "LabelBurnSubtitles": "Integrar legendas", - "LabelBlockContentWithTags": "Bloquear itens com etiquetas", - "LabelBlastMessageIntervalHelp": "Determina a duração em segundos entre as mensagens de exploração enviadas pelo servidor.", - "LabelBlastMessageInterval": "Intervalo para envio de mensagens de reconhecimento", + "LabelBurnSubtitles": "Queimar legendas", + "LabelBlockContentWithTags": "Bloquear itens com tags", + "LabelBlastMessageIntervalHelp": "Determine a duração em segundos entre as mensagens alive.", + "LabelBlastMessageInterval": "Intervalo da mensagem Alive", "LabelBitrate": "Taxa de bits", "LabelBirthYear": "Ano de nascimento", - "ButtonAudioTracks": "Faixas de Áudio", + "ButtonAudioTracks": "Faixas de áudio", "ButtonArrowRight": "Direita", "ButtonArrowLeft": "Esquerda", - "ButtonAddUser": "Adicionar utilizador", + "ButtonAddUser": "Adicionar usuário", "ButtonAddServer": "Adicionar servidor", - "ButtonAddScheduledTaskTrigger": "Adicionar tarefa agendada", - "ButtonAddMediaLibrary": "Adicionar Biblioteca de Multimédia", - "ButtonAddImage": "Adicionar Imagem", - "BurnSubtitlesHelp": "Determina se o servidor deve integrar as legendas. Evitar a integração de legendas melhora o desempenho do servidor. Selecione Automático para que legendas baseadas em imagem (VOBSUB, PGS, SUB/IDX) e certos formatos ASS/SSA sejam integrados.", - "MessageBrowsePluginCatalog": "Explora as extensões disponíveis no nosso catálogo.", + "ButtonAddScheduledTaskTrigger": "Adicionar gatilho", + "ButtonAddMediaLibrary": "Adicionar biblioteca de mídia", + "ButtonAddImage": "Adicionar imagem", + "BurnSubtitlesHelp": "Define se o servidor deve embutir legendas. Evitar isso melhora o desempenho. Selecione Automático para embutir formatos baseados em imagem (VobSub, PGS, SUB, IDX, etc.) e certos ASS ou SSA.", + "MessageBrowsePluginCatalog": "Navegue pelo nosso catálogo de plugins para ver os plugins disponíveis.", "Browse": "Explorar", - "BoxRear": "Caixa (verso)", + "BoxRear": "Caixa (traseira)", "Box": "Caixa", "Books": "Livros", - "BookLibraryHelp": "São suportados audiolivros e ebooks. Consulta o {0} guia de nomenclatura de livros {1}.", - "Blacklist": "Lista Negra", + "BookLibraryHelp": "Livros de áudio e texto são suportados. Veja o {0}guia de nomes de livros{1}.", + "Blacklist": "Lista negra", "BirthPlaceValue": "Local de nascimento: {0}", "BirthLocation": "Local de nascimento", "BirthDateValue": "Nascimento: {0}", - "Banner": "Faixa", - "Backdrops": "Imagens de fundo", - "Backdrop": "Imagem de fundo", - "AuthProviderHelp": "Seleciona um mecanismo de autenticação a ser utilizado para validar as credenciais deste utilizador.", + "Banner": "Banner", + "Backdrops": "Planos de fundo", + "Backdrop": "Plano de fundo", + "AuthProviderHelp": "Selecione um provedor de autenticação para validar a senha deste usuário.", "Audio": "Áudio", - "AspectRatio": "Proporção da imagem", - "Ascending": "Crescente", - "Art": "ClearArt (imagem transparente)", - "AroundTime": "Por volta das {0}", - "Anytime": "Qualquer altura", + "AspectRatio": "Proporção", + "Ascending": "Ascendente", + "Art": "Clearart", + "AroundTime": "Por volta de {0}", + "Anytime": "Qualquer horário", "AnyLanguage": "Qualquer idioma", "Artists": "Artistas", - "AsManyAsPossible": "Tantos quanto possível", - "AllowedRemoteAddressesHelp": "Lista separada por vírgula de endereços IP ou entradas de máscara de IP/rede para redes que terão permissão para se conectar remotamente. Se deixado em branco, todos os endereços remotos serão permitidos.", - "AllowRemoteAccessHelp": "Se desmarcada, todas as conexões remotas serão bloqueadas.", + "AsManyAsPossible": "O máximo possível", + "AllowedRemoteAddressesHelp": "Lista separada por vírgulas de endereços IP ou entradas IP/máscara de redes que poderão se conectar remotamente. Se deixado em branco, todos os endereços remotos serão permitidos.", + "AllowRemoteAccessHelp": "Se desmarcado, todas as conexões remotas serão bloqueadas.", "AllowRemoteAccess": "Permitir conexões remotas a este servidor", - "AllowOnTheFlySubtitleExtractionHelp": "Legendas integradas podem ser extraídas do vídeo e enviadas como texto simples para os clientes para evitar transcodificação. Em certos dispositivos, esta poderá ser uma operação demorada e pode causar interrupções de reprodução durante o processo de extração. Desative esta opção para que as legendas sejam integradas no vídeo durante a conversão para um formato suportado pelo dispositivo de destino.", - "AllowOnTheFlySubtitleExtraction": "Permitir a extração de legendas em tempo real", - "AllowHWTranscodingHelp": "Permite ao sintonizador converter emissões em tempo real. Poderá reduzir a necessidade de conversão a fazer pelo servidor.", + "AllowOnTheFlySubtitleExtractionHelp": "Legendas embutidas podem ser extraídas dos vídeos e entregues em texto simples, evitando transcodificação de vídeo. Em alguns sistemas, pode ser demorado e travar a reprodução. Desative para embutir legendas na transcodificação quando não suportadas nativamente pelo dispositivo.", + "AllowOnTheFlySubtitleExtraction": "Permitir extração de legendas em tempo real", + "AllowHWTranscodingHelp": "Permite que o sintonizador transcodifique streams em tempo real. Pode ajudar a reduzir a transcodificação exigida pelo servidor.", "AllLibraries": "Todas as bibliotecas", "AllLanguages": "Todos os idiomas", "AllEpisodes": "Todos os episódios", - "AllComplexFormats": "Todos os formatos complexos (ASS, SSA, VobSub, PGS, SUB, IDX, …)", + "AllComplexFormats": "Todos os formatos complexos (ASS, SSA, VobSub, PGS, SUB, IDX, ...)", "AllChannels": "Todos os canais", "All": "Todos", "Alerts": "Alertas", "Albums": "Álbuns", - "Aired": "Estreou em", - "AirDate": "Data de estreia", + "Aired": "Exibido", + "AirDate": "Data de exibição", "AdditionalNotificationServices": "Explore o catálogo de extensões para instalar serviços adicionais de notificação.", - "AddedOnValue": "{0} foi adicionado", - "AddToPlaylist": "Adicionar à lista de reprodução", + "AddedOnValue": "Adicionado em {0}", + "AddToPlaylist": "Adicionar à playlist", "AddToPlayQueue": "Adicionar à fila de reprodução", "AddToCollection": "Adicionar à coleção", "Add": "Adicionar", "Actor": "Ator", - "AccessRestrictedTryAgainLater": "O acesso está atualmente restrito. Por favor, tenta mais tarde.", + "AccessRestrictedTryAgainLater": "O acesso está restrito no momento. Por favor, tente novamente mais tarde.", "Absolute": "Absoluto", - "AlwaysPlaySubtitlesHelp": "As legendas correspondentes à preferência de idioma serão carregadas, independentemente do idioma do áudio.", - "SearchForMissingMetadata": "Procurar metadados em falta", - "ScanLibrary": "Analisar biblioteca", - "HeaderDeleteItem": "Remover item", - "HeaderDeleteDevice": "Eliminar dispositivo", - "HeaderDefaultRecordingSettings": "Predefinições de gravação", - "HeaderDateIssued": "Data da emissão", + "AlwaysPlaySubtitlesHelp": "Legendas que correspondam à preferência de idioma serão carregadas independentemente do idioma do áudio.", + "SearchForMissingMetadata": "Pesquisar metadados ausentes", + "ScanLibrary": "Verificar biblioteca", + "HeaderDeleteItem": "Excluir Item", + "HeaderDeleteDevice": "Excluir Dispositivo", + "HeaderDefaultRecordingSettings": "Configurações Padrão de Gravação", + "HeaderDateIssued": "Data de Emissão", "HeaderCustomDlnaProfiles": "Perfis Personalizados", - "HeaderContinueWatching": "Continuar a ver", - "HeaderContinueListening": "Continuar a ouvir", + "HeaderContinueWatching": "Continuar Assistindo", + "HeaderContinueListening": "Continuar Ouvindo", "HeaderContainerProfileHelp": "Os Perfis do Contentor indicam as limitações de um dispositivo ao reproduzir formatos específicos. Se hourver alguma limitação, o ficheiro multimédia será transcodificado, mesmo se o formato estiver configurado para reprodução directa.", "HeaderContainerProfile": "Perfil do Contentor", - "HeaderConnectionFailure": "Falha de Ligação", - "HeaderConnectToServer": "Ligar ao Servidor", + "HeaderConnectionFailure": "Falha na Conexão", + "HeaderConnectToServer": "Conectar ao Servidor", "HeaderConfirmRevokeApiKey": "Revogar Chave da API", "HeaderConfirmProfileDeletion": "Confirmar Remoção do Perfil", - "HeaderConfirmPluginInstallation": "Confirmar instalação da extensão", + "HeaderConfirmPluginInstallation": "Confirmar Instalação do Plugin", "HeaderConfigureRemoteAccess": "Configurar Acesso Remoto", "HeaderCodecProfileHelp": "Os perfis do Codec indicam as limitações de um dispositivo ao reproduzir codecs específicos. Se uma limitação ocorrer, o ficheiro multimédia será transcodificado, mesmo se o codec estiver configurado para reprodução direta.", "HeaderCodecProfile": "Perfil do Codec", - "HeaderChapterImages": "Imagens dos capítulos", - "HeaderChannelAccess": "Acesso ao canal", - "HeaderCancelSeries": "Cancelar gravação de série", - "HeaderCancelRecording": "Cancelar gravação", - "HeaderBlockItemsWithNoRating": "Bloquear conteúdo sem informação de classificação etária ou com informação desconhecida", - "HeaderAudioSettings": "Definições de áudio", - "HeaderAudioBooks": "Livros de Áudio", - "HeaderApp": "Aplicação", - "HeaderApiKeysHelp": "As aplicações externas necessitam de uma chave de API para comunicar com o servidor. As chaves são emitidas ao iniciar sessão com uma conta de utilizador normal ou concedendo manualmente a chave à aplicação.", + "HeaderChapterImages": "Imagens de Capítulo", + "HeaderChannelAccess": "Acesso ao Canal", + "HeaderCancelSeries": "Cancelar Série", + "HeaderCancelRecording": "Cancelar Gravação", + "HeaderBlockItemsWithNoRating": "Bloquear itens sem informações de classificação ou com classificação não reconhecida", + "HeaderAudioSettings": "Configurações de Áudio", + "HeaderAudioBooks": "Audiolivros", + "HeaderApp": "App", + "HeaderApiKeysHelp": "Aplicativos externos precisam de uma chave de API para se comunicar com o servidor. As chaves são emitidas ao fazer login com uma conta de usuário normal ou ao conceder manualmente uma chave ao aplicativo.", "HeaderApiKeys": "Chaves da API", "HeaderApiKey": "Chave da API", - "HeaderAllowMediaDeletionFrom": "Permitir remoção de multimédia a partir de", + "HeaderAllowMediaDeletionFrom": "Permitir exclusão de mídia de", "HeaderAlert": "Alerta", "HeaderAlbumArtists": "Artistas do Álbum", "HeaderAdditionalParts": "Partes Adicionais", - "HeaderAddUpdateImage": "Adicionar/Atualizar imagem", - "HeaderAddToPlaylist": "Adicionar à playlist", - "HeaderAddToCollection": "Adicionar à coleção", + "HeaderAddUpdateImage": "Adicionar/Atualizar Imagem", + "HeaderAddToPlaylist": "Adicionar à Playlist", + "HeaderAddToCollection": "Adicionar à Coleção", "HeaderActivity": "Atividade", - "HeaderActiveRecordings": "Gravações ativas", - "HeaderActiveDevices": "Dispositivos ativos", - "HeaderAccessScheduleHelp": "Crie uma restrição horária de acesso para limitar o acesso ao Jellyfin a determinadas horas.", - "HeaderAccessSchedule": "Restrição Horária de Acesso", - "HardwareAccelerationWarning": "Ativar a aceleração por hardware pode causar instabilidade em alguns ambientes. Certifica-te de que o teu sistema operativo e controladores de vídeo estão totalmente atualizados. Se tiveres dificuldades em reproduzir vídeo depois de ativares esta opção, terás de voltar a alterar a definição para \"Nenhum\".", - "HDPrograms": "Programas HD", - "EncoderPresetHelp": "Escolha um valor mais rápido para melhorar o desempenho, ou um valor mais lento para melhorar a qualidade.", - "H264CrfHelp": "O parâmetro \"Constant Rate Factor\" (CRF) define o nível de qualidade predefinido para os codificadores de software x264 e x265. Os valores possíveis vão de 0 a 51, sendo que valores mais baixos produzem melhor qualidade — à custa de ficheiros maiores. Os valores mais comuns situam-se entre 18 e 28. O valor predefinido para o x264 é 23, e para o x265 é 28, podendo servir como ponto de partida para afinares a qualidade conforme necessário. Codificadores por hardware não utilizam esta definição.", - "GuideProviderSelectListings": "Selecionar listas", - "Guide": "Programação", - "GuestStar": "Estrela convidada", + "HeaderActiveRecordings": "Gravações Ativas", + "HeaderActiveDevices": "Dispositivos Ativos", + "HeaderAccessScheduleHelp": "Crie uma agenda de acesso para limitar o acesso a determinadas horas.", + "HeaderAccessSchedule": "Agenda de Acesso", + "HardwareAccelerationWarning": "Ativar a aceleração de hardware pode causar instabilidade em alguns ambientes. Certifique-se de que seu sistema operacional e drivers de vídeo estão totalmente atualizados. Se você tiver dificuldade em reproduzir vídeo após ativar isso, será necessário alterar a configuração de volta para Nenhum.", + "HDPrograms": "Programas em HD", + "EncoderPresetHelp": "Escolha um valor mais rápido para melhorar o desempenho ou um valor mais lento para melhorar a qualidade.", + "H264CrfHelp": "O 'Constant Rate Factor' (CRF) é a configuração de qualidade padrão para os codificadores de software x264 e x265. Você pode definir valores entre 0 e 51, onde valores mais baixos resultam em melhor qualidade (à custa de tamanhos de arquivo maiores). Valores razoáveis estão entre 18 e 28. O padrão para x264 é 23, e para x265 é 28, então você pode usar isso como ponto de partida. Codificadores de hardware não usam essas configurações.", + "GuideProviderSelectListings": "Selecionar listagens", + "Guide": "Guia", + "GuestStar": "Participação especial", "GroupVersions": "Agrupar versões", "GroupBySeries": "Agrupar por série", - "ErrorAddingListingsToSchedulesDirect": "Ocorreu um erro ao adicionar o alinhamento à tua conta do Schedules Direct. O Schedules Direct só permite um número limitado de alinhamentos por conta. Poderás ter de iniciar sessão no site do Schedules Direct e remover outras listagens da tua conta antes de prosseguires.", - "Ended": "Terminado", - "DefaultMetadataLangaugeDescription": "Estes são os valores-predefinidos que podem ser personalizados para cada uma das bibliotecas.", - "Genres": "Géneros", - "Genre": "Género", + "ErrorAddingListingsToSchedulesDirect": "Ocorreu um erro ao adicionar a programação à sua conta do Schedules Direct. O Schedules Direct permite apenas um número limitado de programações por conta. Você pode precisar fazer login no site do Schedules Direct e remover outras listagens da sua conta antes de prosseguir.", + "Ended": "Encerrado", + "DefaultMetadataLangaugeDescription": "Estas são suas configurações padrão e podem ser personalizadas por biblioteca.", + "Genres": "Gêneros", + "Genre": "Gênero", "General": "Geral", - "Fullscreen": "Ecrã inteiro", - "Friday": "Sexta", + "Fullscreen": "Tela cheia", + "Friday": "Sexta-feira", "FormatValue": "Formato: {0}", "Folders": "Pastas", "OptionIgnoreTranscodeByteRangeRequests": "Ignorar solicitações de intervalo de bytes de transcodificação", - "OptionEnableAccessToAllChannels": "Permitir acesso a todos os canais", - "FetchingData": "A transferir informação adicional", - "EnableStreamLooping": "Transmissões em direto em loop automático", - "Down": "Baixar", + "OptionEnableAccessToAllChannels": "Ativar acesso a todos os canais", + "FetchingData": "Buscando dados adicionais", + "EnableStreamLooping": "Repetir streams ao vivo automaticamente", + "Down": "Para baixo", "HeaderNavigation": "Navegação", - "ButtonSplit": "Separar", + "ButtonSplit": "Dividir", "AskAdminToCreateLibrary": "Peça a um administrador para criar uma biblioteca.", - "AllowFfmpegThrottling": "Transcodificação do Acelerador", + "AllowFfmpegThrottling": "Controlar transcodificações", "DashboardOperatingSystem": "Sistema Operativo", - "LabelUserLoginAttemptsBeforeLockout": "Tentativas de início de sessão falhadas até o utilizador ser bloqueado", + "LabelUserLoginAttemptsBeforeLockout": "Tentativas de login falhadas antes do bloqueio do usuário", "LabelTrackNumber": "Número da faixa", - "LabelSportsCategories": "Categorias de desporto", + "LabelSportsCategories": "Categorias de esportes", "Yesterday": "Ontem", - "MusicVideo": "Vídeo de música", - "MusicLibraryHelp": "Consulta o {0}guia de nomenclatura de músicas{1}.", - "MusicArtist": "Artista musical", - "MusicAlbum": "Álbum de música", - "MovieLibraryHelp": "Consulta o {0}guia de nomenclatura de filmes{1}.", + "MusicVideo": "Vídeo Musical", + "MusicLibraryHelp": "Veja o {0}guia de nomes de música{1}.", + "MusicArtist": "Artista de Música", + "MusicAlbum": "Álbum de Música", + "MovieLibraryHelp": "Veja o {0}guia de nomes de filmes{1}.", "MoveRight": "Mover para a direita", - "MoveLeft": "Mova à esquerda", - "MoreMediaInfo": "Informações sobre mídia", + "MoveLeft": "Mover para a esquerda", + "MoreMediaInfo": "Informações da Mídia", "MoreFromValue": "Mais de {0}", "MediaInfoRefFrames": "Quadros de referência", - "MediaInfoContainer": "Container", + "MediaInfoContainer": "Contêiner", "MediaInfoAnamorphic": "Anamórfico", "LabelVideoResolution": "Resolução do vídeo", - "LabelTypeMetadataDownloaders": "Fornecedores de metadados ({0})", - "LabelTranscodePath": "Caminho da transcodificação", - "OnlyImageFormats": "Somente formatos de imagem (VOBSUB, PGS, SUB)", - "OnlyForcedSubtitlesHelp": "Apenas as legendas marcadas como forçadas serão carregadas.", - "OnlyForcedSubtitles": "Apenas legendas forçadas", - "Off": "Desligadas", + "LabelTypeMetadataDownloaders": "Downloaders de metadados ({0})", + "LabelTranscodePath": "Caminho de transcodificação", + "OnlyImageFormats": "Apenas Formatos de Imagem (VobSub, PGS, SUB)", + "OnlyForcedSubtitlesHelp": "Apenas legendas marcadas como forçadas serão carregadas.", + "OnlyForcedSubtitles": "Apenas Forçadas", + "Off": "Desligado", "NumLocationsValue": "{0} pastas", "Normal": "Normal", "None": "Nenhum", - "NoSubtitlesHelp": "As legendas não serão carregadas por padrão. Eles ainda podem ser ativados manualmente durante a reprodução.", - "NoSubtitleSearchResultsFound": "Sem resultados.", - "NoNewDevicesFound": "Não foram encontrados novos dispositivos. Para adicionares um novo sintonizador, fecha esta caixa de diálogo e introduz as informações do dispositivo manualmente.", - "NoCreatedLibraries": "Parece que você ainda não criou nenhuma biblioteca. {0} Deseja criar um agora? {1}", + "NoSubtitlesHelp": "As legendas não serão carregadas por padrão. Elas ainda podem ser ativadas manualmente durante a reprodução.", + "NoSubtitleSearchResultsFound": "Nenhum resultado encontrado.", + "NoNewDevicesFound": "Nenhum novo dispositivo encontrado. Para adicionar um novo sintonizador, feche este diálogo e insira as informações do dispositivo manualmente.", + "NoCreatedLibraries": "Parece que você ainda não criou nenhuma biblioteca. {0>Você gostaria de criar uma agora?{1}", "No": "Não", - "Mobile": "Telemóvel", - "MetadataSettingChangeHelp": "Alterar as definições de metadados irá afetar apenas conteúdo adicionado no futuro. Para atualizar conteúdo já existente, abre o painel de detalhes e clica no botão 'Recarregar metadados' ou executa uma atualização em massa utilizando o Gestor de metadados.", - "MetadataManager": "Gestor de metadados", + "Mobile": "Móvel", + "MetadataSettingChangeHelp": "Alterar as configurações de metadados afetará o novo conteúdo adicionado a partir de agora. Para atualizar o conteúdo existente, abra a tela de detalhes e clique no botão 'Atualizar', ou faça atualizações em massa usando o 'Gerenciador de Metadados'.", + "MetadataManager": "Gerenciador de Metadados", "Metadata": "Metadados", "MessageYouHaveVersionInstalled": "Você possui a versão {0} atualmente instalada.", - "MessageUnsetContentHelp": "O conteúdo será exibido como pastas simples. Para obter melhores resultados, use o gerenciador de metadados para definir os tipos de conteúdo das subpastas.", - "MessagePleaseWait": "Por favor, espere. Isso pode levar um minuto.", - "MessagePlayAccessRestricted": "A reprodução deste conteúdo está atualmente restrita. Entre em contato com o administrador do servidor para obter mais informações.", - "MessageNoServersAvailable": "Nenhum servidor foi encontrado usando a descoberta automática de servidores.", - "MessageNoCollectionsAvailable": "As coleções permitem-te desfrutar de agrupamentos personalizados de filmes, séries e álbuns. Clica no botão '+' para começares a criar coleções.", - "MessageConfirmAppExit": "Deseja sair?", + "MessageUnsetContentHelp": "O conteúdo será exibido como pastas simples. Para melhores resultados, use o gerenciador de metadados para definir os tipos de conteúdo das subpastas.", + "MessagePleaseWait": "Por favor, aguarde. Isso pode levar um minuto.", + "MessagePlayAccessRestricted": "A reprodução deste conteúdo está atualmente restrita. Por favor, entre em contato com o administrador do servidor para mais informações.", + "MessageNoServersAvailable": "Nenhum servidor encontrado usando a descoberta automática de servidores.", + "MessageNoCollectionsAvailable": "As coleções permitem que você desfrute de agrupamentos personalizados de Filmes, Séries e Álbuns. Clique no botão '+' para começar a criar coleções.", + "MessageConfirmAppExit": "Você deseja sair?", "MediaInfoLayout": "Layout", "MediaInfoLanguage": "Idioma", "MediaInfoInterlaced": "Entrelaçado", - "MediaInfoFramerate": "Taxa de fotogramas", + "MediaInfoFramerate": "Taxa de quadros", "MediaInfoForced": "Forçado", "MediaInfoExternal": "Externo", "MediaInfoDefault": "Padrão", - "MediaInfoCodecTag": "Codec tag", + "MediaInfoCodecTag": "Tag do codec", "MediaInfoCodec": "Codec", "MediaInfoBitrate": "Taxa de bits", "MediaInfoBitDepth": "Profundidade de bits", - "MediaInfoAspectRatio": "Proporção da imagem", - "ManageRecording": "Gerir gravação", + "MediaInfoAspectRatio": "Proporção", + "ManageRecording": "Gerenciar gravação", "Logo": "Logo", "List": "Lista", - "LeaveBlankToNotSetAPassword": "Você pode deixar esse campo em branco para definir nenhuma senha.", - "LearnHowYouCanContribute": "Aprenda como você pode contribuir.", + "LeaveBlankToNotSetAPassword": "Você pode deixar este campo em branco para não definir uma senha.", + "LearnHowYouCanContribute": "Saiba como você pode contribuir.", "Large": "Grande", - "LanNetworksHelp": "Lista separada por vírgula de endereços IP ou entradas de máscara de rede/IP para redes que serão consideradas na rede local ao impor restrições de largura de banda. Se definido, todos os outros endereços IP serão considerados na rede externa e estarão sujeitos às restrições de largura de banda externa. Se deixado em branco, apenas a sub-rede do servidor é considerada na rede local.", - "LabelffmpegPathHelp": "Localização da aplicação ou pasta que contém o FFmpeg.", - "LabelffmpegPath": "Localização do FFmpeg", + "LanNetworksHelp": "Lista separada por vírgulas de endereços IP ou IP/máscara de redes que serão consideradas na rede local ao aplicar restrições de largura de banda. Se definido, todos os outros endereços IP serão considerados na rede externa e estarão sujeitos às restrições de largura de banda externa. Se deixado em branco, apenas a sub-rede do servidor será considerada na rede local.", + "LabelffmpegPathHelp": "O caminho para o arquivo ou pasta do aplicativo FFmpeg.", + "LabelffmpegPath": "Caminho do FFmpeg", "LabelYear": "Ano", "LabelXDlnaDoc": "Documentação X-DLNA", "LabelXDlnaCap": "Limite X-DLNA", "LabelWeb": "Web", - "LabelVideoCodec": "Codec do vídeo", + "LabelVideoCodec": "Codec de vídeo", "LabelVideoBitrate": "Taxa de bits do vídeo", "DashboardArchitecture": "Arquitetura: {0}", "DashboardServerName": "Servidor: {0}", "DashboardVersionNumber": "Versão: {0}", "LabelVersion": "Versão", - "LabelVaapiDeviceHelp": "Este é o nó de renderização usado para aceleração de hardware.", + "LabelVaapiDeviceHelp": "Este é o nó de renderização usado para a aceleração de hardware.", "LabelVaapiDevice": "Dispositivo VA-API", - "LabelUserAgent": "Agente do utilizador", - "LabelTranscodes": "Transcodificação", - "LabelTranscodingFramerate": "Transcodificação da taxa de fotogramas", + "LabelUserAgent": "Agente do usuário", + "LabelTranscodes": "Transcodificações", + "LabelTranscodingFramerate": "Taxa de quadros da transcodificação", "LabelTranscodingProgress": "Progresso da transcodificação", "LabelTitle": "Título", "LabelTheme": "Tema", "LabelTextColor": "Cor do texto", - "LabelTextBackgroundColor": "Cor do plano de fundo do texto", + "LabelTextBackgroundColor": "Cor de fundo do texto", "LabelTag": "Tag", "LabelTVHomeScreen": "Tela inicial do modo TV", - "LabelSubtitleDownloaders": "Fornecedores de legendas", - "LabelStreamType": "Tipo de transmissão", + "LabelSubtitleDownloaders": "Baixadores de legendas", + "LabelStreamType": "Tipo de stream", "LabelSpecialSeasonsDisplayName": "Nome de exibição da temporada especial", - "LabelSortTitle": "Classificar título", - "LabelSortOrder": "Sequência de ordenação", + "LabelSortTitle": "Título da ordenação", + "LabelSortOrder": "Ordem de classificação", "LabelSortBy": "Ordenar por", - "LabelRemoteClientBitrateLimitHelp": "Um limite opcional de taxa de bits por fluxo para todos os dispositivos fora da rede. Isso é útil para impedir que os dispositivos solicitem uma taxa de bits mais alta do que a sua conexão à Internet pode suportar. Isso pode resultar no aumento da carga da CPU no servidor para transcodificar vídeos em tempo real para uma taxa de bits mais baixa.", - "LabelPlayerDimensions": "Dimensões do leitor", - "LabelParentNumber": "Número pai", - "LabelMetadataSavers": "Formatos de gravação dos metadados", - "LabelDroppedFrames": "Quadros caídos", + "LabelRemoteClientBitrateLimitHelp": "Um limite opcional de taxa de bits por stream para todos os dispositivos fora da rede. Isso é útil para evitar que dispositivos solicitem uma taxa de bits mais alta do que sua conexão com a Internet pode suportar. Isso pode resultar em aumento da carga da CPU no servidor para transcodificar vídeos em tempo real para uma taxa de bits mais baixa.", + "LabelPlayerDimensions": "Dimensões do reprodutor", + "LabelParentNumber": "Número do pai", + "LabelMetadataSavers": "Salvadores de metadados", + "LabelDroppedFrames": "Quadros descartados", "LabelCorruptedFrames": "Quadros corrompidos", - "LabelAudioBitDepth": "Profundidade do bit de áudio", - "ClientSettings": "Definições do cliente", - "AllowFfmpegThrottlingHelp": "Quando uma transcodificação ou remux se aproximar da posição atual de reprodução, pause o processo para que consuma menos recursos. Isso é mais útil ao assistir sem procurar com frequência. Desative isso se você tiver problemas de reprodução.", - "MySubtitles": "Minhas legendas", + "LabelAudioBitDepth": "Profundidade de bits do áudio", + "ClientSettings": "Configurações do cliente", + "AllowFfmpegThrottlingHelp": "Quando uma transcodificação ou remux estiver muito à frente da posição atual de reprodução, o processo será pausado para consumir menos recursos. Útil ao assistir sem avançar/retroceder muito. Desative se tiver problemas de reprodução.", + "MySubtitles": "Minhas Legendas", "Name": "Nome", "Never": "Nunca", "Artist": "Artista", "LabelDeinterlaceMethod": "Método de desentrelaçamento", - "DeinterlaceMethodHelp": "Seleciona o método de desentrelaçamento a utilizar quando o software transcodifica conteúdo entrelaçado. Caso esteja ativo, o desentrelaçamento através de aceleração por hardware terá prioridade sobre esta opção.", + "DeinterlaceMethodHelp": "Selecione o método de desentrelaçamento a ser usado ao transcodificar conteúdo entrelaçado. Quando a aceleração de hardware com desentrelaçamento de hardware é ativada, o desentrelaçador de hardware será usado em vez desta configuração.", "Movie": "Filme", "LabelLibraryPageSize": "Tamanho da página da biblioteca", "Album": "Álbum", - "LabelLibraryPageSizeHelp": "Define a quantidade de itens a apresentar na página de uma biblioteca. Para desativares a paginação, introduz o valor 0.", + "LabelLibraryPageSizeHelp": "Defina a quantidade de itens a serem exibidos em uma página da biblioteca. Defina como 0 para desativar a paginação.", "Episode": "Episódio", - "OptionRequirePerfectSubtitleMatch": "Baixar apenas legendas que correspondem corretamente aos arquivos de vídeo", + "OptionRequirePerfectSubtitleMatch": "Baixar apenas legendas que sejam uma correspondência perfeita para os arquivos de vídeo", "OptionRandom": "Aleatório", - "OptionLoginAttemptsBeforeLockout": "Determina quantas tentativas de início de sessão são admitidas antes de a conta ser bloqueada.", + "OptionLoginAttemptsBeforeLockout": "Determinar quantas tentativas de login incorretas podem ser feitas antes que o bloqueio ocorra.", "OptionIsSD": "SD", "OptionIsHD": "HD", - "OptionEnableExternalContentInSuggestions": "Habilitar sugestão de conteúdo externo", - "OptionDisplayFolderViewHelp": "Exiba pastas ao lado de outras bibliotecas de mídia. Isso pode ser útil se você quiser ter uma visualização simples de pastas.", - "OptionDisplayFolderView": "Exibir uma exibição de pasta para mostrar pastas de mídia simples", - "OptionBluray": "Blu-ray", - "OptionAllowVideoPlaybackRemuxing": "Permitir reprodução de vídeo que requer conversão sem recodificação", - "OptionAllowLinkSharingHelp": "Somente páginas da web que contêm informações sobre mídia são compartilhadas. Os arquivos de mídia nunca são compartilhados publicamente. As ações são limitadas no tempo e expiram após {0} dias.", + "OptionEnableExternalContentInSuggestions": "Ativar conteúdo externo nas sugestões", + "OptionDisplayFolderViewHelp": "Exibir pastas junto com suas outras bibliotecas de mídia. Isso pode ser útil se você quiser ter uma visualização de pasta simples.", + "OptionDisplayFolderView": "Exibir uma visualização de pasta para mostrar pastas de mídia simples", + "OptionBluray": "BD", + "OptionAllowVideoPlaybackRemuxing": "Permitir reprodução de vídeo que requer conversão sem reencodificação", + "OptionAllowLinkSharingHelp": "Apenas páginas da web contendo informações da mídia são compartilhadas. Os arquivos de mídia nunca são compartilhados publicamente. Os compartilhamentos têm prazo limitado e expirarão após {0} dias.", "Option3D": "3D", - "NextUp": "A seguir", + "NextUp": "Próximo", "Next": "Próximo", "NewEpisodesOnly": "Apenas novos episódios", "NewEpisodes": "Novos episódios", - "NewCollectionHelp": "As coleções permitem-te criar agrupamentos personalizados de filmes e outros tipos de conteúdo.", - "BoxSet": "Coleção", - "AlbumArtist": "Artista do álbum", + "NewCollectionHelp": "As coleções permitem que você crie agrupamentos personalizados de filmes e outros conteúdos da biblioteca.", + "BoxSet": "Box", + "AlbumArtist": "Artista do Álbum", "Quality": "Qualidade", "Previous": "Anterior", - "PictureInPicture": "Imagem em imagem (vídeo flutuante)", - "OptionRequirePerfectSubtitleMatchHelp": "Solicitar a \"correspondência perfeita\" filtrará as legendas incluindo apenas aquelas que foram testadas com o arquivo de vídeo. Desmarcar isto aumentará a probabilidade de baixar legendas, mas poderá obter legendas incorretas ou não sincronizadas.", + "PictureInPicture": "Imagem na imagem", + "OptionRequirePerfectSubtitleMatchHelp": "Exigir uma correspondência perfeita filtrará as legendas para incluir apenas aquelas que foram testadas e verificadas com seu arquivo de vídeo exato. Desmarcar isso aumentará a probabilidade de download de legendas, mas também aumentará as chances de legendas fora de sincronia ou incorretas.", "StopRecording": "Parar gravação", - "ShowYear": "Exibir ano", - "ShowTitle": "Exibir título", - "SettingsWarning": "Alterar estes valores poderá causar instabilidade ou falhas de ligação. Se ocorrer algum problema, recomendamos que os voltes a alterar para os valores predefinidos.", - "ServerNameIsShuttingDown": "O servidor {0} está a desligar.", - "ServerNameIsRestarting": "O servidor {0} está a reiniciar.", - "SeriesYearToPresent": "{0} - Atualmente", + "ShowYear": "Mostrar o ano", + "ShowTitle": "Mostrar o título", + "SettingsWarning": "Alterar esses valores pode causar instabilidade ou falhas de conectividade. Se você experimentar algum problema, recomendamos alterá-los de volta para o padrão.", + "ServerNameIsShuttingDown": "O servidor em {0} está desligando.", + "ServerNameIsRestarting": "O servidor em {0} está reiniciando.", + "SeriesYearToPresent": "{0} - Presente", "SeriesCancelled": "Série cancelada.", - "SelectAdminUsername": "Seleciona um nome de utilizador para a conta de administrador.", + "SelectAdminUsername": "Por favor, selecione um nome de usuário para a conta de administrador.", "Season": "Temporada", "RepeatEpisodes": "Repetir episódios", - "RepeatAll": "Repetir todos", + "RepeatAll": "Repetir tudo", "RemoveFromCollection": "Remover da coleção", - "RememberMe": "Lembrar-me", - "ReleaseDate": "Data do lançamento", + "RememberMe": "Lembrar de mim", + "ReleaseDate": "Data de Lançamento", "RefreshMetadata": "Atualizar metadados", - "RecentlyWatched": "Visto recentemente", + "RecentlyWatched": "Assistido Recentemente", "OptionEnableForAllTuners": "Ativar para todos os dispositivos sintonizadores", "OptionCaptionInfoExSamsung": "Informações da legenda (Samsung)", - "OptionAutomaticallyGroupSeriesHelp": "As séries que estão espalhadas por várias pastas dentro desta biblioteca serão automaticamente mescladas em uma única série.", - "OptionAutomaticallyGroupSeries": "Mesclar automaticamente séries que estão espalhadas por várias pastas", - "OptionAllowSyncTranscoding": "Permitir a transferência e sincronização de multimédia que exija transcodificação", - "OptionForceRemoteSourceTranscoding": "Força a transcodificação de fontes multimédia remotas, como a TV em direto", - "PreferEmbeddedTitlesOverFileNames": "Preferir títulos incorporados ao invés dos nomes dos arquivos", - "OptionSaveMetadataAsHiddenHelp": "Alterar isso será aplicado aos novos metadados salvos daqui para frente. Os arquivos de metadados existentes serão atualizados na próxima vez em que forem salvos pelo Jellyfin Server.", + "OptionAutomaticallyGroupSeriesHelp": "Séries espalhadas por várias pastas dentro desta biblioteca serão mescladas automaticamente em uma única série.", + "OptionAutomaticallyGroupSeries": "Mesclar automaticamente séries espalhadas por várias pastas", + "OptionAllowSyncTranscoding": "Permitir downloads e sincronização de mídia que requerem transcodificação", + "OptionForceRemoteSourceTranscoding": "Forçar transcodificação de fontes de mídia remotas, como TV Ao Vivo", + "PreferEmbeddedTitlesOverFileNames": "Preferir títulos incorporados em vez de nomes de arquivos", + "OptionSaveMetadataAsHiddenHelp": "Alterar isso se aplicará a novos metadados salvos a partir de agora. Os arquivos de metadados existentes serão atualizados na próxima vez que forem salvos pelo servidor.", "OptionRegex": "Expressão Regular", - "OptionLoginAttemptsBeforeLockoutHelp": "O valor zero significa herdar a definição por defeito de três tentativas para utilizadores comuns e cinco para administradores. Definir este campo como -1 desativa esta funcionalidade.", - "OptionExtractChapterImage": "Ativar extração de imagens dos capítulos", - "PreferEmbeddedEpisodeInfosOverFileNames": "Preferir informações de episódios incorporados ao invés de nomes de arquivos", - "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Usar os metadados incorporados para informações do episódio, se disponíveis.", - "PreferEmbeddedTitlesOverFileNamesHelp": "Determina o título a apresentar quando não é possível carregar metadados locais ou da Internet.", - "PlaybackErrorNoCompatibleStream": "Este cliente não é compatível com a mídia e o servidor não está a enviar um formato de mídia compatível.", + "OptionLoginAttemptsBeforeLockoutHelp": "Um valor de zero significa herdar o padrão de três tentativas para usuários normais e cinco para administradores. Definir isso como -1 desativará o recurso.", + "OptionExtractChapterImage": "Ativar extração de imagem de capítulo", + "PreferEmbeddedEpisodeInfosOverFileNames": "Preferir informações de episódio incorporadas em vez de nomes de arquivos", + "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Usar as informações do episódio dos metadados incorporados, se disponíveis.", + "PreferEmbeddedTitlesOverFileNamesHelp": "Determinar o título a ser exibido quando nenhum metadado da internet ou metadado local estiver disponível.", + "PlaybackErrorNoCompatibleStream": "Este cliente não é compatível com a mídia e o servidor não está enviando um formato de mídia compatível.", "Person": "Pessoa", - "LabelRequireHttpsHelp": "Se marcado, o servidor redirecionará automaticamente todas as solicitações por HTTP para HTTPS. Isso não terá efeito se o servidor não estiver escutando HTTPS.", + "LabelRequireHttpsHelp": "Se marcado, o servidor redirecionará automaticamente todas as solicitações de HTTP para HTTPS. Isso não tem efeito se o servidor não estiver ouvindo em HTTPS.", "LabelRequireHttps": "Requer HTTPS", - "LabelChromecastVersion": "Versão do Chromecast", - "LabelEnableHttpsHelp": "Escutar na porta HTTPS configurada. Para que esta opção seja ativada, é necessário fornecer um certificado válido.", + "LabelChromecastVersion": "Versão do Google Cast", + "LabelEnableHttpsHelp": "Ouça na porta HTTPS configurada. Um certificado válido também deve ser fornecido para que isso tenha efeito.", "LabelEnableHttps": "Ativar HTTPS", - "HeaderServerAddressSettings": "Definições de endereço do servidor", - "HeaderRemoteAccessSettings": "Definições de acesso remoto", - "HeaderHttpsSettings": "Definições de HTTPS", + "HeaderServerAddressSettings": "Configurações de Endereço do Servidor", + "HeaderRemoteAccessSettings": "Configurações de Acesso Remoto", + "HeaderHttpsSettings": "Configurações HTTPS", "HeaderDVR": "DVR", - "ApiKeysCaption": "Lista das chaves da API atualmente ativas", - "ButtonTogglePlaylist": "Lista de reprodução", + "ApiKeysCaption": "Lista das chaves de API atualmente habilitadas", + "ButtonTogglePlaylist": "Playlist", "ButtonSyncPlay": "SyncPlay", "Data": "Dados", - "ButtonUseQuickConnect": "Utilizar Ligação Rápida", + "ButtonUseQuickConnect": "Usar Conexão Rápida", "ButtonActivate": "Ativar", "Authorize": "Autorizar", - "EnableDetailsBannerHelp": "Mostrar uma imagem no topo da página dos detalhes do item.", - "EnableDetailsBanner": "Faixa de detalhes", - "EnableQuickConnect": "Ativar Ligação Rápida neste servidor", - "EnableDecodingColorDepth10Vp9": "Ativar descodificação de hardware de 10-bits para VP9", - "EnableDecodingColorDepth10Hevc": "Ativar descodificação de hardware de 10-bits para HEVC", - "EnableAutoCast": "Definir como predefinição", - "HeaderDeleteDevices": "Eliminar todos os dispositivos", - "Other": "Outros", - "DeleteDevicesConfirmation": "Tens a certeza de que pretendes eliminar todos os dispositivos? Todas as outras sessões serão encerradas. Os dispositivos voltarão a aparecer da próxima vez que um utilizador iniciar sessão.", - "DeleteAll": "Eliminar tudo", - "DailyAt": "Diariamente, às {0}", + "EnableDetailsBannerHelp": "Exibir uma imagem de banner na parte superior da página de detalhes do item.", + "EnableDetailsBanner": "Banner de detalhes", + "EnableQuickConnect": "Ativar Conexão Rápida neste servidor", + "EnableDecodingColorDepth10Vp9": "Ativar decodificação de hardware de 10 bits para VP9", + "EnableDecodingColorDepth10Hevc": "Ativar decodificação de hardware de 10 bits para HEVC", + "EnableAutoCast": "Definir como padrão", + "HeaderDeleteDevices": "Excluir Todos os Dispositivos", + "Other": "Outro", + "DeleteDevicesConfirmation": "Tem certeza de que deseja excluir todos os dispositivos? Todas as outras sessões serão desconectadas. Os dispositivos reaparecerão na próxima vez que um usuário fizer login.", + "DeleteAll": "Excluir tudo", + "DailyAt": "Diariamente às {0}", "ClearQueue": "Limpar fila", - "Bwdif": "Filtro de Desentrelação Bob Weaver (BWDIF)", - "ButtonPlayer": "Leitor", - "ButtonCast": "Transmitir para o dispositivo", - "AllowTonemappingHelp": "O mapeamento de tons pode transformar a gama dinâmica de um vídeo de HDR para SDR, mantendo os detalhes e as cores da imagem, que são informações muito importantes para representar a cena original. Atualmente funciona apenas com vídeos HDR10 de 10 bits, HLG e DoVi. Isso requer o tempo de execução GPGPU correspondente.", - "MusicVideos": "Videoclipes", + "Bwdif": "Filtro de Desentrelaçamento Bob Weaver (BWDIF)", + "ButtonPlayer": "Reprodutor", + "ButtonCast": "Transmitir para dispositivo", + "AllowTonemappingHelp": "O tone-mapping transforma o alcance dinâmico de um vídeo de HDR para SDR mantendo detalhes e cores. Funciona apenas com vídeos HDR10, HLG e DoVi de 10 bits. Requer runtime GPGPU correspondente.", + "MusicVideos": "Vídeos Musicais", "LabelTonemappingPeak": "Pico do mapeamento de tons", - "LabelTonemappingParamHelp": "Afina o algoritmo de mapeamento de tons. É recomendado deixar este campo em branco.", - "LabelTonemappingParam": "Parâmetros do mapeamento de tons", - "LabelTonemappingDesatHelp": "Aplica a dessaturação aos realces que excedem este nível de brilho. O valor recomendado é 0 (desativar).", - "LabelTonemappingDesat": "Dessaturação do mapeamento de tons", - "LabelTonemappingAlgorithm": "Seleciona o algoritmo de mapeamento de tons a utilizar", + "LabelTonemappingParamHelp": "Ajuste o algoritmo de mapeamento de tons. Geralmente, deixe em branco.", + "LabelTonemappingParam": "Parâmetro do mapeamento de tons", + "LabelTonemappingDesatHelp": "Aplicar desaturação para realces que excedem este nível de brilho. O valor recomendado é 0 (desativar).", + "LabelTonemappingDesat": "Desaturação do mapeamento de tons", + "LabelTonemappingAlgorithm": "Selecione o algoritmo de mapeamento de tons a ser usado", "LabelSyncPlayTimeSyncOffset": "Deslocamento de tempo", - "LabelSyncPlayTimeSyncDevice": "Sincronizando o tempo com", + "LabelSyncPlayTimeSyncDevice": "Sincronização de tempo com", "LabelSyncPlaySyncMethod": "Método de sincronização", - "LabelSyncPlayResumePlaybackDescription": "Retomar a reprodução em grupo", - "LabelSyncPlayResumePlayback": "Retomar a reprodução local", + "LabelSyncPlayResumePlaybackDescription": "Juntar-se novamente à reprodução em grupo", + "LabelSyncPlayResumePlayback": "Retomar reprodução local", "LabelSyncPlayPlaybackDiff": "Diferença de tempo de reprodução", - "LabelSyncPlayNewGroupDescription": "Crie um novo grupo", + "LabelSyncPlayNewGroupDescription": "Criar um novo grupo", "LabelSyncPlayNewGroup": "Novo grupo", "LabelSyncPlayLeaveGroupDescription": "Desativar SyncPlay", - "LabelSyncPlayLeaveGroup": "Deixar o grupo", - "LabelSyncPlayHaltPlaybackDescription": "E ignorar as atualizações recentes da playlist", + "LabelSyncPlayLeaveGroup": "Sair do grupo", + "LabelSyncPlayHaltPlaybackDescription": "E ignorar atualizações atuais da lista de reprodução", "LabelSyncPlayHaltPlayback": "Parar reprodução local", - "LabelSyncPlayAccessNone": "Desativado para este utilizador", - "LabelSyncPlayAccessJoinGroups": "Permitir ao utilizador aderir a grupos", - "LabelSyncPlayAccessCreateAndJoinGroups": "Permitir ao utilizador criar e aderir a grupos", - "LabelSyncPlayAccess": "Acesso SyncPlay", + "LabelSyncPlayAccessNone": "Desativado para este usuário", + "LabelSyncPlayAccessJoinGroups": "Permitir que o usuário junte-se a grupos", + "LabelSyncPlayAccessCreateAndJoinGroups": "Permitir que o usuário crie e junte-se a grupos", + "LabelSyncPlayAccess": "Acesso ao SyncPlay", "LabelSubtitleVerticalPosition": "Posição vertical", "LabelStable": "Estável", "LabelSSDPTracingFilterHelp": "Endereço IP opcional para filtrar o tráfego SSDP registrado.", "LabelSSDPTracingFilter": "Filtro SSDP", "LabelRepositoryUrlHelp": "A localização do manifesto do repositório que você deseja incluir.", "LabelRepositoryUrl": "URL do Repositório", - "LabelRepositoryNameHelp": "Nome personalizado para distinguir este repositório de outros presentes no servidor.", + "LabelRepositoryNameHelp": "Um nome personalizado para distinguir este repositório de outros adicionados ao seu servidor.", "LabelRepositoryName": "Nome do Repositório", - "LabelQuickConnectCode": "Código de Ligação Rápida", - "LabelPublishedServerUriHelp": "Substituir o URI utilizado pelo Jellyfin, com base na interface, ou no endereço IP do cliente. Por exemplo: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, ou all=https://jellyfin.example.com", - "LabelPublishedServerUri": "URIs de Servidor Publicado", - "LabelOpenclDeviceHelp": "Este é o dispositivo OpenCL utilizado para o mapeamento de tons. O número à esquerda do ponto representa a plataforma, e o da direita representa o número do dispositivo nessa plataforma. O valor predefinido é 0.0. É necessário o ficheiro da aplicação FFmpeg que contenha o método de aceleração por hardware via OpenCL.", + "LabelQuickConnectCode": "Código de Conexão Rápida", + "LabelPublishedServerUriHelp": "Substitua a URI usada pelo Jellyfin, com base na interface ou no endereço IP do cliente. Por exemplo: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, or all=https://jellyfin.example.com", + "LabelPublishedServerUri": "URIs do Servidor Publicado", + "LabelOpenclDeviceHelp": "Este é o dispositivo OpenCL usado para mapeamento de tons. O lado esquerdo do ponto é o número da plataforma e o lado direito é o número do dispositivo na plataforma. O valor padrão é 0.0. O arquivo do aplicativo FFmpeg contendo o método de aceleração de hardware OpenCL é necessário.", "LabelOpenclDevice": "Dispositivo OpenCL", - "LabelMinAudiobookResumeHelp": "Os audiolivros são considerados como não ouvidos se parados antes do valor definido.", - "LabelMinAudiobookResume": "Duração mínima do audiolivro em minutos para permitir retomar", - "LabelMaxAudiobookResume": "Minutos restantes para retomar o audiolivro", - "LabelMaxMuxingQueueSizeHelp": "Número máximo de pacotes que podem ser armazenados em buffer enquanto espera que todas as transmissões sejam inicializadas. Tenta aumentá-lo se ainda encontrares o erro \"Demasiados pacotes armazenados em buffer para o fluxo de saída\" nos registos do FFmpeg. O valor recomendado é 2048.", + "LabelMinAudiobookResumeHelp": "Os títulos são considerados não reproduzidos se parados antes deste tempo.", + "LabelMinAudiobookResume": "Retomar mínimo do audiolivro em minutos", + "LabelMaxAudiobookResume": "Minutos restantes do audiolivro para retomar", + "LabelMaxMuxingQueueSizeHelp": "Número máximo de pacotes que podem ser armazenados em buffer enquanto aguardam a inicialização de todos os streams. Tente aumentá-lo se ainda encontrar o erro \"Muitos pacotes armazenados em buffer para o stream de saída\" nos logs do FFmpeg. O valor recomendado é 2048.", "LabelMaxMuxingQueueSize": "Tamanho máximo da fila de muxing", - "LabelMaxAudiobookResumeHelp": "Os audiolivros são considerados como ouvidos quando o valor em falta for menor que o valor definido.", + "LabelMaxAudiobookResumeHelp": "Os títulos são considerados totalmente reproduzidos se parados quando a duração restante é menor que este valor.", "LabelKnownProxies": "Proxies conhecidos", "LabelIsForced": "Forçado", "LabelIconMaxResHelp": "Resolução máxima dos ícones expostos por meio da propriedade upnp:icon.", "LabelHDHomerunPortRangeHelp": "Restringe o intervalo de portas UDP HD Homerun a este valor. (O padrão é 1024 - 65535).", "LabelHDHomerunPortRange": "Intervalo de portas HD Homerun", - "LabelH265Crf": "CRF da codificação H.265", + "LabelH265Crf": "Codificação H.265 CRF", "LabelEnableSSDPTracingHelp": "Habilite o registro dos detalhes do rastreamento de rede SSDP.
AVISO: Isso causará uma grave degradação do desempenho.", "LabelEnableSSDPTracing": "Habilitar Rastreamento de SSDP", - "LabelEnableIP4Help": "Ativar a funcionalidade IPv4.", - "LabelEnableIP6Help": "Ativar a funcionalidade IPv6.", + "LabelEnableIP4Help": "Ativar funcionalidade IPv4.", + "LabelEnableIP6Help": "Ativar funcionalidade IPv6.", "LabelEnableIP6": "Ativar IPv6", "LabelEnableIP4": "Ativar IPv4", "LabelDropSubtitleHere": "Solte a legenda aqui, ou clique para navegar.", - "LabelCurrentStatus": "Estado atual", - "LabelCreateHttpPortMapHelp": "Permita o mapeamento automático de portas para criar uma regra para o tráfego HTTP, além do tráfego HTTPS.", - "LabelCreateHttpPortMap": "Ativar o mapeamento automático de portas para tráfego HTTP e HTTPS.", + "LabelCurrentStatus": "Status atual", + "LabelCreateHttpPortMapHelp": "Permitir mapeamento automático de porta para criar uma regra para tráfego HTTP além do tráfego HTTPS.", + "LabelCreateHttpPortMap": "Ativar mapeamento automático de porta para tráfego HTTP e HTTPS.", "LabelColorTransfer": "Transferência de cor", "LabelColorSpace": "Espaço de cor", - "LabelColorPrimaries": "Cores primárias", - "LabelAutomaticDiscoveryHelp": "Permitir que os aplicativos detectem automaticamente o Jellyfin usando a porta UDP 7359.", - "LabelAutomaticDiscovery": "Ativar deteção automática", + "LabelColorPrimaries": "Primárias de cor", + "LabelAutomaticDiscoveryHelp": "Permitir que aplicativos detectem automaticamente o Jellyfin usando o UDP na porta 7359.", + "LabelAutomaticDiscovery": "Ativar Descoberta Automática", "LabelAutoDiscoveryTracingHelp": "Quando habilitado, os pacotes recebidos na porta de descoberta automática serão registrados.", "LabelAutoDiscoveryTracing": "Ative o rastreamento de Descoberta Automática.", "LabelAlbumArtMaxResHelp": "Resolução máxima da arte do álbum exposta por meio da propriedade upnp:albumArtURI.", - "KnownProxiesHelp": "Lista separada por vírgulas de endereços IP ou hostnames de proxies conhecidos usados ao se conectar à sua instância Jellyfin. Isso é necessário para fazer uso adequado dos cabeçalhos X-Forwarded-For. Requer uma reinicialização após salvar.", + "KnownProxiesHelp": "Lista separada por vírgulas de endereços IP ou nomes de hosts de proxies conhecidos usados ao conectar-se à sua instância Jellyfin. Isso é necessário para fazer uso adequado dos cabeçalhos 'X-Forwarded-For'. Requer uma reinicialização após a gravação.", "Image": "Imagem", "HeaderUploadSubtitle": "Enviar Legenda", - "HeaderSyncPlaySelectGroup": "Junta-te a um grupo", + "HeaderSyncPlaySelectGroup": "Entrar em um grupo", "HeaderSyncPlayEnabled": "SyncPlay ativado", - "HeaderPortRanges": "Definições de Firewall e Proxy", - "HeaderNewRepository": "Novo repositório", + "HeaderPortRanges": "Configurações de Firewall e Proxy", + "HeaderNewRepository": "Novo Repositório", "HeaderNetworking": "Protocolos IP", "HeaderDebugging": "Depuração e Rastreamento", - "HeaderContinueReading": "Continuar a ler", - "HeaderAutoDiscovery": "Deteção de rede", - "HeaderAddUser": "Adicionar utilizador", - "HeaderAddUpdateSubtitle": "Adicionar/Atualizar legenda", - "Framerate": "Taxa de fotogramas", + "HeaderContinueReading": "Continuar Lendo", + "HeaderAutoDiscovery": "Descoberta Automática", + "HeaderAddUser": "Adicionar Usuário", + "HeaderAddUpdateSubtitle": "Adicionar/Atualizar Legenda", + "Framerate": "Taxa de quadros", "Filter": "Filtro", "EveryXMinutes": "A cada {0} minutos", "EveryXHours": "A cada {0} horas", - "EveryHour": "Toda hora", + "EveryHour": "A cada hora", "EnableTonemapping": "Ativar mapeamento de tons", "EnableFasterAnimationsHelp": "Use animações e transições mais rápidas.", "EnableFasterAnimations": "Animações mais rápidas", - "EnableBlurHashHelp": "As imagens que ainda estão sendo carregadas serão exibidas com um marcador único.", - "EnableBlurHash": "Ativar marcadores de posição desfocados para imagens", + "EnableBlurHashHelp": "Imagens que ainda estão sendo carregadas serão exibidas com um placeholder exclusivo.", + "EnableBlurHash": "Ativar placeholders desfocados para imagens", "DisablePlugin": "Desativar", "EnablePlugin": "Ativar", "DirectPlayHelp": "O arquivo de origem é totalmente compatível com este cliente e a sessão está recebendo o arquivo sem modificações.", "MessageSent": "Mensagem enviada.", - "MessagePluginInstallError": "Ocorreu um erro durante a instalação da extensão.", - "MessageNoRepositories": "Sem repositórios.", - "MessageGetInstalledPluginsError": "Ocorreu um erro ao tentar obter a lista de extensões atualmente instaladas.", - "MediaInfoColorPrimaries": "Cores primárias", + "MessagePluginInstallError": "Ocorreu um erro ao instalar o plugin.", + "MessageNoRepositories": "Nenhum repositório.", + "MessageGetInstalledPluginsError": "Ocorreu um erro ao obter a lista de plugins atualmente instalados.", + "MediaInfoColorPrimaries": "Primárias de cor", "LastSeen": "Última atividade {0}", - "LabelUserMaxActiveSessions": "Número máximo de sessões em simultâneo", + "LabelUserMaxActiveSessions": "Número máximo de sessões de usuário simultâneas", "LabelUnstable": "Instável", "LabelHardwareEncoding": "Codificação por hardware", - "LabelSyncPlaySettingsExtraTimeOffset": "Compensação do tempo extra", - "LabelSyncPlaySettingsDescription": "Alterar as preferências do SyncPlay", - "LabelSortName": "Ordenar nome", + "LabelSyncPlaySettingsExtraTimeOffset": "Deslocamento de tempo extra", + "LabelSyncPlaySettingsDescription": "Alterar preferências do SyncPlay", + "LabelSortName": "Nome da ordenação", "LabelSlowResponseTime": "Tempo em ms após o qual uma resposta é considerada lenta", - "LabelSlowResponseEnabled": "Escrever aviso no registo se o servidor for muito lento a responder", - "LabelOriginalName": "Nome Original", - "LabelLocalCustomCss": "Estilo CSS personalizado que se aplica apenas a este cliente. Podes desativar o CSS personalizado do servidor.", - "LabelMaxDaysForNextUpHelp": "Defina a quantidade máxima de dias que um programa deve permanecer na lista 'Próximo' sem o assistir.", - "LabelMaxDaysForNextUp": "Máximo de dias em 'Próximo'", - "AgeValue": "Com {0} anos", - "LabelDisableCustomCss": "Desativar código CSS personalizado fornecido pelo servidor.", - "LabelAutomaticallyAddToCollectionHelp": "Quando pelo menos 2 filmes tiverem o mesmo nome de coleção, estes serão adicionados automaticamente.", + "LabelSlowResponseEnabled": "Registrar uma mensagem de aviso se o servidor demorar para responder", + "LabelOriginalName": "Nome original", + "LabelLocalCustomCss": "Código CSS personalizado para estilização que se aplica apenas a este cliente. Você pode desativar o código CSS personalizado do servidor.", + "LabelMaxDaysForNextUpHelp": "Defina a quantidade máxima de dias que um programa deve permanecer na lista 'Próximo' sem ser assistido.", + "LabelMaxDaysForNextUp": "Máx. dias no 'Próximo'", + "AgeValue": "({0} anos)", + "LabelDisableCustomCss": "Desativar código CSS personalizado para personalização/marcação fornecido pelo servidor.", + "LabelAutomaticallyAddToCollectionHelp": "Quando pelo menos 2 filmes tiverem o mesmo nome de coleção, eles serão adicionados automaticamente à coleção.", "LabelAutomaticallyAddToCollection": "Adicionar automaticamente à coleção", "HeaderSyncPlayTimeSyncSettings": "Sincronização de tempo", "HeaderSyncPlayPlaybackSettings": "Reprodução", - "HeaderSyncPlaySettings": "Definições de SyncPlay", - "ErrorPlayerNotFound": "Não foi possível identificar nenhum leitor compatível com o ficheiro solicitado.", + "HeaderSyncPlaySettings": "Configurações do SyncPlay", + "ErrorPlayerNotFound": "Nenhum reprodutor encontrado para a mídia solicitada.", "Engineer": "Engenheiro de som", "DisableCustomCss": "Desativar código CSS personalizado fornecido pelo servidor", - "Console": "Consola", - "Conductor": "Maestro", + "Console": "Console", + "Conductor": "Condutor", "Casual": "Casual", - "ButtonBackspace": "Retrocesso", - "GoogleCastUnsupported": "Google Cast não compatível", + "ButtonBackspace": "Backspace", + "GoogleCastUnsupported": "Google Cast Não Suportado", "Digital": "Digital", - "CopyFailed": "Não podes copiar", + "CopyFailed": "Não foi possível copiar", "Copy": "Copiar", "Copied": "Copiado", "ButtonSpace": "Espaço", - "ButtonExitApp": "Sair da aplicação", + "ButtonExitApp": "Sair do aplicativo", "ButtonClose": "Fechar", "AddToFavorites": "Adicionar aos favoritos", - "DownloadAll": "Transferir tudo", + "DownloadAll": "Baixar tudo", "Experimental": "Experimental", "HeaderPerformance": "Desempenho", - "IgnoreDts": "Ignorar DTS (decodificação de timestamp)", - "IgnoreDtsHelp": "Desativar esta opção pode resolver alguns problemas, por exemplo, a falta de áudio em canais com fluxos de áudio e vídeo separados.", - "LabelStereoDownmixAlgorithm": "Algoritmo Stereo Downmix", + "IgnoreDts": "Ignorar DTS (timestamp de decodificação)", + "IgnoreDtsHelp": "Desativar esta opção pode resolver alguns problemas, por exemplo, áudio ausente em canais com streams de áudio e vídeo separados.", + "LabelStereoDownmixAlgorithm": "Algoritmo de Downmix Estéreo", "ShowLess": "Mostrar menos", - "SecondarySubtitles": "Legendas secundárias", - "ScreenResolution": "Resolução do ecrã", + "SecondarySubtitles": "Legendas Secundárias", + "ScreenResolution": "Resolução da Tela", "Restart": "Reiniciar", - "EnableCardLayout": "Mostrar cartão visual", - "EnableRewatchingNextUp": "Ativar Rever em 'A Seguir'", - "Arranger": "Organizador", + "EnableCardLayout": "Exibir Cartão visual", + "EnableRewatchingNextUp": "Ativar Reassistir no Próximo", + "Arranger": "Arranjador", "Print": "Imprimir", - "Poster": "Cartaz", + "Poster": "Pôster", "Small": "Pequeno", - "QuickConnectActivationSuccessful": "Ativado com sucesso", + "QuickConnectActivationSuccessful": "Ativação bem-sucedida", "SaveChanges": "Guardar alterações", - "PreferEmbeddedExtrasTitlesOverFileNames": "Preferir títulos incorporados ao invés dos nomes dos arquivos para os extras", - "AllowEmbeddedSubtitlesAllowAllOption": "Permitir todos os tipos", - "AllowEmbeddedSubtitlesAllowImageOption": "Permitir imagens", - "Preview": "Amostra", + "PreferEmbeddedExtrasTitlesOverFileNames": "Preferir títulos incorporados em vez de nomes de arquivos para extras", + "AllowEmbeddedSubtitlesAllowAllOption": "Permitir Todas", + "AllowEmbeddedSubtitlesAllowImageOption": "Permitir Imagem", + "Preview": "Prévia", "Premieres": "Estreias", "Production": "Produção", "Profile": "Perfil", - "PreviousTrack": "Faixa anterior", + "PreviousTrack": "Pular para anterior", "PluginFromRepo": "{0} do repositório {1}", "ShowMore": "Mostrar mais", - "MediaInfoBlPresentFlag": "Sinalizador predefinido DV BL", - "ReleaseGroup": "Grupo do lançamento", + "MediaInfoBlPresentFlag": "Sinalizador de preset BL do DV", + "ReleaseGroup": "Grupo de Lançamento", "Primary": "Primário", - "RefreshDialogHelp": "Os metadados são atualizados consoante as definições e serviços de internet ativos no Painel de controlo.", + "RefreshDialogHelp": "Os metadados são atualizados com base nas configurações e serviços da internet que estão ativados no Painel.", "Cursive": "Cursivo", - "ItemDetails": "Detalhe do item", - "HomeVideosPhotos": "Videos e Fotos", - "PreferSystemNativeHwDecoder": "Preferir os descodificadores DXVA nativos do SO ou os de hardware VA-API", - "EnableRewatchingNextUpHelp": "Mostrar episódios já vistos nas secções 'A Seguir'.", - "AllowEmbeddedSubtitlesAllowNoneOption": "Não permitir", - "Rate": "Classificar", + "ItemDetails": "Detalhes do Item", + "HomeVideosPhotos": "Vídeos e Fotos Iniciais", + "PreferSystemNativeHwDecoder": "Preferir decodificadores de hardware nativos do sistema operacional DXVA ou VA-API", + "EnableRewatchingNextUpHelp": "Ativar exibição de episódios já assistidos nas seções 'Próximo'.", + "AllowEmbeddedSubtitlesAllowNoneOption": "Permitir Nenhuma", + "Rate": "Avaliar", "Recordings": "Gravações", "ShowIndicatorsFor": "Mostrar indicadores para", - "SeriesSettings": "Definições de séries", + "SeriesSettings": "Configurações da Série", "Trailer": "Trailer", - "EnableIntelLowPowerH264HwEncoder": "Ativar o codificador de hardware H.264 de baixo consumo da Intel", - "MediaInfoDvBlSignalCompatibilityId": "ID de compatibilidade BL", - "HeaderDummyChapter": "Imagens dos capítulos", + "EnableIntelLowPowerH264HwEncoder": "Ativar codificador de hardware H.264 de baixo consumo Intel", + "MediaInfoDvBlSignalCompatibilityId": "ID de compatibilidade de sinal BL do DV", + "HeaderDummyChapter": "Imagens de Capítulo", "LabelDummyChapterDuration": "Intervalo", - "LabelChapterImageResolutionHelp": "A resolução das imagens dos capítulos extraídas. A alteração desta resolução não terá qualquer efeito nos capítulos fictícios existentes.", + "LabelChapterImageResolutionHelp": "A resolução das imagens de capítulo extraídas. Alterar isso não terá efeito sobre os capítulos fictícios existentes.", "LabelChapterImageResolution": "Resolução", "LabelDummyChapterCount": "Limite", - "HeaderRecordingMetadataSaving": "Registo de metadados", - "AllowEmbeddedSubtitlesAllowTextOption": "Permitir texto", + "HeaderRecordingMetadataSaving": "Gravação de Metadados", + "AllowEmbeddedSubtitlesAllowTextOption": "Permitir Texto", "Premiere": "Estreia", "PreviousChapter": "Capítulo anterior", - "LabelDummyChapterDurationHelp": "Define o intervalo entre capítulos fictícios em segundos. Para desativar a criação de capítulos fictícios, define como 0. Alterar este valor não terá qualquer efeito sobre os capítulos fictícios existentes.", - "AllowCollectionManagement": "Permitir este utilizador gerir as coleções", + "LabelDummyChapterDurationHelp": "O intervalo entre capítulos fictícios em segundos. Defina como 0 para desativar a geração de capítulos fictícios. Alterar isso não terá efeito sobre os capítulos fictícios existentes.", + "AllowCollectionManagement": "Permitir que este usuário gerencie coleções", "LabelMaxVideoResolution": "Resolução máxima permitida para transcodificação de vídeo", "EnableAudioNormalization": "Normalização de Áudio", "GetThePlugin": "Obter o Plugin", - "LabelSyncPlaySettingsExtraTimeOffsetHelp": "Ajuste manualmente o atraso de tempo (em ms) com o dispositivo selecionado para sincronismo de tempo. Ajuste com cuidado.", - "LabelSyncPlaySettingsSyncCorrection": "Correção de sincronismo", - "LabelEnableAudioVbr": "Habilitar codificação de áudio VBR", - "LabelEnableAudioVbrHelp": "A taxa de bits variavel oferece uma melhor que a taxa de bits médio, mas em alguns raros casos pode causar problemas relacionados a armazenamento e compatibilidade.", + "LabelSyncPlaySettingsExtraTimeOffsetHelp": "Ajuste manualmente o deslocamento de tempo (em ms) com o dispositivo selecionado para sincronização de tempo. Ajuste com cuidado.", + "LabelSyncPlaySettingsSyncCorrection": "Correção de Sincronização", + "LabelEnableAudioVbr": "Ativar codificação de áudio VBR", + "LabelEnableAudioVbrHelp": "A codificação de taxa variável oferece melhor qualidade em relação à taxa de bits média, mas em alguns casos raros pode causar problemas de buffer e compatibilidade.", "EnableAudioNormalizationHelp": "A normalização de áudio vai adicionar um ganho constante para manter a média em um nível desejável (-18db).", - "LabelParallelImageEncodingLimit": "Limite de codificação de imagens em paralelo", - "LabelEnableLUFSScan": "Ativar a verificação LUFS", - "LabelEnableLUFSScanHelp": "Os clientes podem normalizar a reprodução de áudio para obter um volume uniforme entre faixas. Isto tornará as análises da biblioteca mais lentas e exigirá mais recursos.", - "LabelParallelImageEncodingLimitHelp": "Número máximo de codificações de imagem permitidas para execução em paralelo. Se deixares este campo vazio, será escolhido um limite baseado na contagem de núcleos do teu sistema.", - "GoHome": "Ir ao início", - "GridView": "Vista em grelha", - "HeaderConfirmRepositoryInstallation": "Confirmar a instalação do repositório de extensões", - "AllowSegmentDeletion": "Eliminar segmentos", - "AllowSegmentDeletionHelp": "Elimina segmentos antigos depois de terem sido descarregados pelo cliente. Isto evita ter de armazenar todo o ficheiro transcodificado no disco. Desativa esta opção se tiveres problemas de reprodução.", - "LabelSegmentKeepSeconds": "Tempo em segundos para manter os segmentos", - "LabelSegmentKeepSecondsHelp": "Tempo em segundos durante o qual os segmentos devem ser mantidos depois de serem descarregados pelo cliente. Só funciona se a eliminação de segmentos estiver ativada.", - "LabelThrottleDelaySeconds": "acelerar depois", - "HeaderAllRecordings": "Todas as gravações", - "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Os extras geralmente têm o mesmo nome incorporado do parente, marque isto para usar títulos incorporados para eles de qualquer maneira.", - "QuickConnectAuthorizeSuccess": "Autenticaste o teu dispositivo com sucesso!", - "QuickConnectNotActive": "A Ligação Rápida não está ativa neste servidor", - "ResolutionMatchSource": "Mesma que a fonte", + "LabelParallelImageEncodingLimit": "Limite de codificação de imagem paralela", + "LabelEnableLUFSScan": "Ativar verificação LUFS", + "LabelEnableLUFSScanHelp": "Os clientes podem normalizar a reprodução de áudio para obter um volume igual em todas as faixas. Isso tornará as verificações de biblioteca mais longas e consumirá mais recursos.", + "LabelParallelImageEncodingLimitHelp": "Número máximo de codificações de imagem que podem ser executadas em paralelo. Deixá-lo vazio escolherá um limite com base na contagem de núcleos do seu sistema.", + "GoHome": "Ir para a página inicial", + "GridView": "Visualização em grade", + "HeaderConfirmRepositoryInstallation": "Confirmar Instalação do Repositório do Plugin", + "AllowSegmentDeletion": "Excluir segmentos", + "AllowSegmentDeletionHelp": "Exclui segmentos antigos após serem baixados pelo cliente. Isso evita armazenar o arquivo transcodificado inteiro no disco. Desative se tiver problemas de reprodução.", + "LabelSegmentKeepSeconds": "Tempo para manter segmentos", + "LabelSegmentKeepSecondsHelp": "Tempo em segundos para manter os segmentos após serem baixados pelo cliente. Só funciona se a exclusão de segmentos estiver ativada.", + "LabelThrottleDelaySeconds": "Controlar após", + "HeaderAllRecordings": "Todas as Gravações", + "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Extras geralmente têm o mesmo nome incorporado que o pai, marque isso para usar os títulos incorporados para eles mesmo assim.", + "QuickConnectAuthorizeSuccess": "Você autenticou seu dispositivo com sucesso!", + "QuickConnectNotActive": "A Conexão Rápida não está ativa neste servidor", + "ResolutionMatchSource": "Correspondência com a Fonte", "SeriesRecordingScheduled": "Gravação da série agendada.", - "RememberSubtitleSelections": "Definir faixa de legendas com base no item anterior", - "RememberAudioSelections": "Defina a faixa de áudio com base no item anterior", - "RememberAudioSelectionsHelp": "Tente definir a faixa de áudio para a correspondência mais próxima do último vídeo.", - "RememberSubtitleSelectionsHelp": "Tente definir a faixa de legendas para a correspondência mais próxima do último vídeo.", - "ResetPassword": "Redefinir palavra-passe", - "LabelSyncPlaySettingsMaxDelaySpeedToSyncHelp": "Atraso máximo de reprodução (em ms) após o qual SkipToSync é usado em vez de SpeedToSync.", - "LabelSyncPlaySettingsMinDelaySpeedToSyncHelp": "Atraso mínimo da reprodução (em ms) após o qual o SpeedToSync tenta corrigir a posição de reprodução.", - "QuickConnectNotAvailable": "Pede ao administrador do servidor para ativar a Ligação Rápida", - "Remixer": "'Remixer'", - "QuickConnectAuthorizeCode": "Introduz o código {0} para iniciar sessão", - "QuickConnect": "Ligação Rápida", + "RememberSubtitleSelections": "Definir faixa de legenda com base no item anterior", + "RememberAudioSelections": "Definir faixa de áudio com base no item anterior", + "RememberAudioSelectionsHelp": "Tentar definir a faixa de áudio para a correspondência mais próxima com o último vídeo.", + "RememberSubtitleSelectionsHelp": "Tentar definir a faixa de legenda para a correspondência mais próxima com o último vídeo.", + "ResetPassword": "Redefinir Senha", + "LabelSyncPlaySettingsMaxDelaySpeedToSyncHelp": "Atraso máximo de reprodução (em ms) após o qual o SkipToSync é usado em vez do SpeedToSync.", + "LabelSyncPlaySettingsMinDelaySpeedToSyncHelp": "Atraso mínimo de reprodução (em ms) após o qual o SpeedToSync tenta corrigir a posição da reprodução.", + "QuickConnectNotAvailable": "Peça ao administrador do servidor para ativar a Conexão Rápida", + "Remixer": "Remixer", + "QuickConnectAuthorizeCode": "Insira o código {0} para fazer login", + "QuickConnect": "Conexão Rápida", "SelectServer": "Selecionar Servidor", - "PosterCard": "Cartaz em forma de cartão", + "PosterCard": "Cartão de Pôster", "SortByValue": "Ordenar por {0}", - "PathNotFound": "Não foi possível encontrar a localização. Certifica-te de que o caminho é válido e tenta novamente.", - "PlaybackErrorPlaceHolder": "Este é um espaço reservado para mídia física que o Jellyfin não consegue reproduzir. Por favor insira o disco para reproduzir.", - "ProductionLocations": "Locais da produção", + "PathNotFound": "O caminho não pôde ser encontrado. Verifique se o caminho é válido e tente novamente.", + "PlaybackErrorPlaceHolder": "Este é um placeholder para mídia física que o Jellyfin não pode reproduzir. Por favor, insira o disco para reproduzir.", + "ProductionLocations": "Locais de Produção", "Photo": "Foto", - "SearchResultsEmpty": "Desculpa! Não foram encontrados resultados para \"{0}\"", - "ShowParentImages": "Mostrar imagens das series", - "SaveRecordingNFO": "Guardar metadados EPG da gravação no NFO", + "SearchResultsEmpty": "Desculpe! Nenhum resultado encontrado para \"{0}\"", + "ShowParentImages": "Mostrar imagens da série", + "SaveRecordingNFO": "Salvar metadados EPG da gravação em NFO", "PersonRole": "como {0}", - "AllowEmbeddedSubtitles": "Desativar diferentes tipos de legendas incorporadas", - "QuickConnectDeactivated": "A Ligação Rápida foi desativada antes do pedido de início de sessão ser aprovado", - "QuickConnectInvalidCode": "Código de Ligação Rápida inválido", - "QuickConnectDescription": "Para iniciar sessão com a Ligação Rápida, clica no botão \"Ligação Rápida\" no dispositivo a partir do qual estás a iniciar sessão e introduz o código apresentado abaixo.", - "RefreshQueued": "Atualização em fila de espera.", + "AllowEmbeddedSubtitles": "Desativar diferentes tipos de legendas embutidas", + "QuickConnectDeactivated": "A Conexão Rápida foi desativada antes que a solicitação de login pudesse ser aprovada", + "QuickConnectInvalidCode": "Código de Conexão Rápida inválido", + "QuickConnectDescription": "Para fazer login com a Conexão Rápida, selecione o botão 'Conexão Rápida' no dispositivo que você está fazendo login e insira o código exibido abaixo.", + "RefreshQueued": "Atualização na fila.", "PlaybackRate": "Velocidade de Reprodução", - "AllowEmbeddedSubtitlesHelp": "Desativar as legendas que estão empacotadas em containers multimédia. Requer uma atualização completa da biblioteca.", + "AllowEmbeddedSubtitlesHelp": "Desativar legendas que estão embaladas dentro dos contêineres de mídia. Requer uma atualização completa da biblioteca.", "LabelEnableGamepad": "Ativar Gamepad", "LabelTonemappingThreshold": "Limite de mapeamento de tons", "LabelTonemappingRange": "Intervalo do mapeamento de tons", - "PasswordRequiredForAdmin": "É necessária uma palavra passe para contas de administrador.", - "PleaseConfirmRepositoryInstallation": "Clique em OK para confirmar que leu o texto acima e deseja prosseguir com a instalação do repositório de plug-ins.", - "LabelThrottleDelaySecondsHelp": "Tempo em segundos após o qual o transcodificador será limitado. Deve ser grande o suficiente para que o cliente mantenha um buffer saudável. Só funciona se a limitação estiver ligada.", - "QuickConnectAuthorizeFail": "Código de Ligação Rápida desconhecido", - "TonemappingAlgorithmHelp": "O mapeamento de tons pode ser afinado. Se não estiveres familiarizado com estas opções, mantém o valor predefinido. O valor recomendado é 'BT.2390'.", - "UseEpisodeImagesInNextUp": "Utilizar imagens do episódio nas secções 'A seguir' e 'Continuar a ver'", - "UseEpisodeImagesInNextUpHelp": "As secções 'A seguir' e 'Continuar a ver' vão utilizar imagens dos episódios como miniatura em vez da imagem primária da série.", - "Yadif": "Mais um filtro de desentrelaçamento (YADIF)", - "IntelLowPowerEncHelp": "A codificação de baixo consumo pode manter uma sincronização CPU-GPU desnecessária. No Linux eles devem ser desativados se o firmware i915 HuC não estiver configurado.", + "PasswordRequiredForAdmin": "Uma senha é necessária para contas de administrador.", + "PleaseConfirmRepositoryInstallation": "Por favor, clique em OK para confirmar que você leu o acima e deseja prosseguir com a instalação do repositório do plugin.", + "LabelThrottleDelaySecondsHelp": "Tempo em segundos após o qual o transcodificador será controlado. Deve ser suficiente para o cliente manter um buffer saudável. Só funciona se o controle estiver ativado.", + "QuickConnectAuthorizeFail": "Código de Conexão Rápida desconhecido", + "TonemappingAlgorithmHelp": "O mapeamento de tons pode ser ajustado. Se você não estiver familiarizado com essas opções, mantenha o padrão. O valor recomendado é 'BT.2390'.", + "UseEpisodeImagesInNextUp": "Usar imagens de episódios nas seções 'Próximo' e 'Continuar Assistindo'", + "UseEpisodeImagesInNextUpHelp": "'Próximo' e 'Continuar Assistindo' usarão imagens de episódios como miniaturas em vez da miniatura principal do programa.", + "Yadif": "Yet Another DeInterlacing Filter (YADIF)", + "IntelLowPowerEncHelp": "A codificação de baixo consumo pode manter a sincronização desnecessária entre CPU e GPU. No Linux, devem ser desativados se o firmware HuC i915 não estiver configurado.", "LabelTonemappingThresholdHelp": "Os parâmetros do algoritmo de mapeamento de tom são ajustados para cada cena. Um limite é usado para detectar se a cena mudou ou não. Se a distância entre o brilho médio do quadro atual e a média atual exceder um valor limite, recalcularíamos a média da cena e o brilho máximo. Os valores recomendados e padrão são 0,8 e 0,2.", "SyncPlayAccessHelp": "O recurso SyncPlay permite sincronizar a reprodução com outros dispositivos. Selecione o nível de acesso que este usuário tem ao SyncPlay.", - "AllowVppTonemappingHelp": "Mapeamento de tons totalmente baseado no driver Intel. Vídeos em HDR10 funcionam apenas em certas configurações de hardware. Tem maior prioridade quando comparado a outras implementações OpenCL.", - "LabelSyncPlaySettingsMinDelaySkipToSyncHelp": "Atraso mínimo de reprodução (em ms) após o qual SkipToSync tenta corrigir a posição de reprodução.", - "OptionMaxActiveSessions": "Definir o número máximo de sessões de usuário simultâneas.", - "LabelSyncPlaySettingsSpeedToSyncDurationHelp": "Quantidade de milissegundos usados pelo SpeedToSync para corrigir a posição de reprodução.", - "SubtitleAppearanceSettingsDisclaimer": "Estas definições não se aplicam a legendas gráficas mencionadas acima ou a legendas ASS/SSA com estilos próprios incorporados.", - "UnsupportedPlayback": "Jellyfin não pode desencriptar conteúdo protegido por DRM, mas todo o conteúdo será testado de qualquer maneira, incluindo títulos protegidos. Alguns arquivos podem aparecer completamente pretos devido à encriptação ou a outros recursos não suportados, como títulos interativos.", - "MessageSyncPlayGroupWait": "{0} está a armazenar em buffer…", - "LabelSelectAudioNormalization": "Normalização de áudio", - "LabelBackdropScreensaverIntervalHelp": "O tempo em segundos entre a mudança de diferentes imagens de fundo na proteção de ecrã.", + "AllowVppTonemappingHelp": "Mapeamento de tons baseado em driver completo da Intel. Atualmente funciona apenas em determinados hardwares com vídeos HDR10. Esta opção tem prioridade mais alta em comparação com outra implementação OpenCL.", + "LabelSyncPlaySettingsMinDelaySkipToSyncHelp": "Atraso mínimo de reprodução (em ms) após o qual o SkipToSync tenta corrigir a posição da reprodução.", + "OptionMaxActiveSessions": "Defina o número máximo de sessões de usuário simultâneas.", + "LabelSyncPlaySettingsSpeedToSyncDurationHelp": "Quantidade de milissegundos usados pelo SpeedToSync para corrigir a posição da reprodução.", + "SubtitleAppearanceSettingsDisclaimer": "As configurações a seguir não se aplicam às legendas gráficas mencionadas acima ou às legendas ASS/SSA que incorporam seus próprios estilos.", + "UnsupportedPlayback": "O Jellyfin não pode descriptografar conteúdo protegido por DRM, mas todo o conteúdo será tentado independentemente, incluindo títulos protegidos. Alguns arquivos podem aparecer completamente pretos devido à criptografia ou outros recursos não suportados, como títulos interativos.", + "MessageSyncPlayGroupWait": "{0} está carregando…", + "LabelSelectAudioNormalization": "Normalização de Áudio", + "LabelBackdropScreensaverIntervalHelp": "O tempo em segundos entre diferentes planos de fundo ao usar o protetor de tela com plano de fundo.", "LabelServerVersion": "Versão do servidor", - "LabelTonemappingPeakHelp": "Substitui o valor de metadados incorporado para o sinal de entrada por este valor de pico. O valor predefinido é 100 (1000nit).", - "OptionDateShowAdded": "Data de exibição adicionada", + "LabelTonemappingPeakHelp": "Substitua o valor de metadados incorporado para o sinal de entrada por este valor de pico. O valor padrão é 100 (1000nit).", + "OptionDateShowAdded": "Data do Programa Adicionado", "Studios": "Estúdios", - "WriteAccessRequired": "Jellyfin requer acesso de gravação a esta pasta. Garanta o acesso de gravação e tente novamente.", - "LabelFallbackFontPathHelp": "Essas fontes são usadas por alguns clientes para renderizar legendas. Consulte a documentação para obter mais informações.", - "EnableGamepadHelp": "Detetar o sinal de entrada de qualquer comando ligado. (Requer: Modo de apresentação 'TV')", - "BackdropScreensaver": "Fundo do protetor de ecrã", + "WriteAccessRequired": "O Jellyfin requer acesso de gravação a esta pasta. Por favor, assegure-se de que o acesso de gravação está habilitado e tente novamente.", + "LabelFallbackFontPathHelp": "Essas fontes são usadas por alguns clientes para renderizar legendas. Consulte a documentação para mais informações.", + "EnableGamepadHelp": "Ouvir entrada de qualquer controle conectado. (Requer: 'Modo de Exibição TV')", + "BackdropScreensaver": "Protetor de tela com plano de fundo", "LabelLevel": "Nível", - "LabelSyncPlaySettingsMinDelaySpeedToSync": "Atraso mínimo da velocidade de sincronização", - "OptionDateEpisodeAdded": "Data do episódio adicionado", - "SubtitleDownloadersHelp": "Ativa e ordena os teus fornecedores de legendas preferidos por ordem de prioridade.", - "Sort": "Organizar", - "SmartSubtitlesHelp": "As legendas que correspondem à preferência de idioma serão carregadas quando o áudio estiver em um idioma estrangeiro.", + "LabelSyncPlaySettingsMinDelaySpeedToSync": "Atraso mínimo do SpeedToSync", + "OptionDateEpisodeAdded": "Data do Episódio Adicionado", + "SubtitleDownloadersHelp": "Ative e classifique seus baixadores de legendas preferidos por ordem de prioridade.", + "Sort": "Ordenar", + "SmartSubtitlesHelp": "Legendas que correspondem à preferência de idioma serão carregadas quando o áudio estiver em um idioma estrangeiro.", "SubtitleMagenta": "Magenta", "Smart": "Inteligente", - "StopPlayback": "Parar a reprodução", - "MessageSyncPlayEnabled": "Sincronização ativada.", - "MessageSyncPlayGroupDoesNotExist": "Falha ao ingressar no grupo porque ele não existe.", + "StopPlayback": "Parar reprodução", + "MessageSyncPlayEnabled": "SyncPlay ativado.", + "MessageSyncPlayGroupDoesNotExist": "Falha ao entrar no grupo porque ele não existe.", "Subtitle": "Legenda", - "MixedMoviesShows": "Filmes e séries misturados", - "MessageSyncPlayIsDisabled": "Requer permissão para utilizar SyncPlay.", - "LabelMediaDetails": "Detalhes do conteúdo multimédia", - "MessageSyncPlayErrorNoActivePlayer": "Não foi encontrado nenhum leitor ativo. O SyncPlay foi desativado.", - "SpecialFeatures": "Opções especiais", - "MessageSyncPlayNoGroupsAvailable": "Não há grupos disponíveis. Começa por reproduzir algo primeiro.", + "MixedMoviesShows": "Filmes e Programas Mistos", + "MessageSyncPlayIsDisabled": "Permissão necessária para usar o SyncPlay.", + "LabelMediaDetails": "Detalhes da mídia", + "MessageSyncPlayErrorNoActivePlayer": "Nenhum reprodutor ativo encontrado. O SyncPlay foi desativado.", + "SpecialFeatures": "Recursos Especiais", + "MessageSyncPlayNoGroupsAvailable": "Sem grupos disponíveis. Comece a reproduzir algo primeiro.", "Smaller": "Menor", "MessageSyncPlayErrorMedia": "Falha ao ativar o SyncPlay! Erro de mídia.", "MessageSyncPlayErrorAccessingGroups": "Ocorreu um erro ao acessar a lista de grupos.", @@ -1522,346 +1522,346 @@ "SubtitleVerticalPositionHelp": "Número da linha onde o texto aparece. Números positivos indicam de cima para baixo. Números negativos indicam de baixo para cima.", "Remuxing": "Remuxing", "OnApplicationStartup": "Na inicialização do aplicativo", - "MessageSyncPlayLibraryAccessDenied": "O acesso a este conteúdo é restrito.", - "SortName": "Classificar nome", + "MessageSyncPlayLibraryAccessDenied": "Acesso a este conteúdo restrito.", + "SortName": "Nome da ordenação", "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "Essas configurações também se aplicam a qualquer reprodução do Google Cast iniciada por este dispositivo.", - "OnWakeFromSleep": "Ao acordar da suspensão", - "OptionMaxActiveSessionsHelp": "Um valor 0 desativará o recurso.", + "OnWakeFromSleep": "Ao sair do modo de suspensão", + "OptionMaxActiveSessionsHelp": "Um valor de 0 desativará o recurso.", "Watched": "Assistido", - "SyncPlayGroupDefaultTitle": "grupo de {0}", + "SyncPlayGroupDefaultTitle": "Grupo de {0}", "TabRepositories": "Repositórios", - "TagsValue": "Etiquetas: {0}", + "TagsValue": "Tags: {0}", "TextSent": "Texto enviado.", - "ThemeSongs": "Bandas sonoras do tema", - "ThemeVideos": "Vídeos do tema", - "TheseSettingsAffectSubtitlesOnThisDevice": "Estas definições afetam as legendas neste dispositivo", + "ThemeSongs": "Músicas tema", + "ThemeVideos": "Vídeos tema", + "TheseSettingsAffectSubtitlesOnThisDevice": "Essas configurações afetam as legendas neste dispositivo", "Thumb": "Miniatura", - "ThumbCard": "Miniatura em forma de cartão", - "TitleHardwareAcceleration": "Aceleraçao do hardware", + "ThumbCard": "Cartão de Miniatura", + "TitleHardwareAcceleration": "Aceleração por Hardware", "Trailers": "Trailers", "TypeOptionPluralAudio": "Áudios", "TypeOptionPluralBook": "Livros", "TypeOptionPluralMovie": "Filmes", "Typewriter": "Máquina de escrever", "UnknownError": "Ocorreu um erro desconhecido.", - "Up": "Acima", - "Upload": "Carregar", + "Up": "Para cima", + "Upload": "Enviar", "ValueCodec": "Codec: {0}", "ValueContainer": "Contêiner: {0}", "ValueDiscNumber": "Disco {0}", "ValueMovieCount": "{0} filmes", "ValueEpisodeCount": "{0} episódios", - "ValueMusicVideoCount": "{0} videoclipes", + "ValueMusicVideoCount": "{0} vídeos musicais", "ValueOneEpisode": "1 episódio", "ValueOneSong": "1 música", "ValueSeconds": "{0} segundos", "ViewAlbum": "Ver álbum", "ViewAlbumArtist": "Ver artista do álbum", "ViewPlaybackInfo": "Ver informações de reprodução", - "WeeklyAt": "{0} às {1}", - "Whitelist": "Lista de permissões", - "Writers": "Argumento", - "XmlTvKidsCategoriesHelp": "Lista de categorias, separadas por '|', que correspondem a programas para crianças.", + "WeeklyAt": "{0}s às {1}", + "Whitelist": "Lista branca", + "Writers": "Escritores", + "XmlTvKidsCategoriesHelp": "Programas com essas categorias serão exibidos como programas para crianças. Separe várias com '|'.", "Yes": "Sim", - "HeaderSelectFallbackFontPathHelp": "Navegue ou insira o caminho da pasta de fontes substitutas a ser usada para renderizar legendas ASS/SSA.", - "RemuxHelp1": "O ficheiro multimédia está num container de ficheiros incompatível (MKV, AVI, WMV, etc.), mas tanto o fluxo de vídeo como o fluxo de áudio são compatíveis com o dispositivo. O ficheiro multimédia será reempacotado sem perdas em tempo real antes de ser enviado para o dispositivo.", - "PreferFmp4HlsContainer": "Preferir o container multimédia fMP4-HLS", - "LabelSyncPlayInfo": "Informações de Sincronização", - "PreferFmp4HlsContainerHelp": "Utiliza o fMP4 como container predefinido para HLS, tornando possível a transmissão direta de conteúdos HEVC e AV1 em dispositivos suportados.", + "HeaderSelectFallbackFontPathHelp": "Navegue ou insira o caminho da pasta da fonte de recuo a ser usada para renderizar legendas ASS/SSA.", + "RemuxHelp1": "A mídia está em um contêiner de arquivo incompatível (MKV, AVI, WMV, etc), mas tanto o stream de vídeo quanto o de áudio são compatíveis com o dispositivo. A mídia será reembalada sem perdas em tempo real antes de ser enviada ao dispositivo.", + "PreferFmp4HlsContainer": "Preferir contêiner de mídia fMP4-HLS", + "LabelSyncPlayInfo": "Informações do SyncPlay", + "PreferFmp4HlsContainerHelp": "Preferir usar fMP4 como o contêiner padrão para HLS, tornando possível o streaming direto de conteúdos HEVC e AV1 em dispositivos suportados.", "LabelSelectAudioChannels": "Canais", "LabelSelectStereo": "Estéreo", - "ContainerNotSupported": "O container não é suportado", - "LabelSyncPlayNoGroups": "Não há grupos disponíveis", - "LabelSyncPlaySettingsMaxDelaySpeedToSync": "Atraso máximo da Velocidade de sincronização", - "LabelSyncPlaySettingsSkipToSync": "Ativar pulo de sincronização", + "ContainerNotSupported": "O contêiner não é suportado", + "LabelSyncPlayNoGroups": "Sem grupos disponíveis", + "LabelSyncPlaySettingsMaxDelaySpeedToSync": "Atraso máximo do SpeedToSync", + "LabelSyncPlaySettingsSkipToSync": "Ativar SkipToSync", "LabelSyncPlaySettingsSpeedToSync": "Ativar SpeedToSync", "NotificationsMovedMessage": "A funcionalidade de notificações foi movida para o plugin Webhook.", - "AspectRatioCover": "Zoom", + "AspectRatioCover": "Cobrir", "AspectRatioFill": "Esticar", - "AudioCodecNotSupported": "O codec de áudio não é compatível", - "HeaderGuestCast": "Estrelas convidadas", - "LabelSyncPlaySettingsSpeedToSyncHelp": "Método de correção de sincronização que consiste em acelerar a reprodução. A correção de sincronização deve estar habilitada.", + "AudioCodecNotSupported": "O codec de áudio não é suportado", + "HeaderGuestCast": "Participações Especiais", + "LabelSyncPlaySettingsSpeedToSyncHelp": "Método de correção de sincronização que consiste em acelerar a reprodução. A correção de sincronização deve estar ativada.", "MessageSyncPlayDisabled": "SyncPlay desativado.", - "LabelVideoInfo": "Informações do vídeo", - "LabelRemuxingInfo": "Informações sobre remixagem", + "LabelVideoInfo": "Informações de Vídeo", + "LabelRemuxingInfo": "Informações de Remuxing", "LabelDate": "Data", - "MessageRenameMediaFolder": "Mudar o nome de uma biblioteca multimédia fará com que todos os metadados se percam, por isso, procede com cuidado.", - "LabelSyncPlaySettingsMinDelaySkipToSync": "Atraso mínimo do pulo de sincronização", + "MessageRenameMediaFolder": "Renomear uma biblioteca de mídia fará com que todos os metadados sejam perdidos, prossiga com cautela.", + "LabelSyncPlaySettingsMinDelaySkipToSync": "Atraso mínimo do SkipToSync", "LogLevel.None": "Nenhum", "LogLevel.Critical": "Crítico", "New": "Novo", "SubtitleWhite": "Branco", - "SubtitleLightGray": "Cinza claro", + "SubtitleLightGray": "Cinza Claro", "Track": "Faixa", - "TypeOptionPluralMusicArtist": "Artistas musicais", + "TypeOptionPluralMusicArtist": "Artistas de Música", "TypeOptionPluralSeason": "Temporadas", "LabelSelectMono": "Mono", - "HeaderEpisodesStatus": "Status dos episódios", - "LabelSyncPlaySettingsSkipToSyncHelp": "Método de correção de sincronismo que consiste em buscar a posição estimada. A correção de sincronização deve estar habilitada.", - "LogLevel.Trace": "Rastreio", - "LogLevel.Debug": "Depuração", + "HeaderEpisodesStatus": "Status dos Episódios", + "LabelSyncPlaySettingsSkipToSyncHelp": "Método de correção de sincronização que consiste em buscar a posição estimada. A correção de sincronização deve estar ativada.", + "LogLevel.Trace": "Rastrear", + "LogLevel.Debug": "Depurar", "LogLevel.Information": "Informação", - "MessageRepositoryInstallDisclaimer": "AVISO: A instalação de uma extensão de terceiros acarreta riscos. Ela pode conter código instável ou malicioso e pode ser alterado a qualquer momento. Instala apenas extensões de autores em quem confias.", - "OptionAllowContentDownload": "Permitir transferências de multimédia", - "StoryArc": "Arco da história", + "MessageRepositoryInstallDisclaimer": "ATENÇÃO: Instalar um repositório de plugin de terceiros envolve riscos. Ele pode conter código instável ou malicioso, e pode mudar a qualquer momento. Instale apenas repositórios de autores confiáveis.", + "OptionAllowContentDownload": "Permitir downloads de mídia", + "StoryArc": "Arco da História", "TabNetworking": "Rede", "ValueOneMovie": "1 filme", - "HeaderSelectFallbackFontPath": "Selecione o caminho da pasta de fontes substitutas", - "XmlTvMovieCategoriesHelp": "Lista de categorias, separadas por '|', que correspondem a filmes.", - "LabelVideoRange": "Gama de vídeo", - "Mixer": "Misturador", + "HeaderSelectFallbackFontPath": "Selecionar Caminho da Fonte de Recuo", + "XmlTvMovieCategoriesHelp": "Programas com essas categorias serão exibidos como filmes. Separe várias com '|'.", + "LabelVideoRange": "Faixa de vídeo", + "Mixer": "Mixer", "LabelSystem": "Sistema", - "SaveRecordingImages": "Guardar imagens da gravação EPG", - "SaveRecordingImagesHelp": "Guardar imagens do fornecedor de listas EPG juntamente com os ficheiros multimédia.", - "UseDoubleRateDeinterlacing": "Duplicar a velocidade de fotogramas ao desentrelaçar", + "SaveRecordingImages": "Salvar imagens EPG da gravação", + "SaveRecordingImagesHelp": "Salvar imagens do provedor de listagens EPG junto com a mídia.", + "UseDoubleRateDeinterlacing": "Dobrar a taxa de quadros ao desentrelaçar", "MessageSyncPlayUserJoined": "{0} entrou no grupo.", "MessageSyncPlayUserLeft": "{0} saiu do grupo.", "MillisecondsUnit": "ms", "SubtitleGreen": "Verde", "Notifications": "Notificações", - "XmlTvNewsCategoriesHelp": "Lista de categorias, separadas por '|', que correspondem a programas de informação.", - "LabelOriginalMediaInfo": "Informações da mídia original", - "YoutubeBadRequest": "Requisição ruim.", - "YoutubeDenied": "O vídeo solicitado não pode ser reproduzido em leitores incorporados.", - "TypeOptionPluralBoxSet": "Conjuntos de caixas", - "LabelBackdropScreensaverInterval": "Intervalo da imagem de fundo do protetor de ecrã", - "UseDoubleRateDeinterlacingHelp": "Esta definição utiliza a taxa de campo durante o desentrelaçamento, muitas vezes referido como desentrelaçamento bob, que duplica a taxa de fotogramas do vídeo para proporcionar movimento fluído, como o que verias ao ver vídeo entrelaçado numa televisão.", - "LabelDirectStreamingInfo": "Informações de transmissão direta", - "LabelAlbumGain": "Ganho do álbum", - "LogoScreensaver": "Logótipo da proteção de ecrã", - "MediaInfoColorSpace": "Espaço colorido", + "XmlTvNewsCategoriesHelp": "Programas com essas categorias serão exibidos como programas de notícias. Separe várias com '|'.", + "LabelOriginalMediaInfo": "Informações da Mídia Original", + "YoutubeBadRequest": "Solicitação inválida.", + "YoutubeDenied": "O vídeo solicitado não pode ser reproduzido em players incorporados.", + "TypeOptionPluralBoxSet": "Caixas", + "LabelBackdropScreensaverInterval": "Intervalo do protetor de tela com plano de fundo", + "UseDoubleRateDeinterlacingHelp": "Esta configuração usa a taxa de campo ao desentrelaçar, muitas vezes chamada de desentrelaçamento bob, que dobra a taxa de quadros do vídeo para fornecer movimento completo como o que você veria ao visualizar vídeo entrelaçado em uma TV.", + "LabelDirectStreamingInfo": "Informações de Streaming Direto", + "LabelAlbumGain": "Ganho do Álbum", + "LogoScreensaver": "Protetor de tela com logo", + "MediaInfoColorSpace": "Espaço de cor", "Studio": "Estúdio", "SubtitleGray": "Cinza", - "TabLogs": "Registos (Logs)", - "Tags": "Etiquetas", + "TabLogs": "Logs", + "Tags": "Tags", "Vertical": "Vertical", "Video": "Vídeo", - "VideoAudio": "Vídeo Áudio", - "MessageNoItemsAvailable": "Nenhum item está disponível no momento.", - "MessageNoFavoritesAvailable": "Não existem favoritos atualmente disponíveis.", - "SaveRecordingNFOHelp": "Guardar metadados do fornecedor de listagens EPG juntamente com os ficheiros multimédia.", - "TonemappingRangeHelp": "Seleciona o intervalo de cores de saída. A opção 'Automático' mantém o intervalo de cores de entrada.", + "VideoAudio": "Áudio de Vídeo", + "MessageNoItemsAvailable": "Nenhum item disponível no momento.", + "MessageNoFavoritesAvailable": "Nenhum favorito disponível no momento.", + "SaveRecordingNFOHelp": "Salvar metadados do provedor de listagens EPG junto com a mídia.", + "TonemappingRangeHelp": "Selecione a faixa de cor de saída. Automático é o mesmo que a faixa de entrada.", "TypeOptionPluralEpisode": "Episódios", - "MediaInfoColorTransfer": "Transferência de cores", - "MediaInfoVideoRange": "Gama de vídeo", - "MessageNoGenresAvailable": "Ativa alguns fornecedores de metadados para obter géneros da internet.", - "ListView": "Lista de Exibição", + "MediaInfoColorTransfer": "Transferência de cor", + "MediaInfoVideoRange": "Faixa de vídeo", + "MessageNoGenresAvailable": "Ative alguns provedores de metadados para buscar gêneros da internet.", + "ListView": "Visualização em lista", "LogLevel.Warning": "Aviso", - "MessageChangeRecordingPath": "Alterar a localização das gravações não irá migrar as gravações existentes da localização atual para a nova. Os ficheiros deverão ser movidos manualmente, se necessário.", + "MessageChangeRecordingPath": "Alterar sua pasta de gravação não migrará gravações existentes da antiga localização para a nova. Você precisará movê-las manualmente, se desejado.", "ListPaging": "{0}-{1} de {2}", "Localization": "Localização", "Lyricist": "Letrista", "NextChapter": "Próximo capítulo", - "TvLibraryHelp": "Revise o {0}guia de nomenclatura de TV{1}.", - "TypeOptionPluralSeries": "Séries", + "TvLibraryHelp": "Veja o {0}guia de nomes de TV{1}.", + "TypeOptionPluralSeries": "Programas de TV", "TypeOptionPluralVideo": "Vídeos", - "ValueSeriesCount": "{0} série", - "LabelAudioInfo": "Informações de áudio", + "ValueSeriesCount": "{0} séries", + "LabelAudioInfo": "Informações de Áudio", "RemuxHelp2": "Remux usa muito pouco poder de processamento com qualidade de mídia completamente sem perdas.", "MenuOpen": "Abrir Menu", "MenuClose": "Fechar Menu", - "OptionAllowContentDownloadHelp": "Os utilizadores podem transferir conteúdo multimédia e armazená-lo nos seus dispositivos. Isto não é o mesmo que uma funcionalidade de sincronização. As bibliotecas de livros necessitam de ter esta opção ativada para funcionarem corretamente.", - "SmallCaps": "Letras Minúsculas", + "OptionAllowContentDownloadHelp": "Os usuários podem baixar mídias e armazená-las em seus dispositivos. Isso não é o mesmo que um recurso de sincronização. Bibliotecas de livros exigem isso ativado para funcionar corretamente.", + "SmallCaps": "Caps pequenas", "StereoDownmixAlgorithmHelp": "Algoritmo usado para fazer downmix de áudio multicanal para estéreo.", "Suggestions": "Sugestões", "TabCodecs": "Codificadores", "SubtitleRed": "Vermelho", "SubtitleYellow": "Amarelo", "Unrated": "Sem classificação", - "TypeOptionPluralMusicAlbum": "Álbuns de música", - "TypeOptionPluralMusicVideo": "Vídeos musicais", + "TypeOptionPluralMusicAlbum": "Álbuns de Música", + "TypeOptionPluralMusicVideo": "Vídeos Musicais", "UserMenu": "Menu do Usuário", "ValueAlbumCount": "{0} álbuns", "ValueOneAlbum": "1 álbum", "ValueSongCount": "{0} músicas", - "Controls": "Comandos", - "LabelSyncPlaySettingsSpeedToSyncDuration": "Duração da Velocidade de sincronização", - "EnableFallbackFontHelp": "Ative fontes alternativas personalizadas. Isso pode evitar o problema de renderização incorreta de legendas.", - "MessagePlaybackError": "Ocorreu um erro ao reproduzir este ficheiro no teu recetor Google Cast.", + "Controls": "Controles", + "LabelSyncPlaySettingsSpeedToSyncDuration": "Duração do SpeedToSync", + "EnableFallbackFontHelp": "Ativar fontes alternativas personalizadas. Isso pode evitar o problema de renderização incorreta de legendas.", + "MessagePlaybackError": "Ocorreu um erro ao reproduzir este arquivo em seu receptor Google Cast.", "NextTrack": "Pular para o próximo", - "TitleHostingSettings": "Definições de hospedagem", + "TitleHostingSettings": "Configurações de Hospedagem", "LabelTextWeight": "Peso do texto", "Bold": "Negrito", - "MessageSyncPlayCreateGroupDenied": "Requer permissão para criar um grupo.", - "MessageUnauthorizedUser": "Você não está autorizado a acessar o servidor neste momento. Entre em contato com o administrador do servidor para obter mais informações.", + "MessageSyncPlayCreateGroupDenied": "Permissão necessária para criar um grupo.", + "MessageUnauthorizedUser": "Você não está autorizado a acessar o servidor neste momento. Por favor, entre em contato com o administrador do servidor para mais informações.", "OtherArtist": "Outro Artista", "Transcoding": "Transcodificação", "YoutubePlaybackError": "O vídeo solicitado não pode ser reproduzido.", - "MessageChromecastConnectionError": "O recetor Google Cast não consegue contactar o servidor Jellyfin. Verifica a ligação e tenta novamente.", - "EnableFallbackFont": "Ativar fontes substitutas", + "MessageChromecastConnectionError": "Seu receptor Google Cast não consegue contatar o servidor Jellyfin. Por favor, verifique a conexão e tente novamente.", + "EnableFallbackFont": "Ativar fontes de recuo", "LabelDeveloper": "Desenvolvedor", - "MessageSyncPlayErrorMissingSession": "Falha ao ativar o Sincronização! Sessão perdida.", - "MessageSyncPlayPlaybackPermissionRequired": "Requer permissão de reprodução.", - "OriginalAirDate": "Data de transmissão original", - "SelectAudioNormalizationHelp": "Ganho de faixa - ajusta o volume de cada faixa para que sejam reproduzidas com o mesmo volume. Ganho do álbum - ajusta o volume de todas as faixas apenas de um álbum, mantendo a faixa dinâmica do álbum. Alternar entre \"Desativado\" e outras opções requer o reinício da reprodução atual.", - "LabelSyncPlaySettingsSyncCorrectionHelp": "Permite que a reprodução seja acelerada ou que o leitor salte para a posição estimada. Desativa caso esteja com paragens de reprodução frequentes.", + "MessageSyncPlayErrorMissingSession": "Falha ao ativar o SyncPlay! Sessão ausente.", + "MessageSyncPlayPlaybackPermissionRequired": "Permissão de reprodução necessária.", + "OriginalAirDate": "Data Original de Exibição", + "SelectAudioNormalizationHelp": "Track gain - ajusta o volume de cada faixa para que sejam reproduzidas com o mesmo nível de loudness. Album gain - ajusta o volume de todas as faixas de um álbum, mantendo a faixa dinâmica do álbum. Alternar entre \"Desligado\" e outras opções requer reiniciar a reprodução atual.", + "LabelSyncPlaySettingsSyncCorrectionHelp": "Ativar sincronização ativa da reprodução, acelerando a mídia ou buscando a posição estimada. Desative isso em caso de gagueira intensa.", "Larger": "Maior", "LogLevel.Error": "Erro", "MediaInfoTitle": "Título", - "MessageAddRepository": "Caso queira adicionar um repositório, clique no botão próximo ao cabeçalho e preencha as informações solicitadas.", + "MessageAddRepository": "Se você deseja adicionar um repositório, clique no botão ao lado do cabeçalho e preencha as informações solicitadas.", "MessageSyncPlayJoinGroupDenied": "Não é possível entrar no grupo.", - "LabelTrackGain": "Rastrear ganho", - "ValueMinutes": "{0} minutos", - "LabelBuildVersion": "Versão de compilação", - "LabelWebVersion": "Versão web", + "LabelTrackGain": "Ganho da Faixa", + "ValueMinutes": "{0} min", + "LabelBuildVersion": "Versão da compilação", + "LabelWebVersion": "Versão da Web", "SubtitleCyan": "Ciano", - "SubtitleOffset": "Deslocamento de legenda", - "ValueOneMusicVideo": "1 videoclipe", + "SubtitleOffset": "Deslocamento da Legenda", + "ValueOneMusicVideo": "1 vídeo musical", "ValueOneSeries": "1 série", - "XmlTvSportsCategoriesHelp": "Lista de categorias, separadas por '|', que correspondem a programas de desporto.", - "LabelFallbackFontPath": "Caminho da pasta de fontes substitutas", - "LabelPlaybackInfo": "Informações de reprodução", - "LabelTranscodingInfo": "Informações de transcodificação", - "AllowHevcEncoding": "Permitir codificação no formato HEVC", - "LabelAllowedAudioChannels": "Máximo de canais de áudio permitidos", + "XmlTvSportsCategoriesHelp": "Programas com essas categorias serão exibidos como programas esportivos. Separe várias com '|'.", + "LabelFallbackFontPath": "Caminho da pasta da fonte de recuo", + "LabelPlaybackInfo": "Informações de Reprodução", + "LabelTranscodingInfo": "Informações de Transcodificação", + "AllowHevcEncoding": "Permitir codificação em formato HEVC", + "LabelAllowedAudioChannels": "Máximo de Canais de Áudio Permitidos", "YoutubeNotFound": "Vídeo não encontrado.", - "EnableEnhancedNvdecDecoder": "Habilitar decodificador NVDEC aprimorado", - "EnableVppTonemapping": "Ativar o mapeamento de tons VPP", - "MediaInfoDvProfile": "Perfil DV", - "VideoCodecNotSupported": "O codec de vídeo não é compatível", - "SubtitleCodecNotSupported": "O codec de legenda não é compatível", + "EnableEnhancedNvdecDecoder": "Ativar decodificador NVDEC aprimorado", + "EnableVppTonemapping": "Ativar mapeamento de tons VPP", + "MediaInfoDvProfile": "Perfil do DV", + "VideoCodecNotSupported": "O codec de vídeo não é suportado", + "SubtitleCodecNotSupported": "O codec de legenda não é suportado", "RefFramesNotSupported": "Quadros de referência não são suportados", "SecondaryAudioNotSupported": "Faixas de áudio secundárias não são suportadas", - "VideoLevelNotSupported": "O nível do codec de vídeo não é compatível", + "VideoLevelNotSupported": "O nível do codec de vídeo não é suportado", "AudioBitDepthNotSupported": "A profundidade de bits do áudio não é suportada", - "LabelHardwareEncodingOptions": "Opções de codificação de hardware", - "UnknownAudioStreamInfo": "As informações do fluxo de áudio são desconhecidas", + "LabelHardwareEncodingOptions": "Opções de codificação por hardware", + "UnknownAudioStreamInfo": "As informações do stream de áudio são desconhecidas", "DirectPlayError": "Ocorreu um erro ao iniciar a reprodução direta", - "Short": "Curto", + "Short": "Curta", "Clip": "Clipe", - "BehindTheScenes": "Bastidores", + "BehindTheScenes": "Por trás das câmeras", "DeletedScene": "Cena deletada", "Interview": "Entrevista", - "LabelVideoRangeType": "Tipo de gama de vídeo", - "MediaInfoVideoRangeType": "Tipo de gama de vídeo", - "MediaInfoDoViTitle": "Título do DVD", - "MediaInfoDvVersionMajor": "Versão DV principal", - "MediaInfoDvLevel": "Nível DV", + "LabelVideoRangeType": "Tipo de faixa de vídeo", + "MediaInfoVideoRangeType": "Tipo de faixa de vídeo", + "MediaInfoDoViTitle": "Título DV", + "MediaInfoDvVersionMajor": "Versão maior do DV", + "MediaInfoDvLevel": "Nível do DV", "Unreleased": "Ainda não lançado", - "AllowAv1Encoding": "Permitir codificação no formato AV1", - "AiTranslated": "IA traduzida", - "MachineTranslated": "Traduzido automaticamente", - "AnamorphicVideoNotSupported": "Vídeos anamórficos não são suportados", - "InterlacedVideoNotSupported": "Vídeo entrelaçado não é compatível", - "EnableEnhancedNvdecDecoderHelp": "Implementação NVDEC melhorada, desativa esta opção e utiliza CUVID no caso de encontrares erros de descodificação.", + "AllowAv1Encoding": "Permitir codificação em formato AV1", + "AiTranslated": "Traduzido por IA", + "MachineTranslated": "Traduzido por Máquina", + "AnamorphicVideoNotSupported": "Vídeo anamórfico não é suportado", + "InterlacedVideoNotSupported": "Vídeo entrelaçado não é suportado", + "EnableEnhancedNvdecDecoderHelp": "Implementação aprimorada do NVDEC, desative esta opção para usar o CUVID se você encontrar erros de decodificação.", "AudioChannelsNotSupported": "O número de canais de áudio não é suportado", "ContainerBitrateExceedsLimit": "A taxa de bits do vídeo excede o limite", "VideoBitrateNotSupported": "A taxa de bits do vídeo não é suportada", - "LabelVppTonemappingBrightness": "Ganho de brilho para mapeamento de tons VPP", - "LabelVppTonemappingBrightnessHelp": "Aplica o ganho de brilho no mapeamento de tons VPP. O valor recomendado é 16.", - "ThemeSong": "Banda sonora do tema", - "Featurette": "Destaque", + "LabelVppTonemappingBrightness": "Ganho de brilho do mapeamento de tons VPP", + "LabelVppTonemappingBrightnessHelp": "Aplicar ganho de brilho no mapeamento de tons VPP. O valor recomendado é 16.", + "ThemeSong": "Música Tema", + "Featurette": "Featurette", "Scene": "Cena", "Sample": "Amostra", - "ThemeVideo": "Vídeo do tema", - "EnableSplashScreen": "Ativar imagem do ecrã de apresentação", + "ThemeVideo": "Vídeo Tema", + "EnableSplashScreen": "Ativar a imagem da tela de apresentação", "LabelVppTonemappingContrast": "Ganho de contraste do mapeamento de tons VPP", - "LabelVppTonemappingContrastHelp": "Aplica o ganho de contraste no mapeamento de tons VPP. O valor recomendado é 1.", + "LabelVppTonemappingContrastHelp": "Aplicar ganho de contraste no mapeamento de tons VPP. O valor recomendado é 1.", "Unknown": "Desconhecido", - "EnableIntelLowPowerHevcHwEncoder": "Habilitar codificador de hardware HEVC Intel Baixa-Potência", - "AudioIsExternal": "O fluxo de áudio é externo", - "MediaInfoElPresentFlag": "Sinalizador predefinido DV EL", - "AudioProfileNotSupported": "O perfil do codec de áudio não é compatível", - "MediaInfoDvVersionMinor": "Versão DV menor", + "EnableIntelLowPowerHevcHwEncoder": "Ativar codificador de hardware HEVC de baixo consumo Intel", + "AudioIsExternal": "O stream de áudio é externo", + "MediaInfoElPresentFlag": "Sinalizador de preset EL do DV", + "AudioProfileNotSupported": "O perfil do codec de áudio não é suportado", + "MediaInfoDvVersionMinor": "Versão menor do DV", "Select": "Selecionar", - "VideoProfileNotSupported": "O perfil do codec de vídeo não é compatível", - "MediaInfoRpuPresentFlag": "Sinalizador predefinido DV RPU", - "HearingImpairedShort": "Alta Definição/SDH", + "VideoProfileNotSupported": "O perfil do codec de vídeo não é suportado", + "MediaInfoRpuPresentFlag": "Sinalizador de preset RPU do DV", + "HearingImpairedShort": "HI/SDH", "ForeignPartsOnly": "Apenas partes forçadas/estrangeiras", "LabelIsHearingImpaired": "Para deficientes auditivos (SDH)", "AudioBitrateNotSupported": "A taxa de bits do áudio não é suportada", "AudioSampleRateNotSupported": "A taxa de amostragem do áudio não é suportada", "VideoResolutionNotSupported": "A resolução do vídeo não é suportada", "VideoBitDepthNotSupported": "A profundidade de bits do vídeo não é suportada", - "VideoFramerateNotSupported": "A taxa de quadros do vídeo não é compatível", + "VideoFramerateNotSupported": "A taxa de quadros do vídeo não é suportada", "UnknownVideoStreamInfo": "As informações do stream de vídeo são desconhecidas", - "SelectAll": "Selecionar tudo", - "LabelTonemappingMode": "Modo do mapeamento de tons", - "TonemappingModeHelp": "Seleciona o modo de mapeamento de tons. Se notares áreas muito claras ou estouradas, experimenta mudar para o modo RGB.", - "VideoRangeTypeNotSupported": "O tipo de gama deste vídeo não é suportado", + "SelectAll": "Selecionar Tudo", + "LabelTonemappingMode": "Modo de mapeamento de tons", + "TonemappingModeHelp": "Selecione o modo de mapeamento de tons. Se você experimentar realces estourados, tente mudar para o modo RGB.", + "VideoRangeTypeNotSupported": "O tipo de faixa do vídeo não é suportado", "ChannelResolutionHD": "HD", "ChannelResolutionSD": "SD", - "AllowVideoToolboxTonemappingHelp": "Mapeamento de tons acelerado por hardware fornecido pelo VideoToolbox. Funciona com a maioria dos formatos HDR, incluindo HDR10, HDR10+ e HLG, mas não funciona com Dolby Vision Profile 5. Tem uma prioridade mais alta em comparação com outra implementação Metal.", - "EnableVideoToolboxTonemapping": "Ativar o mapeamento de tons do VideoToolbox", + "AllowVideoToolboxTonemappingHelp": "Mapeamento de tons acelerado por hardware fornecido pelo VideoToolbox. Funciona com a maioria dos formatos HDR, incluindo HDR10, HDR10+ e HLG, mas não funciona com Dolby Vision Profile 5. Esta opção tem prioridade mais alta em comparação com outra implementação Metal.", + "EnableVideoToolboxTonemapping": "Ativar mapeamento de tons VideoToolbox", "LabelUseReplayGainTags": "Usar etiquetas ReplayGain", "LabelUseReplayGainTagsHelp": "Procura etiquetas replaygain nos ficheiros áudio e utiliza-as em vez de calcular o valor LUFS. (Utiliza menos poder de computação. Substitui a opção 'Verificação LUFS')", - "AllowSubtitleManagement": "Permitir a este utilizador editar legendas", - "DeleteName": "Eliminar {0}", + "AllowSubtitleManagement": "Permitir que este usuário edite legendas", + "DeleteName": "Excluir {0}", "Trickplay": "Trickplay", "AllowMjpegEncoding": "Permitir a codificação no formato MJPEG (usado durante a criação de trickplay)", - "PriorityIdle": "Inativo", - "LabelProcessPriority": "Prioridade do processo", + "PriorityIdle": "Ocioso", + "LabelProcessPriority": "Prioridade do Processo", "LabelTrickplayAccelHelp": "Certifica-te de que ativas a opção \"Permitir codificação MJPEG\" em Transcodificação, se o teu hardware o suportar.", - "PriorityAboveNormal": "Acima do normal", + "PriorityAboveNormal": "Acima do Normal", "PriorityNormal": "Normal", - "PriorityBelowNormal": "Abaixo do normal", - "LabelTrickplayAccel": "Ativar a descodificação por hardware", + "PriorityBelowNormal": "Abaixo do Normal", + "LabelTrickplayAccel": "Ativar decodificação por hardware", "PriorityHigh": "Alta", "LabelJpegQualityHelp": "A qualidade de compressão JPEG para imagens trickplay.", - "LabelImageInterval": "Intervalo de imagem", - "LabelQscale": "Fator de qualidade (Qscale)", + "LabelImageInterval": "Intervalo de Imagem", + "LabelQscale": "Qscale", "LabelImageIntervalHelp": "Intervalo de tempo (ms) entre cada nova imagem trickplay.", - "LabelScanBehaviorHelp": "O comportamento predefinido é não bloqueante, o que faz com que os ficheiros multimédia sejam adicionados à biblioteca antes da geração do trickplay estar concluída. O modo bloqueante assegura que os ficheiros trickplay são gerados antes dos ficheiros multimédia serem adicionados à biblioteca, mas tornará as análises significativamente mais demoradas.", - "LabelWidthResolutions": "Resoluções de largura", - "LabelTileWidth": "Largura do mosaico", - "LabelWidthResolutionsHelp": "Lista separada por vírgulas das larguras (px) em que serão geradas as imagens trickplay. Todas as imagens devem ser geradas proporcionalmente à fonte, por isso um vídeo 16:9 com uma largura de 320 acabará por ter cerca de 320x180.", - "LabelTrickplayThreadsHelp": "O número de threads a passar para o argumento '-threads' do ffmpeg.", - "LabelQscaleHelp": "A escala de qualidade das imagens produzidas pelo ffmpeg, sendo 2 a qualidade mais elevada e 31 a mais baixa.", - "OptionExtractTrickplayImage": "Ativar a extração de imagens trickplay", - "LabelProcessPriorityHelp": "Definir este valor mais baixo ou mais alto determinará como o CPU prioriza o processo de geração de trickplay do ffmpeg em relação a outros processos. Se notares lentidão enquanto geras imagens de trickplay mas não queres parar completamente a sua geração, tenta baixar este valor, bem como a contagem de threads.", - "LabelTileHeight": "Altura do mosaico", + "LabelScanBehaviorHelp": "O comportamento padrão é não bloqueante, o que adicionará mídia à biblioteca antes que a geração de trickplay seja concluída. O bloqueante garantirá que os arquivos trickplay sejam gerados antes que a mídia seja adicionada à biblioteca, mas tornará as verificações significativamente mais longas.", + "LabelWidthResolutions": "Resoluções de Largura", + "LabelTileWidth": "Largura do Tile", + "LabelWidthResolutionsHelp": "Lista separada por vírgulas das larguras (px) que as imagens trickplay serão geradas. Todas as imagens devem ser geradas proporcionalmente à fonte, então uma largura de 320 em um vídeo 16:9 termina em cerca de 320x180.", + "LabelTrickplayThreadsHelp": "O número de threads a serem passadas para o argumento '-threads' do ffmpeg.", + "LabelQscaleHelp": "A escala de qualidade das imagens geradas pelo ffmpeg, sendo 2 a mais alta qualidade e 31 a mais baixa.", + "OptionExtractTrickplayImage": "Ativar extração de imagem trickplay", + "LabelProcessPriorityHelp": "Definir isso mais baixo ou mais alto determinará como a CPU prioriza o processo de geração de trickplay do ffmpeg em relação a outros processos. Se você notar lentidão ao gerar imagens trickplay, mas não quiser interromper completamente a geração, tente diminuir isso e também a contagem de threads.", + "LabelTileHeight": "Altura do Tile", "LabelJpegQuality": "Qualidade JPEG", - "LabelTileHeightHelp": "Número máximo de imagens por mosaico na direção Y.", - "LabelTileWidthHelp": "Número máximo de imagens por mosaico na direção X.", - "ExtractTrickplayImagesHelp": "As imagens Trickplay são semelhantes às imagens dos capítulos, exceto pelo facto de abrangerem toda a extensão do conteúdo e serem utilizadas para mostrar uma pré-visualização ao percorrer os vídeos.", - "AllowContentWithTagsHelp": "Mostrar apenas os conteúdos multimédia com pelo menos uma das etiquetas especificadas.", - "BlockContentWithTagsHelp": "Ocultar os conteúdos multimédia com pelo menos uma das etiquetas especificadas.", - "ButtonEditUser": "Editar utilizador", - "EncodingFormatHelp": "Seleciona a codificação de vídeo para a qual o Jellyfin deve transcodificar. O Jellyfin usará a codificação de software quando a aceleração de hardware para o formato selecionado não estiver disponível. A codificação H264 será sempre ativada.", + "LabelTileHeightHelp": "Número máximo de imagens por tile na direção Y.", + "LabelTileWidthHelp": "Número máximo de imagens por tile na direção X.", + "ExtractTrickplayImagesHelp": "Imagens trickplay são semelhantes às imagens de capítulo, exceto que abrangem toda a extensão do conteúdo e são usadas para mostrar uma prévia ao passar rapidamente por vídeos.", + "AllowContentWithTagsHelp": "Exibir apenas mídias com pelo menos uma das tags especificadas.", + "BlockContentWithTagsHelp": "Ocultar mídias com pelo menos uma das tags especificadas.", + "ButtonEditUser": "Editar usuário", + "EncodingFormatHelp": "Selecione a codificação de vídeo que o Jellyfin deve transcodificar. O Jellyfin usará codificação por software quando a aceleração de hardware para o formato selecionado não estiver disponível. A codificação H264 será sempre ativada.", "LabelEncodingFormatOptions": "Opções de formato de codificação", "AirPlay": "AirPlay", - "LimitSupportedVideoResolutionHelp": "Utiliza 'Resolução máxima permitida para transcodificação de vídeo' como resolução máxima de vídeo suportada.", - "EnableLibraryHelp": "Se desativares a biblioteca, ela será ocultada de todas as visualizações do utilizador.", + "LimitSupportedVideoResolutionHelp": "Usar 'Resolução máxima permitida para transcodificação de vídeo' como resolução máxima de vídeo suportada.", + "EnableLibraryHelp": "Desativar a biblioteca a ocultará de todas as visualizações de usuários.", "EnableLibrary": "Ativar a biblioteca", - "LabelTrickplayAccelEncodingHelp": "Atualmente apenas disponível em QSV, VA-API, VideoToolbox e RKMPP, esta opção não tem efeito noutros métodos de aceleração de hardware.", - "LabelTrickplayAccelEncoding": "Ativar a codificação MJPEG acelerada por hardware", - "ConfirmDeleteLyrics": "A eliminação destas letras irá eliminá-las do sistema de ficheiros e da tua biblioteca multimédia. Tens a certeza de que queres continuar?", + "LabelTrickplayAccelEncodingHelp": "Atualmente disponível apenas no QSV, VA-API, VideoToolbox e RKMPP, esta opção não tem efeito em outros métodos de aceleração de hardware.", + "LabelTrickplayAccelEncoding": "Ativar codificação MJPEG acelerada por hardware", + "ConfirmDeleteLyrics": "Excluir estas letras irá removê-las do sistema de arquivos e da sua biblioteca de mídia. Tem certeza de que deseja continuar?", "ChannelResolutionFullHD": "Full HD", "ChannelResolutionUHD4K": "UHD (4K)", "ChannelResolutionSDPAL": "SD (PAL)", - "ConfirmDeleteSeries": "A eliminação desta série elimina TODOS os {0} episódios do sistema de ficheiros e da tua biblioteca multimédia. Tens a certeza de que queres continuar?", - "LabelScanBehavior": "Comportamento de análise", - "LabelTrickplayThreads": "Threads FFmpeg", + "ConfirmDeleteSeries": "Excluir esta série irá remover TODOS os {0} episódios do sistema de arquivos e da sua biblioteca de mídia. Tem certeza de que deseja continuar?", + "LabelScanBehavior": "Comportamento da Verificação", + "LabelTrickplayThreads": "Threads do FFmpeg", "Lyric": "Letra", - "PlaybackError.FATAL_HLS_ERROR": "Foi encontrado um erro fatal na transmissão HLS.", - "PlaybackError.MEDIA_DECODE_ERROR": "A reprodução falhou devido a um erro ao descodificar o conteúdo.", - "PlaybackError.MEDIA_NOT_SUPPORTED": "A reprodução falhou porque o conteúdo não é suportado por este cliente.", + "PlaybackError.FATAL_HLS_ERROR": "Um erro fatal foi encontrado no stream HLS.", + "PlaybackError.MEDIA_DECODE_ERROR": "A reprodução falhou devido a um erro na decodificação da mídia.", + "PlaybackError.MEDIA_NOT_SUPPORTED": "A reprodução falhou porque a mídia não é suportada por este cliente.", "PlaybackError.NETWORK_ERROR": "A reprodução falhou devido a um erro de rede.", - "PlaybackError.NO_MEDIA_ERROR": "Não foi possível encontrar uma fonte multimédia válida para reproduzir.", - "PlaybackError.PLAYER_ERROR": "A reprodução falhou devido a um erro fatal do leitor.", - "PlaybackError.RateLimitExceeded": "Este conteúdo não pode ser reproduzido neste momento devido aos limites de velocidade.", - "DeleteSeries": "Eliminar séries", - "PlaybackError.NotAllowed": "A reprodução deste conteúdo não é permitida.", - "EnableSmoothScroll": "Ativar deslocação suave", + "PlaybackError.NO_MEDIA_ERROR": "Não foi possível encontrar uma fonte de mídia válida para reproduzir.", + "PlaybackError.PLAYER_ERROR": "A reprodução falhou devido a um erro fatal no player.", + "PlaybackError.RateLimitExceeded": "Esta mídia não pode ser reproduzida no momento devido a limites de taxa.", + "DeleteSeries": "Excluir série", + "PlaybackError.NotAllowed": "A reprodução desta mídia não é permitida.", + "EnableSmoothScroll": "Ativar rolagem suave", "LimitSupportedVideoResolution": "Limitar a resolução máxima de vídeo suportada", - "PlaybackError.SERVER_ERROR": "A reprodução falhou devido a um erro do servidor.", - "DlnaMovedMessage": "A funcionalidade DLNA foi transferida para uma extensão.", - "DeleteEntireSeries": "Eliminar {0} episódios", - "DeleteEpisode": "Eliminar episódio", - "HeaderDeleteSeries": "Eliminar séries", - "LabelAllowContentWithTags": "Permitir items com etiquetas", + "PlaybackError.SERVER_ERROR": "A reprodução falhou devido a um erro no servidor.", + "DlnaMovedMessage": "A funcionalidade DLNA foi movida para um plugin.", + "DeleteEntireSeries": "Excluir {0} episódios", + "DeleteEpisode": "Excluir episódio", + "HeaderDeleteSeries": "Excluir Série", + "LabelAllowContentWithTags": "Permitir itens com tags", "Lyrics": "Letras", "ViewLyrics": "Ver letras", - "DeleteLyrics": "Eliminar letras", - "ErrorDeletingLyrics": "Ocorreu um erro ao eliminar as letras do servidor. Verifica se o Jellyfin tem acesso de escrita à pasta multimédia e tenta novamente.", - "HeaderDeleteLyrics": "Eliminar letras", + "DeleteLyrics": "Excluir letras", + "ErrorDeletingLyrics": "Ocorreu um erro ao excluir as letras do servidor. Verifique se o Jellyfin tem acesso de gravação à pasta de mídia e tente novamente.", + "HeaderDeleteLyrics": "Excluir Letras", "HeaderNoLyrics": "Nenhuma letra encontrada", - "BlockingScan": "Bloqueante - coloca a geração em fila de espera, bloqueia a análise até ser concluída", - "NonBlockingScan": "Não bloqueante - coloca a geração em fila de espera e depois regressa", - "LabelExtractTrickplayDuringLibraryScan": "Extrair imagens trickplay durante a análise da biblioteca", - "LabelExtractTrickplayDuringLibraryScanHelp": "Gerar imagens trickplay quando os vídeos são importados durante a análise da biblioteca. Caso contrário, as imagens serão extraídas durante a tarefa agendada de imagens trickplay. Se a geração estiver definida como não bloqueante, isto não afetará o tempo que a análise da biblioteca demora a concluir.", - "PlaybackError.ASS_RENDER_ERROR": "Foi encontrado um erro no renderizador de legendas ASS/SSA.", - "SavePassword": "Guardar palavra-passe", + "BlockingScan": "Bloqueante - gera fila, bloqueia verificação até completar", + "NonBlockingScan": "Não Bloqueante - gera fila, depois retorna", + "LabelExtractTrickplayDuringLibraryScan": "Extrair imagens trickplay durante a verificação da biblioteca", + "LabelExtractTrickplayDuringLibraryScanHelp": "Gerar imagens trickplay ao importar vídeos durante a verificação da biblioteca. Caso contrário, elas serão extraídas durante a tarefa agendada de imagens trickplay. Se a geração estiver definida como não bloqueante, isso não afetará o tempo que uma verificação da biblioteca leva para ser concluída.", + "PlaybackError.ASS_RENDER_ERROR": "Um erro foi encontrado no renderizador de legendas ASS/SSA.", + "SavePassword": "Salvar Senha", "Author": "Autor", "Colorist": "Colorista", "CoverArtist": "Artista da capa", @@ -1869,191 +1869,191 @@ "Editor": "Editor", "Illustrator": "Ilustrador", "EnableDts": "Ativar DTS (DCA)", - "EnableDtsHelp": "Ativar apenas se o dispositivo suportar DTS ou estiver ligado a um recetor de áudio compatível; caso contrário, pode provocar falhas de reprodução.", + "EnableDtsHelp": "Ative apenas se o seu dispositivo suportar DTS ou estiver conectado a um receptor de áudio compatível, caso contrário, pode causar falha na reprodução.", "EnableTrueHd": "Ativar TrueHD", - "EnableTrueHdHelp": "Ativar apenas se o dispositivo suportar TrueHD ou estiver ligado a um recetor de áudio compatível; caso contrário, pode provocar falhas de reprodução.", - "HeaderVideoAdvanced": "Definições avançadas de vídeo", - "HeaderLyricDownloads": "Descarregar letras", - "Letterer": "Letrista", + "EnableTrueHdHelp": "Ative apenas se o seu dispositivo suportar TrueHD ou estiver conectado a um receptor de áudio compatível, caso contrário, pode causar falha na reprodução.", + "HeaderVideoAdvanced": "Vídeo Avançado", + "HeaderLyricDownloads": "Downloads de Letras", + "Letterer": "Letterer", "LabelSelectPreferredTranscodeVideoAudioCodec": "Codec de áudio de transcodificação preferido na reprodução de vídeo", - "SelectPreferredTranscodeVideoAudioCodecHelp": "Seleciona o codec de áudio preferido para transcodificar o conteúdo de vídeo. Se o codec preferido não for suportado, o servidor utilizará o próximo melhor codec disponível.", - "LibraryScanFanoutConcurrencyHelp": "Número máximo de tarefas paralelas durante as análises da biblioteca. Se deixares este campo vazio, será escolhido um limite com base no número de núcleos do teu sistema. AVISO: Definir um valor demasiado elevado pode causar problemas com sistemas de ficheiros em rede; se encontrares problemas, reduz este número.", - "LibraryScanFanoutConcurrency": "Limite de tarefas paralelas de análise da biblioteca", - "PlaylistPublicDescription": "Permitir que esta playlist seja vista por qualquer utilizador com sessão iniciada.", + "SelectPreferredTranscodeVideoAudioCodecHelp": "Selecione o codec de áudio preferido para transcodificar para conteúdo de vídeo. Se o codec preferido não for suportado, o servidor usará o próximo codec disponível.", + "LibraryScanFanoutConcurrencyHelp": "Número máximo de tarefas em paralelo durante as verificações da biblioteca. Deixar isso vazio escolherá um limite com base na contagem de núcleos do seu sistema. AVISO: Definir esse número muito alto pode causar problemas com sistemas de arquivos de rede; se você encontrar problemas, diminua esse número.", + "LibraryScanFanoutConcurrency": "Limite de tarefas de verificação de biblioteca em paralelo", + "PlaylistPublicDescription": "Permitir que esta playlist seja vista por qualquer usuário logado.", "PlaylistPublic": "Permitir acesso público", - "SaveLyricsIntoMediaFoldersHelp": "Guardar letras junto a ficheiros de áudio permiti-las-á ser mais facilmente geridas.", + "SaveLyricsIntoMediaFoldersHelp": "Armazenar letras ao lado de arquivos de áudio permitirá que sejam gerenciadas mais facilmente.", "PlaylistError.AddFailed": "Erro ao adicionar à playlist", - "PlaylistError.CreateFailed": "Erro ao criar a playlist", + "PlaylistError.CreateFailed": "Erro ao criar playlist", "Translator": "Tradutor", - "Inker": "Tinteiro", - "Alternate": "Alternar", - "AlternateDVD": "DVD alternativo", - "Penciller": "Lapiseira", + "Inker": "Inker", + "Alternate": "Alternativo", + "AlternateDVD": "DVD Alternativo", + "Penciller": "Penciler", "Regional": "Regional", - "SaveLyricsIntoMediaFolders": "Guardar letras em pastas multimédia", - "LabelSelectPreferredTranscodeVideoCodec": "Codec de vídeo transcodificado preferido", - "SelectPreferredTranscodeVideoCodecHelp": "Seleciona o codec de vídeo preferido para transcodificar. Se o codec preferido não for suportado, o servidor utilizará o próximo melhor codec disponível.", + "SaveLyricsIntoMediaFolders": "Salvar letras nas pastas de mídia", + "LabelSelectPreferredTranscodeVideoCodec": "Codec de vídeo de transcodificação preferido", + "SelectPreferredTranscodeVideoCodecHelp": "Selecione o codec de vídeo preferido para transcodificar. Se o codec preferido não for suportado, o servidor usará o próximo codec disponível.", "HeaderNextItem": "Seguinte {0}", - "EditLyrics": "Editar letra", - "HeaderAddLyrics": "Adicionar letra", - "HeaderPreviewLyrics": "Pré-visualizar letra", - "LabelScreensaverTimeHelp": "A quantidade de tempo, em segundos, de inatividade necessária para iniciar a proteção de ecrã.", + "EditLyrics": "Editar letras", + "HeaderAddLyrics": "Adicionar Letras", + "HeaderPreviewLyrics": "Visualizar Letras", + "LabelScreensaverTimeHelp": "A quantidade de tempo em segundos de inatividade necessária para iniciar o protetor de tela.", "LabelDuration": "Duração", - "LabelDisableVbrAudioEncoding": "Desativar a codificação de áudio VBR", - "LabelEnablePlugin": "Ativar extensão", - "LabelDelimiterWhitelistHelp": "Itens a ser excluídos da separação de etiquetas. Um item por linha.", - "LabelDropLyricsHere": "Arrasta e larga a letra aqui, ou clica para explorar.", - "MediaSegmentSkipPrompt": "Saltar {0}", - "MediaSegmentAction.Skip": "Saltar", - "MediaSegmentAction.AskToSkip": "Pedir para saltar", - "MediaSegmentType.Commercial": "Publicidade", - "SearchForLyrics": "Procurar letras", + "LabelDisableVbrAudioEncoding": "Desativar codificação de áudio VBR", + "LabelEnablePlugin": "Ativar plugin", + "LabelDelimiterWhitelistHelp": "Itens a serem excluídos da divisão de tags. Um item por linha.", + "LabelDropLyricsHere": "Solte as letras aqui, ou clique para navegar.", + "MediaSegmentSkipPrompt": "Pular {0}", + "MediaSegmentAction.Skip": "Pular", + "MediaSegmentAction.AskToSkip": "Perguntar antes de pular", + "MediaSegmentType.Commercial": "Comercial", + "SearchForLyrics": "Pesquisar letras", "NoLyricsSearchResultsFound": "Nenhuma letra encontrada.", "MediaSegmentType.Intro": "Introdução", - "EnableHi10pHelp": "Ativa para evitar a transcodificação de vídeos H.264 de 10 bits. Desativa esta opção se o vídeo apresentar quadros em branco.", - "LyricDownloadersHelp": "Ativa e classifica os teus fornecedores de letras preferidos por ordem de prioridade.", - "AlwaysRemuxMp3AudioFilesHelp": "Se tiveres ficheiros que o teu navegador calcula de forma imprecisa os registos de data/hora, ativa esta opção como solução alternativa.", - "AlwaysRemuxFlacAudioFilesHelp": "Se tiveres ficheiros que o teu navegador recusar reproduzir ou em que calcula incorretamente os registos de data/hora, ativa esta opção como solução alternativa.", + "EnableHi10pHelp": "Ative para evitar a transcodificação de vídeos H.264 de 10 bits. Desative esta opção se o vídeo apresentar quadros em branco.", + "LyricDownloadersHelp": "Ative e classifique seus baixadores de letras preferidos por ordem de prioridade.", + "AlwaysRemuxMp3AudioFilesHelp": "Se arquivos MP3 apresentarem problemas de tempo no navegador, ative esta opção como solução temporária.", + "AlwaysRemuxFlacAudioFilesHelp": "Se arquivos FLAC não tocarem no navegador ou apresentarem problemas de tempo, ative esta opção como solução temporária.", "HeaderNextItemPlayingInValue": "{0} seguinte em {1}", - "HeaderNewPlaylist": "Nova playlist", - "UseCustomTagDelimiters": "Utilizar delimitador de etiquetas personalizado", - "UseCustomTagDelimitersHelp": "Divide etiquetas de artistas/género com carateres personalizados.", - "LabelTrickplayKeyFrameOnlyExtraction": "Gerar imagens apenas de fotogramas-chave", - "VideoCodecTagNotSupported": "A etiqueta do codec de vídeo não é suportada", + "HeaderNewPlaylist": "Nova Playlist", + "UseCustomTagDelimiters": "Usar delimitador de tag personalizado", + "UseCustomTagDelimitersHelp": "Dividir tags de artista/gênero com caracteres personalizados.", + "LabelTrickplayKeyFrameOnlyExtraction": "Gerar imagens apenas a partir de quadros-chave", + "VideoCodecTagNotSupported": "O tag do codec de vídeo não é suportado", "AndOtherArtists": "{0} e {1} outros artistas.", - "MoviesAndShows": "Filmes e séries", - "Anime": "Animé", - "AlwaysBurnInSubtitleWhenTranscodingHelp": "Incorpora todas as legendas quando a transcodificação é acionada. Isto assegura que as legendas são sincronizadas após a transcodificação, à custa de uma velocidade de transcodificação reduzida.", - "AllowTonemappingSoftwareHelp": "O mapeamento de tons pode transformar a gama dinâmica de um vídeo de HDR para SDR, mantendo os detalhes e cores da imagens, que são informações muito importantes para representar a cena original. De momento, funciona apenas com vídeos HDR10 de 10 bits, HLG e DoVi.", - "AlwaysBurnInSubtitleWhenTranscoding": "Incorporar sempre legendas durante a transcodificação", - "DateModified": "Data de modificação", - "AllowFmp4TranscodingContainerHelp": "Permite que o container de transcodificação fMP4 para este sintonizador permita conteúdos HEVC e HDR. Nem todos os sintonizadores são compatíveis com este container. Desativa-o se tiveres problemas de reprodução.", - "AllowStreamSharingHelp": "Permite que o Jellyfin duplique a transmissão mpegts do sintonizador e partilhe esta transmissão duplicada aos seus clientes. Isto é útil quando o sintonizador tem um limite de contagens de transmissões totais mas pode também causar problemas de reprodução.", - "EnableHi10p": "Ativar o perfil H.264 High 10", - "DisableVbrAudioEncodingHelp": "Impedir que o servidor codifique o áudio com VBR para este cliente.", - "LabelAllowFmp4TranscodingContainer": "Permitir o container de transcodificação fMP4", - "HeaderAudioAdvanced": "Definições avançadas de áudio", - "HeaderNextEpisode": "Próximo episódio", - "HeaderNextVideo": "Próximo vídeo", - "HeaderEditPlaylist": "Editar playlist", - "HeaderUploadLyrics": "Fazer upload da letra", - "LabelAlwaysRemuxFlacAudioFiles": "Fazer sempre remux de ficheiros de áudio FLAC", - "HeaderMediaSegmentActions": "Ações de segmentos de multimédia", - "FallbackMaxStreamingBitrateHelp": "A taxa de bits máxima de transmissão é usada como um recurso quando o ffprobe não consegue determinar a taxa de bits da transmissão de origem. Isso ajuda a evitar que os clientes solicitem uma taxa de bits de transcodificação excessivamente alta, o que poderia fazer com que o leitor falhasse e sobrecarregasse o codificador.", - "LabelAudioTagSettings": "Definições de etiquetas de áudio", - "LabelSaveTrickplayLocally": "Guardar miniaturas de pré-visualização (trickplay) junto aos ficheiros de multimédia", - "LabelSaveTrickplayLocallyHelp": "As miniaturas de pré-visualização (trickplay) serão guardadas junto aos ficheiros de multimédia, o que facilita a migração e o acesso.", - "LabelAllowStreamSharing": "Permitir partilha de transmissão", - "LabelLyricDownloaders": "Fornecedores de letras", - "LabelNoChangelog": "Nenhum registo de alterações foi disponibilizado para esta versão.", + "MoviesAndShows": "Filmes e Programas", + "Anime": "Anime", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Embutir todas as legendas ao transcodificar. Garante sincronização das legendas, mas pode reduzir a velocidade da transcodificação.", + "AllowTonemappingSoftwareHelp": "O tone-mapping transforma o alcance dinâmico de um vídeo de HDR para SDR mantendo detalhes e cores. Funciona apenas com vídeos HDR10, HLG e DoVi de 10 bits.", + "AlwaysBurnInSubtitleWhenTranscoding": "Sempre embutir legendas ao transcodificar", + "DateModified": "Data modificada", + "AllowFmp4TranscodingContainerHelp": "Permite o uso do contêiner fMP4 para este sintonizador, habilitando conteúdos HEVC e HDR. Nem todos os sintonizadores são compatíveis. Desative se tiver problemas de reprodução.", + "AllowStreamSharingHelp": "Permite que o Jellyfin duplique o fluxo mpegts do sintonizador e compartilhe com os clientes. Útil quando há limite de streams no sintonizador, mas pode causar problemas de reprodução.", + "EnableHi10p": "Ativar H.264 High 10 Profile", + "DisableVbrAudioEncodingHelp": "Impedir que o servidor codifique áudio com VBR para este cliente.", + "LabelAllowFmp4TranscodingContainer": "Permitir contêiner de transcodificação fMP4", + "HeaderAudioAdvanced": "Áudio Avançado", + "HeaderNextEpisode": "Próximo Episódio", + "HeaderNextVideo": "Próximo Vídeo", + "HeaderEditPlaylist": "Editar Playlist", + "HeaderUploadLyrics": "Enviar Letras", + "LabelAlwaysRemuxFlacAudioFiles": "Sempre remuxar arquivos de áudio FLAC", + "HeaderMediaSegmentActions": "Ações de Segmento de Mídia", + "FallbackMaxStreamingBitrateHelp": "A taxa máxima de streaming é usada como um fallback quando o ffprobe não consegue determinar a taxa de bits do stream de origem. Isso ajuda a evitar que os clientes solicitem uma taxa de transcodificação excessivamente alta, o que pode fazer o player falhar e sobrecarregar o codificador.", + "LabelAudioTagSettings": "Configurações de Tag de Áudio", + "LabelSaveTrickplayLocally": "Salvar imagens trickplay ao lado da mídia", + "LabelSaveTrickplayLocallyHelp": "Salvar imagens trickplay nas pastas de mídia as colocará ao lado da sua mídia para fácil migração e acesso.", + "LabelAllowStreamSharing": "Permitir compartilhamento de stream", + "LabelLyricDownloaders": "Baixadores de letras", + "LabelNoChangelog": "Nenhum registro de alterações fornecido para este lançamento.", "LabelNotInstalled": "Não instalado", - "LabelCustomTagDelimiters": "Delimitador de Etiqueta personalizado", - "LabelCustomTagDelimitersHelp": "Carateres considerados como delimitadores para separar etiquetas.", - "LabelDelimiterWhitelist": "Lista de delimitadores permitidos", - "LabelFallbackMaxStreamingBitrate": "Taxa de bits máxima por omissão (Mbps)", - "LabelIsSynced": "Está sincronizado", - "LabelAlwaysRemuxMp3AudioFiles": "Remuxar sempre ficheiros de áudio MP3", + "LabelCustomTagDelimiters": "Delimitador de Tag Personalizado", + "LabelCustomTagDelimitersHelp": "Caracteres a serem tratados como delimitadores para separar tags.", + "LabelDelimiterWhitelist": "Lista branca de delimitadores", + "LabelFallbackMaxStreamingBitrate": "Taxa máxima de stream de fallback (Mbps)", + "LabelIsSynced": "Está Sincronizado", + "LabelAlwaysRemuxMp3AudioFiles": "Sempre remuxar arquivos de áudio MP3", "LabelInstalled": "Instalado", - "LabelMediaSegmentsType": "{0} segmentos", + "LabelMediaSegmentsType": "{0} Segmentos", "LabelRepository": "Repositório", "LabelQsvDevice": "Dispositivo QSV", - "LabelQsvDeviceHelp": "Especifica o dispositivo para Intel QSV num sistema multi-GPU. Em Linux, este é o nó de renderização, por exemplo, /dev/dri/renderD128. Em Windows, este é o índice do dispositivo, começando do 0. Deixa em branco a não ser que saibas o que está a fazer.", - "MessageCancelSeriesTimerError": "Ocorreu um erro ao cancelar o temporizador da série", + "LabelQsvDeviceHelp": "Especifique o dispositivo para Intel QSV em um sistema com múltiplas GPUs. No Linux, este é o nó de renderização, por exemplo, /dev/dri/renderD128. No Windows, este é o índice do dispositivo começando de 0. Deixe em branco, a menos que você saiba o que está fazendo.", + "MessageCancelSeriesTimerError": "Ocorreu um erro ao cancelar o timer da série", "MediaSegmentAction.None": "Nenhum", - "PluginDisableError": "Ocorreu um erro ao desativar a extensão.", - "PluginUninstallError": "Ocorreu um erro ao desinstalar a extensão.", - "LibraryInvalidItemIdError": "A biblioteca está num estado inválido e não pode ser editada. É possível que esteja a encontrar um erro: o caminho na base de dados não é o caminho correto no sistema de ficheiros.", - "PreferNonstandardArtistsTag": "Preferir a etiqueta ARTISTS se disponível", - "LabelScreensaverTime": "Tempo de proteção de ecrã", - "MessageSplitVersionsError": "Ocorreu um erro ao separar as versões", - "PluginEnableError": "Ocorreu um erro ao ativar a extensão.", + "PluginDisableError": "Ocorreu um erro ao desativar o plugin.", + "PluginUninstallError": "Ocorreu um erro ao desinstalar o plugin.", + "LibraryInvalidItemIdError": "A biblioteca está em um estado inválido e não pode ser editada. Você pode estar enfrentando um bug: o caminho no banco de dados não é o caminho correto no sistema de arquivos.", + "PreferNonstandardArtistsTag": "Preferir tag ARTISTS se disponível", + "LabelScreensaverTime": "Tempo do protetor de tela", + "MessageSplitVersionsError": "Ocorreu um erro ao dividir versões", + "PluginEnableError": "Ocorreu um erro ao ativar o plugin.", "MediaInfoRotation": "Rotação", "MediaSegmentType.Recap": "Recapitulação", - "MediaSegmentType.Preview": "Pré-visualização", - "MediaSegmentType.Outro": "Créditos", - "MoveToBottom": "Mover para o fundo", - "MoveToTop": "Mover para o início", - "PasswordMissingSaveError": "A nova palavra-passe não pode estar vazia.", - "PluginLoadConfigError": "Ocorreu um erro ao obter as páginas de configuração da extensão.", - "PluginLoadRepoError": "Ocorreu um erro ao obter os detalhes da extensão a partir do repositório.", - "PlaylistError.UpdateFailed": "Erro ao atualizar a playlist", - "MessageCancelTimerError": "Ocorreu um erro ao cancelar o temporizador", - "ReplaceTrickplayImages": "Substituir imagens de trickplay existentes", - "Reset": "Repor", - "PreferNonstandardArtistsTagHelp": "Utiliza a etiqueta não normalizada ARTISTS em vez da etiqueta ARTIST quando disponível.", + "MediaSegmentType.Preview": "Prévia", + "MediaSegmentType.Outro": "Conclusão", + "MoveToBottom": "Mover para baixo", + "MoveToTop": "Mover para cima", + "PasswordMissingSaveError": "A nova senha não pode estar vazia.", + "PluginLoadConfigError": "Ocorreu um erro ao obter as páginas de configuração do plugin.", + "PluginLoadRepoError": "Ocorreu um erro ao obter os detalhes do plugin do repositório.", + "PlaylistError.UpdateFailed": "Erro ao atualizar playlist", + "MessageCancelTimerError": "Ocorreu um erro ao cancelar o timer", + "ReplaceTrickplayImages": "Substituir imagens trickplay existentes", + "Reset": "Redefinir", + "PreferNonstandardArtistsTagHelp": "Usar a tag ARTISTS não padrão em vez da tag ARTIST quando disponível.", "RenderPgsSubtitle": "Renderização experimental de legendas PGS", - "PreviewLyrics": "Pré-visualizar letra", - "RenderPgsSubtitleHelp": "Determina se o cliente deve renderizar legendas PGS em vez de utilizar legendas embebidas. Isto pode evitar a transcodificação do lado do servidor em troca de desempenho de renderização do lado do cliente.", - "LabelMediaSegmentProviders": "Fornecedores de segmentos de multimédia", - "MediaSegmentProvidersHelp": "Ativa e classifica os teus fornecedores de segmentos de multimédia preferidos por ordem de prioridade.", - "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extrai somente os fotogramas-chave para um processamento significativamente mais rápido com temporização menos precisa. Se o descodificador de hardware configurado não suportar esse modo, será utilizado o descodificador de software.", - "AutoSubtitleStylingHelp": "Este modo alterna automaticamente entre os mecanismos de estilo de legendas nativo e personalizado com base no teu tipo de dispositivo.", + "PreviewLyrics": "Visualizar Letras", + "RenderPgsSubtitleHelp": "Determina se o cliente deve renderizar legendas PGS em vez de usar legendas embutidas. Isso pode evitar a transcodificação do lado do servidor em troca de desempenho de renderização do lado do cliente.", + "LabelMediaSegmentProviders": "Provedores de segmento de mídia", + "MediaSegmentProvidersHelp": "Ative e classifique seus provedores de segmento de mídia preferidos por ordem de prioridade.", + "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extrair apenas quadros-chave para processamento significativamente mais rápido com menor precisão de tempo. Se o decodificador de hardware configurado não suportar este modo, será usado o decodificador de software.", + "AutoSubtitleStylingHelp": "Este modo alterna automaticamente entre os estilos nativos e personalizados de legendas, conforme o tipo do seu dispositivo.", "Custom": "Personalizado", - "CustomSubtitleStylingHelp": "O estilo de legendas funciona na maioria dos dispositivos, mas tem uma sobrecarga de desempenho adicional.", - "LabelSubtitleStyling": "Estilo de legendas", + "CustomSubtitleStylingHelp": "O estilo de legenda funcionará na maioria dos dispositivos, mas vem com uma sobrecarga de desempenho adicional.", + "LabelSubtitleStyling": "Estilo da legenda", "Native": "Nativo", - "NativeSubtitleStylingHelp": "O estilo de legenda não funcionará em alguns dispositivos. No entanto, não tem qualquer sobrecarga de desempenho.", + "NativeSubtitleStylingHelp": "O estilo de legenda não funcionará em alguns dispositivos. No entanto, não vem com nenhuma sobrecarga de desempenho.", "LabelDevice": "Dispositivo", "LastActive": "Última atividade", - "DeleteServerConfirmation": "Tens a certeza de que queres eliminar este servidor?", + "DeleteServerConfirmation": "Tem certeza de que deseja excluir este servidor?", "LibraryNameInvalid": "O nome da biblioteca não pode estar vazio.", - "MetadataNfoLoadError": "Falha ao carregar as definições de metadados NFO", - "SettingsPageLoadError": "Falha ao carregar a página de definições", + "MetadataNfoLoadError": "Falha ao carregar as configurações de metadados NFO", + "SettingsPageLoadError": "Falha ao carregar a página de configurações", "RetryWithGlobalSearch": "Tentar novamente com uma pesquisa global", - "StreamCountExceedsLimit": "O número de transmissões excede o limite", - "ReadInputAtNativeFramerateHelp": "Ativar esta opção pode resolver alguns problemas, por exemplo, transmissões ao vivo que param prematuramente.", - "ReadInputAtNativeFramerate": "Reproduzir a entrada à velocidade de fotogramas nativa", - "LogLoadFailure": "Falha ao carregar o ficheiro de registo de alterações. É possível que atualmente esteja a ser escrito.", - "CustomSplashScreenSize": "As imagens personalizadas devem ter uma proporção de 16x9 e um tamanho mínimo de 1920x1080.", - "DeleteCustomImage": "Eliminar imagem personalizada", - "ImageUploadCancelled": "Carregamento de imagens cancelado", - "ImageUploadFailed": "Falha no carregamento da imagem", - "ImageDeleteFailed": "Falha na eliminação da imagem", - "PageNotFound": "Esta não é a página que procuras.", - "UploadCustomImage": "Carregar imagem personalizada", + "StreamCountExceedsLimit": "O número de streams excede o limite", + "ReadInputAtNativeFramerateHelp": "Ativar esta opção pode resolver alguns problemas, por exemplo, streams ao vivo parando prematuramente.", + "ReadInputAtNativeFramerate": "Ler entrada na taxa de quadros nativa", + "LogLoadFailure": "Falha ao carregar o arquivo de log. Ele pode ainda estar sendo escrito ativamente.", + "CustomSplashScreenSize": "Imagens personalizadas devem ter uma proporção de 16x9 com tamanho mínimo de 1920x1080.", + "DeleteCustomImage": "Excluir imagem personalizada", + "ImageUploadCancelled": "Envio de imagem cancelado", + "ImageUploadFailed": "Falha ao enviar imagem", + "ImageDeleteFailed": "Falha ao excluir imagem", + "PageNotFound": "Esta não é a página que você está procurando.", + "UploadCustomImage": "Enviar Imagem Personalizada", "HeaderPageNotFound": "Página não encontrada", - "LabelGroupShowsIntoCollections": "Agrupar séries em coleções", - "LabelGroupShowsIntoCollectionsHelp": "As séries de uma coleção serão apresentadas como um item agrupado quando forem apresentadas listas de séries.", - "DisplayLoadError": "Ocorreu um erro ao carregar os dados de configuração do ecrã.", - "MetadataImagesLoadError": "Falha ao carregar definições de metadados", - "CopyLogSuccess": "Conteúdo do registo copiado com sucesso.", - "LimitSegmentLength": "Utilizar segmentos HLS mais curtos", - "LimitSegmentLengthHelp": "Ativar esta opção pode ajudar a evitar que o leitor HLS bloqueie durante a pesquisa em determinados dispositivos, como as TVs webOS.", + "LabelGroupShowsIntoCollections": "Agrupar programas em coleções", + "LabelGroupShowsIntoCollectionsHelp": "Programas em uma coleção serão exibidos como um único item agrupado ao exibir listas de programas.", + "DisplayLoadError": "Ocorreu um erro ao carregar os dados de configuração de exibição.", + "MetadataImagesLoadError": "Falha ao carregar as configurações de metadados", + "CopyLogSuccess": "Conteúdo do log copiado com sucesso.", + "LimitSegmentLength": "Usar segmentos HLS mais curtos", + "LimitSegmentLengthHelp": "Ativar esta opção pode ajudar a evitar que o player HLS trave durante a busca em certos dispositivos, como TVs webOS.", "Retry": "Tentar novamente", - "HeaderServerUnavailable": "Servidor indisponível", - "HeaderUpdateRequired": "Atualização necessária", - "ViewSettings": "Ver definições", - "MessageForgotPasswordPinReset": "Introduz o PIN para concluir a redefinição da palavra-passe", - "DownloadManager": "Transferências", + "HeaderServerUnavailable": "Servidor Indisponível", + "HeaderUpdateRequired": "Atualização Necessária", + "ViewSettings": "Ver configurações", + "MessageForgotPasswordPinReset": "Insira o PIN aqui para finalizar a redefinição da senha", + "DownloadManager": "Downloads", "LiveTVPageLoadError": "Falha ao carregar a página de gravações", - "ButtonLearnMore": "Saber mais", - "ButtonCreateBackup": "Criar cópia de segurança", - "BackupsPageLoadError": "Falha ao carregar página de cópias de segurança", - "ConfirmDeleteRepository": "Apagar repositório?", - "LabelRestore": "Restauro", - "MessageBackupDisclaimer": "Dependendo do tamanho da mediateca, o processo de cópia de segurança poderá ser demorado.", - "HeaderBackups": "Cópias de segurança", - "TranscodingLoadError": "Falha ao carregar configurações de transcodificação", + "ButtonLearnMore": "Saiba mais", + "ButtonCreateBackup": "Criar backup", + "BackupsPageLoadError": "Falha ao carregar a página de backups", + "ConfirmDeleteRepository": "Excluir repositório?", + "LabelRestore": "Restaurar", + "MessageBackupDisclaimer": "Dependendo do tamanho da sua biblioteca, o processo de backup pode demorar um pouco.", + "HeaderBackups": "Backups", + "TranscodingLoadError": "Falha ao carregar as configurações de transcodificação", "StorageType.Unknown": "Desconhecido", "Success": "Sucesso", - "MessageBackupInProgress": "Cópia de segurança em progresso", + "MessageBackupInProgress": "Backup em andamento", "Create": "Criar", - "DeleteRepositoryConfirmation": "Tem a certeza que pretende apagar este repositório?", - "HeaderBackupsHelp": "Criar e restaurar cópias do servidor, incluindo metadados, legendas e miniaturas de pré-visualização.", - "LabelBackupsUnavailable": "Sem cópias de segurança disponíveis", - "LabelDatabase": "Base de dados", - "LabelImageCache": "Memória cache de imagens", - "LabelProgramData": "Dados da aplicação", - "MessageRestoreDisclaimer": "AVISO: Você está prestes a restaurar a partir de um backup anterior. Seu servidor ficará inutilizável durante o processo e todos os novos dados criados desde o backup serão perdidos.", + "DeleteRepositoryConfirmation": "Tem certeza de que deseja excluir este repositório?", + "HeaderBackupsHelp": "Criar e restaurar instantâneas do seu servidor que podem incluir o banco de dados, metadados, legendas e trickplay.", + "LabelBackupsUnavailable": "Nenhum backup disponível", + "LabelDatabase": "Banco de dados", + "LabelImageCache": "Cache de Imagem", + "LabelProgramData": "Dados do Programa", + "MessageRestoreDisclaimer": "ATENÇÃO: Você está prestes a restaurar a partir de um backup anterior. Seu servidor ficará indisponível durante o processo e qualquer dado novo criado desde o backup será perdido.", "RepositoriesPageLoadError": "Falha ao carregar repositórios", - "PluginsLoadError": "Ocorreu um erro ao carregar os plugins.", + "PluginsLoadError": "Ocorreu um erro ao carregar plugins.", "MessageRestoreInProgress": "Restauração em andamento", "MessageRestoreSuccess": "Restauração concluída com sucesso", "StorageType.CDRom": "CD-ROM", - "StorageType.NoRootDirectory": "Nenhum diretório raiz", + "StorageType.NoRootDirectory": "Sem Diretório Raiz", "StorageType.Ram": "RAM", "StorageType.Removable": "Removível", - "StorageType.Fixed": "Consertado", - "StorageType.Network": "Network", - "MessageWaitingForServer": "Aguardando servidor..." + "StorageType.Fixed": "Fixo", + "StorageType.Network": "Rede", + "MessageWaitingForServer": "Aguardando o servidor..." } From 93ec7af3f7c87f6301cd5d83a75576bc4611cfc4 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 1 Jul 2025 16:20:15 -0400 Subject: [PATCH 600/645] Fix image loading skeleton --- src/apps/dashboard/routes/plugins/plugin.tsx | 8 +-- src/components/Image.tsx | 61 ++++++++++---------- src/components/LoadingSkeleton.tsx | 18 ++++++ 3 files changed, 53 insertions(+), 34 deletions(-) create mode 100644 src/components/LoadingSkeleton.tsx diff --git a/src/apps/dashboard/routes/plugins/plugin.tsx b/src/apps/dashboard/routes/plugins/plugin.tsx index 9da0a8a9c..e847b9385 100644 --- a/src/apps/dashboard/routes/plugins/plugin.tsx +++ b/src/apps/dashboard/routes/plugins/plugin.tsx @@ -64,13 +64,13 @@ const PluginPage: FC = () => { const { data: configurationPages, isError: isConfigurationPagesError, - isLoading: isConfigurationPagesLoading + isPending: isConfigurationPagesLoading } = useConfigurationPages(); const { data: packageInfo, isError: isPackageInfoError, - isLoading: isPackageInfoLoading + isPending: isPackageInfoLoading } = usePackageInfo(pluginName ? { name: pluginName, assemblyGuid: pluginId @@ -78,8 +78,8 @@ const PluginPage: FC = () => { const { data: plugins, - isLoading: isPluginsLoading, - isError: isPluginsError + isError: isPluginsError, + isPending: isPluginsLoading } = usePlugins(); const isLoading = diff --git a/src/components/Image.tsx b/src/components/Image.tsx index 84f792722..7ab0effe9 100644 --- a/src/components/Image.tsx +++ b/src/components/Image.tsx @@ -2,9 +2,10 @@ import type { SvgIconComponent } from '@mui/icons-material'; import ImageNotSupported from '@mui/icons-material/ImageNotSupported'; import Box from '@mui/material/Box/Box'; import Paper from '@mui/material/Paper/Paper'; -import Skeleton from '@mui/material/Skeleton/Skeleton'; import React, { type FC } from 'react'; +import { LoadingSkeleton } from './LoadingSkeleton'; + interface ImageProps { isLoading: boolean alt?: string @@ -30,36 +31,36 @@ const Image: FC = ({ overflow: 'hidden' }} > - {isLoading && ( - - )} - {url ? ( - {alt} - ) : ( - - + {url ? ( + {alt} - - )} + ) : ( + + + + )} + ); diff --git a/src/components/LoadingSkeleton.tsx b/src/components/LoadingSkeleton.tsx new file mode 100644 index 000000000..d49735dd1 --- /dev/null +++ b/src/components/LoadingSkeleton.tsx @@ -0,0 +1,18 @@ +import Skeleton, { type SkeletonProps } from '@mui/material/Skeleton/Skeleton'; +import React, { FC } from 'react'; + +interface LoadingSkeletonProps extends SkeletonProps { + isLoading: boolean +} + +export const LoadingSkeleton: FC = ({ + children, + isLoading, + ...props +}) => ( + isLoading ? ( + + ) : ( + children + ) +); From f8afd13764aa66f9401768e9e5e61e061732bd37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Wed, 2 Jul 2025 01:48:13 -0400 Subject: [PATCH 601/645] Translated using Weblate (Czech) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/cs/ --- src/strings/cs.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/cs.json b/src/strings/cs.json index 9dec8ce2e..0b8d3ccc8 100644 --- a/src/strings/cs.json +++ b/src/strings/cs.json @@ -2062,5 +2062,8 @@ "ButtonLearnMore": "Více informací", "DeleteRepositoryConfirmation": "Opravdu chcete odstranit tento repozitář?", "TranscodingLoadError": "Načtení nastavení překódování se nezdařilo", - "LiveTVPageLoadError": "Načtení stránky s nahrávkami se nezdařilo" + "LiveTVPageLoadError": "Načtení stránky s nahrávkami se nezdařilo", + "ConnectAnyway": "Přesto připojit", + "HeaderServerMismatch": "Neshoda serveru", + "MessageServerMismatch": "Adresa serveru, ke kterému se připojujete, se od posledního připojení změnila. Pokud jste to očekávali, stiskněte \"Přesto připojit\". Pokud jste to neočekávali, může být vaše připojení nebo server kompromitován." } From 550faafc6785737dcb86c0a307f25d67045f22b7 Mon Sep 17 00:00:00 2001 From: MrPlow Date: Wed, 2 Jul 2025 00:07:10 -0400 Subject: [PATCH 602/645] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/de.json b/src/strings/de.json index 384d5ceed..02bdb4021 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -2062,5 +2062,6 @@ "TranscodingLoadError": "Transcodierungseinstellungen konnten nicht geladen werden", "ConfirmDeleteRepository": "Repository löschen?", "DeleteRepositoryConfirmation": "Sind Sie sicher, dass Sie dieses Repository löschen wollen?", - "LiveTVPageLoadError": "Aufzeichnungsseite konnte nicht geladen werden" + "LiveTVPageLoadError": "Aufzeichnungsseite konnte nicht geladen werden", + "MessageServerMismatch": "Der Server mit dem Du dich verbindest, ist nicht der selbe, wie der, mit dem Du zuletzt unter dieser Adresse verbunden warst. Wenn das so sein soll, wähle \"Trotzdem verbinden\". Ansonsten könnte es sein, dass Deine Verbindung oder der Server kompromittiert wurde." } From 5e3e6d897bebb5d4a43adeb5dac2e103b19081a4 Mon Sep 17 00:00:00 2001 From: Bas <44002186+854562@users.noreply.github.com> Date: Wed, 2 Jul 2025 01:26:49 -0400 Subject: [PATCH 603/645] Translated using Weblate (Dutch) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/nl/ --- src/strings/nl.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/nl.json b/src/strings/nl.json index b3c5122ae..b77f7aeea 100644 --- a/src/strings/nl.json +++ b/src/strings/nl.json @@ -2061,5 +2061,8 @@ "DeleteRepositoryConfirmation": "Weet je zeker dat je dit repository wilt verwijderen?", "RepositoriesPageLoadError": "Laden van repository's mislukt", "TranscodingLoadError": "Laden van transcodeerinstellingen mislukt", - "LiveTVPageLoadError": "Laden van opnamepagina mislukt" + "LiveTVPageLoadError": "Laden van opnamepagina mislukt", + "MessageServerMismatch": "De server waarmee je probeert te verbinden, is niet dezelfde als de server waarmee je eerder op dit adres verbonden was. Als dit klopt, kies dan voor \"Toch verbinden\". Is dat niet het geval, dan is je verbinding of de server mogelijk niet veilig.", + "ConnectAnyway": "Toch verbinden", + "HeaderServerMismatch": "Server komt niet overeen" } From c96e397e6f5bd1656ec67d9e289d67ad8a91a18b Mon Sep 17 00:00:00 2001 From: Kityn Date: Wed, 2 Jul 2025 01:31:27 -0400 Subject: [PATCH 604/645] Translated using Weblate (Polish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/pl/ --- src/strings/pl.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/pl.json b/src/strings/pl.json index 6e7c2c9a0..bb7686c0d 100644 --- a/src/strings/pl.json +++ b/src/strings/pl.json @@ -2062,5 +2062,8 @@ "ButtonLearnMore": "Dowiedz się więcej", "TranscodingLoadError": "Nie udało się załadować ustawień transkodowania", "DeleteRepositoryConfirmation": "Czy na pewno chcesz usunąć to repozytorium?", - "LiveTVPageLoadError": "Nie udało się załadować strony z nagraniami" + "LiveTVPageLoadError": "Nie udało się załadować strony z nagraniami", + "HeaderServerMismatch": "Niezgodność serwera", + "MessageServerMismatch": "Serwer, z którym się łączysz, nie jest tym samym serwerem, z którym łączyłeś się wcześniej pod tym adresem. Jeśli jest to oczekiwane, wybierz „Połącz się mimo wszystko”. W przeciwnym razie Twoje połączenie lub serwer mogą być zagrożone.", + "ConnectAnyway": "Połącz się mimo wszystko" } From f05df8fb740459305c1a7143970103da415bc85f Mon Sep 17 00:00:00 2001 From: Martin Just Date: Wed, 2 Jul 2025 04:05:33 -0400 Subject: [PATCH 605/645] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/de.json b/src/strings/de.json index 02bdb4021..2e7caf8c6 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -2063,5 +2063,7 @@ "ConfirmDeleteRepository": "Repository löschen?", "DeleteRepositoryConfirmation": "Sind Sie sicher, dass Sie dieses Repository löschen wollen?", "LiveTVPageLoadError": "Aufzeichnungsseite konnte nicht geladen werden", - "MessageServerMismatch": "Der Server mit dem Du dich verbindest, ist nicht der selbe, wie der, mit dem Du zuletzt unter dieser Adresse verbunden warst. Wenn das so sein soll, wähle \"Trotzdem verbinden\". Ansonsten könnte es sein, dass Deine Verbindung oder der Server kompromittiert wurde." + "MessageServerMismatch": "Der Server mit dem Du dich verbindest, ist nicht der selbe, wie der, mit dem Du zuletzt unter dieser Adresse verbunden warst. Wenn das so sein soll, wähle \"Trotzdem verbinden\". Ansonsten könnte es sein, dass Deine Verbindung oder der Server kompromittiert wurde.", + "ConnectAnyway": "Trotzdem verbinden", + "HeaderServerMismatch": "Server stimmen nicht überein" } From c6701e75b16a524470c4c7e5418f895846ba27b0 Mon Sep 17 00:00:00 2001 From: stanol Date: Wed, 2 Jul 2025 05:56:39 -0400 Subject: [PATCH 606/645] Translated using Weblate (Ukrainian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/uk/ --- src/strings/uk.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/uk.json b/src/strings/uk.json index 30be018d8..8f5737497 100644 --- a/src/strings/uk.json +++ b/src/strings/uk.json @@ -2058,5 +2058,9 @@ "PluginsLoadError": "Виникла помилка під час завантаження плагінів.", "RepositoriesPageLoadError": "Не вдалося завантажити репозиторії", "TranscodingLoadError": "Не вдалося завантажити налаштування перекодування", - "ButtonLearnMore": "Дізнатися більше" + "ButtonLearnMore": "Дізнатися більше", + "MessageServerMismatch": "Сервер, до якого ви підключаєтеся, не є тим самим сервером, до якого ви раніше підключалися за цією адресою. Якщо це очікувано, виберіть «Все одно підключитися». В іншому випадку ваше з'єднання або сервер може бути скомпрометовано.", + "HeaderServerMismatch": "Невідповідність сервера", + "LiveTVPageLoadError": "Не вдалося завантажити сторінку з записами", + "ConnectAnyway": "Все одно підключитися" } From 518c9c35f989a437a46758d490b7a2ae67747036 Mon Sep 17 00:00:00 2001 From: myrad2267 Date: Wed, 2 Jul 2025 08:08:17 -0400 Subject: [PATCH 607/645] Translated using Weblate (French (Canada)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr_CA/ --- src/strings/fr-ca.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/fr-ca.json b/src/strings/fr-ca.json index f253ac038..41acd11fe 100644 --- a/src/strings/fr-ca.json +++ b/src/strings/fr-ca.json @@ -2006,5 +2006,8 @@ "TranscodingLoadError": "Échec du chargement des paramètres de transcodage", "ConfirmDeleteRepository": "Supprimer le dépôt ?", "RepositoriesPageLoadError": "Échec du chargement des dépôts", - "LiveTVPageLoadError": "Échec du chargement de la page d'enregistrements" + "LiveTVPageLoadError": "Échec du chargement de la page d'enregistrements", + "ConnectAnyway": "Se connecter quand même", + "HeaderServerMismatch": "Incompatibilité du serveur", + "MessageServerMismatch": "Le serveur auquel vous vous connectez n'est pas le même que celui auquel vous vous êtes précédemment connecté à cette adresse. Si cela est normal, sélectionnez « Se connecter quand même ». Sinon, votre connexion ou le serveur pourrait être compromis." } From e704095f57d44a25f9dfbd36773b7cb8ce33e47c Mon Sep 17 00:00:00 2001 From: myrad2267 Date: Wed, 2 Jul 2025 08:07:46 -0400 Subject: [PATCH 608/645] Translated using Weblate (French) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/fr/ --- src/strings/fr.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/fr.json b/src/strings/fr.json index 5a7669283..8de946447 100644 --- a/src/strings/fr.json +++ b/src/strings/fr.json @@ -2062,5 +2062,8 @@ "ConfirmDeleteRepository": "Supprimer le dépôt ?", "DeleteRepositoryConfirmation": "Êtes-vous sûr de vouloir supprimer ce dépôt ?", "RepositoriesPageLoadError": "Échec du chargement des dépôts", - "LiveTVPageLoadError": "Échec du chargement de la page d'enregistrements" + "LiveTVPageLoadError": "Échec du chargement de la page d'enregistrements", + "ConnectAnyway": "Se connecter quand même", + "HeaderServerMismatch": "Incompatibilité du serveur", + "MessageServerMismatch": "Le serveur auquel vous vous connectez n'est pas le même que celui auquel vous vous êtes précédemment connecté à cette adresse. Si cela est normal, sélectionnez « Se connecter quand même ». Sinon, votre connexion ou le serveur pourrait être compromis." } From 9b5ae6ed50e267ddf9bf1fee49d6002774a4ebb1 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Wed, 2 Jul 2025 10:21:22 -0400 Subject: [PATCH 609/645] Revert "Translated using Weblate (Portuguese)" This reverts commit fcc8c8c879a8055b20ba3838e4c009ec336048a7. --- src/strings/pt.json | 2584 +++++++++++++++++++++---------------------- 1 file changed, 1292 insertions(+), 1292 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 3c2e3ad00..5a1a791bd 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1,155 +1,155 @@ { - "HeaderTypeImageFetchers": "Buscadores de imagem ({0})", - "HeaderSubtitleDownloads": "Downloads de Legendas", - "HeaderKodiMetadataHelp": "Para ativar ou desativar os metadados NFO, edite uma biblioteca e encontre a seção 'Salvadores de metadados'.", - "HeaderFetcherSettings": "Configurações do Fetcher", - "HeaderCastAndCrew": "Elenco & Equipe", - "HeaderAppearsOn": "Aparece Em", + "HeaderTypeImageFetchers": "Fornecedores de imagens ({0})", + "HeaderSubtitleDownloads": "Transferências de Legendas", + "HeaderKodiMetadataHelp": "Para ativar ou desativar os metadados NFO, edita uma biblioteca e localiza a secção dos metadados.", + "HeaderFetcherSettings": "Definições do Pesquisador", + "HeaderCastAndCrew": "Elenco e equipa técnica", + "HeaderAppearsOn": "Presente em", "HeaderAdmin": "Administração", - "GuideProviderLogin": "Login", - "XmlTvPathHelp": "Um caminho para um arquivo XMLTV. O Jellyfin lerá este arquivo e verificará periodicamente se há atualizações. Você é responsável por criar e atualizar o arquivo.", + "GuideProviderLogin": "Iniciar sessão", + "XmlTvPathHelp": "Caminho para um ficheiro XMLTV. O Jellyfin vai ler o ficheiro periodicamente para atualizar a programação da TV. O utilizador é responsável pela criação e atualização do ficheiro.", "XmlDocumentAttributeListHelp": "Estes atributos são aplicados ao elemento principal de cada resposta XML.", - "Writer": "Escritor", - "WizardCompleted": "Isso é tudo que precisamos por agora. O Jellyfin começou a coletar informações sobre sua biblioteca de mídia. Confira alguns de nossos aplicativos e, em seguida, clique em Concluir para ver o Painel.", + "Writer": "Argumento", + "WizardCompleted": "É tudo o que precisamos por agora. O Jellyfin começou a recolher informações sobre a tua biblioteca multimédia. Vê algumas das nossas aplicações e, em seguida, clica em Terminar para ver o Painel de Controlo.", "WelcomeToProject": "Bem-vindo ao Jellyfin!", - "Wednesday": "Quarta-feira", + "Wednesday": "Quarta", "ValueVideoCodec": "Codec de Vídeo: {0}", "ValueTimeLimitSingleHour": "Limite de tempo: 1 hora", "ValueTimeLimitMultiHour": "Limite de tempo: {0} horas", "ValueSpecialEpisodeName": "Especial - {0}", "ValueConditions": "Condições: {0}", "ValueAudioCodec": "Codec de Áudio: {0}", - "UserProfilesIntro": "O Jellyfin inclui suporte para perfis de usuário com configurações de exibição granulares, estado de reprodução e controles dos pais.", - "UserAgentHelp": "Fornecer um cabeçalho HTTP 'User-Agent' personalizado.", - "Unplayed": "Não reproduzido", + "UserProfilesIntro": "O Jellyfin suporta perfis de utilizadores, permitindo que cada utilizador tenha as suas definições de visualização, estado de reprodução e controlos parentais.", + "UserAgentHelp": "Forneça um 'User-Agent' HTTP personalizado.", + "Unplayed": "Por reproduzir", "Unmute": "Ativar som", - "HeaderUninstallPlugin": "Desinstalar Plugin", - "UninstallPluginConfirmation": "Tem certeza de que deseja desinstalar {0}?", + "HeaderUninstallPlugin": "Desinstalar extensão", + "UninstallPluginConfirmation": "Tem a certeza que deseja desinstalar {0}?", "Uniform": "Uniforme", - "Tuesday": "Terça-feira", + "Tuesday": "Terça", "TrackCount": "{0} faixas", "TitlePlayback": "Reprodução", - "Thursday": "Quinta-feira", - "ThisWizardWillGuideYou": "Este assistente ajudará você a passar pelo processo de configuração. Para começar, insira um nome de servidor e selecione seu idioma preferido.", - "TellUsAboutYourself": "Conte-nos sobre você", + "Thursday": "Quinta", + "ThisWizardWillGuideYou": "Este assistente irá ajudar-te durante o processo de configuração. Para começar, introduz o nome do servidor e seleciona o teu idioma.", + "TellUsAboutYourself": "Fale-nos sobre si", "TabUpcoming": "Próximos", - "TabStreaming": "Streaming", + "TabStreaming": "Transmissão", "TabServer": "Servidor", - "TabScheduledTasks": "Tarefas Agendadas", + "TabScheduledTasks": "Tarefas agendadas", "TabResponses": "Respostas", "TabProfiles": "Perfis", - "TabPlugins": "Plugins", - "TabParentalControl": "Controle dos pais", + "TabPlugins": "Extensões", + "TabParentalControl": "Controlo parental", "TabOther": "Outro", "TabNotifications": "Notificações", - "TabNfoSettings": "Configurações NFO", - "TabNetworks": "Redes de TV", - "TabMyPlugins": "Meus Plugins", + "TabNfoSettings": "Definições de ficheiros NFO", + "TabNetworks": "Canais de TV", + "TabMyPlugins": "As minhas extensões", "TabMusic": "Música", - "TabLatest": "Recentemente Adicionado", + "TabLatest": "Adicionado recentemente", "TabDirectPlay": "Reprodução Directa", - "TabDashboard": "Painel", + "TabDashboard": "Painel de controlo", "TabContainers": "Contentores", "TabCatalog": "Catálogo", - "TabAdvanced": "Avançado", + "TabAdvanced": "Definições avançadas", "TabAccess": "Acesso", "TV": "TV", "SystemDlnaProfilesHelp": "Os perfis de sistema são apenas de leitura. Mudanças a um perfil de sistema serão guardadas num novo perfil personalizado.", "Sync": "Sincronização", "Sunday": "Domingo", "Subtitles": "Legendas", - "Sports": "Esportes", + "Sports": "Desporto", "SortChannelsBy": "Ordenar canais por", "Songs": "Músicas", - "SkipEpisodesAlreadyInMyLibraryHelp": "Os episódios serão comparados usando os números da temporada e do episódio, quando disponíveis.", - "SkipEpisodesAlreadyInMyLibrary": "Não gravar episódios que já estão na minha biblioteca", - "SimultaneousConnectionLimitHelp": "O número máximo de streams simultâneos permitidos. Digite 0 para sem limite.", - "Shuffle": "Embaralhar", - "Shows": "Programas", - "ShowAdvancedSettings": "Mostrar configurações avançadas", - "Share": "Compartilhar", - "SettingsSaved": "Configurações salvas.", - "Settings": "Configurações", - "ServerUpdateNeeded": "Este servidor precisa ser atualizado. Para baixar a versão mais recente, visite {0}", - "ServerRestartNeededAfterPluginInstall": "O Jellyfin precisará ser reiniciado após a instalação do plugin.", - "SeriesDisplayOrderHelp": "Ordenar episódios por data de exibição, ordem do DVD ou numeração absoluta.", - "Series": "Série", + "SkipEpisodesAlreadyInMyLibraryHelp": "Os episódios serão comparados utilizando os números de episódio e temporada, quando disponíveis.", + "SkipEpisodesAlreadyInMyLibrary": "Não gravar episódios que já estejam presentes na Biblioteca", + "SimultaneousConnectionLimitHelp": "O número máximo de transmissões simultâneas permitidas. Introduz 0 para não haver limite.", + "Shuffle": "Aleatório", + "Shows": "Séries", + "ShowAdvancedSettings": "Mostrar definições avançadas", + "Share": "Partilhar", + "SettingsSaved": "Definições guardadas.", + "Settings": "Definições", + "ServerUpdateNeeded": "Este servidor precisa de ser atualizado. Para transferir a versão mais recente, visite {0}", + "ServerRestartNeededAfterPluginInstall": "O Jellyfin terá que reiniciar após instalar a extensão.", + "SeriesDisplayOrderHelp": "Ordenar episódios por data de estreia, ordem no DVD ou numeração absoluta.", + "Series": "Séries", "SendMessage": "Enviar mensagem", "SearchResults": "Resultados da pesquisa", - "SearchForSubtitles": "Pesquisar legendas", - "SearchForCollectionInternetMetadata": "Pesquisar na internet por arte e metadados", + "SearchForSubtitles": "Procurar legendas", + "SearchForCollectionInternetMetadata": "Procurar na internet por imagens e metadados", "Search": "Pesquisar", "Screenshots": "Capturas de Ecrã", "Screenshot": "Captura de Ecrã", - "Schedule": "Agendar", - "ScanForNewAndUpdatedFiles": "Verificar novos arquivos e arquivos atualizados", - "SaveSubtitlesIntoMediaFoldersHelp": "Armazenar legendas ao lado de arquivos de vídeo permitirá que sejam gerenciadas mais facilmente.", - "SaveSubtitlesIntoMediaFolders": "Salvar legendas nas pastas de mídia", - "Save": "Salvar", + "Schedule": "Agendamentos", + "ScanForNewAndUpdatedFiles": "Procurar ficheiros novos ou atualizados", + "SaveSubtitlesIntoMediaFoldersHelp": "Guardar ficheiros de legendas junto aos ficheiros vídeo irá facilitar a sua gestão.", + "SaveSubtitlesIntoMediaFolders": "Guardar legendas em pastas multimédia", + "Save": "Guardar", "Saturday": "Sábado", - "Runtime": "Duração", + "Runtime": "Tempo de execução", "Rewind": "Retroceder", - "ResumeAt": "Retomar de {0}", + "ResumeAt": "Retomar a partir de {0}", "ReplaceExistingImages": "Substituir imagens existentes", "ReplaceAllMetadata": "Substituir todos os metadados", - "RepeatOne": "Repetir um", + "RepeatOne": "Repetir uma vez", "RepeatMode": "Modo de repetição", "Repeat": "Repetir", - "RemoveFromPlaylist": "Remover da playlist", + "RemoveFromPlaylist": "Remover da lista de reprodução", "Refresh": "Atualizar", "RecordingScheduled": "Gravação agendada.", "RecordingCancelled": "Gravação cancelada.", "RecordSeries": "Gravar série", "Record": "Gravar", - "RecommendationStarring": "Com {0}", - "RecommendationDirectedBy": "Dirigido por {0}", - "RecommendationBecauseYouWatched": "Porque você assistiu {0}", - "RecommendationBecauseYouLike": "Porque você gosta de {0}", - "Raised": "Levantado", + "RecommendationStarring": "{0} como protagonista", + "RecommendationDirectedBy": "Realizado por {0}", + "RecommendationBecauseYouWatched": "Porque viu {0}", + "RecommendationBecauseYouLike": "Porque gosta de {0}", + "Raised": "Elevado", "Programs": "Programas", "Producer": "Produtor", - "MessagePluginInstalled": "O plugin foi instalado com sucesso. O servidor precisará ser reiniciado para que as alterações tenham efeito.", - "PleaseSelectTwoItems": "Por favor, selecione pelo menos dois itens.", - "PleaseRestartServerName": "Por favor, reinicie o Jellyfin em {0}.", - "PleaseEnterNameOrId": "Por favor, insira um nome ou um ID externo.", + "MessagePluginInstalled": "A extensão foi instalada com sucesso. O servidor necessitará de ser reiniciado para aplicar as alterações.", + "PleaseSelectTwoItems": "Por favor selecione pelo menos dois itens.", + "PleaseRestartServerName": "Por favor, reinicia o Jellyfin no {0}.", + "PleaseEnterNameOrId": "Introduz um nome ou um ID externo.", "PleaseConfirmPluginInstallation": "Por favor clique em OK para confirmar que leu o conteúdo acima e que deseja prosseguir com a instalação da extensão.", - "PleaseAddAtLeastOneFolder": "Por favor, adicione pelo menos uma pasta a esta biblioteca clicando no botão '+' na seção 'Pastas'.", + "PleaseAddAtLeastOneFolder": "Adiciona pelo menos uma pasta a esta biblioteca, clicando no botão '+' na secção 'Pastas'.", "Playlists": "Playlists", "Played": "Reproduzido", "PlayNextEpisodeAutomatically": "Reproduzir próximo episódio automaticamente", - "PlayNext": "Reproduzir próximo", - "PlayFromBeginning": "Reproduzir desde o início", - "PlayCount": "Contagem de Reprodução", - "PlaybackData": "Informações de Reprodução", - "PlayAllFromHere": "Reproduzir tudo a partir daqui", + "PlayNext": "Reproduzir a seguir", + "PlayFromBeginning": "Reproduzir do início", + "PlayCount": "N.º de Reproduções", + "PlaybackData": "Dados de Reprodução", + "PlayAllFromHere": "Reproduzir todos a partir daqui", "Play": "Reproduzir", - "PlaceFavoriteChannelsAtBeginning": "Colocar canais favoritos no início", + "PlaceFavoriteChannelsAtBeginning": "Mover canais favoritos para o início", "PinCodeResetConfirmation": "Tem a certeza de que devia repôr o código PIN?", "PinCodeResetComplete": "O código PIN foi redefinido.", - "Photos": "Fotos", + "Photos": "Fotografias", "PerfectMatch": "Correspondência perfeita", "People": "Pessoas", - "PasswordSaved": "Senha salva.", - "PasswordResetProviderHelp": "Escolha um provedor de redefinição de senha a ser usado quando este usuário solicitar uma redefinição de senha.", - "PasswordResetConfirmation": "Tem certeza de que deseja redefinir a senha?", - "PasswordResetComplete": "A senha foi redefinida.", - "PasswordMatchError": "A senha e a confirmação da senha devem corresponder.", - "ParentalRating": "Classificação parental", - "PackageInstallFailed": "{0} (versão {1}) instalação falhou.", - "PackageInstallCompleted": "{0} (versão {1}) instalação concluída.", - "PackageInstallCancelled": "{0} (versão {1}) instalação cancelada.", - "Overview": "Visão geral", - "OriginalAirDateValue": "Data original de exibição: {0}", + "PasswordSaved": "Palavra passe guardada.", + "PasswordResetProviderHelp": "Selecione um fornecedor de redefinição de palavra-passe a ser utilizado quando um utilizador solicitar uma redefinição de palavra-passe.", + "PasswordResetConfirmation": "Tem a certeza de que deseja redefinir a palavra-passe?", + "PasswordResetComplete": "A palavra-passe foi redefinida.", + "PasswordMatchError": "A palavra passe e a palavra passe de confirmação devem ser iguais.", + "ParentalRating": "Classificação etária", + "PackageInstallFailed": "A instalação de {0} (versão{1}) falhou.", + "PackageInstallCompleted": "A instalação de {0} (versão {1}) foi concluída.", + "PackageInstallCancelled": "A instalação de {0} (versão {1}) foi cancelada.", + "Overview": "Resumo", + "OriginalAirDateValue": "Data de estreia original: {0}", "OptionWeekly": "Semanalmente", - "OptionWeekends": "Fins de semana", + "OptionWeekends": "Fins-de-semana", "OptionWeekdays": "Dias da semana", - "OptionWakeFromSleep": "Despertar do sono", - "OptionUnairedEpisode": "Episódios Não Exibidos", - "OptionTvdbRating": "Avaliação TheTVDB", - "OptionTrackName": "Nome da Faixa", + "OptionWakeFromSleep": "Retomar da suspensão", + "OptionUnairedEpisode": "Episódios por Estrear", + "OptionTvdbRating": "Classificação no TVDB", + "OptionTrackName": "Nome da pista", "OptionSubstring": "Subcadeia", "OptionSpecialEpisode": "Especiais", - "OptionSaveMetadataAsHidden": "Salvar metadados e imagens como arquivos ocultos", + "OptionSaveMetadataAsHidden": "Guardar metadados e imagens como ficheiros ocultos", "OptionResumable": "Retomável", "OptionResElement": "elemento res", "OptionReportByteRangeSeekingWhenTranscodingHelp": "Isto é necessário para alguns dispositivos que não pesquisam o tempo muito bem.", @@ -157,71 +157,71 @@ "OptionReleaseDate": "Data de Lançamento", "OptionProtocolHttp": "HTTP", "OptionProtocolHls": "Emissão HTTP em direto", - "OptionPremiereDate": "Data da Estreia", - "OptionPlayCount": "Contagem de Reprodução", + "OptionPremiereDate": "Data de Estreia", + "OptionPlayCount": "N.º de Visualizações", "OptionPlainVideoItemsHelp": "Quando activado, todos os vídeos são representados no DIDL como \"object.item.videoItem\" ao invés de um tipo mais específico como, por exemplo, \"object.item.videoItem.movie\".", "OptionPlainVideoItems": "Mostrar todos os vídeos como itens de vídeo simples", "OptionPlainStorageFoldersHelp": "Quando activado, todas as pastas são representadas no DIDL como \"object.container.storageFolder\" ao invés de um tipo mais específico como, por exemplo, \"object.container.person.musicArtist\".", "OptionPlainStorageFolders": "Mostrar todas as pastas como simples pastas de armazenamento", - "OptionParentalRating": "Classificação Parental", - "OptionOnInterval": "Em um intervalo", - "OptionNew": "Novo…", - "LabelSaveLocalMetadataHelp": "Salvar arte nas pastas de mídia as colocará em um local onde podem ser facilmente editadas.", - "LabelSaveLocalMetadata": "Salvar arte nas pastas de mídia", - "LabelRuntimeMinutes": "Duração", - "LabelRemoteClientBitrateLimit": "Limite de taxa de bits para streaming pela Internet (Mbps)", + "OptionParentalRating": "Classificação etária", + "OptionOnInterval": "Num intervalo", + "OptionNew": "Nova…", + "LabelSaveLocalMetadataHelp": "Guardar imagens diretamente nas pastas multimédia facilita o acesso para a sua edição.", + "LabelSaveLocalMetadata": "Guardar imagens e metadados nas pastas multimédia", + "LabelRuntimeMinutes": "Tempo de execução", + "LabelRemoteClientBitrateLimit": "Taxa de bits máxima para transmissão para a Internet (Mbps)", "LabelReleaseDate": "Data de lançamento", - "LabelRecordingPathHelp": "Especifique o local padrão para salvar gravações. Se deixado em branco, a pasta de dados do programa do servidor será usada.", - "LabelRecordingPath": "Caminho padrão de gravação", + "LabelRecordingPathHelp": "Especifica a localização predefinida para guardar as gravações. Se for deixada em branco, será utilizada a pasta de dados do programa do servidor.", + "LabelRecordingPath": "Localização predefinida das gravações", "LabelReasonForTranscoding": "Razão para transcodificação", - "LabelPublicHttpsPortHelp": "O número da porta pública que deve ser mapeado para a porta HTTPS local.", + "LabelPublicHttpsPortHelp": "Número da porta pública que deverá ser transferida para a porta HTTPS local.", "LabelPublicHttpsPort": "Número da porta HTTPS pública", - "LabelPublicHttpPortHelp": "O número da porta pública que deve ser mapeado para a porta HTTP local.", + "LabelPublicHttpPortHelp": "Número da porta pública que deverá ser transferida para a porta HTTP local.", "LabelPublicHttpPort": "Número da porta HTTP pública", "LabelProtocolInfoHelp": "O valor que será usado ao responder aos pedidos GetProtocolInfo do dispositivo.", "LabelProtocolInfo": "Informação do protocolo", "LabelProtocol": "Protocolo", "LabelProfileVideoCodecs": "Codecs do vídeo", "LabelProfileContainersHelp": "Separados por vírgula. Pode ser deixado em branco para usar com todos os contentores.", - "LabelProfileContainer": "Contêiner", + "LabelProfileContainer": "Container", "LabelProfileCodecsHelp": "Separados por vírgula. Pode ser deixado em branco para usar com todos os codecs.", "LabelProfileCodecs": "Codificadores", "LabelProfileAudioCodecs": "Codecs do áudio", - "LabelPreferredSubtitleLanguage": "Idioma de legenda preferido", - "LabelPreferredDisplayLanguage": "Idioma de exibição preferido", - "LabelPostProcessorArgumentsHelp": "Use {path} como o caminho para o arquivo de gravação.", - "LabelPostProcessorArguments": "Argumentos da linha de comando do pós-processador", - "LabelPostProcessor": "Aplicativo de pós-processamento", - "LabelPleaseRestart": "As alterações terão efeito após recarregar manualmente o cliente da web.", + "LabelPreferredSubtitleLanguage": "Idioma de legendas preferido", + "LabelPreferredDisplayLanguage": "Idioma de visualização preferido", + "LabelPostProcessorArgumentsHelp": "Utilizar {path} como caminho para o ficheiro de gravação.", + "LabelPostProcessorArguments": "Argumentos de linha de comandos para a aplicação de pós-processamento", + "LabelPostProcessor": "Aplicação de pós-processamento", + "LabelPleaseRestart": "As alterações produzirão efeito depois de recarregar a página web.", "LabelPlayMethod": "Método de reprodução", "LabelPlaylist": "Playlist", - "LabelPlayer": "Reprodutor", - "LabelPersonRoleHelp": "Exemplo: Motorista do caminhão de sorvete", - "LabelPersonRole": "Papel", - "LabelPath": "Caminho", + "LabelPlayer": "Leitor", + "LabelPersonRoleHelp": "Exemplo: motorista da carrinha de gelados", + "LabelPersonRole": "Personagem", + "LabelPath": "Localização", "LabelPasswordRecoveryPinCode": "Código PIN", - "LabelPasswordConfirm": "Senha (confirmação)", - "LabelPassword": "Senha", - "LabelParentalRating": "Classificação parental", - "LabelOverview": "Visão geral", + "LabelPasswordConfirm": "Palavra-passe (confirmar)", + "LabelPassword": "Palavra-passe", + "LabelParentalRating": "Classificação etária", + "LabelOverview": "Sinopse", "LabelOriginalTitle": "Título original", "LabelOriginalAspectRatio": "Proporção original", - "LabelOptionalNetworkPathHelp": "Se esta pasta estiver compartilhada na sua rede, fornecer o caminho do compartilhamento de rede pode permitir que clientes em outros dispositivos acessem os arquivos de mídia diretamente. Por exemplo, {0} ou {1}.", + "LabelOptionalNetworkPathHelp": "Caso a pasta esteja partilhada, fornecer o caminho de rede pode permitir aos clientes aceder diretamente aos ficheiros multimédia. Por exemplo, {0} ou {1}.", "LabelOptionalNetworkPath": "Pasta de rede compartilhada", - "LabelNumberOfGuideDaysHelp": "Baixar mais dias de dados do guia fornece a capacidade de agendar com mais antecedência e ver mais listagens, mas também levará mais tempo para baixar. O automático escolherá com base no número de canais.", - "LabelNumberOfGuideDays": "Número de dias de dados do guia para baixar", + "LabelNumberOfGuideDaysHelp": "Transferir mais dias de Guia TV permite agendar com maior antecedência e ver mais listagens, no entanto, levará mais tempo a transferir. Se selecionares Automático, será escolhido o período baseado no número de canais.", + "LabelNumberOfGuideDays": "Número de dias de Guia TV a transferir", "LabelNumber": "Número", "LabelNotificationEnabled": "Activar esta notificação", "LabelNewsCategories": "Categorias de notícias", - "LabelNewPasswordConfirm": "Confirmação da nova senha", - "LabelNewPassword": "Nova senha", + "LabelNewPasswordConfirm": "Confirmar nova palavra-passe", + "LabelNewPassword": "Nova palavra-passe", "LabelNewName": "Novo nome", "LabelName": "Nome", "LabelMusicStreamingTranscodingBitrateHelp": "Especifique uma taxa de bits máxima ao fazer streaming de música.", "LabelMusicStreamingTranscodingBitrate": "Taxa de transcodificação de música", - "LabelMovieRecordingPath": "Caminho de gravação de filmes", - "LabelMoviePrefixHelp": "Se um prefixo for aplicado aos títulos dos filmes, insira-o aqui para que o servidor possa lidar com isso corretamente.", - "LabelMoviePrefix": "Prefixo do filme", + "LabelMovieRecordingPath": "Localização para gravação de filmes", + "LabelMoviePrefixHelp": "Se aplicares um prefixo aos títulos dos filmes, introduz aqui para que o servidor o possa tratar corretamente.", + "LabelMoviePrefix": "Prefixo para filmes", "LabelMovieCategories": "Categorias de filmes", "LabelMonitorUsers": "Monitorizar actividade de", "LabelModelUrl": "URL do modelo", @@ -229,89 +229,89 @@ "LabelModelName": "Nome do modelo", "LabelModelDescription": "Descrição do modelo", "LabelMinScreenshotDownloadWidth": "Transferir capturas de ecrã com este tamanho mínimo:", - "LabelMinResumePercentageHelp": "Os títulos são considerados não reproduzidos se parados antes deste tempo.", - "LabelMinResumePercentage": "Porcentagem mínima de retomar", - "LabelMinResumeDurationHelp": "O menor comprimento de vídeo em segundos que salvará a localização da reprodução e permitirá que você retome.", - "LabelMinResumeDuration": "Duração mínima para retomar", - "LabelMinBackdropDownloadWidth": "Largura mínima para download de plano de fundo", + "LabelMinResumePercentageHelp": "Os títulos são considerados como não vistos se parados antes desta percentagem da duração.", + "LabelMinResumePercentage": "Percentagem mínima de visualização para permitir retomar", + "LabelMinResumeDurationHelp": "A duração mínima de um vídeo, em segundos, que te permite guardar o progresso e retomar a reprodução.", + "LabelMinResumeDuration": "Duração mínima para permitir retomar a reprodução", + "LabelMinBackdropDownloadWidth": "Transferir imagens de fundo com este tamanho mínimo", "LabelMethod": "Método", - "LabelEndDate": "Data de término", + "LabelEndDate": "Data de fim", "HeaderXmlDocumentAttributes": "Atributos do Documento XML", - "HeaderLoginFailure": "Falha no Login", - "LabelMetadataPathHelp": "Especifique um local personalizado para a arte e metadados baixados.", - "LabelMetadataPath": "Caminho dos metadados", - "LabelMetadataDownloadLanguage": "Idioma de download preferido", + "HeaderLoginFailure": "Falha no início de sessão", + "LabelMetadataPathHelp": "Introduz a localização para guardar imagens e metadados transferidos da internet.", + "LabelMetadataPath": "Localização dos metadados", + "LabelMetadataDownloadLanguage": "Idioma preferido para transferência", "LabelMetadata": "Metadados", - "LabelMessageTitle": "Título da mensagem", + "LabelMessageTitle": "Titulo da mensagem", "LabelMessageText": "Texto da mensagem", "LabelMaxStreamingBitrateHelp": "Defina uma taxa máxima de transmissão.", "LabelMaxStreamingBitrate": "Qualidade máxima de transmissão", "LabelMaxScreenshotsPerItem": "Número máximo de capturas de ecrã por item:", - "LabelMaxResumePercentageHelp": "Os títulos são considerados totalmente reproduzidos se parados após este tempo.", - "LabelMaxResumePercentage": "Porcentagem máxima de retomar", - "LabelMaxParentalRating": "Classificação parental máxima permitida", - "LabelMaxChromecastBitrate": "Qualidade de streaming do Google Cast", - "LabelMaxBackdropsPerItem": "Número máximo de planos de fundo por item", + "LabelMaxResumePercentageHelp": "Os títulos são considerados como vistos se parados após esta percentagem da duração.", + "LabelMaxResumePercentage": "Percentagem máxima de visualização para permitir retomar", + "LabelMaxParentalRating": "Classificação etária máxima permitida", + "LabelMaxChromecastBitrate": "Qualidade de transmissão para Chromecast", + "LabelMaxBackdropsPerItem": "Número máximo de imagens de fundo por item", "LabelMatchType": "Tipo de correspondência", "LabelManufacturerUrl": "URL do Fabricante", "LabelManufacturer": "Fabricante", - "LabelLoginDisclaimerHelp": "Uma mensagem que será exibida na parte inferior da página de login.", - "LabelLoginDisclaimer": "Aviso de login", - "LabelLockItemToPreventChanges": "Bloquear este item para evitar futuras alterações nos metadados", + "LabelLoginDisclaimerHelp": "Este aviso será mostrado na parte inferior da página de início de sessão.", + "LabelLoginDisclaimer": "Aviso legal de início de sessão", + "LabelLockItemToPreventChanges": "Bloquear este item para evitar futuras alterações de metadados", "LabelLocalHttpServerPortNumberHelp": "O número da porta TCP para o servidor HTTP.", "LabelLocalHttpServerPortNumber": "Número da porta HTTP local", "LabelLineup": "Programação", "LabelLanguage": "Idioma", - "LabelLanNetworks": "Redes LAN", - "LabelKodiMetadataSaveImagePathsHelp": "Isso é recomendado se você tiver nomes de arquivos de imagem que não estão em conformidade com as diretrizes do Kodi.", - "LabelKodiMetadataSaveImagePaths": "Salvar caminhos de imagem dentro dos arquivos NFO", - "LabelKodiMetadataEnablePathSubstitutionHelp": "Ativar a substituição de caminho das imagens usando as configurações de substituição de caminho do servidor.", - "LabelKodiMetadataEnablePathSubstitution": "Ativar substituição de caminho", - "LabelKodiMetadataEnableExtraThumbsHelp": "Ao baixar imagens, elas podem ser salvas tanto em extrafanart quanto em extrathumbs para máxima compatibilidade com skins do Kodi.", - "LabelKodiMetadataEnableExtraThumbs": "Copiar extrafanart para o campo extrathumbs", - "LabelKodiMetadataDateFormatHelp": "Todas as datas dentro dos arquivos NFO serão analisadas usando este formato.", + "LabelLanNetworks": "Redes locais (LAN)", + "LabelKodiMetadataSaveImagePathsHelp": "Esta opção é recomendada se existirem nomes de imagens que não estejam de acordo com as recomendações do Kodi.", + "LabelKodiMetadataSaveImagePaths": "Guardar a localização de imagens em ficheiros nfo", + "LabelKodiMetadataEnablePathSubstitutionHelp": "Ativa a substituição de caminhos de imagens usando as definições de substituição de caminhos do servidor.", + "LabelKodiMetadataEnablePathSubstitution": "Ativar a substituição de caminhos", + "LabelKodiMetadataEnableExtraThumbsHelp": "Ao transferir imagens, estas podem ser guardadas como extrafanart e extrathumbs para uma maior compatibilidade com os temas Kodi.", + "LabelKodiMetadataEnableExtraThumbs": "Copiar o parâmetro extrafanart para extrathumbs", + "LabelKodiMetadataDateFormatHelp": "Todas as datas presentes em ficheiros NFO serão analisadas utilizando este formato.", "LabelKodiMetadataDateFormat": "Formato da data de lançamento", - "LabelKidsCategories": "Categorias Infantis", - "LabelKeepUpTo": "Manter até", - "LabelInternetQuality": "Qualidade da Internet", + "LabelKidsCategories": "Categorias infantis", + "LabelKeepUpTo": "Manter, no máximo", + "LabelInternetQuality": "Qualidade para a Internet", "LabelInNetworkSignInWithEasyPasswordHelp": "Utilizar um código PIN para entrar no Jellyfin dentro da rede. A palavra-passe só será necessária fora da rede. Se o código PIN for deixado em branco, não será necessária autenticação dentro da rede.", "LabelInNetworkSignInWithEasyPassword": "Activar acesso dentro da rede com código PIN", "LabelImportOnlyFavoriteChannels": "Restringir a canais marcados como favoritos", - "LabelImageType": "Tipo de Imagem", + "LabelImageType": "Tipo de imagem", "LabelIdentificationFieldHelp": "Uma subcadeia ou expressão regex que não diferencia maiúscula de minúsculas.", "LabelIconMaxWidth": "Largura máxima do ícone", "LabelIconMaxHeight": "Altura máxima do ícone", "LabelHttpsPortHelp": "O número da porta TCP para o servidor HTTPS.", "LabelHttpsPort": "Número da porta HTTPS local", - "LabelHomeScreenSectionValue": "Seção da tela inicial {0}", - "LabelHomeNetworkQuality": "Qualidade da rede local", - "LabelHardwareAccelerationTypeHelp": "A aceleração por hardware requer configuração adicional.", + "LabelHomeScreenSectionValue": "Secção {0} do painel principal", + "LabelHomeNetworkQuality": "Qualidade da rede interna", + "LabelHardwareAccelerationTypeHelp": "A aceleração de hardware requer configuração adicional.", "LabelHardwareAccelerationType": "Aceleração por hardware", "LabelEncoderPreset": "Predefinição de codificação", - "LabelH264Crf": "Codificação H.264 CRF", - "LabelGroupMoviesIntoCollectionsHelp": "Filmes em uma coleção serão exibidos como um único item agrupado ao exibir listas de filmes.", + "LabelH264Crf": "CRF para codificação H.264", + "LabelGroupMoviesIntoCollectionsHelp": "Ao mostrar listas de filmes, aqueles que pertençam a uma coleção serão apresentados como um único item agrupado.", "LabelGroupMoviesIntoCollections": "Agrupar filmes em coleções", - "LabelServerNameHelp": "Este nome será usado para identificar o servidor e será definido como o nome do host do servidor.", + "LabelServerNameHelp": "Este nome será utilizado para identificar o servidor. Hostname do servidor usado por defeito.", "LabelFriendlyName": "Nome amigável", "LabelFormat": "Formato", - "LabelForgotPasswordUsernameHelp": "Insira seu nome de usuário, se você se lembrar.", - "LabelFont": "Fonte", + "LabelForgotPasswordUsernameHelp": "Introduz o teu nome de utilizador, se te lembrares dele.", + "LabelFont": "Tipo de Letra", "LabelFolder": "Pasta", - "LabelFinish": "Concluir", - "LabelFileOrUrl": "Arquivo ou URL", + "LabelFinish": "Terminar", + "LabelFileOrUrl": "Ficheiro ou URL", "LabelFailed": "Falhou", - "LabelExtractChaptersDuringLibraryScanHelp": "Gerar imagens de capítulos ao importar vídeos durante a verificação da biblioteca. Caso contrário, elas serão extraídas durante a tarefa agendada de imagens de capítulos, permitindo que a verificação regular da biblioteca seja concluída mais rapidamente.", - "LabelExtractChaptersDuringLibraryScan": "Extrair imagens de capítulos durante a verificação da biblioteca", - "LabelBaseUrlHelp": "Adicione um subdiretório personalizado à URL do servidor. Por exemplo: http://example.com/<baseurl>", - "LabelBaseUrl": "URL base", + "LabelExtractChaptersDuringLibraryScanHelp": "Gerar imagens dos capítulos ao importar vídeos durante a análise da biblioteca. Caso contrário, as imagens serão extraídas mais tarde, através da tarefa agendada de extração de imagens de capítulos, permitindo que a análise regular da biblioteca seja concluída mais rapidamente.", + "LabelExtractChaptersDuringLibraryScan": "Extrair imagens dos capítulos durante a análise da biblioteca", + "LabelBaseUrlHelp": "Adicione um subdiretório personalizado ao URL do servidor. Por exemplo: http://example.com/<baseurl>", + "LabelBaseUrl": "URL Base", "LabelEveryXMinutes": "A cada", "LabelEvent": "Evento", "LabelEpisodeNumber": "Número do episódio", "LabelEnableSingleImageInDidlLimitHelp": "Alguns dispositivos não interpretarão o ficheiro apropriadamente se múltiplas imagens forem incorporadas no DIDL.", "LabelEnableSingleImageInDidlLimit": "Limitar a uma imagem incorporada", - "LabelEnableRealtimeMonitorHelp": "Alterações nos arquivos serão processadas imediatamente em sistemas de arquivos suportados.", - "LabelEnableRealtimeMonitor": "Ativar monitoramento em tempo real", - "LabelEnableHardwareDecodingFor": "Ativar decodificação de hardware para", + "LabelEnableRealtimeMonitorHelp": "As alterações nos arquivos serão processadas imediatamente nos sistemas de arquivos suportados.", + "LabelEnableRealtimeMonitor": "Ativar monitorização em tempo real", + "LabelEnableHardwareDecodingFor": "Ativar descodificação por hardware para", "LabelEnableDlnaServerHelp": "Permite que dispositivos UPnP na rede naveguem e reproduzam conteúdo.", "LabelEnableDlnaServer": "Activar servidor DLNA", "LabelEnableDlnaPlayToHelp": "Detecte dispositivos em sua rede e ofereça a capacidade de controlá-los remotamente.", @@ -327,78 +327,78 @@ "LabelEmbedAlbumArtDidlHelp": "Alguns dispositivos preferem este método para obter a capa do álbum. Outros pode não ser capazes de reproduzir com esta opção activada.", "LabelEmbedAlbumArtDidl": "Incorporar a capa do álbum no DIDL", "LabelEasyPinCode": "Código PIN", - "LabelDynamicExternalId": "{0} Id", - "LabelDropShadow": "Sombra projetada", - "LabelDropImageHere": "Solte a imagem aqui, ou clique para navegar.", - "LabelDownloadLanguages": "Idiomas para download", - "LabelDownMixAudioScaleHelp": "Aumenta o áudio ao fazer downmix. Um valor de um preserva o volume original.", - "LabelDownMixAudioScale": "Aumento de áudio ao fazer downmix", - "LabelDisplaySpecialsWithinSeasons": "Exibir especiais dentro das temporadas em que foram exibidos", - "LabelDisplayOrder": "Ordem de exibição", - "LabelDisplayName": "Nome de exibição", - "LabelDisplayMode": "Modo de exibição", - "LabelDisplayLanguageHelp": "Traduzir o Jellyfin é um projeto em andamento.", - "LabelDisplayLanguage": "Idioma de exibição", + "LabelDynamicExternalId": "{0} ID", + "LabelDropShadow": "Realce", + "LabelDropImageHere": "Arraste a imagem para aqui, ou clique para procurar.", + "LabelDownloadLanguages": "Transferir os idiomas", + "LabelDownMixAudioScaleHelp": "Aumentar o volume de áudio durante o downmix. O valor 1 preserva o volume original.", + "LabelDownMixAudioScale": "Reforço de áudio durante o downmix", + "LabelDisplaySpecialsWithinSeasons": "Mostrar episódios especiais dentro das temporadas em que estrearam", + "LabelDisplayOrder": "Ordem de apresentação", + "LabelDisplayName": "Nome para apresentação", + "LabelDisplayMode": "Modo de apresentação", + "LabelDisplayLanguageHelp": "A tradução do Jellyfin é um projeto em desenvolvimento contínuo.", + "LabelDisplayLanguage": "Idioma", "LabelDiscNumber": "Número do disco", "LabelDidlMode": "Modo DIDL", "LabelDeviceDescription": "Descrição do dispositivo", "LabelDefaultUserHelp": "Determina que biblioteca será apresentada aos dispositivos ligados. Pode ser redefinido para cada dispositivo através de perfis.", "LabelDefaultUser": "Utilizador por omissão", - "LabelDefaultScreen": "Tela padrão", + "LabelDefaultScreen": "Ecrã por omissão", "LabelDeathDate": "Data de falecimento", "LabelRefreshMode": "Modo de atualização", - "LabelRecord": "Gravar", - "LabelPasswordResetProvider": "Provedor de Redefinição de Senha", - "LabelMetadataSaversHelp": "Escolha os formatos de arquivo a serem usados ao salvar seus metadados.", - "LabelMetadataReadersHelp": "Classifique suas fontes de metadados locais preferidas por ordem de prioridade. O primeiro arquivo encontrado será lido.", - "LabelMetadataReaders": "Leitores de metadados", - "LabelMetadataDownloadersHelp": "Ative e classifique seus downloaders de metadados preferidos por ordem de prioridade. Downloaders de prioridade mais baixa serão usados apenas para preencher informações ausentes.", - "LabelLogs": "Logs", - "LabelKodiMetadataUserHelp": "Salvar dados de visualização em arquivos NFO para outros aplicativos usarem.", - "LabelKodiMetadataUser": "Salvar dados de visualização do usuário em arquivos NFO para", - "LabelImageFetchersHelp": "Ative e classifique seus buscadores de imagem preferidos por ordem de prioridade.", + "LabelRecord": "Registo", + "LabelPasswordResetProvider": "Fornecedor de redefinição da palavra-passe", + "LabelMetadataSaversHelp": "Escolhe os formatos de ficheiro a utilizar para guardar os teus metadados.", + "LabelMetadataReadersHelp": "Ordene as fontes locais de metadados por ordem de prioridade. O primeiro ficheiro a ser encontrado será lido.", + "LabelMetadataReaders": "Fornecedores de metadados", + "LabelMetadataDownloadersHelp": "Ativa e ordena os teus fornecedores de metadados preferidos por ordem de prioridade. Os de menor prioridade só serão utilizados para preencher as informações em falta.", + "LabelLogs": "Registos (Logs)", + "LabelKodiMetadataUserHelp": "Guardar dados de utilização em NFO para que outras aplicações os utilizem.", + "LabelKodiMetadataUser": "Guardar dados de utilização em NFO para", + "LabelImageFetchersHelp": "Ativa e ordena os fornecedores de imagens por ordem de preferência.", "Home": "Início", "LabelDay": "Dia da semana", - "LabelDateTimeLocale": "Localidade de data e hora", - "LabelDateAddedBehaviorHelp": "Se um valor de metadado estiver presente, ele será sempre usado antes de qualquer uma dessas opções.", - "LabelDateAddedBehavior": "Comportamento da data adicionada para novos conteúdos", - "LabelDateAdded": "Data adicionada", - "LabelDashboardTheme": "Tema do Painel do Servidor", + "LabelDateTimeLocale": "Formato da data/hora", + "LabelDateAddedBehaviorHelp": "Se um valor de metadados estiver presente, ele sempre será usado antes de qualquer uma dessas opções.", + "LabelDateAddedBehavior": "Comportamento da data de adição para novo conteúdo", + "LabelDateAdded": "Adicionado a", + "LabelDashboardTheme": "Tema do Painel de Controlo", "LabelCustomRating": "Classificação personalizada", - "LabelCustomDeviceDisplayNameHelp": "Forneça um nome de exibição personalizado ou deixe em branco para usar o nome informado pelo dispositivo.", - "LabelCustomCssHelp": "Aplique seu código CSS personalizado para personalização/marcação na interface da web.", - "LabelCustomCss": "Código CSS personalizado", - "LabelCustomCertificatePathHelp": "Caminho para um arquivo PKCS #12 contendo um certificado e uma chave privada para ativar o suporte a TLS em um domínio personalizado.", - "LabelCustomCertificatePath": "Caminho do certificado SSL personalizado", - "LabelCurrentPassword": "Senha atual", + "LabelCustomDeviceDisplayNameHelp": "Forneça um nome a ser mostrado, ou deixe em branco para utilizar o nome reportado pelo dispositivo.", + "LabelCustomCssHelp": "Aplica o teu código CSS personalizado à interface web.", + "LabelCustomCss": "codigo CSS personalizado", + "LabelCustomCertificatePathHelp": "Localização do ficheiro PKCS #12 que contém um certificado e uma chave privada para ativar o suporte TLS num domínio personalizado.", + "LabelCustomCertificatePath": "Localização do certificado SSL personalizado", + "LabelCurrentPassword": "Palavra-passe atual", "LabelCriticRating": "Avaliação da crítica", "LabelCountry": "País/Região", "LabelContentType": "Tipo de conteúdo", - "LabelCommunityRating": "Avaliação da comunidade", + "LabelCommunityRating": "Classificação da comunidade", "LabelCollection": "Coleção", "LabelChannels": "Canais", - "LabelCertificatePasswordHelp": "Se o seu certificado exigir uma senha, insira-a aqui.", - "LabelCertificatePassword": "Senha do certificado", + "LabelCertificatePasswordHelp": "Se o certificado requer uma palavra-passe, escreva-a aqui.", + "LabelCertificatePassword": "Palavra-passe do certificado", "LabelCancelled": "Cancelado", - "LabelCachePathHelp": "Especifique um local personalizado para arquivos de cache do servidor, como imagens. Deixe em branco para usar o padrão do servidor.", - "LabelCachePath": "Caminho do cache", + "LabelCachePathHelp": "Especifica uma localização personalizada para os ficheiros de cache do servidor, como imagens. Deixa em branco para usar a predefinição do servidor.", + "LabelCachePath": "Localização da cache", "LabelCache": "Cache", "LabelBirthDate": "Data de nascimento", - "LabelBindToLocalNetworkAddressHelp": "Substitua o endereço IP local para o servidor HTTP. Se deixado em branco, o servidor será vinculado a todos os endereços disponíveis. Alterar este valor requer uma reinicialização.", - "LabelBindToLocalNetworkAddress": "Vincular ao endereço de rede local", - "LabelAutomaticallyRefreshInternetMetadataEvery": "Atualizar automaticamente metadados da internet a cada", - "LabelAuthProvider": "Provedor de Autenticação", + "LabelBindToLocalNetworkAddressHelp": "Substitua o endereço IP local do servidor HTTP. Se deixado em branco, o servidor se vinculará a todos os endereços disponíveis. Alterar este valor requer um reinício.", + "LabelBindToLocalNetworkAddress": "Endereço local para colocar o servidor à escuta", + "LabelAutomaticallyRefreshInternetMetadataEvery": "Atualizar metadados automaticamente a partir da Internet", + "LabelAuthProvider": "Fornecedor de autenticação", "LabelAudioSampleRate": "Taxa de amostragem de áudio", "LabelAudioLanguagePreference": "Idioma de áudio preferido", "LabelAudioCodec": "Codec de áudio", "LabelAudioChannels": "Canais de áudio", - "LabelAudioBitrate": "Taxa de bits do áudio", - "LabelArtistsHelp": "Separe vários artistas com ponto e vírgula.", + "LabelAudioBitrate": "Taxa de bits de áudio", + "LabelArtistsHelp": "Separe artistas múltiplos com um ponto e vírgula.", "LabelArtists": "Artistas", - "LabelAppNameExample": "Um nome legível para identificar chaves de API. Esta configuração não afetará a funcionalidade.", - "LabelAppName": "Nome do app", - "LabelAllowedRemoteAddressesMode": "Modo de filtro de endereço IP remoto", - "LabelAllowedRemoteAddresses": "Filtro de endereço IP remoto", + "LabelAppNameExample": "Um nome legível por humanos para identificar as chaves da API. Esta definição não afetará a funcionalidade.", + "LabelAppName": "Nome da aplicação", + "LabelAllowedRemoteAddressesMode": "Tipo de filtro de IP remoto", + "LabelAllowedRemoteAddresses": "Filtro de IP remoto", "LabelAllowHWTranscoding": "Permitir transcodificação por hardware", "LabelAlbumArtists": "Artistas do Álbum", "LabelAlbumArtPN": "PN da capa do álbum", @@ -406,27 +406,27 @@ "LabelAlbumArtMaxHeight": "Altura máxima da capa do álbum", "LabelAlbumArtHelp": "PN utilizado para a capa do álbum no atributo dlna:profileID/upnp:albumArtURI. Alguns dispositivos requerem um valor específico, independentemente do tamanho da imagem.", "LabelAlbum": "Álbum", - "LabelAirsBeforeSeason": "Exibe antes da temporada", - "LabelAirsBeforeEpisode": "Exibe antes do episódio", - "LabelAirsAfterSeason": "Exibe após a temporada", - "LabelAirTime": "Horário de exibição", - "LabelAirDays": "Dias de exibição", - "LabelAccessStart": "Hora de início", - "LabelAccessEnd": "Hora de término", + "LabelAirsBeforeSeason": "Estreou antes da temporada", + "LabelAirsBeforeEpisode": "Estreou antes do episódio", + "LabelAirsAfterSeason": "Estreou depois da temporada", + "LabelAirTime": "Horário", + "LabelAirDays": "Dias da Exibição", + "LabelAccessStart": "Hora de Início", + "LabelAccessEnd": "Hora de Fim", "LabelAccessDay": "Dia da semana", - "LabelAbortedByServerShutdown": "(Abortado pelo desligamento do servidor)", + "LabelAbortedByServerShutdown": "(Abortado - Servidor encerrado)", "Label3DFormat": "Formato 3D", "Kids": "Crianças", "Items": "Itens", "ItemCount": "{0} itens", - "InstantMix": "Mistura instantânea", - "InstallingPackage": "Instalando {0} (versão {1})", - "ImportFavoriteChannelsHelp": "Apenas os canais marcados como favoritos no dispositivo sintonizador serão importados.", + "InstantMix": "Mistura instântanea", + "InstallingPackage": "A instalar {0} (version {1})", + "ImportFavoriteChannelsHelp": "Apenas serão importados canais marcados como favoritos no sintonizador.", "Images": "Imagens", "Identify": "Identificar", - "HttpsRequiresCert": "Para habilitar conexões seguras, você precisará fornecer um certificado SSL confiável, como o Let's Encrypt. Por favor, forneça um certificado ou desative as conexões seguras.", + "HttpsRequiresCert": "Para ativares as ligações seguras, terás de fornecer um certificado SSL fiável, como o Let's Encrypt. Caso contrário, desativa as ligações seguras.", "Horizontal": "Horizontal", - "HideWatchedContentFromLatestMedia": "Ocultar conteúdo assistido de 'Mídia Recentemente Adicionada'", + "HideWatchedContentFromLatestMedia": "Ocultar títulos já vistos da secção \"Conteúdo adicionado recentemente\"", "Hide": "Ocultar", "Help": "Ajuda", "HeaderYears": "Anos", @@ -436,1084 +436,1084 @@ "HeaderVideoTypes": "Tipos de Vídeo", "HeaderVideoType": "Tipo de Vídeo", "HeaderVideoQuality": "Qualidade do Vídeo", - "HeaderUsers": "Usuários", - "HeaderUser": "Usuário", + "HeaderUsers": "Utilizadores", + "HeaderUser": "Utilizador", "HeaderUploadImage": "Enviar Imagem", - "HeaderUpcomingOnTV": "Próximos na TV", - "HeaderTypeText": "Inserir Texto", + "HeaderUpcomingOnTV": "A Seguir", + "HeaderTypeText": "Inserir texto", "HeaderTuners": "Sintonizadores", - "HeaderTunerDevices": "Dispositivos Sintonizadores", + "HeaderTunerDevices": "Sintonizadores", "HeaderTranscodingProfileHelp": "Adicionar perfis de transcodificação que indiquem que formatos deverão ser usados quando a transcodificação é necessária.", "HeaderTranscodingProfile": "Perfil da Transcodificação", "HeaderTracks": "Faixas", - "HeaderThisUserIsCurrentlyDisabled": "Este usuário está atualmente desativado", - "HeaderTaskTriggers": "Gatilhos de Tarefa", + "HeaderThisUserIsCurrentlyDisabled": "Este utilizador está atualmente desativado", + "HeaderTaskTriggers": "Tarefas agendadas", "HeaderSystemDlnaProfiles": "Perfis de Sistema", "HeaderSubtitleProfilesHelp": "Os perfis da legenda descrevem os formatos da legenda suportados pelo dispositivo.", "HeaderSubtitleProfiles": "Perfis da Legenda", "HeaderSubtitleProfile": "Perfil da Legenda", - "HeaderSubtitleAppearance": "Aparência da Legenda", - "HeaderStopRecording": "Parar Gravação", - "HeaderStatus": "Status", - "HeaderStartNow": "Iniciar Agora", - "HeaderSpecialEpisodeInfo": "Informações sobre Episódios Especiais", - "HeaderSortOrder": "Ordem de Classificação", - "HeaderSortBy": "Ordenar Por", - "HeaderSetupLibrary": "Configurar suas bibliotecas de mídia", + "HeaderSubtitleAppearance": "Aparência das Legendas", + "HeaderStopRecording": "Parar gravação", + "HeaderStatus": "Estado", + "HeaderStartNow": "Iniciar", + "HeaderSpecialEpisodeInfo": "Informação sobre o episódio especial", + "HeaderSortOrder": "Sequência de ordenação", + "HeaderSortBy": "Ordenar por", + "HeaderSetupLibrary": "Configurar bibliotecas multimédia", "HeaderServerSettings": "Configurações do Servidor", - "HeaderSeriesStatus": "Status da Série", + "HeaderSeriesStatus": "Estado da Série", "HeaderSeriesOptions": "Opções da Série", - "HeaderSendMessage": "Enviar Mensagem", - "HeaderSelectTranscodingPathHelp": "Navegue ou insira o caminho a ser usado para arquivos de transcodificação. A pasta deve ser gravável.", - "HeaderSelectTranscodingPath": "Selecionar Caminho Temporário de Transcodificação", - "HeaderSelectServerCachePathHelp": "Navegue ou insira o caminho a ser usado para arquivos de cache do servidor. A pasta deve ser gravável.", - "HeaderSelectServerCachePath": "Selecionar Caminho do Cache do Servidor", - "HeaderSelectPath": "Selecionar Caminho", - "HeaderSelectMetadataPathHelp": "Navegue ou insira o caminho que deseja usar para os metadados. A pasta deve ser gravável.", - "HeaderSelectMetadataPath": "Selecionar Caminho dos Metadados", - "HeaderSelectCertificatePath": "Selecionar Caminho do Certificado", - "HeaderSecondsValue": "{0} Segundos", + "HeaderSendMessage": "Enviar mensagem", + "HeaderSelectTranscodingPathHelp": "Pesquisa ou introduz a localização que pretendes utilizar para os ficheiros de transcodificação. O servidor requer permissões de escrita nesta pasta.", + "HeaderSelectTranscodingPath": "Seleccione o Local Temporário da Transcodificação", + "HeaderSelectServerCachePathHelp": "Pesquisa ou introduz a localização que pretendes utilizar para os ficheiros de cache do servidor. O servidor requer permissões de escrita nesta pasta.", + "HeaderSelectServerCachePath": "Seleciona a localização da cache do servidor", + "HeaderSelectPath": "Seleciona a localização", + "HeaderSelectMetadataPathHelp": "Pesquisa ou introduz a localização que pretendes utilizar para os metadados. O servidor requer permissões de escrita nesta pasta.", + "HeaderSelectMetadataPath": "Seleciona a localização dos metadados", + "HeaderSelectCertificatePath": "Seleciona a localização do certificado", + "HeaderSecondsValue": "{0} segundos", "HeaderSeasons": "Temporadas", "HeaderScenes": "Cenas", "HeaderRunningTasks": "Tarefas em Execução", - "HeaderRevisionHistory": "Histórico de Revisões", + "HeaderRevisionHistory": "Histórico de Versões", "HeaderResponseProfileHelp": "Os perfis de resposta oferecem uma forma de individualizar a informação enviada para o dispositivo ao executar certos ficheiros multimédia.", "HeaderResponseProfile": "Perfil de Resposta", - "HeaderRemoveMediaLocation": "Remover Local de Mídia", - "HeaderRemoveMediaFolder": "Remover Pasta de Mídia", - "HeaderRemoteControl": "Controle Remoto", - "HeaderRecordingPostProcessing": "Pós-processamento de Gravação", - "HeaderRecordingOptions": "Opções de Gravação", - "HeaderRecentlyPlayed": "Reproduzidos Recentemente", + "HeaderRemoveMediaLocation": "Remover Localização dos ficheiros multimédia", + "HeaderRemoveMediaFolder": "Excluir Pasta Multimédia", + "HeaderRemoteControl": "Telecomando", + "HeaderRecordingPostProcessing": "Pós-processamento de gravação", + "HeaderRecordingOptions": "Opções de gravação", + "HeaderRecentlyPlayed": "Reproduzido Recentemente", "HeaderProfileServerSettingsHelp": "Estes campos controlam como o servidor se apresenta aos clientes.", "HeaderProfileInformation": "Informação do Perfil", - "HeaderPreferredMetadataLanguage": "Idioma de Metadados Preferido", + "HeaderPreferredMetadataLanguage": "Idioma Preferido dos Metadados", "HeaderPluginInstallation": "Instalar Extensão", - "HeaderPleaseSignIn": "Por favor, faça login", - "HeaderPlaybackError": "Erro de Reprodução", - "HeaderPlayback": "Reprodução de Mídia", - "HeaderPlayOn": "Reproduzir Em", - "HeaderPlayAll": "Reproduzir Tudo", + "HeaderPleaseSignIn": "Iniciar sessão", + "HeaderPlaybackError": "Erro na reprodução", + "HeaderPlayback": "Reprodução de multimédia", + "HeaderPlayOn": "Reproduzir em", + "HeaderPlayAll": "Reproduzir tudo", "HeaderPinCodeReset": "Redefinir Código PIN", - "HeaderPhotoAlbums": "Álbuns de Fotos", - "HeaderPaths": "Caminhos", - "HeaderPasswordReset": "Redefinição de Senha", - "HeaderPassword": "Senha", - "HeaderParentalRatings": "Classificações dos Pais", - "HeaderOtherItems": "Outros Itens", - "HeaderOnNow": "Agora", - "HeaderNextVideoPlayingInValue": "Próximo Vídeo Tocando em {0}", - "HeaderNextEpisodePlayingInValue": "Próximo Episódio Tocando em {0}", - "HeaderNewDevices": "Novos Dispositivos", - "HeaderNewApiKey": "Nova Chave da API", - "HeaderMyMediaSmall": "Minha Mídia (pequeno)", - "HeaderMyMedia": "Minha Mídia", + "HeaderPhotoAlbums": "Álbuns de fotografias", + "HeaderPaths": "Localizações", + "HeaderPasswordReset": "Redefinição de palavra-passe", + "HeaderPassword": "Palavra-passe", + "HeaderParentalRatings": "Classificações etárias", + "HeaderOtherItems": "Outros itens", + "HeaderOnNow": "No ar", + "HeaderNextVideoPlayingInValue": "O próximo vídeo começa dentro de {0}", + "HeaderNextEpisodePlayingInValue": "O próximo episódio começa dentro de {0}", + "HeaderNewDevices": "Novos dispositivos", + "HeaderNewApiKey": "Nova chave API", + "HeaderMyMediaSmall": "O meu conteúdo (pequeno)", + "HeaderMyMedia": "O meu conteúdo", "HeaderMyDevice": "O meu dispositivo", - "HeaderMusicQuality": "Qualidade da Música", - "HeaderMoreLikeThis": "Mais Como Isso", - "HeaderMetadataSettings": "Configurações de Metadados", - "HeaderMediaFolders": "Pastas de Mídia", - "HeaderMedia": "Mídia", - "HeaderLiveTvTunerSetup": "Configuração do Sintonizador de TV Ao Vivo", - "HeaderLibrarySettings": "Configurações da Biblioteca", - "HeaderLibraryOrder": "Ordem da Biblioteca", - "HeaderLibraryFolders": "Pastas da Biblioteca", - "HeaderLibraryAccess": "Acesso à Biblioteca", + "HeaderMusicQuality": "Qualidade da música", + "HeaderMoreLikeThis": "Títulos semelhantes", + "HeaderMetadataSettings": "Definições de metadados", + "HeaderMediaFolders": "Pastas Multimédia", + "HeaderMedia": "Multimédia", + "HeaderLiveTvTunerSetup": "Configurar Sintonizador de TV", + "HeaderLibrarySettings": "Definições da biblioteca", + "HeaderLibraryOrder": "Ordenação da Biblioteca", + "HeaderLibraryFolders": "Pastas Multimédia", + "HeaderLibraryAccess": "Acesso à biblioteca", "HeaderLibraries": "Bibliotecas", - "HeaderLatestRecordings": "Gravações Recentemente Adicionadas", - "HeaderLatestMusic": "Músicas Recentemente Adicionadas", - "HeaderLatestMovies": "Filmes Recentemente Adicionados", - "HeaderLatestMedia": "Mídia Recentemente Adicionada", - "HeaderLatestEpisodes": "Episódios Recentemente Adicionados", + "HeaderLatestRecordings": "Gravações adicionadas recentemente", + "HeaderLatestMusic": "Músicas adicionadas recentemente", + "HeaderLatestMovies": "Filmes adicionados recentemente", + "HeaderLatestMedia": "Conteúdo adicionado recentemente", + "HeaderLatestEpisodes": "Episódios adicionados recentemente", "HeaderKeepSeries": "Manter Série", - "HeaderKeepRecording": "Manter Gravação", - "HeaderInstantMix": "Mistura Instantânea", + "HeaderKeepRecording": "Continuar a gravar", + "HeaderInstantMix": "Mistura instantânea", "HeaderInstall": "Instalar", "HeaderImageSettings": "Configurações de Imagem", "HeaderImageOptions": "Opções de Imagem", - "HeaderIdentifyItemHelp": "Insira um ou mais critérios de pesquisa. Remova critérios para aumentar os resultados da pesquisa.", + "HeaderIdentifyItemHelp": "Introduz um ou mais critérios de pesquisa. Remove os critérios para aumentar os resultados da pesquisa.", "HeaderIdentificationHeader": "Cabeçalho de Identificação", "HeaderIdentificationCriteriaHelp": "Introduza, pelo menos, um critério de identificação.", "HeaderIdentification": "Identificação", "HeaderHttpHeaders": "Cabeçalhos HTTP", - "HeaderGuideProviders": "Provedores de Dados da Guia de TV", - "HeaderDeleteTaskTrigger": "Excluir Gatilho da Tarefa", - "HeaderBranding": "Branding", - "HeaderFrequentlyPlayed": "Reproduzidos com Frequência", - "HeaderForKids": "Para Crianças", - "HeaderFetchImages": "Buscar Imagens", + "HeaderGuideProviders": "Fornecedores de Guia TV", + "HeaderDeleteTaskTrigger": "Remover tarefa agendada", + "HeaderBranding": "Marca", + "HeaderFrequentlyPlayed": "Reproduzido Frequentemente", + "HeaderForKids": "Para crianças", + "HeaderFetchImages": "Procurar Imagens", "OptionDownloadImagesInAdvanceHelp": "Por omissão, a maioria das imagens são transferidas apenas quando uma aplicação do Jellyfin as solicita. Active esta opção para descarregar todas as imagens antecipadamente, assim que novos ficheiros multimédia sejam importados. Isto pode aumentar significativamente a duração da análise da biblioteca.", "OptionDownloadImagesInAdvance": "Transferir imagens antecipadamente", "OptionDislikes": "Não gostos", - "OptionDisableUserHelp": "O servidor não permitirá conexões deste usuário. Conexões existentes serão encerradas abruptamente.", - "OptionDisableUser": "Desativar este usuário", - "OptionDatePlayed": "Data Reproduzida", - "OptionDateAddedImportTime": "Usar data escaneada na biblioteca", - "OptionDateAddedFileTime": "Usar data de criação do arquivo", - "OptionDateAdded": "Data Adicionada", + "OptionDisableUserHelp": "O servidor não permitirá nenhuma conexão deste usuário. As conexões existentes serão encerradas abruptamente.", + "OptionDisableUser": "Desativar este utilizador", + "OptionDatePlayed": "Data de reprodução", + "OptionDateAddedImportTime": "Utilizar a data da análise para a biblioteca", + "OptionDateAddedFileTime": "Usar a data de criação do ficheiro", + "OptionDateAdded": "Data de adição", "OptionDaily": "Diariamente", "OptionCustomUsers": "Personalizado", - "OptionCriticRating": "Avaliação da Crítica", - "OptionCommunityRating": "Avaliação da Comunidade", - "OptionAllowVideoPlaybackTranscoding": "Permitir reprodução de vídeo que requer transcodificação", - "OptionAllowUserToManageServer": "Permitir que este usuário gerencie o servidor", - "OptionAllowRemoteSharedDevicesHelp": "Dispositivos DLNA são considerados compartilhados até que um usuário comece a controlá-los.", - "OptionAllowRemoteSharedDevices": "Permitir controle remoto de dispositivos compartilhados", - "MessageConfirmDeleteTunerDevice": "Tem certeza de que deseja excluir este dispositivo?", - "MapChannels": "Mapear Canais", - "ManageLibrary": "Gerenciar biblioteca", + "OptionCriticRating": "Classificação dos críticos", + "OptionCommunityRating": "Classificação da comunidade", + "OptionAllowVideoPlaybackTranscoding": "Permitir reprodução de vídeo que necessite de transcodificação", + "OptionAllowUserToManageServer": "Permitir a este utilizador gerir o servidor", + "OptionAllowRemoteSharedDevicesHelp": "Dispositivos DLNA são considerados partilhados até que um utilizador comece a controlá-lo.", + "OptionAllowRemoteSharedDevices": "Permitir controlo remoto de dispositivos partilhados", + "MessageConfirmDeleteTunerDevice": "Tem a certeza que deseja remover este dispositivo?", + "MapChannels": "Mapear canais", + "ManageLibrary": "Gerir biblioteca", "LabelSize": "Tamanho", - "LabelPlayDefaultAudioTrack": "Reproduzir faixa de áudio padrão, independentemente do idioma", + "LabelPlayDefaultAudioTrack": "Reproduzir a faixa de áudio predefinida independentemente do idioma", "LabelPlaceOfBirth": "Local de nascimento", - "OptionAllowRemoteControlOthers": "Permitir controle remoto de outros usuários", - "OptionAllowMediaPlaybackTranscodingHelp": "Restringir o acesso à transcodificação pode causar falhas na reprodução em clientes devido a formatos de mídia não suportados.", - "OptionAllowMediaPlayback": "Permitir reprodução de mídia", - "OptionAllowManageLiveTv": "Permitir gerenciamento de gravações da TV Ao Vivo", - "OptionAllowLinkSharing": "Permitir compartilhamento em redes sociais", + "OptionAllowRemoteControlOthers": "Permitir controlo remoto de outros utilizadores", + "OptionAllowMediaPlaybackTranscodingHelp": "Restringir o acesso à transcodificação pode causar falhas de reprodução em clientes devido a formatos de mídia não suportados.", + "OptionAllowMediaPlayback": "Permitir reprodução de multimédia", + "OptionAllowManageLiveTv": "Permitir gestão de gravações de TV em Direto", + "OptionAllowLinkSharing": "Permitir partilha nas redes sociais", "OptionAllowContentDownloading": "Permitir download dos ficheiros multimédia", - "OptionAllowBrowsingLiveTv": "Permitir acesso à TV Ao Vivo", - "OptionAllowAudioPlaybackTranscoding": "Permitir transcodificação de reprodução de áudio", + "OptionAllowBrowsingLiveTv": "Permitir acesso a TV em Directo", + "OptionAllowAudioPlaybackTranscoding": "Permitir reprodução de áudio que necessite transcodificação", "OptionAllUsers": "Todos os utilizadores", "OptionAdminUsers": "Administradores", "OneChannel": "Um canal", - "MessageNoPluginConfiguration": "Este plugin não possui configurações para serem definidas.", - "MessageNoNextUpItems": "Nenhum encontrado. Comece a assistir seus programas!", + "MessageNoPluginConfiguration": "Esta extensão não tem definições que possas alterar.", + "MessageNoNextUpItems": "Nenhum encontrado. Comece a ver os seus programas!", "News": "Notícias", - "NewCollectionNameExample": "Exemplo: Coleção Star Wars", - "NewCollection": "Nova Coleção", - "Mute": "Silenciar", + "NewCollectionNameExample": "Exemplo: Coleção Guerra das Estrelas", + "NewCollection": "Nova coleção", + "Mute": "Desativar som", "Movies": "Filmes", - "MoreUsersCanBeAddedLater": "Mais usuários podem ser adicionados depois, a partir do Painel.", - "Monday": "Segunda-feira", + "MoreUsersCanBeAddedLater": "É possível adicionar utilizadores posteriormente através do Painel de Controlo.", + "Monday": "Segunda", "MinutesBefore": "minutos antes", - "MinutesAfter": "minutos após", - "MessageUnableToConnectToServer": "Não conseguimos conectar ao servidor selecionado no momento. Por favor, certifique-se de que ele está em execução e tente novamente.", - "MessageTheFollowingLocationWillBeRemovedFromLibrary": "A seguinte localização de mídia será removida da sua biblioteca", - "MessageReenableUser": "Veja abaixo para reativar", - "MessagePluginInstallDisclaimer": "ATENÇÃO: Instalar um plugin de terceiros envolve riscos. Ele pode conter código instável ou malicioso, e pode mudar a qualquer momento. Instale apenas plugins de autores confiáveis e esteja ciente dos efeitos potenciais, incluindo consultas a serviços externos, verificações de biblioteca mais longas ou processamento adicional em segundo plano.", - "MessagePluginConfigurationRequiresLocalAccess": "Para configurar este plugin, faça login diretamente no seu servidor local.", - "MessagePleaseEnsureInternetMetadata": "Por favor, assegure-se de que o download de metadados da internet está ativado.", - "MessagePasswordResetForUsers": "Os seguintes usuários tiveram suas senhas redefinidas. Eles agora podem fazer login com os códigos PIN que foram usados para realizar a redefinição.", + "MinutesAfter": "minutos depois", + "MessageUnableToConnectToServer": "Não foi possível estabelecer ligação ao servidor. Por favor, certifique-se que o servidor está a correr e tente de novo.", + "MessageTheFollowingLocationWillBeRemovedFromLibrary": "As seguintes pastas multimédia serão removidas da tua biblioteca", + "MessageReenableUser": "Vê abaixo para reativar", + "MessagePluginInstallDisclaimer": "AVISO: Instalar uma extensão de terceiros implica riscos. Pode conter código instável ou malicioso e pode ser alterada a qualquer momento. Instala apenas extensões de autores em quem confies e está atento aos possíveis efeitos, incluindo consultas a serviços externos, análises da biblioteca mais longas ou processamento adicional em segundo plano.", + "MessagePluginConfigurationRequiresLocalAccess": "Para configurar esta extensão, inicia sessão localmente no servidor.", + "MessagePleaseEnsureInternetMetadata": "Certifique-se de que a transferência de metadados da Internet está ativada.", + "MessagePasswordResetForUsers": "Os seguintes utilizadores tiveram as suas palavras-passe redefinidas. Podem agora iniciar sessão com os códigos PIN que foram utilizados para efetuar a redefinição.", "MessageNothingHere": "Nada aqui.", "MessageNoTrailersFound": "Instale o canal de trailers para aprimorar sua experiência de cinema, adicionando uma biblioteca de trailers da Internet.", - "MessageNoPluginsInstalled": "Você não tem plugins instalados.", - "MessageNoMovieSuggestionsAvailable": "Nenhuma sugestão de filme disponível no momento. Comece a assistir e avaliar seus filmes, e então volte para ver suas recomendações.", - "MessageNoAvailablePlugins": "Nenhum plugin disponível.", - "MessageLeaveEmptyToInherit": "Deixe em branco para herdar as configurações de um item pai ou o valor padrão global.", + "MessageNoPluginsInstalled": "Não existe nenhuma extensão instalada.", + "MessageNoMovieSuggestionsAvailable": "De momento, não existem sugestões de filmes disponíveis. Veja filmes e avalie-os, e regresse para ver as suas recomendações.", + "MessageNoAvailablePlugins": "Não existem extensões disponíveis.", + "MessageLeaveEmptyToInherit": "Deixa em branco para herdar as definições de um item pai ou do valor predefinido global.", "MessageItemsAdded": "Itens adicionados.", - "MessageItemSaved": "Item salvo.", - "MessageInvalidUser": "Nome de usuário ou senha inválidos. Por favor, tente novamente.", - "MessageInvalidForgotPasswordPin": "Um código PIN inválido ou expirado foi inserido. Por favor, tente novamente.", - "MessageImageTypeNotSelected": "Por favor, selecione um tipo de imagem no menu suspenso.", - "MessageImageFileTypeAllowed": "Apenas arquivos JPEG e PNG são suportados.", - "MessageForgotPasswordInNetworkRequired": "Por favor, tente novamente dentro da sua rede doméstica para iniciar o processo de redefinição de senha.", - "MessageForgotPasswordFileCreated": "O seguinte arquivo foi criado em seu servidor e contém instruções sobre como proceder", - "MessageFileReadError": "Ocorreu um erro ao ler o arquivo. Por favor, tente novamente.", - "MessageEnablingOptionLongerScans": "Ativar esta opção pode resultar em verificações de biblioteca significativamente mais longas.", - "MessageDownloadQueued": "Download na fila.", - "MessageDirectoryPickerLinuxInstruction": "Para Linux em Arch Linux, CentOS, Debian, Fedora, openSUSE ou Ubuntu, você deve conceder ao usuário do serviço pelo menos acesso de leitura aos seus locais de armazenamento.", - "MessageDirectoryPickerBSDInstruction": "Para BSD, pode ser necessário configurar o armazenamento dentro do 'FreeNAS Jail' para que o Jellyfin possa acessar sua mídia.", - "MessageDeleteTaskTrigger": "Tem certeza de que deseja excluir este gatilho de tarefa?", + "MessageItemSaved": "Item guardado.", + "MessageInvalidUser": "Nome de utilizador ou palavra-passe inválidos. Por favor, tenta novamente.", + "MessageInvalidForgotPasswordPin": "Introduziste um código PIN inválido ou expirado. Tenta novamente.", + "MessageImageTypeNotSelected": "Por favor, seleccione um tipo de imagem da lista.", + "MessageImageFileTypeAllowed": "Apenas são suportados ficheiros JPEG ou PNG.", + "MessageForgotPasswordInNetworkRequired": "Por favor, volte a tentar o processo de redefinição de palavra-passe quando se encontrar dentro da sua rede local.", + "MessageForgotPasswordFileCreated": "Foi criado no servidor o ficheiro abaixo que contém instruções de como prosseguir", + "MessageFileReadError": "Ocorreu um erro ao ler este ficheiro.", + "MessageEnablingOptionLongerScans": "Ativar esta opção pode prolongar significativamente o tempo das análises da biblioteca.", + "MessageDownloadQueued": "Transferência pendente.", + "MessageDirectoryPickerLinuxInstruction": "Em sistemas operativos como Arch Linux, CentOS, Debian, Fedora, OpenSuse ou Ubuntu, é necessário dar permissão ao utilizador que executa o processo Jellyfin para ter, no mínimo, acesso de leitura à pasta.", + "MessageDirectoryPickerBSDInstruction": "Para BSD, você talvez precise configurar o armazenamento em seu FreeNAS Jail para que o Jellyfin possa acessar sua mídia.", + "MessageDeleteTaskTrigger": "Tem a certeza que deseja remover o agendamento desta tarefa?", "MessageCreateAccountAt": "Criar uma conta em {0}", - "MessageContactAdminToResetPassword": "Por favor, entre em contato com o administrador do sistema para redefinir sua senha.", - "MessageConfirmShutdown": "Tem certeza de que deseja desligar o servidor?", - "MessageConfirmRevokeApiKey": "Tem certeza de que deseja revogar esta chave da API? A conexão do aplicativo com este servidor será encerrada abruptamente.", + "MessageContactAdminToResetPassword": "Contacte o administrador do sistema para redefinir a sua palavra-passe.", + "MessageConfirmShutdown": "Tem a certeza que deseja encerrar o servidor?", + "MessageConfirmRevokeApiKey": "Tem certeza de que deseja revogar esta chave de API? A conexão do aplicativo com este servidor será encerrada abruptamente.", "MessageConfirmRestart": "Tem certeza de que deseja reiniciar o Jellyfin?", - "MessageConfirmRemoveMediaLocation": "Tem certeza de que deseja remover este local?", - "MessageConfirmRecordingCancellation": "Cancelar gravação?", + "MessageConfirmRemoveMediaLocation": "Tem a certeza que deseja remover esta localização?", + "MessageConfirmRecordingCancellation": "Cancelar a gravação?", "MessageConfirmProfileDeletion": "Tem a certeza de que deseja remover este perfil?", - "MessageConfirmDeleteGuideProvider": "Tem certeza de que deseja excluir este provedor de guia?", - "MessageAreYouSureYouWishToRemoveMediaFolder": "Tem certeza de que deseja remover esta pasta de mídia?", - "MessageAreYouSureDeleteSubtitles": "Tem certeza de que deseja excluir este arquivo de legenda?", + "MessageConfirmDeleteGuideProvider": "Tem a certeza de que pretende eliminar este fornecedor de programação de TV?", + "MessageAreYouSureYouWishToRemoveMediaFolder": "Tem a certeza de que deseja remover esta pasta?", + "MessageAreYouSureDeleteSubtitles": "Tem a certeza que deseja remover este ficheiro de legendas?", "MessageAlreadyInstalled": "Esta versão já se encontra instalada.", "Menu": "Menu", - "MediaIsBeingConverted": "A mídia está sendo convertida para um formato compatível com o dispositivo que está reproduzindo a mídia.", - "MediaInfoTimestamp": "Timestamp", + "MediaIsBeingConverted": "O conteúdo está a ser convertido para um formato compatível com o dispositivo em que o está a reproduzir.", + "MediaInfoTimestamp": "Data e Hora", "MediaInfoSize": "Tamanho", "MediaInfoSampleRate": "Taxa de amostragem", "MediaInfoResolution": "Resolução", "MediaInfoProfile": "Perfil", - "MediaInfoPixelFormat": "Formato de pixel", + "MediaInfoPixelFormat": "Formato dos píxeis", "MediaInfoPath": "Caminho", "MediaInfoLevel": "Nível", "MediaInfoChannels": "Canais", - "MaxParentalRatingHelp": "Conteúdo com uma classificação mais alta será ocultado deste usuário.", - "MarkUnplayed": "Marcar como não reproduzido", - "MarkPlayed": "Marcar como reproduzido", - "LiveTV": "TV Ao Vivo", - "LiveBroadcasts": "Transmissões ao vivo", - "Live": "Ao Vivo", - "LibraryAccessHelp": "Selecione as bibliotecas para compartilhar com este usuário. Administradores poderão editar todas as pastas usando o gerenciador de metadados.", - "LatestFromLibrary": "Recentemente Adicionado em {0}", + "MaxParentalRatingHelp": "O conteúdo com uma classificação etária mais elevada será ocultado a este utilizador.", + "MarkUnplayed": "Marcar como não visto", + "MarkPlayed": "Marcar como visto", + "LiveTV": "TV em Directo", + "LiveBroadcasts": "Emissões em Directo", + "Live": "Em Directo", + "LibraryAccessHelp": "Seleciona as bibliotecas a partilhar com este utilizador. Os administradores poderão editar todas as pastas utilizando o gestor de metadados.", + "LatestFromLibrary": "Adicionado recentemente em {0}", "LabelZipCode": "Código Postal", - "LabelYoureDone": "Você Concluiu!", + "LabelYoureDone": "Concluiu!", "LabelXDlnaDocHelp": "Determina o conteúdo do elemento X_DLNADOC no namespace urn:schemas-dlna-org:device-1-0.", "LabelXDlnaCapHelp": "Determina o conteúdo do elemento X_DLNACAP no namespace urn:schemas-dlna-org:device-1-0.", - "LabelVersionInstalled": "{0} instalada", + "LabelVersionInstalled": "{0} instalado", "LabelValue": "Valor", - "LabelUsername": "Nome de usuário", - "LabelUserRemoteClientBitrateLimitHelp": "Substitua o valor global padrão definido nas configurações do servidor, veja Painel > Reprodução > Streaming.", + "LabelUsername": "Nome de utilizador", + "LabelUserRemoteClientBitrateLimitHelp": "Esta opção substituirá o valor predefinido do servidor, definido no Painel de Controlo > Reprodução > Transmissão.", "LabelUserLibraryHelp": "Seleccione a biblioteca de utilizador a mostrar no dispositivo. Deixe em branco para herdar a definição padrão.", "LabelUserLibrary": "Biblioteca do Utilizador", - "LabelUser": "Usuário", + "LabelUser": "Utilizador", "LabelUseNotificationServices": "Usar os seguintes serviços", "LabelTypeText": "Texto", "LabelType": "Tipo", - "LabelTunerType": "Tipo de sintonizador", - "LabelTunerIpAddress": "Endereço IP do Sintonizador", - "LabelTriggerType": "Tipo de gatilho", - "LabelTranscodingThreadCountHelp": "Selecione o número máximo de threads a serem usadas durante a transcodificação. Reduzir a contagem de threads diminuirá o uso da CPU, mas pode não converter rápido o suficiente para uma experiência de reprodução suave.", - "LabelTranscodingThreadCount": "Contagem de threads da transcodificação", - "LabelTranscodingTempPathHelp": "Especifique um caminho personalizado para os arquivos de transcodificação servidos aos clientes. Deixe em branco para usar o padrão do servidor.", + "LabelTunerType": "Tipo do sintonizador", + "LabelTunerIpAddress": "Endereço IP do sintonizador", + "LabelTriggerType": "Tipo do Accionador", + "LabelTranscodingThreadCountHelp": "Seleciona o número máximo de processos a utilizar durante a transcodificação. Reduzir o número de processos diminuirá a utilização do CPU, mas pode não converter com rapidez suficiente para uma experiência de reprodução suave.", + "LabelTranscodingThreadCount": "Número de processos de transcodificação", + "LabelTranscodingTempPathHelp": "Especifica um caminho personalizado para os ficheiros transcodificados enviados aos clientes, ou deixa em branco para utilizar o caminho predefinido do servidor.", "LabelTimeLimitHours": "Limite de tempo (horas)", - "LabelTime": "Hora", - "LabelTextSize": "Tamanho do texto", - "LabelTagline": "Tagline", + "LabelTime": "Tempo", + "LabelTextSize": "Tamanho do Texto", + "LabelTagline": "Slogan", "LabelSupportedMediaTypes": "Tipos de Conteúdos Suportados", - "LabelSubtitlePlaybackMode": "Modo de legenda", + "LabelSubtitlePlaybackMode": "Modo de legendas", "LabelSubtitleFormatHelp": "Exemplo: srt", - "LabelStopping": "Parando", - "LabelStopWhenPossible": "Parar quando possível", - "LabelStatus": "Status", - "LabelStartWhenPossible": "Iniciar quando possível", + "LabelStopping": "A parar", + "LabelStopWhenPossible": "Parar, quando possível", + "LabelStatus": "Estado", + "LabelStartWhenPossible": "Começar, quando possível", "LabelSource": "Fonte", "LabelSonyAggregationFlagsHelp": "Determina o conteúdo do elemento aggregationFlags no namespace urn:schemas-sonycom:av.", "LabelSonyAggregationFlags": "Marcas de agregação da Sony", - "LabelSkipIfGraphicalSubsPresentHelp": "Manter versões de texto das legendas resultará em entrega mais eficiente e diminuirá a probabilidade de transcodificação de vídeo.", - "LabelSkipIfGraphicalSubsPresent": "Pular se o vídeo já contiver legendas embutidas", - "LabelSkipIfAudioTrackPresentHelp": "Desmarque isso para garantir que todos os vídeos tenham legendas, independentemente do idioma do áudio.", - "LabelSkipIfAudioTrackPresent": "Pular se a faixa de áudio padrão corresponder ao idioma de download", - "LabelSkipForwardLength": "Duração do avanço", - "LabelSkipBackLength": "Duração do retrocesso", - "LabelSimultaneousConnectionLimit": "Limite de streams simultâneos", + "LabelSkipIfGraphicalSubsPresentHelp": "Manter versões em texto das legendas resultará numa transmissão mais eficiente e diminuirá a necessidade de transcodificação de vídeo.", + "LabelSkipIfGraphicalSubsPresent": "Ignorar se o vídeo já possuir legendas integradas", + "LabelSkipIfAudioTrackPresentHelp": "Desmarque esta opção para garantir que todos os vídeos têm legendas, independentemente do idioma do áudio.", + "LabelSkipIfAudioTrackPresent": "Ignorar no caso de o idioma da faixa de áudio principal coincidir com o idioma de transferência", + "LabelSkipForwardLength": "Avançar reprodução (segundos)", + "LabelSkipBackLength": "Recuar reprodução (segundos)", + "LabelSimultaneousConnectionLimit": "Limite de transmissões simultâneas", "LabelServerName": "Nome do servidor", - "LabelServerHostHelp": "192.168.1.100:8096 ou https://meuservidor.com", - "LabelServerHost": "Host", - "LabelSeriesRecordingPath": "Caminho de gravação da série", + "LabelServerHostHelp": "192.168.1.100:8096 ou https://omeudominio.com", + "LabelServerHost": "Servidor", + "LabelSeriesRecordingPath": "Localização para gravação de séries", "LabelSerialNumber": "Número de série", "LabelSendNotificationToUsers": "Enviar notificação para", - "LabelSelectVersionToInstall": "Selecionar versão para instalar", + "LabelSelectVersionToInstall": "Seleciona a versão a instalar", "LabelSelectUsers": "Seleccionar utilizadores", - "LabelSelectFolderGroupsHelp": "Pastas que não estão marcadas serão exibidas sozinhas em sua própria visualização.", - "LabelSelectFolderGroups": "Agrupar automaticamente o conteúdo das seguintes pastas em visualizações como 'Filmes', 'Música' e 'TV'", + "LabelSelectFolderGroupsHelp": "Pastas não selecionadas serão apresentadas sozinhas, na sua própria vista.", + "LabelSelectFolderGroups": "Agrupar automaticamente o conteúdo das pastas seguintes em vistas como Filmes, Música e TV", "LabelSeasonNumber": "Número da temporada", - "LabelScreensaver": "Protetor de tela", - "LabelScheduledTaskLastRan": "Última execução {0}, levando {1}.", - "HeaderFeatureAccess": "Acesso a Recursos", + "LabelScreensaver": "Proteção de ecrã", + "LabelScheduledTaskLastRan": "Última execução {0}. Tempo de execução {1}.", + "HeaderFeatureAccess": "Acesso a funcionalidades", "HeaderExternalIds": "IDs Externos", "HeaderError": "Erro", - "HeaderEnabledFieldsHelp": "Desmarque um campo para bloqueá-lo e impedir que seus dados sejam alterados.", - "HeaderEnabledFields": "Campos Ativados", - "HeaderEditImages": "Editar Imagens", + "HeaderEnabledFieldsHelp": "Desmarque um campo para bloqueá-lo e evitar que os seus dados sejam alterados.", + "HeaderEnabledFields": "Campos ativados", + "HeaderEditImages": "Editar imagens", "HeaderEasyPinCode": "Código PIN", - "HeaderDownloadSync": "Baixar & Sincronizar", + "HeaderDownloadSync": "Transferência e Sincronização", "HeaderDirectPlayProfileHelp": "Adicionar perfis de reprodução directa que indiquem que formatos o dispositivo pode suportar nativamente.", "HeaderDirectPlayProfile": "Perfil da Reprodução Directa", "HeaderDevices": "Dispositivos", "HeaderDeviceAccess": "Acesso ao Dispositivo", - "HeaderDeveloperInfo": "Informações do Desenvolvedor", - "HeaderDetectMyDevices": "Detectar Meus Dispositivos", - "HeaderDeleteProvider": "Excluir Provedor", - "HeaderDeleteItems": "Excluir Itens", + "HeaderDeveloperInfo": "Informação do programador", + "HeaderDetectMyDevices": "Detetar os meus dispositivos", + "HeaderDeleteProvider": "Eliminar fornecedor", + "HeaderDeleteItems": "Remover Itens", "Filters": "Filtros", - "FileReadError": "Ocorreu um erro ao ler o arquivo.", - "FileReadCancelled": "A leitura do arquivo foi cancelada.", - "FileNotFound": "Arquivo não encontrado.", - "File": "Arquivo", - "Features": "Recursos", + "FileReadError": "Ocorreu um erro ao ler o ficheiro.", + "FileReadCancelled": "A leitura do ficheiro foi cancelada.", + "FileNotFound": "Ficheiro não encontrado.", + "File": "Ficheiro", + "Features": "Funcionalidades", "Favorites": "Favoritos", "Favorite": "Favorito", - "FastForward": "Avançar", - "FFmpegSavePathNotFound": "Não conseguimos encontrar o FFmpeg usando o caminho informado. O FFprobe também é necessário e deve existir na mesma pasta. Esses componentes normalmente vêm juntos no mesmo download. Verifique o caminho e tente novamente.", + "FastForward": "Avanço rápido", + "FFmpegSavePathNotFound": "Não conseguimos encontrar o FFmpeg na localização que introduziste. O FFprobe também é necessário e deve estar na mesma pasta. Estes componentes são, por norma, instalados em conjunto. Por favor, verifica a localização e tenta novamente.", "Extras": "Extras", - "ExtractChapterImagesHelp": "Extrair imagens de capítulos permitirá que os clientes exibam menus gráficos de seleção de cenas. O processo pode ser lento, intensivo em recursos e pode exigir vários gigabytes de espaço. Ele é executado quando os vídeos são descobertos e também como uma tarefa agendada noturna. O agendamento é configurável na área de tarefas agendadas. Não é recomendável executar essa tarefa durante horários de pico.", + "ExtractChapterImagesHelp": "Extrair imagens dos capítulos permite aos clientes apresentar menus de seleção de cenas com gráficos. O processo poderá ser lento e exigente em recursos, bem como ocupar múltiplos gigabytes em disco. Este processo é executado quando novos vídeos são encontrados e também através de uma tarefa agendada noturna. É possível configurar a hora de execução para que, idealmente, não coincida com horas de maior utilização.", "ExtraLarge": "Extra Grande", - "ExitFullscreen": "Sair da tela cheia", + "ExitFullscreen": "Sair do ecrã inteiro", "EveryNDays": "A cada {0} dias", - "ErrorSavingTvProvider": "Ocorreu um erro ao salvar o provedor de TV. Verifique se ele está acessível e tente novamente.", - "ErrorPleaseSelectLineup": "Por favor, selecione uma programação e tente novamente. Se nenhuma programação estiver disponível, verifique se seu nome de usuário, senha e código postal estão corretos.", - "ErrorStartHourGreaterThanEnd": "A hora de término deve ser maior que a hora de início.", - "ErrorGettingTvLineups": "Ocorreu um erro ao baixar as programações de TV. Verifique se suas informações estão corretas e tente novamente.", - "ErrorDeletingItem": "Ocorreu um erro ao excluir o item do servidor. Verifique se o Jellyfin tem acesso de gravação à pasta de mídia e tente novamente.", - "ErrorAddingXmlTvFile": "Ocorreu um erro ao acessar o arquivo XMLTV. Verifique se o arquivo existe e tente novamente.", - "ErrorAddingTunerDevice": "Ocorreu um erro ao adicionar o dispositivo sintonizador. Verifique se ele está acessível e tente novamente.", - "ErrorAddingMediaPathToVirtualFolder": "Ocorreu um erro ao adicionar o caminho da mídia. Verifique se o caminho é válido e se o Jellyfin tem acesso a esse local.", + "ErrorSavingTvProvider": "Ocorreu um erro ao guardar o fornecedor de televisão. Certifique-se de que está acessível e tente novamente.", + "ErrorPleaseSelectLineup": "Seleciona a programação e tenta novamente. Se não houver programações disponíveis, verifica se o teu nome de utilizador, palavra-passe e código postal estão corretos.", + "ErrorStartHourGreaterThanEnd": "A hora de fim deve ser superior à hora de início.", + "ErrorGettingTvLineups": "Ocorreu um erro ao transferir a programação de TV. Por favor, certifique-se que a sua informação está correcta e tente novamente.", + "ErrorDeletingItem": "Ocorreu um erro ao eliminar o item do servidor. Verifica se o Jellyfin tem acesso de escrita à pasta multimédia e tenta novamente.", + "ErrorAddingXmlTvFile": "Ocorreu um erro ao aceder ao ficheiro XmlTV. Por favor, garanta que o ficheiro está acessível e tente de novo.", + "ErrorAddingTunerDevice": "Ocorreu um erro ao adicionar o dispositivo de sintonização. Por favor, garanta que está acessível e tente de novo.", + "ErrorAddingMediaPathToVirtualFolder": "Ocorreu um erro ao adicionares a localização dos ficheiros. Certifica-te de que o caminho é valido e que o Jellyfin tem acesso ao mesmo.", "Episodes": "Episódios", - "EndsAtValue": "Termina em {0}", - "EnableThemeVideosHelp": "Reproduzir vídeos tema em segundo plano enquanto navega pela biblioteca.", - "EnableThemeSongsHelp": "Reproduzir as músicas tema em segundo plano enquanto navega pela biblioteca.", - "EnableStreamLoopingHelp": "Ative isso se os streams ao vivo contiverem apenas alguns segundos de dados e precisarem ser solicitados continuamente. Ativar isso quando não necessário pode causar problemas.", - "EnablePhotosHelp": "Imagens serão detectadas e exibidas junto com outros arquivos de mídia.", - "EnablePhotos": "Exibir as fotos", - "EnableNextVideoInfoOverlayHelp": "Ao final de um vídeo, exibir informações sobre o próximo vídeo na lista de reprodução atual.", - "EnableNextVideoInfoOverlay": "Mostrar informações do próximo vídeo durante a reprodução", + "EndsAtValue": "Termina às {0}", + "EnableThemeVideosHelp": "Reproduzir vídeos do tema em plano de fundo durante a navegação pela Biblioteca.", + "EnableThemeSongsHelp": "Reproduz as bandas sonoras em segundo plano enquanto navegas na biblioteca.", + "EnableStreamLoopingHelp": "Ativa esta opção se as transmissões em direto contiverem apenas alguns segundos de dados e precisarem de ser solicitadas continuamente. Ativar esta opção quando não é necessária pode causar problemas.", + "EnablePhotosHelp": "Imagens serão detectadas e mostradas em conjunto com outros ficheiros multimédia.", + "EnablePhotos": "Mostrar fotografias", + "EnableNextVideoInfoOverlayHelp": "No final de um vídeo, mostrar informação sobre o próximo vídeo na lista de reprodução.", + "EnableNextVideoInfoOverlay": "Mostrar informação sobre o próximo vídeo durante a reprodução", "EnableHardwareEncoding": "Ativar codificação por hardware", - "EnableExternalVideoPlayersHelp": "Um menu de reprodutor externo será exibido ao iniciar a reprodução de vídeo.", - "EnableExternalVideoPlayers": "Reprodutores de vídeo externos", - "EnableDisplayMirroring": "Espelhamento de exibição", - "EnableColorCodedBackgrounds": "Fundos com cores codificadas", + "EnableExternalVideoPlayersHelp": "O menu do leitor externo surgirá ao iniciar a reprodução de vídeo.", + "EnableExternalVideoPlayers": "Leitores de vídeo externos", + "EnableDisplayMirroring": "Duplicação de ecrã", + "EnableColorCodedBackgrounds": "Código de cores para o fundo", "EnableCinemaMode": "Modo cinema", - "EnableBackdropsHelp": "Exibir os planos de fundo em algumas páginas enquanto navega pela biblioteca.", + "EnableBackdropsHelp": "Mostrar imagens de fundo em algumas páginas durante a navegação pela Biblioteca.", "EditSubtitles": "Editar legendas", "EditMetadata": "Editar metadados", "EditImages": "Editar imagens", "Edit": "Editar", "EasyPasswordHelp": "O código PIN é utilizado para acesso off-line em clientes suportados e pode ser usado para um acesso fácil dentro da rede.", - "DropShadow": "Sombra projetada", - "DrmChannelsNotImported": "Canais com DRM não serão importados.", - "DownloadsValue": "{0} downloads", - "Download": "Baixar", + "DropShadow": "sombra projetada", + "DrmChannelsNotImported": "Canais com proteção DRM não serão importados.", + "DownloadsValue": "{0} transferências", + "Download": "Transferir", "DoNotRecord": "Não gravar", - "DisplayModeHelp": "Selecione o estilo de layout que você deseja para a interface.", - "DisplayMissingEpisodesWithinSeasonsHelp": "Isso também deve estar ativado para bibliotecas de TV na configuração do servidor.", - "DisplayMissingEpisodesWithinSeasons": "Exibir episódios ausentes dentro das temporadas", - "DisplayInOtherHomeScreenSections": "Exibir em seções da tela inicial como 'Mídia Recentemente Adicionada' e 'Continuar Assistindo'", - "DisplayInMyMedia": "Exibir na tela inicial", - "Display": "Exibição", - "Disconnect": "Desconectar", + "DisplayModeHelp": "Seleciona o estilo de apresentação da interface.", + "DisplayMissingEpisodesWithinSeasonsHelp": "Deve também ser ativado para as bibliotecas de TV nas configurações do servidor.", + "DisplayMissingEpisodesWithinSeasons": "Mostrar episódios em falta numa série", + "DisplayInOtherHomeScreenSections": "Mostrar na página Início em secções como 'Conteúdo adicionado recentemente' e 'Continuar a ver'", + "DisplayInMyMedia": "Mostrar no ecrã principal", + "Display": "Visualização", + "Disconnect": "Desligar", "Disc": "Disco", - "Directors": "Diretores", - "Director": "Diretor", - "DirectStreaming": "Streaming direto", - "DirectStreamHelp2": "O consumo de energia pelo streaming direto geralmente depende do perfil de áudio. Apenas o stream de vídeo é sem perdas.", - "DirectStreamHelp1": "O stream de vídeo é compatível com o dispositivo, mas possui um formato de áudio incompatível (DTS, Dolby TrueHD, etc.) ou número de canais de áudio. O stream de vídeo será reembalado sem perdas em tempo real antes de ser enviado ao dispositivo. Apenas o stream de áudio será transcodificado.", + "Directors": "Realização", + "Director": "Realização", + "DirectStreaming": "Transmissão direta", + "DirectStreamHelp2": "A energia consumida pela transmissão direta depende normalmente do perfil de áudio. Apenas a transmissão do vídeo é feita sem perdas.", + "DirectStreamHelp1": "A transmissão de vídeo é compatível com o dispositivo, mas possui um formato de áudio (DTS, Dolby TrueHD, etc.) ou número de canais de áudio incompatível. A transmissão será reempacotada sem perda em tempo real antes de ser enviada para o dispositivo. Apenas a transmissão de áudio será transcodificada.", "DirectPlaying": "Reprodução direta", - "DeviceAccessHelp": "Isso se aplica apenas a dispositivos que podem ser identificados de forma única e não impedirá o acesso pelo navegador. Filtrar o acesso do dispositivo do usuário impedirá que eles usem novos dispositivos até que tenham sido aprovados aqui.", - "DetectingDevices": "Detectando dispositivos", - "Desktop": "Desktop", + "DeviceAccessHelp": "Apenas se aplica a dispositivos que podem ser identificados como únicos e que não impedem o acesso ao navegador. Filtrar o acesso a dispositivos a um utilizador, impede-o de utilizar novos dispositivos, até estes serem aprovados aqui.", + "DetectingDevices": "Procurando dispositivos", + "Desktop": "Área de Trabalho", "Descending": "Descendente", - "Depressed": "Depressivo", - "DeleteUserConfirmation": "Tem certeza de que deseja excluir este usuário?", - "DeleteUser": "Excluir usuário", - "DeleteMedia": "Excluir mídia", - "DeleteImageConfirmation": "Tem certeza de que deseja excluir esta imagem?", - "DeleteImage": "Excluir imagem", - "DeleteDeviceConfirmation": "Tem certeza de que deseja excluir este dispositivo? Ele reaparecerá na próxima vez que um usuário fizer login com ele.", - "Delete": "Excluir", - "DefaultSubtitlesHelp": "As legendas são carregadas com base nas flags padrão e forçadas nos metadados embutidos. As preferências de idioma são consideradas quando várias opções estão disponíveis.", - "ErrorDefault": "Ocorreu um erro ao processar a solicitação. Por favor, tente novamente mais tarde.", - "Default": "Padrão", - "DeathDateValue": "Falecido: {0}", - "DatePlayed": "Data de reprodução", - "DateAdded": "Data adicionada", + "Depressed": "Baixo relevo", + "DeleteUserConfirmation": "Tens a certeza de que pretendes eliminar este utilizador?", + "DeleteUser": "Eliminar utilizador", + "DeleteMedia": "Remover multimédia", + "DeleteImageConfirmation": "Tens a certeza de que pretendes eliminar esta imagem?", + "DeleteImage": "Eliminar imagem", + "DeleteDeviceConfirmation": "Tem a certeza que deseja remover este dispositivo? Reaparecerá na próxima vez que o utilizador inicie sessão a partir dele.", + "Delete": "Eliminar", + "DefaultSubtitlesHelp": "As legendas são carregadas com base nas definições predefinidas e forçadas para os metadados incorporados. As preferências de idioma são consideradas quando existem múltiplas opções disponíveis.", + "ErrorDefault": "Ocorreu um erro ao processar o pedido. Por favor, tente novamente mais tarde.", + "Default": "Predefinição", + "DeathDateValue": "Faleceu: {0}", + "DatePlayed": "Reproduzido a", + "DateAdded": "Adicionado a", "CustomDlnaProfilesHelp": "Crie um perfil personalizado para um novo dispositivo ou para sobrepor a um perfil de sistema.", - "CriticRating": "Avaliação da crítica", - "CopyStreamURLSuccess": "URL copiada com sucesso.", - "CopyStreamURL": "Copiar URL do Stream", - "Continuing": "Continuando", - "ContinueWatching": "Continuar assistindo", - "Connect": "Conectar", - "ConfirmEndPlayerSession": "Você gostaria de desligar o Jellyfin em {0}?", - "ConfirmDeletion": "Confirmar exclusão", - "ConfirmDeleteItems": "Excluir estes itens irá removê-los do sistema de arquivos e da sua biblioteca de mídia. Tem certeza de que deseja continuar?", - "ConfirmDeleteItem": "Excluir este item irá removê-lo do sistema de arquivos e da sua biblioteca de mídia. Tem certeza de que deseja continuar?", - "ConfirmDeleteImage": "Excluir imagem?", - "ConfigureDateAdded": "Configurar como os metadados de 'Data adicionada' são determinados em Painel > Bibliotecas > Exibição", + "CriticRating": "Classificação dos críticos", + "CopyStreamURLSuccess": "URL copiado com sucesso.", + "CopyStreamURL": "Copiar URL da corrente", + "Continuing": "A Continuar", + "ContinueWatching": "Continuar a ver", + "Connect": "Ligar", + "ConfirmEndPlayerSession": "Deseja encerrar o Servidor Jellyfin em {0}?", + "ConfirmDeletion": "Confirmar remoção", + "ConfirmDeleteItems": "A eliminação destes itens elimina-os do sistema de ficheiros e da tua biblioteca multimédia. Tens a certeza de que queres continuar?", + "ConfirmDeleteItem": "A eliminação deste item irá eliminá-lo do sistema de ficheiros e da tua biblioteca multimédia. Tens a certeza de que queres continuar?", + "ConfirmDeleteImage": "Eliminar a imagem?", + "ConfigureDateAdded": "Configura a forma como é atribuída a data de adição, no Painel de controlo > Bibliotecas > Visualização", "Composer": "Compositor", - "CommunityRating": "Avaliação da comunidade", - "ColorTransfer": "Transferência de cor", - "ColorSpace": "Espaço de cor", - "ColorPrimaries": "Primárias de cor", + "CommunityRating": "Classificação da comunidade", + "ColorTransfer": "Transferência de cores", + "ColorSpace": "Espaço de cores", + "ColorPrimaries": "Cores primárias", "Collections": "Coleções", - "CinemaModeConfigurationHelp": "O modo cinema traz a experiência do cinema para sua casa, permitindo exibir trailers e introduções personalizadas antes do conteúdo principal.", + "CinemaModeConfigurationHelp": "O modo cinema traz a experiência do cinema diretamente para a tua sala de estar, com a possibilidade de reproduzir trailers e introduções personalizadas antes da longa-metragem.", "Channels": "Canais", "ChannelNumber": "Número do canal", "ChannelNameOnly": "Apenas canal {0}", - "ChannelAccessHelp": "Selecione os canais para compartilhar com este usuário. Administradores podem editar todos os canais usando o gerenciador de metadados.", - "ChangingMetadataImageSettingsNewContent": "Alterações nas configurações de download de metadados ou imagens só se aplicam a novos conteúdos adicionados à sua biblioteca. Para aplicar em títulos existentes, atualize os metadados manualmente.", + "ChannelAccessHelp": "Seleciona os canais para partilhar com este utilizador. Os administradores poderão editar todos os canais utilizando o gestor de metadados.", + "ChangingMetadataImageSettingsNewContent": "As alterações às definições de transferência de metadados ou de imagens só se aplicam a novos conteúdos adicionados à tua biblioteca. Para aplicar as alterações aos títulos existentes, terás de atualizar os metadados manualmente.", "Categories": "Categorias", - "CancelSeries": "Cancelar série", + "CancelSeries": "Cancelar gravação de série", "CancelRecording": "Cancelar gravação", - "ButtonWebsite": "Site", + "ButtonWebsite": "Website", "ButtonUninstall": "Desinstalar", "ButtonTrailer": "Trailer", "ButtonSubmit": "Enviar", "ButtonStop": "Parar", "ButtonStart": "Iniciar", - "ButtonSignOut": "Sair", - "ButtonSignIn": "Entrar", - "ButtonShutdown": "Desligar", + "ButtonSignOut": "Terminar sessão", + "ButtonSignIn": "Iniciar sessão", + "ButtonShutdown": "Encerrar", "ButtonSend": "Enviar", "ButtonSelectView": "Selecionar visualização", - "ButtonSelectDirectory": "Selecionar diretório", - "ButtonScanAllLibraries": "Verificar todas as bibliotecas", + "ButtonSelectDirectory": "Seleccione a Pasta", + "ButtonScanAllLibraries": "Analisar todas as bibliotecas", "ButtonRevoke": "Revogar", "ButtonResume": "Retomar", "ButtonResetEasyPassword": "Redefinir código PIN", - "ButtonRename": "Renomear", + "ButtonRename": "Alterar o nome", "ButtonRemove": "Remover", - "ButtonRefreshGuideData": "Atualizar dados do guia", - "ButtonQuickStartGuide": "Guia de configuração", + "ButtonRefreshGuideData": "Atualizar Guia TV", + "ButtonQuickStartGuide": "Guia de instalação", "ButtonPreviousTrack": "Faixa anterior", "ButtonPause": "Pausar", - "ButtonParentalControl": "Controle dos pais", + "ButtonParentalControl": "Controlo parental", "ButtonOpen": "Abrir", - "ButtonOk": "Ok", - "ButtonNextTrack": "Próxima faixa", + "ButtonOk": "OK", + "ButtonNextTrack": "Faixa seguinte", "ButtonNetwork": "Rede", "ButtonMore": "Mais", - "ButtonManualLogin": "Login manual", + "ButtonManualLogin": "Início de sessão manual", "ButtonLibraryAccess": "Acesso à biblioteca", - "ButtonInfo": "Informações", - "ButtonFullscreen": "Tela cheia", - "ButtonForgotPassword": "Esqueci minha senha", - "ButtonEditOtherUserPreferences": "Editar perfil, imagem e preferências deste usuário.", + "ButtonInfo": "Informação", + "ButtonFullscreen": "Ecrã inteiro", + "ButtonForgotPassword": "Esqueci-me da palavra-passe", + "ButtonEditOtherUserPreferences": "Editar este perfil de utilizador, imagem e preferências pessoais.", "Auto": "Automático", - "AlwaysPlaySubtitles": "Sempre exibir", - "AllowMediaConversionHelp": "Conceder ou negar acesso ao recurso de conversão de mídia.", - "AllowMediaConversion": "Permitir conversão de mídia", - "ButtonGotIt": "Entendi", - "ButtonChangeServer": "Trocar servidor", + "AlwaysPlaySubtitles": "Mostrar sempre legendas", + "AllowMediaConversionHelp": "Permitir ou negar acesso à funcionalidade de conversão multimédia.", + "AllowMediaConversion": "Permitir conversão multimédia", + "ButtonGotIt": "Entendido", + "ButtonChangeServer": "Alterar Servidor", "ButtonCancel": "Cancelar", "ButtonBack": "Voltar", - "OptionMissingEpisode": "Episódios Ausentes", - "OptionMax": "Máx", + "OptionMissingEpisode": "Episódios em Falta", + "OptionMax": "Máximo", "OptionLikes": "Gostos", "OptionImdbRating": "Classificação no IMDb", "OptionIgnoreTranscodeByteRangeRequestsHelp": "Essas solicitações serão atendidas, mas irão ignorar o cabeçalho do intervalo de bytes.", "OptionHlsSegmentedSubtitles": "Legendas segmentadas HLS", - "OptionHideUserFromLoginHelp": "Útil para contas de administrador privadas ou ocultas. O usuário precisará fazer login manualmente inserindo seu nome de usuário e senha.", - "OptionHideUser": "Ocultar este usuário das telas de login", - "OptionHasThemeVideo": "Vídeo Tema", - "OptionHasThemeSong": "Música Tema", + "OptionHideUserFromLoginHelp": "Útil para contas de administrador privadas ou ocultas. O utilizador terá de iniciar sessão manualmente, introduzindo o nome de utilizador e a palavra-passe.", + "OptionHideUser": "Ocultar este utilizador nos formulários de início de sessão", + "OptionHasThemeVideo": "Vídeo do tema", + "OptionHasThemeSong": "Banda sonora do tema", "OptionExternallyDownloaded": "Download Externo", "OptionEveryday": "Todos os dias", "OptionEstimateContentLength": "Estimar o tamanho do conteúdo ao transcodificar", "OptionEquals": "Igual a", "OptionEnableM2tsModeHelp": "Activar o modo m2ts ao codificar para mpegts.", "OptionEnableM2tsMode": "Activar modo M2ts", - "OptionEnableExternalContentInSuggestionsHelp": "Permitir que trailers da internet e programas de TV ao vivo sejam incluídos dentro do conteúdo sugerido.", - "OptionEnableAccessToAllLibraries": "Ativar acesso a todas as bibliotecas", - "OptionEnableAccessFromAllDevices": "Ativar acesso de todos os dispositivos", + "OptionEnableExternalContentInSuggestionsHelp": "Permitir que trailers da Internet e programas de TV em Directo sejam incluídos no conteúdo sugerido.", + "OptionEnableAccessToAllLibraries": "Permitir acesso a todas as bibliotecas", + "OptionEnableAccessFromAllDevices": "Permitir o acesso a partir de todos os dispositivos", "OptionEmbedSubtitles": "Incorporar no contentor", "OptionDvd": "DVD", - "LabelBurnSubtitles": "Queimar legendas", - "LabelBlockContentWithTags": "Bloquear itens com tags", - "LabelBlastMessageIntervalHelp": "Determine a duração em segundos entre as mensagens alive.", - "LabelBlastMessageInterval": "Intervalo da mensagem Alive", + "LabelBurnSubtitles": "Integrar legendas", + "LabelBlockContentWithTags": "Bloquear itens com etiquetas", + "LabelBlastMessageIntervalHelp": "Determina a duração em segundos entre as mensagens de exploração enviadas pelo servidor.", + "LabelBlastMessageInterval": "Intervalo para envio de mensagens de reconhecimento", "LabelBitrate": "Taxa de bits", "LabelBirthYear": "Ano de nascimento", - "ButtonAudioTracks": "Faixas de áudio", + "ButtonAudioTracks": "Faixas de Áudio", "ButtonArrowRight": "Direita", "ButtonArrowLeft": "Esquerda", - "ButtonAddUser": "Adicionar usuário", + "ButtonAddUser": "Adicionar utilizador", "ButtonAddServer": "Adicionar servidor", - "ButtonAddScheduledTaskTrigger": "Adicionar gatilho", - "ButtonAddMediaLibrary": "Adicionar biblioteca de mídia", - "ButtonAddImage": "Adicionar imagem", - "BurnSubtitlesHelp": "Define se o servidor deve embutir legendas. Evitar isso melhora o desempenho. Selecione Automático para embutir formatos baseados em imagem (VobSub, PGS, SUB, IDX, etc.) e certos ASS ou SSA.", - "MessageBrowsePluginCatalog": "Navegue pelo nosso catálogo de plugins para ver os plugins disponíveis.", + "ButtonAddScheduledTaskTrigger": "Adicionar tarefa agendada", + "ButtonAddMediaLibrary": "Adicionar Biblioteca de Multimédia", + "ButtonAddImage": "Adicionar Imagem", + "BurnSubtitlesHelp": "Determina se o servidor deve integrar as legendas. Evitar a integração de legendas melhora o desempenho do servidor. Selecione Automático para que legendas baseadas em imagem (VOBSUB, PGS, SUB/IDX) e certos formatos ASS/SSA sejam integrados.", + "MessageBrowsePluginCatalog": "Explora as extensões disponíveis no nosso catálogo.", "Browse": "Explorar", - "BoxRear": "Caixa (traseira)", + "BoxRear": "Caixa (verso)", "Box": "Caixa", "Books": "Livros", - "BookLibraryHelp": "Livros de áudio e texto são suportados. Veja o {0}guia de nomes de livros{1}.", - "Blacklist": "Lista negra", + "BookLibraryHelp": "São suportados audiolivros e ebooks. Consulta o {0} guia de nomenclatura de livros {1}.", + "Blacklist": "Lista Negra", "BirthPlaceValue": "Local de nascimento: {0}", "BirthLocation": "Local de nascimento", "BirthDateValue": "Nascimento: {0}", - "Banner": "Banner", - "Backdrops": "Planos de fundo", - "Backdrop": "Plano de fundo", - "AuthProviderHelp": "Selecione um provedor de autenticação para validar a senha deste usuário.", + "Banner": "Faixa", + "Backdrops": "Imagens de fundo", + "Backdrop": "Imagem de fundo", + "AuthProviderHelp": "Seleciona um mecanismo de autenticação a ser utilizado para validar as credenciais deste utilizador.", "Audio": "Áudio", - "AspectRatio": "Proporção", - "Ascending": "Ascendente", - "Art": "Clearart", - "AroundTime": "Por volta de {0}", - "Anytime": "Qualquer horário", + "AspectRatio": "Proporção da imagem", + "Ascending": "Crescente", + "Art": "ClearArt (imagem transparente)", + "AroundTime": "Por volta das {0}", + "Anytime": "Qualquer altura", "AnyLanguage": "Qualquer idioma", "Artists": "Artistas", - "AsManyAsPossible": "O máximo possível", - "AllowedRemoteAddressesHelp": "Lista separada por vírgulas de endereços IP ou entradas IP/máscara de redes que poderão se conectar remotamente. Se deixado em branco, todos os endereços remotos serão permitidos.", - "AllowRemoteAccessHelp": "Se desmarcado, todas as conexões remotas serão bloqueadas.", + "AsManyAsPossible": "Tantos quanto possível", + "AllowedRemoteAddressesHelp": "Lista separada por vírgula de endereços IP ou entradas de máscara de IP/rede para redes que terão permissão para se conectar remotamente. Se deixado em branco, todos os endereços remotos serão permitidos.", + "AllowRemoteAccessHelp": "Se desmarcada, todas as conexões remotas serão bloqueadas.", "AllowRemoteAccess": "Permitir conexões remotas a este servidor", - "AllowOnTheFlySubtitleExtractionHelp": "Legendas embutidas podem ser extraídas dos vídeos e entregues em texto simples, evitando transcodificação de vídeo. Em alguns sistemas, pode ser demorado e travar a reprodução. Desative para embutir legendas na transcodificação quando não suportadas nativamente pelo dispositivo.", - "AllowOnTheFlySubtitleExtraction": "Permitir extração de legendas em tempo real", - "AllowHWTranscodingHelp": "Permite que o sintonizador transcodifique streams em tempo real. Pode ajudar a reduzir a transcodificação exigida pelo servidor.", + "AllowOnTheFlySubtitleExtractionHelp": "Legendas integradas podem ser extraídas do vídeo e enviadas como texto simples para os clientes para evitar transcodificação. Em certos dispositivos, esta poderá ser uma operação demorada e pode causar interrupções de reprodução durante o processo de extração. Desative esta opção para que as legendas sejam integradas no vídeo durante a conversão para um formato suportado pelo dispositivo de destino.", + "AllowOnTheFlySubtitleExtraction": "Permitir a extração de legendas em tempo real", + "AllowHWTranscodingHelp": "Permite ao sintonizador converter emissões em tempo real. Poderá reduzir a necessidade de conversão a fazer pelo servidor.", "AllLibraries": "Todas as bibliotecas", "AllLanguages": "Todos os idiomas", "AllEpisodes": "Todos os episódios", - "AllComplexFormats": "Todos os formatos complexos (ASS, SSA, VobSub, PGS, SUB, IDX, ...)", + "AllComplexFormats": "Todos os formatos complexos (ASS, SSA, VobSub, PGS, SUB, IDX, …)", "AllChannels": "Todos os canais", "All": "Todos", "Alerts": "Alertas", "Albums": "Álbuns", - "Aired": "Exibido", - "AirDate": "Data de exibição", + "Aired": "Estreou em", + "AirDate": "Data de estreia", "AdditionalNotificationServices": "Explore o catálogo de extensões para instalar serviços adicionais de notificação.", - "AddedOnValue": "Adicionado em {0}", - "AddToPlaylist": "Adicionar à playlist", + "AddedOnValue": "{0} foi adicionado", + "AddToPlaylist": "Adicionar à lista de reprodução", "AddToPlayQueue": "Adicionar à fila de reprodução", "AddToCollection": "Adicionar à coleção", "Add": "Adicionar", "Actor": "Ator", - "AccessRestrictedTryAgainLater": "O acesso está restrito no momento. Por favor, tente novamente mais tarde.", + "AccessRestrictedTryAgainLater": "O acesso está atualmente restrito. Por favor, tenta mais tarde.", "Absolute": "Absoluto", - "AlwaysPlaySubtitlesHelp": "Legendas que correspondam à preferência de idioma serão carregadas independentemente do idioma do áudio.", - "SearchForMissingMetadata": "Pesquisar metadados ausentes", - "ScanLibrary": "Verificar biblioteca", - "HeaderDeleteItem": "Excluir Item", - "HeaderDeleteDevice": "Excluir Dispositivo", - "HeaderDefaultRecordingSettings": "Configurações Padrão de Gravação", - "HeaderDateIssued": "Data de Emissão", + "AlwaysPlaySubtitlesHelp": "As legendas correspondentes à preferência de idioma serão carregadas, independentemente do idioma do áudio.", + "SearchForMissingMetadata": "Procurar metadados em falta", + "ScanLibrary": "Analisar biblioteca", + "HeaderDeleteItem": "Remover item", + "HeaderDeleteDevice": "Eliminar dispositivo", + "HeaderDefaultRecordingSettings": "Predefinições de gravação", + "HeaderDateIssued": "Data da emissão", "HeaderCustomDlnaProfiles": "Perfis Personalizados", - "HeaderContinueWatching": "Continuar Assistindo", - "HeaderContinueListening": "Continuar Ouvindo", + "HeaderContinueWatching": "Continuar a ver", + "HeaderContinueListening": "Continuar a ouvir", "HeaderContainerProfileHelp": "Os Perfis do Contentor indicam as limitações de um dispositivo ao reproduzir formatos específicos. Se hourver alguma limitação, o ficheiro multimédia será transcodificado, mesmo se o formato estiver configurado para reprodução directa.", "HeaderContainerProfile": "Perfil do Contentor", - "HeaderConnectionFailure": "Falha na Conexão", - "HeaderConnectToServer": "Conectar ao Servidor", + "HeaderConnectionFailure": "Falha de Ligação", + "HeaderConnectToServer": "Ligar ao Servidor", "HeaderConfirmRevokeApiKey": "Revogar Chave da API", "HeaderConfirmProfileDeletion": "Confirmar Remoção do Perfil", - "HeaderConfirmPluginInstallation": "Confirmar Instalação do Plugin", + "HeaderConfirmPluginInstallation": "Confirmar instalação da extensão", "HeaderConfigureRemoteAccess": "Configurar Acesso Remoto", "HeaderCodecProfileHelp": "Os perfis do Codec indicam as limitações de um dispositivo ao reproduzir codecs específicos. Se uma limitação ocorrer, o ficheiro multimédia será transcodificado, mesmo se o codec estiver configurado para reprodução direta.", "HeaderCodecProfile": "Perfil do Codec", - "HeaderChapterImages": "Imagens de Capítulo", - "HeaderChannelAccess": "Acesso ao Canal", - "HeaderCancelSeries": "Cancelar Série", - "HeaderCancelRecording": "Cancelar Gravação", - "HeaderBlockItemsWithNoRating": "Bloquear itens sem informações de classificação ou com classificação não reconhecida", - "HeaderAudioSettings": "Configurações de Áudio", - "HeaderAudioBooks": "Audiolivros", - "HeaderApp": "App", - "HeaderApiKeysHelp": "Aplicativos externos precisam de uma chave de API para se comunicar com o servidor. As chaves são emitidas ao fazer login com uma conta de usuário normal ou ao conceder manualmente uma chave ao aplicativo.", + "HeaderChapterImages": "Imagens dos capítulos", + "HeaderChannelAccess": "Acesso ao canal", + "HeaderCancelSeries": "Cancelar gravação de série", + "HeaderCancelRecording": "Cancelar gravação", + "HeaderBlockItemsWithNoRating": "Bloquear conteúdo sem informação de classificação etária ou com informação desconhecida", + "HeaderAudioSettings": "Definições de áudio", + "HeaderAudioBooks": "Livros de Áudio", + "HeaderApp": "Aplicação", + "HeaderApiKeysHelp": "As aplicações externas necessitam de uma chave de API para comunicar com o servidor. As chaves são emitidas ao iniciar sessão com uma conta de utilizador normal ou concedendo manualmente a chave à aplicação.", "HeaderApiKeys": "Chaves da API", "HeaderApiKey": "Chave da API", - "HeaderAllowMediaDeletionFrom": "Permitir exclusão de mídia de", + "HeaderAllowMediaDeletionFrom": "Permitir remoção de multimédia a partir de", "HeaderAlert": "Alerta", "HeaderAlbumArtists": "Artistas do Álbum", "HeaderAdditionalParts": "Partes Adicionais", - "HeaderAddUpdateImage": "Adicionar/Atualizar Imagem", - "HeaderAddToPlaylist": "Adicionar à Playlist", - "HeaderAddToCollection": "Adicionar à Coleção", + "HeaderAddUpdateImage": "Adicionar/Atualizar imagem", + "HeaderAddToPlaylist": "Adicionar à playlist", + "HeaderAddToCollection": "Adicionar à coleção", "HeaderActivity": "Atividade", - "HeaderActiveRecordings": "Gravações Ativas", - "HeaderActiveDevices": "Dispositivos Ativos", - "HeaderAccessScheduleHelp": "Crie uma agenda de acesso para limitar o acesso a determinadas horas.", - "HeaderAccessSchedule": "Agenda de Acesso", - "HardwareAccelerationWarning": "Ativar a aceleração de hardware pode causar instabilidade em alguns ambientes. Certifique-se de que seu sistema operacional e drivers de vídeo estão totalmente atualizados. Se você tiver dificuldade em reproduzir vídeo após ativar isso, será necessário alterar a configuração de volta para Nenhum.", - "HDPrograms": "Programas em HD", - "EncoderPresetHelp": "Escolha um valor mais rápido para melhorar o desempenho ou um valor mais lento para melhorar a qualidade.", - "H264CrfHelp": "O 'Constant Rate Factor' (CRF) é a configuração de qualidade padrão para os codificadores de software x264 e x265. Você pode definir valores entre 0 e 51, onde valores mais baixos resultam em melhor qualidade (à custa de tamanhos de arquivo maiores). Valores razoáveis estão entre 18 e 28. O padrão para x264 é 23, e para x265 é 28, então você pode usar isso como ponto de partida. Codificadores de hardware não usam essas configurações.", - "GuideProviderSelectListings": "Selecionar listagens", - "Guide": "Guia", - "GuestStar": "Participação especial", + "HeaderActiveRecordings": "Gravações ativas", + "HeaderActiveDevices": "Dispositivos ativos", + "HeaderAccessScheduleHelp": "Crie uma restrição horária de acesso para limitar o acesso ao Jellyfin a determinadas horas.", + "HeaderAccessSchedule": "Restrição Horária de Acesso", + "HardwareAccelerationWarning": "Ativar a aceleração por hardware pode causar instabilidade em alguns ambientes. Certifica-te de que o teu sistema operativo e controladores de vídeo estão totalmente atualizados. Se tiveres dificuldades em reproduzir vídeo depois de ativares esta opção, terás de voltar a alterar a definição para \"Nenhum\".", + "HDPrograms": "Programas HD", + "EncoderPresetHelp": "Escolha um valor mais rápido para melhorar o desempenho, ou um valor mais lento para melhorar a qualidade.", + "H264CrfHelp": "O parâmetro \"Constant Rate Factor\" (CRF) define o nível de qualidade predefinido para os codificadores de software x264 e x265. Os valores possíveis vão de 0 a 51, sendo que valores mais baixos produzem melhor qualidade — à custa de ficheiros maiores. Os valores mais comuns situam-se entre 18 e 28. O valor predefinido para o x264 é 23, e para o x265 é 28, podendo servir como ponto de partida para afinares a qualidade conforme necessário. Codificadores por hardware não utilizam esta definição.", + "GuideProviderSelectListings": "Selecionar listas", + "Guide": "Programação", + "GuestStar": "Estrela convidada", "GroupVersions": "Agrupar versões", "GroupBySeries": "Agrupar por série", - "ErrorAddingListingsToSchedulesDirect": "Ocorreu um erro ao adicionar a programação à sua conta do Schedules Direct. O Schedules Direct permite apenas um número limitado de programações por conta. Você pode precisar fazer login no site do Schedules Direct e remover outras listagens da sua conta antes de prosseguir.", - "Ended": "Encerrado", - "DefaultMetadataLangaugeDescription": "Estas são suas configurações padrão e podem ser personalizadas por biblioteca.", - "Genres": "Gêneros", - "Genre": "Gênero", + "ErrorAddingListingsToSchedulesDirect": "Ocorreu um erro ao adicionar o alinhamento à tua conta do Schedules Direct. O Schedules Direct só permite um número limitado de alinhamentos por conta. Poderás ter de iniciar sessão no site do Schedules Direct e remover outras listagens da tua conta antes de prosseguires.", + "Ended": "Terminado", + "DefaultMetadataLangaugeDescription": "Estes são os valores-predefinidos que podem ser personalizados para cada uma das bibliotecas.", + "Genres": "Géneros", + "Genre": "Género", "General": "Geral", - "Fullscreen": "Tela cheia", - "Friday": "Sexta-feira", + "Fullscreen": "Ecrã inteiro", + "Friday": "Sexta", "FormatValue": "Formato: {0}", "Folders": "Pastas", "OptionIgnoreTranscodeByteRangeRequests": "Ignorar solicitações de intervalo de bytes de transcodificação", - "OptionEnableAccessToAllChannels": "Ativar acesso a todos os canais", - "FetchingData": "Buscando dados adicionais", - "EnableStreamLooping": "Repetir streams ao vivo automaticamente", - "Down": "Para baixo", + "OptionEnableAccessToAllChannels": "Permitir acesso a todos os canais", + "FetchingData": "A transferir informação adicional", + "EnableStreamLooping": "Transmissões em direto em loop automático", + "Down": "Baixar", "HeaderNavigation": "Navegação", - "ButtonSplit": "Dividir", + "ButtonSplit": "Separar", "AskAdminToCreateLibrary": "Peça a um administrador para criar uma biblioteca.", - "AllowFfmpegThrottling": "Controlar transcodificações", + "AllowFfmpegThrottling": "Transcodificação do Acelerador", "DashboardOperatingSystem": "Sistema Operativo", - "LabelUserLoginAttemptsBeforeLockout": "Tentativas de login falhadas antes do bloqueio do usuário", + "LabelUserLoginAttemptsBeforeLockout": "Tentativas de início de sessão falhadas até o utilizador ser bloqueado", "LabelTrackNumber": "Número da faixa", - "LabelSportsCategories": "Categorias de esportes", + "LabelSportsCategories": "Categorias de desporto", "Yesterday": "Ontem", - "MusicVideo": "Vídeo Musical", - "MusicLibraryHelp": "Veja o {0}guia de nomes de música{1}.", - "MusicArtist": "Artista de Música", - "MusicAlbum": "Álbum de Música", - "MovieLibraryHelp": "Veja o {0}guia de nomes de filmes{1}.", + "MusicVideo": "Vídeo de música", + "MusicLibraryHelp": "Consulta o {0}guia de nomenclatura de músicas{1}.", + "MusicArtist": "Artista musical", + "MusicAlbum": "Álbum de música", + "MovieLibraryHelp": "Consulta o {0}guia de nomenclatura de filmes{1}.", "MoveRight": "Mover para a direita", - "MoveLeft": "Mover para a esquerda", - "MoreMediaInfo": "Informações da Mídia", + "MoveLeft": "Mova à esquerda", + "MoreMediaInfo": "Informações sobre mídia", "MoreFromValue": "Mais de {0}", "MediaInfoRefFrames": "Quadros de referência", - "MediaInfoContainer": "Contêiner", + "MediaInfoContainer": "Container", "MediaInfoAnamorphic": "Anamórfico", "LabelVideoResolution": "Resolução do vídeo", - "LabelTypeMetadataDownloaders": "Downloaders de metadados ({0})", - "LabelTranscodePath": "Caminho de transcodificação", - "OnlyImageFormats": "Apenas Formatos de Imagem (VobSub, PGS, SUB)", - "OnlyForcedSubtitlesHelp": "Apenas legendas marcadas como forçadas serão carregadas.", - "OnlyForcedSubtitles": "Apenas Forçadas", - "Off": "Desligado", + "LabelTypeMetadataDownloaders": "Fornecedores de metadados ({0})", + "LabelTranscodePath": "Caminho da transcodificação", + "OnlyImageFormats": "Somente formatos de imagem (VOBSUB, PGS, SUB)", + "OnlyForcedSubtitlesHelp": "Apenas as legendas marcadas como forçadas serão carregadas.", + "OnlyForcedSubtitles": "Apenas legendas forçadas", + "Off": "Desligadas", "NumLocationsValue": "{0} pastas", "Normal": "Normal", "None": "Nenhum", - "NoSubtitlesHelp": "As legendas não serão carregadas por padrão. Elas ainda podem ser ativadas manualmente durante a reprodução.", - "NoSubtitleSearchResultsFound": "Nenhum resultado encontrado.", - "NoNewDevicesFound": "Nenhum novo dispositivo encontrado. Para adicionar um novo sintonizador, feche este diálogo e insira as informações do dispositivo manualmente.", - "NoCreatedLibraries": "Parece que você ainda não criou nenhuma biblioteca. {0>Você gostaria de criar uma agora?{1}", + "NoSubtitlesHelp": "As legendas não serão carregadas por padrão. Eles ainda podem ser ativados manualmente durante a reprodução.", + "NoSubtitleSearchResultsFound": "Sem resultados.", + "NoNewDevicesFound": "Não foram encontrados novos dispositivos. Para adicionares um novo sintonizador, fecha esta caixa de diálogo e introduz as informações do dispositivo manualmente.", + "NoCreatedLibraries": "Parece que você ainda não criou nenhuma biblioteca. {0} Deseja criar um agora? {1}", "No": "Não", - "Mobile": "Móvel", - "MetadataSettingChangeHelp": "Alterar as configurações de metadados afetará o novo conteúdo adicionado a partir de agora. Para atualizar o conteúdo existente, abra a tela de detalhes e clique no botão 'Atualizar', ou faça atualizações em massa usando o 'Gerenciador de Metadados'.", - "MetadataManager": "Gerenciador de Metadados", + "Mobile": "Telemóvel", + "MetadataSettingChangeHelp": "Alterar as definições de metadados irá afetar apenas conteúdo adicionado no futuro. Para atualizar conteúdo já existente, abre o painel de detalhes e clica no botão 'Recarregar metadados' ou executa uma atualização em massa utilizando o Gestor de metadados.", + "MetadataManager": "Gestor de metadados", "Metadata": "Metadados", "MessageYouHaveVersionInstalled": "Você possui a versão {0} atualmente instalada.", - "MessageUnsetContentHelp": "O conteúdo será exibido como pastas simples. Para melhores resultados, use o gerenciador de metadados para definir os tipos de conteúdo das subpastas.", - "MessagePleaseWait": "Por favor, aguarde. Isso pode levar um minuto.", - "MessagePlayAccessRestricted": "A reprodução deste conteúdo está atualmente restrita. Por favor, entre em contato com o administrador do servidor para mais informações.", - "MessageNoServersAvailable": "Nenhum servidor encontrado usando a descoberta automática de servidores.", - "MessageNoCollectionsAvailable": "As coleções permitem que você desfrute de agrupamentos personalizados de Filmes, Séries e Álbuns. Clique no botão '+' para começar a criar coleções.", - "MessageConfirmAppExit": "Você deseja sair?", + "MessageUnsetContentHelp": "O conteúdo será exibido como pastas simples. Para obter melhores resultados, use o gerenciador de metadados para definir os tipos de conteúdo das subpastas.", + "MessagePleaseWait": "Por favor, espere. Isso pode levar um minuto.", + "MessagePlayAccessRestricted": "A reprodução deste conteúdo está atualmente restrita. Entre em contato com o administrador do servidor para obter mais informações.", + "MessageNoServersAvailable": "Nenhum servidor foi encontrado usando a descoberta automática de servidores.", + "MessageNoCollectionsAvailable": "As coleções permitem-te desfrutar de agrupamentos personalizados de filmes, séries e álbuns. Clica no botão '+' para começares a criar coleções.", + "MessageConfirmAppExit": "Deseja sair?", "MediaInfoLayout": "Layout", "MediaInfoLanguage": "Idioma", "MediaInfoInterlaced": "Entrelaçado", - "MediaInfoFramerate": "Taxa de quadros", + "MediaInfoFramerate": "Taxa de fotogramas", "MediaInfoForced": "Forçado", "MediaInfoExternal": "Externo", "MediaInfoDefault": "Padrão", - "MediaInfoCodecTag": "Tag do codec", + "MediaInfoCodecTag": "Codec tag", "MediaInfoCodec": "Codec", "MediaInfoBitrate": "Taxa de bits", "MediaInfoBitDepth": "Profundidade de bits", - "MediaInfoAspectRatio": "Proporção", - "ManageRecording": "Gerenciar gravação", + "MediaInfoAspectRatio": "Proporção da imagem", + "ManageRecording": "Gerir gravação", "Logo": "Logo", "List": "Lista", - "LeaveBlankToNotSetAPassword": "Você pode deixar este campo em branco para não definir uma senha.", - "LearnHowYouCanContribute": "Saiba como você pode contribuir.", + "LeaveBlankToNotSetAPassword": "Você pode deixar esse campo em branco para definir nenhuma senha.", + "LearnHowYouCanContribute": "Aprenda como você pode contribuir.", "Large": "Grande", - "LanNetworksHelp": "Lista separada por vírgulas de endereços IP ou IP/máscara de redes que serão consideradas na rede local ao aplicar restrições de largura de banda. Se definido, todos os outros endereços IP serão considerados na rede externa e estarão sujeitos às restrições de largura de banda externa. Se deixado em branco, apenas a sub-rede do servidor será considerada na rede local.", - "LabelffmpegPathHelp": "O caminho para o arquivo ou pasta do aplicativo FFmpeg.", - "LabelffmpegPath": "Caminho do FFmpeg", + "LanNetworksHelp": "Lista separada por vírgula de endereços IP ou entradas de máscara de rede/IP para redes que serão consideradas na rede local ao impor restrições de largura de banda. Se definido, todos os outros endereços IP serão considerados na rede externa e estarão sujeitos às restrições de largura de banda externa. Se deixado em branco, apenas a sub-rede do servidor é considerada na rede local.", + "LabelffmpegPathHelp": "Localização da aplicação ou pasta que contém o FFmpeg.", + "LabelffmpegPath": "Localização do FFmpeg", "LabelYear": "Ano", "LabelXDlnaDoc": "Documentação X-DLNA", "LabelXDlnaCap": "Limite X-DLNA", "LabelWeb": "Web", - "LabelVideoCodec": "Codec de vídeo", + "LabelVideoCodec": "Codec do vídeo", "LabelVideoBitrate": "Taxa de bits do vídeo", "DashboardArchitecture": "Arquitetura: {0}", "DashboardServerName": "Servidor: {0}", "DashboardVersionNumber": "Versão: {0}", "LabelVersion": "Versão", - "LabelVaapiDeviceHelp": "Este é o nó de renderização usado para a aceleração de hardware.", + "LabelVaapiDeviceHelp": "Este é o nó de renderização usado para aceleração de hardware.", "LabelVaapiDevice": "Dispositivo VA-API", - "LabelUserAgent": "Agente do usuário", - "LabelTranscodes": "Transcodificações", - "LabelTranscodingFramerate": "Taxa de quadros da transcodificação", + "LabelUserAgent": "Agente do utilizador", + "LabelTranscodes": "Transcodificação", + "LabelTranscodingFramerate": "Transcodificação da taxa de fotogramas", "LabelTranscodingProgress": "Progresso da transcodificação", "LabelTitle": "Título", "LabelTheme": "Tema", "LabelTextColor": "Cor do texto", - "LabelTextBackgroundColor": "Cor de fundo do texto", + "LabelTextBackgroundColor": "Cor do plano de fundo do texto", "LabelTag": "Tag", "LabelTVHomeScreen": "Tela inicial do modo TV", - "LabelSubtitleDownloaders": "Baixadores de legendas", - "LabelStreamType": "Tipo de stream", + "LabelSubtitleDownloaders": "Fornecedores de legendas", + "LabelStreamType": "Tipo de transmissão", "LabelSpecialSeasonsDisplayName": "Nome de exibição da temporada especial", - "LabelSortTitle": "Título da ordenação", - "LabelSortOrder": "Ordem de classificação", + "LabelSortTitle": "Classificar título", + "LabelSortOrder": "Sequência de ordenação", "LabelSortBy": "Ordenar por", - "LabelRemoteClientBitrateLimitHelp": "Um limite opcional de taxa de bits por stream para todos os dispositivos fora da rede. Isso é útil para evitar que dispositivos solicitem uma taxa de bits mais alta do que sua conexão com a Internet pode suportar. Isso pode resultar em aumento da carga da CPU no servidor para transcodificar vídeos em tempo real para uma taxa de bits mais baixa.", - "LabelPlayerDimensions": "Dimensões do reprodutor", - "LabelParentNumber": "Número do pai", - "LabelMetadataSavers": "Salvadores de metadados", - "LabelDroppedFrames": "Quadros descartados", + "LabelRemoteClientBitrateLimitHelp": "Um limite opcional de taxa de bits por fluxo para todos os dispositivos fora da rede. Isso é útil para impedir que os dispositivos solicitem uma taxa de bits mais alta do que a sua conexão à Internet pode suportar. Isso pode resultar no aumento da carga da CPU no servidor para transcodificar vídeos em tempo real para uma taxa de bits mais baixa.", + "LabelPlayerDimensions": "Dimensões do leitor", + "LabelParentNumber": "Número pai", + "LabelMetadataSavers": "Formatos de gravação dos metadados", + "LabelDroppedFrames": "Quadros caídos", "LabelCorruptedFrames": "Quadros corrompidos", - "LabelAudioBitDepth": "Profundidade de bits do áudio", - "ClientSettings": "Configurações do cliente", - "AllowFfmpegThrottlingHelp": "Quando uma transcodificação ou remux estiver muito à frente da posição atual de reprodução, o processo será pausado para consumir menos recursos. Útil ao assistir sem avançar/retroceder muito. Desative se tiver problemas de reprodução.", - "MySubtitles": "Minhas Legendas", + "LabelAudioBitDepth": "Profundidade do bit de áudio", + "ClientSettings": "Definições do cliente", + "AllowFfmpegThrottlingHelp": "Quando uma transcodificação ou remux se aproximar da posição atual de reprodução, pause o processo para que consuma menos recursos. Isso é mais útil ao assistir sem procurar com frequência. Desative isso se você tiver problemas de reprodução.", + "MySubtitles": "Minhas legendas", "Name": "Nome", "Never": "Nunca", "Artist": "Artista", "LabelDeinterlaceMethod": "Método de desentrelaçamento", - "DeinterlaceMethodHelp": "Selecione o método de desentrelaçamento a ser usado ao transcodificar conteúdo entrelaçado. Quando a aceleração de hardware com desentrelaçamento de hardware é ativada, o desentrelaçador de hardware será usado em vez desta configuração.", + "DeinterlaceMethodHelp": "Seleciona o método de desentrelaçamento a utilizar quando o software transcodifica conteúdo entrelaçado. Caso esteja ativo, o desentrelaçamento através de aceleração por hardware terá prioridade sobre esta opção.", "Movie": "Filme", "LabelLibraryPageSize": "Tamanho da página da biblioteca", "Album": "Álbum", - "LabelLibraryPageSizeHelp": "Defina a quantidade de itens a serem exibidos em uma página da biblioteca. Defina como 0 para desativar a paginação.", + "LabelLibraryPageSizeHelp": "Define a quantidade de itens a apresentar na página de uma biblioteca. Para desativares a paginação, introduz o valor 0.", "Episode": "Episódio", - "OptionRequirePerfectSubtitleMatch": "Baixar apenas legendas que sejam uma correspondência perfeita para os arquivos de vídeo", + "OptionRequirePerfectSubtitleMatch": "Baixar apenas legendas que correspondem corretamente aos arquivos de vídeo", "OptionRandom": "Aleatório", - "OptionLoginAttemptsBeforeLockout": "Determinar quantas tentativas de login incorretas podem ser feitas antes que o bloqueio ocorra.", + "OptionLoginAttemptsBeforeLockout": "Determina quantas tentativas de início de sessão são admitidas antes de a conta ser bloqueada.", "OptionIsSD": "SD", "OptionIsHD": "HD", - "OptionEnableExternalContentInSuggestions": "Ativar conteúdo externo nas sugestões", - "OptionDisplayFolderViewHelp": "Exibir pastas junto com suas outras bibliotecas de mídia. Isso pode ser útil se você quiser ter uma visualização de pasta simples.", - "OptionDisplayFolderView": "Exibir uma visualização de pasta para mostrar pastas de mídia simples", - "OptionBluray": "BD", - "OptionAllowVideoPlaybackRemuxing": "Permitir reprodução de vídeo que requer conversão sem reencodificação", - "OptionAllowLinkSharingHelp": "Apenas páginas da web contendo informações da mídia são compartilhadas. Os arquivos de mídia nunca são compartilhados publicamente. Os compartilhamentos têm prazo limitado e expirarão após {0} dias.", + "OptionEnableExternalContentInSuggestions": "Habilitar sugestão de conteúdo externo", + "OptionDisplayFolderViewHelp": "Exiba pastas ao lado de outras bibliotecas de mídia. Isso pode ser útil se você quiser ter uma visualização simples de pastas.", + "OptionDisplayFolderView": "Exibir uma exibição de pasta para mostrar pastas de mídia simples", + "OptionBluray": "Blu-ray", + "OptionAllowVideoPlaybackRemuxing": "Permitir reprodução de vídeo que requer conversão sem recodificação", + "OptionAllowLinkSharingHelp": "Somente páginas da web que contêm informações sobre mídia são compartilhadas. Os arquivos de mídia nunca são compartilhados publicamente. As ações são limitadas no tempo e expiram após {0} dias.", "Option3D": "3D", - "NextUp": "Próximo", + "NextUp": "A seguir", "Next": "Próximo", "NewEpisodesOnly": "Apenas novos episódios", "NewEpisodes": "Novos episódios", - "NewCollectionHelp": "As coleções permitem que você crie agrupamentos personalizados de filmes e outros conteúdos da biblioteca.", - "BoxSet": "Box", - "AlbumArtist": "Artista do Álbum", + "NewCollectionHelp": "As coleções permitem-te criar agrupamentos personalizados de filmes e outros tipos de conteúdo.", + "BoxSet": "Coleção", + "AlbumArtist": "Artista do álbum", "Quality": "Qualidade", "Previous": "Anterior", - "PictureInPicture": "Imagem na imagem", - "OptionRequirePerfectSubtitleMatchHelp": "Exigir uma correspondência perfeita filtrará as legendas para incluir apenas aquelas que foram testadas e verificadas com seu arquivo de vídeo exato. Desmarcar isso aumentará a probabilidade de download de legendas, mas também aumentará as chances de legendas fora de sincronia ou incorretas.", + "PictureInPicture": "Imagem em imagem (vídeo flutuante)", + "OptionRequirePerfectSubtitleMatchHelp": "Solicitar a \"correspondência perfeita\" filtrará as legendas incluindo apenas aquelas que foram testadas com o arquivo de vídeo. Desmarcar isto aumentará a probabilidade de baixar legendas, mas poderá obter legendas incorretas ou não sincronizadas.", "StopRecording": "Parar gravação", - "ShowYear": "Mostrar o ano", - "ShowTitle": "Mostrar o título", - "SettingsWarning": "Alterar esses valores pode causar instabilidade ou falhas de conectividade. Se você experimentar algum problema, recomendamos alterá-los de volta para o padrão.", - "ServerNameIsShuttingDown": "O servidor em {0} está desligando.", - "ServerNameIsRestarting": "O servidor em {0} está reiniciando.", - "SeriesYearToPresent": "{0} - Presente", + "ShowYear": "Exibir ano", + "ShowTitle": "Exibir título", + "SettingsWarning": "Alterar estes valores poderá causar instabilidade ou falhas de ligação. Se ocorrer algum problema, recomendamos que os voltes a alterar para os valores predefinidos.", + "ServerNameIsShuttingDown": "O servidor {0} está a desligar.", + "ServerNameIsRestarting": "O servidor {0} está a reiniciar.", + "SeriesYearToPresent": "{0} - Atualmente", "SeriesCancelled": "Série cancelada.", - "SelectAdminUsername": "Por favor, selecione um nome de usuário para a conta de administrador.", + "SelectAdminUsername": "Seleciona um nome de utilizador para a conta de administrador.", "Season": "Temporada", "RepeatEpisodes": "Repetir episódios", - "RepeatAll": "Repetir tudo", + "RepeatAll": "Repetir todos", "RemoveFromCollection": "Remover da coleção", - "RememberMe": "Lembrar de mim", - "ReleaseDate": "Data de Lançamento", + "RememberMe": "Lembrar-me", + "ReleaseDate": "Data do lançamento", "RefreshMetadata": "Atualizar metadados", - "RecentlyWatched": "Assistido Recentemente", + "RecentlyWatched": "Visto recentemente", "OptionEnableForAllTuners": "Ativar para todos os dispositivos sintonizadores", "OptionCaptionInfoExSamsung": "Informações da legenda (Samsung)", - "OptionAutomaticallyGroupSeriesHelp": "Séries espalhadas por várias pastas dentro desta biblioteca serão mescladas automaticamente em uma única série.", - "OptionAutomaticallyGroupSeries": "Mesclar automaticamente séries espalhadas por várias pastas", - "OptionAllowSyncTranscoding": "Permitir downloads e sincronização de mídia que requerem transcodificação", - "OptionForceRemoteSourceTranscoding": "Forçar transcodificação de fontes de mídia remotas, como TV Ao Vivo", - "PreferEmbeddedTitlesOverFileNames": "Preferir títulos incorporados em vez de nomes de arquivos", - "OptionSaveMetadataAsHiddenHelp": "Alterar isso se aplicará a novos metadados salvos a partir de agora. Os arquivos de metadados existentes serão atualizados na próxima vez que forem salvos pelo servidor.", + "OptionAutomaticallyGroupSeriesHelp": "As séries que estão espalhadas por várias pastas dentro desta biblioteca serão automaticamente mescladas em uma única série.", + "OptionAutomaticallyGroupSeries": "Mesclar automaticamente séries que estão espalhadas por várias pastas", + "OptionAllowSyncTranscoding": "Permitir a transferência e sincronização de multimédia que exija transcodificação", + "OptionForceRemoteSourceTranscoding": "Força a transcodificação de fontes multimédia remotas, como a TV em direto", + "PreferEmbeddedTitlesOverFileNames": "Preferir títulos incorporados ao invés dos nomes dos arquivos", + "OptionSaveMetadataAsHiddenHelp": "Alterar isso será aplicado aos novos metadados salvos daqui para frente. Os arquivos de metadados existentes serão atualizados na próxima vez em que forem salvos pelo Jellyfin Server.", "OptionRegex": "Expressão Regular", - "OptionLoginAttemptsBeforeLockoutHelp": "Um valor de zero significa herdar o padrão de três tentativas para usuários normais e cinco para administradores. Definir isso como -1 desativará o recurso.", - "OptionExtractChapterImage": "Ativar extração de imagem de capítulo", - "PreferEmbeddedEpisodeInfosOverFileNames": "Preferir informações de episódio incorporadas em vez de nomes de arquivos", - "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Usar as informações do episódio dos metadados incorporados, se disponíveis.", - "PreferEmbeddedTitlesOverFileNamesHelp": "Determinar o título a ser exibido quando nenhum metadado da internet ou metadado local estiver disponível.", - "PlaybackErrorNoCompatibleStream": "Este cliente não é compatível com a mídia e o servidor não está enviando um formato de mídia compatível.", + "OptionLoginAttemptsBeforeLockoutHelp": "O valor zero significa herdar a definição por defeito de três tentativas para utilizadores comuns e cinco para administradores. Definir este campo como -1 desativa esta funcionalidade.", + "OptionExtractChapterImage": "Ativar extração de imagens dos capítulos", + "PreferEmbeddedEpisodeInfosOverFileNames": "Preferir informações de episódios incorporados ao invés de nomes de arquivos", + "PreferEmbeddedEpisodeInfosOverFileNamesHelp": "Usar os metadados incorporados para informações do episódio, se disponíveis.", + "PreferEmbeddedTitlesOverFileNamesHelp": "Determina o título a apresentar quando não é possível carregar metadados locais ou da Internet.", + "PlaybackErrorNoCompatibleStream": "Este cliente não é compatível com a mídia e o servidor não está a enviar um formato de mídia compatível.", "Person": "Pessoa", - "LabelRequireHttpsHelp": "Se marcado, o servidor redirecionará automaticamente todas as solicitações de HTTP para HTTPS. Isso não tem efeito se o servidor não estiver ouvindo em HTTPS.", + "LabelRequireHttpsHelp": "Se marcado, o servidor redirecionará automaticamente todas as solicitações por HTTP para HTTPS. Isso não terá efeito se o servidor não estiver escutando HTTPS.", "LabelRequireHttps": "Requer HTTPS", - "LabelChromecastVersion": "Versão do Google Cast", - "LabelEnableHttpsHelp": "Ouça na porta HTTPS configurada. Um certificado válido também deve ser fornecido para que isso tenha efeito.", + "LabelChromecastVersion": "Versão do Chromecast", + "LabelEnableHttpsHelp": "Escutar na porta HTTPS configurada. Para que esta opção seja ativada, é necessário fornecer um certificado válido.", "LabelEnableHttps": "Ativar HTTPS", - "HeaderServerAddressSettings": "Configurações de Endereço do Servidor", - "HeaderRemoteAccessSettings": "Configurações de Acesso Remoto", - "HeaderHttpsSettings": "Configurações HTTPS", + "HeaderServerAddressSettings": "Definições de endereço do servidor", + "HeaderRemoteAccessSettings": "Definições de acesso remoto", + "HeaderHttpsSettings": "Definições de HTTPS", "HeaderDVR": "DVR", - "ApiKeysCaption": "Lista das chaves de API atualmente habilitadas", - "ButtonTogglePlaylist": "Playlist", + "ApiKeysCaption": "Lista das chaves da API atualmente ativas", + "ButtonTogglePlaylist": "Lista de reprodução", "ButtonSyncPlay": "SyncPlay", "Data": "Dados", - "ButtonUseQuickConnect": "Usar Conexão Rápida", + "ButtonUseQuickConnect": "Utilizar Ligação Rápida", "ButtonActivate": "Ativar", "Authorize": "Autorizar", - "EnableDetailsBannerHelp": "Exibir uma imagem de banner na parte superior da página de detalhes do item.", - "EnableDetailsBanner": "Banner de detalhes", - "EnableQuickConnect": "Ativar Conexão Rápida neste servidor", - "EnableDecodingColorDepth10Vp9": "Ativar decodificação de hardware de 10 bits para VP9", - "EnableDecodingColorDepth10Hevc": "Ativar decodificação de hardware de 10 bits para HEVC", - "EnableAutoCast": "Definir como padrão", - "HeaderDeleteDevices": "Excluir Todos os Dispositivos", - "Other": "Outro", - "DeleteDevicesConfirmation": "Tem certeza de que deseja excluir todos os dispositivos? Todas as outras sessões serão desconectadas. Os dispositivos reaparecerão na próxima vez que um usuário fizer login.", - "DeleteAll": "Excluir tudo", - "DailyAt": "Diariamente às {0}", + "EnableDetailsBannerHelp": "Mostrar uma imagem no topo da página dos detalhes do item.", + "EnableDetailsBanner": "Faixa de detalhes", + "EnableQuickConnect": "Ativar Ligação Rápida neste servidor", + "EnableDecodingColorDepth10Vp9": "Ativar descodificação de hardware de 10-bits para VP9", + "EnableDecodingColorDepth10Hevc": "Ativar descodificação de hardware de 10-bits para HEVC", + "EnableAutoCast": "Definir como predefinição", + "HeaderDeleteDevices": "Eliminar todos os dispositivos", + "Other": "Outros", + "DeleteDevicesConfirmation": "Tens a certeza de que pretendes eliminar todos os dispositivos? Todas as outras sessões serão encerradas. Os dispositivos voltarão a aparecer da próxima vez que um utilizador iniciar sessão.", + "DeleteAll": "Eliminar tudo", + "DailyAt": "Diariamente, às {0}", "ClearQueue": "Limpar fila", - "Bwdif": "Filtro de Desentrelaçamento Bob Weaver (BWDIF)", - "ButtonPlayer": "Reprodutor", - "ButtonCast": "Transmitir para dispositivo", - "AllowTonemappingHelp": "O tone-mapping transforma o alcance dinâmico de um vídeo de HDR para SDR mantendo detalhes e cores. Funciona apenas com vídeos HDR10, HLG e DoVi de 10 bits. Requer runtime GPGPU correspondente.", - "MusicVideos": "Vídeos Musicais", + "Bwdif": "Filtro de Desentrelação Bob Weaver (BWDIF)", + "ButtonPlayer": "Leitor", + "ButtonCast": "Transmitir para o dispositivo", + "AllowTonemappingHelp": "O mapeamento de tons pode transformar a gama dinâmica de um vídeo de HDR para SDR, mantendo os detalhes e as cores da imagem, que são informações muito importantes para representar a cena original. Atualmente funciona apenas com vídeos HDR10 de 10 bits, HLG e DoVi. Isso requer o tempo de execução GPGPU correspondente.", + "MusicVideos": "Videoclipes", "LabelTonemappingPeak": "Pico do mapeamento de tons", - "LabelTonemappingParamHelp": "Ajuste o algoritmo de mapeamento de tons. Geralmente, deixe em branco.", - "LabelTonemappingParam": "Parâmetro do mapeamento de tons", - "LabelTonemappingDesatHelp": "Aplicar desaturação para realces que excedem este nível de brilho. O valor recomendado é 0 (desativar).", - "LabelTonemappingDesat": "Desaturação do mapeamento de tons", - "LabelTonemappingAlgorithm": "Selecione o algoritmo de mapeamento de tons a ser usado", + "LabelTonemappingParamHelp": "Afina o algoritmo de mapeamento de tons. É recomendado deixar este campo em branco.", + "LabelTonemappingParam": "Parâmetros do mapeamento de tons", + "LabelTonemappingDesatHelp": "Aplica a dessaturação aos realces que excedem este nível de brilho. O valor recomendado é 0 (desativar).", + "LabelTonemappingDesat": "Dessaturação do mapeamento de tons", + "LabelTonemappingAlgorithm": "Seleciona o algoritmo de mapeamento de tons a utilizar", "LabelSyncPlayTimeSyncOffset": "Deslocamento de tempo", - "LabelSyncPlayTimeSyncDevice": "Sincronização de tempo com", + "LabelSyncPlayTimeSyncDevice": "Sincronizando o tempo com", "LabelSyncPlaySyncMethod": "Método de sincronização", - "LabelSyncPlayResumePlaybackDescription": "Juntar-se novamente à reprodução em grupo", - "LabelSyncPlayResumePlayback": "Retomar reprodução local", + "LabelSyncPlayResumePlaybackDescription": "Retomar a reprodução em grupo", + "LabelSyncPlayResumePlayback": "Retomar a reprodução local", "LabelSyncPlayPlaybackDiff": "Diferença de tempo de reprodução", - "LabelSyncPlayNewGroupDescription": "Criar um novo grupo", + "LabelSyncPlayNewGroupDescription": "Crie um novo grupo", "LabelSyncPlayNewGroup": "Novo grupo", "LabelSyncPlayLeaveGroupDescription": "Desativar SyncPlay", - "LabelSyncPlayLeaveGroup": "Sair do grupo", - "LabelSyncPlayHaltPlaybackDescription": "E ignorar atualizações atuais da lista de reprodução", + "LabelSyncPlayLeaveGroup": "Deixar o grupo", + "LabelSyncPlayHaltPlaybackDescription": "E ignorar as atualizações recentes da playlist", "LabelSyncPlayHaltPlayback": "Parar reprodução local", - "LabelSyncPlayAccessNone": "Desativado para este usuário", - "LabelSyncPlayAccessJoinGroups": "Permitir que o usuário junte-se a grupos", - "LabelSyncPlayAccessCreateAndJoinGroups": "Permitir que o usuário crie e junte-se a grupos", - "LabelSyncPlayAccess": "Acesso ao SyncPlay", + "LabelSyncPlayAccessNone": "Desativado para este utilizador", + "LabelSyncPlayAccessJoinGroups": "Permitir ao utilizador aderir a grupos", + "LabelSyncPlayAccessCreateAndJoinGroups": "Permitir ao utilizador criar e aderir a grupos", + "LabelSyncPlayAccess": "Acesso SyncPlay", "LabelSubtitleVerticalPosition": "Posição vertical", "LabelStable": "Estável", "LabelSSDPTracingFilterHelp": "Endereço IP opcional para filtrar o tráfego SSDP registrado.", "LabelSSDPTracingFilter": "Filtro SSDP", "LabelRepositoryUrlHelp": "A localização do manifesto do repositório que você deseja incluir.", "LabelRepositoryUrl": "URL do Repositório", - "LabelRepositoryNameHelp": "Um nome personalizado para distinguir este repositório de outros adicionados ao seu servidor.", + "LabelRepositoryNameHelp": "Nome personalizado para distinguir este repositório de outros presentes no servidor.", "LabelRepositoryName": "Nome do Repositório", - "LabelQuickConnectCode": "Código de Conexão Rápida", - "LabelPublishedServerUriHelp": "Substitua a URI usada pelo Jellyfin, com base na interface ou no endereço IP do cliente. Por exemplo: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, or all=https://jellyfin.example.com", - "LabelPublishedServerUri": "URIs do Servidor Publicado", - "LabelOpenclDeviceHelp": "Este é o dispositivo OpenCL usado para mapeamento de tons. O lado esquerdo do ponto é o número da plataforma e o lado direito é o número do dispositivo na plataforma. O valor padrão é 0.0. O arquivo do aplicativo FFmpeg contendo o método de aceleração de hardware OpenCL é necessário.", + "LabelQuickConnectCode": "Código de Ligação Rápida", + "LabelPublishedServerUriHelp": "Substituir o URI utilizado pelo Jellyfin, com base na interface, ou no endereço IP do cliente. Por exemplo: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, ou all=https://jellyfin.example.com", + "LabelPublishedServerUri": "URIs de Servidor Publicado", + "LabelOpenclDeviceHelp": "Este é o dispositivo OpenCL utilizado para o mapeamento de tons. O número à esquerda do ponto representa a plataforma, e o da direita representa o número do dispositivo nessa plataforma. O valor predefinido é 0.0. É necessário o ficheiro da aplicação FFmpeg que contenha o método de aceleração por hardware via OpenCL.", "LabelOpenclDevice": "Dispositivo OpenCL", - "LabelMinAudiobookResumeHelp": "Os títulos são considerados não reproduzidos se parados antes deste tempo.", - "LabelMinAudiobookResume": "Retomar mínimo do audiolivro em minutos", - "LabelMaxAudiobookResume": "Minutos restantes do audiolivro para retomar", - "LabelMaxMuxingQueueSizeHelp": "Número máximo de pacotes que podem ser armazenados em buffer enquanto aguardam a inicialização de todos os streams. Tente aumentá-lo se ainda encontrar o erro \"Muitos pacotes armazenados em buffer para o stream de saída\" nos logs do FFmpeg. O valor recomendado é 2048.", + "LabelMinAudiobookResumeHelp": "Os audiolivros são considerados como não ouvidos se parados antes do valor definido.", + "LabelMinAudiobookResume": "Duração mínima do audiolivro em minutos para permitir retomar", + "LabelMaxAudiobookResume": "Minutos restantes para retomar o audiolivro", + "LabelMaxMuxingQueueSizeHelp": "Número máximo de pacotes que podem ser armazenados em buffer enquanto espera que todas as transmissões sejam inicializadas. Tenta aumentá-lo se ainda encontrares o erro \"Demasiados pacotes armazenados em buffer para o fluxo de saída\" nos registos do FFmpeg. O valor recomendado é 2048.", "LabelMaxMuxingQueueSize": "Tamanho máximo da fila de muxing", - "LabelMaxAudiobookResumeHelp": "Os títulos são considerados totalmente reproduzidos se parados quando a duração restante é menor que este valor.", + "LabelMaxAudiobookResumeHelp": "Os audiolivros são considerados como ouvidos quando o valor em falta for menor que o valor definido.", "LabelKnownProxies": "Proxies conhecidos", "LabelIsForced": "Forçado", "LabelIconMaxResHelp": "Resolução máxima dos ícones expostos por meio da propriedade upnp:icon.", "LabelHDHomerunPortRangeHelp": "Restringe o intervalo de portas UDP HD Homerun a este valor. (O padrão é 1024 - 65535).", "LabelHDHomerunPortRange": "Intervalo de portas HD Homerun", - "LabelH265Crf": "Codificação H.265 CRF", + "LabelH265Crf": "CRF da codificação H.265", "LabelEnableSSDPTracingHelp": "Habilite o registro dos detalhes do rastreamento de rede SSDP.
AVISO: Isso causará uma grave degradação do desempenho.", "LabelEnableSSDPTracing": "Habilitar Rastreamento de SSDP", - "LabelEnableIP4Help": "Ativar funcionalidade IPv4.", - "LabelEnableIP6Help": "Ativar funcionalidade IPv6.", + "LabelEnableIP4Help": "Ativar a funcionalidade IPv4.", + "LabelEnableIP6Help": "Ativar a funcionalidade IPv6.", "LabelEnableIP6": "Ativar IPv6", "LabelEnableIP4": "Ativar IPv4", "LabelDropSubtitleHere": "Solte a legenda aqui, ou clique para navegar.", - "LabelCurrentStatus": "Status atual", - "LabelCreateHttpPortMapHelp": "Permitir mapeamento automático de porta para criar uma regra para tráfego HTTP além do tráfego HTTPS.", - "LabelCreateHttpPortMap": "Ativar mapeamento automático de porta para tráfego HTTP e HTTPS.", + "LabelCurrentStatus": "Estado atual", + "LabelCreateHttpPortMapHelp": "Permita o mapeamento automático de portas para criar uma regra para o tráfego HTTP, além do tráfego HTTPS.", + "LabelCreateHttpPortMap": "Ativar o mapeamento automático de portas para tráfego HTTP e HTTPS.", "LabelColorTransfer": "Transferência de cor", "LabelColorSpace": "Espaço de cor", - "LabelColorPrimaries": "Primárias de cor", - "LabelAutomaticDiscoveryHelp": "Permitir que aplicativos detectem automaticamente o Jellyfin usando o UDP na porta 7359.", - "LabelAutomaticDiscovery": "Ativar Descoberta Automática", + "LabelColorPrimaries": "Cores primárias", + "LabelAutomaticDiscoveryHelp": "Permitir que os aplicativos detectem automaticamente o Jellyfin usando a porta UDP 7359.", + "LabelAutomaticDiscovery": "Ativar deteção automática", "LabelAutoDiscoveryTracingHelp": "Quando habilitado, os pacotes recebidos na porta de descoberta automática serão registrados.", "LabelAutoDiscoveryTracing": "Ative o rastreamento de Descoberta Automática.", "LabelAlbumArtMaxResHelp": "Resolução máxima da arte do álbum exposta por meio da propriedade upnp:albumArtURI.", - "KnownProxiesHelp": "Lista separada por vírgulas de endereços IP ou nomes de hosts de proxies conhecidos usados ao conectar-se à sua instância Jellyfin. Isso é necessário para fazer uso adequado dos cabeçalhos 'X-Forwarded-For'. Requer uma reinicialização após a gravação.", + "KnownProxiesHelp": "Lista separada por vírgulas de endereços IP ou hostnames de proxies conhecidos usados ao se conectar à sua instância Jellyfin. Isso é necessário para fazer uso adequado dos cabeçalhos X-Forwarded-For. Requer uma reinicialização após salvar.", "Image": "Imagem", "HeaderUploadSubtitle": "Enviar Legenda", - "HeaderSyncPlaySelectGroup": "Entrar em um grupo", + "HeaderSyncPlaySelectGroup": "Junta-te a um grupo", "HeaderSyncPlayEnabled": "SyncPlay ativado", - "HeaderPortRanges": "Configurações de Firewall e Proxy", - "HeaderNewRepository": "Novo Repositório", + "HeaderPortRanges": "Definições de Firewall e Proxy", + "HeaderNewRepository": "Novo repositório", "HeaderNetworking": "Protocolos IP", "HeaderDebugging": "Depuração e Rastreamento", - "HeaderContinueReading": "Continuar Lendo", - "HeaderAutoDiscovery": "Descoberta Automática", - "HeaderAddUser": "Adicionar Usuário", - "HeaderAddUpdateSubtitle": "Adicionar/Atualizar Legenda", - "Framerate": "Taxa de quadros", + "HeaderContinueReading": "Continuar a ler", + "HeaderAutoDiscovery": "Deteção de rede", + "HeaderAddUser": "Adicionar utilizador", + "HeaderAddUpdateSubtitle": "Adicionar/Atualizar legenda", + "Framerate": "Taxa de fotogramas", "Filter": "Filtro", "EveryXMinutes": "A cada {0} minutos", "EveryXHours": "A cada {0} horas", - "EveryHour": "A cada hora", + "EveryHour": "Toda hora", "EnableTonemapping": "Ativar mapeamento de tons", "EnableFasterAnimationsHelp": "Use animações e transições mais rápidas.", "EnableFasterAnimations": "Animações mais rápidas", - "EnableBlurHashHelp": "Imagens que ainda estão sendo carregadas serão exibidas com um placeholder exclusivo.", - "EnableBlurHash": "Ativar placeholders desfocados para imagens", + "EnableBlurHashHelp": "As imagens que ainda estão sendo carregadas serão exibidas com um marcador único.", + "EnableBlurHash": "Ativar marcadores de posição desfocados para imagens", "DisablePlugin": "Desativar", "EnablePlugin": "Ativar", "DirectPlayHelp": "O arquivo de origem é totalmente compatível com este cliente e a sessão está recebendo o arquivo sem modificações.", "MessageSent": "Mensagem enviada.", - "MessagePluginInstallError": "Ocorreu um erro ao instalar o plugin.", - "MessageNoRepositories": "Nenhum repositório.", - "MessageGetInstalledPluginsError": "Ocorreu um erro ao obter a lista de plugins atualmente instalados.", - "MediaInfoColorPrimaries": "Primárias de cor", + "MessagePluginInstallError": "Ocorreu um erro durante a instalação da extensão.", + "MessageNoRepositories": "Sem repositórios.", + "MessageGetInstalledPluginsError": "Ocorreu um erro ao tentar obter a lista de extensões atualmente instaladas.", + "MediaInfoColorPrimaries": "Cores primárias", "LastSeen": "Última atividade {0}", - "LabelUserMaxActiveSessions": "Número máximo de sessões de usuário simultâneas", + "LabelUserMaxActiveSessions": "Número máximo de sessões em simultâneo", "LabelUnstable": "Instável", "LabelHardwareEncoding": "Codificação por hardware", - "LabelSyncPlaySettingsExtraTimeOffset": "Deslocamento de tempo extra", - "LabelSyncPlaySettingsDescription": "Alterar preferências do SyncPlay", - "LabelSortName": "Nome da ordenação", + "LabelSyncPlaySettingsExtraTimeOffset": "Compensação do tempo extra", + "LabelSyncPlaySettingsDescription": "Alterar as preferências do SyncPlay", + "LabelSortName": "Ordenar nome", "LabelSlowResponseTime": "Tempo em ms após o qual uma resposta é considerada lenta", - "LabelSlowResponseEnabled": "Registrar uma mensagem de aviso se o servidor demorar para responder", - "LabelOriginalName": "Nome original", - "LabelLocalCustomCss": "Código CSS personalizado para estilização que se aplica apenas a este cliente. Você pode desativar o código CSS personalizado do servidor.", - "LabelMaxDaysForNextUpHelp": "Defina a quantidade máxima de dias que um programa deve permanecer na lista 'Próximo' sem ser assistido.", - "LabelMaxDaysForNextUp": "Máx. dias no 'Próximo'", - "AgeValue": "({0} anos)", - "LabelDisableCustomCss": "Desativar código CSS personalizado para personalização/marcação fornecido pelo servidor.", - "LabelAutomaticallyAddToCollectionHelp": "Quando pelo menos 2 filmes tiverem o mesmo nome de coleção, eles serão adicionados automaticamente à coleção.", + "LabelSlowResponseEnabled": "Escrever aviso no registo se o servidor for muito lento a responder", + "LabelOriginalName": "Nome Original", + "LabelLocalCustomCss": "Estilo CSS personalizado que se aplica apenas a este cliente. Podes desativar o CSS personalizado do servidor.", + "LabelMaxDaysForNextUpHelp": "Defina a quantidade máxima de dias que um programa deve permanecer na lista 'Próximo' sem o assistir.", + "LabelMaxDaysForNextUp": "Máximo de dias em 'Próximo'", + "AgeValue": "Com {0} anos", + "LabelDisableCustomCss": "Desativar código CSS personalizado fornecido pelo servidor.", + "LabelAutomaticallyAddToCollectionHelp": "Quando pelo menos 2 filmes tiverem o mesmo nome de coleção, estes serão adicionados automaticamente.", "LabelAutomaticallyAddToCollection": "Adicionar automaticamente à coleção", "HeaderSyncPlayTimeSyncSettings": "Sincronização de tempo", "HeaderSyncPlayPlaybackSettings": "Reprodução", - "HeaderSyncPlaySettings": "Configurações do SyncPlay", - "ErrorPlayerNotFound": "Nenhum reprodutor encontrado para a mídia solicitada.", + "HeaderSyncPlaySettings": "Definições de SyncPlay", + "ErrorPlayerNotFound": "Não foi possível identificar nenhum leitor compatível com o ficheiro solicitado.", "Engineer": "Engenheiro de som", "DisableCustomCss": "Desativar código CSS personalizado fornecido pelo servidor", - "Console": "Console", - "Conductor": "Condutor", + "Console": "Consola", + "Conductor": "Maestro", "Casual": "Casual", - "ButtonBackspace": "Backspace", - "GoogleCastUnsupported": "Google Cast Não Suportado", + "ButtonBackspace": "Retrocesso", + "GoogleCastUnsupported": "Google Cast não compatível", "Digital": "Digital", - "CopyFailed": "Não foi possível copiar", + "CopyFailed": "Não podes copiar", "Copy": "Copiar", "Copied": "Copiado", "ButtonSpace": "Espaço", - "ButtonExitApp": "Sair do aplicativo", + "ButtonExitApp": "Sair da aplicação", "ButtonClose": "Fechar", "AddToFavorites": "Adicionar aos favoritos", - "DownloadAll": "Baixar tudo", + "DownloadAll": "Transferir tudo", "Experimental": "Experimental", "HeaderPerformance": "Desempenho", - "IgnoreDts": "Ignorar DTS (timestamp de decodificação)", - "IgnoreDtsHelp": "Desativar esta opção pode resolver alguns problemas, por exemplo, áudio ausente em canais com streams de áudio e vídeo separados.", - "LabelStereoDownmixAlgorithm": "Algoritmo de Downmix Estéreo", + "IgnoreDts": "Ignorar DTS (decodificação de timestamp)", + "IgnoreDtsHelp": "Desativar esta opção pode resolver alguns problemas, por exemplo, a falta de áudio em canais com fluxos de áudio e vídeo separados.", + "LabelStereoDownmixAlgorithm": "Algoritmo Stereo Downmix", "ShowLess": "Mostrar menos", - "SecondarySubtitles": "Legendas Secundárias", - "ScreenResolution": "Resolução da Tela", + "SecondarySubtitles": "Legendas secundárias", + "ScreenResolution": "Resolução do ecrã", "Restart": "Reiniciar", - "EnableCardLayout": "Exibir Cartão visual", - "EnableRewatchingNextUp": "Ativar Reassistir no Próximo", - "Arranger": "Arranjador", + "EnableCardLayout": "Mostrar cartão visual", + "EnableRewatchingNextUp": "Ativar Rever em 'A Seguir'", + "Arranger": "Organizador", "Print": "Imprimir", - "Poster": "Pôster", + "Poster": "Cartaz", "Small": "Pequeno", - "QuickConnectActivationSuccessful": "Ativação bem-sucedida", + "QuickConnectActivationSuccessful": "Ativado com sucesso", "SaveChanges": "Guardar alterações", - "PreferEmbeddedExtrasTitlesOverFileNames": "Preferir títulos incorporados em vez de nomes de arquivos para extras", - "AllowEmbeddedSubtitlesAllowAllOption": "Permitir Todas", - "AllowEmbeddedSubtitlesAllowImageOption": "Permitir Imagem", - "Preview": "Prévia", + "PreferEmbeddedExtrasTitlesOverFileNames": "Preferir títulos incorporados ao invés dos nomes dos arquivos para os extras", + "AllowEmbeddedSubtitlesAllowAllOption": "Permitir todos os tipos", + "AllowEmbeddedSubtitlesAllowImageOption": "Permitir imagens", + "Preview": "Amostra", "Premieres": "Estreias", "Production": "Produção", "Profile": "Perfil", - "PreviousTrack": "Pular para anterior", + "PreviousTrack": "Faixa anterior", "PluginFromRepo": "{0} do repositório {1}", "ShowMore": "Mostrar mais", - "MediaInfoBlPresentFlag": "Sinalizador de preset BL do DV", - "ReleaseGroup": "Grupo de Lançamento", + "MediaInfoBlPresentFlag": "Sinalizador predefinido DV BL", + "ReleaseGroup": "Grupo do lançamento", "Primary": "Primário", - "RefreshDialogHelp": "Os metadados são atualizados com base nas configurações e serviços da internet que estão ativados no Painel.", + "RefreshDialogHelp": "Os metadados são atualizados consoante as definições e serviços de internet ativos no Painel de controlo.", "Cursive": "Cursivo", - "ItemDetails": "Detalhes do Item", - "HomeVideosPhotos": "Vídeos e Fotos Iniciais", - "PreferSystemNativeHwDecoder": "Preferir decodificadores de hardware nativos do sistema operacional DXVA ou VA-API", - "EnableRewatchingNextUpHelp": "Ativar exibição de episódios já assistidos nas seções 'Próximo'.", - "AllowEmbeddedSubtitlesAllowNoneOption": "Permitir Nenhuma", - "Rate": "Avaliar", + "ItemDetails": "Detalhe do item", + "HomeVideosPhotos": "Videos e Fotos", + "PreferSystemNativeHwDecoder": "Preferir os descodificadores DXVA nativos do SO ou os de hardware VA-API", + "EnableRewatchingNextUpHelp": "Mostrar episódios já vistos nas secções 'A Seguir'.", + "AllowEmbeddedSubtitlesAllowNoneOption": "Não permitir", + "Rate": "Classificar", "Recordings": "Gravações", "ShowIndicatorsFor": "Mostrar indicadores para", - "SeriesSettings": "Configurações da Série", + "SeriesSettings": "Definições de séries", "Trailer": "Trailer", - "EnableIntelLowPowerH264HwEncoder": "Ativar codificador de hardware H.264 de baixo consumo Intel", - "MediaInfoDvBlSignalCompatibilityId": "ID de compatibilidade de sinal BL do DV", - "HeaderDummyChapter": "Imagens de Capítulo", + "EnableIntelLowPowerH264HwEncoder": "Ativar o codificador de hardware H.264 de baixo consumo da Intel", + "MediaInfoDvBlSignalCompatibilityId": "ID de compatibilidade BL", + "HeaderDummyChapter": "Imagens dos capítulos", "LabelDummyChapterDuration": "Intervalo", - "LabelChapterImageResolutionHelp": "A resolução das imagens de capítulo extraídas. Alterar isso não terá efeito sobre os capítulos fictícios existentes.", + "LabelChapterImageResolutionHelp": "A resolução das imagens dos capítulos extraídas. A alteração desta resolução não terá qualquer efeito nos capítulos fictícios existentes.", "LabelChapterImageResolution": "Resolução", "LabelDummyChapterCount": "Limite", - "HeaderRecordingMetadataSaving": "Gravação de Metadados", - "AllowEmbeddedSubtitlesAllowTextOption": "Permitir Texto", + "HeaderRecordingMetadataSaving": "Registo de metadados", + "AllowEmbeddedSubtitlesAllowTextOption": "Permitir texto", "Premiere": "Estreia", "PreviousChapter": "Capítulo anterior", - "LabelDummyChapterDurationHelp": "O intervalo entre capítulos fictícios em segundos. Defina como 0 para desativar a geração de capítulos fictícios. Alterar isso não terá efeito sobre os capítulos fictícios existentes.", - "AllowCollectionManagement": "Permitir que este usuário gerencie coleções", + "LabelDummyChapterDurationHelp": "Define o intervalo entre capítulos fictícios em segundos. Para desativar a criação de capítulos fictícios, define como 0. Alterar este valor não terá qualquer efeito sobre os capítulos fictícios existentes.", + "AllowCollectionManagement": "Permitir este utilizador gerir as coleções", "LabelMaxVideoResolution": "Resolução máxima permitida para transcodificação de vídeo", "EnableAudioNormalization": "Normalização de Áudio", "GetThePlugin": "Obter o Plugin", - "LabelSyncPlaySettingsExtraTimeOffsetHelp": "Ajuste manualmente o deslocamento de tempo (em ms) com o dispositivo selecionado para sincronização de tempo. Ajuste com cuidado.", - "LabelSyncPlaySettingsSyncCorrection": "Correção de Sincronização", - "LabelEnableAudioVbr": "Ativar codificação de áudio VBR", - "LabelEnableAudioVbrHelp": "A codificação de taxa variável oferece melhor qualidade em relação à taxa de bits média, mas em alguns casos raros pode causar problemas de buffer e compatibilidade.", + "LabelSyncPlaySettingsExtraTimeOffsetHelp": "Ajuste manualmente o atraso de tempo (em ms) com o dispositivo selecionado para sincronismo de tempo. Ajuste com cuidado.", + "LabelSyncPlaySettingsSyncCorrection": "Correção de sincronismo", + "LabelEnableAudioVbr": "Habilitar codificação de áudio VBR", + "LabelEnableAudioVbrHelp": "A taxa de bits variavel oferece uma melhor que a taxa de bits médio, mas em alguns raros casos pode causar problemas relacionados a armazenamento e compatibilidade.", "EnableAudioNormalizationHelp": "A normalização de áudio vai adicionar um ganho constante para manter a média em um nível desejável (-18db).", - "LabelParallelImageEncodingLimit": "Limite de codificação de imagem paralela", - "LabelEnableLUFSScan": "Ativar verificação LUFS", - "LabelEnableLUFSScanHelp": "Os clientes podem normalizar a reprodução de áudio para obter um volume igual em todas as faixas. Isso tornará as verificações de biblioteca mais longas e consumirá mais recursos.", - "LabelParallelImageEncodingLimitHelp": "Número máximo de codificações de imagem que podem ser executadas em paralelo. Deixá-lo vazio escolherá um limite com base na contagem de núcleos do seu sistema.", - "GoHome": "Ir para a página inicial", - "GridView": "Visualização em grade", - "HeaderConfirmRepositoryInstallation": "Confirmar Instalação do Repositório do Plugin", - "AllowSegmentDeletion": "Excluir segmentos", - "AllowSegmentDeletionHelp": "Exclui segmentos antigos após serem baixados pelo cliente. Isso evita armazenar o arquivo transcodificado inteiro no disco. Desative se tiver problemas de reprodução.", - "LabelSegmentKeepSeconds": "Tempo para manter segmentos", - "LabelSegmentKeepSecondsHelp": "Tempo em segundos para manter os segmentos após serem baixados pelo cliente. Só funciona se a exclusão de segmentos estiver ativada.", - "LabelThrottleDelaySeconds": "Controlar após", - "HeaderAllRecordings": "Todas as Gravações", - "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Extras geralmente têm o mesmo nome incorporado que o pai, marque isso para usar os títulos incorporados para eles mesmo assim.", - "QuickConnectAuthorizeSuccess": "Você autenticou seu dispositivo com sucesso!", - "QuickConnectNotActive": "A Conexão Rápida não está ativa neste servidor", - "ResolutionMatchSource": "Correspondência com a Fonte", + "LabelParallelImageEncodingLimit": "Limite de codificação de imagens em paralelo", + "LabelEnableLUFSScan": "Ativar a verificação LUFS", + "LabelEnableLUFSScanHelp": "Os clientes podem normalizar a reprodução de áudio para obter um volume uniforme entre faixas. Isto tornará as análises da biblioteca mais lentas e exigirá mais recursos.", + "LabelParallelImageEncodingLimitHelp": "Número máximo de codificações de imagem permitidas para execução em paralelo. Se deixares este campo vazio, será escolhido um limite baseado na contagem de núcleos do teu sistema.", + "GoHome": "Ir ao início", + "GridView": "Vista em grelha", + "HeaderConfirmRepositoryInstallation": "Confirmar a instalação do repositório de extensões", + "AllowSegmentDeletion": "Eliminar segmentos", + "AllowSegmentDeletionHelp": "Elimina segmentos antigos depois de terem sido descarregados pelo cliente. Isto evita ter de armazenar todo o ficheiro transcodificado no disco. Desativa esta opção se tiveres problemas de reprodução.", + "LabelSegmentKeepSeconds": "Tempo em segundos para manter os segmentos", + "LabelSegmentKeepSecondsHelp": "Tempo em segundos durante o qual os segmentos devem ser mantidos depois de serem descarregados pelo cliente. Só funciona se a eliminação de segmentos estiver ativada.", + "LabelThrottleDelaySeconds": "acelerar depois", + "HeaderAllRecordings": "Todas as gravações", + "PreferEmbeddedExtrasTitlesOverFileNamesHelp": "Os extras geralmente têm o mesmo nome incorporado do parente, marque isto para usar títulos incorporados para eles de qualquer maneira.", + "QuickConnectAuthorizeSuccess": "Autenticaste o teu dispositivo com sucesso!", + "QuickConnectNotActive": "A Ligação Rápida não está ativa neste servidor", + "ResolutionMatchSource": "Mesma que a fonte", "SeriesRecordingScheduled": "Gravação da série agendada.", - "RememberSubtitleSelections": "Definir faixa de legenda com base no item anterior", - "RememberAudioSelections": "Definir faixa de áudio com base no item anterior", - "RememberAudioSelectionsHelp": "Tentar definir a faixa de áudio para a correspondência mais próxima com o último vídeo.", - "RememberSubtitleSelectionsHelp": "Tentar definir a faixa de legenda para a correspondência mais próxima com o último vídeo.", - "ResetPassword": "Redefinir Senha", - "LabelSyncPlaySettingsMaxDelaySpeedToSyncHelp": "Atraso máximo de reprodução (em ms) após o qual o SkipToSync é usado em vez do SpeedToSync.", - "LabelSyncPlaySettingsMinDelaySpeedToSyncHelp": "Atraso mínimo de reprodução (em ms) após o qual o SpeedToSync tenta corrigir a posição da reprodução.", - "QuickConnectNotAvailable": "Peça ao administrador do servidor para ativar a Conexão Rápida", - "Remixer": "Remixer", - "QuickConnectAuthorizeCode": "Insira o código {0} para fazer login", - "QuickConnect": "Conexão Rápida", + "RememberSubtitleSelections": "Definir faixa de legendas com base no item anterior", + "RememberAudioSelections": "Defina a faixa de áudio com base no item anterior", + "RememberAudioSelectionsHelp": "Tente definir a faixa de áudio para a correspondência mais próxima do último vídeo.", + "RememberSubtitleSelectionsHelp": "Tente definir a faixa de legendas para a correspondência mais próxima do último vídeo.", + "ResetPassword": "Redefinir palavra-passe", + "LabelSyncPlaySettingsMaxDelaySpeedToSyncHelp": "Atraso máximo de reprodução (em ms) após o qual SkipToSync é usado em vez de SpeedToSync.", + "LabelSyncPlaySettingsMinDelaySpeedToSyncHelp": "Atraso mínimo da reprodução (em ms) após o qual o SpeedToSync tenta corrigir a posição de reprodução.", + "QuickConnectNotAvailable": "Pede ao administrador do servidor para ativar a Ligação Rápida", + "Remixer": "'Remixer'", + "QuickConnectAuthorizeCode": "Introduz o código {0} para iniciar sessão", + "QuickConnect": "Ligação Rápida", "SelectServer": "Selecionar Servidor", - "PosterCard": "Cartão de Pôster", + "PosterCard": "Cartaz em forma de cartão", "SortByValue": "Ordenar por {0}", - "PathNotFound": "O caminho não pôde ser encontrado. Verifique se o caminho é válido e tente novamente.", - "PlaybackErrorPlaceHolder": "Este é um placeholder para mídia física que o Jellyfin não pode reproduzir. Por favor, insira o disco para reproduzir.", - "ProductionLocations": "Locais de Produção", + "PathNotFound": "Não foi possível encontrar a localização. Certifica-te de que o caminho é válido e tenta novamente.", + "PlaybackErrorPlaceHolder": "Este é um espaço reservado para mídia física que o Jellyfin não consegue reproduzir. Por favor insira o disco para reproduzir.", + "ProductionLocations": "Locais da produção", "Photo": "Foto", - "SearchResultsEmpty": "Desculpe! Nenhum resultado encontrado para \"{0}\"", - "ShowParentImages": "Mostrar imagens da série", - "SaveRecordingNFO": "Salvar metadados EPG da gravação em NFO", + "SearchResultsEmpty": "Desculpa! Não foram encontrados resultados para \"{0}\"", + "ShowParentImages": "Mostrar imagens das series", + "SaveRecordingNFO": "Guardar metadados EPG da gravação no NFO", "PersonRole": "como {0}", - "AllowEmbeddedSubtitles": "Desativar diferentes tipos de legendas embutidas", - "QuickConnectDeactivated": "A Conexão Rápida foi desativada antes que a solicitação de login pudesse ser aprovada", - "QuickConnectInvalidCode": "Código de Conexão Rápida inválido", - "QuickConnectDescription": "Para fazer login com a Conexão Rápida, selecione o botão 'Conexão Rápida' no dispositivo que você está fazendo login e insira o código exibido abaixo.", - "RefreshQueued": "Atualização na fila.", + "AllowEmbeddedSubtitles": "Desativar diferentes tipos de legendas incorporadas", + "QuickConnectDeactivated": "A Ligação Rápida foi desativada antes do pedido de início de sessão ser aprovado", + "QuickConnectInvalidCode": "Código de Ligação Rápida inválido", + "QuickConnectDescription": "Para iniciar sessão com a Ligação Rápida, clica no botão \"Ligação Rápida\" no dispositivo a partir do qual estás a iniciar sessão e introduz o código apresentado abaixo.", + "RefreshQueued": "Atualização em fila de espera.", "PlaybackRate": "Velocidade de Reprodução", - "AllowEmbeddedSubtitlesHelp": "Desativar legendas que estão embaladas dentro dos contêineres de mídia. Requer uma atualização completa da biblioteca.", + "AllowEmbeddedSubtitlesHelp": "Desativar as legendas que estão empacotadas em containers multimédia. Requer uma atualização completa da biblioteca.", "LabelEnableGamepad": "Ativar Gamepad", "LabelTonemappingThreshold": "Limite de mapeamento de tons", "LabelTonemappingRange": "Intervalo do mapeamento de tons", - "PasswordRequiredForAdmin": "Uma senha é necessária para contas de administrador.", - "PleaseConfirmRepositoryInstallation": "Por favor, clique em OK para confirmar que você leu o acima e deseja prosseguir com a instalação do repositório do plugin.", - "LabelThrottleDelaySecondsHelp": "Tempo em segundos após o qual o transcodificador será controlado. Deve ser suficiente para o cliente manter um buffer saudável. Só funciona se o controle estiver ativado.", - "QuickConnectAuthorizeFail": "Código de Conexão Rápida desconhecido", - "TonemappingAlgorithmHelp": "O mapeamento de tons pode ser ajustado. Se você não estiver familiarizado com essas opções, mantenha o padrão. O valor recomendado é 'BT.2390'.", - "UseEpisodeImagesInNextUp": "Usar imagens de episódios nas seções 'Próximo' e 'Continuar Assistindo'", - "UseEpisodeImagesInNextUpHelp": "'Próximo' e 'Continuar Assistindo' usarão imagens de episódios como miniaturas em vez da miniatura principal do programa.", - "Yadif": "Yet Another DeInterlacing Filter (YADIF)", - "IntelLowPowerEncHelp": "A codificação de baixo consumo pode manter a sincronização desnecessária entre CPU e GPU. No Linux, devem ser desativados se o firmware HuC i915 não estiver configurado.", + "PasswordRequiredForAdmin": "É necessária uma palavra passe para contas de administrador.", + "PleaseConfirmRepositoryInstallation": "Clique em OK para confirmar que leu o texto acima e deseja prosseguir com a instalação do repositório de plug-ins.", + "LabelThrottleDelaySecondsHelp": "Tempo em segundos após o qual o transcodificador será limitado. Deve ser grande o suficiente para que o cliente mantenha um buffer saudável. Só funciona se a limitação estiver ligada.", + "QuickConnectAuthorizeFail": "Código de Ligação Rápida desconhecido", + "TonemappingAlgorithmHelp": "O mapeamento de tons pode ser afinado. Se não estiveres familiarizado com estas opções, mantém o valor predefinido. O valor recomendado é 'BT.2390'.", + "UseEpisodeImagesInNextUp": "Utilizar imagens do episódio nas secções 'A seguir' e 'Continuar a ver'", + "UseEpisodeImagesInNextUpHelp": "As secções 'A seguir' e 'Continuar a ver' vão utilizar imagens dos episódios como miniatura em vez da imagem primária da série.", + "Yadif": "Mais um filtro de desentrelaçamento (YADIF)", + "IntelLowPowerEncHelp": "A codificação de baixo consumo pode manter uma sincronização CPU-GPU desnecessária. No Linux eles devem ser desativados se o firmware i915 HuC não estiver configurado.", "LabelTonemappingThresholdHelp": "Os parâmetros do algoritmo de mapeamento de tom são ajustados para cada cena. Um limite é usado para detectar se a cena mudou ou não. Se a distância entre o brilho médio do quadro atual e a média atual exceder um valor limite, recalcularíamos a média da cena e o brilho máximo. Os valores recomendados e padrão são 0,8 e 0,2.", "SyncPlayAccessHelp": "O recurso SyncPlay permite sincronizar a reprodução com outros dispositivos. Selecione o nível de acesso que este usuário tem ao SyncPlay.", - "AllowVppTonemappingHelp": "Mapeamento de tons baseado em driver completo da Intel. Atualmente funciona apenas em determinados hardwares com vídeos HDR10. Esta opção tem prioridade mais alta em comparação com outra implementação OpenCL.", - "LabelSyncPlaySettingsMinDelaySkipToSyncHelp": "Atraso mínimo de reprodução (em ms) após o qual o SkipToSync tenta corrigir a posição da reprodução.", - "OptionMaxActiveSessions": "Defina o número máximo de sessões de usuário simultâneas.", - "LabelSyncPlaySettingsSpeedToSyncDurationHelp": "Quantidade de milissegundos usados pelo SpeedToSync para corrigir a posição da reprodução.", - "SubtitleAppearanceSettingsDisclaimer": "As configurações a seguir não se aplicam às legendas gráficas mencionadas acima ou às legendas ASS/SSA que incorporam seus próprios estilos.", - "UnsupportedPlayback": "O Jellyfin não pode descriptografar conteúdo protegido por DRM, mas todo o conteúdo será tentado independentemente, incluindo títulos protegidos. Alguns arquivos podem aparecer completamente pretos devido à criptografia ou outros recursos não suportados, como títulos interativos.", - "MessageSyncPlayGroupWait": "{0} está carregando…", - "LabelSelectAudioNormalization": "Normalização de Áudio", - "LabelBackdropScreensaverIntervalHelp": "O tempo em segundos entre diferentes planos de fundo ao usar o protetor de tela com plano de fundo.", + "AllowVppTonemappingHelp": "Mapeamento de tons totalmente baseado no driver Intel. Vídeos em HDR10 funcionam apenas em certas configurações de hardware. Tem maior prioridade quando comparado a outras implementações OpenCL.", + "LabelSyncPlaySettingsMinDelaySkipToSyncHelp": "Atraso mínimo de reprodução (em ms) após o qual SkipToSync tenta corrigir a posição de reprodução.", + "OptionMaxActiveSessions": "Definir o número máximo de sessões de usuário simultâneas.", + "LabelSyncPlaySettingsSpeedToSyncDurationHelp": "Quantidade de milissegundos usados pelo SpeedToSync para corrigir a posição de reprodução.", + "SubtitleAppearanceSettingsDisclaimer": "Estas definições não se aplicam a legendas gráficas mencionadas acima ou a legendas ASS/SSA com estilos próprios incorporados.", + "UnsupportedPlayback": "Jellyfin não pode desencriptar conteúdo protegido por DRM, mas todo o conteúdo será testado de qualquer maneira, incluindo títulos protegidos. Alguns arquivos podem aparecer completamente pretos devido à encriptação ou a outros recursos não suportados, como títulos interativos.", + "MessageSyncPlayGroupWait": "{0} está a armazenar em buffer…", + "LabelSelectAudioNormalization": "Normalização de áudio", + "LabelBackdropScreensaverIntervalHelp": "O tempo em segundos entre a mudança de diferentes imagens de fundo na proteção de ecrã.", "LabelServerVersion": "Versão do servidor", - "LabelTonemappingPeakHelp": "Substitua o valor de metadados incorporado para o sinal de entrada por este valor de pico. O valor padrão é 100 (1000nit).", - "OptionDateShowAdded": "Data do Programa Adicionado", + "LabelTonemappingPeakHelp": "Substitui o valor de metadados incorporado para o sinal de entrada por este valor de pico. O valor predefinido é 100 (1000nit).", + "OptionDateShowAdded": "Data de exibição adicionada", "Studios": "Estúdios", - "WriteAccessRequired": "O Jellyfin requer acesso de gravação a esta pasta. Por favor, assegure-se de que o acesso de gravação está habilitado e tente novamente.", - "LabelFallbackFontPathHelp": "Essas fontes são usadas por alguns clientes para renderizar legendas. Consulte a documentação para mais informações.", - "EnableGamepadHelp": "Ouvir entrada de qualquer controle conectado. (Requer: 'Modo de Exibição TV')", - "BackdropScreensaver": "Protetor de tela com plano de fundo", + "WriteAccessRequired": "Jellyfin requer acesso de gravação a esta pasta. Garanta o acesso de gravação e tente novamente.", + "LabelFallbackFontPathHelp": "Essas fontes são usadas por alguns clientes para renderizar legendas. Consulte a documentação para obter mais informações.", + "EnableGamepadHelp": "Detetar o sinal de entrada de qualquer comando ligado. (Requer: Modo de apresentação 'TV')", + "BackdropScreensaver": "Fundo do protetor de ecrã", "LabelLevel": "Nível", - "LabelSyncPlaySettingsMinDelaySpeedToSync": "Atraso mínimo do SpeedToSync", - "OptionDateEpisodeAdded": "Data do Episódio Adicionado", - "SubtitleDownloadersHelp": "Ative e classifique seus baixadores de legendas preferidos por ordem de prioridade.", - "Sort": "Ordenar", - "SmartSubtitlesHelp": "Legendas que correspondem à preferência de idioma serão carregadas quando o áudio estiver em um idioma estrangeiro.", + "LabelSyncPlaySettingsMinDelaySpeedToSync": "Atraso mínimo da velocidade de sincronização", + "OptionDateEpisodeAdded": "Data do episódio adicionado", + "SubtitleDownloadersHelp": "Ativa e ordena os teus fornecedores de legendas preferidos por ordem de prioridade.", + "Sort": "Organizar", + "SmartSubtitlesHelp": "As legendas que correspondem à preferência de idioma serão carregadas quando o áudio estiver em um idioma estrangeiro.", "SubtitleMagenta": "Magenta", "Smart": "Inteligente", - "StopPlayback": "Parar reprodução", - "MessageSyncPlayEnabled": "SyncPlay ativado.", - "MessageSyncPlayGroupDoesNotExist": "Falha ao entrar no grupo porque ele não existe.", + "StopPlayback": "Parar a reprodução", + "MessageSyncPlayEnabled": "Sincronização ativada.", + "MessageSyncPlayGroupDoesNotExist": "Falha ao ingressar no grupo porque ele não existe.", "Subtitle": "Legenda", - "MixedMoviesShows": "Filmes e Programas Mistos", - "MessageSyncPlayIsDisabled": "Permissão necessária para usar o SyncPlay.", - "LabelMediaDetails": "Detalhes da mídia", - "MessageSyncPlayErrorNoActivePlayer": "Nenhum reprodutor ativo encontrado. O SyncPlay foi desativado.", - "SpecialFeatures": "Recursos Especiais", - "MessageSyncPlayNoGroupsAvailable": "Sem grupos disponíveis. Comece a reproduzir algo primeiro.", + "MixedMoviesShows": "Filmes e séries misturados", + "MessageSyncPlayIsDisabled": "Requer permissão para utilizar SyncPlay.", + "LabelMediaDetails": "Detalhes do conteúdo multimédia", + "MessageSyncPlayErrorNoActivePlayer": "Não foi encontrado nenhum leitor ativo. O SyncPlay foi desativado.", + "SpecialFeatures": "Opções especiais", + "MessageSyncPlayNoGroupsAvailable": "Não há grupos disponíveis. Começa por reproduzir algo primeiro.", "Smaller": "Menor", "MessageSyncPlayErrorMedia": "Falha ao ativar o SyncPlay! Erro de mídia.", "MessageSyncPlayErrorAccessingGroups": "Ocorreu um erro ao acessar a lista de grupos.", @@ -1522,346 +1522,346 @@ "SubtitleVerticalPositionHelp": "Número da linha onde o texto aparece. Números positivos indicam de cima para baixo. Números negativos indicam de baixo para cima.", "Remuxing": "Remuxing", "OnApplicationStartup": "Na inicialização do aplicativo", - "MessageSyncPlayLibraryAccessDenied": "Acesso a este conteúdo restrito.", - "SortName": "Nome da ordenação", + "MessageSyncPlayLibraryAccessDenied": "O acesso a este conteúdo é restrito.", + "SortName": "Classificar nome", "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "Essas configurações também se aplicam a qualquer reprodução do Google Cast iniciada por este dispositivo.", - "OnWakeFromSleep": "Ao sair do modo de suspensão", - "OptionMaxActiveSessionsHelp": "Um valor de 0 desativará o recurso.", + "OnWakeFromSleep": "Ao acordar da suspensão", + "OptionMaxActiveSessionsHelp": "Um valor 0 desativará o recurso.", "Watched": "Assistido", - "SyncPlayGroupDefaultTitle": "Grupo de {0}", + "SyncPlayGroupDefaultTitle": "grupo de {0}", "TabRepositories": "Repositórios", - "TagsValue": "Tags: {0}", + "TagsValue": "Etiquetas: {0}", "TextSent": "Texto enviado.", - "ThemeSongs": "Músicas tema", - "ThemeVideos": "Vídeos tema", - "TheseSettingsAffectSubtitlesOnThisDevice": "Essas configurações afetam as legendas neste dispositivo", + "ThemeSongs": "Bandas sonoras do tema", + "ThemeVideos": "Vídeos do tema", + "TheseSettingsAffectSubtitlesOnThisDevice": "Estas definições afetam as legendas neste dispositivo", "Thumb": "Miniatura", - "ThumbCard": "Cartão de Miniatura", - "TitleHardwareAcceleration": "Aceleração por Hardware", + "ThumbCard": "Miniatura em forma de cartão", + "TitleHardwareAcceleration": "Aceleraçao do hardware", "Trailers": "Trailers", "TypeOptionPluralAudio": "Áudios", "TypeOptionPluralBook": "Livros", "TypeOptionPluralMovie": "Filmes", "Typewriter": "Máquina de escrever", "UnknownError": "Ocorreu um erro desconhecido.", - "Up": "Para cima", - "Upload": "Enviar", + "Up": "Acima", + "Upload": "Carregar", "ValueCodec": "Codec: {0}", "ValueContainer": "Contêiner: {0}", "ValueDiscNumber": "Disco {0}", "ValueMovieCount": "{0} filmes", "ValueEpisodeCount": "{0} episódios", - "ValueMusicVideoCount": "{0} vídeos musicais", + "ValueMusicVideoCount": "{0} videoclipes", "ValueOneEpisode": "1 episódio", "ValueOneSong": "1 música", "ValueSeconds": "{0} segundos", "ViewAlbum": "Ver álbum", "ViewAlbumArtist": "Ver artista do álbum", "ViewPlaybackInfo": "Ver informações de reprodução", - "WeeklyAt": "{0}s às {1}", - "Whitelist": "Lista branca", - "Writers": "Escritores", - "XmlTvKidsCategoriesHelp": "Programas com essas categorias serão exibidos como programas para crianças. Separe várias com '|'.", + "WeeklyAt": "{0} às {1}", + "Whitelist": "Lista de permissões", + "Writers": "Argumento", + "XmlTvKidsCategoriesHelp": "Lista de categorias, separadas por '|', que correspondem a programas para crianças.", "Yes": "Sim", - "HeaderSelectFallbackFontPathHelp": "Navegue ou insira o caminho da pasta da fonte de recuo a ser usada para renderizar legendas ASS/SSA.", - "RemuxHelp1": "A mídia está em um contêiner de arquivo incompatível (MKV, AVI, WMV, etc), mas tanto o stream de vídeo quanto o de áudio são compatíveis com o dispositivo. A mídia será reembalada sem perdas em tempo real antes de ser enviada ao dispositivo.", - "PreferFmp4HlsContainer": "Preferir contêiner de mídia fMP4-HLS", - "LabelSyncPlayInfo": "Informações do SyncPlay", - "PreferFmp4HlsContainerHelp": "Preferir usar fMP4 como o contêiner padrão para HLS, tornando possível o streaming direto de conteúdos HEVC e AV1 em dispositivos suportados.", + "HeaderSelectFallbackFontPathHelp": "Navegue ou insira o caminho da pasta de fontes substitutas a ser usada para renderizar legendas ASS/SSA.", + "RemuxHelp1": "O ficheiro multimédia está num container de ficheiros incompatível (MKV, AVI, WMV, etc.), mas tanto o fluxo de vídeo como o fluxo de áudio são compatíveis com o dispositivo. O ficheiro multimédia será reempacotado sem perdas em tempo real antes de ser enviado para o dispositivo.", + "PreferFmp4HlsContainer": "Preferir o container multimédia fMP4-HLS", + "LabelSyncPlayInfo": "Informações de Sincronização", + "PreferFmp4HlsContainerHelp": "Utiliza o fMP4 como container predefinido para HLS, tornando possível a transmissão direta de conteúdos HEVC e AV1 em dispositivos suportados.", "LabelSelectAudioChannels": "Canais", "LabelSelectStereo": "Estéreo", - "ContainerNotSupported": "O contêiner não é suportado", - "LabelSyncPlayNoGroups": "Sem grupos disponíveis", - "LabelSyncPlaySettingsMaxDelaySpeedToSync": "Atraso máximo do SpeedToSync", - "LabelSyncPlaySettingsSkipToSync": "Ativar SkipToSync", + "ContainerNotSupported": "O container não é suportado", + "LabelSyncPlayNoGroups": "Não há grupos disponíveis", + "LabelSyncPlaySettingsMaxDelaySpeedToSync": "Atraso máximo da Velocidade de sincronização", + "LabelSyncPlaySettingsSkipToSync": "Ativar pulo de sincronização", "LabelSyncPlaySettingsSpeedToSync": "Ativar SpeedToSync", "NotificationsMovedMessage": "A funcionalidade de notificações foi movida para o plugin Webhook.", - "AspectRatioCover": "Cobrir", + "AspectRatioCover": "Zoom", "AspectRatioFill": "Esticar", - "AudioCodecNotSupported": "O codec de áudio não é suportado", - "HeaderGuestCast": "Participações Especiais", - "LabelSyncPlaySettingsSpeedToSyncHelp": "Método de correção de sincronização que consiste em acelerar a reprodução. A correção de sincronização deve estar ativada.", + "AudioCodecNotSupported": "O codec de áudio não é compatível", + "HeaderGuestCast": "Estrelas convidadas", + "LabelSyncPlaySettingsSpeedToSyncHelp": "Método de correção de sincronização que consiste em acelerar a reprodução. A correção de sincronização deve estar habilitada.", "MessageSyncPlayDisabled": "SyncPlay desativado.", - "LabelVideoInfo": "Informações de Vídeo", - "LabelRemuxingInfo": "Informações de Remuxing", + "LabelVideoInfo": "Informações do vídeo", + "LabelRemuxingInfo": "Informações sobre remixagem", "LabelDate": "Data", - "MessageRenameMediaFolder": "Renomear uma biblioteca de mídia fará com que todos os metadados sejam perdidos, prossiga com cautela.", - "LabelSyncPlaySettingsMinDelaySkipToSync": "Atraso mínimo do SkipToSync", + "MessageRenameMediaFolder": "Mudar o nome de uma biblioteca multimédia fará com que todos os metadados se percam, por isso, procede com cuidado.", + "LabelSyncPlaySettingsMinDelaySkipToSync": "Atraso mínimo do pulo de sincronização", "LogLevel.None": "Nenhum", "LogLevel.Critical": "Crítico", "New": "Novo", "SubtitleWhite": "Branco", - "SubtitleLightGray": "Cinza Claro", + "SubtitleLightGray": "Cinza claro", "Track": "Faixa", - "TypeOptionPluralMusicArtist": "Artistas de Música", + "TypeOptionPluralMusicArtist": "Artistas musicais", "TypeOptionPluralSeason": "Temporadas", "LabelSelectMono": "Mono", - "HeaderEpisodesStatus": "Status dos Episódios", - "LabelSyncPlaySettingsSkipToSyncHelp": "Método de correção de sincronização que consiste em buscar a posição estimada. A correção de sincronização deve estar ativada.", - "LogLevel.Trace": "Rastrear", - "LogLevel.Debug": "Depurar", + "HeaderEpisodesStatus": "Status dos episódios", + "LabelSyncPlaySettingsSkipToSyncHelp": "Método de correção de sincronismo que consiste em buscar a posição estimada. A correção de sincronização deve estar habilitada.", + "LogLevel.Trace": "Rastreio", + "LogLevel.Debug": "Depuração", "LogLevel.Information": "Informação", - "MessageRepositoryInstallDisclaimer": "ATENÇÃO: Instalar um repositório de plugin de terceiros envolve riscos. Ele pode conter código instável ou malicioso, e pode mudar a qualquer momento. Instale apenas repositórios de autores confiáveis.", - "OptionAllowContentDownload": "Permitir downloads de mídia", - "StoryArc": "Arco da História", + "MessageRepositoryInstallDisclaimer": "AVISO: A instalação de uma extensão de terceiros acarreta riscos. Ela pode conter código instável ou malicioso e pode ser alterado a qualquer momento. Instala apenas extensões de autores em quem confias.", + "OptionAllowContentDownload": "Permitir transferências de multimédia", + "StoryArc": "Arco da história", "TabNetworking": "Rede", "ValueOneMovie": "1 filme", - "HeaderSelectFallbackFontPath": "Selecionar Caminho da Fonte de Recuo", - "XmlTvMovieCategoriesHelp": "Programas com essas categorias serão exibidos como filmes. Separe várias com '|'.", - "LabelVideoRange": "Faixa de vídeo", - "Mixer": "Mixer", + "HeaderSelectFallbackFontPath": "Selecione o caminho da pasta de fontes substitutas", + "XmlTvMovieCategoriesHelp": "Lista de categorias, separadas por '|', que correspondem a filmes.", + "LabelVideoRange": "Gama de vídeo", + "Mixer": "Misturador", "LabelSystem": "Sistema", - "SaveRecordingImages": "Salvar imagens EPG da gravação", - "SaveRecordingImagesHelp": "Salvar imagens do provedor de listagens EPG junto com a mídia.", - "UseDoubleRateDeinterlacing": "Dobrar a taxa de quadros ao desentrelaçar", + "SaveRecordingImages": "Guardar imagens da gravação EPG", + "SaveRecordingImagesHelp": "Guardar imagens do fornecedor de listas EPG juntamente com os ficheiros multimédia.", + "UseDoubleRateDeinterlacing": "Duplicar a velocidade de fotogramas ao desentrelaçar", "MessageSyncPlayUserJoined": "{0} entrou no grupo.", "MessageSyncPlayUserLeft": "{0} saiu do grupo.", "MillisecondsUnit": "ms", "SubtitleGreen": "Verde", "Notifications": "Notificações", - "XmlTvNewsCategoriesHelp": "Programas com essas categorias serão exibidos como programas de notícias. Separe várias com '|'.", - "LabelOriginalMediaInfo": "Informações da Mídia Original", - "YoutubeBadRequest": "Solicitação inválida.", - "YoutubeDenied": "O vídeo solicitado não pode ser reproduzido em players incorporados.", - "TypeOptionPluralBoxSet": "Caixas", - "LabelBackdropScreensaverInterval": "Intervalo do protetor de tela com plano de fundo", - "UseDoubleRateDeinterlacingHelp": "Esta configuração usa a taxa de campo ao desentrelaçar, muitas vezes chamada de desentrelaçamento bob, que dobra a taxa de quadros do vídeo para fornecer movimento completo como o que você veria ao visualizar vídeo entrelaçado em uma TV.", - "LabelDirectStreamingInfo": "Informações de Streaming Direto", - "LabelAlbumGain": "Ganho do Álbum", - "LogoScreensaver": "Protetor de tela com logo", - "MediaInfoColorSpace": "Espaço de cor", + "XmlTvNewsCategoriesHelp": "Lista de categorias, separadas por '|', que correspondem a programas de informação.", + "LabelOriginalMediaInfo": "Informações da mídia original", + "YoutubeBadRequest": "Requisição ruim.", + "YoutubeDenied": "O vídeo solicitado não pode ser reproduzido em leitores incorporados.", + "TypeOptionPluralBoxSet": "Conjuntos de caixas", + "LabelBackdropScreensaverInterval": "Intervalo da imagem de fundo do protetor de ecrã", + "UseDoubleRateDeinterlacingHelp": "Esta definição utiliza a taxa de campo durante o desentrelaçamento, muitas vezes referido como desentrelaçamento bob, que duplica a taxa de fotogramas do vídeo para proporcionar movimento fluído, como o que verias ao ver vídeo entrelaçado numa televisão.", + "LabelDirectStreamingInfo": "Informações de transmissão direta", + "LabelAlbumGain": "Ganho do álbum", + "LogoScreensaver": "Logótipo da proteção de ecrã", + "MediaInfoColorSpace": "Espaço colorido", "Studio": "Estúdio", "SubtitleGray": "Cinza", - "TabLogs": "Logs", - "Tags": "Tags", + "TabLogs": "Registos (Logs)", + "Tags": "Etiquetas", "Vertical": "Vertical", "Video": "Vídeo", - "VideoAudio": "Áudio de Vídeo", - "MessageNoItemsAvailable": "Nenhum item disponível no momento.", - "MessageNoFavoritesAvailable": "Nenhum favorito disponível no momento.", - "SaveRecordingNFOHelp": "Salvar metadados do provedor de listagens EPG junto com a mídia.", - "TonemappingRangeHelp": "Selecione a faixa de cor de saída. Automático é o mesmo que a faixa de entrada.", + "VideoAudio": "Vídeo Áudio", + "MessageNoItemsAvailable": "Nenhum item está disponível no momento.", + "MessageNoFavoritesAvailable": "Não existem favoritos atualmente disponíveis.", + "SaveRecordingNFOHelp": "Guardar metadados do fornecedor de listagens EPG juntamente com os ficheiros multimédia.", + "TonemappingRangeHelp": "Seleciona o intervalo de cores de saída. A opção 'Automático' mantém o intervalo de cores de entrada.", "TypeOptionPluralEpisode": "Episódios", - "MediaInfoColorTransfer": "Transferência de cor", - "MediaInfoVideoRange": "Faixa de vídeo", - "MessageNoGenresAvailable": "Ative alguns provedores de metadados para buscar gêneros da internet.", - "ListView": "Visualização em lista", + "MediaInfoColorTransfer": "Transferência de cores", + "MediaInfoVideoRange": "Gama de vídeo", + "MessageNoGenresAvailable": "Ativa alguns fornecedores de metadados para obter géneros da internet.", + "ListView": "Lista de Exibição", "LogLevel.Warning": "Aviso", - "MessageChangeRecordingPath": "Alterar sua pasta de gravação não migrará gravações existentes da antiga localização para a nova. Você precisará movê-las manualmente, se desejado.", + "MessageChangeRecordingPath": "Alterar a localização das gravações não irá migrar as gravações existentes da localização atual para a nova. Os ficheiros deverão ser movidos manualmente, se necessário.", "ListPaging": "{0}-{1} de {2}", "Localization": "Localização", "Lyricist": "Letrista", "NextChapter": "Próximo capítulo", - "TvLibraryHelp": "Veja o {0}guia de nomes de TV{1}.", - "TypeOptionPluralSeries": "Programas de TV", + "TvLibraryHelp": "Revise o {0}guia de nomenclatura de TV{1}.", + "TypeOptionPluralSeries": "Séries", "TypeOptionPluralVideo": "Vídeos", - "ValueSeriesCount": "{0} séries", - "LabelAudioInfo": "Informações de Áudio", + "ValueSeriesCount": "{0} série", + "LabelAudioInfo": "Informações de áudio", "RemuxHelp2": "Remux usa muito pouco poder de processamento com qualidade de mídia completamente sem perdas.", "MenuOpen": "Abrir Menu", "MenuClose": "Fechar Menu", - "OptionAllowContentDownloadHelp": "Os usuários podem baixar mídias e armazená-las em seus dispositivos. Isso não é o mesmo que um recurso de sincronização. Bibliotecas de livros exigem isso ativado para funcionar corretamente.", - "SmallCaps": "Caps pequenas", + "OptionAllowContentDownloadHelp": "Os utilizadores podem transferir conteúdo multimédia e armazená-lo nos seus dispositivos. Isto não é o mesmo que uma funcionalidade de sincronização. As bibliotecas de livros necessitam de ter esta opção ativada para funcionarem corretamente.", + "SmallCaps": "Letras Minúsculas", "StereoDownmixAlgorithmHelp": "Algoritmo usado para fazer downmix de áudio multicanal para estéreo.", "Suggestions": "Sugestões", "TabCodecs": "Codificadores", "SubtitleRed": "Vermelho", "SubtitleYellow": "Amarelo", "Unrated": "Sem classificação", - "TypeOptionPluralMusicAlbum": "Álbuns de Música", - "TypeOptionPluralMusicVideo": "Vídeos Musicais", + "TypeOptionPluralMusicAlbum": "Álbuns de música", + "TypeOptionPluralMusicVideo": "Vídeos musicais", "UserMenu": "Menu do Usuário", "ValueAlbumCount": "{0} álbuns", "ValueOneAlbum": "1 álbum", "ValueSongCount": "{0} músicas", - "Controls": "Controles", - "LabelSyncPlaySettingsSpeedToSyncDuration": "Duração do SpeedToSync", - "EnableFallbackFontHelp": "Ativar fontes alternativas personalizadas. Isso pode evitar o problema de renderização incorreta de legendas.", - "MessagePlaybackError": "Ocorreu um erro ao reproduzir este arquivo em seu receptor Google Cast.", + "Controls": "Comandos", + "LabelSyncPlaySettingsSpeedToSyncDuration": "Duração da Velocidade de sincronização", + "EnableFallbackFontHelp": "Ative fontes alternativas personalizadas. Isso pode evitar o problema de renderização incorreta de legendas.", + "MessagePlaybackError": "Ocorreu um erro ao reproduzir este ficheiro no teu recetor Google Cast.", "NextTrack": "Pular para o próximo", - "TitleHostingSettings": "Configurações de Hospedagem", + "TitleHostingSettings": "Definições de hospedagem", "LabelTextWeight": "Peso do texto", "Bold": "Negrito", - "MessageSyncPlayCreateGroupDenied": "Permissão necessária para criar um grupo.", - "MessageUnauthorizedUser": "Você não está autorizado a acessar o servidor neste momento. Por favor, entre em contato com o administrador do servidor para mais informações.", + "MessageSyncPlayCreateGroupDenied": "Requer permissão para criar um grupo.", + "MessageUnauthorizedUser": "Você não está autorizado a acessar o servidor neste momento. Entre em contato com o administrador do servidor para obter mais informações.", "OtherArtist": "Outro Artista", "Transcoding": "Transcodificação", "YoutubePlaybackError": "O vídeo solicitado não pode ser reproduzido.", - "MessageChromecastConnectionError": "Seu receptor Google Cast não consegue contatar o servidor Jellyfin. Por favor, verifique a conexão e tente novamente.", - "EnableFallbackFont": "Ativar fontes de recuo", + "MessageChromecastConnectionError": "O recetor Google Cast não consegue contactar o servidor Jellyfin. Verifica a ligação e tenta novamente.", + "EnableFallbackFont": "Ativar fontes substitutas", "LabelDeveloper": "Desenvolvedor", - "MessageSyncPlayErrorMissingSession": "Falha ao ativar o SyncPlay! Sessão ausente.", - "MessageSyncPlayPlaybackPermissionRequired": "Permissão de reprodução necessária.", - "OriginalAirDate": "Data Original de Exibição", - "SelectAudioNormalizationHelp": "Track gain - ajusta o volume de cada faixa para que sejam reproduzidas com o mesmo nível de loudness. Album gain - ajusta o volume de todas as faixas de um álbum, mantendo a faixa dinâmica do álbum. Alternar entre \"Desligado\" e outras opções requer reiniciar a reprodução atual.", - "LabelSyncPlaySettingsSyncCorrectionHelp": "Ativar sincronização ativa da reprodução, acelerando a mídia ou buscando a posição estimada. Desative isso em caso de gagueira intensa.", + "MessageSyncPlayErrorMissingSession": "Falha ao ativar o Sincronização! Sessão perdida.", + "MessageSyncPlayPlaybackPermissionRequired": "Requer permissão de reprodução.", + "OriginalAirDate": "Data de transmissão original", + "SelectAudioNormalizationHelp": "Ganho de faixa - ajusta o volume de cada faixa para que sejam reproduzidas com o mesmo volume. Ganho do álbum - ajusta o volume de todas as faixas apenas de um álbum, mantendo a faixa dinâmica do álbum. Alternar entre \"Desativado\" e outras opções requer o reinício da reprodução atual.", + "LabelSyncPlaySettingsSyncCorrectionHelp": "Permite que a reprodução seja acelerada ou que o leitor salte para a posição estimada. Desativa caso esteja com paragens de reprodução frequentes.", "Larger": "Maior", "LogLevel.Error": "Erro", "MediaInfoTitle": "Título", - "MessageAddRepository": "Se você deseja adicionar um repositório, clique no botão ao lado do cabeçalho e preencha as informações solicitadas.", + "MessageAddRepository": "Caso queira adicionar um repositório, clique no botão próximo ao cabeçalho e preencha as informações solicitadas.", "MessageSyncPlayJoinGroupDenied": "Não é possível entrar no grupo.", - "LabelTrackGain": "Ganho da Faixa", - "ValueMinutes": "{0} min", - "LabelBuildVersion": "Versão da compilação", - "LabelWebVersion": "Versão da Web", + "LabelTrackGain": "Rastrear ganho", + "ValueMinutes": "{0} minutos", + "LabelBuildVersion": "Versão de compilação", + "LabelWebVersion": "Versão web", "SubtitleCyan": "Ciano", - "SubtitleOffset": "Deslocamento da Legenda", - "ValueOneMusicVideo": "1 vídeo musical", + "SubtitleOffset": "Deslocamento de legenda", + "ValueOneMusicVideo": "1 videoclipe", "ValueOneSeries": "1 série", - "XmlTvSportsCategoriesHelp": "Programas com essas categorias serão exibidos como programas esportivos. Separe várias com '|'.", - "LabelFallbackFontPath": "Caminho da pasta da fonte de recuo", - "LabelPlaybackInfo": "Informações de Reprodução", - "LabelTranscodingInfo": "Informações de Transcodificação", - "AllowHevcEncoding": "Permitir codificação em formato HEVC", - "LabelAllowedAudioChannels": "Máximo de Canais de Áudio Permitidos", + "XmlTvSportsCategoriesHelp": "Lista de categorias, separadas por '|', que correspondem a programas de desporto.", + "LabelFallbackFontPath": "Caminho da pasta de fontes substitutas", + "LabelPlaybackInfo": "Informações de reprodução", + "LabelTranscodingInfo": "Informações de transcodificação", + "AllowHevcEncoding": "Permitir codificação no formato HEVC", + "LabelAllowedAudioChannels": "Máximo de canais de áudio permitidos", "YoutubeNotFound": "Vídeo não encontrado.", - "EnableEnhancedNvdecDecoder": "Ativar decodificador NVDEC aprimorado", - "EnableVppTonemapping": "Ativar mapeamento de tons VPP", - "MediaInfoDvProfile": "Perfil do DV", - "VideoCodecNotSupported": "O codec de vídeo não é suportado", - "SubtitleCodecNotSupported": "O codec de legenda não é suportado", + "EnableEnhancedNvdecDecoder": "Habilitar decodificador NVDEC aprimorado", + "EnableVppTonemapping": "Ativar o mapeamento de tons VPP", + "MediaInfoDvProfile": "Perfil DV", + "VideoCodecNotSupported": "O codec de vídeo não é compatível", + "SubtitleCodecNotSupported": "O codec de legenda não é compatível", "RefFramesNotSupported": "Quadros de referência não são suportados", "SecondaryAudioNotSupported": "Faixas de áudio secundárias não são suportadas", - "VideoLevelNotSupported": "O nível do codec de vídeo não é suportado", + "VideoLevelNotSupported": "O nível do codec de vídeo não é compatível", "AudioBitDepthNotSupported": "A profundidade de bits do áudio não é suportada", - "LabelHardwareEncodingOptions": "Opções de codificação por hardware", - "UnknownAudioStreamInfo": "As informações do stream de áudio são desconhecidas", + "LabelHardwareEncodingOptions": "Opções de codificação de hardware", + "UnknownAudioStreamInfo": "As informações do fluxo de áudio são desconhecidas", "DirectPlayError": "Ocorreu um erro ao iniciar a reprodução direta", - "Short": "Curta", + "Short": "Curto", "Clip": "Clipe", - "BehindTheScenes": "Por trás das câmeras", + "BehindTheScenes": "Bastidores", "DeletedScene": "Cena deletada", "Interview": "Entrevista", - "LabelVideoRangeType": "Tipo de faixa de vídeo", - "MediaInfoVideoRangeType": "Tipo de faixa de vídeo", - "MediaInfoDoViTitle": "Título DV", - "MediaInfoDvVersionMajor": "Versão maior do DV", - "MediaInfoDvLevel": "Nível do DV", + "LabelVideoRangeType": "Tipo de gama de vídeo", + "MediaInfoVideoRangeType": "Tipo de gama de vídeo", + "MediaInfoDoViTitle": "Título do DVD", + "MediaInfoDvVersionMajor": "Versão DV principal", + "MediaInfoDvLevel": "Nível DV", "Unreleased": "Ainda não lançado", - "AllowAv1Encoding": "Permitir codificação em formato AV1", - "AiTranslated": "Traduzido por IA", - "MachineTranslated": "Traduzido por Máquina", - "AnamorphicVideoNotSupported": "Vídeo anamórfico não é suportado", - "InterlacedVideoNotSupported": "Vídeo entrelaçado não é suportado", - "EnableEnhancedNvdecDecoderHelp": "Implementação aprimorada do NVDEC, desative esta opção para usar o CUVID se você encontrar erros de decodificação.", + "AllowAv1Encoding": "Permitir codificação no formato AV1", + "AiTranslated": "IA traduzida", + "MachineTranslated": "Traduzido automaticamente", + "AnamorphicVideoNotSupported": "Vídeos anamórficos não são suportados", + "InterlacedVideoNotSupported": "Vídeo entrelaçado não é compatível", + "EnableEnhancedNvdecDecoderHelp": "Implementação NVDEC melhorada, desativa esta opção e utiliza CUVID no caso de encontrares erros de descodificação.", "AudioChannelsNotSupported": "O número de canais de áudio não é suportado", "ContainerBitrateExceedsLimit": "A taxa de bits do vídeo excede o limite", "VideoBitrateNotSupported": "A taxa de bits do vídeo não é suportada", - "LabelVppTonemappingBrightness": "Ganho de brilho do mapeamento de tons VPP", - "LabelVppTonemappingBrightnessHelp": "Aplicar ganho de brilho no mapeamento de tons VPP. O valor recomendado é 16.", - "ThemeSong": "Música Tema", - "Featurette": "Featurette", + "LabelVppTonemappingBrightness": "Ganho de brilho para mapeamento de tons VPP", + "LabelVppTonemappingBrightnessHelp": "Aplica o ganho de brilho no mapeamento de tons VPP. O valor recomendado é 16.", + "ThemeSong": "Banda sonora do tema", + "Featurette": "Destaque", "Scene": "Cena", "Sample": "Amostra", - "ThemeVideo": "Vídeo Tema", - "EnableSplashScreen": "Ativar a imagem da tela de apresentação", + "ThemeVideo": "Vídeo do tema", + "EnableSplashScreen": "Ativar imagem do ecrã de apresentação", "LabelVppTonemappingContrast": "Ganho de contraste do mapeamento de tons VPP", - "LabelVppTonemappingContrastHelp": "Aplicar ganho de contraste no mapeamento de tons VPP. O valor recomendado é 1.", + "LabelVppTonemappingContrastHelp": "Aplica o ganho de contraste no mapeamento de tons VPP. O valor recomendado é 1.", "Unknown": "Desconhecido", - "EnableIntelLowPowerHevcHwEncoder": "Ativar codificador de hardware HEVC de baixo consumo Intel", - "AudioIsExternal": "O stream de áudio é externo", - "MediaInfoElPresentFlag": "Sinalizador de preset EL do DV", - "AudioProfileNotSupported": "O perfil do codec de áudio não é suportado", - "MediaInfoDvVersionMinor": "Versão menor do DV", + "EnableIntelLowPowerHevcHwEncoder": "Habilitar codificador de hardware HEVC Intel Baixa-Potência", + "AudioIsExternal": "O fluxo de áudio é externo", + "MediaInfoElPresentFlag": "Sinalizador predefinido DV EL", + "AudioProfileNotSupported": "O perfil do codec de áudio não é compatível", + "MediaInfoDvVersionMinor": "Versão DV menor", "Select": "Selecionar", - "VideoProfileNotSupported": "O perfil do codec de vídeo não é suportado", - "MediaInfoRpuPresentFlag": "Sinalizador de preset RPU do DV", - "HearingImpairedShort": "HI/SDH", + "VideoProfileNotSupported": "O perfil do codec de vídeo não é compatível", + "MediaInfoRpuPresentFlag": "Sinalizador predefinido DV RPU", + "HearingImpairedShort": "Alta Definição/SDH", "ForeignPartsOnly": "Apenas partes forçadas/estrangeiras", "LabelIsHearingImpaired": "Para deficientes auditivos (SDH)", "AudioBitrateNotSupported": "A taxa de bits do áudio não é suportada", "AudioSampleRateNotSupported": "A taxa de amostragem do áudio não é suportada", "VideoResolutionNotSupported": "A resolução do vídeo não é suportada", "VideoBitDepthNotSupported": "A profundidade de bits do vídeo não é suportada", - "VideoFramerateNotSupported": "A taxa de quadros do vídeo não é suportada", + "VideoFramerateNotSupported": "A taxa de quadros do vídeo não é compatível", "UnknownVideoStreamInfo": "As informações do stream de vídeo são desconhecidas", - "SelectAll": "Selecionar Tudo", - "LabelTonemappingMode": "Modo de mapeamento de tons", - "TonemappingModeHelp": "Selecione o modo de mapeamento de tons. Se você experimentar realces estourados, tente mudar para o modo RGB.", - "VideoRangeTypeNotSupported": "O tipo de faixa do vídeo não é suportado", + "SelectAll": "Selecionar tudo", + "LabelTonemappingMode": "Modo do mapeamento de tons", + "TonemappingModeHelp": "Seleciona o modo de mapeamento de tons. Se notares áreas muito claras ou estouradas, experimenta mudar para o modo RGB.", + "VideoRangeTypeNotSupported": "O tipo de gama deste vídeo não é suportado", "ChannelResolutionHD": "HD", "ChannelResolutionSD": "SD", - "AllowVideoToolboxTonemappingHelp": "Mapeamento de tons acelerado por hardware fornecido pelo VideoToolbox. Funciona com a maioria dos formatos HDR, incluindo HDR10, HDR10+ e HLG, mas não funciona com Dolby Vision Profile 5. Esta opção tem prioridade mais alta em comparação com outra implementação Metal.", - "EnableVideoToolboxTonemapping": "Ativar mapeamento de tons VideoToolbox", + "AllowVideoToolboxTonemappingHelp": "Mapeamento de tons acelerado por hardware fornecido pelo VideoToolbox. Funciona com a maioria dos formatos HDR, incluindo HDR10, HDR10+ e HLG, mas não funciona com Dolby Vision Profile 5. Tem uma prioridade mais alta em comparação com outra implementação Metal.", + "EnableVideoToolboxTonemapping": "Ativar o mapeamento de tons do VideoToolbox", "LabelUseReplayGainTags": "Usar etiquetas ReplayGain", "LabelUseReplayGainTagsHelp": "Procura etiquetas replaygain nos ficheiros áudio e utiliza-as em vez de calcular o valor LUFS. (Utiliza menos poder de computação. Substitui a opção 'Verificação LUFS')", - "AllowSubtitleManagement": "Permitir que este usuário edite legendas", - "DeleteName": "Excluir {0}", + "AllowSubtitleManagement": "Permitir a este utilizador editar legendas", + "DeleteName": "Eliminar {0}", "Trickplay": "Trickplay", "AllowMjpegEncoding": "Permitir a codificação no formato MJPEG (usado durante a criação de trickplay)", - "PriorityIdle": "Ocioso", - "LabelProcessPriority": "Prioridade do Processo", + "PriorityIdle": "Inativo", + "LabelProcessPriority": "Prioridade do processo", "LabelTrickplayAccelHelp": "Certifica-te de que ativas a opção \"Permitir codificação MJPEG\" em Transcodificação, se o teu hardware o suportar.", - "PriorityAboveNormal": "Acima do Normal", + "PriorityAboveNormal": "Acima do normal", "PriorityNormal": "Normal", - "PriorityBelowNormal": "Abaixo do Normal", - "LabelTrickplayAccel": "Ativar decodificação por hardware", + "PriorityBelowNormal": "Abaixo do normal", + "LabelTrickplayAccel": "Ativar a descodificação por hardware", "PriorityHigh": "Alta", "LabelJpegQualityHelp": "A qualidade de compressão JPEG para imagens trickplay.", - "LabelImageInterval": "Intervalo de Imagem", - "LabelQscale": "Qscale", + "LabelImageInterval": "Intervalo de imagem", + "LabelQscale": "Fator de qualidade (Qscale)", "LabelImageIntervalHelp": "Intervalo de tempo (ms) entre cada nova imagem trickplay.", - "LabelScanBehaviorHelp": "O comportamento padrão é não bloqueante, o que adicionará mídia à biblioteca antes que a geração de trickplay seja concluída. O bloqueante garantirá que os arquivos trickplay sejam gerados antes que a mídia seja adicionada à biblioteca, mas tornará as verificações significativamente mais longas.", - "LabelWidthResolutions": "Resoluções de Largura", - "LabelTileWidth": "Largura do Tile", - "LabelWidthResolutionsHelp": "Lista separada por vírgulas das larguras (px) que as imagens trickplay serão geradas. Todas as imagens devem ser geradas proporcionalmente à fonte, então uma largura de 320 em um vídeo 16:9 termina em cerca de 320x180.", - "LabelTrickplayThreadsHelp": "O número de threads a serem passadas para o argumento '-threads' do ffmpeg.", - "LabelQscaleHelp": "A escala de qualidade das imagens geradas pelo ffmpeg, sendo 2 a mais alta qualidade e 31 a mais baixa.", - "OptionExtractTrickplayImage": "Ativar extração de imagem trickplay", - "LabelProcessPriorityHelp": "Definir isso mais baixo ou mais alto determinará como a CPU prioriza o processo de geração de trickplay do ffmpeg em relação a outros processos. Se você notar lentidão ao gerar imagens trickplay, mas não quiser interromper completamente a geração, tente diminuir isso e também a contagem de threads.", - "LabelTileHeight": "Altura do Tile", + "LabelScanBehaviorHelp": "O comportamento predefinido é não bloqueante, o que faz com que os ficheiros multimédia sejam adicionados à biblioteca antes da geração do trickplay estar concluída. O modo bloqueante assegura que os ficheiros trickplay são gerados antes dos ficheiros multimédia serem adicionados à biblioteca, mas tornará as análises significativamente mais demoradas.", + "LabelWidthResolutions": "Resoluções de largura", + "LabelTileWidth": "Largura do mosaico", + "LabelWidthResolutionsHelp": "Lista separada por vírgulas das larguras (px) em que serão geradas as imagens trickplay. Todas as imagens devem ser geradas proporcionalmente à fonte, por isso um vídeo 16:9 com uma largura de 320 acabará por ter cerca de 320x180.", + "LabelTrickplayThreadsHelp": "O número de threads a passar para o argumento '-threads' do ffmpeg.", + "LabelQscaleHelp": "A escala de qualidade das imagens produzidas pelo ffmpeg, sendo 2 a qualidade mais elevada e 31 a mais baixa.", + "OptionExtractTrickplayImage": "Ativar a extração de imagens trickplay", + "LabelProcessPriorityHelp": "Definir este valor mais baixo ou mais alto determinará como o CPU prioriza o processo de geração de trickplay do ffmpeg em relação a outros processos. Se notares lentidão enquanto geras imagens de trickplay mas não queres parar completamente a sua geração, tenta baixar este valor, bem como a contagem de threads.", + "LabelTileHeight": "Altura do mosaico", "LabelJpegQuality": "Qualidade JPEG", - "LabelTileHeightHelp": "Número máximo de imagens por tile na direção Y.", - "LabelTileWidthHelp": "Número máximo de imagens por tile na direção X.", - "ExtractTrickplayImagesHelp": "Imagens trickplay são semelhantes às imagens de capítulo, exceto que abrangem toda a extensão do conteúdo e são usadas para mostrar uma prévia ao passar rapidamente por vídeos.", - "AllowContentWithTagsHelp": "Exibir apenas mídias com pelo menos uma das tags especificadas.", - "BlockContentWithTagsHelp": "Ocultar mídias com pelo menos uma das tags especificadas.", - "ButtonEditUser": "Editar usuário", - "EncodingFormatHelp": "Selecione a codificação de vídeo que o Jellyfin deve transcodificar. O Jellyfin usará codificação por software quando a aceleração de hardware para o formato selecionado não estiver disponível. A codificação H264 será sempre ativada.", + "LabelTileHeightHelp": "Número máximo de imagens por mosaico na direção Y.", + "LabelTileWidthHelp": "Número máximo de imagens por mosaico na direção X.", + "ExtractTrickplayImagesHelp": "As imagens Trickplay são semelhantes às imagens dos capítulos, exceto pelo facto de abrangerem toda a extensão do conteúdo e serem utilizadas para mostrar uma pré-visualização ao percorrer os vídeos.", + "AllowContentWithTagsHelp": "Mostrar apenas os conteúdos multimédia com pelo menos uma das etiquetas especificadas.", + "BlockContentWithTagsHelp": "Ocultar os conteúdos multimédia com pelo menos uma das etiquetas especificadas.", + "ButtonEditUser": "Editar utilizador", + "EncodingFormatHelp": "Seleciona a codificação de vídeo para a qual o Jellyfin deve transcodificar. O Jellyfin usará a codificação de software quando a aceleração de hardware para o formato selecionado não estiver disponível. A codificação H264 será sempre ativada.", "LabelEncodingFormatOptions": "Opções de formato de codificação", "AirPlay": "AirPlay", - "LimitSupportedVideoResolutionHelp": "Usar 'Resolução máxima permitida para transcodificação de vídeo' como resolução máxima de vídeo suportada.", - "EnableLibraryHelp": "Desativar a biblioteca a ocultará de todas as visualizações de usuários.", + "LimitSupportedVideoResolutionHelp": "Utiliza 'Resolução máxima permitida para transcodificação de vídeo' como resolução máxima de vídeo suportada.", + "EnableLibraryHelp": "Se desativares a biblioteca, ela será ocultada de todas as visualizações do utilizador.", "EnableLibrary": "Ativar a biblioteca", - "LabelTrickplayAccelEncodingHelp": "Atualmente disponível apenas no QSV, VA-API, VideoToolbox e RKMPP, esta opção não tem efeito em outros métodos de aceleração de hardware.", - "LabelTrickplayAccelEncoding": "Ativar codificação MJPEG acelerada por hardware", - "ConfirmDeleteLyrics": "Excluir estas letras irá removê-las do sistema de arquivos e da sua biblioteca de mídia. Tem certeza de que deseja continuar?", + "LabelTrickplayAccelEncodingHelp": "Atualmente apenas disponível em QSV, VA-API, VideoToolbox e RKMPP, esta opção não tem efeito noutros métodos de aceleração de hardware.", + "LabelTrickplayAccelEncoding": "Ativar a codificação MJPEG acelerada por hardware", + "ConfirmDeleteLyrics": "A eliminação destas letras irá eliminá-las do sistema de ficheiros e da tua biblioteca multimédia. Tens a certeza de que queres continuar?", "ChannelResolutionFullHD": "Full HD", "ChannelResolutionUHD4K": "UHD (4K)", "ChannelResolutionSDPAL": "SD (PAL)", - "ConfirmDeleteSeries": "Excluir esta série irá remover TODOS os {0} episódios do sistema de arquivos e da sua biblioteca de mídia. Tem certeza de que deseja continuar?", - "LabelScanBehavior": "Comportamento da Verificação", - "LabelTrickplayThreads": "Threads do FFmpeg", + "ConfirmDeleteSeries": "A eliminação desta série elimina TODOS os {0} episódios do sistema de ficheiros e da tua biblioteca multimédia. Tens a certeza de que queres continuar?", + "LabelScanBehavior": "Comportamento de análise", + "LabelTrickplayThreads": "Threads FFmpeg", "Lyric": "Letra", - "PlaybackError.FATAL_HLS_ERROR": "Um erro fatal foi encontrado no stream HLS.", - "PlaybackError.MEDIA_DECODE_ERROR": "A reprodução falhou devido a um erro na decodificação da mídia.", - "PlaybackError.MEDIA_NOT_SUPPORTED": "A reprodução falhou porque a mídia não é suportada por este cliente.", + "PlaybackError.FATAL_HLS_ERROR": "Foi encontrado um erro fatal na transmissão HLS.", + "PlaybackError.MEDIA_DECODE_ERROR": "A reprodução falhou devido a um erro ao descodificar o conteúdo.", + "PlaybackError.MEDIA_NOT_SUPPORTED": "A reprodução falhou porque o conteúdo não é suportado por este cliente.", "PlaybackError.NETWORK_ERROR": "A reprodução falhou devido a um erro de rede.", - "PlaybackError.NO_MEDIA_ERROR": "Não foi possível encontrar uma fonte de mídia válida para reproduzir.", - "PlaybackError.PLAYER_ERROR": "A reprodução falhou devido a um erro fatal no player.", - "PlaybackError.RateLimitExceeded": "Esta mídia não pode ser reproduzida no momento devido a limites de taxa.", - "DeleteSeries": "Excluir série", - "PlaybackError.NotAllowed": "A reprodução desta mídia não é permitida.", - "EnableSmoothScroll": "Ativar rolagem suave", + "PlaybackError.NO_MEDIA_ERROR": "Não foi possível encontrar uma fonte multimédia válida para reproduzir.", + "PlaybackError.PLAYER_ERROR": "A reprodução falhou devido a um erro fatal do leitor.", + "PlaybackError.RateLimitExceeded": "Este conteúdo não pode ser reproduzido neste momento devido aos limites de velocidade.", + "DeleteSeries": "Eliminar séries", + "PlaybackError.NotAllowed": "A reprodução deste conteúdo não é permitida.", + "EnableSmoothScroll": "Ativar deslocação suave", "LimitSupportedVideoResolution": "Limitar a resolução máxima de vídeo suportada", - "PlaybackError.SERVER_ERROR": "A reprodução falhou devido a um erro no servidor.", - "DlnaMovedMessage": "A funcionalidade DLNA foi movida para um plugin.", - "DeleteEntireSeries": "Excluir {0} episódios", - "DeleteEpisode": "Excluir episódio", - "HeaderDeleteSeries": "Excluir Série", - "LabelAllowContentWithTags": "Permitir itens com tags", + "PlaybackError.SERVER_ERROR": "A reprodução falhou devido a um erro do servidor.", + "DlnaMovedMessage": "A funcionalidade DLNA foi transferida para uma extensão.", + "DeleteEntireSeries": "Eliminar {0} episódios", + "DeleteEpisode": "Eliminar episódio", + "HeaderDeleteSeries": "Eliminar séries", + "LabelAllowContentWithTags": "Permitir items com etiquetas", "Lyrics": "Letras", "ViewLyrics": "Ver letras", - "DeleteLyrics": "Excluir letras", - "ErrorDeletingLyrics": "Ocorreu um erro ao excluir as letras do servidor. Verifique se o Jellyfin tem acesso de gravação à pasta de mídia e tente novamente.", - "HeaderDeleteLyrics": "Excluir Letras", + "DeleteLyrics": "Eliminar letras", + "ErrorDeletingLyrics": "Ocorreu um erro ao eliminar as letras do servidor. Verifica se o Jellyfin tem acesso de escrita à pasta multimédia e tenta novamente.", + "HeaderDeleteLyrics": "Eliminar letras", "HeaderNoLyrics": "Nenhuma letra encontrada", - "BlockingScan": "Bloqueante - gera fila, bloqueia verificação até completar", - "NonBlockingScan": "Não Bloqueante - gera fila, depois retorna", - "LabelExtractTrickplayDuringLibraryScan": "Extrair imagens trickplay durante a verificação da biblioteca", - "LabelExtractTrickplayDuringLibraryScanHelp": "Gerar imagens trickplay ao importar vídeos durante a verificação da biblioteca. Caso contrário, elas serão extraídas durante a tarefa agendada de imagens trickplay. Se a geração estiver definida como não bloqueante, isso não afetará o tempo que uma verificação da biblioteca leva para ser concluída.", - "PlaybackError.ASS_RENDER_ERROR": "Um erro foi encontrado no renderizador de legendas ASS/SSA.", - "SavePassword": "Salvar Senha", + "BlockingScan": "Bloqueante - coloca a geração em fila de espera, bloqueia a análise até ser concluída", + "NonBlockingScan": "Não bloqueante - coloca a geração em fila de espera e depois regressa", + "LabelExtractTrickplayDuringLibraryScan": "Extrair imagens trickplay durante a análise da biblioteca", + "LabelExtractTrickplayDuringLibraryScanHelp": "Gerar imagens trickplay quando os vídeos são importados durante a análise da biblioteca. Caso contrário, as imagens serão extraídas durante a tarefa agendada de imagens trickplay. Se a geração estiver definida como não bloqueante, isto não afetará o tempo que a análise da biblioteca demora a concluir.", + "PlaybackError.ASS_RENDER_ERROR": "Foi encontrado um erro no renderizador de legendas ASS/SSA.", + "SavePassword": "Guardar palavra-passe", "Author": "Autor", "Colorist": "Colorista", "CoverArtist": "Artista da capa", @@ -1869,191 +1869,191 @@ "Editor": "Editor", "Illustrator": "Ilustrador", "EnableDts": "Ativar DTS (DCA)", - "EnableDtsHelp": "Ative apenas se o seu dispositivo suportar DTS ou estiver conectado a um receptor de áudio compatível, caso contrário, pode causar falha na reprodução.", + "EnableDtsHelp": "Ativar apenas se o dispositivo suportar DTS ou estiver ligado a um recetor de áudio compatível; caso contrário, pode provocar falhas de reprodução.", "EnableTrueHd": "Ativar TrueHD", - "EnableTrueHdHelp": "Ative apenas se o seu dispositivo suportar TrueHD ou estiver conectado a um receptor de áudio compatível, caso contrário, pode causar falha na reprodução.", - "HeaderVideoAdvanced": "Vídeo Avançado", - "HeaderLyricDownloads": "Downloads de Letras", - "Letterer": "Letterer", + "EnableTrueHdHelp": "Ativar apenas se o dispositivo suportar TrueHD ou estiver ligado a um recetor de áudio compatível; caso contrário, pode provocar falhas de reprodução.", + "HeaderVideoAdvanced": "Definições avançadas de vídeo", + "HeaderLyricDownloads": "Descarregar letras", + "Letterer": "Letrista", "LabelSelectPreferredTranscodeVideoAudioCodec": "Codec de áudio de transcodificação preferido na reprodução de vídeo", - "SelectPreferredTranscodeVideoAudioCodecHelp": "Selecione o codec de áudio preferido para transcodificar para conteúdo de vídeo. Se o codec preferido não for suportado, o servidor usará o próximo codec disponível.", - "LibraryScanFanoutConcurrencyHelp": "Número máximo de tarefas em paralelo durante as verificações da biblioteca. Deixar isso vazio escolherá um limite com base na contagem de núcleos do seu sistema. AVISO: Definir esse número muito alto pode causar problemas com sistemas de arquivos de rede; se você encontrar problemas, diminua esse número.", - "LibraryScanFanoutConcurrency": "Limite de tarefas de verificação de biblioteca em paralelo", - "PlaylistPublicDescription": "Permitir que esta playlist seja vista por qualquer usuário logado.", + "SelectPreferredTranscodeVideoAudioCodecHelp": "Seleciona o codec de áudio preferido para transcodificar o conteúdo de vídeo. Se o codec preferido não for suportado, o servidor utilizará o próximo melhor codec disponível.", + "LibraryScanFanoutConcurrencyHelp": "Número máximo de tarefas paralelas durante as análises da biblioteca. Se deixares este campo vazio, será escolhido um limite com base no número de núcleos do teu sistema. AVISO: Definir um valor demasiado elevado pode causar problemas com sistemas de ficheiros em rede; se encontrares problemas, reduz este número.", + "LibraryScanFanoutConcurrency": "Limite de tarefas paralelas de análise da biblioteca", + "PlaylistPublicDescription": "Permitir que esta playlist seja vista por qualquer utilizador com sessão iniciada.", "PlaylistPublic": "Permitir acesso público", - "SaveLyricsIntoMediaFoldersHelp": "Armazenar letras ao lado de arquivos de áudio permitirá que sejam gerenciadas mais facilmente.", + "SaveLyricsIntoMediaFoldersHelp": "Guardar letras junto a ficheiros de áudio permiti-las-á ser mais facilmente geridas.", "PlaylistError.AddFailed": "Erro ao adicionar à playlist", - "PlaylistError.CreateFailed": "Erro ao criar playlist", + "PlaylistError.CreateFailed": "Erro ao criar a playlist", "Translator": "Tradutor", - "Inker": "Inker", - "Alternate": "Alternativo", - "AlternateDVD": "DVD Alternativo", - "Penciller": "Penciler", + "Inker": "Tinteiro", + "Alternate": "Alternar", + "AlternateDVD": "DVD alternativo", + "Penciller": "Lapiseira", "Regional": "Regional", - "SaveLyricsIntoMediaFolders": "Salvar letras nas pastas de mídia", - "LabelSelectPreferredTranscodeVideoCodec": "Codec de vídeo de transcodificação preferido", - "SelectPreferredTranscodeVideoCodecHelp": "Selecione o codec de vídeo preferido para transcodificar. Se o codec preferido não for suportado, o servidor usará o próximo codec disponível.", + "SaveLyricsIntoMediaFolders": "Guardar letras em pastas multimédia", + "LabelSelectPreferredTranscodeVideoCodec": "Codec de vídeo transcodificado preferido", + "SelectPreferredTranscodeVideoCodecHelp": "Seleciona o codec de vídeo preferido para transcodificar. Se o codec preferido não for suportado, o servidor utilizará o próximo melhor codec disponível.", "HeaderNextItem": "Seguinte {0}", - "EditLyrics": "Editar letras", - "HeaderAddLyrics": "Adicionar Letras", - "HeaderPreviewLyrics": "Visualizar Letras", - "LabelScreensaverTimeHelp": "A quantidade de tempo em segundos de inatividade necessária para iniciar o protetor de tela.", + "EditLyrics": "Editar letra", + "HeaderAddLyrics": "Adicionar letra", + "HeaderPreviewLyrics": "Pré-visualizar letra", + "LabelScreensaverTimeHelp": "A quantidade de tempo, em segundos, de inatividade necessária para iniciar a proteção de ecrã.", "LabelDuration": "Duração", - "LabelDisableVbrAudioEncoding": "Desativar codificação de áudio VBR", - "LabelEnablePlugin": "Ativar plugin", - "LabelDelimiterWhitelistHelp": "Itens a serem excluídos da divisão de tags. Um item por linha.", - "LabelDropLyricsHere": "Solte as letras aqui, ou clique para navegar.", - "MediaSegmentSkipPrompt": "Pular {0}", - "MediaSegmentAction.Skip": "Pular", - "MediaSegmentAction.AskToSkip": "Perguntar antes de pular", - "MediaSegmentType.Commercial": "Comercial", - "SearchForLyrics": "Pesquisar letras", + "LabelDisableVbrAudioEncoding": "Desativar a codificação de áudio VBR", + "LabelEnablePlugin": "Ativar extensão", + "LabelDelimiterWhitelistHelp": "Itens a ser excluídos da separação de etiquetas. Um item por linha.", + "LabelDropLyricsHere": "Arrasta e larga a letra aqui, ou clica para explorar.", + "MediaSegmentSkipPrompt": "Saltar {0}", + "MediaSegmentAction.Skip": "Saltar", + "MediaSegmentAction.AskToSkip": "Pedir para saltar", + "MediaSegmentType.Commercial": "Publicidade", + "SearchForLyrics": "Procurar letras", "NoLyricsSearchResultsFound": "Nenhuma letra encontrada.", "MediaSegmentType.Intro": "Introdução", - "EnableHi10pHelp": "Ative para evitar a transcodificação de vídeos H.264 de 10 bits. Desative esta opção se o vídeo apresentar quadros em branco.", - "LyricDownloadersHelp": "Ative e classifique seus baixadores de letras preferidos por ordem de prioridade.", - "AlwaysRemuxMp3AudioFilesHelp": "Se arquivos MP3 apresentarem problemas de tempo no navegador, ative esta opção como solução temporária.", - "AlwaysRemuxFlacAudioFilesHelp": "Se arquivos FLAC não tocarem no navegador ou apresentarem problemas de tempo, ative esta opção como solução temporária.", + "EnableHi10pHelp": "Ativa para evitar a transcodificação de vídeos H.264 de 10 bits. Desativa esta opção se o vídeo apresentar quadros em branco.", + "LyricDownloadersHelp": "Ativa e classifica os teus fornecedores de letras preferidos por ordem de prioridade.", + "AlwaysRemuxMp3AudioFilesHelp": "Se tiveres ficheiros que o teu navegador calcula de forma imprecisa os registos de data/hora, ativa esta opção como solução alternativa.", + "AlwaysRemuxFlacAudioFilesHelp": "Se tiveres ficheiros que o teu navegador recusar reproduzir ou em que calcula incorretamente os registos de data/hora, ativa esta opção como solução alternativa.", "HeaderNextItemPlayingInValue": "{0} seguinte em {1}", - "HeaderNewPlaylist": "Nova Playlist", - "UseCustomTagDelimiters": "Usar delimitador de tag personalizado", - "UseCustomTagDelimitersHelp": "Dividir tags de artista/gênero com caracteres personalizados.", - "LabelTrickplayKeyFrameOnlyExtraction": "Gerar imagens apenas a partir de quadros-chave", - "VideoCodecTagNotSupported": "O tag do codec de vídeo não é suportado", + "HeaderNewPlaylist": "Nova playlist", + "UseCustomTagDelimiters": "Utilizar delimitador de etiquetas personalizado", + "UseCustomTagDelimitersHelp": "Divide etiquetas de artistas/género com carateres personalizados.", + "LabelTrickplayKeyFrameOnlyExtraction": "Gerar imagens apenas de fotogramas-chave", + "VideoCodecTagNotSupported": "A etiqueta do codec de vídeo não é suportada", "AndOtherArtists": "{0} e {1} outros artistas.", - "MoviesAndShows": "Filmes e Programas", - "Anime": "Anime", - "AlwaysBurnInSubtitleWhenTranscodingHelp": "Embutir todas as legendas ao transcodificar. Garante sincronização das legendas, mas pode reduzir a velocidade da transcodificação.", - "AllowTonemappingSoftwareHelp": "O tone-mapping transforma o alcance dinâmico de um vídeo de HDR para SDR mantendo detalhes e cores. Funciona apenas com vídeos HDR10, HLG e DoVi de 10 bits.", - "AlwaysBurnInSubtitleWhenTranscoding": "Sempre embutir legendas ao transcodificar", - "DateModified": "Data modificada", - "AllowFmp4TranscodingContainerHelp": "Permite o uso do contêiner fMP4 para este sintonizador, habilitando conteúdos HEVC e HDR. Nem todos os sintonizadores são compatíveis. Desative se tiver problemas de reprodução.", - "AllowStreamSharingHelp": "Permite que o Jellyfin duplique o fluxo mpegts do sintonizador e compartilhe com os clientes. Útil quando há limite de streams no sintonizador, mas pode causar problemas de reprodução.", - "EnableHi10p": "Ativar H.264 High 10 Profile", - "DisableVbrAudioEncodingHelp": "Impedir que o servidor codifique áudio com VBR para este cliente.", - "LabelAllowFmp4TranscodingContainer": "Permitir contêiner de transcodificação fMP4", - "HeaderAudioAdvanced": "Áudio Avançado", - "HeaderNextEpisode": "Próximo Episódio", - "HeaderNextVideo": "Próximo Vídeo", - "HeaderEditPlaylist": "Editar Playlist", - "HeaderUploadLyrics": "Enviar Letras", - "LabelAlwaysRemuxFlacAudioFiles": "Sempre remuxar arquivos de áudio FLAC", - "HeaderMediaSegmentActions": "Ações de Segmento de Mídia", - "FallbackMaxStreamingBitrateHelp": "A taxa máxima de streaming é usada como um fallback quando o ffprobe não consegue determinar a taxa de bits do stream de origem. Isso ajuda a evitar que os clientes solicitem uma taxa de transcodificação excessivamente alta, o que pode fazer o player falhar e sobrecarregar o codificador.", - "LabelAudioTagSettings": "Configurações de Tag de Áudio", - "LabelSaveTrickplayLocally": "Salvar imagens trickplay ao lado da mídia", - "LabelSaveTrickplayLocallyHelp": "Salvar imagens trickplay nas pastas de mídia as colocará ao lado da sua mídia para fácil migração e acesso.", - "LabelAllowStreamSharing": "Permitir compartilhamento de stream", - "LabelLyricDownloaders": "Baixadores de letras", - "LabelNoChangelog": "Nenhum registro de alterações fornecido para este lançamento.", + "MoviesAndShows": "Filmes e séries", + "Anime": "Animé", + "AlwaysBurnInSubtitleWhenTranscodingHelp": "Incorpora todas as legendas quando a transcodificação é acionada. Isto assegura que as legendas são sincronizadas após a transcodificação, à custa de uma velocidade de transcodificação reduzida.", + "AllowTonemappingSoftwareHelp": "O mapeamento de tons pode transformar a gama dinâmica de um vídeo de HDR para SDR, mantendo os detalhes e cores da imagens, que são informações muito importantes para representar a cena original. De momento, funciona apenas com vídeos HDR10 de 10 bits, HLG e DoVi.", + "AlwaysBurnInSubtitleWhenTranscoding": "Incorporar sempre legendas durante a transcodificação", + "DateModified": "Data de modificação", + "AllowFmp4TranscodingContainerHelp": "Permite que o container de transcodificação fMP4 para este sintonizador permita conteúdos HEVC e HDR. Nem todos os sintonizadores são compatíveis com este container. Desativa-o se tiveres problemas de reprodução.", + "AllowStreamSharingHelp": "Permite que o Jellyfin duplique a transmissão mpegts do sintonizador e partilhe esta transmissão duplicada aos seus clientes. Isto é útil quando o sintonizador tem um limite de contagens de transmissões totais mas pode também causar problemas de reprodução.", + "EnableHi10p": "Ativar o perfil H.264 High 10", + "DisableVbrAudioEncodingHelp": "Impedir que o servidor codifique o áudio com VBR para este cliente.", + "LabelAllowFmp4TranscodingContainer": "Permitir o container de transcodificação fMP4", + "HeaderAudioAdvanced": "Definições avançadas de áudio", + "HeaderNextEpisode": "Próximo episódio", + "HeaderNextVideo": "Próximo vídeo", + "HeaderEditPlaylist": "Editar playlist", + "HeaderUploadLyrics": "Fazer upload da letra", + "LabelAlwaysRemuxFlacAudioFiles": "Fazer sempre remux de ficheiros de áudio FLAC", + "HeaderMediaSegmentActions": "Ações de segmentos de multimédia", + "FallbackMaxStreamingBitrateHelp": "A taxa de bits máxima de transmissão é usada como um recurso quando o ffprobe não consegue determinar a taxa de bits da transmissão de origem. Isso ajuda a evitar que os clientes solicitem uma taxa de bits de transcodificação excessivamente alta, o que poderia fazer com que o leitor falhasse e sobrecarregasse o codificador.", + "LabelAudioTagSettings": "Definições de etiquetas de áudio", + "LabelSaveTrickplayLocally": "Guardar miniaturas de pré-visualização (trickplay) junto aos ficheiros de multimédia", + "LabelSaveTrickplayLocallyHelp": "As miniaturas de pré-visualização (trickplay) serão guardadas junto aos ficheiros de multimédia, o que facilita a migração e o acesso.", + "LabelAllowStreamSharing": "Permitir partilha de transmissão", + "LabelLyricDownloaders": "Fornecedores de letras", + "LabelNoChangelog": "Nenhum registo de alterações foi disponibilizado para esta versão.", "LabelNotInstalled": "Não instalado", - "LabelCustomTagDelimiters": "Delimitador de Tag Personalizado", - "LabelCustomTagDelimitersHelp": "Caracteres a serem tratados como delimitadores para separar tags.", - "LabelDelimiterWhitelist": "Lista branca de delimitadores", - "LabelFallbackMaxStreamingBitrate": "Taxa máxima de stream de fallback (Mbps)", - "LabelIsSynced": "Está Sincronizado", - "LabelAlwaysRemuxMp3AudioFiles": "Sempre remuxar arquivos de áudio MP3", + "LabelCustomTagDelimiters": "Delimitador de Etiqueta personalizado", + "LabelCustomTagDelimitersHelp": "Carateres considerados como delimitadores para separar etiquetas.", + "LabelDelimiterWhitelist": "Lista de delimitadores permitidos", + "LabelFallbackMaxStreamingBitrate": "Taxa de bits máxima por omissão (Mbps)", + "LabelIsSynced": "Está sincronizado", + "LabelAlwaysRemuxMp3AudioFiles": "Remuxar sempre ficheiros de áudio MP3", "LabelInstalled": "Instalado", - "LabelMediaSegmentsType": "{0} Segmentos", + "LabelMediaSegmentsType": "{0} segmentos", "LabelRepository": "Repositório", "LabelQsvDevice": "Dispositivo QSV", - "LabelQsvDeviceHelp": "Especifique o dispositivo para Intel QSV em um sistema com múltiplas GPUs. No Linux, este é o nó de renderização, por exemplo, /dev/dri/renderD128. No Windows, este é o índice do dispositivo começando de 0. Deixe em branco, a menos que você saiba o que está fazendo.", - "MessageCancelSeriesTimerError": "Ocorreu um erro ao cancelar o timer da série", + "LabelQsvDeviceHelp": "Especifica o dispositivo para Intel QSV num sistema multi-GPU. Em Linux, este é o nó de renderização, por exemplo, /dev/dri/renderD128. Em Windows, este é o índice do dispositivo, começando do 0. Deixa em branco a não ser que saibas o que está a fazer.", + "MessageCancelSeriesTimerError": "Ocorreu um erro ao cancelar o temporizador da série", "MediaSegmentAction.None": "Nenhum", - "PluginDisableError": "Ocorreu um erro ao desativar o plugin.", - "PluginUninstallError": "Ocorreu um erro ao desinstalar o plugin.", - "LibraryInvalidItemIdError": "A biblioteca está em um estado inválido e não pode ser editada. Você pode estar enfrentando um bug: o caminho no banco de dados não é o caminho correto no sistema de arquivos.", - "PreferNonstandardArtistsTag": "Preferir tag ARTISTS se disponível", - "LabelScreensaverTime": "Tempo do protetor de tela", - "MessageSplitVersionsError": "Ocorreu um erro ao dividir versões", - "PluginEnableError": "Ocorreu um erro ao ativar o plugin.", + "PluginDisableError": "Ocorreu um erro ao desativar a extensão.", + "PluginUninstallError": "Ocorreu um erro ao desinstalar a extensão.", + "LibraryInvalidItemIdError": "A biblioteca está num estado inválido e não pode ser editada. É possível que esteja a encontrar um erro: o caminho na base de dados não é o caminho correto no sistema de ficheiros.", + "PreferNonstandardArtistsTag": "Preferir a etiqueta ARTISTS se disponível", + "LabelScreensaverTime": "Tempo de proteção de ecrã", + "MessageSplitVersionsError": "Ocorreu um erro ao separar as versões", + "PluginEnableError": "Ocorreu um erro ao ativar a extensão.", "MediaInfoRotation": "Rotação", "MediaSegmentType.Recap": "Recapitulação", - "MediaSegmentType.Preview": "Prévia", - "MediaSegmentType.Outro": "Conclusão", - "MoveToBottom": "Mover para baixo", - "MoveToTop": "Mover para cima", - "PasswordMissingSaveError": "A nova senha não pode estar vazia.", - "PluginLoadConfigError": "Ocorreu um erro ao obter as páginas de configuração do plugin.", - "PluginLoadRepoError": "Ocorreu um erro ao obter os detalhes do plugin do repositório.", - "PlaylistError.UpdateFailed": "Erro ao atualizar playlist", - "MessageCancelTimerError": "Ocorreu um erro ao cancelar o timer", - "ReplaceTrickplayImages": "Substituir imagens trickplay existentes", - "Reset": "Redefinir", - "PreferNonstandardArtistsTagHelp": "Usar a tag ARTISTS não padrão em vez da tag ARTIST quando disponível.", + "MediaSegmentType.Preview": "Pré-visualização", + "MediaSegmentType.Outro": "Créditos", + "MoveToBottom": "Mover para o fundo", + "MoveToTop": "Mover para o início", + "PasswordMissingSaveError": "A nova palavra-passe não pode estar vazia.", + "PluginLoadConfigError": "Ocorreu um erro ao obter as páginas de configuração da extensão.", + "PluginLoadRepoError": "Ocorreu um erro ao obter os detalhes da extensão a partir do repositório.", + "PlaylistError.UpdateFailed": "Erro ao atualizar a playlist", + "MessageCancelTimerError": "Ocorreu um erro ao cancelar o temporizador", + "ReplaceTrickplayImages": "Substituir imagens de trickplay existentes", + "Reset": "Repor", + "PreferNonstandardArtistsTagHelp": "Utiliza a etiqueta não normalizada ARTISTS em vez da etiqueta ARTIST quando disponível.", "RenderPgsSubtitle": "Renderização experimental de legendas PGS", - "PreviewLyrics": "Visualizar Letras", - "RenderPgsSubtitleHelp": "Determina se o cliente deve renderizar legendas PGS em vez de usar legendas embutidas. Isso pode evitar a transcodificação do lado do servidor em troca de desempenho de renderização do lado do cliente.", - "LabelMediaSegmentProviders": "Provedores de segmento de mídia", - "MediaSegmentProvidersHelp": "Ative e classifique seus provedores de segmento de mídia preferidos por ordem de prioridade.", - "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extrair apenas quadros-chave para processamento significativamente mais rápido com menor precisão de tempo. Se o decodificador de hardware configurado não suportar este modo, será usado o decodificador de software.", - "AutoSubtitleStylingHelp": "Este modo alterna automaticamente entre os estilos nativos e personalizados de legendas, conforme o tipo do seu dispositivo.", + "PreviewLyrics": "Pré-visualizar letra", + "RenderPgsSubtitleHelp": "Determina se o cliente deve renderizar legendas PGS em vez de utilizar legendas embebidas. Isto pode evitar a transcodificação do lado do servidor em troca de desempenho de renderização do lado do cliente.", + "LabelMediaSegmentProviders": "Fornecedores de segmentos de multimédia", + "MediaSegmentProvidersHelp": "Ativa e classifica os teus fornecedores de segmentos de multimédia preferidos por ordem de prioridade.", + "LabelTrickplayKeyFrameOnlyExtractionHelp": "Extrai somente os fotogramas-chave para um processamento significativamente mais rápido com temporização menos precisa. Se o descodificador de hardware configurado não suportar esse modo, será utilizado o descodificador de software.", + "AutoSubtitleStylingHelp": "Este modo alterna automaticamente entre os mecanismos de estilo de legendas nativo e personalizado com base no teu tipo de dispositivo.", "Custom": "Personalizado", - "CustomSubtitleStylingHelp": "O estilo de legenda funcionará na maioria dos dispositivos, mas vem com uma sobrecarga de desempenho adicional.", - "LabelSubtitleStyling": "Estilo da legenda", + "CustomSubtitleStylingHelp": "O estilo de legendas funciona na maioria dos dispositivos, mas tem uma sobrecarga de desempenho adicional.", + "LabelSubtitleStyling": "Estilo de legendas", "Native": "Nativo", - "NativeSubtitleStylingHelp": "O estilo de legenda não funcionará em alguns dispositivos. No entanto, não vem com nenhuma sobrecarga de desempenho.", + "NativeSubtitleStylingHelp": "O estilo de legenda não funcionará em alguns dispositivos. No entanto, não tem qualquer sobrecarga de desempenho.", "LabelDevice": "Dispositivo", "LastActive": "Última atividade", - "DeleteServerConfirmation": "Tem certeza de que deseja excluir este servidor?", + "DeleteServerConfirmation": "Tens a certeza de que queres eliminar este servidor?", "LibraryNameInvalid": "O nome da biblioteca não pode estar vazio.", - "MetadataNfoLoadError": "Falha ao carregar as configurações de metadados NFO", - "SettingsPageLoadError": "Falha ao carregar a página de configurações", + "MetadataNfoLoadError": "Falha ao carregar as definições de metadados NFO", + "SettingsPageLoadError": "Falha ao carregar a página de definições", "RetryWithGlobalSearch": "Tentar novamente com uma pesquisa global", - "StreamCountExceedsLimit": "O número de streams excede o limite", - "ReadInputAtNativeFramerateHelp": "Ativar esta opção pode resolver alguns problemas, por exemplo, streams ao vivo parando prematuramente.", - "ReadInputAtNativeFramerate": "Ler entrada na taxa de quadros nativa", - "LogLoadFailure": "Falha ao carregar o arquivo de log. Ele pode ainda estar sendo escrito ativamente.", - "CustomSplashScreenSize": "Imagens personalizadas devem ter uma proporção de 16x9 com tamanho mínimo de 1920x1080.", - "DeleteCustomImage": "Excluir imagem personalizada", - "ImageUploadCancelled": "Envio de imagem cancelado", - "ImageUploadFailed": "Falha ao enviar imagem", - "ImageDeleteFailed": "Falha ao excluir imagem", - "PageNotFound": "Esta não é a página que você está procurando.", - "UploadCustomImage": "Enviar Imagem Personalizada", + "StreamCountExceedsLimit": "O número de transmissões excede o limite", + "ReadInputAtNativeFramerateHelp": "Ativar esta opção pode resolver alguns problemas, por exemplo, transmissões ao vivo que param prematuramente.", + "ReadInputAtNativeFramerate": "Reproduzir a entrada à velocidade de fotogramas nativa", + "LogLoadFailure": "Falha ao carregar o ficheiro de registo de alterações. É possível que atualmente esteja a ser escrito.", + "CustomSplashScreenSize": "As imagens personalizadas devem ter uma proporção de 16x9 e um tamanho mínimo de 1920x1080.", + "DeleteCustomImage": "Eliminar imagem personalizada", + "ImageUploadCancelled": "Carregamento de imagens cancelado", + "ImageUploadFailed": "Falha no carregamento da imagem", + "ImageDeleteFailed": "Falha na eliminação da imagem", + "PageNotFound": "Esta não é a página que procuras.", + "UploadCustomImage": "Carregar imagem personalizada", "HeaderPageNotFound": "Página não encontrada", - "LabelGroupShowsIntoCollections": "Agrupar programas em coleções", - "LabelGroupShowsIntoCollectionsHelp": "Programas em uma coleção serão exibidos como um único item agrupado ao exibir listas de programas.", - "DisplayLoadError": "Ocorreu um erro ao carregar os dados de configuração de exibição.", - "MetadataImagesLoadError": "Falha ao carregar as configurações de metadados", - "CopyLogSuccess": "Conteúdo do log copiado com sucesso.", - "LimitSegmentLength": "Usar segmentos HLS mais curtos", - "LimitSegmentLengthHelp": "Ativar esta opção pode ajudar a evitar que o player HLS trave durante a busca em certos dispositivos, como TVs webOS.", + "LabelGroupShowsIntoCollections": "Agrupar séries em coleções", + "LabelGroupShowsIntoCollectionsHelp": "As séries de uma coleção serão apresentadas como um item agrupado quando forem apresentadas listas de séries.", + "DisplayLoadError": "Ocorreu um erro ao carregar os dados de configuração do ecrã.", + "MetadataImagesLoadError": "Falha ao carregar definições de metadados", + "CopyLogSuccess": "Conteúdo do registo copiado com sucesso.", + "LimitSegmentLength": "Utilizar segmentos HLS mais curtos", + "LimitSegmentLengthHelp": "Ativar esta opção pode ajudar a evitar que o leitor HLS bloqueie durante a pesquisa em determinados dispositivos, como as TVs webOS.", "Retry": "Tentar novamente", - "HeaderServerUnavailable": "Servidor Indisponível", - "HeaderUpdateRequired": "Atualização Necessária", - "ViewSettings": "Ver configurações", - "MessageForgotPasswordPinReset": "Insira o PIN aqui para finalizar a redefinição da senha", - "DownloadManager": "Downloads", + "HeaderServerUnavailable": "Servidor indisponível", + "HeaderUpdateRequired": "Atualização necessária", + "ViewSettings": "Ver definições", + "MessageForgotPasswordPinReset": "Introduz o PIN para concluir a redefinição da palavra-passe", + "DownloadManager": "Transferências", "LiveTVPageLoadError": "Falha ao carregar a página de gravações", - "ButtonLearnMore": "Saiba mais", - "ButtonCreateBackup": "Criar backup", - "BackupsPageLoadError": "Falha ao carregar a página de backups", - "ConfirmDeleteRepository": "Excluir repositório?", - "LabelRestore": "Restaurar", - "MessageBackupDisclaimer": "Dependendo do tamanho da sua biblioteca, o processo de backup pode demorar um pouco.", - "HeaderBackups": "Backups", - "TranscodingLoadError": "Falha ao carregar as configurações de transcodificação", + "ButtonLearnMore": "Saber mais", + "ButtonCreateBackup": "Criar cópia de segurança", + "BackupsPageLoadError": "Falha ao carregar página de cópias de segurança", + "ConfirmDeleteRepository": "Apagar repositório?", + "LabelRestore": "Restauro", + "MessageBackupDisclaimer": "Dependendo do tamanho da mediateca, o processo de cópia de segurança poderá ser demorado.", + "HeaderBackups": "Cópias de segurança", + "TranscodingLoadError": "Falha ao carregar configurações de transcodificação", "StorageType.Unknown": "Desconhecido", "Success": "Sucesso", - "MessageBackupInProgress": "Backup em andamento", + "MessageBackupInProgress": "Cópia de segurança em progresso", "Create": "Criar", - "DeleteRepositoryConfirmation": "Tem certeza de que deseja excluir este repositório?", - "HeaderBackupsHelp": "Criar e restaurar instantâneas do seu servidor que podem incluir o banco de dados, metadados, legendas e trickplay.", - "LabelBackupsUnavailable": "Nenhum backup disponível", - "LabelDatabase": "Banco de dados", - "LabelImageCache": "Cache de Imagem", - "LabelProgramData": "Dados do Programa", - "MessageRestoreDisclaimer": "ATENÇÃO: Você está prestes a restaurar a partir de um backup anterior. Seu servidor ficará indisponível durante o processo e qualquer dado novo criado desde o backup será perdido.", + "DeleteRepositoryConfirmation": "Tem a certeza que pretende apagar este repositório?", + "HeaderBackupsHelp": "Criar e restaurar cópias do servidor, incluindo metadados, legendas e miniaturas de pré-visualização.", + "LabelBackupsUnavailable": "Sem cópias de segurança disponíveis", + "LabelDatabase": "Base de dados", + "LabelImageCache": "Memória cache de imagens", + "LabelProgramData": "Dados da aplicação", + "MessageRestoreDisclaimer": "AVISO: Você está prestes a restaurar a partir de um backup anterior. Seu servidor ficará inutilizável durante o processo e todos os novos dados criados desde o backup serão perdidos.", "RepositoriesPageLoadError": "Falha ao carregar repositórios", - "PluginsLoadError": "Ocorreu um erro ao carregar plugins.", + "PluginsLoadError": "Ocorreu um erro ao carregar os plugins.", "MessageRestoreInProgress": "Restauração em andamento", "MessageRestoreSuccess": "Restauração concluída com sucesso", "StorageType.CDRom": "CD-ROM", - "StorageType.NoRootDirectory": "Sem Diretório Raiz", + "StorageType.NoRootDirectory": "Nenhum diretório raiz", "StorageType.Ram": "RAM", "StorageType.Removable": "Removível", - "StorageType.Fixed": "Fixo", - "StorageType.Network": "Rede", - "MessageWaitingForServer": "Aguardando o servidor..." + "StorageType.Fixed": "Consertado", + "StorageType.Network": "Network", + "MessageWaitingForServer": "Aguardando servidor..." } From adc6430f395195814f1284c08ba892ad3620bdaf Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Wed, 2 Jul 2025 10:21:45 -0400 Subject: [PATCH 610/645] Revert "Translated using Weblate (Portuguese)" This reverts commit 6316bdb53bfd1548bf8742e5c48d1f009e3dcfa9. --- src/strings/pt.json | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/src/strings/pt.json b/src/strings/pt.json index 5a1a791bd..10a0e4052 100644 --- a/src/strings/pt.json +++ b/src/strings/pt.json @@ -1524,7 +1524,7 @@ "OnApplicationStartup": "Na inicialização do aplicativo", "MessageSyncPlayLibraryAccessDenied": "O acesso a este conteúdo é restrito.", "SortName": "Classificar nome", - "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "Essas configurações também se aplicam a qualquer reprodução do Google Cast iniciada por este dispositivo.", + "SubtitleAppearanceSettingsAlsoPassedToCastDevices": "Estas definições também se aplicam a qualquer reprodução do Google Cast iniciada por este dispositivo.", "OnWakeFromSleep": "Ao acordar da suspensão", "OptionMaxActiveSessionsHelp": "Um valor 0 desativará o recurso.", "Watched": "Assistido", @@ -1591,7 +1591,7 @@ "LogLevel.Critical": "Crítico", "New": "Novo", "SubtitleWhite": "Branco", - "SubtitleLightGray": "Cinza claro", + "SubtitleLightGray": "Cinzento-claro", "Track": "Faixa", "TypeOptionPluralMusicArtist": "Artistas musicais", "TypeOptionPluralSeason": "Temporadas", @@ -1631,7 +1631,7 @@ "LogoScreensaver": "Logótipo da proteção de ecrã", "MediaInfoColorSpace": "Espaço colorido", "Studio": "Estúdio", - "SubtitleGray": "Cinza", + "SubtitleGray": "Cinzento", "TabLogs": "Registos (Logs)", "Tags": "Etiquetas", "Vertical": "Vertical", @@ -1705,7 +1705,7 @@ "LabelBuildVersion": "Versão de compilação", "LabelWebVersion": "Versão web", "SubtitleCyan": "Ciano", - "SubtitleOffset": "Deslocamento de legenda", + "SubtitleOffset": "Desvio das legendas", "ValueOneMusicVideo": "1 videoclipe", "ValueOneSeries": "1 série", "XmlTvSportsCategoriesHelp": "Lista de categorias, separadas por '|', que correspondem a programas de desporto.", @@ -2043,17 +2043,5 @@ "LabelBackupsUnavailable": "Sem cópias de segurança disponíveis", "LabelDatabase": "Base de dados", "LabelImageCache": "Memória cache de imagens", - "LabelProgramData": "Dados da aplicação", - "MessageRestoreDisclaimer": "AVISO: Você está prestes a restaurar a partir de um backup anterior. Seu servidor ficará inutilizável durante o processo e todos os novos dados criados desde o backup serão perdidos.", - "RepositoriesPageLoadError": "Falha ao carregar repositórios", - "PluginsLoadError": "Ocorreu um erro ao carregar os plugins.", - "MessageRestoreInProgress": "Restauração em andamento", - "MessageRestoreSuccess": "Restauração concluída com sucesso", - "StorageType.CDRom": "CD-ROM", - "StorageType.NoRootDirectory": "Nenhum diretório raiz", - "StorageType.Ram": "RAM", - "StorageType.Removable": "Removível", - "StorageType.Fixed": "Consertado", - "StorageType.Network": "Network", - "MessageWaitingForServer": "Aguardando servidor..." + "LabelProgramData": "Dados da aplicação" } From c75d453f96cf8b300dc9d42f3c8e952acb483693 Mon Sep 17 00:00:00 2001 From: DyingSlacker <2391773977@outlook.com> Date: Wed, 2 Jul 2025 09:58:36 -0400 Subject: [PATCH 611/645] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index fe95332c0..b2a99a495 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -2062,5 +2062,7 @@ "TranscodingLoadError": "加载转码设置失败", "PluginsLoadError": "加载插件时发生错误。", "ButtonLearnMore": "了解更多", - "LiveTVPageLoadError": "无法加载录制页面" + "LiveTVPageLoadError": "无法加载录制页面", + "ConnectAnyway": "仍要连接", + "HeaderServerMismatch": "服务器不匹配" } From 3067ab874c4f694d51708447dee00a2d6b1e6a27 Mon Sep 17 00:00:00 2001 From: DyingSlacker <2391773977@outlook.com> Date: Wed, 2 Jul 2025 11:26:00 -0400 Subject: [PATCH 612/645] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index b2a99a495..750f7256e 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -2064,5 +2064,6 @@ "ButtonLearnMore": "了解更多", "LiveTVPageLoadError": "无法加载录制页面", "ConnectAnyway": "仍要连接", - "HeaderServerMismatch": "服务器不匹配" + "HeaderServerMismatch": "服务器不匹配", + "MessageServerMismatch": "您正在连接的服务器与之前在此地址连接的服务器不同。如果这是预期情况,请选择“仍要连接”。否则,您的连接或该服务器可能已被篡改。" } From 92fd96ad28b81e1c54664c5f6749b9c4f5da69d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yago=20Ra=C3=B1a=20Gayoso?= Date: Wed, 2 Jul 2025 13:41:30 -0400 Subject: [PATCH 613/645] Translated using Weblate (Galician) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/gl/ --- src/strings/gl.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/gl.json b/src/strings/gl.json index 41338a522..c37a3cef4 100644 --- a/src/strings/gl.json +++ b/src/strings/gl.json @@ -1055,5 +1055,6 @@ "HeaderNewPlaylist": "Nova lista de reprodución", "HeaderNextVideo": "Seguinte vídeo", "BackupsPageLoadError": "Fallou a carga da páxina de copias de seguridade", - "ButtonCreateBackup": "Crear copia de seguridade" + "ButtonCreateBackup": "Crear copia de seguridade", + "ButtonLearnMore": "Saber máis" } From 83b8187575abd616072aeb1abc9c91563f72f043 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Jul 2025 22:35:50 +0000 Subject: [PATCH 614/645] Update dependency @stylistic/stylelint-plugin to v3.1.3 --- package-lock.json | 22 +++++++++++----------- package.json | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index ae75a3565..b9e6a80ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -75,7 +75,7 @@ "@eslint-community/eslint-plugin-eslint-comments": "4.5.0", "@eslint/js": "9.29.0", "@stylistic/eslint-plugin": "4.4.1", - "@stylistic/stylelint-plugin": "3.1.2", + "@stylistic/stylelint-plugin": "3.1.3", "@types/dompurify": "3.0.5", "@types/escape-html": "1.0.4", "@types/loadable__component": "5.13.9", @@ -5439,9 +5439,9 @@ } }, "node_modules/@stylistic/stylelint-plugin": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.1.2.tgz", - "integrity": "sha512-tylFJGMQo62alGazK74MNxFjMagYOHmBZiePZFOJK2n13JZta0uVkB3Bh5qodUmOLtRH+uxH297EibK14UKm8g==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.1.3.tgz", + "integrity": "sha512-85fsmzgsIVmyG3/GFrjuYj6Cz8rAM7IZiPiXCMiSMfoDOC1lOrzrXPDk24WqviAghnPqGpx8b0caK2PuewWGFg==", "dev": true, "license": "MIT", "dependencies": { @@ -5449,10 +5449,10 @@ "@csstools/css-tokenizer": "^3.0.1", "@csstools/media-query-list-parser": "^3.0.1", "is-plain-object": "^5.0.0", + "postcss": "^8.4.41", "postcss-selector-parser": "^6.1.2", "postcss-value-parser": "^4.2.0", - "style-search": "^0.1.0", - "stylelint": "^16.8.2" + "style-search": "^0.1.0" }, "engines": { "node": "^18.12 || >=20.9" @@ -28107,19 +28107,19 @@ } }, "@stylistic/stylelint-plugin": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.1.2.tgz", - "integrity": "sha512-tylFJGMQo62alGazK74MNxFjMagYOHmBZiePZFOJK2n13JZta0uVkB3Bh5qodUmOLtRH+uxH297EibK14UKm8g==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.1.3.tgz", + "integrity": "sha512-85fsmzgsIVmyG3/GFrjuYj6Cz8rAM7IZiPiXCMiSMfoDOC1lOrzrXPDk24WqviAghnPqGpx8b0caK2PuewWGFg==", "dev": true, "requires": { "@csstools/css-parser-algorithms": "^3.0.1", "@csstools/css-tokenizer": "^3.0.1", "@csstools/media-query-list-parser": "^3.0.1", "is-plain-object": "^5.0.0", + "postcss": "^8.4.41", "postcss-selector-parser": "^6.1.2", "postcss-value-parser": "^4.2.0", - "style-search": "^0.1.0", - "stylelint": "^16.8.2" + "style-search": "^0.1.0" }, "dependencies": { "is-plain-object": { diff --git a/package.json b/package.json index 5ebfafc46..f64bd1121 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "@eslint-community/eslint-plugin-eslint-comments": "4.5.0", "@eslint/js": "9.29.0", "@stylistic/eslint-plugin": "4.4.1", - "@stylistic/stylelint-plugin": "3.1.2", + "@stylistic/stylelint-plugin": "3.1.3", "@types/dompurify": "3.0.5", "@types/escape-html": "1.0.4", "@types/loadable__component": "5.13.9", From 23223926e9fc2b040d4f78944cfaac094ce4572b Mon Sep 17 00:00:00 2001 From: zjad Date: Thu, 3 Jul 2025 05:07:04 -0400 Subject: [PATCH 615/645] Translated using Weblate (Chinese (Simplified Han script)) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/zh_Hans/ --- src/strings/zh-cn.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json index 750f7256e..596d1fd8b 100644 --- a/src/strings/zh-cn.json +++ b/src/strings/zh-cn.json @@ -806,7 +806,7 @@ "NewEpisodesOnly": "只新集", "News": "新闻", "Next": "下一个", - "NextUp": "接下来", + "NextUp": "继续观看", "No": "否", "NoNewDevicesFound": "找不到新设备。要添加新调谐器, 请关闭此对话框并手动输入设备信息。", "MessageNoNextUpItems": "没有发现。开始看你的节目!", From 24108ab6fc0634449f85628d9bfb74c901f90544 Mon Sep 17 00:00:00 2001 From: queeup Date: Thu, 3 Jul 2025 14:27:11 -0400 Subject: [PATCH 616/645] Translated using Weblate (Turkish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/tr/ --- src/strings/tr.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/tr.json b/src/strings/tr.json index 0fcca2371..efc81a24b 100644 --- a/src/strings/tr.json +++ b/src/strings/tr.json @@ -2053,5 +2053,9 @@ "Create": "Oluştur", "LabelImageCache": "Görüntü Önbelleği", "MessageRestoreSuccess": "Geri yükleme başarıyla tamamlandı", - "MessageWaitingForServer": "Sunucu bekleniyor..." + "MessageWaitingForServer": "Sunucu bekleniyor...", + "MessageServerMismatch": "Bağlandığınız sunucu, daha önce bu adresten bağlandığınız sunucuyla aynı değil. Bu bekleniyorsa, lütfen \"Her Durumda Bağlan\" seçeneğini seçin. Aksi takdirde, bağlantınız veya sunucunuz risk altında olabilir.", + "HeaderServerMismatch": "Sunucu Uyuşmazlığı", + "LiveTVPageLoadError": "Kayıtlar sayfası yüklenemedi", + "ConnectAnyway": "Her Durumda Bağlan" } From 10e25c6660b71a92d75a525700b5dfc45d257c52 Mon Sep 17 00:00:00 2001 From: "Thadah D. Denyse" Date: Thu, 3 Jul 2025 13:03:09 -0400 Subject: [PATCH 617/645] Translated using Weblate (Basque) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/eu/ --- src/strings/eu.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/strings/eu.json b/src/strings/eu.json index 5f1fc7b23..9871e6a97 100644 --- a/src/strings/eu.json +++ b/src/strings/eu.json @@ -1442,7 +1442,7 @@ "ContinueWatching": "Ikusten jarraitu", "Console": "Kontsola", "Connect": "Konektatu", - "ConfirmEndPlayerSession": "Jellyfin dispositiboan itxi nahi duzu?", + "ConfirmEndPlayerSession": "Jellyfin {0}-(e)n itxi nahi duzu?", "ConfirmDeletion": "Baieztatu ezabatuta", "ConfirmDeleteItems": "Elementu horiek ezabatzean, artxibo-sistematik zein multimedia-liburutegitik ezabatuko dira. Ziur zaude jarraitu nahi duzula?", "ConfirmDeleteItem": "Elementu hori ezabatzean, artxibo-sistematik zein multimedia-liburutegitik ezabatuko da. Ziur zaude jarraitu nahi duzula?", @@ -2042,5 +2042,9 @@ "PluginsLoadError": "Errore bat gertatu da pluginak kargatzean.", "ConfirmDeleteRepository": "Ezabatu biltegia?", "DeleteRepositoryConfirmation": "Ziur zaude biltegi hau ezabatu nahi duzula?", - "RepositoriesPageLoadError": "Biltegiak kargatzeak huts egin du" + "RepositoriesPageLoadError": "Biltegiak kargatzeak huts egin du", + "MessageServerMismatch": "Konektatzen ari zaren zerbitzaria ez da helbide honetan lehenago konektatu zinen zerbitzari bera. Hori espero bada, hautatu \"Konektatu hala ere\". Bestela, zure konexioa edo zerbitzaria arriskuan egon daitezke.", + "LiveTVPageLoadError": "Grabaketen orria kargatzeak huts egin du", + "ConnectAnyway": "Konektatu hala ere", + "HeaderServerMismatch": "Zerbitzaria ez dator bat" } From 470bacaaff07316175ae35c4dadd5f8ed91361e7 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Thu, 3 Jul 2025 17:07:23 -0400 Subject: [PATCH 618/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index b7ddc4b15..484f22ad8 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -953,7 +953,7 @@ "ServerNameIsRestarting": "El servidor en {0} s'està reiniciant.", "SeriesYearToPresent": "{0} - Ara", "SeriesDisplayOrderHelp": "Ordena els episodis per data d'emissió, ordre dels DVD o numeració absoluta.", - "Series": "Sèrie", + "Series": "Sèries", "SelectServer": "Seleccioneu un servidor", "SelectAdminUsername": "Seleccioneu un nom d'usuari per al compte d'administrador.", "Season": "Temporada", From 4ca792b3e0f7fcf0446eecbf841751aff2566137 Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Thu, 3 Jul 2025 19:09:09 -0400 Subject: [PATCH 619/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 484f22ad8..364c1aff0 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -1057,7 +1057,7 @@ "MediaInfoColorTransfer": "Transferència de color", "MediaInfoColorSpace": "Espai de color", "MediaInfoColorPrimaries": "Colors primaris", - "MediaInfoCodecTag": "Etiqueta de còdec", + "MediaInfoCodecTag": "Etiqueta del còdec", "MediaInfoCodec": "Còdec", "MediaInfoBitrate": "Taxa de bits", "MediaInfoBitDepth": "Profunditat de bits", From 348823900815bf53d9f906fcd21ac0bb3ece9fac Mon Sep 17 00:00:00 2001 From: st7105 Date: Thu, 3 Jul 2025 19:29:38 -0400 Subject: [PATCH 620/645] Translated using Weblate (Russian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ru/ --- src/strings/ru.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/ru.json b/src/strings/ru.json index 6b77519eb..f9814e626 100644 --- a/src/strings/ru.json +++ b/src/strings/ru.json @@ -2062,5 +2062,8 @@ "RepositoriesPageLoadError": "Не удалось загрузить репозитории", "TranscodingLoadError": "Не удалось загрузить настройки транскодирования", "ButtonLearnMore": "Узнать больше", - "LiveTVPageLoadError": "Не удалось загрузить страницу с записями" + "LiveTVPageLoadError": "Не удалось загрузить страницу с записями", + "HeaderServerMismatch": "Несоответствие серверов", + "ConnectAnyway": "Подключиться в любом случае", + "MessageServerMismatch": "Сервер, к которому вы подключаетесь, не является тем же самым сервером, к которому вы ранее подключались по этому адресу. Если это ожидаемо, выберите \"Подключиться в любом случае\". В противном случае ваше соединение или сервер могут быть скомпрометированы." } From 0dea95070a9eb26b6a031155f98fd6217954cf73 Mon Sep 17 00:00:00 2001 From: Tal Sarid Date: Fri, 4 Jul 2025 06:38:22 -0400 Subject: [PATCH 621/645] Translated using Weblate (Hebrew) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/ --- src/strings/he.json | 55 ++++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/src/strings/he.json b/src/strings/he.json index 336668e8f..be8a61365 100644 --- a/src/strings/he.json +++ b/src/strings/he.json @@ -256,7 +256,7 @@ "MySubtitles": "הכתוביות שלי", "Name": "שם", "NewCollection": "אוספים חדשים", - "NewCollectionHelp": "אוספים מאפשרים לך ליצור קיבוצים מותאמים אישית של סרטים ותוכן ספריה אחר.", + "NewCollectionHelp": "אוספים מאפשרים לך ליצור קיבוצים מותאמים אישית של סרטים ותוכן ספרייה אחר.", "NewCollectionNameExample": "לדוגמא :אוסף מלחמת הכוכבים", "NewEpisodes": "פרקים חדשים", "NewEpisodesOnly": "פרקים חדשים בלבד", @@ -312,7 +312,7 @@ "PlayAllFromHere": "נגן הכל מכאן", "PlayFromBeginning": "נגן מהתחלה", "PleaseEnterNameOrId": "הזן שם או מזהה חיצוני.", - "PleaseRestartServerName": "נא להפעיל מחדש את ג'ליפין ב-{0}.", + "PleaseRestartServerName": "נא להפעיל מחדש את Jellyfin ב-{0}.", "PleaseSelectTwoItems": "בחר לפחות שני פריטים.", "Premiere": "הקרנת בכורה", "Premieres": "בכורות", @@ -404,7 +404,7 @@ "ValueSpecialEpisodeName": "מיוחד- {0}", "ViewAlbum": "צפה באלבום", "Wednesday": "רביעי", - "WelcomeToProject": "ברוכים הבאים לג'ליפין!", + "WelcomeToProject": "ברוכים הבאים ל-Jellyfin!", "Writer": "כותב", "Albums": "אלבומים", "Artists": "אומנים", @@ -479,7 +479,7 @@ "Ascending": "בסדר עולה", "Photos": "צילומים", "MessageConfirmShutdown": "‫האם אתה בטוח שברצונך לכבות את השרת?", - "MessageConfirmRestart": "‫האם אתה בטוח שברצונך לאתחל את ג'ליפין?", + "MessageConfirmRestart": "‫האם אתה בטוח שברצונך לאתחל את Jellyfin?", "HeaderThisUserIsCurrentlyDisabled": "משתמש זה אינו פעיל כרגע", "HeaderTaskTriggers": "טריגרים של המשימה", "HeaderStopRecording": "עצור הקלטה", @@ -637,7 +637,7 @@ "LabelDisplaySpecialsWithinSeasons": "הצג פרקים מיוחדים בתוך העונות שבמהלכן הם שודרו", "LabelDisplayName": "שם תצוגה", "LabelDisplayMode": "מצב תצוגה", - "LabelDisplayLanguageHelp": "תרגום ג'ליפין הוא פרויקט מתמשך.", + "LabelDisplayLanguageHelp": "תרגום Jellyfin הוא פרויקט מתמשך.", "LabelDisplayLanguage": "שפת תצוגה", "LabelDidlMode": "מצב DIDL", "LabelDeviceDescription": "תיאור מכשיר", @@ -809,10 +809,10 @@ "ErrorSavingTvProvider": "אירעה שגיאה בשמירת ספק הטלוויזיה. אנא וודא שהוא נגיש ונסה שוב.", "ErrorPleaseSelectLineup": "אנא בחר מערך ונסה שוב. אם אין מערכים זמינים, אנא בדוק ששם המשתמש, הסיסמה והמיקוד שלך נכונים.", "ErrorGettingTvLineups": "אירעה שגיאה בהורדת מערכי הטלוויזיה. אנא ודא שהמידע שלך נכון ונסה שוב.", - "ErrorDeletingItem": "אירעה שגיאה במחיקת הפריט מהשרת. נא לבדוק שיש לג'ליפין הרשאת כתיבה לתיקיית המדיה ולנסות שוב.", + "ErrorDeletingItem": "אירעה שגיאה במחיקת הפריט מהשרת. נא לבדוק שיש ל-Jellyfin הרשאת כתיבה לתיקיית המדיה ולנסות שוב.", "ErrorAddingXmlTvFile": "אירעה שגיאה בגישה לקובץ XMLTV. אנא ודא שהקובץ קיים ונסה שוב.", "ErrorAddingTunerDevice": "אירעה שגיאה בהוספת מכשיר המקלט. אנא וודא שהוא נגיש ונסה שוב.", - "ErrorAddingMediaPathToVirtualFolder": "אירעה שגיאה בהוספת נתיב המדיה. אנא וודא שהנתיב תקף ולג'ליפין יש גישה למיקום זה.", + "ErrorAddingMediaPathToVirtualFolder": "אירעה שגיאה בהוספת נתיב המדיה. אנא וודא שהנתיב תקף ול-Jellyfin יש גישה למיקום זה.", "Episode": "פרק", "EnableDetailsBannerHelp": "הצג תמונת באנר בראש עמוד פרטי הפריט.", "EnableDetailsBanner": "באנר פרטים", @@ -866,7 +866,7 @@ "ShowLess": "הצג פחות", "ShowAdvancedSettings": "הצג הגדרות מתקדמות", "SettingsWarning": "שינוי ערכים אלו עלול לגרום לחוסר יציבות או בעיות חיבור. אם אתה נתקל בבעיות, אנו ממליצים להחזיר אותם לערכי ברירת המחדל.", - "ServerRestartNeededAfterPluginInstall": "ג'ליפין יצטרך לאתחל לאחר התקנת התוסף.", + "ServerRestartNeededAfterPluginInstall": "יש צורך לאתחל את Jellyfin לאחר התקנת התוסף.", "SeriesDisplayOrderHelp": "סדר פרקים על פי תאריך שידור, סדר DVD, או מספרים אבסולוטיים.", "Series": "סדרה", "SendMessage": "שלח הודעה", @@ -909,7 +909,7 @@ "LabelAlbumArtMaxWidth": "רוחב מירבי של אומנות אלבום", "LabelAlbumArtMaxHeight": "גובה מירבי של אומנות אלבום", "LabelAbortedByServerShutdown": "(הופסק על ידי כיבוי השרת)", - "KnownProxiesHelp": "רשימה מופרדת באמצעות פסיקים של כתובות IP או שמות מארחים של מתווכים ידועים המשמשים בעת חיבור לשרת ג'ליפין שלך. זה נדרש כדי לעשות שימוש נכון בכותרות X-Forwarded-For. דורש אתחול מחדש לאחר השמירה.", + "KnownProxiesHelp": "רשימה מופרדת באמצעות פסיקים של כתובות IP או שמות מארחים של מתווכים ידועים המשמשים בעת חיבור לשרת ה-Jellyfin שלך. זה נדרש כדי לעשות שימוש נכון בכותרות X-Forwarded-For. דורש אתחול מחדש לאחר השמירה.", "ImportFavoriteChannelsHelp": "רק ערוצים המסומנים כחביבים במכשיר המקלט ייובאו .", "HttpsRequiresCert": "כדי לאפשר חיבורים מאובטחים, יהיה עליך לספק אישור SSL מהימן, כגון Let's Encrypt. אנא ספק תעודה או השבת חיבורים מאובטחים.", "HideWatchedContentFromLatestMedia": "הסתר תוכן שנצפה מ'מדיה שהתווספה לאחרונה'", @@ -1034,7 +1034,7 @@ "IgnoreDtsHelp": "השבתת אפשרות זו עשויה לפתור בעיות מסוימות, למשל. אודיו חסר בערוצים עם זרמי אודיו ווידאו נפרדים.", "HeaderContainerProfileHelp": "פרופילי קונטיינר מציינים את המגבלות של מכשיר בעת הפעלת קידודים ספציפיים. אם חלה מגבלה אז המדיה תקודד מחדש, גם אם הקידוד מוגדר להפעלה ישירה.", "LabelAutoDiscoveryTracingHelp": "כאשר מופעל, חבילות רשת המתקבלות בפורט הגילוי האוטומטי יתועדו.", - "LabelAutomaticDiscoveryHelp": "אפשר ליישומים לזהות באופן אוטומטי את ג'ליפין באמצעות שימוש ב-UDP דרך פורט 7359.", + "LabelAutomaticDiscoveryHelp": "אפשר ליישומים לזהות באופן אוטומטי את Jellyfin באמצעות שימוש ב-UDP דרך פורט 7359.", "LabelBaseUrlHelp": "הוסף תת-תיקייה מותאמת אישית לכתובת ה-URL של השרת. לדוגמא:http://example.com/<baseurl>", "LabelBindToLocalNetworkAddressHelp": "דרוס את כתובת ה-IP המקומית של שרת ה-HTTP. אם ריק, השרת ייצמד לכל הכתובות הזמינות. שינוי ערך זה דורש הפעלה מחדש.", "LabelChromecastVersion": "גרסאת Google Cast", @@ -1203,12 +1203,12 @@ "LabelKodiMetadataEnableExtraThumbs": "העתק extrafanart לשדה extrathumbs", "LabelGroupMoviesIntoCollectionsHelp": "כל הסרטים באוסף יופיעו בתור פריט מקובץ אחד ברשימות סרטים.", "LabelHomeScreenSectionValue": "איזור {0} בעמוד הבית", - "LabelExtractChaptersDuringLibraryScan": "חלץ את תמונות הפרק תוך כדי סריקת הספריה", + "LabelExtractChaptersDuringLibraryScan": "חלץ את תמונות הפרק תוך כדי סריקת הספרייה", "LabelBackdropScreensaverInterval": "interval שומר המסך של הרקע", "LabelEnableLUFSScan": "הפעלת סריקת LUFS", "LabelEnableAutomaticPortMapHelp": "בצע port forward בצורה אוטומטית מפורטים בראוטר אל פורטים לוקאליים על השרת באמצעות UPnP. ייתכן שזה לא יעבוד עם דגמי נתב מסוימים או עם קונפיגורציות רשת מסוימות. שינויים לא יחולו עד לאחר הפעלה מחדש של השרת.", "BackdropScreensaver": "שומר המסך של הרקע", - "LabelExtractChaptersDuringLibraryScanHelp": "צור תמונות פרקים כאשר סרטונים מיובאים תוך כדי סריקת הספריה. אחרת, הם יחולצו תוך כדי המשימה המתוזמנת העוסקת בתמונות הפרק, מה שיאפשר לסריקת הספריה הרגילה להסתיים מהר יותר.", + "LabelExtractChaptersDuringLibraryScanHelp": "צור תמונות פרקים כאשר סרטונים מיובאים תוך כדי סריקת הספרייה. אחרת, הם יחולצו תוך כדי המשימה המתוזמנת העוסקת בתמונות הפרק, מה שיאפשר לסריקת הספרייה הרגילה להסתיים מהר יותר.", "LabelThrottleDelaySecondsHelp": "כמות הזמן בשניות שלאחריה המקודד יגיע ל-throttle. חייב להיות גדול מספיק כדי שהלקוח ישמור על buffer גדול מספיק. עובד רק אם throttling מופעל.", "HeaderGuestCast": "כוכבים אורחים", "LabelBackdropScreensaverIntervalHelp": "הזמן בשניות בין רקעים שונים כאשר משתמשים ברקעים כשומר מסך.", @@ -1297,7 +1297,7 @@ "Creator": "יוצר", "EnableHi10p": "הפעלת פרופיל H.264 High 10", "AllowFmp4TranscodingContainerHelp": "אפשר המרת קידוד של fMP4 עבור מכוון זה כדי לאפשר תוכן HEVC ו-HDR. לא כל המכוונים תומכים בפורמט זה. בטל זאת אם יש בעיה בניגון.", - "AllowStreamSharingHelp": "אפשר לג'ליפין לשכפל את זרם mpgets מהמכוון ולשתף ללקוחות. זה עוזר כשהמכוון מוגבל במספר הזרמים אך עלול לגרום לבעיות בניגון.", + "AllowStreamSharingHelp": "אפשר ל-Jellyfin לשכפל את זרם ה-MPEGTS מהמכוון ולשתף ללקוחותיו. זה עוזר כשהמכוון מוגבל במספר הזרמים הכולל אך עלול לגרום לבעיות בניגון.", "AlwaysRemuxFlacAudioFilesHelp": "אם יש לך קבצים שהדפדפן מסרב להציג או מראה זמנים שגויים, ניתן להפעיל זאת כפתרון חלופי.", "AlwaysRemuxMp3AudioFilesHelp": "אם יש לך קבצים שהדפדפן מראה עבורם זמנים שגויים, ניתן להפעיל זאת כפתרון חלופי.", "AndOtherArtists": "{0} ו-{1} אומנים נוספים.", @@ -1307,7 +1307,7 @@ "AlwaysBurnInSubtitleWhenTranscoding": "צרוב כתוביות תמיד בעת המרת קידוד", "EnableDtsHelp": "יש להפעיל רק אם מכשירך תומך ב-DTS או מחובר למקלט שמע תואם, אחרת תיגרם שגיאת ניגון.", "EnableHi10pHelp": "הפעל כדי להימנע מהמרת קידוד וידיאו מסוג H.264 10-bit. יש לבטל אפשרות זו אם הוידיאו מציג פריימים ריקים.", - "ErrorDeletingLyrics": "אירעה שגיאה במחיקת המילים מהשרת. נא לבדוק שיש לג'ליפין הרשאת כתיבה לתיקיית המדיה ולנסות שוב.", + "ErrorDeletingLyrics": "אירעה שגיאה במחיקת המילים מהשרת. נא לבדוק שיש ל-Jellyfin הרשאת כתיבה לתיקיית המדיה ולנסות שוב.", "AlwaysBurnInSubtitleWhenTranscodingHelp": "צרוב את כל הכתוביות בזמן המרת קידוד. זה מבטיח שהכתוביות יהיו מסונכרנות אך מאט את מהירות ההמרה.", "EnableTrueHd": "הפעלת TrueHD", "EnableTrueHdHelp": "יש להפעיל רק אם מכשירך תומך ב-TrueHD או מחובר למקלט שמע תואם, אחרת תהיה שגיאת ניגון.", @@ -1364,7 +1364,7 @@ "LabelPublicHttpsPort": "מספר פורט HTTPS פומבי", "LabelPublicHttpsPortHelp": "מספר הפורט הפומבי אשר ימופה לפורט HTTPS המקומי.", "LabelPublishedServerUri": "כתובות URI של השרת שיפורסמו", - "LabelPublishedServerUriHelp": "יש לדרוס את ה-URI שבשימוש ג'ליפין, בהתבסס על כרטיס הרשת, או כתובת IP של הלקוח. למשל: internal=http://jellyfin.example.com, external=https://jellyfin.example.com, או all=https://jellyfin.example.com", + "LabelPublishedServerUriHelp": "יש לדרוס את ה-URI שבשימוש Jellyfin, בהתבסס על כרטיס הרשת או כתובת IP של הלקוח. למשל: internal=http://jellyfin.example.com, external=https://jellyfin.example.com או all=https://jellyfin.example.com", "LabelParallelImageEncodingLimit": "גבול קידוד תמונות במקביל", "LabelParallelImageEncodingLimitHelp": "המספר המקסימלי של קידודי תמונות שירוצו במקביל. השארת ערך זה ריק תקבע מגבלה בהתאם למספר המעבדים במערכת שלך.", "LabelPlayDefaultAudioTrack": "ניגון פס הקול הדיפולטי ללא תלות בשפה", @@ -1466,7 +1466,7 @@ "LogLevel.Debug": "ניפוי שגיאות", "LabelTVHomeScreen": "עמוד הבית במצב טלוויזיה", "LearnHowYouCanContribute": "איך ניתן לתרום.", - "LibraryInvalidItemIdError": "הספריה נמצאת במצב לא תקין ולא ניתן לערוך אותה. אולי נתקלת בשגיאה: המסלול במבנה-הנתונים שונה מהמסלול במערכת הקבצים.", + "LibraryInvalidItemIdError": "הספרייה נמצאת במצב לא תקין ולא ניתן לערוך אותה. אולי נתקלת בשגיאה: הנתיב במסד-הנתונים שונה מהנתיב במערכת הקבצים.", "LimitSupportedVideoResolution": "הגבלת המספר המירבי של רזולוציות וידיאו נתמכות", "LabelUnstable": "לא יציב", "LeaveBlankToNotSetAPassword": "ניתן להשאיר ריק כדי להימנע מהגדרת סיסמה.", @@ -1519,7 +1519,7 @@ "MessageConfirmAppExit": "האם ברצונך לצאת?", "MessageConfirmRemoveMediaLocation": "למחוק את מיקום זה?", "MessageConfirmRevokeApiKey": "לבטל את מפתח ה-API הזה? החיבור של אפליקציות לשרת זה יסתיימו באופן פתאומי.", - "MessageDirectoryPickerBSDInstruction": "עבור BSD, עליך להגדיר אחסון בתוך 'FreeNAS Jail' שלך כדי שג'ליפין יוכל לגשת למדיה שלך.", + "MessageDirectoryPickerBSDInstruction": "עבור BSD, עליך להגדיר אחסון בתוך 'FreeNAS Jail' שלך כדי ש-Jellyfin יוכל לגשת למדיה שלך.", "MessageDirectoryPickerLinuxInstruction": "עבור לינוקס על Arch Linux, CentOS, Debian, Fedora, openSUSE, או Ubuntu, יש לתת למשתמש השירות גישת קריאה למקומות האחסון לכל הפחות.", "MessageForgotPasswordFileCreated": "הקובץ הבא נוצר בשרת שלך ומסביר כיצד להמשיך", "MessageNoItemsAvailable": "אין פריטים זמינים כעת.", @@ -1630,7 +1630,7 @@ "PlaybackError.ASS_RENDER_ERROR": "אירעה שגיאה בעיבוד כתוביות ASS/SSA.", "PlayNext": "נגן את הבא", "PlaybackErrorNoCompatibleStream": "הלקוח אינו תואם למדיה והשרת לא שולח מדיה בפורמט תואם.", - "PlaybackErrorPlaceHolder": "זהו ממלא מקום עבור מדיה פיזית שג'ליפין לא יכול לנגן. יש להכניס את הדיסק כדי לנגן.", + "PlaybackErrorPlaceHolder": "זהו ממלא מקום עבור מדיה פיזית ש-Jellyfin לא יכול לנגן. יש להכניס את הדיסק כדי לנגן.", "PlayNextEpisodeAutomatically": "נגן את הפרק הבא אוטומטית", "PleaseAddAtLeastOneFolder": "נא להוסיף לפחות תיקייה אחת לספרייה זו על ידי לחיצה על הכפתור '+' באיזור 'תיקיות'.", "PleaseConfirmRepositoryInstallation": "נא ללחוץ אוקיי כדי לאשר שקראת וברצונך להמשיך בהתקנת רפוזיטורי התוספים.", @@ -1757,21 +1757,21 @@ "Up": "למעלה", "UseCustomTagDelimitersHelp": "פיצול תגי אומן/ז'אנר באמצעות תווים מוגדרים אישית.", "UseDoubleRateDeinterlacingHelp": "הגדרה זו משתמשת בקצב השדה בעת deinterlacing, לרוב נקראת גם bob deinterlacing, אשר מכפילה את קצב הפריימים של הוידיאו כדי לספק תנועה מלאה כמו בצפייה בוידיאו השזור בטלוויזיה.", - "UnsupportedPlayback": "ג'ליפין לא יכול לפענח תוכן המוגן על ידי DRM אבל ינסה לפענח את כל התוכן למרות זאת, כולל כותרות מוגנות. חלק מהקבצים עלולים להיראות שחורים לגמרי בגלל ההצפנה או תכונות לא נתמכות אחרות, למשל כותרות אינטראקטיביות.", + "UnsupportedPlayback": "Jellyfin לא יכול לפענח תוכן המוגן על ידי DRM אבל ינסה לפענח את כל התוכן למרות זאת, כולל כותרות מוגנות. חלק מהקבצים עלולים להיראות שחורים לגמרי בגלל ההצפנה או תכונות לא נתמכות אחרות, למשל כותרות אינטראקטיביות.", "UseCustomTagDelimiters": "שימוש במפריד תגים מוגדר אישית", "Studio": "סטודיו", "Print": "הדפסה", "UserMenu": "תפריט משתמש", "UserAgentHelp": "ניתן לספק שדה 'User-Agent' מוגדר אישית.", - "UserProfilesIntro": "ג'ליפין כולל תמיכה בפרופילי משתמש עם הגדרות צפייה, מצב ניגון, ובקרת הורים לכל אחד.", + "UserProfilesIntro": "Jellyfin כולל תמיכה בפרופילי משתמש עם הגדרות צפייה, מצב ניגון ובקרת הורים לכל אחד.", "ValueSeconds": "{0} שניות", "ValueTimeLimitMultiHour": "הגבלת זמן: {0} שעות", "ValueTimeLimitSingleHour": "הגבלת זמן: שעה אחת", "VideoAudio": "שמע הוידיאו", "WeeklyAt": "{0}ים ב-{1}", - "WriteAccessRequired": "ג'ליפין דורש הרשאות כתיבה לתיקייה זו. נא לוודא הרשאת כתיבה ולנסות שוב.", + "WriteAccessRequired": "Jellyfin דורש הרשאות כתיבה לתיקייה זו. נא לוודא הרשאת כתיבה ולנסות שוב.", "Whitelist": "מותרים", - "WizardCompleted": "זה כל מה שצריך לעכשיו. ג'ליפין התחיל לאסוף מידע על ספריית המדיה שלך. מומלץ לבדוק את האפליקציות שלנו, ואז ללחוץ סיום כדי לראות את לוח המחוונים.", + "WizardCompleted": "זה כל מה שצריך לעכשיו. Jellyfin התחיל לאסוף מידע על ספריית המדיה שלך. מומלץ לבדוק את האפליקציות שלנו ואז ללחוץ סיום כדי לראות את לוח המחוונים.", "XmlTvMovieCategoriesHelp": "תוכניות בקטגוריות אלה יוצגו כסרטים. יש להפריד ערכים עם '|'.", "LabelFallbackFontPath": "נתיב תיקיית גופן לגיבוי", "Watched": "נצפה", @@ -1779,7 +1779,7 @@ "XmlTvKidsCategoriesHelp": "תוכניות בקטגוריות אלה יוצגו כתוכניות לילדים. יש להפריד ערכים עם '|'.", "ViewAlbumArtist": "צפייה באומן האלבום", "ViewLyrics": "צפייה במילות השיר", - "XmlTvPathHelp": "נתיב לקובץ XMLTV. ג'ליפין יקרא קובץ זה ויבדוק עדכונים מדי פעם. באחריותך ליצור ולעדכן את הקובץ.", + "XmlTvPathHelp": "נתיב לקובץ XMLTV. שרת ה-Jellyfin יקרא קובץ זה ויבדוק עדכונים מדי פעם. באחריותך ליצור ולעדכן את הקובץ.", "XmlTvNewsCategoriesHelp": "תוכניות בקטגוריות אלה יוצגו כתוכניות של חדשות. יש להפריד ערכים עם '|'.", "HeaderSelectFallbackFontPath": "בחירת נתיב תיקיית גופן לגיבוי", "HeaderSelectFallbackFontPathHelp": "חיפוש או הכנסת נתיב לתיקיית גופן גיבוי עבור רינדור כתוביות ASS/SSA.", @@ -1791,7 +1791,7 @@ "AspectRatioFill": "מתיחה", "Remuxing": "רימיקס", "YoutubeDenied": "לא ניתן לנגן את הוידיאו המבוקש בנגנים מוטמעים.", - "MessageChromecastConnectionError": "מתאם Google Cast שלך לא הצליח להתחבר לשרת ג'ליפין. נא לבדוק את החיבור ולנסות שוב.", + "MessageChromecastConnectionError": "מתאם ה-Google Cast שלך לא הצליח להתחבר לשרת ה-Jellyfin. נא לבדוק את החיבור ולנסות שוב.", "MessagePlaybackError": "אירעה שגיאה בניגון הקובץ הזה דרך Google Cast.", "EnableEnhancedNvdecDecoder": "הפעלת מפענח NVDEC משופר", "RefFramesNotSupported": "מסגרות ייחוס אינן נתמכות", @@ -1821,7 +1821,7 @@ "YoutubeBadRequest": "בקשה שגויה.", "Featurette": "סרט קצר", "Short": "סרטון", - "EncodingFormatHelp": "בחירת קידוד הוידיאו שג'ליפין יקודד אליו. ג'ליפין ישתמש בקידוד תוכנה אם אין האצת חומרה לפורנט הנבחר. קידוד H264 תמיד מאופשר.", + "EncodingFormatHelp": "בחירת קידוד הוידאו ש-Jellyfin יקודד אליו. Jellyfin ישתמש בקידוד תוכנה אם אין האצת חומרה לפורמט הנבחר. קידוד H264 תמיד מאופשר.", "AudioIsExternal": "זרם השמע הוא חיצוני", "UnknownAudioStreamInfo": "מידע הזרמת השמע אינו ידוע", "DirectPlayError": "אירעה שגיאה בהפעלת ניגון ישיר", @@ -1994,5 +1994,8 @@ "Success": "הצלחה", "MessageRestoreInProgress": "מתבצע שחזור", "MessageRestoreSuccess": "השחזור הושלם בהצלחה", - "LiveTVPageLoadError": "נכשל בטעינת דף ההקלטות" + "LiveTVPageLoadError": "נכשל בטעינת דף ההקלטות", + "HeaderServerMismatch": "שרת לא מתאים", + "ConnectAnyway": "התחבר בכל זאת", + "MessageServerMismatch": "השרת שאתה מתחבר אליו כעת אינו אותו השרת שהתחברת אליו בעבר באמצעות כתובת זו. אם הדבר צפוי לך, אנא בחר \"התחבר בכל זאת\". אחרת, החיבור שלך לשרת עשוי להיות מנוצל לרעה." } From d0bf67a5a5797f550fcd01a1622c153154a1993d Mon Sep 17 00:00:00 2001 From: Vittat Date: Fri, 4 Jul 2025 09:19:02 -0400 Subject: [PATCH 622/645] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/es.json b/src/strings/es.json index e452cf109..b46158b3f 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -2037,7 +2037,7 @@ "HeaderBackupsHelp": "Crea y restaura instantáneas de tu servidor, que pueden incluir la base de datos, los metadatos, los subtítulos y el trickplay.", "LabelBackupsUnavailable": "No hay respaldos disponibles", "LabelDatabase": "Base de datos", - "BackupsPageLoadError": "Fallo al cargar la página de respaldos de datos", + "BackupsPageLoadError": "Fallo al cargar la página de copia de seguridad", "ButtonCreateBackup": "Crear respaldo de datos", "LabelRestore": "Restaurar", "ConfirmDeleteRepository": "Eliminar repositorio?", From bc5f83b0f77315a295fe3ee18ec66de034a5940c Mon Sep 17 00:00:00 2001 From: Vittat Date: Fri, 4 Jul 2025 17:25:10 -0400 Subject: [PATCH 623/645] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/strings/es.json b/src/strings/es.json index b46158b3f..5b966b7cf 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -2034,11 +2034,11 @@ "MessageForgotPasswordPinReset": "Introducir PIN aquí para terminar el restablecimiento de contraseña", "ButtonLearnMore": "Saber Más", "Create": "Crear", - "HeaderBackupsHelp": "Crea y restaura instantáneas de tu servidor, que pueden incluir la base de datos, los metadatos, los subtítulos y el trickplay.", - "LabelBackupsUnavailable": "No hay respaldos disponibles", + "HeaderBackupsHelp": "Crea y restaura copias de seguridad de tu servidor, que pueden incluir la base de datos, los metadatos, los subtítulos y el trickplay.", + "LabelBackupsUnavailable": "No hay copias de seguridad disponibles", "LabelDatabase": "Base de datos", - "BackupsPageLoadError": "Fallo al cargar la página de copia de seguridad", - "ButtonCreateBackup": "Crear respaldo de datos", + "BackupsPageLoadError": "Fallo al cargar la página de copias de seguridad", + "ButtonCreateBackup": "Crear copia de seguridad", "LabelRestore": "Restaurar", "ConfirmDeleteRepository": "Eliminar repositorio?", "DeleteRepositoryConfirmation": "Estás seguro que quieres eliminar este repositorio?", @@ -2057,7 +2057,7 @@ "StorageType.NoRootDirectory": "Directorio raíz no encontrado", "StorageType.Unknown": "Desconocido", "Success": "Operación exitosa", - "HeaderBackups": "Respaldos de datos", + "HeaderBackups": "Copias de seguridad", "TranscodingLoadError": "Error al cargar la configuración de transcodificación", "MessageRestoreDisclaimer": "ADVERTENCIA: Estás a punto de restaurar un respaldo de datos anterior. Tu servidor quedará inoperativo durante el proceso y se perderán todos los datos nuevos creados desde la fecha de esa copia.", "MessageRestoreInProgress": "Restauración en progreso", From 848562716f43a96f27d25b48299293300549ae5d Mon Sep 17 00:00:00 2001 From: Akshat Shukla Date: Fri, 4 Jul 2025 17:17:54 -0400 Subject: [PATCH 624/645] Translated using Weblate (Hindi) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hi/ --- src/strings/hi-in.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/strings/hi-in.json b/src/strings/hi-in.json index 1c4082bcf..826a23114 100644 --- a/src/strings/hi-in.json +++ b/src/strings/hi-in.json @@ -215,5 +215,9 @@ "Conductor": "कंडक्टर", "ConfigureDateAdded": "डैशबोर्ड > लाइब्रेरीज़ > डिस्प्ले में 'जोड़ी गई तिथि' के लिए मेटाडेटा निर्धारित करने का तरीका सेट करें", "ConfirmDeleteImage": "छवि हटाएँ?", - "CopyFailed": "कॉपी नहीं किया जा सका" + "CopyFailed": "कॉपी नहीं किया जा सका", + "BehindTheScenes": "पर्दे के पीछे", + "MachineTranslated": "मशीन द्वारा अनुवादित", + "Unknown": "अज्ञात", + "AiTranslated": "AI (ऐ. आई.) द्वारा अनुतवादि" } From 87d2274ce85f1c6003f281f901a258be5193f665 Mon Sep 17 00:00:00 2001 From: Vittat Date: Sat, 5 Jul 2025 04:55:40 -0400 Subject: [PATCH 625/645] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/es.json b/src/strings/es.json index 5b966b7cf..776dc70ac 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -2056,10 +2056,10 @@ "StorageType.Ram": "RAM", "StorageType.NoRootDirectory": "Directorio raíz no encontrado", "StorageType.Unknown": "Desconocido", - "Success": "Operación exitosa", + "Success": "Se ha completado correctamente", "HeaderBackups": "Copias de seguridad", "TranscodingLoadError": "Error al cargar la configuración de transcodificación", - "MessageRestoreDisclaimer": "ADVERTENCIA: Estás a punto de restaurar un respaldo de datos anterior. Tu servidor quedará inoperativo durante el proceso y se perderán todos los datos nuevos creados desde la fecha de esa copia.", + "MessageRestoreDisclaimer": "ADVERTENCIA: Estás a punto de restaurar una copia de seguridad anterior. Tu servidor quedará inoperativo durante el proceso y se perderán todos los datos nuevos creados desde la fecha de esa copia.", "MessageRestoreInProgress": "Restauración en progreso", "MessageWaitingForServer": "Esperando al servidor..." } From 1fabd707118f803a9e072779a00a7324203fb921 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnau=20Galofr=C3=A9?= Date: Sat, 5 Jul 2025 12:18:24 -0400 Subject: [PATCH 626/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 364c1aff0..0c45c114c 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -384,7 +384,7 @@ "MessageConfirmProfileDeletion": "N'estàs segur d'eliminar aquest perfil?", "MessageConfirmRecordingCancellation": "N'esteu segur, que voleu cancel·lar l'enregistrament?", "MessageConfirmRestart": "N'esteu segur, que voleu reiniciar Jellyfin?", - "MessageContactAdminToResetPassword": "Contacteu amb l'administrador per a restablir la contrasenya.", + "MessageContactAdminToResetPassword": "Si us plau, contacta amb l'administrador del sistema per a reestablir la contrasenya.", "MessageDownloadQueued": "Descàrrega posada a la cua.", "MessageEnablingOptionLongerScans": "Habilitar aquesta opció pot resultar en escanejos significativament més lents de la mediateca.", "MessageItemSaved": "Element desat.", @@ -1028,9 +1028,9 @@ "MessageFileReadError": "S'ha produït un error en llegir el fitxer. Torneu-ho a provar.", "MessageDirectoryPickerLinuxInstruction": "Per a Linux amb Arch Linux, CentOS, Debian, Fedora, openSUSE, o Ubuntu, heu de concedir a l'usuari del servei com a mínim l'accés de lectura als llocs d'emmagatzematge.", "MessageDirectoryPickerBSDInstruction": "Per a BSD, caldrà tenir configurat l'emmagatzematge del \"FreeNAS Jail\" perquè permeti a Jellyfin accedir al contingut multimèdia.", - "MessageDeleteTaskTrigger": "N'esteu segur, que voleu eliminar aquest detonador de tasca?", - "MessageCreateAccountAt": "Crea un compte a {0}", - "MessageConfirmShutdown": "N'esteu segur, que voleu tancar el servidor?", + "MessageDeleteTaskTrigger": "N'estàs segur que vols eliminar aquest llençador de tasques?", + "MessageCreateAccountAt": "Crear un compte a {0}", + "MessageConfirmShutdown": "Segur que vols apagar el servidor?", "MessageConfirmRevokeApiKey": "N'esteu segur, de voler revocar aquesta clau d'API? La connexió de l'aplicació d'aquest servidor s'interromprà abruptament.", "MessageConfirmRemoveMediaLocation": "N'esteu segur, que voleu suprimir aquesta ubicació?", "MessageConfirmDeleteTunerDevice": "N'esteu segur, que voleu eliminar aquest dispositiu?", From 682cfe4d68598296798bf1d693a1aee68e7dc177 Mon Sep 17 00:00:00 2001 From: nextlooper42 Date: Sun, 6 Jul 2025 06:33:19 -0400 Subject: [PATCH 627/645] Translated using Weblate (Slovak) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/sk/ --- src/strings/sk.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/sk.json b/src/strings/sk.json index f2b8a462d..6f813c26b 100644 --- a/src/strings/sk.json +++ b/src/strings/sk.json @@ -2062,5 +2062,8 @@ "PluginsLoadError": "Pri načítavaní zásuvných modulov došlo k chybe.", "RepositoriesPageLoadError": "Nepodarilo sa načítať repozitáre", "TranscodingLoadError": "Nepodarilo sa načítať nastavenia prekódovania", - "LiveTVPageLoadError": "Nepodarilo sa načítať stránku s nahrávkami" + "LiveTVPageLoadError": "Nepodarilo sa načítať stránku s nahrávkami", + "ConnectAnyway": "Napriek tomu pripojiť", + "HeaderServerMismatch": "Nesúlad so serverom", + "MessageServerMismatch": "Server, ku ktorému sa pripájate, nie je ten istý server, ku ktorému ste sa predtým pripojili na tejto adrese. Ak je to očakávané, vyberte možnosť „Napriek tomu pripojiť“. V opačnom prípade môže byť vaše pripojenie alebo server kompromitované." } From 7269f5af7d2242ccf9abccd8256db02c4ee03a8e Mon Sep 17 00:00:00 2001 From: MrPlow Date: Mon, 7 Jul 2025 02:39:13 -0400 Subject: [PATCH 628/645] Translated using Weblate (German) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/de/ --- src/strings/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings/de.json b/src/strings/de.json index 2e7caf8c6..427c2833b 100644 --- a/src/strings/de.json +++ b/src/strings/de.json @@ -2065,5 +2065,5 @@ "LiveTVPageLoadError": "Aufzeichnungsseite konnte nicht geladen werden", "MessageServerMismatch": "Der Server mit dem Du dich verbindest, ist nicht der selbe, wie der, mit dem Du zuletzt unter dieser Adresse verbunden warst. Wenn das so sein soll, wähle \"Trotzdem verbinden\". Ansonsten könnte es sein, dass Deine Verbindung oder der Server kompromittiert wurde.", "ConnectAnyway": "Trotzdem verbinden", - "HeaderServerMismatch": "Server stimmen nicht überein" + "HeaderServerMismatch": "Server nicht übereinstimmend" } From e8f0211883aa7db8c7c561d0763235db7b67c18e Mon Sep 17 00:00:00 2001 From: Tal Sarid Date: Mon, 7 Jul 2025 02:25:16 -0400 Subject: [PATCH 629/645] Translated using Weblate (Hebrew) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/he/ --- src/strings/he.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/he.json b/src/strings/he.json index be8a61365..4cf43afda 100644 --- a/src/strings/he.json +++ b/src/strings/he.json @@ -1538,7 +1538,7 @@ "MessagePluginInstalled": "התוסף הותקן בהצלחה. יש לרסט את השרת כדי שהשינויים ייכנסו לתוקף.", "MessageSyncPlayIsDisabled": "צפייה מסונכרנת דורשת הרשאות.", "MessageSent": "ההודעה נשלחה.", - "MessageSplitVersionsError": "אירגע שגיאה במהלך פיצול גרסאות", + "MessageSplitVersionsError": "אירעה שגיאה במהלך פיצול גרסאות", "MoreMediaInfo": "מידע המדיה", "NoLyricsSearchResultsFound": "לא נמצאו מילים לשיר.", "MessageSyncPlayErrorNoActivePlayer": "לא נמצא נגן פעיל. הצפייה המסונכרנת הושבתה.", @@ -1997,5 +1997,5 @@ "LiveTVPageLoadError": "נכשל בטעינת דף ההקלטות", "HeaderServerMismatch": "שרת לא מתאים", "ConnectAnyway": "התחבר בכל זאת", - "MessageServerMismatch": "השרת שאתה מתחבר אליו כעת אינו אותו השרת שהתחברת אליו בעבר באמצעות כתובת זו. אם הדבר צפוי לך, אנא בחר \"התחבר בכל זאת\". אחרת, החיבור שלך לשרת עשוי להיות מנוצל לרעה." + "MessageServerMismatch": "השרת שהתחברת אליו כעת אינו אותו השרת שהתחברת אליו בעבר באמצעות כתובת זו. אם הדבר צפוי לך, נא לבחור \"התחבר בכל זאת\". אחרת, החיבור שלך לשרת עשוי להיות מנוצל לרעה." } From 5662ca1c17de19b8ccbecdf4bc662c56702c3320 Mon Sep 17 00:00:00 2001 From: Francesco Lo Faro Date: Mon, 7 Jul 2025 06:12:47 -0400 Subject: [PATCH 630/645] Translated using Weblate (Italian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/it/ --- src/strings/it.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/it.json b/src/strings/it.json index 581a78a0a..8ac4a95fd 100644 --- a/src/strings/it.json +++ b/src/strings/it.json @@ -2062,5 +2062,8 @@ "LabelRestore": "Ripristina", "MessageRestoreInProgress": "Ripristino in corso", "LabelImageCache": "Cache delle immagini", - "LabelProgramData": "Dati del programma" + "LabelProgramData": "Dati del programma", + "ConnectAnyway": "Connetti Comunque", + "HeaderServerMismatch": "I Server Non Combaciano", + "MessageServerMismatch": "Il server al quale ti stai connettendo non è lo stesso server a cui ti sei connesso in precedenza a questo indirizzo. Se questo era previsto, per favore seleziona \"Connetti Comunque\". Altrimenti, la tua connessione o il server potrebbe essere compromesso." } From 58a6bbe01681327f25c7f8aa662536d986faa8a1 Mon Sep 17 00:00:00 2001 From: MrOscarvs Date: Mon, 7 Jul 2025 08:38:24 -0400 Subject: [PATCH 631/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 0c45c114c..7bafca558 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -2058,5 +2058,6 @@ "TranscodingLoadError": "No s'han pogut carregar els paràmetres de transcodificació", "ConfirmDeleteRepository": "Desitgeu eliminar el repositori?", "DeleteRepositoryConfirmation": "N'esteu segur, de voler esborrar aquest repositori?", - "LiveTVPageLoadError": "La càrrega de la pàgina de gravacions ha fallat" + "LiveTVPageLoadError": "La càrrega de la pàgina de gravacions ha fallat", + "ConnectAnyway": "Connectar de totes maneres" } From 2986a4057565f2a8620326b5ad4d5df2f18b646a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aindri=C3=BA=20Mac=20Giolla=20Eoin?= Date: Mon, 7 Jul 2025 10:11:46 -0400 Subject: [PATCH 632/645] Translated using Weblate (Irish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ga/ --- src/strings/ga.json | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/strings/ga.json b/src/strings/ga.json index 00b83ca66..f652c2a9a 100644 --- a/src/strings/ga.json +++ b/src/strings/ga.json @@ -599,7 +599,7 @@ "Rewind": "Athchasadh", "MessageConfirmRestart": "An bhfuil tú cinnte gur mian leat Jellyfin a atosú?", "MessageConfirmRevokeApiKey": "An bhfuil tú cinnte gur mian leat an eochair API seo a chúlghairm? Cuirfear deireadh tobann le nasc an fheidhmchláir leis an bhfreastalaí seo.", - "MessageConfirmShutdown": "An bhfuil tú cinnte gur mian leat an freastalaí a mhúchadh?", + "MessageConfirmShutdown": "An bhfuil tú cinnte gur mian leat an freastalaí a dhúnadh?", "MessageContactAdminToResetPassword": "Téigh i dteagmháil le do riarthóir córais chun do phasfhocal a athshocrú.", "MessageCreateAccountAt": "Cruthaigh cuntas ag {0}", "MessageDeleteTaskTrigger": "An bhfuil tú cinnte gur mian leat an truicear tasc seo a scriosadh?", @@ -1376,7 +1376,7 @@ "HeaderEnabledFieldsHelp": "Díthiceáil réimse chun é a ghlasáil agus cosc a chur ar a chuid sonraí a athrú.", "ConfirmDeleteSeries": "Má scriostar an tsraith seo, scriosfar GACH eipeasóid {0} ón gcóras comhad agus ó do leabharlann meán araon. An bhfuil tú cinnte gur mian leat leanúint ar aghaidh?", "ConfirmDeleteItems": "Má scriostar na míreanna seo, scriosfar iad ón gcóras comhad agus ó do leabharlann meán araon. An bhfuil tú cinnte gur mian leat leanúint ar aghaidh?", - "ConfirmEndPlayerSession": "Ar mhaith leat Jellyfin a mhúchadh ar {0}?", + "ConfirmEndPlayerSession": "Ar mhaith leat Jellyfin a dhúnadh síos ar {0}?", "Console": "Consól", "Continuing": "Ag leanúint ar aghaidh", "HeaderError": "Earráid", @@ -1832,7 +1832,7 @@ "LabelGroupShowsIntoCollections": "Taispeántais ghrúpa i mbailiúcháin", "LimitSegmentLength": "Úsáid codanna HLS níos giorra", "LimitSegmentLengthHelp": "D’fhéadfadh sé go gcuideodh cumasú an rogha seo le cosc a chur ar an seinnteoir HLS dul i bhfostú le linn cuardaigh ar ghléasanna áirithe, amhail teilifíseáin webOS.", - "Retry": "Bain triail eile as", + "Retry": "Déan iarracht arís", "RetryWithGlobalSearch": "Déan iarracht eile le cuardach domhanda", "ViewSettings": "Féach ar shocruithe", "CustomSplashScreenSize": "Ba chóir go mbeadh íomhánna saincheaptha i gcóimheas gné 16x9 agus méid íosta 1920x1080.", @@ -1873,5 +1873,9 @@ "TranscodingLoadError": "Theip ar shocruithe traschódaithe a lódáil", "BackupsPageLoadError": "Theip ar an leathanach cúltaca a lódáil", "ButtonCreateBackup": "Cruthaigh Cúltaca", - "ConfirmDeleteRepository": "Scrios an stórlann?" + "ConfirmDeleteRepository": "Scrios an stórlann?", + "LiveTVPageLoadError": "Theip ar an leathanach taifeadtaí a lódáil", + "ConnectAnyway": "Ceangail Ar Aon Slí", + "HeaderServerMismatch": "Mí-chomhoiriúnacht Freastalaí", + "MessageServerMismatch": "Ní hé an freastalaí atá tú ag ceangal leis an bhfreastalaí céanna a raibh tú ceangailte leis roimhe seo ag an seoladh seo. Más rud é go bhfuiltear ag súil leis seo, roghnaigh \"Ceangail ar aon nós\". Seachas sin, d'fhéadfadh do nasc nó an freastalaí a bheith i mbaol." } From 11c0ab768cb4a839abab744137659cf221ab3077 Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Mon, 7 Jul 2025 15:42:43 -0400 Subject: [PATCH 633/645] Translated using Weblate (Croatian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hr/ --- src/strings/hr.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/strings/hr.json b/src/strings/hr.json index 04e7bcef7..1f3693399 100644 --- a/src/strings/hr.json +++ b/src/strings/hr.json @@ -2,7 +2,7 @@ "Actor": "Glumac", "Add": "Dodaj", "AddToCollection": "Dodaj u kolekciju", - "AddToPlaylist": "Dodaj popisu za reprodukciju", + "AddToPlaylist": "Dodaj u popis za reprodukciju", "AdditionalNotificationServices": "Pretražite katalog dodataka kako bi instalirali dodatne servise za obavijesti.", "AllChannels": "Svi kanali", "AllEpisodes": "Sve epizode", @@ -276,7 +276,7 @@ "LabelAlbumArtists": "Izvođači albuma", "LabelAllowHWTranscoding": "Dopusti hardversko konvertiranje", "LabelAppName": "Ime aplikacije", - "LabelAppNameExample": "Primjer: Sickbeard, Sonarr", + "LabelAppNameExample": "Ime za identifikaciju API ključeva koje ljudi mogu pročitati. Ova postavka neće utjecati na funkcionalnost.", "LabelArtists": "Izvođači", "LabelArtistsHelp": "Odvoji višestruke izvođače sa ; (točka sa zarezom).", "LabelAudioLanguagePreference": "Postavke audio jezika", @@ -1458,7 +1458,7 @@ "LabelKodiMetadataUserHelp": "Spremite podatke o gledanju u NFO datoteke za potrebe drugih primjena.", "LabelParentNumber": "Broj roditelja", "LabelTonemappingPeak": "Vrh tonskog preslikavanja", - "LabelPublishedServerUriHelp": "Zaobiđi URI koji koristi Jellyfin, na osnovu sučelja ili klijentske IP adrese.", + "LabelPublishedServerUriHelp": "Zaobiđi URI koji koristi Jellyfin, na osnovu sučelja ili klijentske IP adrese. Na primjer: internal=http://jellyfin.example.com, external=https://jellyfin.example.com ili all=https://jellyfin.example.com", "UseEpisodeImagesInNextUpHelp": "Odjeljci 'Sljedeće' i 'Nastavi s gledanjem' koristit će slike epizoda kao minijature umjesto primarne minijature emisije.", "PreferEmbeddedTitlesOverFileNamesHelp": "Odredite naslov prikaza koji će se koristiti kada nisu dostupni internetski metapodaci ili lokalni metapodaci.", "SubtitleAppearanceSettingsDisclaimer": "Sljedeće postavke ne odnose se na gore navedene grafičke titlove ili ASS/SSA titlove koji imaju vlastite stilove.", From 2afb355fd11ed5e2c39af7d5c6d9d609f6cd86d1 Mon Sep 17 00:00:00 2001 From: Acrotos Date: Mon, 7 Jul 2025 14:43:57 -0400 Subject: [PATCH 634/645] Translated using Weblate (Romanian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ro/ --- src/strings/ro.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/ro.json b/src/strings/ro.json index 9400d154a..29115ce5d 100644 --- a/src/strings/ro.json +++ b/src/strings/ro.json @@ -2062,5 +2062,8 @@ "BackupsPageLoadError": "A eșuat să încarce pagina de copii de rezervă", "ButtonCreateBackup": "Crează copie de rezervă", "LabelImageCache": "Cache imagine", - "LiveTVPageLoadError": "Nu s-a putut incarca pagina de înregistrari" + "LiveTVPageLoadError": "Nu s-a putut incarca pagina de înregistrari", + "MessageServerMismatch": "Serverul la care va conectati nu este acelasi server la care v-ati conectat anterior la aceasta adresa. Daca acest lucru este de asteptat, va rugam sa selectati \"Conectati oricum\". In caz contrar, conexiunea sau serverul ar putea fi compromise.", + "ConnectAnyway": "Conecteaza Oricum", + "HeaderServerMismatch": "Serverul nu corespunde" } From 21e2339eb49d645b9cea476c5ba89ed32eb2266d Mon Sep 17 00:00:00 2001 From: Oatavandi Date: Mon, 7 Jul 2025 22:02:16 -0400 Subject: [PATCH 635/645] Translated using Weblate (Tamil) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ta/ --- src/strings/ta.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/strings/ta.json b/src/strings/ta.json index 52a898b42..fa1152cac 100644 --- a/src/strings/ta.json +++ b/src/strings/ta.json @@ -2071,5 +2071,8 @@ "LabelImageCache": "பட தற்காலிக சேமிப்பு", "LabelInstalled": "நிறுவப்பட்டது", "LabelNotInstalled": "நிறுவப்படவில்லை", - "LastActive": "கடைசியாகச் செயல்பட்டது" + "LastActive": "கடைசியாகச் செயல்பட்டது", + "ConnectAnyway": "எப்படியும் இணை", + "HeaderServerMismatch": "சேவையகம் பொருந்தவில்லை", + "MessageServerMismatch": "நீங்கள் இணைக்கும் சேவையகம், இந்த முகவரியில் நீங்கள் முன்பு இணைத்த அதே சேவையகம் அல்ல. இது எதிர்பார்க்கப்பட்டால், தயவுசெய்து \"எப்படியும் இணை\" என்பதைத் தேர்ந்தெடுக்கவும். இல்லையெனில், உங்கள் இணைப்பு அல்லது சேவையகம் பாதிக்கப்படலாம்." } From a8bfe22534d2be5bc4069870c4aef4a4a2156220 Mon Sep 17 00:00:00 2001 From: Wregaan Date: Tue, 8 Jul 2025 05:23:18 -0400 Subject: [PATCH 636/645] Translated using Weblate (Hungarian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/hu/ --- src/strings/hu.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/strings/hu.json b/src/strings/hu.json index 30805ad47..2e17b9499 100644 --- a/src/strings/hu.json +++ b/src/strings/hu.json @@ -492,7 +492,7 @@ "ColorSpace": "Színtér", "ColorTransfer": "Színátvitel", "Composer": "Zeneszerző", - "ConfigureDateAdded": "Állítsa be az Irányítópult > Médiatárak > Megjelenítés menüpontban, hogy a „Hozzáadás dátuma” metaadat hogyan legyen meghatározva.", + "ConfigureDateAdded": "Állítsa be az Irányítópult > Médiatárak > Megjelenítés menüpontban, hogy a „Hozzáadás dátuma” metaadat hogyan legyen meghatározva", "ConfirmDeleteImage": "Kép törlése?", "ConfirmDeleteItem": "Az elem törlésével az törlődni fog a fájlrendszerből és a médiakönyvtárból is. Biztosan folytatni akarod?", "ConfirmDeleteItems": "Az elemek törlésével azok törlődni fognak a fájlrendszerből és a médiakönyvtárból is. Biztosan folytatni akarod?", @@ -2057,5 +2057,8 @@ "MessageRestoreDisclaimer": "FIGYELEM: Ön egy korábbi mentés visszaállítására készül. A művelet alatt a szerver nem lesz használható, és a mentés óta létrehozott minden új adat elvész.", "RepositoriesPageLoadError": "Tárolók betöltése sikertelen", "LabelProgramData": "Alkalmazás adatai", - "LabelImageCache": "Képgyorsítótár" + "LabelImageCache": "Képgyorsítótár", + "ConnectAnyway": "Kapcsolódás mindenképp", + "HeaderServerMismatch": "Szerver eltérés", + "MessageServerMismatch": "A szerver melyre most próbál csatlakozni, nem egyezik meg az előző szerverrel mely ezen a címen volt található. Ha ez várható volt, kattintson a \"Kapcsolódás mindenképp\" gombra. Ellenkező esetben a szerver elérése kompromittálódott." } From 6d70ec2af03c167a030f82de98e82b7c860f90ef Mon Sep 17 00:00:00 2001 From: Gargotaire Date: Tue, 8 Jul 2025 14:44:22 -0400 Subject: [PATCH 637/645] Translated using Weblate (Catalan) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/ca/ --- src/strings/ca.json | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/strings/ca.json b/src/strings/ca.json index 7bafca558..2448bf84d 100644 --- a/src/strings/ca.json +++ b/src/strings/ca.json @@ -124,7 +124,7 @@ "HeaderEasyPinCode": "Codi PIN Senzill", "HeaderEditImages": "Edició d'imatges", "HeaderEnabledFields": "Camps habilitats", - "HeaderExternalIds": "IDs externs", + "HeaderExternalIds": "ID externs", "HeaderFeatureAccess": "Accés a funcions", "HeaderFetchImages": "Explora imatges", "HeaderFrequentlyPlayed": "Reproduït freqüentment", @@ -227,7 +227,7 @@ "LabelCriticRating": "Valoració de la crítica", "LabelCurrentPassword": "Contrasenya actual", "LabelCustomCss": "Codi CSS propi", - "LabelCustomCssHelp": "Apliqueu els vostres propi codi CSS personalitzat per al tema/marca a la interfície web.", + "LabelCustomCssHelp": "Apliqueu el vostre propi codi CSS personalitzat per al tema/marca a la interfície web.", "LabelDashboardTheme": "Tema del tauler de control del servidor", "LabelDateAdded": "Data afegit", "LabelDay": "Dia de la setmana", @@ -729,7 +729,7 @@ "DirectStreaming": "Transmissió directa", "DirectStreamHelp2": "La potència consumida per la transmissió directa normalment depèn del perfil d'àudio. Només el flux de vídeo no té pèrdues.", "DirectPlaying": "Reproducció directe", - "DetectingDevices": "S'està detectant dispositius", + "DetectingDevices": "S'estan detectant dispositius", "Descending": "Descendent", "DeleteUserConfirmation": "N'esteu segur, que voleu eliminar aquest usuari?", "DeleteDeviceConfirmation": "N'esteu segur, que voleu suprimir aquest dispositiu? Tornarà a aparèixer la pròxima vegada que un usuari iniciï la sessió amb aquest.", @@ -900,7 +900,7 @@ "UseDoubleRateDeinterlacingHelp": "Aquesta configuració fa servir la velocitat de camp quan en desentrellaçar, sovint referit com el desentrellaçat bob, que duplica la taxa de fotogrames de vídeo per a proporcionar un moviment continu com el que es veu en mirar un vídeo entrellaçat en un televisor.", "UseDoubleRateDeinterlacing": "El doble de fotogrames per segon en entrellaçar", "Upload": "Puja", - "UnsupportedPlayback": "Jellyfin no pot desxifrar el contingut protegit per DRM, però tot el contingut serà tractat independentment, incloent títols protegits. Alguns fitxers poden aparèixer completament negres degut al xifrat o altres característiques no compatibles, com ara títols interactius.", + "UnsupportedPlayback": "Jellyfin no pot desxifrar el contingut protegit per DRM, però tot el contingut serà tractat independentment, incloent-hi títols protegits. Alguns fitxers poden aparèixer completament negres degut al xifrat o altres característiques no compatibles, com ara títols interactius.", "Unplayed": "No reproduït", "Uniform": "Uniforme", "TvLibraryHelp": "Revisa la {0}guia de noms de la programació de televisió{1}.", @@ -983,7 +983,7 @@ "Movie": "Pel·lícula", "MoreMediaInfo": "Informació multimèdia", "MillisecondsUnit": "ms", - "MetadataSettingChangeHelp": "Canviar la configuració de les metadades afectarà al nou contingut afegit a partir d'ara. Per s actualitzar el contingut existent, obriu la pantalla de detalls i feu clic al botó \"Actualitza\" o actualitzeu-lo utilitzant el \"Gestor de metadades\".", + "MetadataSettingChangeHelp": "Canviar la configuració de les metadades afectarà el nou contingut afegit a partir d'ara. Per s actualitzar el contingut existent, obriu la pantalla de detalls i feu clic al botó \"Actualitza\" o actualitzeu-lo utilitzant el \"Gestor de metadades\".", "Metadata": "Metadades", "MessageUnsetContentHelp": "El contingut es mostrarà com a directoris simples. Per a obtenir els millors resultats feu servir el gestor de metadades per a establir els tipus de contingut dels subdirectoris.", "MessageUnableToConnectToServer": "No es pot connectar amb el servidor seleccionat en aquest moment. Assegureu-vos que estigui funcionant i torneu a intentar-ho.", @@ -1071,7 +1071,7 @@ "ListPaging": "{0} - {1} de {2}", "List": "Llista", "LeaveBlankToNotSetAPassword": "Podeu deixar aquest camp en blanc per a no establir cap contrasenya.", - "LearnHowYouCanContribute": "Aprengueu com hi podeu contribuir.", + "LearnHowYouCanContribute": "Apreneu com hi podeu contribuir.", "LastSeen": "Última activitat {0}", "Large": "Gran", "LanNetworksHelp": "Llista separada per comes d'adreces IP o IP/netmask que seran considerades part de la xarxa local a l'hora de fer complir les restriccions d'amplada de banda. Si s'estableix, totes les altres adreces IP es consideraran part de la xarxa externa i estaran subjectes a les restriccions d'amplada de banda externs. Si es deixa en blanc, només la subxarxa del servidor es considerarà part a la xarxa local.", @@ -1102,7 +1102,7 @@ "LabelTVHomeScreen": "Pantalla d'inici en mode televisió", "LabelTunerType": "Tipus de sintonitzador", "LabelTunerIpAddress": "Adreça IP del sintonitzador", - "LabelTranscodingThreadCountHelp": "Seleccioneu el nombre màxim de fils que pot utilitzar la transcodificació. La reducció del nombre de fils disminuirà l'ús de la CPU, però es possible que no transcodifiqui prou ràpid per a una reproducció fluïda.", + "LabelTranscodingThreadCountHelp": "Seleccioneu el nombre màxim de fils que pot utilitzar la transcodificació. La reducció del nombre de fils disminuirà l'ús de la CPU, però és possible que no transcodifiqui prou de pressa per a una reproducció fluïda.", "LabelTranscodingThreadCount": "Nombre de fils de la transcodificació", "LabelTranscodingProgress": "Progrés de la transcodificació", "LabelTranscodingFramerate": "Velocitat de transcodificació", @@ -1194,7 +1194,7 @@ "LabelProfileContainersHelp": "Separats per comes. Es pot deixar buit per aplicar a tots els contenidors.", "LabelProfileCodecsHelp": "Separats per comes. Es pot deixar buit per aplicar a tots els còdecs.", "LabelPostProcessorArgumentsHelp": "Fes servir {path} com a la ruta del fitxer d'enregistrament.", - "LabelPostProcessorArguments": "Arguments de la línia de comandes post-processador", + "LabelPostProcessorArguments": "Arguments de la línia d'ordres postprocessador", "LabelPostProcessor": "Aplicació de post-processament", "LabelPleaseRestart": "Els canvis tindran efecte després de tornar a carregar el client web manualment.", "LabelPlayMethod": "Mètode de reproducció", @@ -1206,7 +1206,7 @@ "LabelParentalRating": "Classificació parental", "LabelOptionalNetworkPathHelp": "Si aquesta carpeta es comparteix a la xarxa, el subministrament de la ruta del recurs compartit de xarxa pot permetre als clients accedir directament als fitxers dels continguts multimèdia des d'altres dispositius. Per exemple, {0} o {1}.", "LabelOptionalNetworkPath": "Directori de xarxa compartida", - "LabelOpenclDeviceHelp": "Aquest és el dispositiu OpenCL que s'utilitza pel mapatge de tons. El costat esquerra del punt és el número de la plataforma, la dreta és el número de dispositiu a la plataforma. El valor per defecte és 0,0. Es requereix que el fitxer de l'aplicació FFmpeg que conté el mètode d'acceleració de maquinari OpenCL.", + "LabelOpenclDeviceHelp": "Aquest és el dispositiu OpenCL que s'utilitza per al mapatge de tons. El costat esquerra del punt és el número de la plataforma, la dreta és el número de dispositiu a la plataforma. El valor per defecte és 0,0. Es requereix que el fitxer de l'aplicació FFmpeg que conté el mètode d'acceleració de maquinari OpenCL.", "LabelOpenclDevice": "Dispositiu OpenCL", "LabelNumberOfGuideDaysHelp": "Descarregar les dades de més dies de la guia ofereix la possibilitat de programar amb més antelació i veure més llistats, però també trigarà més temps a l'hora de descarregar. \"Auto\" triarà en funció del nombre de canals.", "LabelNewsCategories": "Categories de notícies", @@ -1237,7 +1237,7 @@ "LabelLibraryPageSizeHelp": "Estableix la quantitat d'elements a mostrar en una pàgina de la mediateca. Es posa a 0 per tal de desactivar la paginació.", "LabelLibraryPageSize": "Mida de la pàgina de la mediateca", "LabelLanNetworks": "Xarxes LAN", - "LabelKodiMetadataUserHelp": "Desa les dades de visionat en arxius NFO de manera que d'altres aplicacions les puguin fer servir.", + "LabelKodiMetadataUserHelp": "Desa les dades de visionament en arxius NFO de manera que d'altres aplicacions les puguin fer servir.", "LabelKodiMetadataUser": "Desa les dades de visualització d'usuari en fitxers NFO per a", "LabelKodiMetadataSaveImagePathsHelp": "Això està recomanat si teniu fitxers d'imatge que no s'ajusten a les directrius de Kodi.", "LabelKodiMetadataEnableExtraThumbsHelp": "Quan es descarreguin imatges, es poden guardar tant a \"extrafanart\" com a \"extrathumbs\" per a assegurar la màxima compatibilitat amb les aparences de Kodi.", @@ -1267,7 +1267,7 @@ "LabelFolder": "Directori", "LabelFileOrUrl": "Fitxer o URL", "LabelffmpegPath": "Ruta de FFmpeg", - "LabelExtractChaptersDuringLibraryScanHelp": "Genera imatges de capítols quan els vídeos són importats durant l'escaneig de la mediateca. Desmarcant, les imatges es descarregaran quan s'executi la tasca programada, permetent un escaneig més ràpid de la mediateca.", + "LabelExtractChaptersDuringLibraryScanHelp": "Genera imatges de capítols quan els vídeos són importats durant l'escaneig de la mediateca. Desmarcant, les imatges es descarregaran quan s'executi la tasca programada, cosa que permet un escaneig més ràpid de la mediateca.", "LabelEncoderPreset": "Codificació preestablert", "LabelEnableSSDPTracing": "Habilitar rastreig SSDP", "LabelEnableSingleImageInDidlLimitHelp": "Alguns dispositius no es mostri correctament si diverses imatges estan integrats dins de DIDL.", @@ -1429,7 +1429,7 @@ "PersonRole": "com {0}", "Person": "Persona", "PerfectMatch": "Combinació perfecta", - "PathNotFound": "La ruta no s'ha pogut trobat. Assegureu-vos que la ruta és vàlida i torneu-ho a intentar.", + "PathNotFound": "No s'ha pogut trobar el camí. Assegureu-vos que el camí és vàlid i torneu-ho a intentar.", "PasswordResetProviderHelp": "Escollir un proveïdor de restabliment de contrasenya que s'utilitzarà quan l'usuari sol·liciti un restabliment de contrasenya.", "PackageInstallFailed": "Ha fallat la instal·lació de {0} (versió {1}).", "PackageInstallCompleted": "S'ha acabat la instal·lació de {0} (versió {1}).", @@ -1510,7 +1510,7 @@ "HeaderRemoveMediaFolder": "Elimina el directori de continguts multimèdia", "HeaderRemoteAccessSettings": "Configuració de l'accés remot", "HeaderRecordingPostProcessing": "Post-processament de l'enregistrament", - "HeaderPortRanges": "Firewall i configuració del proxy", + "HeaderPortRanges": "Configuració del tallafoc i el proxy", "HeaderPluginInstallation": "Instal·lació de complements", "HeaderPlayOn": "Reprodueix a", "HeaderPlayback": "Reproducció dels continguts multimèdia", @@ -1761,7 +1761,7 @@ "SearchResultsEmpty": "Ups! No s'han trobat cap resultat per \"{0}\"", "Studio": "Estudi", "UnknownError": "S'ha produït un error desconegut.", - "PleaseConfirmRepositoryInstallation": "Si us plau, pitgeu OK per confirmar que heu llegit el text anterior i desitgeu continuar amb la instal·lació del repositori de complements.", + "PleaseConfirmRepositoryInstallation": "Si us plau, pitgeu D'acord per confirmar que heu llegit el text anterior i desitgeu continuar amb la instal·lació del repositori de complements.", "Unknown": "Desconegut", "SelectAudioNormalizationHelp": "Guany de pista - ajusta el volum de cada pista perquè la reproducció soni al mateix volum. Guany d'àlbum - ajusta el volum de totes les pistes d'un àlbum, mantenint el rang dinàmic de l'àlbum. Canviant entre “Apagat” i altres opcions requereix reiniciar la reproducció actual.", "HeaderConfirmRepositoryInstallation": "Confirmeu la instal·lació del repositori de complements", @@ -1938,7 +1938,7 @@ "HeaderNewPlaylist": "Llista de reproducció nova", "AlwaysRemuxFlacAudioFilesHelp": "Si el vostre navegador rebutja reproduir certs arxius o calcula les marques de temps de manera imprecisa, activeu això com a solució alternativa.", "AlwaysRemuxMp3AudioFilesHelp": "Si el teu navegador calcula les marques de temps de certs arxius de manera imprecisa, activa això com a solució alternativa.", - "EnableHi10pHelp": "Habilita per a evitar ls transcodificació de vídeos en H.264 10-bits. Deshabiliteu-ho si la reproducció del vídeo mostra fotogrames buits.", + "EnableHi10pHelp": "Habilita per a evitar la transcodificació de vídeos en H.264 10-bits. Deshabiliteu-ho si la reproducció del vídeo mostra fotogrames buits.", "DateModified": "Data de modificació", "HeaderAudioAdvanced": "Àudio avançat", "LabelAllowFmp4TranscodingContainer": "Permet el contenidor de transcodificació fMP4", @@ -1956,7 +1956,7 @@ "MessageCancelTimerError": "S'ha produït un error cancel·lant el temporitzador", "MoviesAndShows": "Pel·lícules i sèries", "LabelLyricDownloaders": "Descarregador de lletres", - "LabelQsvDeviceHelp": "Específica el dispositiu Intel QSV en els sistemes amb múltiples GPU. En sistemes Linux, això és un node de renderitzat, per exemple, /dev/dri/renderD128. En Windows, és un índex de dispositiu que comença al 0. Deixeu-ho en blanc a no ser que sapigueu què esteu fent.", + "LabelQsvDeviceHelp": "Específica el dispositiu Intel QSV en els sistemes amb múltiples GPU. En sistemes Linux, això és un node de renderitzat, per exemple, /dev/dri/renderD128. En Windows, és un índex de dispositiu que comença al 0. Deixeu-ho en blanc, llevat que sapigueu què esteu fent.", "LabelScreensaverTime": "Temps de l'estalvi de pantalla", "LabelScreensaverTimeHelp": "La quantitat de temps, en segons d'inactivitat, necessària per activar l'estalvi de pantalla.", "MediaSegmentAction.AskToSkip": "Sol·licita saltar", @@ -1984,7 +1984,7 @@ "UseCustomTagDelimitersHelp": "Separa les etiquetes d'artista/gènere amb caràcters personalitzats.", "RenderPgsSubtitle": "Renderitzat experimental de subtítols PGS", "VideoCodecTagNotSupported": "L'etiqueta del còdec de vídeo no és compatible", - "RenderPgsSubtitleHelp": "Determina si el client ha de renderitzar els subtítols PGS enlloc de fer servir els subtítols incrustats. Això pot evitar la transcodificació de part del servidor a canvi del rendiment de renderitzat de part del client.", + "RenderPgsSubtitleHelp": "Determina si el client ha de renderitzar els subtítols PGS en lloc de fer servir els subtítols incrustats. Això pot evitar la transcodificació de part del servidor a canvi del rendiment de renderitzat de part del client.", "FallbackMaxStreamingBitrateHelp": "La transmissió màxima de bits s'usa com a alternativa quan ffprobe no pot determinar el flux de l'origen. Això ajuda a prevenir que els clients sol·licitin un bitrate de transcodificació excessivament alt, el qual provocaria errors en el reproductor o sobrecarregaria el codificador.", "HeaderNextEpisode": "Episodi següent", "HeaderNextVideo": "Vídeo següent", @@ -2059,5 +2059,7 @@ "ConfirmDeleteRepository": "Desitgeu eliminar el repositori?", "DeleteRepositoryConfirmation": "N'esteu segur, de voler esborrar aquest repositori?", "LiveTVPageLoadError": "La càrrega de la pàgina de gravacions ha fallat", - "ConnectAnyway": "Connectar de totes maneres" + "ConnectAnyway": "Connecta de totes maneres", + "HeaderServerMismatch": "Discrepància amb el servidor", + "MessageServerMismatch": "El servidor al qual us esteu connectant no és el mateix servidor al qual us vau connectar anteriorment amb aquesta adreça. Si ja s'esperava això, seleccioneu \"Connecta igualment\". En cas contrari, la vostra connexió o el servidor podrien estar compromesos." } From c9920e6206cb09e85d7fc61431b9e8b030710ca3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 8 Jul 2025 21:54:41 +0000 Subject: [PATCH 638/645] Update Linters --- package-lock.json | 765 ++++++++++++++++++++++++++++++++++------------ package.json | 10 +- 2 files changed, 575 insertions(+), 200 deletions(-) diff --git a/package-lock.json b/package-lock.json index ae75a3565..8535cf57a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -73,7 +73,7 @@ "@babel/preset-env": "7.27.2", "@babel/preset-react": "7.27.1", "@eslint-community/eslint-plugin-eslint-comments": "4.5.0", - "@eslint/js": "9.29.0", + "@eslint/js": "9.30.1", "@stylistic/eslint-plugin": "4.4.1", "@stylistic/stylelint-plugin": "3.1.2", "@types/dompurify": "3.0.5", @@ -85,7 +85,7 @@ "@types/react-dom": "18.3.7", "@types/react-lazy-load-image-component": "1.6.4", "@types/sortablejs": "1.15.8", - "@typescript-eslint/parser": "8.34.1", + "@typescript-eslint/parser": "8.35.1", "@uupaa/dynamic-import-polyfill": "1.0.2", "@vitest/coverage-v8": "3.2.4", "autoprefixer": "10.4.21", @@ -97,13 +97,13 @@ "css-loader": "7.1.2", "cssnano": "7.0.7", "es-check": "9.1.4", - "eslint": "9.29.0", + "eslint": "9.30.1", "eslint-plugin-compat": "6.0.2", - "eslint-plugin-import": "2.31.0", + "eslint-plugin-import": "2.32.0", "eslint-plugin-jsx-a11y": "6.10.2", "eslint-plugin-react": "7.37.5", "eslint-plugin-react-hooks": "5.2.0", - "eslint-plugin-sonarjs": "3.0.3", + "eslint-plugin-sonarjs": "3.0.4", "expose-loader": "5.0.1", "fast-glob": "3.3.3", "fork-ts-checker-webpack-plugin": "9.1.0", @@ -3746,9 +3746,9 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz", - "integrity": "sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==", + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3761,9 +3761,9 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", - "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", + "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3886,9 +3886,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.29.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.29.0.tgz", - "integrity": "sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==", + "version": "9.30.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.30.1.tgz", + "integrity": "sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==", "dev": true, "license": "MIT", "engines": { @@ -6082,16 +6082,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.1.tgz", - "integrity": "sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.35.1.tgz", + "integrity": "sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.34.1", - "@typescript-eslint/types": "8.34.1", - "@typescript-eslint/typescript-estree": "8.34.1", - "@typescript-eslint/visitor-keys": "8.34.1", + "@typescript-eslint/scope-manager": "8.35.1", + "@typescript-eslint/types": "8.35.1", + "@typescript-eslint/typescript-estree": "8.35.1", + "@typescript-eslint/visitor-keys": "8.35.1", "debug": "^4.3.4" }, "engines": { @@ -6106,6 +6106,176 @@ "typescript": ">=4.8.4 <5.9.0" } }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/project-service": { + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.35.1.tgz", + "integrity": "sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.35.1", + "@typescript-eslint/types": "^8.35.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.35.1.tgz", + "integrity": "sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.35.1", + "@typescript-eslint/visitor-keys": "8.35.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.1.tgz", + "integrity": "sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.1.tgz", + "integrity": "sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.1.tgz", + "integrity": "sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.35.1", + "@typescript-eslint/tsconfig-utils": "8.35.1", + "@typescript-eslint/types": "8.35.1", + "@typescript-eslint/visitor-keys": "8.35.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.1.tgz", + "integrity": "sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.35.1", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/parser/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/project-service": { "version": "8.34.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.1.tgz", @@ -6995,18 +7165,20 @@ } }, "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -7066,18 +7238,19 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "es-abstract": "^1.23.9", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -7087,15 +7260,16 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -9976,9 +10150,9 @@ } }, "node_modules/es-abstract": { - "version": "1.23.9", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", "dev": true, "license": "MIT", "dependencies": { @@ -9986,18 +10160,18 @@ "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", + "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.0", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", @@ -10009,21 +10183,24 @@ "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", + "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.0", + "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.3", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.3", + "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", @@ -10032,7 +10209,7 @@ "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.18" + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -10191,12 +10368,16 @@ } }, "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-to-primitive": { @@ -10317,19 +10498,19 @@ } }, "node_modules/eslint": { - "version": "9.29.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz", - "integrity": "sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==", + "version": "9.30.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.30.1.tgz", + "integrity": "sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.20.1", - "@eslint/config-helpers": "^0.2.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.0", "@eslint/core": "^0.14.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.29.0", + "@eslint/js": "9.30.1", "@eslint/plugin-kit": "^0.3.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -10415,9 +10596,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", "dev": true, "license": "MIT", "dependencies": { @@ -10556,29 +10737,30 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, + "license": "MIT", "dependencies": { "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", + "eslint-module-utils": "^2.12.1", "hasown": "^2.0.2", - "is-core-module": "^2.15.1", + "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", - "object.values": "^1.2.0", + "object.values": "^1.2.1", "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", + "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "engines": { @@ -10710,9 +10892,9 @@ } }, "node_modules/eslint-plugin-sonarjs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-3.0.3.tgz", - "integrity": "sha512-/UrTz8wyTW0MQVJKUF70vSjsMMf54+0cKHWAuYObuE82vNM8zrscm0wvZprolHNN0PIdnvVQ9Dm6MQkIzOKu4A==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-3.0.4.tgz", + "integrity": "sha512-ftQcP811kRJNXapqpQXHErEoVOdTPfYPPYd7n3AExIPwv4qWKKHf4slFvXmodiOnfgy1Tl3waPZZLD7lcvJOtw==", "dev": true, "license": "LGPL-3.0-only", "dependencies": { @@ -10721,6 +10903,7 @@ "bytes": "3.1.2", "functional-red-black-tree": "1.0.1", "jsx-ast-utils": "3.3.5", + "lodash.merge": "4.6.2", "minimatch": "9.0.5", "scslre": "0.3.0", "semver": "7.7.2", @@ -11753,13 +11936,19 @@ } }, "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.1.3" + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/for-in": { @@ -13526,9 +13715,9 @@ } }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -13779,6 +13968,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-network-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", @@ -14022,13 +14224,13 @@ } }, "node_modules/is-weakref": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", - "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -15567,9 +15769,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", - "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, "license": "MIT", "engines": { @@ -20805,6 +21007,20 @@ "dev": true, "license": "MIT" }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -23711,6 +23927,31 @@ "typescript": ">=4.8.4 <5.9.0" } }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.1.tgz", + "integrity": "sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/typescript-estree": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, "node_modules/uc.micro": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", @@ -24842,16 +25083,17 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", - "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "for-each": "^0.3.3", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, @@ -27202,9 +27444,9 @@ "dev": true }, "@eslint/config-array": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz", - "integrity": "sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==", + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", "dev": true, "requires": { "@eslint/object-schema": "^2.1.6", @@ -27213,9 +27455,9 @@ } }, "@eslint/config-helpers": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", - "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", + "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", "dev": true }, "@eslint/core": { @@ -27302,9 +27544,9 @@ } }, "@eslint/js": { - "version": "9.29.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.29.0.tgz", - "integrity": "sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==", + "version": "9.30.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.30.1.tgz", + "integrity": "sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==", "dev": true }, "@eslint/object-schema": { @@ -28619,16 +28861,110 @@ } }, "@typescript-eslint/parser": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.1.tgz", - "integrity": "sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.35.1.tgz", + "integrity": "sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "8.34.1", - "@typescript-eslint/types": "8.34.1", - "@typescript-eslint/typescript-estree": "8.34.1", - "@typescript-eslint/visitor-keys": "8.34.1", + "@typescript-eslint/scope-manager": "8.35.1", + "@typescript-eslint/types": "8.35.1", + "@typescript-eslint/typescript-estree": "8.35.1", + "@typescript-eslint/visitor-keys": "8.35.1", "debug": "^4.3.4" + }, + "dependencies": { + "@typescript-eslint/project-service": { + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.35.1.tgz", + "integrity": "sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==", + "dev": true, + "requires": { + "@typescript-eslint/tsconfig-utils": "^8.35.1", + "@typescript-eslint/types": "^8.35.1", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.35.1.tgz", + "integrity": "sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.35.1", + "@typescript-eslint/visitor-keys": "8.35.1" + } + }, + "@typescript-eslint/tsconfig-utils": { + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.1.tgz", + "integrity": "sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==", + "dev": true, + "requires": {} + }, + "@typescript-eslint/types": { + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.1.tgz", + "integrity": "sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.1.tgz", + "integrity": "sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==", + "dev": true, + "requires": { + "@typescript-eslint/project-service": "8.35.1", + "@typescript-eslint/tsconfig-utils": "8.35.1", + "@typescript-eslint/types": "8.35.1", + "@typescript-eslint/visitor-keys": "8.35.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.1.tgz", + "integrity": "sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.35.1", + "eslint-visitor-keys": "^4.2.1" + } + }, + "brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true + } } }, "@typescript-eslint/project-service": { @@ -29234,17 +29570,19 @@ "dev": true }, "array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, "requires": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" } }, "array-union": { @@ -29283,29 +29621,30 @@ } }, "array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", "dev": true, "requires": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "es-abstract": "^1.23.9", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" } }, "array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" } }, "array.prototype.flatmap": { @@ -31315,27 +31654,27 @@ } }, "es-abstract": { - "version": "1.23.9", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", "dev": true, "requires": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", + "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.0", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", @@ -31347,21 +31686,24 @@ "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", + "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.0", + "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.3", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.3", + "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", @@ -31370,7 +31712,7 @@ "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.18" + "which-typed-array": "^1.1.19" } }, "es-check": { @@ -31479,12 +31821,12 @@ } }, "es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, "requires": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" } }, "es-to-primitive": { @@ -31583,18 +31925,18 @@ "dev": true }, "eslint": { - "version": "9.29.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz", - "integrity": "sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==", + "version": "9.30.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.30.1.tgz", + "integrity": "sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.20.1", - "@eslint/config-helpers": "^0.2.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.0", "@eslint/core": "^0.14.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.29.0", + "@eslint/js": "9.30.1", "@eslint/plugin-kit": "^0.3.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -31802,9 +32144,9 @@ } }, "eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", "dev": true, "requires": { "debug": "^3.2.7" @@ -31889,29 +32231,29 @@ } }, "eslint-plugin-import": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "requires": { "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", + "eslint-module-utils": "^2.12.1", "hasown": "^2.0.2", - "is-core-module": "^2.15.1", + "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", - "object.values": "^1.2.0", + "object.values": "^1.2.1", "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", + "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "dependencies": { @@ -32010,9 +32352,9 @@ "requires": {} }, "eslint-plugin-sonarjs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-3.0.3.tgz", - "integrity": "sha512-/UrTz8wyTW0MQVJKUF70vSjsMMf54+0cKHWAuYObuE82vNM8zrscm0wvZprolHNN0PIdnvVQ9Dm6MQkIzOKu4A==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-3.0.4.tgz", + "integrity": "sha512-ftQcP811kRJNXapqpQXHErEoVOdTPfYPPYd7n3AExIPwv4qWKKHf4slFvXmodiOnfgy1Tl3waPZZLD7lcvJOtw==", "dev": true, "requires": { "@eslint-community/regexpp": "4.12.1", @@ -32020,6 +32362,7 @@ "bytes": "3.1.2", "functional-red-black-tree": "1.0.1", "jsx-ast-utils": "3.3.5", + "lodash.merge": "4.6.2", "minimatch": "9.0.5", "scslre": "0.3.0", "semver": "7.7.2", @@ -32625,12 +32968,12 @@ "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" }, "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "requires": { - "is-callable": "^1.1.3" + "is-callable": "^1.2.7" } }, "for-in": { @@ -33834,9 +34177,9 @@ "dev": true }, "is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "requires": { "hasown": "^2.0.2" } @@ -33994,6 +34337,12 @@ "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true }, + "is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true + }, "is-network-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", @@ -34143,12 +34492,12 @@ "dev": true }, "is-weakref": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", - "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "requires": { - "call-bound": "^1.0.2" + "call-bound": "^1.0.3" } }, "is-weakset": { @@ -35307,9 +35656,9 @@ } }, "object-inspect": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", - "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true }, "object-keys": { @@ -38777,6 +39126,16 @@ "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", "dev": true }, + "stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -40855,6 +41214,21 @@ "@typescript-eslint/eslint-plugin": "8.34.1", "@typescript-eslint/parser": "8.34.1", "@typescript-eslint/utils": "8.34.1" + }, + "dependencies": { + "@typescript-eslint/parser": { + "version": "8.34.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.1.tgz", + "integrity": "sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "8.34.1", + "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/typescript-estree": "8.34.1", + "@typescript-eslint/visitor-keys": "8.34.1", + "debug": "^4.3.4" + } + } } }, "uc.micro": { @@ -41588,15 +41962,16 @@ } }, "which-typed-array": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", - "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, "requires": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "for-each": "^0.3.3", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } diff --git a/package.json b/package.json index 5ebfafc46..cc417f4c7 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "@babel/preset-env": "7.27.2", "@babel/preset-react": "7.27.1", "@eslint-community/eslint-plugin-eslint-comments": "4.5.0", - "@eslint/js": "9.29.0", + "@eslint/js": "9.30.1", "@stylistic/eslint-plugin": "4.4.1", "@stylistic/stylelint-plugin": "3.1.2", "@types/dompurify": "3.0.5", @@ -22,7 +22,7 @@ "@types/react-dom": "18.3.7", "@types/react-lazy-load-image-component": "1.6.4", "@types/sortablejs": "1.15.8", - "@typescript-eslint/parser": "8.34.1", + "@typescript-eslint/parser": "8.35.1", "@uupaa/dynamic-import-polyfill": "1.0.2", "@vitest/coverage-v8": "3.2.4", "autoprefixer": "10.4.21", @@ -34,13 +34,13 @@ "css-loader": "7.1.2", "cssnano": "7.0.7", "es-check": "9.1.4", - "eslint": "9.29.0", + "eslint": "9.30.1", "eslint-plugin-compat": "6.0.2", - "eslint-plugin-import": "2.31.0", + "eslint-plugin-import": "2.32.0", "eslint-plugin-jsx-a11y": "6.10.2", "eslint-plugin-react": "7.37.5", "eslint-plugin-react-hooks": "5.2.0", - "eslint-plugin-sonarjs": "3.0.3", + "eslint-plugin-sonarjs": "3.0.4", "expose-loader": "5.0.1", "fast-glob": "3.3.3", "fork-ts-checker-webpack-plugin": "9.1.0", From 0b6b1e5292fa470884ad378e59e2928491d1fe48 Mon Sep 17 00:00:00 2001 From: Anrijs Vitolins Date: Wed, 9 Jul 2025 05:45:02 -0400 Subject: [PATCH 639/645] Translated using Weblate (Latvian) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/lv/ --- src/strings/lv.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/strings/lv.json b/src/strings/lv.json index 0e678f030..1c9dcaa26 100644 --- a/src/strings/lv.json +++ b/src/strings/lv.json @@ -1109,7 +1109,7 @@ "LabelTonemappingRange": "Toņu kartēšanas diapazons", "LabelTonemappingPeakHelp": "Pārrakstīt iegulto metadatu vērtību ievadsignālam ar šo maksimālo vērtību. Noklusējuma vērtība ir 100 (1000nit).", "LabelTonemappingPeak": "Toņu kartēšanas maksimums", - "LabelTonemappingParamHelp": "Noregulējiet toņu kartēšanas algoritmu. Parasti atstājiet to tukšu.", + "LabelTonemappingParamHelp": "Toņu kartēšanas algoritma tūnings. Vispārēji atstājiet to tukšu.", "LabelTonemappingParam": "Toņu kartēšanas parametrs", "LabelTonemappingDesatHelp": "Izmantojiet piesātinājuma samazināšanu izgaismotajiem objektiem, kas pārsniedz šo spilgtuma līmeni. Ieteicamās vērtība ir 0 (atslēgts).", "LabelTonemappingDesat": "Toņu kartēšanas piesātinājums \"desat\"", @@ -2028,5 +2028,7 @@ "UseDoubleRateDeinterlacing": "Dubultot kadru nomaiņas ātrumu kad noņem rindpārleces izvērsi", "UseCustomTagDelimitersHelp": "Sadalīt izpildītājus/žanru tegus ar pielāgotiem simboliem.", "LabelSaveTrickplayLocallyHelp": "Saglabājot trickplay attēlus multivides mapēs novietos attēlus blakus tavai multividei vieglai migrācijai un piekļuvei.", - "AllowTonemappingSoftwareHelp": "Toņu kartēšana var pārveidot video dinamisko diapazonu uz HDR no SDR (uz augstu diapazonu no zema) paturot attēla detaļas un krāsas, kas ir ļoti būtiska informāciju reprezentējot oriģinālo ainu. Šobrīd darbojas tikai ar 10bit HDR10, HLG un DoVi video." + "AllowTonemappingSoftwareHelp": "Toņu kartēšana var pārveidot video dinamisko diapazonu uz HDR no SDR (uz augstu diapazonu no zema) paturot attēla detaļas un krāsas, kas ir ļoti būtiska informāciju reprezentējot oriģinālo ainu. Šobrīd darbojas tikai ar 10bit HDR10, HLG un DoVi video.", + "LiveTVPageLoadError": "Neizdevās ielādēt lapu ar ierakstiem", + "HeaderServerMismatch": "Servera nesakritība" } From 785c5f6640ec5310dfae2bd3e514c5bf08ac5d3e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Jul 2025 14:54:50 +0000 Subject: [PATCH 640/645] Update dependency @jellyfin/sdk to v0.0.0-unstable.202507090504 --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index ae75a3565..72a4b3e8d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@fontsource/noto-sans-sc": "5.2.6", "@fontsource/noto-sans-tc": "5.2.6", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202506280502", + "@jellyfin/sdk": "0.0.0-unstable.202507090504", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.12", "@mui/material": "6.4.12", @@ -4129,9 +4129,9 @@ "license": "LGPL-2.1-or-later AND (FTL OR GPL-2.0-or-later) AND MIT AND MIT-Modern-Variant AND ISC AND NTP AND Zlib AND BSL-1.0" }, "node_modules/@jellyfin/sdk": { - "version": "0.0.0-unstable.202506280502", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506280502.tgz", - "integrity": "sha512-6aOrvBvPhIqBhw0FttJ6cMSXVoEJIOkg1Vb9MVgPDqcqDpftrYlbFyzVWJ7zHN4Fc1X/CO338j/U1zOc72Arow==", + "version": "0.0.0-unstable.202507090504", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202507090504.tgz", + "integrity": "sha512-znwTsY9+gyJDPmwFOET+rtZQ1QryziG6LFhGXPXPF1ltJspV4Ixk70ST1t925vvtXdpqoGqMu92OZWOqkiNLbg==", "license": "MPL-2.0", "peerDependencies": { "axios": "^1.3.4" @@ -27449,9 +27449,9 @@ "integrity": "sha512-C0OlBxIr9NdeFESMTA/OVDqNSWtog6Mi7wwzwH12xbZpxsMD0RgCupUcIP7zZgcpTNecW3fZq5d6xVo7Q8HEJw==" }, "@jellyfin/sdk": { - "version": "0.0.0-unstable.202506280502", - "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202506280502.tgz", - "integrity": "sha512-6aOrvBvPhIqBhw0FttJ6cMSXVoEJIOkg1Vb9MVgPDqcqDpftrYlbFyzVWJ7zHN4Fc1X/CO338j/U1zOc72Arow==", + "version": "0.0.0-unstable.202507090504", + "resolved": "https://registry.npmjs.org/@jellyfin/sdk/-/sdk-0.0.0-unstable.202507090504.tgz", + "integrity": "sha512-znwTsY9+gyJDPmwFOET+rtZQ1QryziG6LFhGXPXPF1ltJspV4Ixk70ST1t925vvtXdpqoGqMu92OZWOqkiNLbg==", "requires": {} }, "@jellyfin/ux-web": { diff --git a/package.json b/package.json index 5ebfafc46..0bdb21e68 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "@fontsource/noto-sans-sc": "5.2.6", "@fontsource/noto-sans-tc": "5.2.6", "@jellyfin/libass-wasm": "4.2.3", - "@jellyfin/sdk": "0.0.0-unstable.202506280502", + "@jellyfin/sdk": "0.0.0-unstable.202507090504", "@jellyfin/ux-web": "1.0.0", "@mui/icons-material": "6.4.12", "@mui/material": "6.4.12", From 038574adfc9e8e3f7cd3edd605ba3400ab54031f Mon Sep 17 00:00:00 2001 From: enter-a-random-username <112093608+enter-a-random-username@users.noreply.github.com> Date: Fri, 28 Mar 2025 19:00:34 +0100 Subject: [PATCH 641/645] Allow to scroll partial images in slider --- src/elements/emby-scrollbuttons/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/elements/emby-scrollbuttons/utils.ts b/src/elements/emby-scrollbuttons/utils.ts index 0d925957a..adb4c4183 100644 --- a/src/elements/emby-scrollbuttons/utils.ts +++ b/src/elements/emby-scrollbuttons/utils.ts @@ -76,7 +76,7 @@ function scrollToWindow({ let scrollToPosition: number; if (direction === ScrollDirection.RIGHT) { - const nextItem = items[lastVisibleIndex]; + const nextItem = items[lastVisibleIndex] ? items[lastVisibleIndex] : items[lastVisibleIndex - 1]; // This will be the position to anchor the item at `lastVisibleIndex` to the start of the view window. const nextItemScrollOffset = lastVisibleIndex * nextItem.offsetWidth; From afe25ee596c8d013de8d0335d13e61f3a0fa7dac Mon Sep 17 00:00:00 2001 From: enter-a-random-username <112093608+enter-a-random-username@users.noreply.github.com> Date: Fri, 28 Mar 2025 22:27:58 +0100 Subject: [PATCH 642/645] Update src/elements/emby-scrollbuttons/utils.ts Co-authored-by: viown <48097677+viown@users.noreply.github.com> --- src/elements/emby-scrollbuttons/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/elements/emby-scrollbuttons/utils.ts b/src/elements/emby-scrollbuttons/utils.ts index adb4c4183..d21a81004 100644 --- a/src/elements/emby-scrollbuttons/utils.ts +++ b/src/elements/emby-scrollbuttons/utils.ts @@ -76,7 +76,7 @@ function scrollToWindow({ let scrollToPosition: number; if (direction === ScrollDirection.RIGHT) { - const nextItem = items[lastVisibleIndex] ? items[lastVisibleIndex] : items[lastVisibleIndex - 1]; + const nextItem = items[lastVisibleIndex] || items[lastVisibleIndex - 1]; // This will be the position to anchor the item at `lastVisibleIndex` to the start of the view window. const nextItemScrollOffset = lastVisibleIndex * nextItem.offsetWidth; From ce9d13a4ad08550eefe34471b0a19fb2f3e1fcce Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Jul 2025 18:17:33 +0000 Subject: [PATCH 643/645] Update dependency typescript-eslint to v8.35.1 --- package-lock.json | 514 +++++++++------------------------------------- package.json | 2 +- 2 files changed, 95 insertions(+), 421 deletions(-) diff --git a/package-lock.json b/package-lock.json index a77020d0b..e5766fc8e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -128,7 +128,7 @@ "stylelint-scss": "6.12.1", "ts-loader": "9.5.2", "typescript": "5.8.3", - "typescript-eslint": "8.34.1", + "typescript-eslint": "8.35.1", "vitest": "3.2.4", "webpack": "5.99.9", "webpack-bundle-analyzer": "4.10.2", @@ -6042,17 +6042,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.1.tgz", - "integrity": "sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.35.1.tgz", + "integrity": "sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.34.1", - "@typescript-eslint/type-utils": "8.34.1", - "@typescript-eslint/utils": "8.34.1", - "@typescript-eslint/visitor-keys": "8.34.1", + "@typescript-eslint/scope-manager": "8.35.1", + "@typescript-eslint/type-utils": "8.35.1", + "@typescript-eslint/utils": "8.35.1", + "@typescript-eslint/visitor-keys": "8.35.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -6066,7 +6066,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.34.1", + "@typescript-eslint/parser": "^8.35.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } @@ -6106,7 +6106,7 @@ "typescript": ">=4.8.4 <5.9.0" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/project-service": { + "node_modules/@typescript-eslint/project-service": { "version": "8.35.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.35.1.tgz", "integrity": "sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==", @@ -6128,7 +6128,7 @@ "typescript": ">=4.8.4 <5.9.0" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "node_modules/@typescript-eslint/scope-manager": { "version": "8.35.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.35.1.tgz", "integrity": "sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==", @@ -6146,7 +6146,7 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/tsconfig-utils": { + "node_modules/@typescript-eslint/tsconfig-utils": { "version": "8.35.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.1.tgz", "integrity": "sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==", @@ -6163,199 +6163,15 @@ "typescript": ">=4.8.4 <5.9.0" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.1.tgz", - "integrity": "sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.1.tgz", - "integrity": "sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.35.1", - "@typescript-eslint/tsconfig-utils": "8.35.1", - "@typescript-eslint/types": "8.35.1", - "@typescript-eslint/visitor-keys": "8.35.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.1.tgz", - "integrity": "sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.35.1", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.1.tgz", - "integrity": "sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.34.1", - "@typescript-eslint/types": "^8.34.1", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/project-service/node_modules/@typescript-eslint/types": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.0.tgz", - "integrity": "sha512-0mYH3emanku0vHw2aRLNGqe7EXh9WHEhi7kZzscrMDf6IIRUQ5Jk4wp1QrledE/36KtdZrVfKnE32eZCf/vaVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz", - "integrity": "sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.34.1", - "@typescript-eslint/visitor-keys": "8.34.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.1.tgz", - "integrity": "sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.34.1.tgz", - "integrity": "sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.35.1.tgz", + "integrity": "sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.34.1", - "@typescript-eslint/utils": "8.34.1", + "@typescript-eslint/typescript-estree": "8.35.1", + "@typescript-eslint/utils": "8.35.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -6372,9 +6188,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.1.tgz", - "integrity": "sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.1.tgz", + "integrity": "sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==", "dev": true, "license": "MIT", "engines": { @@ -6386,16 +6202,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz", - "integrity": "sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.1.tgz", + "integrity": "sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.34.1", - "@typescript-eslint/tsconfig-utils": "8.34.1", - "@typescript-eslint/types": "8.34.1", - "@typescript-eslint/visitor-keys": "8.34.1", + "@typescript-eslint/project-service": "8.35.1", + "@typescript-eslint/tsconfig-utils": "8.35.1", + "@typescript-eslint/types": "8.35.1", + "@typescript-eslint/visitor-keys": "8.35.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -6454,16 +6270,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.1.tgz", - "integrity": "sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.35.1.tgz", + "integrity": "sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.34.1", - "@typescript-eslint/types": "8.34.1", - "@typescript-eslint/typescript-estree": "8.34.1" + "@typescript-eslint/scope-manager": "8.35.1", + "@typescript-eslint/types": "8.35.1", + "@typescript-eslint/typescript-estree": "8.35.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6478,13 +6294,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz", - "integrity": "sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.1.tgz", + "integrity": "sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/types": "8.35.1", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -23905,40 +23721,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.34.1.tgz", - "integrity": "sha512-XjS+b6Vg9oT1BaIUfkW3M3LvqZE++rbzAMEHuccCfO/YkP43ha6w3jTEMilQxMF92nVOYCcdjv1ZUhAa1D/0ow==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.35.1.tgz", + "integrity": "sha512-xslJjFzhOmHYQzSB/QTeASAHbjmxOGEP6Coh93TXmUBFQoJ1VU35UHIDmG06Jd6taf3wqqC1ntBnCMeymy5Ovw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.34.1", - "@typescript-eslint/parser": "8.34.1", - "@typescript-eslint/utils": "8.34.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.1.tgz", - "integrity": "sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.34.1", - "@typescript-eslint/types": "8.34.1", - "@typescript-eslint/typescript-estree": "8.34.1", - "@typescript-eslint/visitor-keys": "8.34.1", - "debug": "^4.3.4" + "@typescript-eslint/eslint-plugin": "8.35.1", + "@typescript-eslint/parser": "8.35.1", + "@typescript-eslint/utils": "8.35.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -28836,16 +28627,16 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.1.tgz", - "integrity": "sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.35.1.tgz", + "integrity": "sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.34.1", - "@typescript-eslint/type-utils": "8.34.1", - "@typescript-eslint/utils": "8.34.1", - "@typescript-eslint/visitor-keys": "8.34.1", + "@typescript-eslint/scope-manager": "8.35.1", + "@typescript-eslint/type-utils": "8.35.1", + "@typescript-eslint/utils": "8.35.1", + "@typescript-eslint/visitor-keys": "8.35.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -28871,166 +28662,64 @@ "@typescript-eslint/typescript-estree": "8.35.1", "@typescript-eslint/visitor-keys": "8.35.1", "debug": "^4.3.4" - }, - "dependencies": { - "@typescript-eslint/project-service": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.35.1.tgz", - "integrity": "sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==", - "dev": true, - "requires": { - "@typescript-eslint/tsconfig-utils": "^8.35.1", - "@typescript-eslint/types": "^8.35.1", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.35.1.tgz", - "integrity": "sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "8.35.1", - "@typescript-eslint/visitor-keys": "8.35.1" - } - }, - "@typescript-eslint/tsconfig-utils": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.1.tgz", - "integrity": "sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==", - "dev": true, - "requires": {} - }, - "@typescript-eslint/types": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.1.tgz", - "integrity": "sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.1.tgz", - "integrity": "sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==", - "dev": true, - "requires": { - "@typescript-eslint/project-service": "8.35.1", - "@typescript-eslint/tsconfig-utils": "8.35.1", - "@typescript-eslint/types": "8.35.1", - "@typescript-eslint/visitor-keys": "8.35.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "8.35.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.1.tgz", - "integrity": "sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "8.35.1", - "eslint-visitor-keys": "^4.2.1" - } - }, - "brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true - }, - "minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true - } } }, "@typescript-eslint/project-service": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.1.tgz", - "integrity": "sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.35.1.tgz", + "integrity": "sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==", "dev": true, "requires": { - "@typescript-eslint/tsconfig-utils": "^8.34.1", - "@typescript-eslint/types": "^8.34.1", + "@typescript-eslint/tsconfig-utils": "^8.35.1", + "@typescript-eslint/types": "^8.35.1", "debug": "^4.3.4" - }, - "dependencies": { - "@typescript-eslint/types": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.0.tgz", - "integrity": "sha512-0mYH3emanku0vHw2aRLNGqe7EXh9WHEhi7kZzscrMDf6IIRUQ5Jk4wp1QrledE/36KtdZrVfKnE32eZCf/vaVQ==", - "dev": true - } } }, "@typescript-eslint/scope-manager": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz", - "integrity": "sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.35.1.tgz", + "integrity": "sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==", "dev": true, "requires": { - "@typescript-eslint/types": "8.34.1", - "@typescript-eslint/visitor-keys": "8.34.1" + "@typescript-eslint/types": "8.35.1", + "@typescript-eslint/visitor-keys": "8.35.1" } }, "@typescript-eslint/tsconfig-utils": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.1.tgz", - "integrity": "sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.1.tgz", + "integrity": "sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==", "dev": true, "requires": {} }, "@typescript-eslint/type-utils": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.34.1.tgz", - "integrity": "sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.35.1.tgz", + "integrity": "sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "8.34.1", - "@typescript-eslint/utils": "8.34.1", + "@typescript-eslint/typescript-estree": "8.35.1", + "@typescript-eslint/utils": "8.35.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" } }, "@typescript-eslint/types": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.1.tgz", - "integrity": "sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.1.tgz", + "integrity": "sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz", - "integrity": "sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.1.tgz", + "integrity": "sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==", "dev": true, "requires": { - "@typescript-eslint/project-service": "8.34.1", - "@typescript-eslint/tsconfig-utils": "8.34.1", - "@typescript-eslint/types": "8.34.1", - "@typescript-eslint/visitor-keys": "8.34.1", + "@typescript-eslint/project-service": "8.35.1", + "@typescript-eslint/tsconfig-utils": "8.35.1", + "@typescript-eslint/types": "8.35.1", + "@typescript-eslint/visitor-keys": "8.35.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -29066,24 +28755,24 @@ } }, "@typescript-eslint/utils": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.1.tgz", - "integrity": "sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.35.1.tgz", + "integrity": "sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.34.1", - "@typescript-eslint/types": "8.34.1", - "@typescript-eslint/typescript-estree": "8.34.1" + "@typescript-eslint/scope-manager": "8.35.1", + "@typescript-eslint/types": "8.35.1", + "@typescript-eslint/typescript-estree": "8.35.1" } }, "@typescript-eslint/visitor-keys": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz", - "integrity": "sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.1.tgz", + "integrity": "sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==", "dev": true, "requires": { - "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/types": "8.35.1", "eslint-visitor-keys": "^4.2.1" }, "dependencies": { @@ -41206,29 +40895,14 @@ "dev": true }, "typescript-eslint": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.34.1.tgz", - "integrity": "sha512-XjS+b6Vg9oT1BaIUfkW3M3LvqZE++rbzAMEHuccCfO/YkP43ha6w3jTEMilQxMF92nVOYCcdjv1ZUhAa1D/0ow==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.35.1.tgz", + "integrity": "sha512-xslJjFzhOmHYQzSB/QTeASAHbjmxOGEP6Coh93TXmUBFQoJ1VU35UHIDmG06Jd6taf3wqqC1ntBnCMeymy5Ovw==", "dev": true, "requires": { - "@typescript-eslint/eslint-plugin": "8.34.1", - "@typescript-eslint/parser": "8.34.1", - "@typescript-eslint/utils": "8.34.1" - }, - "dependencies": { - "@typescript-eslint/parser": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.1.tgz", - "integrity": "sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "8.34.1", - "@typescript-eslint/types": "8.34.1", - "@typescript-eslint/typescript-estree": "8.34.1", - "@typescript-eslint/visitor-keys": "8.34.1", - "debug": "^4.3.4" - } - } + "@typescript-eslint/eslint-plugin": "8.35.1", + "@typescript-eslint/parser": "8.35.1", + "@typescript-eslint/utils": "8.35.1" } }, "uc.micro": { diff --git a/package.json b/package.json index 862da327f..65a24cc91 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "stylelint-scss": "6.12.1", "ts-loader": "9.5.2", "typescript": "5.8.3", - "typescript-eslint": "8.34.1", + "typescript-eslint": "8.35.1", "vitest": "3.2.4", "webpack": "5.99.9", "webpack-bundle-analyzer": "4.10.2", From 3327502fede7cc72476f1f3f7ef90dd1e52a1871 Mon Sep 17 00:00:00 2001 From: oofybruh9 Date: Wed, 9 Jul 2025 22:18:31 -0400 Subject: [PATCH 644/645] Translated using Weblate (Spanish) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/es/ --- src/strings/es.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/strings/es.json b/src/strings/es.json index 776dc70ac..2f4a6bf5f 100644 --- a/src/strings/es.json +++ b/src/strings/es.json @@ -2061,5 +2061,7 @@ "TranscodingLoadError": "Error al cargar la configuración de transcodificación", "MessageRestoreDisclaimer": "ADVERTENCIA: Estás a punto de restaurar una copia de seguridad anterior. Tu servidor quedará inoperativo durante el proceso y se perderán todos los datos nuevos creados desde la fecha de esa copia.", "MessageRestoreInProgress": "Restauración en progreso", - "MessageWaitingForServer": "Esperando al servidor..." + "MessageWaitingForServer": "Esperando al servidor...", + "LiveTVPageLoadError": "Falló la carga de la pagina de grabaciones", + "ConnectAnyway": "Conectar de todos modos" } From 7cabe79ac31e904b0c82f20d430944d62dcf78b9 Mon Sep 17 00:00:00 2001 From: HALKRON Date: Thu, 10 Jul 2025 17:31:37 -0400 Subject: [PATCH 645/645] Translated using Weblate (Burmese) Translation: Jellyfin/Jellyfin Web Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-web/my/ --- src/strings/my.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings/my.json b/src/strings/my.json index c22f50ead..2e282b78d 100644 --- a/src/strings/my.json +++ b/src/strings/my.json @@ -116,10 +116,10 @@ "AddToPlaylist": "အစီအစဉ်သို့ ထည့်ပါ", "AddToCollection": "စုစည်းမှုထဲထည့်ပါ", "AdditionalNotificationServices": "ထပ်ဆောင်း သတိပေးချက်ဝန်ဆောင်မှုများကို ထည့်သွင်းရန် ပလပ်အင်ကတ်တလောက်ကို ကြည့်ရှုပါ။", - "AddedOnValue": "ထပ်ခဲ့သည်။{0}", + "AddedOnValue": "{0} ထပ်ခဲ့သည်", "Add": "ထပ်မည်။", "Actor": "သရုပ်ဆောင်", - "AccessRestrictedTryAgainLater": "ဝင်ရောက်ခွင့်ကို လောလောဆယ် ကန့်သတ်ထားပါသည်။ နောက်တစ်ကြိမ် ထပ်မံကြိုးစားကြည့်ပါ။.", + "AccessRestrictedTryAgainLater": "ဝင်ရောက်ခွင့်ကို လတ်တလော ကန့်သတ်ထားပါသည်။ နောက်တစ်ကြိမ် ထပ်မံကြိုးစားကြည့်ပါ။.", "Absolute": "ပကတိ", "DirectPlayHelp": "အရင်းအမြစ်ဖိုင်သည် ဤကလိုင်းယင့်နှင့် လုံးဝသဟဇာတဖြစ်ပြီး စက်ရှင်သည် ပြုပြင်မွမ်းမံမှုမရှိဘဲ ဖိုင်ကို လက်ခံရရှိနေပါသည်။", "DirectPlaying": "တိုက်ရိုက်ဖွင့်ခြင်း",