From d4f4bee4d3b7878949859079d5bb247923562bb1 Mon Sep 17 00:00:00 2001 From: Dave Nicolson Date: Mon, 1 Sep 2025 21:32:19 +0200 Subject: [PATCH 01/70] Add playlist management buttons --- package-lock.json | 47 +++++++- package.json | 3 +- public/locales/ca-ES.json | 4 + public/locales/cs-CZ.json | 4 + public/locales/de-DE.json | 4 + public/locales/en-GB.json | 4 + public/locales/en-US.json | 4 + public/locales/en-US.json.d.ts | 4 + public/locales/es-ES.json | 4 + public/locales/fa-IR.json | 4 + public/locales/fr-FR.json | 4 + public/locales/he-IL.json | 4 + public/locales/hi-IN.json | 4 + public/locales/it-IT.json | 4 + public/locales/ja-JP.json | 4 + public/locales/ko-KR.json | 4 + public/locales/nl-NL.json | 4 + public/locales/pl-PL.json | 4 + public/locales/pt-BR.json | 4 + public/locales/ru-RU.json | 4 + public/locales/sv-SE.json | 4 + public/locales/tr-TR.json | 4 + public/locales/uk-UA.json | 4 + public/locales/vi-VN.json | 4 + public/locales/zh-CN.json | 4 + public/locales/zh-TW.json | 4 + src/components/Settings/Settings.tsx | 8 ++ .../playlistManagementButtons/index.css | 16 +++ .../playlistManagementButtons/index.ts | 105 ++++++++++++++++++ src/pages/content/index.ts | 5 + src/pages/embedded/index.ts | 15 ++- src/types/index.ts | 2 + src/utils/constants.ts | 2 + 33 files changed, 295 insertions(+), 4 deletions(-) create mode 100644 src/features/playlistManagementButtons/index.css create mode 100644 src/features/playlistManagementButtons/index.ts diff --git a/package-lock.json b/package-lock.json index f76211c42..71cf2b0b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,8 @@ "safe-units": "^2.0.1", "tailwindcss-multi": "^0.4.0", "vite-plugin-css-injected-by-js": "^3.3.0", - "webextension-polyfill": "^0.12.0" + "webextension-polyfill": "^0.12.0", + "youtubei.js": "^15.0.1" }, "devDependencies": { "@eslint/compat": "^1.2.0", @@ -204,6 +205,12 @@ "node": ">=6.9.0" } }, + "node_modules/@bufbuild/protobuf": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.7.0.tgz", + "integrity": "sha512-qn6tAIZEw5i/wiESBF4nQxZkl86aY4KoO0IkUa2Lh+rya64oTOdJQFlZuMwI1Qz9VBJQrQC4QlSA2DNek5gCOA==", + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, "node_modules/@colors/colors": { "version": "1.5.0", "dev": true, @@ -5040,7 +5047,8 @@ }, "node_modules/acorn": { "version": "8.15.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -8733,6 +8741,18 @@ "node": ">= 0.6.0" } }, + "node_modules/jintr": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jintr/-/jintr-3.3.1.tgz", + "integrity": "sha512-nnOzyhf0SLpbWuZ270Omwbj5LcXUkTcZkVnK8/veJXtSZOiATM5gMZMdmzN75FmTyj+NVgrGaPdH12zIJ24oIA==", + "funding": [ + "https://github.com/sponsors/LuanRT" + ], + "license": "MIT", + "dependencies": { + "acorn": "^8.8.0" + } + }, "node_modules/jiti": { "version": "1.21.6", "devOptional": true, @@ -14817,6 +14837,15 @@ "dev": true, "license": "MIT" }, + "node_modules/undici": { + "version": "6.21.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", + "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, "node_modules/undici-types": { "version": "7.8.0", "devOptional": true, @@ -15329,6 +15358,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/youtubei.js": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/youtubei.js/-/youtubei.js-15.0.1.tgz", + "integrity": "sha512-2slapqJS5NuXKHvcACEknyVz0AjH/TrXaOhDM0q2twQKa54kCmfj+7B/2nGfd20uzAe29zW1ejk2qOc4ABuGkg==", + "funding": [ + "https://github.com/sponsors/LuanRT" + ], + "license": "MIT", + "dependencies": { + "@bufbuild/protobuf": "^2.0.0", + "jintr": "^3.3.1", + "undici": "^6.21.3" + } + }, "node_modules/zip-stream": { "version": "6.0.1", "dev": true, diff --git a/package.json b/package.json index e49a67356..377d396ab 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,8 @@ "safe-units": "^2.0.1", "tailwindcss-multi": "^0.4.0", "vite-plugin-css-injected-by-js": "^3.3.0", - "webextension-polyfill": "^0.12.0" + "webextension-polyfill": "^0.12.0", + "youtubei.js": "^15.0.1" }, "devDependencies": { "@eslint/compat": "^1.2.0", diff --git a/public/locales/ca-ES.json b/public/locales/ca-ES.json index 76725831e..b7cdaf79c 100644 --- a/public/locales/ca-ES.json +++ b/public/locales/ca-ES.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "Habilita botons de gestió de llistes", + "title": "Afegeix botons als elements de la llista per eliminar vídeos o marcar-los com a ignorats" + }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", "title": "Hides the artificial intelligence summary below videos" diff --git a/public/locales/cs-CZ.json b/public/locales/cs-CZ.json index 0e84b8dab..f5b34e778 100644 --- a/public/locales/cs-CZ.json +++ b/public/locales/cs-CZ.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "Povolit tlačítka správy playlistu", + "title": "Přidá tlačítka k položkám playlistu pro odebrání videí nebo jejich označení jako nezhlédnutá" + }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", "title": "Hides the artificial intelligence summary below videos" diff --git a/public/locales/de-DE.json b/public/locales/de-DE.json index accd3c7e0..2282348f4 100644 --- a/public/locales/de-DE.json +++ b/public/locales/de-DE.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "Playlist-Verwaltungsschaltflächen aktivieren", + "title": "Fügt Schaltflächen zu Playlist-Elementen hinzu, um Videos aus der Playlist zu entfernen oder als ungesehen zu markieren" + }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", "title": "Hides the artificial intelligence summary below videos" diff --git a/public/locales/en-GB.json b/public/locales/en-GB.json index d98dbb417..12e9e339a 100644 --- a/public/locales/en-GB.json +++ b/public/locales/en-GB.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "Enable playlist management buttons", + "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", "title": "Hides the artificial intelligence summary below videos" diff --git a/public/locales/en-US.json b/public/locales/en-US.json index aaba3fb7e..1b48b8b07 100644 --- a/public/locales/en-US.json +++ b/public/locales/en-US.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "Enable playlist management buttons", + "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", "title": "Hides the artificial intelligence summary below videos" diff --git a/public/locales/en-US.json.d.ts b/public/locales/en-US.json.d.ts index 7de810541..89891601e 100644 --- a/public/locales/en-US.json.d.ts +++ b/public/locales/en-US.json.d.ts @@ -206,6 +206,10 @@ interface EnUS { label: "Default to original audio track"; title: "Always default to the original audio track"; }; + enablePlaylistManagementButtons: { + label: "Enable playlist management buttons"; + title: "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched"; + }; hideArtificialIntelligenceSummary: { label: "Hide AI summary"; title: "Hides the artificial intelligence summary below videos"; diff --git a/public/locales/es-ES.json b/public/locales/es-ES.json index 892e65a60..70c7ee2fc 100644 --- a/public/locales/es-ES.json +++ b/public/locales/es-ES.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "Habilitar botones de gestión de la lista de reproducción", + "title": "Añade botones a los elementos de la lista de reproducción para eliminar vídeos de la lista o marcarlos como no vistos" + }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", "title": "Hides the artificial intelligence summary below videos" diff --git a/public/locales/fa-IR.json b/public/locales/fa-IR.json index 0b2429e74..4756fccf3 100644 --- a/public/locales/fa-IR.json +++ b/public/locales/fa-IR.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "فعال کردن دکمه‌های مدیریت لیست پخش", + "title": "دکمه‌هایی به مواردِ لیست پخش اضافه می‌کند برای حذف ویدیوها یا علامت‌گذاری آن‌ها به‌عنوان دیده‌نشده" + }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", "title": "Hides the artificial intelligence summary below videos" diff --git a/public/locales/fr-FR.json b/public/locales/fr-FR.json index dbfd082fe..abd3d2acd 100644 --- a/public/locales/fr-FR.json +++ b/public/locales/fr-FR.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "Activer les boutons de gestion de playlist", + "title": "Ajoute des boutons aux éléments de playlist pour supprimer des vidéos de la playlist ou les marquer comme non vues" + }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", "title": "Hides the artificial intelligence summary below videos" diff --git a/public/locales/he-IL.json b/public/locales/he-IL.json index 42ca4c630..02943e70e 100644 --- a/public/locales/he-IL.json +++ b/public/locales/he-IL.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "הפעל כפתורי ניהול רשימות השמעה", + "title": "מוסיף כפתורים לפריטי רשימת השמעה להסרת סרטונים או לסימונם כ'לא נצפה'" + }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", "title": "Hides the artificial intelligence summary below videos" diff --git a/public/locales/hi-IN.json b/public/locales/hi-IN.json index d1bf63c42..798b41699 100644 --- a/public/locales/hi-IN.json +++ b/public/locales/hi-IN.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "प्लेलिस्ट प्रबंधन बटन सक्षम करें", + "title": "प्लेलिस्ट आइटम में ऐसे बटन जोड़ता है जिनसे वीडियो को प्लेलिस्ट से हटाया जा सके या उन्हें 'न देखा हुआ' के रूप में चिह्नित किया जा सके" + }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", "title": "Hides the artificial intelligence summary below videos" diff --git a/public/locales/it-IT.json b/public/locales/it-IT.json index bda8ffdc7..58c96ba2b 100644 --- a/public/locales/it-IT.json +++ b/public/locales/it-IT.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "Abilita pulsanti gestione playlist", + "title": "Aggiunge pulsanti agli elementi della playlist per rimuovere video dalla playlist o contrassegnarli come non visti" + }, "hideArtificialIntelligenceSummary": { "label": "Nascondi riepilogo IA", "title": "Nasconde il riepilogo dell'intelligenza artificiale sotto i video" diff --git a/public/locales/ja-JP.json b/public/locales/ja-JP.json index 204a839da..eac6b1d8a 100644 --- a/public/locales/ja-JP.json +++ b/public/locales/ja-JP.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "プレイリスト管理ボタンを有効にする", + "title": "プレイリストの各項目に、動画をプレイリストから削除したり未視聴としてマークしたりできるボタンを追加します" + }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", "title": "Hides the artificial intelligence summary below videos" diff --git a/public/locales/ko-KR.json b/public/locales/ko-KR.json index a840af8d7..15a3eb116 100644 --- a/public/locales/ko-KR.json +++ b/public/locales/ko-KR.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "재생목록 관리 버튼", + "title": "재생목록 항목에 버튼을 추가하여 재생목록에서 동영상을 제거하거나 시청하지 않음으로 표시할 수 있습니다" + }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", "title": "Hides the artificial intelligence summary below videos" diff --git a/public/locales/nl-NL.json b/public/locales/nl-NL.json index a5d058bda..6a0e3a5e8 100644 --- a/public/locales/nl-NL.json +++ b/public/locales/nl-NL.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "Afspeellijstbeheerknoppen inschakelen", + "title": "Voegt knoppen toe aan afspeellijstitems om video's uit de afspeellijst te verwijderen of als onbe­ke­ken te markeren" + }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", "title": "Hides the artificial intelligence summary below videos" diff --git a/public/locales/pl-PL.json b/public/locales/pl-PL.json index cf3cc4ba8..082e51e9b 100644 --- a/public/locales/pl-PL.json +++ b/public/locales/pl-PL.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "Włącz przyciski zarządzania playlistą", + "title": "Dodaje przyciski do elementów playlisty w celu usuwania filmów z playlisty lub oznaczania ich jako nieobejrzane" + }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", "title": "Hides the artificial intelligence summary below videos" diff --git a/public/locales/pt-BR.json b/public/locales/pt-BR.json index b68a6387e..6ebcdaedd 100644 --- a/public/locales/pt-BR.json +++ b/public/locales/pt-BR.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "Ativar botões de gerenciamento de playlist", + "title": "Adiciona botões aos itens da playlist para remover vídeos da playlist ou marcá-los como não assistidos" + }, "hideArtificialIntelligenceSummary": { "label": "Ocultar resumo IA", "title": "Oculta a seção de resumo IA de um vídeo" diff --git a/public/locales/ru-RU.json b/public/locales/ru-RU.json index b2f8df7cd..c7849e0af 100644 --- a/public/locales/ru-RU.json +++ b/public/locales/ru-RU.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "Включить кнопки управления плейлистом", + "title": "Добавляет кнопки к элементам плейлиста для удаления видео из плейлиста или отметки их как непросмотренных" + }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", "title": "Hides the artificial intelligence summary below videos" diff --git a/public/locales/sv-SE.json b/public/locales/sv-SE.json index f21f17c15..4e00a7555 100644 --- a/public/locales/sv-SE.json +++ b/public/locales/sv-SE.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "Aktivera spellisthanteringsknappar", + "title": "Lägger till knappar i objekt i spellistan för att ta bort videor från spellistan eller markera dem som osedda" + }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", "title": "Hides the artificial intelligence summary below videos" diff --git a/public/locales/tr-TR.json b/public/locales/tr-TR.json index 95703aae0..34e93cabe 100644 --- a/public/locales/tr-TR.json +++ b/public/locales/tr-TR.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "Çalma listesi yönetim düğmelerini etkinleştir", + "title": "Çalma listesi öğelerine videoları çalma listesinden kaldırmak veya izlenmemiş olarak işaretlemek için düğmeler ekler" + }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", "title": "Hides the artificial intelligence summary below videos" diff --git a/public/locales/uk-UA.json b/public/locales/uk-UA.json index 9630a657b..e27e354a5 100644 --- a/public/locales/uk-UA.json +++ b/public/locales/uk-UA.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "Увімкнути кнопки керування плейлистом", + "title": "Додає кнопки до елементів плейлиста для видалення відео з плейлиста або позначення їх як непереглянутих" + }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", "title": "Hides the artificial intelligence summary below videos" diff --git a/public/locales/vi-VN.json b/public/locales/vi-VN.json index aaba3fb7e..f94af09bc 100644 --- a/public/locales/vi-VN.json +++ b/public/locales/vi-VN.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "Bật nút quản lý danh sách phát", + "title": "Thêm nút vào các mục danh sách phát để xóa video khỏi danh sách phát hoặc đánh dấu chúng là chưa xem" + }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", "title": "Hides the artificial intelligence summary below videos" diff --git a/public/locales/zh-CN.json b/public/locales/zh-CN.json index d3e067bc2..1cc52297a 100644 --- a/public/locales/zh-CN.json +++ b/public/locales/zh-CN.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "启用播放列表管理按钮", + "title": "为播放列表项添加按钮,用于从播放列表中删除视频或将其标记为未观看" + }, "hideArtificialIntelligenceSummary": { "label": "隐藏 AI 摘要", "title": "隐藏视频下方的人工智能摘要" diff --git a/public/locales/zh-TW.json b/public/locales/zh-TW.json index 515c72f09..27335b86b 100644 --- a/public/locales/zh-TW.json +++ b/public/locales/zh-TW.json @@ -296,6 +296,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enablePlaylistManagementButtons": { + "label": "啟用播放清單管理按鈕", + "title": "為播放清單項目添加按鈕,用於從播放清單中刪除影片或將其標記為未觀看" + }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", "title": "Hides the artificial intelligence summary below videos" diff --git a/src/components/Settings/Settings.tsx b/src/components/Settings/Settings.tsx index 1206a4046..9f9b08157 100644 --- a/src/components/Settings/Settings.tsx +++ b/src/components/Settings/Settings.tsx @@ -773,6 +773,14 @@ export default function Settings() { title={t("settings.sections.miscellaneous.features.defaultToOriginalAudioTrack.title")} type="checkbox" /> + diff --git a/src/features/playlistManagementButtons/index.css b/src/features/playlistManagementButtons/index.css new file mode 100644 index 000000000..4787e4004 --- /dev/null +++ b/src/features/playlistManagementButtons/index.css @@ -0,0 +1,16 @@ +.yte-remove-button, +.yte-reset-button { + background: none; + border-radius: 50%; + border: none; + cursor: pointer; + margin-right: 18px; + padding: 12px; + vertical-align: top; +} + +.yte-remove-button:hover, +.yte-reset-button:hover { + background: black; + transition: background 0.2s; +} diff --git a/src/features/playlistManagementButtons/index.ts b/src/features/playlistManagementButtons/index.ts new file mode 100644 index 000000000..7a3e85900 --- /dev/null +++ b/src/features/playlistManagementButtons/index.ts @@ -0,0 +1,105 @@ +import React from "react"; +import { renderToString } from "react-dom/server"; +import { FaUndoAlt } from "react-icons/fa"; +import { FaTrash } from "react-icons/fa6"; +import { Innertube } from "youtubei.js/web"; + +import "./index.css"; +import { isPlaylistPage, waitForSpecificMessage } from "@/src/utils/utilities"; + +interface YTDPlaylistVideoRenderer extends HTMLElement { + playlistVideoId: string; +} + +let playlistObserver: MutationObserver | null = null; + +export async function disablePlaylistManagementButtons() { + if (playlistObserver) { + playlistObserver.disconnect(); + playlistObserver = null; + } + + const playlistItems = document.querySelectorAll("ytd-playlist-panel-video-renderer, ytd-playlist-video-renderer"); + playlistItems.forEach((item) => { + item.querySelectorAll(".yte-remove-button, .yte-reset-button").forEach((btn) => btn.remove()); + }); +} + +export async function enablePlaylistManagementButtons() { + const { + data: { + options: { enable_playlist_management_buttons } + } + } = await waitForSpecificMessage("options", "request_data", "content"); + + if (!enable_playlist_management_buttons || !isPlaylistPage()) { + return; + } + + const youtube = await Innertube.create({ + cookie: document.cookie, + fetch: (...args) => fetch(...args) + }); + + function addButtonToPlaylistItems() { + const playlistItems = document.querySelectorAll("ytd-playlist-panel-video-renderer, ytd-playlist-video-renderer"); + playlistItems.forEach((item) => { + if (item.querySelector(".yte-remove-button") || item.querySelector(".yte-reset-button")) { + return; + } + + const { playlistVideoId: setVideoId } = item as YTDPlaylistVideoRenderer; + if (!setVideoId) { + return; + } + + const removeButton = document.createElement("button"); + removeButton.insertAdjacentHTML("afterbegin", renderToString(React.createElement(FaTrash, { color: "red", size: 18 }))); + removeButton.className = "yte-remove-button"; + removeButton.title = "Remove video"; + removeButton.onclick = async () => { + try { + const playlistId = new URLSearchParams(window.location.search).get("list") as string; + await youtube.playlist.removeVideos(playlistId, [setVideoId]); + item.remove(); + } catch (err) { + console.error("Failed to remove video:", err); + } + }; + + const resetButton = document.createElement("button"); + resetButton.insertAdjacentHTML("afterbegin", renderToString(React.createElement(FaUndoAlt, { color: "red", size: 18 }))); + resetButton.className = "yte-reset-button"; + resetButton.title = "Mark as unwatched"; + resetButton.onclick = async () => { + try { + const history = await youtube.getHistory(); + await history.removeVideo(setVideoId); + item.querySelector("#overlays ytd-thumbnail-overlay-resume-playback-renderer")?.remove(); + } catch (err) { + console.error("Failed to reset video:", err); + } + }; + + const menu = item.querySelector("#menu"); + if (menu) { + menu.prepend(removeButton); + menu.prepend(resetButton); + Array.from(menu.children).forEach((child) => { + (child as HTMLElement).style.display = "inline-flex"; + }); + } + }); + } + + function observePlaylist() { + addButtonToPlaylistItems(); + playlistObserver = new MutationObserver(addButtonToPlaylistItems); + playlistObserver.observe(document.body, { childList: true, subtree: true }); + } + + window.addEventListener("DOMContentLoaded", observePlaylist); + if (document.readyState === "complete" || document.readyState === "interactive") { + observePlaylist(); + } +} diff --git a/src/pages/content/index.ts b/src/pages/content/index.ts index 7dc0f86c2..c59b5e6f4 100644 --- a/src/pages/content/index.ts +++ b/src/pages/content/index.ts @@ -401,6 +401,11 @@ const storageChangeHandler = async (changes: StorageChanges, areaName: string) = playlistLengthEnabled: newValue }); }, + enable_playlist_management_buttons: (__oldValue, newValue) => { + sendExtensionOnlyMessage("playlistManagementButtonsChange", { + playlistManagementButtonsEnabled: newValue + }); + }, enable_redirect_remover: (__oldValue, newValue) => { sendExtensionOnlyMessage("removeRedirectChange", { removeRedirectEnabled: newValue diff --git a/src/pages/embedded/index.ts b/src/pages/embedded/index.ts index 914fa5db1..4cf89f207 100644 --- a/src/pages/embedded/index.ts +++ b/src/pages/embedded/index.ts @@ -58,6 +58,7 @@ import { import setPlayerQuality from "@/src/features/playerQuality"; import { restorePlayerSpeed, setPlayerSpeed, setupPlaybackSpeedChangeListener } from "@/src/features/playerSpeed"; import { disablePlaylistLength, enablePlaylistLength } from "@/src/features/playlistLength"; +import { disablePlaylistManagementButtons, enablePlaylistManagementButtons } from "@/src/features/playlistManagementButtons"; import { setupRemainingTime as enableRemainingTime, removeRemainingTimeDisplay } from "@/src/features/remainingTime"; import enableRememberVolume from "@/src/features/rememberVolume"; import enableRemoveRedirect from "@/src/features/removeRedirect"; @@ -203,7 +204,8 @@ const enableFeatures = () => { enablePlaylistLength(), enableAutomaticallyDisableClosedCaptions(), enableAutomaticallyDisableAmbientMode(), - enableDefaultToOriginalAudioTrack() + enableDefaultToOriginalAudioTrack(), + enablePlaylistManagementButtons() ]); // Enable feature menu before calling button functions await enableFeatureMenu(); @@ -887,6 +889,17 @@ window.addEventListener("DOMContentLoaded", function () { await enablePlaylistLength(); break; } + case "playlistManagementButtonsChange": { + const { + data: { playlistManagementButtonsEnabled } + } = message; + if (playlistManagementButtonsEnabled) { + await enablePlaylistManagementButtons(); + } else { + await disablePlaylistManagementButtons(); + } + break; + } case "remainingTimeChange": { const { data: { remainingTimeEnabled } diff --git a/src/types/index.ts b/src/types/index.ts index 4c93fa9e2..de6580a90 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -263,6 +263,7 @@ export type configuration = { enable_pausing_background_players: boolean; enable_playback_speed_buttons: boolean; enable_playlist_length: boolean; + enable_playlist_management_buttons: boolean; enable_redirect_remover: boolean; enable_remaining_time: boolean; enable_remember_last_volume: boolean; @@ -423,6 +424,7 @@ export type ExtensionSendOnlyMessageMappings = { playerSpeedChange: DataResponseMessage<"playerSpeedChange", { enableForcedPlaybackSpeed: boolean; playerSpeed?: number }>; playlistLengthChange: DataResponseMessage<"playlistLengthChange", { playlistLengthEnabled: boolean }>; playlistLengthGetMethodChange: DataResponseMessage<"playlistLengthGetMethodChange", undefined>; + playlistManagementButtonsChange: DataResponseMessage<"playlistManagementButtonsChange", { playlistManagementButtonsEnabled: boolean }>; playlistWatchTimeGetMethodChange: DataResponseMessage<"playlistWatchTimeGetMethodChange", undefined>; remainingTimeChange: DataResponseMessage<"remainingTimeChange", { remainingTimeEnabled: boolean }>; rememberVolumeChange: DataResponseMessage<"rememberVolumeChange", { rememberVolumeEnabled: boolean }>; diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 7cf895e99..30e75dbf9 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -79,6 +79,7 @@ export const defaultConfiguration = { enable_pausing_background_players: false, enable_playback_speed_buttons: false, enable_playlist_length: false, + enable_playlist_management_buttons: false, enable_redirect_remover: false, enable_remaining_time: false, enable_remember_last_volume: false, @@ -180,6 +181,7 @@ export const configurationImportSchema: TypeToPartialZodSchema< enable_pausing_background_players: z.boolean().optional(), enable_playback_speed_buttons: z.boolean().optional(), enable_playlist_length: z.boolean().optional(), + enable_playlist_management_buttons: z.boolean().optional(), enable_redirect_remover: z.boolean().optional(), enable_remaining_time: z.boolean().optional(), enable_remember_last_volume: z.boolean().optional(), From e26fcf305c2c0de844a3d420eb4c2338f7f3a8e4 Mon Sep 17 00:00:00 2001 From: Dave Nicolson Date: Mon, 1 Sep 2025 22:41:45 +0200 Subject: [PATCH 02/70] Export getPlaylistId() --- src/features/playlistLength/utils.ts | 8 ++++---- src/features/playlistManagementButtons/index.ts | 4 +++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/features/playlistLength/utils.ts b/src/features/playlistLength/utils.ts index 138f8d75f..539fa4a49 100644 --- a/src/features/playlistLength/utils.ts +++ b/src/features/playlistLength/utils.ts @@ -239,6 +239,10 @@ export async function getPlaylistDuration(playlistVideos: YouTubePlaylistItem[], throw new Error(`Error fetching playlist duration: ${error}`); } } +export function getPlaylistId(): null | string { + const playlistId = new URLSearchParams(window.location.search).get("list"); + return playlistId; +} export function getPlaylistItemsFromPlaylistPage() { const playlistItems = document.querySelector("ytd-playlist-video-list-renderer div#contents"); if (!playlistItems) return []; @@ -376,10 +380,6 @@ async function getDurationFromAPI(playlistId: string, apiKey: string): Promise { try { - const playlistId = new URLSearchParams(window.location.search).get("list") as string; + const playlistId = getPlaylistId()!; await youtube.playlist.removeVideos(playlistId, [setVideoId]); item.remove(); } catch (err) { From fab828789c1641673a51f06bf74f83ff94a11f36 Mon Sep 17 00:00:00 2001 From: Dave Nicolson Date: Fri, 5 Sep 2025 18:58:25 +0200 Subject: [PATCH 03/70] Fix TrustedHTML error --- src/features/playlistManagementButtons/index.ts | 10 ++++++++-- src/global.d.ts | 4 ++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/features/playlistManagementButtons/index.ts b/src/features/playlistManagementButtons/index.ts index b01217d97..1bf2e21f1 100644 --- a/src/features/playlistManagementButtons/index.ts +++ b/src/features/playlistManagementButtons/index.ts @@ -13,6 +13,12 @@ interface YTDPlaylistVideoRenderer extends HTMLElement { playlistVideoId: string; } +if (window.trustedTypes && !window.trustedTypes.defaultPolicy) { + window.trustedTypes.createPolicy("default", { + createHTML: (input: string) => input + }); +} + let playlistObserver: MutationObserver | null = null; export async function disablePlaylistManagementButtons() { @@ -56,7 +62,7 @@ export async function enablePlaylistManagementButtons() { } const removeButton = document.createElement("button"); - removeButton.insertAdjacentHTML("afterbegin", renderToString(React.createElement(FaTrash, { color: "red", size: 18 }))); + removeButton.innerHTML = renderToString(React.createElement(FaTrash, { color: "red", size: 18 })); removeButton.className = "yte-remove-button"; removeButton.title = "Remove video"; removeButton.onclick = async () => { @@ -70,7 +76,7 @@ export async function enablePlaylistManagementButtons() { }; const resetButton = document.createElement("button"); - resetButton.insertAdjacentHTML("afterbegin", renderToString(React.createElement(FaUndoAlt, { color: "red", size: 18 }))); + resetButton.innerHTML = renderToString(React.createElement(FaUndoAlt, { color: "red", size: 18 })); resetButton.className = "yte-reset-button"; resetButton.title = "Mark as unwatched"; resetButton.onclick = async () => { diff --git a/src/global.d.ts b/src/global.d.ts index bf647e3c6..061474dd7 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -85,6 +85,10 @@ declare global { cachedPlaylistDuration: null | { playlistId: string; totalTimeSeconds: number }; gainNode: GainNode; i18nextInstance: i18nInstanceType; + trustedTypes?: { + createPolicy(name: string, options: { createHTML: (input: string) => string }); + defaultPolicy; + }; webkitAudioContext: AudioContext; } } From d167b47fc04a5b793d7683224f328e9766261d2a Mon Sep 17 00:00:00 2001 From: Dave Nicolson Date: Sat, 6 Sep 2025 00:08:05 +0200 Subject: [PATCH 04/70] Attempt to query legitimate playlist items --- src/features/playlistManagementButtons/index.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/features/playlistManagementButtons/index.ts b/src/features/playlistManagementButtons/index.ts index 1bf2e21f1..8b61b6f60 100644 --- a/src/features/playlistManagementButtons/index.ts +++ b/src/features/playlistManagementButtons/index.ts @@ -19,6 +19,8 @@ if (window.trustedTypes && !window.trustedTypes.defaultPolicy) { }); } +const PLAYLIST_ITEM_SELECTOR = "ytd-playlist-panel-video-renderer, ytd-playlist-video-renderer"; + let playlistObserver: MutationObserver | null = null; export async function disablePlaylistManagementButtons() { @@ -27,7 +29,7 @@ export async function disablePlaylistManagementButtons() { playlistObserver = null; } - const playlistItems = document.querySelectorAll("ytd-playlist-panel-video-renderer, ytd-playlist-video-renderer"); + const playlistItems = document.querySelectorAll(PLAYLIST_ITEM_SELECTOR); playlistItems.forEach((item) => { item.querySelectorAll(".yte-remove-button, .yte-reset-button").forEach((btn) => btn.remove()); }); @@ -50,9 +52,9 @@ export async function enablePlaylistManagementButtons() { }); function addButtonToPlaylistItems() { - const playlistItems = document.querySelectorAll("ytd-playlist-panel-video-renderer, ytd-playlist-video-renderer"); + const playlistItems = document.querySelectorAll(PLAYLIST_ITEM_SELECTOR); playlistItems.forEach((item) => { - if (item.querySelector(".yte-remove-button") || item.querySelector(".yte-reset-button")) { + if (!item.querySelector("#index-container") || item.querySelector(".yte-remove-button") || item.querySelector(".yte-reset-button")) { return; } From ea1feb4468f0521d3287994556ad0555d3c7d923 Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Thu, 25 Sep 2025 18:38:36 -0400 Subject: [PATCH 05/70] ci: adjust workflow --- .github/workflows/release.yml | 59 +++++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 13 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e600e89b0..d3ba72f22 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,21 +1,39 @@ name: Release -"on": + +on: push: branches: - main + +concurrency: + group: release + cancel-in-progress: true + jobs: build-and-release: runs-on: ubuntu-latest permissions: write-all + steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 + - name: Set up Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: node-version: 20 + + - name: Cache dependencies + uses: actions/cache@v4 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + - name: Install dependencies run: npm ci + - name: Run Semantic Release run: | touch .env @@ -24,21 +42,36 @@ jobs: env: GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}" CROWDIN_TOKEN: "${{ secrets.CROWDIN_TOKEN }}" + + - name: Configure Git identity + run: | + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git remote set-url origin https://x-access-token:${GH_TOKEN}@github.com/${{ github.repository }}.git + env: + GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}" + + - name: Fetch all branches + run: git fetch --all + - name: Push changes to main branch + if: success() run: | - # Ensure we are on the main branch git checkout main git add ./src/i18n/index.ts - git commit -m "Update i18n" - # Push local changes to the main branch - git push origin main + if git diff --cached --quiet; then + echo "No changes to commit on main." + else + git commit -m "Update i18n" --no-verify + git push origin main + fi + env: + GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}" + - name: Merge changes from main into dev + if: success() run: | - # Switch to the dev branch git checkout dev - - # Merge changes from the main branch into dev - git merge main - - # Push changes to the dev branch + git pull --rebase origin dev + git merge origin/main --no-edit || echo "No merge necessary" git push origin dev From 7d6aad988a4369384d4535c9223ae33671f4c840 Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Fri, 26 Sep 2025 18:38:16 -0400 Subject: [PATCH 06/70] refactor(screenshot button): Improve user experience by indicating save format can't be configured with 'Clipboard' save type --- public/locales/en-US.json | 3 ++- public/locales/en-US.json.d.ts | 1 + src/components/Settings/Settings.tsx | 10 +++++++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/public/locales/en-US.json b/public/locales/en-US.json index d6ca73c13..b9be9d0a1 100644 --- a/public/locales/en-US.json +++ b/public/locales/en-US.json @@ -135,7 +135,8 @@ "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { "deepDarkCustomTheme": "Set theme to 'Custom' to configure this option.", - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option.", + "screenshotButtonFileFormat": "Set screenshot save type to 'File' to configure this option" } }, "scrollForMoreSettings": "Scroll for more settings", diff --git a/public/locales/en-US.json.d.ts b/public/locales/en-US.json.d.ts index 91a8dea5f..626f245a7 100644 --- a/public/locales/en-US.json.d.ts +++ b/public/locales/en-US.json.d.ts @@ -78,6 +78,7 @@ interface EnUS { specificOption: { deepDarkCustomTheme: "Set theme to 'Custom' to configure this option."; featureMenu: "Configure at least one button to be placed in the feature menu to configure this option."; + screenshotButtonFileFormat: "Set screenshot save type to 'File' to configure this option"; }; }; scrollForMoreSettings: "Scroll for more settings"; diff --git a/src/components/Settings/Settings.tsx b/src/components/Settings/Settings.tsx index 1d7dd1f9e..cf88db174 100644 --- a/src/components/Settings/Settings.tsx +++ b/src/components/Settings/Settings.tsx @@ -472,6 +472,10 @@ export default function Settings() { type: "singular", value: "settings.sections.screenshotButton.enable.label" } satisfies parentSetting; + const screenshotButtonSaveAsClipboardParentSetting = { + type: "specificOption", + value: "settings.optionDisabled.specificOption.screenshotButtonFileFormat" + } satisfies parentSetting; const playlistLengthParentSetting = { type: "singular", value: "settings.sections.playlistLength.enable.label" @@ -1122,7 +1126,11 @@ export default function Settings() { label={t("settings.sections.screenshotButton.selectFormat.label")} onChange={setValueOption("screenshot_format")} options={ScreenshotFormatOptions} - parentSetting={screenshotButtonParentSetting} + parentSetting={ + settings.enable_screenshot_button?.toString() === "true" && settings.screenshot_save_as?.toString() === "clipboard" ? + screenshotButtonSaveAsClipboardParentSetting + : screenshotButtonParentSetting + } selectedOption={getSelectedOption("screenshot_format")} title={t("settings.sections.screenshotButton.selectFormat.title")} type="select" From a78eb165c86e44d0c819235afdafe1e885260459 Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Fri, 26 Sep 2025 18:40:18 -0400 Subject: [PATCH 07/70] fix(screenshot button): File mimeType not matching file extension --- src/features/screenshotButton/index.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/features/screenshotButton/index.ts b/src/features/screenshotButton/index.ts index 448453525..feb381147 100644 --- a/src/features/screenshotButton/index.ts +++ b/src/features/screenshotButton/index.ts @@ -25,7 +25,8 @@ async function takeScreenshot(videoElement: HTMLVideoElement) { options: { screenshot_format, screenshot_save_as } } } = await waitForSpecificMessage("options", "request_data", "content"); - const blob = await new Promise>((resolve) => canvas.toBlob(resolve, "image/png")); + const mimeType = screenshot_save_as === "file" ? `image/${screenshot_format}` : "image/png"; + const blob = await new Promise>((resolve) => canvas.toBlob(resolve, mimeType)); if (!blob) return; switch (screenshot_save_as) { case "clipboard": { @@ -39,11 +40,16 @@ async function takeScreenshot(videoElement: HTMLVideoElement) { text: window.i18nextInstance.t("pages.content.features.screenshotButton.copiedToClipboard") }); listener(); - const clipboardImage = new ClipboardItem({ "image/png": blob }); - void navigator.clipboard.write([clipboardImage]); - setTimeout(() => { + try { + const clipboardImage = new ClipboardItem({ [mimeType]: blob }); + await navigator.clipboard.write([clipboardImage]); + setTimeout(() => { + remove(); + }, 1200); + } catch (err) { remove(); - }, 1200); + console.log(err); + } break; } case "file": { From 10b6415f412e1526ab355e72ab06af9b731fc343 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Sep 2025 01:06:41 +0000 Subject: [PATCH 08/70] build(deps-dev): bump semantic-release from 24.2.7 to 24.2.9 Bumps [semantic-release](https://github.com/semantic-release/semantic-release) from 24.2.7 to 24.2.9. - [Release notes](https://github.com/semantic-release/semantic-release/releases) - [Commits](https://github.com/semantic-release/semantic-release/compare/v24.2.7...v24.2.9) --- updated-dependencies: - dependency-name: semantic-release dependency-version: 24.2.9 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 19e9b5bc4..c73048142 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "youtube-enhancer", - "version": "1.27.0", + "version": "1.28.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "youtube-enhancer", - "version": "1.27.0", + "version": "1.28.1", "license": "MIT", "dependencies": { "@formkit/auto-animate": "^0.9.0", @@ -8086,11 +8086,13 @@ } }, "node_modules/hook-std": { - "version": "3.0.0", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-4.0.0.tgz", + "integrity": "sha512-IHI4bEVOt3vRUDJ+bFA9VUJlo7SzvFARPNLw75pqSmAOP2HmTWfFJtPvLBrDrlgjEYXY9zs7SFdHPQaJShkSCQ==", "dev": true, "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -13278,7 +13280,9 @@ "license": "MIT" }, "node_modules/semantic-release": { - "version": "24.2.7", + "version": "24.2.9", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-24.2.9.tgz", + "integrity": "sha512-phCkJ6pjDi9ANdhuF5ElS10GGdAKY6R1Pvt9lT3SFhOwM4T7QZE7MLpBDbNruUx/Q3gFD92/UOFringGipRqZA==", "dev": true, "license": "MIT", "dependencies": { @@ -13296,7 +13300,7 @@ "find-versions": "^6.0.0", "get-stream": "^6.0.0", "git-log-parser": "^1.2.0", - "hook-std": "^3.0.0", + "hook-std": "^4.0.0", "hosted-git-info": "^8.0.0", "import-from-esm": "^2.0.0", "lodash-es": "^4.17.21", @@ -13308,7 +13312,7 @@ "read-package-up": "^11.0.0", "resolve-from": "^5.0.0", "semver": "^7.3.2", - "semver-diff": "^4.0.0", + "semver-diff": "^5.0.0", "signale": "^1.2.1", "yargs": "^17.5.1" }, @@ -13552,7 +13556,10 @@ } }, "node_modules/semver-diff": { - "version": "4.0.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-5.0.0.tgz", + "integrity": "sha512-0HbGtOm+S7T6NGQ/pxJSJipJvc4DK3FcRVMRkhsIwJDJ4Jcz5DQC1cPPzB5GhzyHjwttW878HaWQq46CkL3cqg==", + "deprecated": "Deprecated as the semver package now supports this built-in.", "dev": true, "license": "MIT", "dependencies": { From 85f50e435adbb7e2618363491ebcee48b54b522b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Sep 2025 01:06:58 +0000 Subject: [PATCH 09/70] build(deps): bump @rollup/rollup-linux-x64-gnu from 4.52.0 to 4.52.3 Bumps [@rollup/rollup-linux-x64-gnu](https://github.com/rollup/rollup) from 4.52.0 to 4.52.3. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v4.52.0...v4.52.3) --- updated-dependencies: - dependency-name: "@rollup/rollup-linux-x64-gnu" dependency-version: 4.52.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 19e9b5bc4..b05540980 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,17 @@ { "name": "youtube-enhancer", - "version": "1.27.0", + "version": "1.28.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "youtube-enhancer", - "version": "1.27.0", + "version": "1.28.1", "license": "MIT", "dependencies": { "@formkit/auto-animate": "^0.9.0", "@monaco-editor/react": "^4.6.0", + "@rollup/rollup-linux-x64-gnu": "^4.14.3", "@tanstack/react-query": "^5.18.0", "dotenv": "^17.2.1", "globals": "^16.2.0", @@ -1040,9 +1041,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.0.tgz", - "integrity": "sha512-nmSVN+F2i1yKZ7rJNKO3G7ZzmxJgoQBQZ/6c4MuS553Grmr7WqR7LLDcYG53Z2m9409z3JLt4sCOhLdbKQ3HmA==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.3.tgz", + "integrity": "sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==", "cpu": [ "x64" ], From a31e202da070129a0bfdd85f30097112b1305f2f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Sep 2025 01:07:05 +0000 Subject: [PATCH 10/70] build(deps-dev): bump fs-extra from 11.3.0 to 11.3.2 Bumps [fs-extra](https://github.com/jprichardson/node-fs-extra) from 11.3.0 to 11.3.2. - [Changelog](https://github.com/jprichardson/node-fs-extra/blob/master/CHANGELOG.md) - [Commits](https://github.com/jprichardson/node-fs-extra/compare/11.3.0...11.3.2) --- updated-dependencies: - dependency-name: fs-extra dependency-version: 11.3.2 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 19e9b5bc4..ecda796fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "youtube-enhancer", - "version": "1.27.0", + "version": "1.28.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "youtube-enhancer", - "version": "1.27.0", + "version": "1.28.1", "license": "MIT", "dependencies": { "@formkit/auto-animate": "^0.9.0", @@ -7693,7 +7693,9 @@ } }, "node_modules/fs-extra": { - "version": "11.3.0", + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", "dev": true, "license": "MIT", "dependencies": { From 4ede1e0b4b36ae89d8c8085ab94fb8419208be41 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Sep 2025 01:07:13 +0000 Subject: [PATCH 11/70] build(deps-dev): bump @types/react from 19.1.13 to 19.1.15 Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 19.1.13 to 19.1.15. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) --- updated-dependencies: - dependency-name: "@types/react" dependency-version: 19.1.15 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 19e9b5bc4..34110f3fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "youtube-enhancer", - "version": "1.27.0", + "version": "1.28.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "youtube-enhancer", - "version": "1.27.0", + "version": "1.28.1", "license": "MIT", "dependencies": { "@formkit/auto-animate": "^0.9.0", @@ -4756,9 +4756,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.1.13", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.13.tgz", - "integrity": "sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ==", + "version": "19.1.15", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.15.tgz", + "integrity": "sha512-+kLxJpaJzXybyDyFXYADyP1cznTO8HSuBpenGlnKOAkH4hyNINiywvXS/tGJhsrGGP/gM185RA3xpjY0Yg4erA==", "dev": true, "license": "MIT", "dependencies": { From edf089e0491ed550548dc50383d64f9a5576dffe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Sep 2025 01:07:31 +0000 Subject: [PATCH 12/70] build(deps-dev): bump @eslint/compat from 1.3.1 to 1.4.0 Bumps [@eslint/compat](https://github.com/eslint/rewrite/tree/HEAD/packages/compat) from 1.3.1 to 1.4.0. - [Release notes](https://github.com/eslint/rewrite/releases) - [Changelog](https://github.com/eslint/rewrite/blob/main/packages/compat/CHANGELOG.md) - [Commits](https://github.com/eslint/rewrite/commits/compat-v1.4.0/packages/compat) --- updated-dependencies: - dependency-name: "@eslint/compat" dependency-version: 1.4.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 19e9b5bc4..870bc4867 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "youtube-enhancer", - "version": "1.27.0", + "version": "1.28.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "youtube-enhancer", - "version": "1.27.0", + "version": "1.28.1", "license": "MIT", "dependencies": { "@formkit/auto-animate": "^0.9.0", @@ -281,9 +281,14 @@ } }, "node_modules/@eslint/compat": { - "version": "1.3.1", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.4.0.tgz", + "integrity": "sha512-DEzm5dKeDBPm3r08Ixli/0cmxr8LkRdwxMRUIJBlSCpAwSrvFEJpVBzV+66JhDxiaqKxnRzCXhtiMiczF7Hglg==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -296,6 +301,19 @@ } } }, + "node_modules/@eslint/compat/node_modules/@eslint/core": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/config-array": { "version": "0.21.0", "dev": true, From 388f90262a564d11ea8ace2b1a1f1998ffc49a9b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Oct 2025 01:05:23 +0000 Subject: [PATCH 13/70] build(deps-dev): bump @eslint/js from 9.36.0 to 9.37.0 Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.36.0 to 9.37.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Commits](https://github.com/eslint/eslint/commits/v9.37.0/packages/js) --- updated-dependencies: - dependency-name: "@eslint/js" dependency-version: 9.37.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 327a447f0..89b2ca6bf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,6 @@ "dependencies": { "@formkit/auto-animate": "^0.9.0", "@monaco-editor/react": "^4.6.0", - "@rollup/rollup-linux-x64-gnu": "^4.14.3", "@tanstack/react-query": "^5.18.0", "dotenv": "^17.2.1", "globals": "^16.2.0", @@ -425,9 +424,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.36.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.36.0.tgz", - "integrity": "sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==", + "version": "9.37.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.37.0.tgz", + "integrity": "sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==", "dev": true, "license": "MIT", "engines": { @@ -7331,6 +7330,19 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/@eslint/js": { + "version": "9.36.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.36.0.tgz", + "integrity": "sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", "dev": true, From 435aa5a03cfcc3c792f6f0a4a8d5338f6858661a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Oct 2025 01:05:31 +0000 Subject: [PATCH 14/70] build(deps-dev): bump prettier from 3.4.2 to 3.6.2 Bumps [prettier](https://github.com/prettier/prettier) from 3.4.2 to 3.6.2. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/3.4.2...3.6.2) --- updated-dependencies: - dependency-name: prettier dependency-version: 3.6.2 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 327a447f0..a64c893fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,6 @@ "dependencies": { "@formkit/auto-animate": "^0.9.0", "@monaco-editor/react": "^4.6.0", - "@rollup/rollup-linux-x64-gnu": "^4.14.3", "@tanstack/react-query": "^5.18.0", "dotenv": "^17.2.1", "globals": "^16.2.0", @@ -12753,7 +12752,9 @@ } }, "node_modules/prettier": { - "version": "3.4.2", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", "bin": { From 4ac9a2fe6d2457edec4c9c5d884a26be685755b8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Oct 2025 01:05:38 +0000 Subject: [PATCH 15/70] build(deps): bump dotenv from 17.2.1 to 17.2.3 Bumps [dotenv](https://github.com/motdotla/dotenv) from 17.2.1 to 17.2.3. - [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md) - [Commits](https://github.com/motdotla/dotenv/compare/v17.2.1...v17.2.3) --- updated-dependencies: - dependency-name: dotenv dependency-version: 17.2.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 327a447f0..98808512a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,6 @@ "dependencies": { "@formkit/auto-animate": "^0.9.0", "@monaco-editor/react": "^4.6.0", - "@rollup/rollup-linux-x64-gnu": "^4.14.3", "@tanstack/react-query": "^5.18.0", "dotenv": "^17.2.1", "globals": "^16.2.0", @@ -6406,7 +6405,9 @@ } }, "node_modules/dotenv": { - "version": "17.2.1", + "version": "17.2.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", + "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", "license": "BSD-2-Clause", "engines": { "node": ">=12" From 970d4ae6a190077cfb80a5bcf1f38e617afe5f13 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Oct 2025 01:05:59 +0000 Subject: [PATCH 16/70] build(deps-dev): bump typescript-eslint from 8.42.0 to 8.45.0 Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.42.0 to 8.45.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.45.0/packages/typescript-eslint) --- updated-dependencies: - dependency-name: typescript-eslint dependency-version: 8.45.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 123 +++++++++++++++++++++++----------------------- 1 file changed, 61 insertions(+), 62 deletions(-) diff --git a/package-lock.json b/package-lock.json index 327a447f0..2e8a39058 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,6 @@ "dependencies": { "@formkit/auto-animate": "^0.9.0", "@monaco-editor/react": "^4.6.0", - "@rollup/rollup-linux-x64-gnu": "^4.14.3", "@tanstack/react-query": "^5.18.0", "dotenv": "^17.2.1", "globals": "^16.2.0", @@ -4820,17 +4819,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.42.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.42.0.tgz", - "integrity": "sha512-Aq2dPqsQkxHOLfb2OPv43RnIvfj05nw8v/6n3B2NABIPpHnjQnaLo9QGMTvml+tv4korl/Cjfrb/BYhoL8UUTQ==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.45.0.tgz", + "integrity": "sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.42.0", - "@typescript-eslint/type-utils": "8.42.0", - "@typescript-eslint/utils": "8.42.0", - "@typescript-eslint/visitor-keys": "8.42.0", + "@typescript-eslint/scope-manager": "8.45.0", + "@typescript-eslint/type-utils": "8.45.0", + "@typescript-eslint/utils": "8.45.0", + "@typescript-eslint/visitor-keys": "8.45.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -4844,7 +4843,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.42.0", + "@typescript-eslint/parser": "^8.45.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } @@ -4860,16 +4859,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.42.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.42.0.tgz", - "integrity": "sha512-r1XG74QgShUgXph1BYseJ+KZd17bKQib/yF3SR+demvytiRXrwd12Blnz5eYGm8tXaeRdd4x88MlfwldHoudGg==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.45.0.tgz", + "integrity": "sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.42.0", - "@typescript-eslint/types": "8.42.0", - "@typescript-eslint/typescript-estree": "8.42.0", - "@typescript-eslint/visitor-keys": "8.42.0", + "@typescript-eslint/scope-manager": "8.45.0", + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/typescript-estree": "8.45.0", + "@typescript-eslint/visitor-keys": "8.45.0", "debug": "^4.3.4" }, "engines": { @@ -4885,14 +4884,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.42.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.42.0.tgz", - "integrity": "sha512-vfVpLHAhbPjilrabtOSNcUDmBboQNrJUiNAGoImkZKnMjs2TIcWG33s4Ds0wY3/50aZmTMqJa6PiwkwezaAklg==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.45.0.tgz", + "integrity": "sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.42.0", - "@typescript-eslint/types": "^8.42.0", + "@typescript-eslint/tsconfig-utils": "^8.45.0", + "@typescript-eslint/types": "^8.45.0", "debug": "^4.3.4" }, "engines": { @@ -4907,14 +4906,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.42.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.42.0.tgz", - "integrity": "sha512-51+x9o78NBAVgQzOPd17DkNTnIzJ8T/O2dmMBLoK9qbY0Gm52XJcdJcCl18ExBMiHo6jPMErUQWUv5RLE51zJw==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.45.0.tgz", + "integrity": "sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.42.0", - "@typescript-eslint/visitor-keys": "8.42.0" + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/visitor-keys": "8.45.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4925,9 +4924,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.42.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.42.0.tgz", - "integrity": "sha512-kHeFUOdwAJfUmYKjR3CLgZSglGHjbNTi1H8sTYRYV2xX6eNz4RyJ2LIgsDLKf8Yi0/GL1WZAC/DgZBeBft8QAQ==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.45.0.tgz", + "integrity": "sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==", "dev": true, "license": "MIT", "engines": { @@ -4942,15 +4941,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.42.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.42.0.tgz", - "integrity": "sha512-9KChw92sbPTYVFw3JLRH1ockhyR3zqqn9lQXol3/YbI6jVxzWoGcT3AsAW0mu1MY0gYtsXnUGV/AKpkAj5tVlQ==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.45.0.tgz", + "integrity": "sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.42.0", - "@typescript-eslint/typescript-estree": "8.42.0", - "@typescript-eslint/utils": "8.42.0", + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/typescript-estree": "8.45.0", + "@typescript-eslint/utils": "8.45.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -4967,9 +4966,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.42.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.42.0.tgz", - "integrity": "sha512-LdtAWMiFmbRLNP7JNeY0SqEtJvGMYSzfiWBSmx+VSZ1CH+1zyl8Mmw1TT39OrtsRvIYShjJWzTDMPWZJCpwBlw==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.45.0.tgz", + "integrity": "sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==", "dev": true, "license": "MIT", "engines": { @@ -4981,16 +4980,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.42.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.42.0.tgz", - "integrity": "sha512-ku/uYtT4QXY8sl9EDJETD27o3Ewdi72hcXg1ah/kkUgBvAYHLwj2ofswFFNXS+FL5G+AGkxBtvGt8pFBHKlHsQ==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.45.0.tgz", + "integrity": "sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.42.0", - "@typescript-eslint/tsconfig-utils": "8.42.0", - "@typescript-eslint/types": "8.42.0", - "@typescript-eslint/visitor-keys": "8.42.0", + "@typescript-eslint/project-service": "8.45.0", + "@typescript-eslint/tsconfig-utils": "8.45.0", + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/visitor-keys": "8.45.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -5010,16 +5009,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.42.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.42.0.tgz", - "integrity": "sha512-JnIzu7H3RH5BrKC4NoZqRfmjqCIS1u3hGZltDYJgkVdqAezl4L9d1ZLw+36huCujtSBSAirGINF/S4UxOcR+/g==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.45.0.tgz", + "integrity": "sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.42.0", - "@typescript-eslint/types": "8.42.0", - "@typescript-eslint/typescript-estree": "8.42.0" + "@typescript-eslint/scope-manager": "8.45.0", + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/typescript-estree": "8.45.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5034,13 +5033,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.42.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.42.0.tgz", - "integrity": "sha512-3WbiuzoEowaEn8RSnhJBrxSwX8ULYE9CXaPepS2C2W3NSA5NNIvBaslpBSBElPq0UGr0xVJlXFWOAKIkyylydQ==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.45.0.tgz", + "integrity": "sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.42.0", + "@typescript-eslint/types": "8.45.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -14889,16 +14888,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.42.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.42.0.tgz", - "integrity": "sha512-ozR/rQn+aQXQxh1YgbCzQWDFrsi9mcg+1PM3l/z5o1+20P7suOIaNg515bpr/OYt6FObz/NHcBstydDLHWeEKg==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.45.0.tgz", + "integrity": "sha512-qzDmZw/Z5beNLUrXfd0HIW6MzIaAV5WNDxmMs9/3ojGOpYavofgNAAD/nC6tGV2PczIi0iw8vot2eAe/sBn7zg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.42.0", - "@typescript-eslint/parser": "8.42.0", - "@typescript-eslint/typescript-estree": "8.42.0", - "@typescript-eslint/utils": "8.42.0" + "@typescript-eslint/eslint-plugin": "8.45.0", + "@typescript-eslint/parser": "8.45.0", + "@typescript-eslint/typescript-estree": "8.45.0", + "@typescript-eslint/utils": "8.45.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" From 62c82e3d0300dc681ed1719bc910400d84a9622c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Oct 2025 01:06:05 +0000 Subject: [PATCH 17/70] build(deps): bump monaco-editor from 0.52.2 to 0.53.0 Bumps [monaco-editor](https://github.com/microsoft/monaco-editor) from 0.52.2 to 0.53.0. - [Release notes](https://github.com/microsoft/monaco-editor/releases) - [Changelog](https://github.com/microsoft/monaco-editor/blob/main/CHANGELOG.md) - [Commits](https://github.com/microsoft/monaco-editor/compare/v0.52.2...v0.53.0) --- updated-dependencies: - dependency-name: monaco-editor dependency-version: 0.53.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 18 ++++++++++++++---- package.json | 2 +- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 327a447f0..9b14ef4c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,12 +11,11 @@ "dependencies": { "@formkit/auto-animate": "^0.9.0", "@monaco-editor/react": "^4.6.0", - "@rollup/rollup-linux-x64-gnu": "^4.14.3", "@tanstack/react-query": "^5.18.0", "dotenv": "^17.2.1", "globals": "^16.2.0", "i18next": "^25.3.4", - "monaco-editor": "^0.52.0", + "monaco-editor": "^0.53.0", "react": "^19.1.1", "react-colorful": "^5.6.1", "react-dom": "^19.1.1", @@ -4807,6 +4806,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/trusted-types": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-1.0.6.tgz", + "integrity": "sha512-230RC8sFeHoT6sSUlRO6a8cAnclO06eeiq1QDfiv2FGCLWFvvERWgwIQD4FWqD9A69BN7Lzee4OXwoMVnnsWDw==", + "license": "MIT" + }, "node_modules/@types/webextension-polyfill": { "version": "0.12.3", "resolved": "https://registry.npmjs.org/@types/webextension-polyfill/-/webextension-polyfill-0.12.3.tgz", @@ -9256,8 +9261,13 @@ } }, "node_modules/monaco-editor": { - "version": "0.52.2", - "license": "MIT" + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.53.0.tgz", + "integrity": "sha512-0WNThgC6CMWNXXBxTbaYYcunj08iB5rnx4/G56UOPeL9UVIUGGHA1GR0EWIh9Ebabj7NpCRawQ5b0hfN1jQmYQ==", + "license": "MIT", + "dependencies": { + "@types/trusted-types": "^1.0.6" + } }, "node_modules/ms": { "version": "2.1.2", diff --git a/package.json b/package.json index 223835520..4083a67c1 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "dotenv": "^17.2.1", "globals": "^16.2.0", "i18next": "^25.3.4", - "monaco-editor": "^0.52.0", + "monaco-editor": "^0.53.0", "react": "^19.1.1", "react-colorful": "^5.6.1", "react-dom": "^19.1.1", From 5f951d3ad7db554d0ce7ce663d72550e70392932 Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Wed, 8 Oct 2025 23:55:01 -0400 Subject: [PATCH 18/70] fix(deep dark theme): Make color options only show if theme is 'Custom' --- public/locales/ca-ES.json | 1 - public/locales/cs-CZ.json | 1283 +++++++++++++------------- public/locales/de-DE.json | 1 - public/locales/en-GB.json | 1 - public/locales/en-US.json | 1 - public/locales/en-US.json.d.ts | 1 - public/locales/es-ES.json | 1283 +++++++++++++------------- public/locales/fa-IR.json | 1 - public/locales/fr-FR.json | 1 - public/locales/he-IL.json | 1283 +++++++++++++------------- public/locales/hi-IN.json | 1283 +++++++++++++------------- public/locales/it-IT.json | 1 - public/locales/ja-JP.json | 1 - public/locales/ko-KR.json | 1283 +++++++++++++------------- public/locales/nl-NL.json | 1 - public/locales/pl-PL.json | 1 - public/locales/pt-BR.json | 1 - public/locales/ru-RU.json | 1283 +++++++++++++------------- public/locales/sv-SE.json | 1283 +++++++++++++------------- public/locales/tr-TR.json | 1283 +++++++++++++------------- public/locales/uk-UA.json | 1 - public/locales/vi-VN.json | 1 - public/locales/zh-CN.json | 1283 +++++++++++++------------- public/locales/zh-TW.json | 1 - src/components/Settings/Settings.tsx | 145 ++- 25 files changed, 5840 insertions(+), 5867 deletions(-) diff --git a/public/locales/ca-ES.json b/public/locales/ca-ES.json index f46bb4ed4..768bdf750 100644 --- a/public/locales/ca-ES.json +++ b/public/locales/ca-ES.json @@ -134,7 +134,6 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "deepDarkCustomTheme": "Set theme to 'Custom' to configure this option.", "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." } }, diff --git a/public/locales/cs-CZ.json b/public/locales/cs-CZ.json index b0272a9bb..c53e6e98d 100644 --- a/public/locales/cs-CZ.json +++ b/public/locales/cs-CZ.json @@ -1,643 +1,642 @@ { - "langCode": "cs-CZ", - "langName": "Čeština", - "messages": { - "resumingVideo": "Resuming video at {{VIDEO_TIME}}", - "settingVolume": "Setting volume boost to {{VOLUME_BOOST_AMOUNT}}" - }, - "pages": { - "content": { - "features": { - "copyTimestampUrlButton": { - "button": { - "copied": "Copied!", - "label": "Copy video URL with timestamp" - } - }, - "featureMenu": { - "button": { - "label": "Feature menu" - } - }, - "forwardRewindButtons": { - "buttons": { - "forwardButton": { - "label": "Fast forward by {{TIME}}" - }, - "rewindButton": { - "label": "Rewind by {{TIME}}" - } - } - }, - "hideEndScreenCardsButton": { - "button": { - "label": "Hide end screen cards", - "toggle": { - "off": "Show end screen cards", - "on": "Hide end screen cards" - } - } - }, - "loopButton": { - "button": { - "label": "Loop", - "toggle": { - "off": "Loop off", - "on": "Loop on" - } - } - }, - "maximizePlayerButton": { - "button": { - "label": "Maximize", - "toggle": { - "off": "Maximize off", - "on": "Maximize on" - } - } - }, - "openTranscriptButton": { - "button": { - "label": "Open transcript" - } - }, - "playbackSpeedButtons": { - "buttons": { - "decreasePlaybackSpeedButton": { - "label": "Decrease Speed to {{SPEED}}" - }, - "increasePlaybackSpeedButton": { - "label": "Increase Speed to {{SPEED}}" - } - }, - "decreaseLimit": "Can't decrease further ({{SPEED}})", - "increaseLimit": "Can't increase further ({{SPEED}})" - }, - "playlistLength": { - "title": "Total length may not be accurate if some videos are hidden or if you haven't loaded enough videos to get the full length." - }, - "screenshotButton": { - "button": { - "label": "Screenshot" - }, - "copiedToClipboard": "Screenshot copied to clipboard" - }, - "videoHistory": { - "resumeButton": "Resume", - "resumePrompt": { - "close": "Close" - } - }, - "volumeBoostButton": { - "button": { - "label": "Volume Boost", - "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" - } - } - } - } - }, - "options": { - "notifications": { - "error": { - "scrollWheelHoldModifierKey": { - "sameKey": { - "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", - "volumeControl": "The scroll wheel volume control modifier key cannot be the same as the scroll wheel speed control modifier key." - } - } - }, - "info": { - "reset": "All options have been reset to their default values.\nYou can now save the changes by clicking the \"Confirm\" button or discard them by closing this page or ignore this notification." - }, - "success": { - "saved": "Options saved." - } - } - } - }, - "settings": { - "clearData": { - "allDataDeleted": "All data has been deleted.", - "confirmAlert": "This will delete all extension data related to options. Continue?" - }, - "optionDisabled": { - "either": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " or " - }, - "plural": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " and " - }, - "singular": "Enable '{{OPTION}}' to configure this option", - "specificOption": { - "deepDarkCustomTheme": "Set theme to 'Custom' to configure this option.", - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." - } - }, - "scrollForMoreSettings": "Scroll for more settings", - "sections": { - "automaticQuality": { - "enable": { - "label": "Automatic quality adjustment", - "title": "Automatically adjusts the video quality to the selected level." - }, - "fallbackQualityStrategy": { - "select": { - "label": "Quality fallback strategy", - "options": { - "higher": "Higher", - "lower": "Lower" - }, - "title": "The strategy to use when the selected quality is not available" - } - }, - "select": { - "label": "Player quality", - "title": "The quality to set the video to" - }, - "title": "Automatic quality settings" - }, - "bottomButtons": { - "clear": { - "title": "Clears all data this extension has stored on your machine", - "value": "Clear Data" - }, - "confirm": { - "title": "Confirm setting reset", - "value": "Confirm" - }, - "openTab": { - "title": "Open extension settings in a new tab" - }, - "reset": { - "title": "Resets all settings to their defaults, Click the confirm button to save the changes", - "value": "Reset" - } - }, - "buttonPlacement": { - "select": { - "buttonNames": { - "copyTimestampUrlButton": "Copy video URL with timestamp button", - "decreasePlaybackSpeedButton": "Decrease Speed button", - "forwardButton": "Fast Forward button", - "hideEndScreenCardsButton": "Hide end screen cards button", - "increasePlaybackSpeedButton": "Increase Speed button", - "loopButton": "Loop button", - "maximizePlayerButton": "Maximize button", - "openTranscriptButton": "Open Transcript button", - "rewindButton": "Rewind button", - "screenshotButton": "Screenshot button", - "volumeBoostButton": "Volume Boost button" - }, - "options": { - "below_player": { - "placement": "below the player controls", - "value": "Below Player" - }, - "feature_menu": { - "placement": "in the feature menu", - "value": "Feature Menu" - }, - "player_controls_left": { - "placement": "on the left side of player controls", - "value": "Left Controls" - }, - "player_controls_right": { - "placement": "on the right side of player controls", - "value": "Right Controls" - } - }, - "title": "Place the {{BUTTON_NAME}} {{PLACEMENT}}" - }, - "title": "Button Placement Settings" - }, - "customCSS": { - "editor": { - "collapse": "Collapse Editor", - "expand": "Expand Editor", - "noProblems": "No problems found." - }, - "enable": { - "label": "Custom CSS", - "title": "Enables custom CSS to be applied to the page" - }, - "title": "Custom CSS Settings" - }, - "featureMenu": { - "openType": { - "select": { - "label": "Menu Activation Type", - "options": { - "click": "Click", - "hover": "Hover" - }, - "title": "Select the method to activate the feature menu" - }, - "title": "Feature menu settings" - } - }, - "forwardRewindButtons": { - "enable": { - "label": "Forward/rewind buttons", - "title": "Adds forward and rewind buttons to the video player" - }, - "time": { - "label": "Forward/rewind time", - "title": "The amount of time to forward/rewind the video by" - }, - "title": "Forward/rewind button settings" - }, - "importExportSettings": { - "exportButton": { - "success": "Settings successfully exported", - "title": "Export settings to a JSON file", - "value": "Export Settings" - }, - "importButton": { - "error": { - "unknown": "Error importing settings. Please check the file format.\nAn unknown error occurred.", - "validation": "Error importing settings. Please check the file format.\n{{ERROR_MESSAGE}}" - }, - "success": "Settings imported successfully", - "title": "Import settings from a JSON file", - "value": "Import Settings" - } - }, - "language": { - "select": { - "label": "Language", - "title": "The language to use for the extension" - }, - "title": "Language" - }, - "miscellaneous": { - "features": { - "automaticTheaterMode": { - "label": "Automatic theater mode", - "title": "Automatically enables theater mode when you load a video" - }, - "automaticallyDisableAmbientMode": { - "label": "Automatically disable ambient mode", - "title": "Automatically disables ambient mode when you load a video" - }, - "automaticallyDisableClosedCaptions": { - "label": "Automatically disable closed captions", - "title": "Automatically disables closed captions when you load a video" - }, - "copyTimestampUrlButton": { - "label": "Copy video URL with timestamp button", - "title": "Copies video URL with timestamp (?t=123)" - }, - "defaultToOriginalAudioTrack": { - "label": "Default to original audio track", - "title": "Always default to the original audio track" - }, - "hideArtificialIntelligenceSummary": { - "label": "Hide AI summary", - "title": "Hides the artificial intelligence summary below videos" - }, - "hideEndScreenCards": { - "label": "Hide end screen cards", - "title": "Hides the cards at the end of the video" - }, - "hideEndScreenCardsButton": { - "label": "Hide end screen cards button", - "title": "Adds a button to show/hide the cards at the end of the video" - }, - "hideLiveStreamChat": { - "label": "Hide live stream chat", - "title": "Hides the live stream chat" - }, - "hideOfficialArtistVideosFromHomePage": { - "label": "Hide Official Artist Videos", - "title": "Hide Official Artist Videos from Home Page" - }, - "hidePaidPromotionBanner": { - "label": "Hide paid promotion banner", - "title": "Hides the banner that appears when you watch a video that has a paid promotion" - }, - "hidePlayables": { - "label": "Hide playables", - "title": "Hides all playables" - }, - "hideScrollbar": { - "label": "Hide scrollbar", - "title": "Hides the pages scrollbar" - }, - "hideShorts": { - "label": "Hide shorts", - "title": "Hides all shorts" - }, - "hideTranslateComment": { - "label": "Hide translate comment button", - "title": "Hides 'Translate to Language' button under comments" - }, - "loopButton": { - "label": "Loop button", - "title": "Adds a button to the feature menu to loop the video you're watching" - }, - "maximizePlayerButton": { - "label": "Maximize player button", - "title": "Adds a button to the feature menu to maximize the player" - }, - "openTranscriptButton": { - "label": "Open transcript button", - "title": "Adds a button to the feature menu to open the transcript of the video you're watching" - }, - "openYouTubeSettingsOnHover": { - "label": "Open YouTube settings on hover", - "title": "Opens the YouTube settings menu when you hover over the settings button" - }, - "pauseBackgroundPlayers": { - "label": "Pause background players", - "title": "Pauses video players in background tabs when you start a new player in foreground tab" - }, - "playlistRemover": { - "label": "Hide playlists from homepage", - "title": "Get rid of playlists from homepage" - }, - "remainingTime": { - "label": "Remaining time", - "title": "Shows the remaining time of the video you're watching" - }, - "rememberLastVolume": { - "label": "Remember last volume", - "title": "Remembers the volume of the last video you were watching and sets it when you open a new video" - }, - "removeRedirect": { - "label": "Remove YouTube /redirect URLs", - "title": "Replaces YouTube redirect by actual URLs, skipping redirect warning dialogue" - }, - "restoreFullscreenScrolling": { - "label": "Restore fullscreen scrolling", - "title": "Restores scrolling in fullscreen mode" - }, - "shareShortener": { - "label": "Shorten YouTube video share link", - "title": "Shortens YouTube video share link (youtu.be) by stripping si/feature parameters from it" - }, - "shortsAutoScroll": { - "label": "Shorts auto scroll", - "title": "Automatically scrolls to the next short" - }, - "skipContinueWatching": { - "label": "Skip \"Video is paused. Continue watching?\"", - "title": "Skips the idle dialog that pauses video playback" - } - }, - "title": "Miscellaneous settings" - }, - "onScreenDisplaySettings": { - "color": { - "label": "Color", - "options": { - "blue": "Blue", - "green": "Green", - "orange": "Orange", - "pink": "Pink", - "purple": "Purple", - "red": "Red", - "white": "White", - "yellow": "Yellow" - }, - "title": "Select the color for the On-Screen Display" - }, - "hide": { - "label": "Hide Delay", - "title": "Specify the time, in milliseconds, before automatically hiding the On-Screen Display" - }, - "opacity": { - "label": "Opacity", - "title": "Adjust the transparency of the On-Screen Display" - }, - "padding": { - "label": "Padding", - "title": "Adjust the spacing around the On-Screen Display in pixels. This applies specifically to corner On-Screen Display." - }, - "position": { - "label": "Position", - "options": { - "bottom_left": "Bottom Left", - "bottom_right": "Bottom Right", - "center": "Center", - "top_left": "Top Left", - "top_right": "Top Right" - }, - "title": "Select the position of the On-Screen Display" - }, - "title": "On-Screen Display Settings", - "type": { - "label": "Type", - "options": { - "circle": "Circle", - "line": "Line", - "no_display": "No display", - "text": "Text" - }, - "title": "Select the type of On-Screen Display" - } - }, - "playbackSpeed": { - "enable": { - "label": "Forced playback speed", - "title": "Sets the video speed to what you choose below" - }, - "playbackSpeedButtons": { - "label": "Playback speed buttons", - "select": { - "label": "Playback buttons speed", - "title": "Amount of speed to be changed per click" - }, - "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" - }, - "select": { - "label": "Player speed", - "title": "The speed to set the video to" - }, - "title": "Playback speed settings" - }, - "playlistLength": { - "enable": { - "label": "Display playlist length information", - "title": "Shows the total length of the playlist, how much has been watched, and how much remains." - }, - "title": "Playlist length settings", - "wayToGetLength": { - "select": { - "label": "Method to get playlist length", - "title": "The way to get playlist length information (API method will fallback to HTML if an error occurs)" - } - }, - "wayToGetWatchTime": { - "select": { - "label": "Method to get watched time", - "options": { - "duration": "Video Length", - "youtube": "Video Watch Time" - }, - "title": "The way to get the amount of time watched (Video Length type only used on watch page)" - } - } - }, - "screenshotButton": { - "enable": { - "label": "Screenshot button", - "title": "Adds a button to the player to take a screenshot of the video" - }, - "saveAs": { - "clipboard": "Clipboard", - "file": "File" - }, - "selectFormat": { - "label": "Screenshot format", - "title": "The format to save the screenshot in" - }, - "selectSaveAs": { - "label": "Screenshot save type", - "title": "The screenshot save type" - }, - "title": "Screenshot settings" - }, - "scrollWheelSpeedControl": { - "adjustmentSteps": { - "label": "Speed Change Per Scroll", - "title": "Adjust the speed change per scroll" - }, - "enable": { - "label": "Scroll wheel speed control", - "title": "Press a modifier key to enable speed adjustment with the scroll wheel." - }, - "optionLabel": "{{KEY}} key", - "select": { - "label": "Modifier key", - "title": "The modifier key to use" - }, - "title": "Scroll wheel speed control settings" - }, - "scrollWheelVolumeControl": { - "adjustmentSteps": { - "label": "Volume Change Per Scroll", - "title": "Adjust the volume change per scroll" - }, - "enable": { - "label": "Scroll wheel volume control", - "title": "Lets you use the scroll wheel to control the volume of the video you're watching" - }, - "holdModifierKey": { - "enable": { - "label": "When holding modifier key", - "title": "Press a modifier key to enable volume adjustment with the scroll wheel." - }, - "optionLabel": "{{KEY}} key", - "select": { - "label": "Modifier key", - "title": "The modifier key to use" - } - }, - "holdRightClick": { - "enable": { - "label": "When holding right click", - "title": "Hold right click to enable scroll wheel volume control" - } - }, - "title": "Scroll wheel volume control settings" - }, - "settingSearch": { - "placeholder": "Search for a setting" - }, - "videoHistory": { - "enable": { - "label": "Track watched videos", - "title": "Keeps track of where you left off on videos you were watching and enables resuming playback" - }, - "resumeType": { - "select": { - "label": "Resume type", - "options": { - "automatic": "Automatic", - "prompt": "Prompt" - }, - "title": "Select how you want to resume videos" - } - }, - "title": "Video history settings" - }, - "volumeBoost": { - "boostAmount": { - "label": "Volume boost amount (dB)", - "title": "The amount to boost the volume by" - }, - "enable": { - "label": "Volume boost", - "title": "Enable volume boost" - }, - "mode": { - "select": { - "label": "Volume boost mode", - "options": { - "global": "Global", - "perVideo": "Per video" - }, - "title": "Choose how volume boost is applied. 'Per video' allows enabling boost for each video individually in the feature menu. 'Global' applies boost to all videos when volume boost is enabled." - } - }, - "title": "Volume boost settings" - }, - "youtubeDataApiV3Key": { - "getApiKeyLinkText": "You can get one from here", - "input": { - "label": "API Key", - "title": "Enter your Youtube Data API V3 key." - }, - "title": "YouTube API V3 Key" - }, - "youtubeDeepDark": { - "author": "Author", - "co-authors": "Co-authors", - "colors": { - "colorShadow": { - "label": "Shadow color", - "title": "Color for shadows" - }, - "dimmerText": { - "label": "Secondary text color", - "title": "Color for secondary text" - }, - "hoverBackground": { - "label": "Hover background color", - "title": "Color for hover background" - }, - "mainBackground": { - "label": "Main background color", - "title": "Color for main background" - }, - "mainColor": { - "label": "Accent color", - "title": "Color for accent" - }, - "mainText": { - "label": "Main text color", - "title": "Color for main text" - }, - "secondBackground": { - "label": "Secondary background color", - "title": "Color for secondary background" - } - }, - "enable": { - "label": "Deep Dark Theme", - "title": "Activate the selected theme for the page" - }, - "select": { - "label": "Select theme", - "title": "Select a theme to be applied to the page" - }, - "title": "YouTube Deep Dark Settings" - } - } - } -} + "langCode": "cs-CZ", + "langName": "Čeština", + "messages": { + "resumingVideo": "Resuming video at {{VIDEO_TIME}}", + "settingVolume": "Setting volume boost to {{VOLUME_BOOST_AMOUNT}}" + }, + "pages": { + "content": { + "features": { + "copyTimestampUrlButton": { + "button": { + "copied": "Copied!", + "label": "Copy video URL with timestamp" + } + }, + "featureMenu": { + "button": { + "label": "Feature menu" + } + }, + "forwardRewindButtons": { + "buttons": { + "forwardButton": { + "label": "Fast forward by {{TIME}}" + }, + "rewindButton": { + "label": "Rewind by {{TIME}}" + } + } + }, + "hideEndScreenCardsButton": { + "button": { + "label": "Hide end screen cards", + "toggle": { + "off": "Show end screen cards", + "on": "Hide end screen cards" + } + } + }, + "loopButton": { + "button": { + "label": "Loop", + "toggle": { + "off": "Loop off", + "on": "Loop on" + } + } + }, + "maximizePlayerButton": { + "button": { + "label": "Maximize", + "toggle": { + "off": "Maximize off", + "on": "Maximize on" + } + } + }, + "openTranscriptButton": { + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Decrease Speed to {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Increase Speed to {{SPEED}}" + } + }, + "decreaseLimit": "Can't decrease further ({{SPEED}})", + "increaseLimit": "Can't increase further ({{SPEED}})" + }, + "playlistLength": { + "title": "Total length may not be accurate if some videos are hidden or if you haven't loaded enough videos to get the full length." + }, + "screenshotButton": { + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "Screenshot copied to clipboard" + }, + "videoHistory": { + "resumeButton": "Resume", + "resumePrompt": { + "close": "Close" + } + }, + "volumeBoostButton": { + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } + } + } + } + }, + "options": { + "notifications": { + "error": { + "scrollWheelHoldModifierKey": { + "sameKey": { + "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", + "volumeControl": "The scroll wheel volume control modifier key cannot be the same as the scroll wheel speed control modifier key." + } + } + }, + "info": { + "reset": "All options have been reset to their default values.\nYou can now save the changes by clicking the \"Confirm\" button or discard them by closing this page or ignore this notification." + }, + "success": { + "saved": "Options saved." + } + } + } + }, + "settings": { + "clearData": { + "allDataDeleted": "All data has been deleted.", + "confirmAlert": "This will delete all extension data related to options. Continue?" + }, + "optionDisabled": { + "either": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " or " + }, + "plural": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " and " + }, + "singular": "Enable '{{OPTION}}' to configure this option", + "specificOption": { + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + } + }, + "scrollForMoreSettings": "Scroll for more settings", + "sections": { + "automaticQuality": { + "enable": { + "label": "Automatic quality adjustment", + "title": "Automatically adjusts the video quality to the selected level." + }, + "fallbackQualityStrategy": { + "select": { + "label": "Quality fallback strategy", + "options": { + "higher": "Higher", + "lower": "Lower" + }, + "title": "The strategy to use when the selected quality is not available" + } + }, + "select": { + "label": "Player quality", + "title": "The quality to set the video to" + }, + "title": "Automatic quality settings" + }, + "bottomButtons": { + "clear": { + "title": "Clears all data this extension has stored on your machine", + "value": "Clear Data" + }, + "confirm": { + "title": "Confirm setting reset", + "value": "Confirm" + }, + "openTab": { + "title": "Open extension settings in a new tab" + }, + "reset": { + "title": "Resets all settings to their defaults, Click the confirm button to save the changes", + "value": "Reset" + } + }, + "buttonPlacement": { + "select": { + "buttonNames": { + "copyTimestampUrlButton": "Copy video URL with timestamp button", + "decreasePlaybackSpeedButton": "Decrease Speed button", + "forwardButton": "Fast Forward button", + "hideEndScreenCardsButton": "Hide end screen cards button", + "increasePlaybackSpeedButton": "Increase Speed button", + "loopButton": "Loop button", + "maximizePlayerButton": "Maximize button", + "openTranscriptButton": "Open Transcript button", + "rewindButton": "Rewind button", + "screenshotButton": "Screenshot button", + "volumeBoostButton": "Volume Boost button" + }, + "options": { + "below_player": { + "placement": "below the player controls", + "value": "Below Player" + }, + "feature_menu": { + "placement": "in the feature menu", + "value": "Feature Menu" + }, + "player_controls_left": { + "placement": "on the left side of player controls", + "value": "Left Controls" + }, + "player_controls_right": { + "placement": "on the right side of player controls", + "value": "Right Controls" + } + }, + "title": "Place the {{BUTTON_NAME}} {{PLACEMENT}}" + }, + "title": "Button Placement Settings" + }, + "customCSS": { + "editor": { + "collapse": "Collapse Editor", + "expand": "Expand Editor", + "noProblems": "No problems found." + }, + "enable": { + "label": "Custom CSS", + "title": "Enables custom CSS to be applied to the page" + }, + "title": "Custom CSS Settings" + }, + "featureMenu": { + "openType": { + "select": { + "label": "Menu Activation Type", + "options": { + "click": "Click", + "hover": "Hover" + }, + "title": "Select the method to activate the feature menu" + }, + "title": "Feature menu settings" + } + }, + "forwardRewindButtons": { + "enable": { + "label": "Forward/rewind buttons", + "title": "Adds forward and rewind buttons to the video player" + }, + "time": { + "label": "Forward/rewind time", + "title": "The amount of time to forward/rewind the video by" + }, + "title": "Forward/rewind button settings" + }, + "importExportSettings": { + "exportButton": { + "success": "Settings successfully exported", + "title": "Export settings to a JSON file", + "value": "Export Settings" + }, + "importButton": { + "error": { + "unknown": "Error importing settings. Please check the file format.\nAn unknown error occurred.", + "validation": "Error importing settings. Please check the file format.\n{{ERROR_MESSAGE}}" + }, + "success": "Settings imported successfully", + "title": "Import settings from a JSON file", + "value": "Import Settings" + } + }, + "language": { + "select": { + "label": "Language", + "title": "The language to use for the extension" + }, + "title": "Language" + }, + "miscellaneous": { + "features": { + "automaticTheaterMode": { + "label": "Automatic theater mode", + "title": "Automatically enables theater mode when you load a video" + }, + "automaticallyDisableAmbientMode": { + "label": "Automatically disable ambient mode", + "title": "Automatically disables ambient mode when you load a video" + }, + "automaticallyDisableClosedCaptions": { + "label": "Automatically disable closed captions", + "title": "Automatically disables closed captions when you load a video" + }, + "copyTimestampUrlButton": { + "label": "Copy video URL with timestamp button", + "title": "Copies video URL with timestamp (?t=123)" + }, + "defaultToOriginalAudioTrack": { + "label": "Default to original audio track", + "title": "Always default to the original audio track" + }, + "hideArtificialIntelligenceSummary": { + "label": "Hide AI summary", + "title": "Hides the artificial intelligence summary below videos" + }, + "hideEndScreenCards": { + "label": "Hide end screen cards", + "title": "Hides the cards at the end of the video" + }, + "hideEndScreenCardsButton": { + "label": "Hide end screen cards button", + "title": "Adds a button to show/hide the cards at the end of the video" + }, + "hideLiveStreamChat": { + "label": "Hide live stream chat", + "title": "Hides the live stream chat" + }, + "hideOfficialArtistVideosFromHomePage": { + "label": "Hide Official Artist Videos", + "title": "Hide Official Artist Videos from Home Page" + }, + "hidePaidPromotionBanner": { + "label": "Hide paid promotion banner", + "title": "Hides the banner that appears when you watch a video that has a paid promotion" + }, + "hidePlayables": { + "label": "Hide playables", + "title": "Hides all playables" + }, + "hideScrollbar": { + "label": "Hide scrollbar", + "title": "Hides the pages scrollbar" + }, + "hideShorts": { + "label": "Hide shorts", + "title": "Hides all shorts" + }, + "hideTranslateComment": { + "label": "Hide translate comment button", + "title": "Hides 'Translate to Language' button under comments" + }, + "loopButton": { + "label": "Loop button", + "title": "Adds a button to the feature menu to loop the video you're watching" + }, + "maximizePlayerButton": { + "label": "Maximize player button", + "title": "Adds a button to the feature menu to maximize the player" + }, + "openTranscriptButton": { + "label": "Open transcript button", + "title": "Adds a button to the feature menu to open the transcript of the video you're watching" + }, + "openYouTubeSettingsOnHover": { + "label": "Open YouTube settings on hover", + "title": "Opens the YouTube settings menu when you hover over the settings button" + }, + "pauseBackgroundPlayers": { + "label": "Pause background players", + "title": "Pauses video players in background tabs when you start a new player in foreground tab" + }, + "playlistRemover": { + "label": "Hide playlists from homepage", + "title": "Get rid of playlists from homepage" + }, + "remainingTime": { + "label": "Remaining time", + "title": "Shows the remaining time of the video you're watching" + }, + "rememberLastVolume": { + "label": "Remember last volume", + "title": "Remembers the volume of the last video you were watching and sets it when you open a new video" + }, + "removeRedirect": { + "label": "Remove YouTube /redirect URLs", + "title": "Replaces YouTube redirect by actual URLs, skipping redirect warning dialogue" + }, + "restoreFullscreenScrolling": { + "label": "Restore fullscreen scrolling", + "title": "Restores scrolling in fullscreen mode" + }, + "shareShortener": { + "label": "Shorten YouTube video share link", + "title": "Shortens YouTube video share link (youtu.be) by stripping si/feature parameters from it" + }, + "shortsAutoScroll": { + "label": "Shorts auto scroll", + "title": "Automatically scrolls to the next short" + }, + "skipContinueWatching": { + "label": "Skip \"Video is paused. Continue watching?\"", + "title": "Skips the idle dialog that pauses video playback" + } + }, + "title": "Miscellaneous settings" + }, + "onScreenDisplaySettings": { + "color": { + "label": "Color", + "options": { + "blue": "Blue", + "green": "Green", + "orange": "Orange", + "pink": "Pink", + "purple": "Purple", + "red": "Red", + "white": "White", + "yellow": "Yellow" + }, + "title": "Select the color for the On-Screen Display" + }, + "hide": { + "label": "Hide Delay", + "title": "Specify the time, in milliseconds, before automatically hiding the On-Screen Display" + }, + "opacity": { + "label": "Opacity", + "title": "Adjust the transparency of the On-Screen Display" + }, + "padding": { + "label": "Padding", + "title": "Adjust the spacing around the On-Screen Display in pixels. This applies specifically to corner On-Screen Display." + }, + "position": { + "label": "Position", + "options": { + "bottom_left": "Bottom Left", + "bottom_right": "Bottom Right", + "center": "Center", + "top_left": "Top Left", + "top_right": "Top Right" + }, + "title": "Select the position of the On-Screen Display" + }, + "title": "On-Screen Display Settings", + "type": { + "label": "Type", + "options": { + "circle": "Circle", + "line": "Line", + "no_display": "No display", + "text": "Text" + }, + "title": "Select the type of On-Screen Display" + } + }, + "playbackSpeed": { + "enable": { + "label": "Forced playback speed", + "title": "Sets the video speed to what you choose below" + }, + "playbackSpeedButtons": { + "label": "Playback speed buttons", + "select": { + "label": "Playback buttons speed", + "title": "Amount of speed to be changed per click" + }, + "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" + }, + "select": { + "label": "Player speed", + "title": "The speed to set the video to" + }, + "title": "Playback speed settings" + }, + "playlistLength": { + "enable": { + "label": "Display playlist length information", + "title": "Shows the total length of the playlist, how much has been watched, and how much remains." + }, + "title": "Playlist length settings", + "wayToGetLength": { + "select": { + "label": "Method to get playlist length", + "title": "The way to get playlist length information (API method will fallback to HTML if an error occurs)" + } + }, + "wayToGetWatchTime": { + "select": { + "label": "Method to get watched time", + "options": { + "duration": "Video Length", + "youtube": "Video Watch Time" + }, + "title": "The way to get the amount of time watched (Video Length type only used on watch page)" + } + } + }, + "screenshotButton": { + "enable": { + "label": "Screenshot button", + "title": "Adds a button to the player to take a screenshot of the video" + }, + "saveAs": { + "clipboard": "Clipboard", + "file": "File" + }, + "selectFormat": { + "label": "Screenshot format", + "title": "The format to save the screenshot in" + }, + "selectSaveAs": { + "label": "Screenshot save type", + "title": "The screenshot save type" + }, + "title": "Screenshot settings" + }, + "scrollWheelSpeedControl": { + "adjustmentSteps": { + "label": "Speed Change Per Scroll", + "title": "Adjust the speed change per scroll" + }, + "enable": { + "label": "Scroll wheel speed control", + "title": "Press a modifier key to enable speed adjustment with the scroll wheel." + }, + "optionLabel": "{{KEY}} key", + "select": { + "label": "Modifier key", + "title": "The modifier key to use" + }, + "title": "Scroll wheel speed control settings" + }, + "scrollWheelVolumeControl": { + "adjustmentSteps": { + "label": "Volume Change Per Scroll", + "title": "Adjust the volume change per scroll" + }, + "enable": { + "label": "Scroll wheel volume control", + "title": "Lets you use the scroll wheel to control the volume of the video you're watching" + }, + "holdModifierKey": { + "enable": { + "label": "When holding modifier key", + "title": "Press a modifier key to enable volume adjustment with the scroll wheel." + }, + "optionLabel": "{{KEY}} key", + "select": { + "label": "Modifier key", + "title": "The modifier key to use" + } + }, + "holdRightClick": { + "enable": { + "label": "When holding right click", + "title": "Hold right click to enable scroll wheel volume control" + } + }, + "title": "Scroll wheel volume control settings" + }, + "settingSearch": { + "placeholder": "Search for a setting" + }, + "videoHistory": { + "enable": { + "label": "Track watched videos", + "title": "Keeps track of where you left off on videos you were watching and enables resuming playback" + }, + "resumeType": { + "select": { + "label": "Resume type", + "options": { + "automatic": "Automatic", + "prompt": "Prompt" + }, + "title": "Select how you want to resume videos" + } + }, + "title": "Video history settings" + }, + "volumeBoost": { + "boostAmount": { + "label": "Volume boost amount (dB)", + "title": "The amount to boost the volume by" + }, + "enable": { + "label": "Volume boost", + "title": "Enable volume boost" + }, + "mode": { + "select": { + "label": "Volume boost mode", + "options": { + "global": "Global", + "perVideo": "Per video" + }, + "title": "Choose how volume boost is applied. 'Per video' allows enabling boost for each video individually in the feature menu. 'Global' applies boost to all videos when volume boost is enabled." + } + }, + "title": "Volume boost settings" + }, + "youtubeDataApiV3Key": { + "getApiKeyLinkText": "You can get one from here", + "input": { + "label": "API Key", + "title": "Enter your Youtube Data API V3 key." + }, + "title": "YouTube API V3 Key" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background color", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background color", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Deep Dark Theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" + } + } + } +} \ No newline at end of file diff --git a/public/locales/de-DE.json b/public/locales/de-DE.json index 4902ab2b5..8121e024e 100644 --- a/public/locales/de-DE.json +++ b/public/locales/de-DE.json @@ -134,7 +134,6 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "deepDarkCustomTheme": "Set theme to 'Custom' to configure this option.", "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." } }, diff --git a/public/locales/en-GB.json b/public/locales/en-GB.json index c8f3a637a..f8b5b88fb 100644 --- a/public/locales/en-GB.json +++ b/public/locales/en-GB.json @@ -134,7 +134,6 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "deepDarkCustomTheme": "Set theme to 'Custom' to configure this option.", "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." } }, diff --git a/public/locales/en-US.json b/public/locales/en-US.json index b9be9d0a1..41158868d 100644 --- a/public/locales/en-US.json +++ b/public/locales/en-US.json @@ -134,7 +134,6 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "deepDarkCustomTheme": "Set theme to 'Custom' to configure this option.", "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option.", "screenshotButtonFileFormat": "Set screenshot save type to 'File' to configure this option" } diff --git a/public/locales/en-US.json.d.ts b/public/locales/en-US.json.d.ts index 626f245a7..3138c29bb 100644 --- a/public/locales/en-US.json.d.ts +++ b/public/locales/en-US.json.d.ts @@ -76,7 +76,6 @@ interface EnUS { plural: { label: "Enable {{OPTIONS}} to configure this option"; separator: " and " }; singular: "Enable '{{OPTION}}' to configure this option"; specificOption: { - deepDarkCustomTheme: "Set theme to 'Custom' to configure this option."; featureMenu: "Configure at least one button to be placed in the feature menu to configure this option."; screenshotButtonFileFormat: "Set screenshot save type to 'File' to configure this option"; }; diff --git a/public/locales/es-ES.json b/public/locales/es-ES.json index eeeab77b3..679ee0751 100644 --- a/public/locales/es-ES.json +++ b/public/locales/es-ES.json @@ -1,643 +1,642 @@ { - "langCode": "es-ES", - "langName": "Español", - "messages": { - "resumingVideo": "Reanudando vídeo en {{VIDEO_TIME}}", - "settingVolume": "Ajustando el potenciador de volumen a {{VOLUME_BOOST_AMOUNT}}" - }, - "pages": { - "content": { - "features": { - "copyTimestampUrlButton": { - "button": { - "copied": "Copied!", - "label": "Copy video URL with timestamp" - } - }, - "featureMenu": { - "button": { - "label": "Feature menu" - } - }, - "forwardRewindButtons": { - "buttons": { - "forwardButton": { - "label": "Fast forward by {{TIME}}" - }, - "rewindButton": { - "label": "Rewind by {{TIME}}" - } - } - }, - "hideEndScreenCardsButton": { - "button": { - "label": "Hide end screen cards", - "toggle": { - "off": "Show end screen cards", - "on": "Hide end screen cards" - } - } - }, - "loopButton": { - "button": { - "label": "Loop", - "toggle": { - "off": "Loop off", - "on": "Loop on" - } - } - }, - "maximizePlayerButton": { - "button": { - "label": "Maximize", - "toggle": { - "off": "Maximize off", - "on": "Maximize on" - } - } - }, - "openTranscriptButton": { - "button": { - "label": "Open transcript" - } - }, - "playbackSpeedButtons": { - "buttons": { - "decreasePlaybackSpeedButton": { - "label": "Decrease Speed to {{SPEED}}" - }, - "increasePlaybackSpeedButton": { - "label": "Increase Speed to {{SPEED}}" - } - }, - "decreaseLimit": "Can't decrease further ({{SPEED}})", - "increaseLimit": "Can't increase further ({{SPEED}})" - }, - "playlistLength": { - "title": "Total length may not be accurate if some videos are hidden or if you haven't loaded enough videos to get the full length." - }, - "screenshotButton": { - "button": { - "label": "Screenshot" - }, - "copiedToClipboard": "Captura de pantalla copiada al portapapeles" - }, - "videoHistory": { - "resumeButton": "Reanudar", - "resumePrompt": { - "close": "Cerrar" - } - }, - "volumeBoostButton": { - "button": { - "label": "Volume Boost", - "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" - } - } - } - } - }, - "options": { - "notifications": { - "error": { - "scrollWheelHoldModifierKey": { - "sameKey": { - "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", - "volumeControl": "The scroll wheel volume control modifier key cannot be the same as the scroll wheel speed control modifier key." - } - } - }, - "info": { - "reset": "Todas las opciones han sido preestablecidas a sus valores de por defecto.\nAhora puedes guardarlas haciendo clic en el botón \"Confirmar\" o descartarlas cerrando esta página o ignorando esta notificación." - }, - "success": { - "saved": "Opciones guardadas." - } - } - } - }, - "settings": { - "clearData": { - "allDataDeleted": "Todos los datos han sido eliminados.", - "confirmAlert": "Esto eliminará todos los datos de la extensión relacionados con las opciones. ¿Continuar?" - }, - "optionDisabled": { - "either": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " or " - }, - "plural": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " and " - }, - "singular": "Enable '{{OPTION}}' to configure this option", - "specificOption": { - "deepDarkCustomTheme": "Set theme to 'Custom' to configure this option.", - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." - } - }, - "scrollForMoreSettings": "Scroll for more settings", - "sections": { - "automaticQuality": { - "enable": { - "label": "Habilitar ajuste automático de calidad", - "title": "Ajustar automáticamente la calidad del vídeo al nivel seleccionado." - }, - "fallbackQualityStrategy": { - "select": { - "label": "Quality fallback strategy", - "options": { - "higher": "Higher", - "lower": "Lower" - }, - "title": "The strategy to use when the selected quality is not available" - } - }, - "select": { - "label": "Calidad del reproductor", - "title": "La calidad a la que establecer el vídeo" - }, - "title": "Ajustes de calidad automáticos" - }, - "bottomButtons": { - "clear": { - "title": "Limpia todos los datos que esta extensión ha almacenado en su equipo", - "value": "Limpiar datos" - }, - "confirm": { - "title": "Confirma el restablecimiento de los ajustes", - "value": "Confirmar" - }, - "openTab": { - "title": "Open extension settings in a new tab" - }, - "reset": { - "title": "Restablece todos los ajustes a sus valores predeterminados, haga clic en el botón de confirmar para guardar los cambios", - "value": "Reestablecer" - } - }, - "buttonPlacement": { - "select": { - "buttonNames": { - "copyTimestampUrlButton": "Copy video URL with timestamp button", - "decreasePlaybackSpeedButton": "Decrease Speed button", - "forwardButton": "Fast Forward button", - "hideEndScreenCardsButton": "Hide end screen cards button", - "increasePlaybackSpeedButton": "Increase Speed button", - "loopButton": "Botón de repetición", - "maximizePlayerButton": "Maximizar botón", - "openTranscriptButton": "Abrir botón de transcripción", - "rewindButton": "Rewind button", - "screenshotButton": "Botón de captura de pantalla", - "volumeBoostButton": "Botón Aumento de Volumen" - }, - "options": { - "below_player": { - "placement": "debajo de los controles del reproductor", - "value": "Debajo del reproductor" - }, - "feature_menu": { - "placement": "in the feature menu", - "value": "Menú de funciones" - }, - "player_controls_left": { - "placement": "a la izquierda de los controles del reproductor", - "value": "Controles a la izquierda" - }, - "player_controls_right": { - "placement": "a la derecha de los controles del reproductor", - "value": "Controles a la derecha" - } - }, - "title": "Coloca el {{BUTTON_NAME}} a la {{PLACEMENT}}" - }, - "title": "Ajustes de posición de los botones" - }, - "customCSS": { - "editor": { - "collapse": "Colapsar editor", - "expand": "Expandir editor", - "noProblems": "No se encontraron problemas." - }, - "enable": { - "label": "Habilitar CSS personalizado", - "title": "Permite aplicar CSS personalizado a la página" - }, - "title": "Ajustes de CSS personalizados" - }, - "featureMenu": { - "openType": { - "select": { - "label": "Tipo de activación del menú", - "options": { - "click": "Click", - "hover": "Pasar el cursor por encima" - }, - "title": "Selecciona el método para abrir el menú" - }, - "title": "Configuración del menú" - } - }, - "forwardRewindButtons": { - "enable": { - "label": "Forward/rewind buttons", - "title": "Adds forward and rewind buttons to the video player" - }, - "time": { - "label": "Forward/rewind time", - "title": "The amount of time to forward/rewind the video by" - }, - "title": "Forward/rewind button settings" - }, - "importExportSettings": { - "exportButton": { - "success": "Ajustes exportados correctamente", - "title": "Exportar ajustes a un archivo JSON", - "value": "Exportar Ajustes" - }, - "importButton": { - "error": { - "unknown": "Error al importar la configuración. Por favor, compruebe el formato del archivo.\nUn error desconocido se ha producido.", - "validation": "Error al importar la configuración. Por favor, compruebe el formato del archivo.\n{{ERROR_MESSAGE}}" - }, - "success": "Ajustes importados correctamente", - "title": "Importar ajustes desde un archivo JSON", - "value": "Importar Ajustes" - } - }, - "language": { - "select": { - "label": "Idioma", - "title": "El idioma a usar para la extensión" - }, - "title": "Idioma" - }, - "miscellaneous": { - "features": { - "automaticTheaterMode": { - "label": "Modo cine automático", - "title": "Activar automáticamente el modo cine al cargar un vídeo" - }, - "automaticallyDisableAmbientMode": { - "label": "Automatically disable ambient mode", - "title": "Automatically disables ambient mode when you load a video" - }, - "automaticallyDisableClosedCaptions": { - "label": "Automatically disable closed captions", - "title": "Automatically disables closed captions when you load a video" - }, - "copyTimestampUrlButton": { - "label": "Copy video URL with timestamp button", - "title": "Copies video URL with timestamp (?t=123)" - }, - "defaultToOriginalAudioTrack": { - "label": "Default to original audio track", - "title": "Always default to the original audio track" - }, - "hideArtificialIntelligenceSummary": { - "label": "Hide AI summary", - "title": "Hides the artificial intelligence summary below videos" - }, - "hideEndScreenCards": { - "label": "Hide end screen cards", - "title": "Hides the cards at the end of the video" - }, - "hideEndScreenCardsButton": { - "label": "Hide end screen cards button", - "title": "Adds a button to show/hide the cards at the end of the video" - }, - "hideLiveStreamChat": { - "label": "Hide live stream chat", - "title": "Hides the live stream chat" - }, - "hideOfficialArtistVideosFromHomePage": { - "label": "Hide Official Artist Videos", - "title": "Hide Official Artist Videos from Home Page" - }, - "hidePaidPromotionBanner": { - "label": "Hide paid promotion banner", - "title": "Hides the banner that appears when you watch a video that has a paid promotion" - }, - "hidePlayables": { - "label": "Hide playables", - "title": "Hides all playables" - }, - "hideScrollbar": { - "label": "Ocultar barra de desplazamiento", - "title": "Oculta la barra de desplazamiento de la página" - }, - "hideShorts": { - "label": "Hide shorts", - "title": "Hides all shorts" - }, - "hideTranslateComment": { - "label": "Hide translate comment button", - "title": "Hides 'Translate to Language' button under comments" - }, - "loopButton": { - "label": "Botón de bucle", - "title": "Añade un botón al menú para poner en bucle el vídeo que estás viendo" - }, - "maximizePlayerButton": { - "label": "Botón de maximizar en el reproductor", - "title": "Añade un botón al menú para maximizar el reproductor" - }, - "openTranscriptButton": { - "label": "Botón \"Abrir transcripción\"", - "title": "Añade un botón al menú para abrir la transcripción del video que estás viendo" - }, - "openYouTubeSettingsOnHover": { - "label": "Abrir ajustes de YouTube al pasar el cursor", - "title": "Abre el menú de configuración de YouTube cuando pasa el cursor por encima del botón de ajustes" - }, - "pauseBackgroundPlayers": { - "label": "Pause background players", - "title": "Pauses video players in background tabs when you start a new player in foreground tab" - }, - "playlistRemover": { - "label": "Hide playlists from homepage", - "title": "Get rid of playlists from homepage" - }, - "remainingTime": { - "label": "Tiempo restante", - "title": "Muestra el tiempo restante del vídeo que estás viendo" - }, - "rememberLastVolume": { - "label": "Recordar el nivel de volumen", - "title": "Recuerda el volumen del último vídeo que estabas viendo y lo establece cuando abres un nuevo vídeo" - }, - "removeRedirect": { - "label": "Remove YouTube /redirect URLs", - "title": "Replaces YouTube redirect by actual URLs, skipping redirect warning dialogue" - }, - "restoreFullscreenScrolling": { - "label": "Restore fullscreen scrolling", - "title": "Restores scrolling in fullscreen mode" - }, - "shareShortener": { - "label": "Shorten YouTube video share link", - "title": "Shortens YouTube video share link (youtu.be) by stripping si/feature parameters from it" - }, - "shortsAutoScroll": { - "label": "Shorts auto scroll", - "title": "Automatically scrolls to the next short" - }, - "skipContinueWatching": { - "label": "Skip \"Video is paused. Continue watching?\"", - "title": "Skips the idle dialog that pauses video playback" - } - }, - "title": "Ajustes varios" - }, - "onScreenDisplaySettings": { - "color": { - "label": "Color", - "options": { - "blue": "Azul", - "green": "Verde", - "orange": "Naranja", - "pink": "Rosa", - "purple": "Morado", - "red": "Rojo", - "white": "Blanco", - "yellow": "Amarillo" - }, - "title": "Select the color for the On-Screen Display" - }, - "hide": { - "label": "Oculta el retardo", - "title": "Specify the time, in milliseconds, before automatically hiding the On-Screen Display" - }, - "opacity": { - "label": "Opacidad", - "title": "Adjust the transparency of the On-Screen Display" - }, - "padding": { - "label": "Margen", - "title": "Adjust the spacing around the On-Screen Display in pixels. This applies specifically to corner On-Screen Display." - }, - "position": { - "label": "Posición", - "options": { - "bottom_left": "Parte inferior izquierda", - "bottom_right": "Parte inferior derecha", - "center": "Centrado", - "top_left": "Parte superior izquierda", - "top_right": "Parte superior derecha" - }, - "title": "Select the position of the On-Screen Display" - }, - "title": "On-Screen Display Settings", - "type": { - "label": "Tipo", - "options": { - "circle": "Circle", - "line": "Línea", - "no_display": "No mostrar", - "text": "Texto" - }, - "title": "Select the type of On-Screen Display" - } - }, - "playbackSpeed": { - "enable": { - "label": "Velocidad de reproducción forzada", - "title": "Establece la velocidad del video a lo que elijas a continuación" - }, - "playbackSpeedButtons": { - "label": "Playback speed buttons", - "select": { - "label": "Playback buttons speed", - "title": "Amount of speed to be changed per click" - }, - "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" - }, - "select": { - "label": "Velocidad del reproductor", - "title": "La velocidad a la que ajustar el vídeo" - }, - "title": "Ajustes de velocidad de reproducción" - }, - "playlistLength": { - "enable": { - "label": "Display playlist length information", - "title": "Shows the total length of the playlist, how much has been watched, and how much remains." - }, - "title": "Playlist length settings", - "wayToGetLength": { - "select": { - "label": "Method to get playlist length", - "title": "The way to get playlist length information (API method will fallback to HTML if an error occurs)" - } - }, - "wayToGetWatchTime": { - "select": { - "label": "Method to get watched time", - "options": { - "duration": "Video Length", - "youtube": "Video Watch Time" - }, - "title": "The way to get the amount of time watched (Video Length type only used on watch page)" - } - } - }, - "screenshotButton": { - "enable": { - "label": "Botón de captura de pantalla", - "title": "Añade un botón al reproductor para capturar la pantalal del vídeo que estás viendo" - }, - "saveAs": { - "clipboard": "Portapapeles", - "file": "Archivo" - }, - "selectFormat": { - "label": "Formato de captura de pantalla", - "title": "El formato en el que guardar la captura de pantalla" - }, - "selectSaveAs": { - "label": "Método de guardado de captura de pantalla", - "title": "Método de guardado sobre el que se guardará la captura de pantalla" - }, - "title": "Ajustes de captura de pantalla" - }, - "scrollWheelSpeedControl": { - "adjustmentSteps": { - "label": "Volumen cambiado por cada scroll con la rueda del ratón", - "title": "Ajustar la velocidad que cambia por el scroll de la rueda del ratón" - }, - "enable": { - "label": "Control de velocidad con la rueda", - "title": "Pulsa una tecla para activar el ajuste de velocidad con la rueda del ratón." - }, - "optionLabel": "Tecla {{KEY}}", - "select": { - "label": "Tecla modificadora", - "title": "Tecla a usar" - }, - "title": "Ajustes sobre el control de velocidad con la rueda del ratón" - }, - "scrollWheelVolumeControl": { - "adjustmentSteps": { - "label": "Velocidad cambiada por cada scroll con la rueda del ratón", - "title": "Ajustar el volumen que cambia por el scroll de la rueda del ratón" - }, - "enable": { - "label": "Control de volumen con la rueda", - "title": "Te permite usar la rueda del ratón para controlar el volumen del vídeo que estás viendo" - }, - "holdModifierKey": { - "enable": { - "label": "Activar al mantener pulsada la tecla modificadora", - "title": "Presione una tecla modificadora para activar el ajuste de volumen con la rueda del ratón." - }, - "optionLabel": "Tecla {{KEY}}", - "select": { - "label": "Tecla modificadora", - "title": "La tecla del modificador a usar" - } - }, - "holdRightClick": { - "enable": { - "label": "Activar al mantener pulsado el botón derecho", - "title": "Mantenga pulsado el botón derecho para activar el control de volumen con la rueda del ratón" - } - }, - "title": "Ajustes de control de volumen con la rueda del ratón" - }, - "settingSearch": { - "placeholder": "Search for a setting" - }, - "videoHistory": { - "enable": { - "label": "Track watched videos", - "title": "Keeps track of where you left off on videos you were watching and enables resuming playback" - }, - "resumeType": { - "select": { - "label": "Resume type", - "options": { - "automatic": "Automatic", - "prompt": "Prompt" - }, - "title": "Select how you want to resume videos" - } - }, - "title": "Video history settings" - }, - "volumeBoost": { - "boostAmount": { - "label": "Incremento de volumen (dB)", - "title": "Cuantos decibelios quieres aumentar el volumen" - }, - "enable": { - "label": "Potenciador de volumen", - "title": "Activar incremento de volumen" - }, - "mode": { - "select": { - "label": "Volume boost mode", - "options": { - "global": "Global", - "perVideo": "Por vídeo" - }, - "title": "Elegir cómo se aplica el aumento de volumen. 'Por vídeo' permite activar optimización para cada video individualmente en el menú de características. 'Global' aplica el boost a todos los vídeos cuando el aumento de volumen está activado." - } - }, - "title": "Ajustes de potenciado de volumen" - }, - "youtubeDataApiV3Key": { - "getApiKeyLinkText": "You can get one from here", - "input": { - "label": "API Key", - "title": "Enter your Youtube Data API V3 key." - }, - "title": "YouTube API V3 Key" - }, - "youtubeDeepDark": { - "author": "Author", - "co-authors": "Co-authors", - "colors": { - "colorShadow": { - "label": "Shadow color", - "title": "Color for shadows" - }, - "dimmerText": { - "label": "Secondary text color", - "title": "Color for secondary text" - }, - "hoverBackground": { - "label": "Hover background color", - "title": "Color for hover background" - }, - "mainBackground": { - "label": "Main background color", - "title": "Color for main background" - }, - "mainColor": { - "label": "Accent color", - "title": "Color for accent" - }, - "mainText": { - "label": "Main text color", - "title": "Color for main text" - }, - "secondBackground": { - "label": "Secondary background color", - "title": "Color for secondary background" - } - }, - "enable": { - "label": "Deep Dark Theme", - "title": "Activate the selected theme for the page" - }, - "select": { - "label": "Select theme", - "title": "Select a theme to be applied to the page" - }, - "title": "YouTube Deep Dark Settings" - } - } - } -} + "langCode": "es-ES", + "langName": "Español", + "messages": { + "resumingVideo": "Reanudando vídeo en {{VIDEO_TIME}}", + "settingVolume": "Ajustando el potenciador de volumen a {{VOLUME_BOOST_AMOUNT}}" + }, + "pages": { + "content": { + "features": { + "copyTimestampUrlButton": { + "button": { + "copied": "Copied!", + "label": "Copy video URL with timestamp" + } + }, + "featureMenu": { + "button": { + "label": "Feature menu" + } + }, + "forwardRewindButtons": { + "buttons": { + "forwardButton": { + "label": "Fast forward by {{TIME}}" + }, + "rewindButton": { + "label": "Rewind by {{TIME}}" + } + } + }, + "hideEndScreenCardsButton": { + "button": { + "label": "Hide end screen cards", + "toggle": { + "off": "Show end screen cards", + "on": "Hide end screen cards" + } + } + }, + "loopButton": { + "button": { + "label": "Loop", + "toggle": { + "off": "Loop off", + "on": "Loop on" + } + } + }, + "maximizePlayerButton": { + "button": { + "label": "Maximize", + "toggle": { + "off": "Maximize off", + "on": "Maximize on" + } + } + }, + "openTranscriptButton": { + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Decrease Speed to {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Increase Speed to {{SPEED}}" + } + }, + "decreaseLimit": "Can't decrease further ({{SPEED}})", + "increaseLimit": "Can't increase further ({{SPEED}})" + }, + "playlistLength": { + "title": "Total length may not be accurate if some videos are hidden or if you haven't loaded enough videos to get the full length." + }, + "screenshotButton": { + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "Captura de pantalla copiada al portapapeles" + }, + "videoHistory": { + "resumeButton": "Reanudar", + "resumePrompt": { + "close": "Cerrar" + } + }, + "volumeBoostButton": { + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } + } + } + } + }, + "options": { + "notifications": { + "error": { + "scrollWheelHoldModifierKey": { + "sameKey": { + "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", + "volumeControl": "The scroll wheel volume control modifier key cannot be the same as the scroll wheel speed control modifier key." + } + } + }, + "info": { + "reset": "Todas las opciones han sido preestablecidas a sus valores de por defecto.\nAhora puedes guardarlas haciendo clic en el botón \"Confirmar\" o descartarlas cerrando esta página o ignorando esta notificación." + }, + "success": { + "saved": "Opciones guardadas." + } + } + } + }, + "settings": { + "clearData": { + "allDataDeleted": "Todos los datos han sido eliminados.", + "confirmAlert": "Esto eliminará todos los datos de la extensión relacionados con las opciones. ¿Continuar?" + }, + "optionDisabled": { + "either": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " or " + }, + "plural": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " and " + }, + "singular": "Enable '{{OPTION}}' to configure this option", + "specificOption": { + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + } + }, + "scrollForMoreSettings": "Scroll for more settings", + "sections": { + "automaticQuality": { + "enable": { + "label": "Habilitar ajuste automático de calidad", + "title": "Ajustar automáticamente la calidad del vídeo al nivel seleccionado." + }, + "fallbackQualityStrategy": { + "select": { + "label": "Quality fallback strategy", + "options": { + "higher": "Higher", + "lower": "Lower" + }, + "title": "The strategy to use when the selected quality is not available" + } + }, + "select": { + "label": "Calidad del reproductor", + "title": "La calidad a la que establecer el vídeo" + }, + "title": "Ajustes de calidad automáticos" + }, + "bottomButtons": { + "clear": { + "title": "Limpia todos los datos que esta extensión ha almacenado en su equipo", + "value": "Limpiar datos" + }, + "confirm": { + "title": "Confirma el restablecimiento de los ajustes", + "value": "Confirmar" + }, + "openTab": { + "title": "Open extension settings in a new tab" + }, + "reset": { + "title": "Restablece todos los ajustes a sus valores predeterminados, haga clic en el botón de confirmar para guardar los cambios", + "value": "Reestablecer" + } + }, + "buttonPlacement": { + "select": { + "buttonNames": { + "copyTimestampUrlButton": "Copy video URL with timestamp button", + "decreasePlaybackSpeedButton": "Decrease Speed button", + "forwardButton": "Fast Forward button", + "hideEndScreenCardsButton": "Hide end screen cards button", + "increasePlaybackSpeedButton": "Increase Speed button", + "loopButton": "Botón de repetición", + "maximizePlayerButton": "Maximizar botón", + "openTranscriptButton": "Abrir botón de transcripción", + "rewindButton": "Rewind button", + "screenshotButton": "Botón de captura de pantalla", + "volumeBoostButton": "Botón Aumento de Volumen" + }, + "options": { + "below_player": { + "placement": "debajo de los controles del reproductor", + "value": "Debajo del reproductor" + }, + "feature_menu": { + "placement": "in the feature menu", + "value": "Menú de funciones" + }, + "player_controls_left": { + "placement": "a la izquierda de los controles del reproductor", + "value": "Controles a la izquierda" + }, + "player_controls_right": { + "placement": "a la derecha de los controles del reproductor", + "value": "Controles a la derecha" + } + }, + "title": "Coloca el {{BUTTON_NAME}} a la {{PLACEMENT}}" + }, + "title": "Ajustes de posición de los botones" + }, + "customCSS": { + "editor": { + "collapse": "Colapsar editor", + "expand": "Expandir editor", + "noProblems": "No se encontraron problemas." + }, + "enable": { + "label": "Habilitar CSS personalizado", + "title": "Permite aplicar CSS personalizado a la página" + }, + "title": "Ajustes de CSS personalizados" + }, + "featureMenu": { + "openType": { + "select": { + "label": "Tipo de activación del menú", + "options": { + "click": "Click", + "hover": "Pasar el cursor por encima" + }, + "title": "Selecciona el método para abrir el menú" + }, + "title": "Configuración del menú" + } + }, + "forwardRewindButtons": { + "enable": { + "label": "Forward/rewind buttons", + "title": "Adds forward and rewind buttons to the video player" + }, + "time": { + "label": "Forward/rewind time", + "title": "The amount of time to forward/rewind the video by" + }, + "title": "Forward/rewind button settings" + }, + "importExportSettings": { + "exportButton": { + "success": "Ajustes exportados correctamente", + "title": "Exportar ajustes a un archivo JSON", + "value": "Exportar Ajustes" + }, + "importButton": { + "error": { + "unknown": "Error al importar la configuración. Por favor, compruebe el formato del archivo.\nUn error desconocido se ha producido.", + "validation": "Error al importar la configuración. Por favor, compruebe el formato del archivo.\n{{ERROR_MESSAGE}}" + }, + "success": "Ajustes importados correctamente", + "title": "Importar ajustes desde un archivo JSON", + "value": "Importar Ajustes" + } + }, + "language": { + "select": { + "label": "Idioma", + "title": "El idioma a usar para la extensión" + }, + "title": "Idioma" + }, + "miscellaneous": { + "features": { + "automaticTheaterMode": { + "label": "Modo cine automático", + "title": "Activar automáticamente el modo cine al cargar un vídeo" + }, + "automaticallyDisableAmbientMode": { + "label": "Automatically disable ambient mode", + "title": "Automatically disables ambient mode when you load a video" + }, + "automaticallyDisableClosedCaptions": { + "label": "Automatically disable closed captions", + "title": "Automatically disables closed captions when you load a video" + }, + "copyTimestampUrlButton": { + "label": "Copy video URL with timestamp button", + "title": "Copies video URL with timestamp (?t=123)" + }, + "defaultToOriginalAudioTrack": { + "label": "Default to original audio track", + "title": "Always default to the original audio track" + }, + "hideArtificialIntelligenceSummary": { + "label": "Hide AI summary", + "title": "Hides the artificial intelligence summary below videos" + }, + "hideEndScreenCards": { + "label": "Hide end screen cards", + "title": "Hides the cards at the end of the video" + }, + "hideEndScreenCardsButton": { + "label": "Hide end screen cards button", + "title": "Adds a button to show/hide the cards at the end of the video" + }, + "hideLiveStreamChat": { + "label": "Hide live stream chat", + "title": "Hides the live stream chat" + }, + "hideOfficialArtistVideosFromHomePage": { + "label": "Hide Official Artist Videos", + "title": "Hide Official Artist Videos from Home Page" + }, + "hidePaidPromotionBanner": { + "label": "Hide paid promotion banner", + "title": "Hides the banner that appears when you watch a video that has a paid promotion" + }, + "hidePlayables": { + "label": "Hide playables", + "title": "Hides all playables" + }, + "hideScrollbar": { + "label": "Ocultar barra de desplazamiento", + "title": "Oculta la barra de desplazamiento de la página" + }, + "hideShorts": { + "label": "Hide shorts", + "title": "Hides all shorts" + }, + "hideTranslateComment": { + "label": "Hide translate comment button", + "title": "Hides 'Translate to Language' button under comments" + }, + "loopButton": { + "label": "Botón de bucle", + "title": "Añade un botón al menú para poner en bucle el vídeo que estás viendo" + }, + "maximizePlayerButton": { + "label": "Botón de maximizar en el reproductor", + "title": "Añade un botón al menú para maximizar el reproductor" + }, + "openTranscriptButton": { + "label": "Botón \"Abrir transcripción\"", + "title": "Añade un botón al menú para abrir la transcripción del video que estás viendo" + }, + "openYouTubeSettingsOnHover": { + "label": "Abrir ajustes de YouTube al pasar el cursor", + "title": "Abre el menú de configuración de YouTube cuando pasa el cursor por encima del botón de ajustes" + }, + "pauseBackgroundPlayers": { + "label": "Pause background players", + "title": "Pauses video players in background tabs when you start a new player in foreground tab" + }, + "playlistRemover": { + "label": "Hide playlists from homepage", + "title": "Get rid of playlists from homepage" + }, + "remainingTime": { + "label": "Tiempo restante", + "title": "Muestra el tiempo restante del vídeo que estás viendo" + }, + "rememberLastVolume": { + "label": "Recordar el nivel de volumen", + "title": "Recuerda el volumen del último vídeo que estabas viendo y lo establece cuando abres un nuevo vídeo" + }, + "removeRedirect": { + "label": "Remove YouTube /redirect URLs", + "title": "Replaces YouTube redirect by actual URLs, skipping redirect warning dialogue" + }, + "restoreFullscreenScrolling": { + "label": "Restore fullscreen scrolling", + "title": "Restores scrolling in fullscreen mode" + }, + "shareShortener": { + "label": "Shorten YouTube video share link", + "title": "Shortens YouTube video share link (youtu.be) by stripping si/feature parameters from it" + }, + "shortsAutoScroll": { + "label": "Shorts auto scroll", + "title": "Automatically scrolls to the next short" + }, + "skipContinueWatching": { + "label": "Skip \"Video is paused. Continue watching?\"", + "title": "Skips the idle dialog that pauses video playback" + } + }, + "title": "Ajustes varios" + }, + "onScreenDisplaySettings": { + "color": { + "label": "Color", + "options": { + "blue": "Azul", + "green": "Verde", + "orange": "Naranja", + "pink": "Rosa", + "purple": "Morado", + "red": "Rojo", + "white": "Blanco", + "yellow": "Amarillo" + }, + "title": "Select the color for the On-Screen Display" + }, + "hide": { + "label": "Oculta el retardo", + "title": "Specify the time, in milliseconds, before automatically hiding the On-Screen Display" + }, + "opacity": { + "label": "Opacidad", + "title": "Adjust the transparency of the On-Screen Display" + }, + "padding": { + "label": "Margen", + "title": "Adjust the spacing around the On-Screen Display in pixels. This applies specifically to corner On-Screen Display." + }, + "position": { + "label": "Posición", + "options": { + "bottom_left": "Parte inferior izquierda", + "bottom_right": "Parte inferior derecha", + "center": "Centrado", + "top_left": "Parte superior izquierda", + "top_right": "Parte superior derecha" + }, + "title": "Select the position of the On-Screen Display" + }, + "title": "On-Screen Display Settings", + "type": { + "label": "Tipo", + "options": { + "circle": "Circle", + "line": "Línea", + "no_display": "No mostrar", + "text": "Texto" + }, + "title": "Select the type of On-Screen Display" + } + }, + "playbackSpeed": { + "enable": { + "label": "Velocidad de reproducción forzada", + "title": "Establece la velocidad del video a lo que elijas a continuación" + }, + "playbackSpeedButtons": { + "label": "Playback speed buttons", + "select": { + "label": "Playback buttons speed", + "title": "Amount of speed to be changed per click" + }, + "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" + }, + "select": { + "label": "Velocidad del reproductor", + "title": "La velocidad a la que ajustar el vídeo" + }, + "title": "Ajustes de velocidad de reproducción" + }, + "playlistLength": { + "enable": { + "label": "Display playlist length information", + "title": "Shows the total length of the playlist, how much has been watched, and how much remains." + }, + "title": "Playlist length settings", + "wayToGetLength": { + "select": { + "label": "Method to get playlist length", + "title": "The way to get playlist length information (API method will fallback to HTML if an error occurs)" + } + }, + "wayToGetWatchTime": { + "select": { + "label": "Method to get watched time", + "options": { + "duration": "Video Length", + "youtube": "Video Watch Time" + }, + "title": "The way to get the amount of time watched (Video Length type only used on watch page)" + } + } + }, + "screenshotButton": { + "enable": { + "label": "Botón de captura de pantalla", + "title": "Añade un botón al reproductor para capturar la pantalal del vídeo que estás viendo" + }, + "saveAs": { + "clipboard": "Portapapeles", + "file": "Archivo" + }, + "selectFormat": { + "label": "Formato de captura de pantalla", + "title": "El formato en el que guardar la captura de pantalla" + }, + "selectSaveAs": { + "label": "Método de guardado de captura de pantalla", + "title": "Método de guardado sobre el que se guardará la captura de pantalla" + }, + "title": "Ajustes de captura de pantalla" + }, + "scrollWheelSpeedControl": { + "adjustmentSteps": { + "label": "Volumen cambiado por cada scroll con la rueda del ratón", + "title": "Ajustar la velocidad que cambia por el scroll de la rueda del ratón" + }, + "enable": { + "label": "Control de velocidad con la rueda", + "title": "Pulsa una tecla para activar el ajuste de velocidad con la rueda del ratón." + }, + "optionLabel": "Tecla {{KEY}}", + "select": { + "label": "Tecla modificadora", + "title": "Tecla a usar" + }, + "title": "Ajustes sobre el control de velocidad con la rueda del ratón" + }, + "scrollWheelVolumeControl": { + "adjustmentSteps": { + "label": "Velocidad cambiada por cada scroll con la rueda del ratón", + "title": "Ajustar el volumen que cambia por el scroll de la rueda del ratón" + }, + "enable": { + "label": "Control de volumen con la rueda", + "title": "Te permite usar la rueda del ratón para controlar el volumen del vídeo que estás viendo" + }, + "holdModifierKey": { + "enable": { + "label": "Activar al mantener pulsada la tecla modificadora", + "title": "Presione una tecla modificadora para activar el ajuste de volumen con la rueda del ratón." + }, + "optionLabel": "Tecla {{KEY}}", + "select": { + "label": "Tecla modificadora", + "title": "La tecla del modificador a usar" + } + }, + "holdRightClick": { + "enable": { + "label": "Activar al mantener pulsado el botón derecho", + "title": "Mantenga pulsado el botón derecho para activar el control de volumen con la rueda del ratón" + } + }, + "title": "Ajustes de control de volumen con la rueda del ratón" + }, + "settingSearch": { + "placeholder": "Search for a setting" + }, + "videoHistory": { + "enable": { + "label": "Track watched videos", + "title": "Keeps track of where you left off on videos you were watching and enables resuming playback" + }, + "resumeType": { + "select": { + "label": "Resume type", + "options": { + "automatic": "Automatic", + "prompt": "Prompt" + }, + "title": "Select how you want to resume videos" + } + }, + "title": "Video history settings" + }, + "volumeBoost": { + "boostAmount": { + "label": "Incremento de volumen (dB)", + "title": "Cuantos decibelios quieres aumentar el volumen" + }, + "enable": { + "label": "Potenciador de volumen", + "title": "Activar incremento de volumen" + }, + "mode": { + "select": { + "label": "Volume boost mode", + "options": { + "global": "Global", + "perVideo": "Por vídeo" + }, + "title": "Elegir cómo se aplica el aumento de volumen. 'Por vídeo' permite activar optimización para cada video individualmente en el menú de características. 'Global' aplica el boost a todos los vídeos cuando el aumento de volumen está activado." + } + }, + "title": "Ajustes de potenciado de volumen" + }, + "youtubeDataApiV3Key": { + "getApiKeyLinkText": "You can get one from here", + "input": { + "label": "API Key", + "title": "Enter your Youtube Data API V3 key." + }, + "title": "YouTube API V3 Key" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background color", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background color", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Deep Dark Theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" + } + } + } +} \ No newline at end of file diff --git a/public/locales/fa-IR.json b/public/locales/fa-IR.json index 1bc345f1d..9cfc7e007 100644 --- a/public/locales/fa-IR.json +++ b/public/locales/fa-IR.json @@ -134,7 +134,6 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "deepDarkCustomTheme": "Set theme to 'Custom' to configure this option.", "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." } }, diff --git a/public/locales/fr-FR.json b/public/locales/fr-FR.json index f73db2f65..7ce2961e1 100644 --- a/public/locales/fr-FR.json +++ b/public/locales/fr-FR.json @@ -134,7 +134,6 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "deepDarkCustomTheme": "Set theme to 'Custom' to configure this option.", "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." } }, diff --git a/public/locales/he-IL.json b/public/locales/he-IL.json index 0c686761d..6bcf20f80 100644 --- a/public/locales/he-IL.json +++ b/public/locales/he-IL.json @@ -1,643 +1,642 @@ { - "langCode": "he-IL", - "langName": "עברית", - "messages": { - "resumingVideo": "Resuming video at {{VIDEO_TIME}}", - "settingVolume": "Setting volume boost to {{VOLUME_BOOST_AMOUNT}}" - }, - "pages": { - "content": { - "features": { - "copyTimestampUrlButton": { - "button": { - "copied": "Copied!", - "label": "Copy video URL with timestamp" - } - }, - "featureMenu": { - "button": { - "label": "Feature menu" - } - }, - "forwardRewindButtons": { - "buttons": { - "forwardButton": { - "label": "Fast forward by {{TIME}}" - }, - "rewindButton": { - "label": "Rewind by {{TIME}}" - } - } - }, - "hideEndScreenCardsButton": { - "button": { - "label": "Hide end screen cards", - "toggle": { - "off": "Show end screen cards", - "on": "Hide end screen cards" - } - } - }, - "loopButton": { - "button": { - "label": "Loop", - "toggle": { - "off": "Loop off", - "on": "Loop on" - } - } - }, - "maximizePlayerButton": { - "button": { - "label": "Maximize", - "toggle": { - "off": "Maximize off", - "on": "Maximize on" - } - } - }, - "openTranscriptButton": { - "button": { - "label": "Open transcript" - } - }, - "playbackSpeedButtons": { - "buttons": { - "decreasePlaybackSpeedButton": { - "label": "Decrease Speed to {{SPEED}}" - }, - "increasePlaybackSpeedButton": { - "label": "Increase Speed to {{SPEED}}" - } - }, - "decreaseLimit": "Can't decrease further ({{SPEED}})", - "increaseLimit": "Can't increase further ({{SPEED}})" - }, - "playlistLength": { - "title": "Total length may not be accurate if some videos are hidden or if you haven't loaded enough videos to get the full length." - }, - "screenshotButton": { - "button": { - "label": "Screenshot" - }, - "copiedToClipboard": "Screenshot copied to clipboard" - }, - "videoHistory": { - "resumeButton": "Resume", - "resumePrompt": { - "close": "Close" - } - }, - "volumeBoostButton": { - "button": { - "label": "Volume Boost", - "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" - } - } - } - } - }, - "options": { - "notifications": { - "error": { - "scrollWheelHoldModifierKey": { - "sameKey": { - "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", - "volumeControl": "The scroll wheel volume control modifier key cannot be the same as the scroll wheel speed control modifier key." - } - } - }, - "info": { - "reset": "All options have been reset to their default values.\nYou can now save the changes by clicking the \"Confirm\" button or discard them by closing this page or ignore this notification." - }, - "success": { - "saved": "Options saved." - } - } - } - }, - "settings": { - "clearData": { - "allDataDeleted": "All data has been deleted.", - "confirmAlert": "This will delete all extension data related to options. Continue?" - }, - "optionDisabled": { - "either": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " or " - }, - "plural": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " and " - }, - "singular": "Enable '{{OPTION}}' to configure this option", - "specificOption": { - "deepDarkCustomTheme": "Set theme to 'Custom' to configure this option.", - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." - } - }, - "scrollForMoreSettings": "Scroll for more settings", - "sections": { - "automaticQuality": { - "enable": { - "label": "Automatic quality adjustment", - "title": "Automatically adjusts the video quality to the selected level." - }, - "fallbackQualityStrategy": { - "select": { - "label": "Quality fallback strategy", - "options": { - "higher": "Higher", - "lower": "Lower" - }, - "title": "The strategy to use when the selected quality is not available" - } - }, - "select": { - "label": "Player quality", - "title": "The quality to set the video to" - }, - "title": "Automatic quality settings" - }, - "bottomButtons": { - "clear": { - "title": "Clears all data this extension has stored on your machine", - "value": "Clear Data" - }, - "confirm": { - "title": "Confirm setting reset", - "value": "Confirm" - }, - "openTab": { - "title": "Open extension settings in a new tab" - }, - "reset": { - "title": "Resets all settings to their defaults, Click the confirm button to save the changes", - "value": "Reset" - } - }, - "buttonPlacement": { - "select": { - "buttonNames": { - "copyTimestampUrlButton": "Copy video URL with timestamp button", - "decreasePlaybackSpeedButton": "Decrease Speed button", - "forwardButton": "Fast Forward button", - "hideEndScreenCardsButton": "Hide end screen cards button", - "increasePlaybackSpeedButton": "Increase Speed button", - "loopButton": "Loop button", - "maximizePlayerButton": "Maximize button", - "openTranscriptButton": "Open Transcript button", - "rewindButton": "Rewind button", - "screenshotButton": "Screenshot button", - "volumeBoostButton": "Volume Boost button" - }, - "options": { - "below_player": { - "placement": "below the player controls", - "value": "Below Player" - }, - "feature_menu": { - "placement": "in the feature menu", - "value": "Feature Menu" - }, - "player_controls_left": { - "placement": "on the left side of player controls", - "value": "Left Controls" - }, - "player_controls_right": { - "placement": "on the right side of player controls", - "value": "Right Controls" - } - }, - "title": "Place the {{BUTTON_NAME}} {{PLACEMENT}}" - }, - "title": "Button Placement Settings" - }, - "customCSS": { - "editor": { - "collapse": "Collapse Editor", - "expand": "Expand Editor", - "noProblems": "No problems found." - }, - "enable": { - "label": "Custom CSS", - "title": "Enables custom CSS to be applied to the page" - }, - "title": "Custom CSS Settings" - }, - "featureMenu": { - "openType": { - "select": { - "label": "Menu Activation Type", - "options": { - "click": "Click", - "hover": "Hover" - }, - "title": "Select the method to activate the feature menu" - }, - "title": "Feature menu settings" - } - }, - "forwardRewindButtons": { - "enable": { - "label": "Forward/rewind buttons", - "title": "Adds forward and rewind buttons to the video player" - }, - "time": { - "label": "Forward/rewind time", - "title": "The amount of time to forward/rewind the video by" - }, - "title": "Forward/rewind button settings" - }, - "importExportSettings": { - "exportButton": { - "success": "Settings successfully exported", - "title": "Export settings to a JSON file", - "value": "Export Settings" - }, - "importButton": { - "error": { - "unknown": "Error importing settings. Please check the file format.\nAn unknown error occurred.", - "validation": "Error importing settings. Please check the file format.\n{{ERROR_MESSAGE}}" - }, - "success": "Settings imported successfully", - "title": "Import settings from a JSON file", - "value": "Import Settings" - } - }, - "language": { - "select": { - "label": "Language", - "title": "The language to use for the extension" - }, - "title": "Language" - }, - "miscellaneous": { - "features": { - "automaticTheaterMode": { - "label": "Automatic theater mode", - "title": "Automatically enables theater mode when you load a video" - }, - "automaticallyDisableAmbientMode": { - "label": "Automatically disable ambient mode", - "title": "Automatically disables ambient mode when you load a video" - }, - "automaticallyDisableClosedCaptions": { - "label": "Automatically disable closed captions", - "title": "Automatically disables closed captions when you load a video" - }, - "copyTimestampUrlButton": { - "label": "Copy video URL with timestamp button", - "title": "Copies video URL with timestamp (?t=123)" - }, - "defaultToOriginalAudioTrack": { - "label": "Default to original audio track", - "title": "Always default to the original audio track" - }, - "hideArtificialIntelligenceSummary": { - "label": "Hide AI summary", - "title": "Hides the artificial intelligence summary below videos" - }, - "hideEndScreenCards": { - "label": "Hide end screen cards", - "title": "Hides the cards at the end of the video" - }, - "hideEndScreenCardsButton": { - "label": "Hide end screen cards button", - "title": "Adds a button to show/hide the cards at the end of the video" - }, - "hideLiveStreamChat": { - "label": "Hide live stream chat", - "title": "Hides the live stream chat" - }, - "hideOfficialArtistVideosFromHomePage": { - "label": "Hide Official Artist Videos", - "title": "Hide Official Artist Videos from Home Page" - }, - "hidePaidPromotionBanner": { - "label": "Hide paid promotion banner", - "title": "Hides the banner that appears when you watch a video that has a paid promotion" - }, - "hidePlayables": { - "label": "Hide playables", - "title": "Hides all playables" - }, - "hideScrollbar": { - "label": "Hide scrollbar", - "title": "Hides the pages scrollbar" - }, - "hideShorts": { - "label": "Hide shorts", - "title": "Hides all shorts" - }, - "hideTranslateComment": { - "label": "Hide translate comment button", - "title": "Hides 'Translate to Language' button under comments" - }, - "loopButton": { - "label": "Loop button", - "title": "Adds a button to the feature menu to loop the video you're watching" - }, - "maximizePlayerButton": { - "label": "Maximize player button", - "title": "Adds a button to the feature menu to maximize the player" - }, - "openTranscriptButton": { - "label": "Open transcript button", - "title": "Adds a button to the feature menu to open the transcript of the video you're watching" - }, - "openYouTubeSettingsOnHover": { - "label": "Open YouTube settings on hover", - "title": "Opens the YouTube settings menu when you hover over the settings button" - }, - "pauseBackgroundPlayers": { - "label": "Pause background players", - "title": "Pauses video players in background tabs when you start a new player in foreground tab" - }, - "playlistRemover": { - "label": "Hide playlists from homepage", - "title": "Get rid of playlists from homepage" - }, - "remainingTime": { - "label": "Remaining time", - "title": "Shows the remaining time of the video you're watching" - }, - "rememberLastVolume": { - "label": "Remember last volume", - "title": "Remembers the volume of the last video you were watching and sets it when you open a new video" - }, - "removeRedirect": { - "label": "Remove YouTube /redirect URLs", - "title": "Replaces YouTube redirect by actual URLs, skipping redirect warning dialogue" - }, - "restoreFullscreenScrolling": { - "label": "Restore fullscreen scrolling", - "title": "Restores scrolling in fullscreen mode" - }, - "shareShortener": { - "label": "Shorten YouTube video share link", - "title": "Shortens YouTube video share link (youtu.be) by stripping si/feature parameters from it" - }, - "shortsAutoScroll": { - "label": "Shorts auto scroll", - "title": "Automatically scrolls to the next short" - }, - "skipContinueWatching": { - "label": "Skip \"Video is paused. Continue watching?\"", - "title": "Skips the idle dialog that pauses video playback" - } - }, - "title": "Miscellaneous settings" - }, - "onScreenDisplaySettings": { - "color": { - "label": "Color", - "options": { - "blue": "Blue", - "green": "Green", - "orange": "Orange", - "pink": "Pink", - "purple": "Purple", - "red": "Red", - "white": "White", - "yellow": "Yellow" - }, - "title": "Select the color for the On-Screen Display" - }, - "hide": { - "label": "Hide Delay", - "title": "Specify the time, in milliseconds, before automatically hiding the On-Screen Display" - }, - "opacity": { - "label": "Opacity", - "title": "Adjust the transparency of the On-Screen Display" - }, - "padding": { - "label": "Padding", - "title": "Adjust the spacing around the On-Screen Display in pixels. This applies specifically to corner On-Screen Display." - }, - "position": { - "label": "Position", - "options": { - "bottom_left": "Bottom Left", - "bottom_right": "Bottom Right", - "center": "Center", - "top_left": "Top Left", - "top_right": "Top Right" - }, - "title": "Select the position of the On-Screen Display" - }, - "title": "On-Screen Display Settings", - "type": { - "label": "Type", - "options": { - "circle": "Circle", - "line": "Line", - "no_display": "No display", - "text": "Text" - }, - "title": "Select the type of On-Screen Display" - } - }, - "playbackSpeed": { - "enable": { - "label": "Forced playback speed", - "title": "Sets the video speed to what you choose below" - }, - "playbackSpeedButtons": { - "label": "Playback speed buttons", - "select": { - "label": "Playback buttons speed", - "title": "Amount of speed to be changed per click" - }, - "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" - }, - "select": { - "label": "Player speed", - "title": "The speed to set the video to" - }, - "title": "Playback speed settings" - }, - "playlistLength": { - "enable": { - "label": "Display playlist length information", - "title": "Shows the total length of the playlist, how much has been watched, and how much remains." - }, - "title": "Playlist length settings", - "wayToGetLength": { - "select": { - "label": "Method to get playlist length", - "title": "The way to get playlist length information (API method will fallback to HTML if an error occurs)" - } - }, - "wayToGetWatchTime": { - "select": { - "label": "Method to get watched time", - "options": { - "duration": "Video Length", - "youtube": "Video Watch Time" - }, - "title": "The way to get the amount of time watched (Video Length type only used on watch page)" - } - } - }, - "screenshotButton": { - "enable": { - "label": "Screenshot button", - "title": "Adds a button to the player to take a screenshot of the video" - }, - "saveAs": { - "clipboard": "Clipboard", - "file": "File" - }, - "selectFormat": { - "label": "Screenshot format", - "title": "The format to save the screenshot in" - }, - "selectSaveAs": { - "label": "Screenshot save type", - "title": "The screenshot save type" - }, - "title": "Screenshot settings" - }, - "scrollWheelSpeedControl": { - "adjustmentSteps": { - "label": "Speed Change Per Scroll", - "title": "Adjust the speed change per scroll" - }, - "enable": { - "label": "Scroll wheel speed control", - "title": "Press a modifier key to enable speed adjustment with the scroll wheel." - }, - "optionLabel": "{{KEY}} key", - "select": { - "label": "Modifier key", - "title": "The modifier key to use" - }, - "title": "Scroll wheel speed control settings" - }, - "scrollWheelVolumeControl": { - "adjustmentSteps": { - "label": "Volume Change Per Scroll", - "title": "Adjust the volume change per scroll" - }, - "enable": { - "label": "Scroll wheel volume control", - "title": "Lets you use the scroll wheel to control the volume of the video you're watching" - }, - "holdModifierKey": { - "enable": { - "label": "When holding modifier key", - "title": "Press a modifier key to enable volume adjustment with the scroll wheel." - }, - "optionLabel": "{{KEY}} key", - "select": { - "label": "Modifier key", - "title": "The modifier key to use" - } - }, - "holdRightClick": { - "enable": { - "label": "When holding right click", - "title": "Hold right click to enable scroll wheel volume control" - } - }, - "title": "Scroll wheel volume control settings" - }, - "settingSearch": { - "placeholder": "Search for a setting" - }, - "videoHistory": { - "enable": { - "label": "Track watched videos", - "title": "Keeps track of where you left off on videos you were watching and enables resuming playback" - }, - "resumeType": { - "select": { - "label": "Resume type", - "options": { - "automatic": "Automatic", - "prompt": "Prompt" - }, - "title": "Select how you want to resume videos" - } - }, - "title": "Video history settings" - }, - "volumeBoost": { - "boostAmount": { - "label": "Volume boost amount (dB)", - "title": "The amount to boost the volume by" - }, - "enable": { - "label": "Volume boost", - "title": "Enable volume boost" - }, - "mode": { - "select": { - "label": "Volume boost mode", - "options": { - "global": "Global", - "perVideo": "Per video" - }, - "title": "Choose how volume boost is applied. 'Per video' allows enabling boost for each video individually in the feature menu. 'Global' applies boost to all videos when volume boost is enabled." - } - }, - "title": "Volume boost settings" - }, - "youtubeDataApiV3Key": { - "getApiKeyLinkText": "You can get one from here", - "input": { - "label": "API Key", - "title": "Enter your Youtube Data API V3 key." - }, - "title": "YouTube API V3 Key" - }, - "youtubeDeepDark": { - "author": "Author", - "co-authors": "Co-authors", - "colors": { - "colorShadow": { - "label": "Shadow color", - "title": "Color for shadows" - }, - "dimmerText": { - "label": "Secondary text color", - "title": "Color for secondary text" - }, - "hoverBackground": { - "label": "Hover background color", - "title": "Color for hover background" - }, - "mainBackground": { - "label": "Main background color", - "title": "Color for main background" - }, - "mainColor": { - "label": "Accent color", - "title": "Color for accent" - }, - "mainText": { - "label": "Main text color", - "title": "Color for main text" - }, - "secondBackground": { - "label": "Secondary background color", - "title": "Color for secondary background" - } - }, - "enable": { - "label": "Deep Dark Theme", - "title": "Activate the selected theme for the page" - }, - "select": { - "label": "Select theme", - "title": "Select a theme to be applied to the page" - }, - "title": "YouTube Deep Dark Settings" - } - } - } -} + "langCode": "he-IL", + "langName": "עברית", + "messages": { + "resumingVideo": "Resuming video at {{VIDEO_TIME}}", + "settingVolume": "Setting volume boost to {{VOLUME_BOOST_AMOUNT}}" + }, + "pages": { + "content": { + "features": { + "copyTimestampUrlButton": { + "button": { + "copied": "Copied!", + "label": "Copy video URL with timestamp" + } + }, + "featureMenu": { + "button": { + "label": "Feature menu" + } + }, + "forwardRewindButtons": { + "buttons": { + "forwardButton": { + "label": "Fast forward by {{TIME}}" + }, + "rewindButton": { + "label": "Rewind by {{TIME}}" + } + } + }, + "hideEndScreenCardsButton": { + "button": { + "label": "Hide end screen cards", + "toggle": { + "off": "Show end screen cards", + "on": "Hide end screen cards" + } + } + }, + "loopButton": { + "button": { + "label": "Loop", + "toggle": { + "off": "Loop off", + "on": "Loop on" + } + } + }, + "maximizePlayerButton": { + "button": { + "label": "Maximize", + "toggle": { + "off": "Maximize off", + "on": "Maximize on" + } + } + }, + "openTranscriptButton": { + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Decrease Speed to {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Increase Speed to {{SPEED}}" + } + }, + "decreaseLimit": "Can't decrease further ({{SPEED}})", + "increaseLimit": "Can't increase further ({{SPEED}})" + }, + "playlistLength": { + "title": "Total length may not be accurate if some videos are hidden or if you haven't loaded enough videos to get the full length." + }, + "screenshotButton": { + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "Screenshot copied to clipboard" + }, + "videoHistory": { + "resumeButton": "Resume", + "resumePrompt": { + "close": "Close" + } + }, + "volumeBoostButton": { + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } + } + } + } + }, + "options": { + "notifications": { + "error": { + "scrollWheelHoldModifierKey": { + "sameKey": { + "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", + "volumeControl": "The scroll wheel volume control modifier key cannot be the same as the scroll wheel speed control modifier key." + } + } + }, + "info": { + "reset": "All options have been reset to their default values.\nYou can now save the changes by clicking the \"Confirm\" button or discard them by closing this page or ignore this notification." + }, + "success": { + "saved": "Options saved." + } + } + } + }, + "settings": { + "clearData": { + "allDataDeleted": "All data has been deleted.", + "confirmAlert": "This will delete all extension data related to options. Continue?" + }, + "optionDisabled": { + "either": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " or " + }, + "plural": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " and " + }, + "singular": "Enable '{{OPTION}}' to configure this option", + "specificOption": { + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + } + }, + "scrollForMoreSettings": "Scroll for more settings", + "sections": { + "automaticQuality": { + "enable": { + "label": "Automatic quality adjustment", + "title": "Automatically adjusts the video quality to the selected level." + }, + "fallbackQualityStrategy": { + "select": { + "label": "Quality fallback strategy", + "options": { + "higher": "Higher", + "lower": "Lower" + }, + "title": "The strategy to use when the selected quality is not available" + } + }, + "select": { + "label": "Player quality", + "title": "The quality to set the video to" + }, + "title": "Automatic quality settings" + }, + "bottomButtons": { + "clear": { + "title": "Clears all data this extension has stored on your machine", + "value": "Clear Data" + }, + "confirm": { + "title": "Confirm setting reset", + "value": "Confirm" + }, + "openTab": { + "title": "Open extension settings in a new tab" + }, + "reset": { + "title": "Resets all settings to their defaults, Click the confirm button to save the changes", + "value": "Reset" + } + }, + "buttonPlacement": { + "select": { + "buttonNames": { + "copyTimestampUrlButton": "Copy video URL with timestamp button", + "decreasePlaybackSpeedButton": "Decrease Speed button", + "forwardButton": "Fast Forward button", + "hideEndScreenCardsButton": "Hide end screen cards button", + "increasePlaybackSpeedButton": "Increase Speed button", + "loopButton": "Loop button", + "maximizePlayerButton": "Maximize button", + "openTranscriptButton": "Open Transcript button", + "rewindButton": "Rewind button", + "screenshotButton": "Screenshot button", + "volumeBoostButton": "Volume Boost button" + }, + "options": { + "below_player": { + "placement": "below the player controls", + "value": "Below Player" + }, + "feature_menu": { + "placement": "in the feature menu", + "value": "Feature Menu" + }, + "player_controls_left": { + "placement": "on the left side of player controls", + "value": "Left Controls" + }, + "player_controls_right": { + "placement": "on the right side of player controls", + "value": "Right Controls" + } + }, + "title": "Place the {{BUTTON_NAME}} {{PLACEMENT}}" + }, + "title": "Button Placement Settings" + }, + "customCSS": { + "editor": { + "collapse": "Collapse Editor", + "expand": "Expand Editor", + "noProblems": "No problems found." + }, + "enable": { + "label": "Custom CSS", + "title": "Enables custom CSS to be applied to the page" + }, + "title": "Custom CSS Settings" + }, + "featureMenu": { + "openType": { + "select": { + "label": "Menu Activation Type", + "options": { + "click": "Click", + "hover": "Hover" + }, + "title": "Select the method to activate the feature menu" + }, + "title": "Feature menu settings" + } + }, + "forwardRewindButtons": { + "enable": { + "label": "Forward/rewind buttons", + "title": "Adds forward and rewind buttons to the video player" + }, + "time": { + "label": "Forward/rewind time", + "title": "The amount of time to forward/rewind the video by" + }, + "title": "Forward/rewind button settings" + }, + "importExportSettings": { + "exportButton": { + "success": "Settings successfully exported", + "title": "Export settings to a JSON file", + "value": "Export Settings" + }, + "importButton": { + "error": { + "unknown": "Error importing settings. Please check the file format.\nAn unknown error occurred.", + "validation": "Error importing settings. Please check the file format.\n{{ERROR_MESSAGE}}" + }, + "success": "Settings imported successfully", + "title": "Import settings from a JSON file", + "value": "Import Settings" + } + }, + "language": { + "select": { + "label": "Language", + "title": "The language to use for the extension" + }, + "title": "Language" + }, + "miscellaneous": { + "features": { + "automaticTheaterMode": { + "label": "Automatic theater mode", + "title": "Automatically enables theater mode when you load a video" + }, + "automaticallyDisableAmbientMode": { + "label": "Automatically disable ambient mode", + "title": "Automatically disables ambient mode when you load a video" + }, + "automaticallyDisableClosedCaptions": { + "label": "Automatically disable closed captions", + "title": "Automatically disables closed captions when you load a video" + }, + "copyTimestampUrlButton": { + "label": "Copy video URL with timestamp button", + "title": "Copies video URL with timestamp (?t=123)" + }, + "defaultToOriginalAudioTrack": { + "label": "Default to original audio track", + "title": "Always default to the original audio track" + }, + "hideArtificialIntelligenceSummary": { + "label": "Hide AI summary", + "title": "Hides the artificial intelligence summary below videos" + }, + "hideEndScreenCards": { + "label": "Hide end screen cards", + "title": "Hides the cards at the end of the video" + }, + "hideEndScreenCardsButton": { + "label": "Hide end screen cards button", + "title": "Adds a button to show/hide the cards at the end of the video" + }, + "hideLiveStreamChat": { + "label": "Hide live stream chat", + "title": "Hides the live stream chat" + }, + "hideOfficialArtistVideosFromHomePage": { + "label": "Hide Official Artist Videos", + "title": "Hide Official Artist Videos from Home Page" + }, + "hidePaidPromotionBanner": { + "label": "Hide paid promotion banner", + "title": "Hides the banner that appears when you watch a video that has a paid promotion" + }, + "hidePlayables": { + "label": "Hide playables", + "title": "Hides all playables" + }, + "hideScrollbar": { + "label": "Hide scrollbar", + "title": "Hides the pages scrollbar" + }, + "hideShorts": { + "label": "Hide shorts", + "title": "Hides all shorts" + }, + "hideTranslateComment": { + "label": "Hide translate comment button", + "title": "Hides 'Translate to Language' button under comments" + }, + "loopButton": { + "label": "Loop button", + "title": "Adds a button to the feature menu to loop the video you're watching" + }, + "maximizePlayerButton": { + "label": "Maximize player button", + "title": "Adds a button to the feature menu to maximize the player" + }, + "openTranscriptButton": { + "label": "Open transcript button", + "title": "Adds a button to the feature menu to open the transcript of the video you're watching" + }, + "openYouTubeSettingsOnHover": { + "label": "Open YouTube settings on hover", + "title": "Opens the YouTube settings menu when you hover over the settings button" + }, + "pauseBackgroundPlayers": { + "label": "Pause background players", + "title": "Pauses video players in background tabs when you start a new player in foreground tab" + }, + "playlistRemover": { + "label": "Hide playlists from homepage", + "title": "Get rid of playlists from homepage" + }, + "remainingTime": { + "label": "Remaining time", + "title": "Shows the remaining time of the video you're watching" + }, + "rememberLastVolume": { + "label": "Remember last volume", + "title": "Remembers the volume of the last video you were watching and sets it when you open a new video" + }, + "removeRedirect": { + "label": "Remove YouTube /redirect URLs", + "title": "Replaces YouTube redirect by actual URLs, skipping redirect warning dialogue" + }, + "restoreFullscreenScrolling": { + "label": "Restore fullscreen scrolling", + "title": "Restores scrolling in fullscreen mode" + }, + "shareShortener": { + "label": "Shorten YouTube video share link", + "title": "Shortens YouTube video share link (youtu.be) by stripping si/feature parameters from it" + }, + "shortsAutoScroll": { + "label": "Shorts auto scroll", + "title": "Automatically scrolls to the next short" + }, + "skipContinueWatching": { + "label": "Skip \"Video is paused. Continue watching?\"", + "title": "Skips the idle dialog that pauses video playback" + } + }, + "title": "Miscellaneous settings" + }, + "onScreenDisplaySettings": { + "color": { + "label": "Color", + "options": { + "blue": "Blue", + "green": "Green", + "orange": "Orange", + "pink": "Pink", + "purple": "Purple", + "red": "Red", + "white": "White", + "yellow": "Yellow" + }, + "title": "Select the color for the On-Screen Display" + }, + "hide": { + "label": "Hide Delay", + "title": "Specify the time, in milliseconds, before automatically hiding the On-Screen Display" + }, + "opacity": { + "label": "Opacity", + "title": "Adjust the transparency of the On-Screen Display" + }, + "padding": { + "label": "Padding", + "title": "Adjust the spacing around the On-Screen Display in pixels. This applies specifically to corner On-Screen Display." + }, + "position": { + "label": "Position", + "options": { + "bottom_left": "Bottom Left", + "bottom_right": "Bottom Right", + "center": "Center", + "top_left": "Top Left", + "top_right": "Top Right" + }, + "title": "Select the position of the On-Screen Display" + }, + "title": "On-Screen Display Settings", + "type": { + "label": "Type", + "options": { + "circle": "Circle", + "line": "Line", + "no_display": "No display", + "text": "Text" + }, + "title": "Select the type of On-Screen Display" + } + }, + "playbackSpeed": { + "enable": { + "label": "Forced playback speed", + "title": "Sets the video speed to what you choose below" + }, + "playbackSpeedButtons": { + "label": "Playback speed buttons", + "select": { + "label": "Playback buttons speed", + "title": "Amount of speed to be changed per click" + }, + "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" + }, + "select": { + "label": "Player speed", + "title": "The speed to set the video to" + }, + "title": "Playback speed settings" + }, + "playlistLength": { + "enable": { + "label": "Display playlist length information", + "title": "Shows the total length of the playlist, how much has been watched, and how much remains." + }, + "title": "Playlist length settings", + "wayToGetLength": { + "select": { + "label": "Method to get playlist length", + "title": "The way to get playlist length information (API method will fallback to HTML if an error occurs)" + } + }, + "wayToGetWatchTime": { + "select": { + "label": "Method to get watched time", + "options": { + "duration": "Video Length", + "youtube": "Video Watch Time" + }, + "title": "The way to get the amount of time watched (Video Length type only used on watch page)" + } + } + }, + "screenshotButton": { + "enable": { + "label": "Screenshot button", + "title": "Adds a button to the player to take a screenshot of the video" + }, + "saveAs": { + "clipboard": "Clipboard", + "file": "File" + }, + "selectFormat": { + "label": "Screenshot format", + "title": "The format to save the screenshot in" + }, + "selectSaveAs": { + "label": "Screenshot save type", + "title": "The screenshot save type" + }, + "title": "Screenshot settings" + }, + "scrollWheelSpeedControl": { + "adjustmentSteps": { + "label": "Speed Change Per Scroll", + "title": "Adjust the speed change per scroll" + }, + "enable": { + "label": "Scroll wheel speed control", + "title": "Press a modifier key to enable speed adjustment with the scroll wheel." + }, + "optionLabel": "{{KEY}} key", + "select": { + "label": "Modifier key", + "title": "The modifier key to use" + }, + "title": "Scroll wheel speed control settings" + }, + "scrollWheelVolumeControl": { + "adjustmentSteps": { + "label": "Volume Change Per Scroll", + "title": "Adjust the volume change per scroll" + }, + "enable": { + "label": "Scroll wheel volume control", + "title": "Lets you use the scroll wheel to control the volume of the video you're watching" + }, + "holdModifierKey": { + "enable": { + "label": "When holding modifier key", + "title": "Press a modifier key to enable volume adjustment with the scroll wheel." + }, + "optionLabel": "{{KEY}} key", + "select": { + "label": "Modifier key", + "title": "The modifier key to use" + } + }, + "holdRightClick": { + "enable": { + "label": "When holding right click", + "title": "Hold right click to enable scroll wheel volume control" + } + }, + "title": "Scroll wheel volume control settings" + }, + "settingSearch": { + "placeholder": "Search for a setting" + }, + "videoHistory": { + "enable": { + "label": "Track watched videos", + "title": "Keeps track of where you left off on videos you were watching and enables resuming playback" + }, + "resumeType": { + "select": { + "label": "Resume type", + "options": { + "automatic": "Automatic", + "prompt": "Prompt" + }, + "title": "Select how you want to resume videos" + } + }, + "title": "Video history settings" + }, + "volumeBoost": { + "boostAmount": { + "label": "Volume boost amount (dB)", + "title": "The amount to boost the volume by" + }, + "enable": { + "label": "Volume boost", + "title": "Enable volume boost" + }, + "mode": { + "select": { + "label": "Volume boost mode", + "options": { + "global": "Global", + "perVideo": "Per video" + }, + "title": "Choose how volume boost is applied. 'Per video' allows enabling boost for each video individually in the feature menu. 'Global' applies boost to all videos when volume boost is enabled." + } + }, + "title": "Volume boost settings" + }, + "youtubeDataApiV3Key": { + "getApiKeyLinkText": "You can get one from here", + "input": { + "label": "API Key", + "title": "Enter your Youtube Data API V3 key." + }, + "title": "YouTube API V3 Key" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background color", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background color", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Deep Dark Theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" + } + } + } +} \ No newline at end of file diff --git a/public/locales/hi-IN.json b/public/locales/hi-IN.json index f16f64d7b..9f0a72b66 100644 --- a/public/locales/hi-IN.json +++ b/public/locales/hi-IN.json @@ -1,643 +1,642 @@ { - "langCode": "hi-IN", - "langName": "Hindi", - "messages": { - "resumingVideo": "Resuming video at {{VIDEO_TIME}}", - "settingVolume": "Setting volume boost to {{VOLUME_BOOST_AMOUNT}}" - }, - "pages": { - "content": { - "features": { - "copyTimestampUrlButton": { - "button": { - "copied": "Copied!", - "label": "Copy video URL with timestamp" - } - }, - "featureMenu": { - "button": { - "label": "Feature menu" - } - }, - "forwardRewindButtons": { - "buttons": { - "forwardButton": { - "label": "Fast forward by {{TIME}}" - }, - "rewindButton": { - "label": "Rewind by {{TIME}}" - } - } - }, - "hideEndScreenCardsButton": { - "button": { - "label": "Hide end screen cards", - "toggle": { - "off": "Show end screen cards", - "on": "Hide end screen cards" - } - } - }, - "loopButton": { - "button": { - "label": "Loop", - "toggle": { - "off": "Loop off", - "on": "Loop on" - } - } - }, - "maximizePlayerButton": { - "button": { - "label": "Maximize", - "toggle": { - "off": "Maximize off", - "on": "Maximize on" - } - } - }, - "openTranscriptButton": { - "button": { - "label": "Open transcript" - } - }, - "playbackSpeedButtons": { - "buttons": { - "decreasePlaybackSpeedButton": { - "label": "Decrease Speed to {{SPEED}}" - }, - "increasePlaybackSpeedButton": { - "label": "Increase Speed to {{SPEED}}" - } - }, - "decreaseLimit": "Can't decrease further ({{SPEED}})", - "increaseLimit": "Can't increase further ({{SPEED}})" - }, - "playlistLength": { - "title": "Total length may not be accurate if some videos are hidden or if you haven't loaded enough videos to get the full length." - }, - "screenshotButton": { - "button": { - "label": "Screenshot" - }, - "copiedToClipboard": "Screenshot copied to clipboard" - }, - "videoHistory": { - "resumeButton": "Resume", - "resumePrompt": { - "close": "Close" - } - }, - "volumeBoostButton": { - "button": { - "label": "Volume Boost", - "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" - } - } - } - } - }, - "options": { - "notifications": { - "error": { - "scrollWheelHoldModifierKey": { - "sameKey": { - "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", - "volumeControl": "The scroll wheel volume control modifier key cannot be the same as the scroll wheel speed control modifier key." - } - } - }, - "info": { - "reset": "All options have been reset to their default values.\nYou can now save the changes by clicking the \"Confirm\" button or discard them by closing this page or ignore this notification." - }, - "success": { - "saved": "Options saved." - } - } - } - }, - "settings": { - "clearData": { - "allDataDeleted": "All data has been deleted.", - "confirmAlert": "This will delete all extension data related to options. Continue?" - }, - "optionDisabled": { - "either": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " or " - }, - "plural": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " and " - }, - "singular": "Enable '{{OPTION}}' to configure this option", - "specificOption": { - "deepDarkCustomTheme": "Set theme to 'Custom' to configure this option.", - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." - } - }, - "scrollForMoreSettings": "Scroll for more settings", - "sections": { - "automaticQuality": { - "enable": { - "label": "Automatic quality adjustment", - "title": "Automatically adjusts the video quality to the selected level." - }, - "fallbackQualityStrategy": { - "select": { - "label": "Quality fallback strategy", - "options": { - "higher": "Higher", - "lower": "Lower" - }, - "title": "The strategy to use when the selected quality is not available" - } - }, - "select": { - "label": "Player quality", - "title": "The quality to set the video to" - }, - "title": "Automatic quality settings" - }, - "bottomButtons": { - "clear": { - "title": "Clears all data this extension has stored on your machine", - "value": "Clear Data" - }, - "confirm": { - "title": "Confirm setting reset", - "value": "Confirm" - }, - "openTab": { - "title": "Open extension settings in a new tab" - }, - "reset": { - "title": "Resets all settings to their defaults, Click the confirm button to save the changes", - "value": "Reset" - } - }, - "buttonPlacement": { - "select": { - "buttonNames": { - "copyTimestampUrlButton": "Copy video URL with timestamp button", - "decreasePlaybackSpeedButton": "Decrease Speed button", - "forwardButton": "Fast Forward button", - "hideEndScreenCardsButton": "Hide end screen cards button", - "increasePlaybackSpeedButton": "Increase Speed button", - "loopButton": "Loop button", - "maximizePlayerButton": "Maximize button", - "openTranscriptButton": "Open Transcript button", - "rewindButton": "Rewind button", - "screenshotButton": "Screenshot button", - "volumeBoostButton": "Volume Boost button" - }, - "options": { - "below_player": { - "placement": "below the player controls", - "value": "Below Player" - }, - "feature_menu": { - "placement": "in the feature menu", - "value": "Feature Menu" - }, - "player_controls_left": { - "placement": "on the left side of player controls", - "value": "Left Controls" - }, - "player_controls_right": { - "placement": "on the right side of player controls", - "value": "Right Controls" - } - }, - "title": "Place the {{BUTTON_NAME}} {{PLACEMENT}}" - }, - "title": "Button Placement Settings" - }, - "customCSS": { - "editor": { - "collapse": "Collapse Editor", - "expand": "Expand Editor", - "noProblems": "No problems found." - }, - "enable": { - "label": "Custom CSS", - "title": "Enables custom CSS to be applied to the page" - }, - "title": "Custom CSS Settings" - }, - "featureMenu": { - "openType": { - "select": { - "label": "Menu Activation Type", - "options": { - "click": "Click", - "hover": "Hover" - }, - "title": "Select the method to activate the feature menu" - }, - "title": "Feature menu settings" - } - }, - "forwardRewindButtons": { - "enable": { - "label": "Forward/rewind buttons", - "title": "Adds forward and rewind buttons to the video player" - }, - "time": { - "label": "Forward/rewind time", - "title": "The amount of time to forward/rewind the video by" - }, - "title": "Forward/rewind button settings" - }, - "importExportSettings": { - "exportButton": { - "success": "Settings successfully exported", - "title": "Export settings to a JSON file", - "value": "Export Settings" - }, - "importButton": { - "error": { - "unknown": "Error importing settings. Please check the file format.\nAn unknown error occurred.", - "validation": "Error importing settings. Please check the file format.\n{{ERROR_MESSAGE}}" - }, - "success": "Settings imported successfully", - "title": "Import settings from a JSON file", - "value": "Import Settings" - } - }, - "language": { - "select": { - "label": "Language", - "title": "The language to use for the extension" - }, - "title": "Language" - }, - "miscellaneous": { - "features": { - "automaticTheaterMode": { - "label": "Automatic theater mode", - "title": "Automatically enables theater mode when you load a video" - }, - "automaticallyDisableAmbientMode": { - "label": "Automatically disable ambient mode", - "title": "Automatically disables ambient mode when you load a video" - }, - "automaticallyDisableClosedCaptions": { - "label": "Automatically disable closed captions", - "title": "Automatically disables closed captions when you load a video" - }, - "copyTimestampUrlButton": { - "label": "Copy video URL with timestamp button", - "title": "Copies video URL with timestamp (?t=123)" - }, - "defaultToOriginalAudioTrack": { - "label": "Default to original audio track", - "title": "Always default to the original audio track" - }, - "hideArtificialIntelligenceSummary": { - "label": "Hide AI summary", - "title": "Hides the artificial intelligence summary below videos" - }, - "hideEndScreenCards": { - "label": "Hide end screen cards", - "title": "Hides the cards at the end of the video" - }, - "hideEndScreenCardsButton": { - "label": "Hide end screen cards button", - "title": "Adds a button to show/hide the cards at the end of the video" - }, - "hideLiveStreamChat": { - "label": "Hide live stream chat", - "title": "Hides the live stream chat" - }, - "hideOfficialArtistVideosFromHomePage": { - "label": "Hide Official Artist Videos", - "title": "Hide Official Artist Videos from Home Page" - }, - "hidePaidPromotionBanner": { - "label": "Hide paid promotion banner", - "title": "Hides the banner that appears when you watch a video that has a paid promotion" - }, - "hidePlayables": { - "label": "Hide playables", - "title": "Hides all playables" - }, - "hideScrollbar": { - "label": "Hide scrollbar", - "title": "Hides the pages scrollbar" - }, - "hideShorts": { - "label": "Hide shorts", - "title": "Hides all shorts" - }, - "hideTranslateComment": { - "label": "Hide translate comment button", - "title": "Hides 'Translate to Language' button under comments" - }, - "loopButton": { - "label": "Loop button", - "title": "Adds a button to the feature menu to loop the video you're watching" - }, - "maximizePlayerButton": { - "label": "Maximize player button", - "title": "Adds a button to the feature menu to maximize the player" - }, - "openTranscriptButton": { - "label": "Open transcript button", - "title": "Adds a button to the feature menu to open the transcript of the video you're watching" - }, - "openYouTubeSettingsOnHover": { - "label": "Open YouTube settings on hover", - "title": "Opens the YouTube settings menu when you hover over the settings button" - }, - "pauseBackgroundPlayers": { - "label": "Pause background players", - "title": "Pauses video players in background tabs when you start a new player in foreground tab" - }, - "playlistRemover": { - "label": "Hide playlists from homepage", - "title": "Get rid of playlists from homepage" - }, - "remainingTime": { - "label": "Remaining time", - "title": "Shows the remaining time of the video you're watching" - }, - "rememberLastVolume": { - "label": "Remember last volume", - "title": "Remembers the volume of the last video you were watching and sets it when you open a new video" - }, - "removeRedirect": { - "label": "Remove YouTube /redirect URLs", - "title": "Replaces YouTube redirect by actual URLs, skipping redirect warning dialogue" - }, - "restoreFullscreenScrolling": { - "label": "Restore fullscreen scrolling", - "title": "Restores scrolling in fullscreen mode" - }, - "shareShortener": { - "label": "Shorten YouTube video share link", - "title": "Shortens YouTube video share link (youtu.be) by stripping si/feature parameters from it" - }, - "shortsAutoScroll": { - "label": "Shorts auto scroll", - "title": "Automatically scrolls to the next short" - }, - "skipContinueWatching": { - "label": "Skip \"Video is paused. Continue watching?\"", - "title": "Skips the idle dialog that pauses video playback" - } - }, - "title": "Miscellaneous settings" - }, - "onScreenDisplaySettings": { - "color": { - "label": "Color", - "options": { - "blue": "Blue", - "green": "Green", - "orange": "Orange", - "pink": "Pink", - "purple": "Purple", - "red": "Red", - "white": "White", - "yellow": "Yellow" - }, - "title": "Select the color for the On-Screen Display" - }, - "hide": { - "label": "Hide Delay", - "title": "Specify the time, in milliseconds, before automatically hiding the On-Screen Display" - }, - "opacity": { - "label": "Opacity", - "title": "Adjust the transparency of the On-Screen Display" - }, - "padding": { - "label": "Padding", - "title": "Adjust the spacing around the On-Screen Display in pixels. This applies specifically to corner On-Screen Display." - }, - "position": { - "label": "Position", - "options": { - "bottom_left": "Bottom Left", - "bottom_right": "Bottom Right", - "center": "Center", - "top_left": "Top Left", - "top_right": "Top Right" - }, - "title": "Select the position of the On-Screen Display" - }, - "title": "On-Screen Display Settings", - "type": { - "label": "Type", - "options": { - "circle": "Circle", - "line": "Line", - "no_display": "No display", - "text": "Text" - }, - "title": "Select the type of On-Screen Display" - } - }, - "playbackSpeed": { - "enable": { - "label": "Forced playback speed", - "title": "Sets the video speed to what you choose below" - }, - "playbackSpeedButtons": { - "label": "Playback speed buttons", - "select": { - "label": "Playback buttons speed", - "title": "Amount of speed to be changed per click" - }, - "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" - }, - "select": { - "label": "Player speed", - "title": "The speed to set the video to" - }, - "title": "Playback speed settings" - }, - "playlistLength": { - "enable": { - "label": "Display playlist length information", - "title": "Shows the total length of the playlist, how much has been watched, and how much remains." - }, - "title": "Playlist length settings", - "wayToGetLength": { - "select": { - "label": "Method to get playlist length", - "title": "The way to get playlist length information (API method will fallback to HTML if an error occurs)" - } - }, - "wayToGetWatchTime": { - "select": { - "label": "Method to get watched time", - "options": { - "duration": "Video Length", - "youtube": "Video Watch Time" - }, - "title": "The way to get the amount of time watched (Video Length type only used on watch page)" - } - } - }, - "screenshotButton": { - "enable": { - "label": "Screenshot button", - "title": "Adds a button to the player to take a screenshot of the video" - }, - "saveAs": { - "clipboard": "Clipboard", - "file": "File" - }, - "selectFormat": { - "label": "Screenshot format", - "title": "The format to save the screenshot in" - }, - "selectSaveAs": { - "label": "Screenshot save type", - "title": "The screenshot save type" - }, - "title": "Screenshot settings" - }, - "scrollWheelSpeedControl": { - "adjustmentSteps": { - "label": "Speed Change Per Scroll", - "title": "Adjust the speed change per scroll" - }, - "enable": { - "label": "Scroll wheel speed control", - "title": "Press a modifier key to enable speed adjustment with the scroll wheel." - }, - "optionLabel": "{{KEY}} key", - "select": { - "label": "Modifier key", - "title": "The modifier key to use" - }, - "title": "Scroll wheel speed control settings" - }, - "scrollWheelVolumeControl": { - "adjustmentSteps": { - "label": "Volume Change Per Scroll", - "title": "Adjust the volume change per scroll" - }, - "enable": { - "label": "Scroll wheel volume control", - "title": "Lets you use the scroll wheel to control the volume of the video you're watching" - }, - "holdModifierKey": { - "enable": { - "label": "When holding modifier key", - "title": "Press a modifier key to enable volume adjustment with the scroll wheel." - }, - "optionLabel": "{{KEY}} key", - "select": { - "label": "Modifier key", - "title": "The modifier key to use" - } - }, - "holdRightClick": { - "enable": { - "label": "When holding right click", - "title": "Hold right click to enable scroll wheel volume control" - } - }, - "title": "Scroll wheel volume control settings" - }, - "settingSearch": { - "placeholder": "Search for a setting" - }, - "videoHistory": { - "enable": { - "label": "Track watched videos", - "title": "Keeps track of where you left off on videos you were watching and enables resuming playback" - }, - "resumeType": { - "select": { - "label": "Resume type", - "options": { - "automatic": "Automatic", - "prompt": "Prompt" - }, - "title": "Select how you want to resume videos" - } - }, - "title": "Video history settings" - }, - "volumeBoost": { - "boostAmount": { - "label": "Volume boost amount (dB)", - "title": "The amount to boost the volume by" - }, - "enable": { - "label": "Volume boost", - "title": "Enable volume boost" - }, - "mode": { - "select": { - "label": "Volume boost mode", - "options": { - "global": "Global", - "perVideo": "Per video" - }, - "title": "Choose how volume boost is applied. 'Per video' allows enabling boost for each video individually in the feature menu. 'Global' applies boost to all videos when volume boost is enabled." - } - }, - "title": "Volume boost settings" - }, - "youtubeDataApiV3Key": { - "getApiKeyLinkText": "You can get one from here", - "input": { - "label": "API Key", - "title": "Enter your Youtube Data API V3 key." - }, - "title": "YouTube API V3 Key" - }, - "youtubeDeepDark": { - "author": "Author", - "co-authors": "Co-authors", - "colors": { - "colorShadow": { - "label": "Shadow color", - "title": "Color for shadows" - }, - "dimmerText": { - "label": "Secondary text color", - "title": "Color for secondary text" - }, - "hoverBackground": { - "label": "Hover background color", - "title": "Color for hover background" - }, - "mainBackground": { - "label": "Main background color", - "title": "Color for main background" - }, - "mainColor": { - "label": "Accent color", - "title": "Color for accent" - }, - "mainText": { - "label": "Main text color", - "title": "Color for main text" - }, - "secondBackground": { - "label": "Secondary background color", - "title": "Color for secondary background" - } - }, - "enable": { - "label": "Deep Dark Theme", - "title": "Activate the selected theme for the page" - }, - "select": { - "label": "Select theme", - "title": "Select a theme to be applied to the page" - }, - "title": "YouTube Deep Dark Settings" - } - } - } -} + "langCode": "hi-IN", + "langName": "Hindi", + "messages": { + "resumingVideo": "Resuming video at {{VIDEO_TIME}}", + "settingVolume": "Setting volume boost to {{VOLUME_BOOST_AMOUNT}}" + }, + "pages": { + "content": { + "features": { + "copyTimestampUrlButton": { + "button": { + "copied": "Copied!", + "label": "Copy video URL with timestamp" + } + }, + "featureMenu": { + "button": { + "label": "Feature menu" + } + }, + "forwardRewindButtons": { + "buttons": { + "forwardButton": { + "label": "Fast forward by {{TIME}}" + }, + "rewindButton": { + "label": "Rewind by {{TIME}}" + } + } + }, + "hideEndScreenCardsButton": { + "button": { + "label": "Hide end screen cards", + "toggle": { + "off": "Show end screen cards", + "on": "Hide end screen cards" + } + } + }, + "loopButton": { + "button": { + "label": "Loop", + "toggle": { + "off": "Loop off", + "on": "Loop on" + } + } + }, + "maximizePlayerButton": { + "button": { + "label": "Maximize", + "toggle": { + "off": "Maximize off", + "on": "Maximize on" + } + } + }, + "openTranscriptButton": { + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Decrease Speed to {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Increase Speed to {{SPEED}}" + } + }, + "decreaseLimit": "Can't decrease further ({{SPEED}})", + "increaseLimit": "Can't increase further ({{SPEED}})" + }, + "playlistLength": { + "title": "Total length may not be accurate if some videos are hidden or if you haven't loaded enough videos to get the full length." + }, + "screenshotButton": { + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "Screenshot copied to clipboard" + }, + "videoHistory": { + "resumeButton": "Resume", + "resumePrompt": { + "close": "Close" + } + }, + "volumeBoostButton": { + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } + } + } + } + }, + "options": { + "notifications": { + "error": { + "scrollWheelHoldModifierKey": { + "sameKey": { + "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", + "volumeControl": "The scroll wheel volume control modifier key cannot be the same as the scroll wheel speed control modifier key." + } + } + }, + "info": { + "reset": "All options have been reset to their default values.\nYou can now save the changes by clicking the \"Confirm\" button or discard them by closing this page or ignore this notification." + }, + "success": { + "saved": "Options saved." + } + } + } + }, + "settings": { + "clearData": { + "allDataDeleted": "All data has been deleted.", + "confirmAlert": "This will delete all extension data related to options. Continue?" + }, + "optionDisabled": { + "either": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " or " + }, + "plural": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " and " + }, + "singular": "Enable '{{OPTION}}' to configure this option", + "specificOption": { + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + } + }, + "scrollForMoreSettings": "Scroll for more settings", + "sections": { + "automaticQuality": { + "enable": { + "label": "Automatic quality adjustment", + "title": "Automatically adjusts the video quality to the selected level." + }, + "fallbackQualityStrategy": { + "select": { + "label": "Quality fallback strategy", + "options": { + "higher": "Higher", + "lower": "Lower" + }, + "title": "The strategy to use when the selected quality is not available" + } + }, + "select": { + "label": "Player quality", + "title": "The quality to set the video to" + }, + "title": "Automatic quality settings" + }, + "bottomButtons": { + "clear": { + "title": "Clears all data this extension has stored on your machine", + "value": "Clear Data" + }, + "confirm": { + "title": "Confirm setting reset", + "value": "Confirm" + }, + "openTab": { + "title": "Open extension settings in a new tab" + }, + "reset": { + "title": "Resets all settings to their defaults, Click the confirm button to save the changes", + "value": "Reset" + } + }, + "buttonPlacement": { + "select": { + "buttonNames": { + "copyTimestampUrlButton": "Copy video URL with timestamp button", + "decreasePlaybackSpeedButton": "Decrease Speed button", + "forwardButton": "Fast Forward button", + "hideEndScreenCardsButton": "Hide end screen cards button", + "increasePlaybackSpeedButton": "Increase Speed button", + "loopButton": "Loop button", + "maximizePlayerButton": "Maximize button", + "openTranscriptButton": "Open Transcript button", + "rewindButton": "Rewind button", + "screenshotButton": "Screenshot button", + "volumeBoostButton": "Volume Boost button" + }, + "options": { + "below_player": { + "placement": "below the player controls", + "value": "Below Player" + }, + "feature_menu": { + "placement": "in the feature menu", + "value": "Feature Menu" + }, + "player_controls_left": { + "placement": "on the left side of player controls", + "value": "Left Controls" + }, + "player_controls_right": { + "placement": "on the right side of player controls", + "value": "Right Controls" + } + }, + "title": "Place the {{BUTTON_NAME}} {{PLACEMENT}}" + }, + "title": "Button Placement Settings" + }, + "customCSS": { + "editor": { + "collapse": "Collapse Editor", + "expand": "Expand Editor", + "noProblems": "No problems found." + }, + "enable": { + "label": "Custom CSS", + "title": "Enables custom CSS to be applied to the page" + }, + "title": "Custom CSS Settings" + }, + "featureMenu": { + "openType": { + "select": { + "label": "Menu Activation Type", + "options": { + "click": "Click", + "hover": "Hover" + }, + "title": "Select the method to activate the feature menu" + }, + "title": "Feature menu settings" + } + }, + "forwardRewindButtons": { + "enable": { + "label": "Forward/rewind buttons", + "title": "Adds forward and rewind buttons to the video player" + }, + "time": { + "label": "Forward/rewind time", + "title": "The amount of time to forward/rewind the video by" + }, + "title": "Forward/rewind button settings" + }, + "importExportSettings": { + "exportButton": { + "success": "Settings successfully exported", + "title": "Export settings to a JSON file", + "value": "Export Settings" + }, + "importButton": { + "error": { + "unknown": "Error importing settings. Please check the file format.\nAn unknown error occurred.", + "validation": "Error importing settings. Please check the file format.\n{{ERROR_MESSAGE}}" + }, + "success": "Settings imported successfully", + "title": "Import settings from a JSON file", + "value": "Import Settings" + } + }, + "language": { + "select": { + "label": "Language", + "title": "The language to use for the extension" + }, + "title": "Language" + }, + "miscellaneous": { + "features": { + "automaticTheaterMode": { + "label": "Automatic theater mode", + "title": "Automatically enables theater mode when you load a video" + }, + "automaticallyDisableAmbientMode": { + "label": "Automatically disable ambient mode", + "title": "Automatically disables ambient mode when you load a video" + }, + "automaticallyDisableClosedCaptions": { + "label": "Automatically disable closed captions", + "title": "Automatically disables closed captions when you load a video" + }, + "copyTimestampUrlButton": { + "label": "Copy video URL with timestamp button", + "title": "Copies video URL with timestamp (?t=123)" + }, + "defaultToOriginalAudioTrack": { + "label": "Default to original audio track", + "title": "Always default to the original audio track" + }, + "hideArtificialIntelligenceSummary": { + "label": "Hide AI summary", + "title": "Hides the artificial intelligence summary below videos" + }, + "hideEndScreenCards": { + "label": "Hide end screen cards", + "title": "Hides the cards at the end of the video" + }, + "hideEndScreenCardsButton": { + "label": "Hide end screen cards button", + "title": "Adds a button to show/hide the cards at the end of the video" + }, + "hideLiveStreamChat": { + "label": "Hide live stream chat", + "title": "Hides the live stream chat" + }, + "hideOfficialArtistVideosFromHomePage": { + "label": "Hide Official Artist Videos", + "title": "Hide Official Artist Videos from Home Page" + }, + "hidePaidPromotionBanner": { + "label": "Hide paid promotion banner", + "title": "Hides the banner that appears when you watch a video that has a paid promotion" + }, + "hidePlayables": { + "label": "Hide playables", + "title": "Hides all playables" + }, + "hideScrollbar": { + "label": "Hide scrollbar", + "title": "Hides the pages scrollbar" + }, + "hideShorts": { + "label": "Hide shorts", + "title": "Hides all shorts" + }, + "hideTranslateComment": { + "label": "Hide translate comment button", + "title": "Hides 'Translate to Language' button under comments" + }, + "loopButton": { + "label": "Loop button", + "title": "Adds a button to the feature menu to loop the video you're watching" + }, + "maximizePlayerButton": { + "label": "Maximize player button", + "title": "Adds a button to the feature menu to maximize the player" + }, + "openTranscriptButton": { + "label": "Open transcript button", + "title": "Adds a button to the feature menu to open the transcript of the video you're watching" + }, + "openYouTubeSettingsOnHover": { + "label": "Open YouTube settings on hover", + "title": "Opens the YouTube settings menu when you hover over the settings button" + }, + "pauseBackgroundPlayers": { + "label": "Pause background players", + "title": "Pauses video players in background tabs when you start a new player in foreground tab" + }, + "playlistRemover": { + "label": "Hide playlists from homepage", + "title": "Get rid of playlists from homepage" + }, + "remainingTime": { + "label": "Remaining time", + "title": "Shows the remaining time of the video you're watching" + }, + "rememberLastVolume": { + "label": "Remember last volume", + "title": "Remembers the volume of the last video you were watching and sets it when you open a new video" + }, + "removeRedirect": { + "label": "Remove YouTube /redirect URLs", + "title": "Replaces YouTube redirect by actual URLs, skipping redirect warning dialogue" + }, + "restoreFullscreenScrolling": { + "label": "Restore fullscreen scrolling", + "title": "Restores scrolling in fullscreen mode" + }, + "shareShortener": { + "label": "Shorten YouTube video share link", + "title": "Shortens YouTube video share link (youtu.be) by stripping si/feature parameters from it" + }, + "shortsAutoScroll": { + "label": "Shorts auto scroll", + "title": "Automatically scrolls to the next short" + }, + "skipContinueWatching": { + "label": "Skip \"Video is paused. Continue watching?\"", + "title": "Skips the idle dialog that pauses video playback" + } + }, + "title": "Miscellaneous settings" + }, + "onScreenDisplaySettings": { + "color": { + "label": "Color", + "options": { + "blue": "Blue", + "green": "Green", + "orange": "Orange", + "pink": "Pink", + "purple": "Purple", + "red": "Red", + "white": "White", + "yellow": "Yellow" + }, + "title": "Select the color for the On-Screen Display" + }, + "hide": { + "label": "Hide Delay", + "title": "Specify the time, in milliseconds, before automatically hiding the On-Screen Display" + }, + "opacity": { + "label": "Opacity", + "title": "Adjust the transparency of the On-Screen Display" + }, + "padding": { + "label": "Padding", + "title": "Adjust the spacing around the On-Screen Display in pixels. This applies specifically to corner On-Screen Display." + }, + "position": { + "label": "Position", + "options": { + "bottom_left": "Bottom Left", + "bottom_right": "Bottom Right", + "center": "Center", + "top_left": "Top Left", + "top_right": "Top Right" + }, + "title": "Select the position of the On-Screen Display" + }, + "title": "On-Screen Display Settings", + "type": { + "label": "Type", + "options": { + "circle": "Circle", + "line": "Line", + "no_display": "No display", + "text": "Text" + }, + "title": "Select the type of On-Screen Display" + } + }, + "playbackSpeed": { + "enable": { + "label": "Forced playback speed", + "title": "Sets the video speed to what you choose below" + }, + "playbackSpeedButtons": { + "label": "Playback speed buttons", + "select": { + "label": "Playback buttons speed", + "title": "Amount of speed to be changed per click" + }, + "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" + }, + "select": { + "label": "Player speed", + "title": "The speed to set the video to" + }, + "title": "Playback speed settings" + }, + "playlistLength": { + "enable": { + "label": "Display playlist length information", + "title": "Shows the total length of the playlist, how much has been watched, and how much remains." + }, + "title": "Playlist length settings", + "wayToGetLength": { + "select": { + "label": "Method to get playlist length", + "title": "The way to get playlist length information (API method will fallback to HTML if an error occurs)" + } + }, + "wayToGetWatchTime": { + "select": { + "label": "Method to get watched time", + "options": { + "duration": "Video Length", + "youtube": "Video Watch Time" + }, + "title": "The way to get the amount of time watched (Video Length type only used on watch page)" + } + } + }, + "screenshotButton": { + "enable": { + "label": "Screenshot button", + "title": "Adds a button to the player to take a screenshot of the video" + }, + "saveAs": { + "clipboard": "Clipboard", + "file": "File" + }, + "selectFormat": { + "label": "Screenshot format", + "title": "The format to save the screenshot in" + }, + "selectSaveAs": { + "label": "Screenshot save type", + "title": "The screenshot save type" + }, + "title": "Screenshot settings" + }, + "scrollWheelSpeedControl": { + "adjustmentSteps": { + "label": "Speed Change Per Scroll", + "title": "Adjust the speed change per scroll" + }, + "enable": { + "label": "Scroll wheel speed control", + "title": "Press a modifier key to enable speed adjustment with the scroll wheel." + }, + "optionLabel": "{{KEY}} key", + "select": { + "label": "Modifier key", + "title": "The modifier key to use" + }, + "title": "Scroll wheel speed control settings" + }, + "scrollWheelVolumeControl": { + "adjustmentSteps": { + "label": "Volume Change Per Scroll", + "title": "Adjust the volume change per scroll" + }, + "enable": { + "label": "Scroll wheel volume control", + "title": "Lets you use the scroll wheel to control the volume of the video you're watching" + }, + "holdModifierKey": { + "enable": { + "label": "When holding modifier key", + "title": "Press a modifier key to enable volume adjustment with the scroll wheel." + }, + "optionLabel": "{{KEY}} key", + "select": { + "label": "Modifier key", + "title": "The modifier key to use" + } + }, + "holdRightClick": { + "enable": { + "label": "When holding right click", + "title": "Hold right click to enable scroll wheel volume control" + } + }, + "title": "Scroll wheel volume control settings" + }, + "settingSearch": { + "placeholder": "Search for a setting" + }, + "videoHistory": { + "enable": { + "label": "Track watched videos", + "title": "Keeps track of where you left off on videos you were watching and enables resuming playback" + }, + "resumeType": { + "select": { + "label": "Resume type", + "options": { + "automatic": "Automatic", + "prompt": "Prompt" + }, + "title": "Select how you want to resume videos" + } + }, + "title": "Video history settings" + }, + "volumeBoost": { + "boostAmount": { + "label": "Volume boost amount (dB)", + "title": "The amount to boost the volume by" + }, + "enable": { + "label": "Volume boost", + "title": "Enable volume boost" + }, + "mode": { + "select": { + "label": "Volume boost mode", + "options": { + "global": "Global", + "perVideo": "Per video" + }, + "title": "Choose how volume boost is applied. 'Per video' allows enabling boost for each video individually in the feature menu. 'Global' applies boost to all videos when volume boost is enabled." + } + }, + "title": "Volume boost settings" + }, + "youtubeDataApiV3Key": { + "getApiKeyLinkText": "You can get one from here", + "input": { + "label": "API Key", + "title": "Enter your Youtube Data API V3 key." + }, + "title": "YouTube API V3 Key" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background color", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background color", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Deep Dark Theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" + } + } + } +} \ No newline at end of file diff --git a/public/locales/it-IT.json b/public/locales/it-IT.json index 26ebce39f..b131059f8 100644 --- a/public/locales/it-IT.json +++ b/public/locales/it-IT.json @@ -134,7 +134,6 @@ }, "singular": "Abilita '{{OPTION}}' per configurare questa opzione", "specificOption": { - "deepDarkCustomTheme": "Imposta il tema a 'Personalizzato' per configurare questa opzione.", "featureMenu": "Configura almeno un pulsante da posizionare nel menu' delle funzioni per configurare questa opzione." } }, diff --git a/public/locales/ja-JP.json b/public/locales/ja-JP.json index 3389ed595..8081e16bc 100644 --- a/public/locales/ja-JP.json +++ b/public/locales/ja-JP.json @@ -134,7 +134,6 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "deepDarkCustomTheme": "Set theme to 'Custom' to configure this option.", "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." } }, diff --git a/public/locales/ko-KR.json b/public/locales/ko-KR.json index ff652763f..820e63137 100644 --- a/public/locales/ko-KR.json +++ b/public/locales/ko-KR.json @@ -1,643 +1,642 @@ { - "langCode": "ko-KR", - "langName": "한국어", - "messages": { - "resumingVideo": "영상을 {{VIDEO_TIME}} 부터 다시 재생합니다.", - "settingVolume": "볼륨 부스트를 {{VOLUME_BOOST_AMOUNT}} 로 설정합니다." - }, - "pages": { - "content": { - "features": { - "copyTimestampUrlButton": { - "button": { - "copied": "복사되었습니다.", - "label": "현재 시간 주소 복사" - } - }, - "featureMenu": { - "button": { - "label": "추가 기능" - } - }, - "forwardRewindButtons": { - "buttons": { - "forwardButton": { - "label": "{{TIME}} 초 빨리 감기" - }, - "rewindButton": { - "label": "{{TIME}} 초 되감기" - } - } - }, - "hideEndScreenCardsButton": { - "button": { - "label": "최종 화면 숨기기", - "toggle": { - "off": "최종 화면 보기", - "on": "최종 화면 숨기기" - } - } - }, - "loopButton": { - "button": { - "label": "연속 재생", - "toggle": { - "off": "연속 재생 끄기", - "on": "연속 재생 켜기" - } - } - }, - "maximizePlayerButton": { - "button": { - "label": "화면 크기에 맞추기", - "toggle": { - "off": "끄기", - "on": "켜기" - } - } - }, - "openTranscriptButton": { - "button": { - "label": "스크립트 보기" - } - }, - "playbackSpeedButtons": { - "buttons": { - "decreasePlaybackSpeedButton": { - "label": "재생 속도를 {{SPEED}} 로 변경" - }, - "increasePlaybackSpeedButton": { - "label": "재생 속도를 {{SPEED}} 로 변경" - } - }, - "decreaseLimit": "({{SPEED}}) 에서 더 줄일 수 없습니다.", - "increaseLimit": "({{SPEED}}) 에서 더 늘릴 수 없습니다." - }, - "playlistLength": { - "title": "Total length may not be accurate if some videos are hidden or if you haven't loaded enough videos to get the full length." - }, - "screenshotButton": { - "button": { - "label": "스크린샷" - }, - "copiedToClipboard": "현재 화면 클립보드에 복사" - }, - "videoHistory": { - "resumeButton": "이어서 시청하기", - "resumePrompt": { - "close": "닫기" - } - }, - "volumeBoostButton": { - "button": { - "label": "볼륨 부스트", - "toggle": { - "off": "볼륨 부스트 끄기", - "on": "볼륨 부스트 켜기" - } - } - } - } - }, - "options": { - "notifications": { - "error": { - "scrollWheelHoldModifierKey": { - "sameKey": { - "speedControl": "중복되는 키가 설정되어 있습니다.", - "volumeControl": "중복되는 키가 설정되어 있습니다." - } - } - }, - "info": { - "reset": "모든 옵션이 기본값으로 재설정되었습니다.\n이제 \"확인\" 버튼를 눌러 변경사항을 저장하거나 이 페이지를 닫아 변경사항을 취소할 수 있습니다." - }, - "success": { - "saved": "저장되었습니다." - } - } - } - }, - "settings": { - "clearData": { - "allDataDeleted": "모든 데이터가 삭제되었습니다.", - "confirmAlert": "모든 데이터가 삭제됩니다. 진행할까요?" - }, - "optionDisabled": { - "either": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " or " - }, - "plural": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " and " - }, - "singular": "Enable '{{OPTION}}' to configure this option", - "specificOption": { - "deepDarkCustomTheme": "Set theme to 'Custom' to configure this option.", - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." - } - }, - "scrollForMoreSettings": "Scroll for more settings", - "sections": { - "automaticQuality": { - "enable": { - "label": "화질 설정", - "title": "영상의 화질이 자동으로 변경됩니다." - }, - "fallbackQualityStrategy": { - "select": { - "label": "화질 대체", - "options": { - "higher": "높음", - "lower": "낮음" - }, - "title": "선택한 화질을 사용할 수 없을 때 다음 방법을 사용합니다." - } - }, - "select": { - "label": "동영상 화질", - "title": "항상 선택한 화질로 동영상이 재생됩니다." - }, - "title": "동영상 화질 자동 변경" - }, - "bottomButtons": { - "clear": { - "title": "확장과 관련된 데이터를 PC에서 모두 삭제합니다.", - "value": "데이터 삭제" - }, - "confirm": { - "title": "작업을 진행하려면 다시 누르세요", - "value": "확인" - }, - "openTab": { - "title": "새 탭에서 설정 열기" - }, - "reset": { - "title": "모든 설정을 기본값으로 변경합니다. 진행을 원하시면 확인을 누르세요", - "value": "초기화" - } - }, - "buttonPlacement": { - "select": { - "buttonNames": { - "copyTimestampUrlButton": "현재 시간 주소 복사 버튼", - "decreasePlaybackSpeedButton": "속도 조절 버튼", - "forwardButton": "빨리 감기 버튼", - "hideEndScreenCardsButton": "최종 화면 숨기기", - "increasePlaybackSpeedButton": "속도 조절 버튼", - "loopButton": "연속 재생 버튼", - "maximizePlayerButton": "화면 크기에 맞추기 버튼", - "openTranscriptButton": "스크립트 보기 버튼", - "rewindButton": "되감기 버튼", - "screenshotButton": "스크린샷 버튼", - "volumeBoostButton": "볼륨 부스트 버튼" - }, - "options": { - "below_player": { - "placement": "플레이어 컨트롤 아래", - "value": "아래" - }, - "feature_menu": { - "placement": "추가 기능 버튼", - "value": "추가 기능" - }, - "player_controls_left": { - "placement": "플레이어 컨트롤의 왼쪽", - "value": "왼쪽" - }, - "player_controls_right": { - "placement": "플레이어 컨트롤의 오른쪽", - "value": "오른쪽" - } - }, - "title": "{{BUTTON_NAME}} 을 {{PLACEMENT}} 에 배치하세요" - }, - "title": "버튼 배치 설정" - }, - "customCSS": { - "editor": { - "collapse": "편집기 축소", - "expand": "편집기 확대", - "noProblems": "발견된 문제가 없습니다." - }, - "enable": { - "label": "CSS 커스텀 활성화", - "title": "커스텀 CSS를 적용할 수 있습니다." - }, - "title": "커스텀 CSS 설정" - }, - "featureMenu": { - "openType": { - "select": { - "label": "메뉴 활성화 방식", - "options": { - "click": "클릭 시", - "hover": "마우스 커서를 올릴 때" - }, - "title": "추가 기능 메뉴를 어떤 방식으로 열지 선택하세요" - }, - "title": "추가 기능 설정" - } - }, - "forwardRewindButtons": { - "enable": { - "label": "되감기/빨리 감기 버튼 사용", - "title": "플레이어에 되감기와 빨리 감기 버튼을 추가합니다." - }, - "time": { - "label": "되감기/빨리 감기 시간", - "title": "되감기/빨리 감기 시간" - }, - "title": "되감기/빨리 감기 버튼 설정" - }, - "importExportSettings": { - "exportButton": { - "success": "설정을 성공적으로 내보냈습니다.", - "title": "설정 JSON로 내보내기", - "value": "설정 내보내기" - }, - "importButton": { - "error": { - "unknown": "설정 가져오기에 오류가 있습니다. 파일 형식을 확인하십시오.", - "validation": "설정 가져 오기에 오류가 있습니다. 파일 형식을 확인하십시오.\n{{ERROR_MESSAGE}}" - }, - "success": "설정 파일을 성공적으로 가져왔습니다.", - "title": "JSON 파일에서 설정 가져오기", - "value": "설정 가져오기" - } - }, - "language": { - "select": { - "label": "언어", - "title": "이곳에서 언어를 변경할 수 있습니다." - }, - "title": "언어" - }, - "miscellaneous": { - "features": { - "automaticTheaterMode": { - "label": "자동 극장 모드", - "title": "동영상 재생 시 자동으로 극장 모드가 활성화 됩니다." - }, - "automaticallyDisableAmbientMode": { - "label": "Automatically disable ambient mode", - "title": "Automatically disables ambient mode when you load a video" - }, - "automaticallyDisableClosedCaptions": { - "label": "Automatically disable closed captions", - "title": "Automatically disables closed captions when you load a video" - }, - "copyTimestampUrlButton": { - "label": "현재 시간 주소 복사 버튼", - "title": "현재 시간 주소 복사 (?t=123)" - }, - "defaultToOriginalAudioTrack": { - "label": "Default to original audio track", - "title": "Always default to the original audio track" - }, - "hideArtificialIntelligenceSummary": { - "label": "Hide AI summary", - "title": "Hides the artificial intelligence summary below videos" - }, - "hideEndScreenCards": { - "label": "최종 화면 숨기기", - "title": "동영상 마지막에 등장하는 추천 동영상 카드들을 숨깁니다." - }, - "hideEndScreenCardsButton": { - "label": "최종 화면 숨기기 버튼", - "title": "동영상 마지막에 등장하는 추천 동영상 카드들을 숨기거나 표시합니다." - }, - "hideLiveStreamChat": { - "label": "실시간 채팅 숨기기", - "title": "실시간 채팅 레이아웃을 숨깁니다." - }, - "hideOfficialArtistVideosFromHomePage": { - "label": "Hide Official Artist Videos", - "title": "Hide Official Artist Videos from Home Page" - }, - "hidePaidPromotionBanner": { - "label": "유료 광고 배너 숨기기", - "title": "유료 광고가 있는 동영상을 볼 때 나타나는 배너를 숨깁니다." - }, - "hidePlayables": { - "label": "Hide playables", - "title": "Hides all playables" - }, - "hideScrollbar": { - "label": "스크롤바 숨기기", - "title": "스크롤바를 숨깁니다. 깔끔한 느낌을 받으시려면 키세요" - }, - "hideShorts": { - "label": "쇼츠 숨기기", - "title": "쇼츠 동영상들을 숨깁니다." - }, - "hideTranslateComment": { - "label": "댓글 번역 버튼 숨기기", - "title": "댓글 아래에 표시되는 번역 버튼을 숨깁니다." - }, - "loopButton": { - "label": "연속 재생 버튼", - "title": "추가 기능 메뉴에 \"연속 재생\" 버튼을 추가합니다." - }, - "maximizePlayerButton": { - "label": "화면 크기에 맞추기 버튼", - "title": "추가 기능 메뉴에 \"화면 크기에 맞추기\" 버튼을 추가합니다." - }, - "openTranscriptButton": { - "label": "스크립트 보기 버튼", - "title": "추가 기능 메뉴에 \"스크립트 보기\" 버튼을 추가합니다." - }, - "openYouTubeSettingsOnHover": { - "label": "마우스 커서를 올려 유튜브 설정 열기", - "title": "설정 버튼 위로 마우스 커서를 올리면 유튜브 설정 메뉴를 엽니다." - }, - "pauseBackgroundPlayers": { - "label": "백그라운드 플레이어 일시 중지", - "title": "다른 탭에서 동영상을 재생할 때 이전 탭의 동영상 플레이어를 일시 중지합니다." - }, - "playlistRemover": { - "label": "Hide playlists from homepage", - "title": "Get rid of playlists from homepage" - }, - "remainingTime": { - "label": "남은 시간 표시", - "title": "현재 동영상의 남은 시간을 표시합니다." - }, - "rememberLastVolume": { - "label": "마지막 볼륨 기억", - "title": "마지막으로 본 동영상의 볼륨이 다른 동영상에서도 유지됩니다." - }, - "removeRedirect": { - "label": "유튜브 / 리디렉션 URL 제거", - "title": "리디렉션 경고 대화를 건너뛰고 실제 URL로 유튜브 리디렉션을 대체합니다." - }, - "restoreFullscreenScrolling": { - "label": "Restore fullscreen scrolling", - "title": "Restores scrolling in fullscreen mode" - }, - "shareShortener": { - "label": "유튜브 동영상 공유 링크 짧게하기", - "title": "si/feature 매개 변수를 제거하여 유튜브 동영상 공유 링크를 단축(youtu.be)" - }, - "shortsAutoScroll": { - "label": "쇼츠 동영상 자동 스크롤", - "title": "재생이 완료되면 다음 쇼츠로 넘어갑니다." - }, - "skipContinueWatching": { - "label": "'동영상이 일시중지되었습니다. 이어서 시청하시겠어요?' 팝업 스킵", - "title": "'동영상이 일시중지되었습니다. 이어서 시청하시겠어요?' 팝업을 자동으로 스킵하여 끊김 없는 재생을 유지합니다." - } - }, - "title": "기타 설정" - }, - "onScreenDisplaySettings": { - "color": { - "label": "색상", - "options": { - "blue": "블루", - "green": "그린", - "orange": "오렌지", - "pink": "핑크", - "purple": "퍼플", - "red": "레드", - "white": "화이트", - "yellow": "옐로우" - }, - "title": "화면에 속도 조절 등의 알림을 표시하는 텍스트 색상을 변경합니다." - }, - "hide": { - "label": "사라지는 시간", - "title": "온 스크린 디스플레이가 몇초 후에 사라지는지 설정합니다." - }, - "opacity": { - "label": "투명도", - "title": "온 스크린 디스플레이의 투명도 조절" - }, - "padding": { - "label": "여백", - "title": "온 스크린 디스플레이의 주변 여백을 픽셀 단위로 조절합니다." - }, - "position": { - "label": "위치", - "options": { - "bottom_left": "왼쪽 아래", - "bottom_right": "오른쪽 아래", - "center": "가운데", - "top_left": "왼쪽 위", - "top_right": "오른쪽 위" - }, - "title": "온 스크린 디스플레이의 위치를 선택하세요" - }, - "title": "온 스크린 디스플레이 설정", - "type": { - "label": "유형", - "options": { - "circle": "원형", - "line": "선", - "no_display": "표시 안 함", - "text": "텍스트" - }, - "title": "온 스크린 디스플레이가 어떻게 표시될지 선택합니다." - } - }, - "playbackSpeed": { - "enable": { - "label": "재생 속도 고정", - "title": "동영상 재생 속도를 아래에서 선택한 속도로 설정합니다." - }, - "playbackSpeedButtons": { - "label": "재생 속도 버튼", - "select": { - "label": "재생 속도 버튼", - "title": "클릭당 변경되는 속도 단위" - }, - "title": "보고있는 동영상의 재생 속도를 변경하기 위한 버튼 추가" - }, - "select": { - "label": "플레이어 속도", - "title": "동영상의 속도를 변경합니다." - }, - "title": "재생 속도 설정" - }, - "playlistLength": { - "enable": { - "label": "Display playlist length information", - "title": "Shows the total length of the playlist, how much has been watched, and how much remains." - }, - "title": "Playlist length settings", - "wayToGetLength": { - "select": { - "label": "Method to get playlist length", - "title": "The way to get playlist length information (API method will fallback to HTML if an error occurs)" - } - }, - "wayToGetWatchTime": { - "select": { - "label": "Method to get watched time", - "options": { - "duration": "Video Length", - "youtube": "Video Watch Time" - }, - "title": "The way to get the amount of time watched (Video Length type only used on watch page)" - } - } - }, - "screenshotButton": { - "enable": { - "label": "스크린샷 버튼", - "title": "현재 화면을 캡처하기 위한 스크린샷 버튼을 추가합니다." - }, - "saveAs": { - "clipboard": "클립보드로 복사", - "file": "파일로 저장" - }, - "selectFormat": { - "label": "캡처 방법", - "title": "스크린샷을 저장하는 방식" - }, - "selectSaveAs": { - "label": "스크린샷 저장 방식", - "title": "현재 화면을 클립보드에 복사, 파일로 저장 두 가지 옵션이 있습니다." - }, - "title": "스크린샷 설정" - }, - "scrollWheelSpeedControl": { - "adjustmentSteps": { - "label": "스크롤 당 속도 변경", - "title": "스크롤에 따라 속도가 조절됩니다." - }, - "enable": { - "label": "스크롤 휠로 속도 제어", - "title": "스크롤 휠을 사용해 속도를 조절하려면 이 옵션을 사용하세요" - }, - "optionLabel": "{{KEY}}", - "select": { - "label": "보조 키", - "title": "보조 키와 함께 사용해야 작동이 됩니다." - }, - "title": "스크롤 휠 속도 제어 설정" - }, - "scrollWheelVolumeControl": { - "adjustmentSteps": { - "label": "스크롤 당 볼륨 조절", - "title": "스크롤에 따라 볼륨이 조절됩니다." - }, - "enable": { - "label": "스크롤로 볼륨 조절", - "title": "스크롤 휠을 사용하여 보고 있는 동영상의 볼륨을 조절할 수 있습니다." - }, - "holdModifierKey": { - "enable": { - "label": "보조 키를 누를 때 활성화", - "title": "보조 키와 함께 사용해야 작동합니다." - }, - "optionLabel": "{{KEY}}", - "select": { - "label": "보조 키", - "title": "보조 키와 함께 사용해야 작동합니다." - } - }, - "holdRightClick": { - "enable": { - "label": "마우스 오른쪽 버튼을 누른 상태에서 활성화", - "title": "우클릭 상태로 스크롤 하세요" - } - }, - "title": "스크롤 휠로 볼륨 조절 설정" - }, - "settingSearch": { - "placeholder": "설정 검색" - }, - "videoHistory": { - "enable": { - "label": "시청한 동영상 기억", - "title": "동영상의 중단된 위치를 기억하고 이어서 시청할 수 있습니다." - }, - "resumeType": { - "select": { - "label": "이어서 시청하기", - "options": { - "automatic": "자동", - "prompt": "팝업 클릭" - }, - "title": "이어서 시청하는 방법 선택" - } - }, - "title": "동영상 시청 기록 설정" - }, - "volumeBoost": { - "boostAmount": { - "label": "부피 부스트(dB)", - "title": "높을 수록 소리가 커집니다." - }, - "enable": { - "label": "볼륨 부스트", - "title": "볼륨 부스트 켜기" - }, - "mode": { - "select": { - "label": "볼륨 부스트 적용 방법", - "options": { - "global": "전체", - "perVideo": "개별 동영상" - }, - "title": "볼륨 부스트 활성화 방법을 선택하십시오. '개별 동영상'을 사용하면 추가 기능 메뉴에서 각 비디오를 개별적으로 적용할 수 있습니다. 전체'를 선택하면 이 모든 동영상에 적용됩니다." - } - }, - "title": "볼륨 부스트 설정" - }, - "youtubeDataApiV3Key": { - "getApiKeyLinkText": "You can get one from here", - "input": { - "label": "API Key", - "title": "Enter your Youtube Data API V3 key." - }, - "title": "YouTube API V3 Key" - }, - "youtubeDeepDark": { - "author": "개발자", - "co-authors": "도와주신분들", - "colors": { - "colorShadow": { - "label": "그림자 색상", - "title": "그림자 색상" - }, - "dimmerText": { - "label": "보조 텍스트 색상", - "title": "보조 텍스트의 색상" - }, - "hoverBackground": { - "label": "마우스 커서를 올렸을 때 색상", - "title": "마우스 커서를 올렸을 때의 색상을 변경합니다." - }, - "mainBackground": { - "label": "메인 배경 색상", - "title": "메인 백그라운드 색상을 변경합니다." - }, - "mainColor": { - "label": "강조 색상", - "title": "강조할 색상을 선택하세요" - }, - "mainText": { - "label": "메인 텍스트 색상", - "title": "메인 텍스트 색상을 변경합니다." - }, - "secondBackground": { - "label": "보조 배경 색상", - "title": "보조 배경의 색상을 변경합니다." - } - }, - "enable": { - "label": "선택한 테마 사용", - "title": "선택한 테마를 활성화합니다." - }, - "select": { - "label": "테마 선택", - "title": "적용할 테마를 선택하세요" - }, - "title": "유튜브 딥 다크 설정" - } - } - } -} + "langCode": "ko-KR", + "langName": "한국어", + "messages": { + "resumingVideo": "영상을 {{VIDEO_TIME}} 부터 다시 재생합니다.", + "settingVolume": "볼륨 부스트를 {{VOLUME_BOOST_AMOUNT}} 로 설정합니다." + }, + "pages": { + "content": { + "features": { + "copyTimestampUrlButton": { + "button": { + "copied": "복사되었습니다.", + "label": "현재 시간 주소 복사" + } + }, + "featureMenu": { + "button": { + "label": "추가 기능" + } + }, + "forwardRewindButtons": { + "buttons": { + "forwardButton": { + "label": "{{TIME}} 초 빨리 감기" + }, + "rewindButton": { + "label": "{{TIME}} 초 되감기" + } + } + }, + "hideEndScreenCardsButton": { + "button": { + "label": "최종 화면 숨기기", + "toggle": { + "off": "최종 화면 보기", + "on": "최종 화면 숨기기" + } + } + }, + "loopButton": { + "button": { + "label": "연속 재생", + "toggle": { + "off": "연속 재생 끄기", + "on": "연속 재생 켜기" + } + } + }, + "maximizePlayerButton": { + "button": { + "label": "화면 크기에 맞추기", + "toggle": { + "off": "끄기", + "on": "켜기" + } + } + }, + "openTranscriptButton": { + "button": { + "label": "스크립트 보기" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "재생 속도를 {{SPEED}} 로 변경" + }, + "increasePlaybackSpeedButton": { + "label": "재생 속도를 {{SPEED}} 로 변경" + } + }, + "decreaseLimit": "({{SPEED}}) 에서 더 줄일 수 없습니다.", + "increaseLimit": "({{SPEED}}) 에서 더 늘릴 수 없습니다." + }, + "playlistLength": { + "title": "Total length may not be accurate if some videos are hidden or if you haven't loaded enough videos to get the full length." + }, + "screenshotButton": { + "button": { + "label": "스크린샷" + }, + "copiedToClipboard": "현재 화면 클립보드에 복사" + }, + "videoHistory": { + "resumeButton": "이어서 시청하기", + "resumePrompt": { + "close": "닫기" + } + }, + "volumeBoostButton": { + "button": { + "label": "볼륨 부스트", + "toggle": { + "off": "볼륨 부스트 끄기", + "on": "볼륨 부스트 켜기" + } + } + } + } + }, + "options": { + "notifications": { + "error": { + "scrollWheelHoldModifierKey": { + "sameKey": { + "speedControl": "중복되는 키가 설정되어 있습니다.", + "volumeControl": "중복되는 키가 설정되어 있습니다." + } + } + }, + "info": { + "reset": "모든 옵션이 기본값으로 재설정되었습니다.\n이제 \"확인\" 버튼를 눌러 변경사항을 저장하거나 이 페이지를 닫아 변경사항을 취소할 수 있습니다." + }, + "success": { + "saved": "저장되었습니다." + } + } + } + }, + "settings": { + "clearData": { + "allDataDeleted": "모든 데이터가 삭제되었습니다.", + "confirmAlert": "모든 데이터가 삭제됩니다. 진행할까요?" + }, + "optionDisabled": { + "either": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " or " + }, + "plural": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " and " + }, + "singular": "Enable '{{OPTION}}' to configure this option", + "specificOption": { + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + } + }, + "scrollForMoreSettings": "Scroll for more settings", + "sections": { + "automaticQuality": { + "enable": { + "label": "화질 설정", + "title": "영상의 화질이 자동으로 변경됩니다." + }, + "fallbackQualityStrategy": { + "select": { + "label": "화질 대체", + "options": { + "higher": "높음", + "lower": "낮음" + }, + "title": "선택한 화질을 사용할 수 없을 때 다음 방법을 사용합니다." + } + }, + "select": { + "label": "동영상 화질", + "title": "항상 선택한 화질로 동영상이 재생됩니다." + }, + "title": "동영상 화질 자동 변경" + }, + "bottomButtons": { + "clear": { + "title": "확장과 관련된 데이터를 PC에서 모두 삭제합니다.", + "value": "데이터 삭제" + }, + "confirm": { + "title": "작업을 진행하려면 다시 누르세요", + "value": "확인" + }, + "openTab": { + "title": "새 탭에서 설정 열기" + }, + "reset": { + "title": "모든 설정을 기본값으로 변경합니다. 진행을 원하시면 확인을 누르세요", + "value": "초기화" + } + }, + "buttonPlacement": { + "select": { + "buttonNames": { + "copyTimestampUrlButton": "현재 시간 주소 복사 버튼", + "decreasePlaybackSpeedButton": "속도 조절 버튼", + "forwardButton": "빨리 감기 버튼", + "hideEndScreenCardsButton": "최종 화면 숨기기", + "increasePlaybackSpeedButton": "속도 조절 버튼", + "loopButton": "연속 재생 버튼", + "maximizePlayerButton": "화면 크기에 맞추기 버튼", + "openTranscriptButton": "스크립트 보기 버튼", + "rewindButton": "되감기 버튼", + "screenshotButton": "스크린샷 버튼", + "volumeBoostButton": "볼륨 부스트 버튼" + }, + "options": { + "below_player": { + "placement": "플레이어 컨트롤 아래", + "value": "아래" + }, + "feature_menu": { + "placement": "추가 기능 버튼", + "value": "추가 기능" + }, + "player_controls_left": { + "placement": "플레이어 컨트롤의 왼쪽", + "value": "왼쪽" + }, + "player_controls_right": { + "placement": "플레이어 컨트롤의 오른쪽", + "value": "오른쪽" + } + }, + "title": "{{BUTTON_NAME}} 을 {{PLACEMENT}} 에 배치하세요" + }, + "title": "버튼 배치 설정" + }, + "customCSS": { + "editor": { + "collapse": "편집기 축소", + "expand": "편집기 확대", + "noProblems": "발견된 문제가 없습니다." + }, + "enable": { + "label": "CSS 커스텀 활성화", + "title": "커스텀 CSS를 적용할 수 있습니다." + }, + "title": "커스텀 CSS 설정" + }, + "featureMenu": { + "openType": { + "select": { + "label": "메뉴 활성화 방식", + "options": { + "click": "클릭 시", + "hover": "마우스 커서를 올릴 때" + }, + "title": "추가 기능 메뉴를 어떤 방식으로 열지 선택하세요" + }, + "title": "추가 기능 설정" + } + }, + "forwardRewindButtons": { + "enable": { + "label": "되감기/빨리 감기 버튼 사용", + "title": "플레이어에 되감기와 빨리 감기 버튼을 추가합니다." + }, + "time": { + "label": "되감기/빨리 감기 시간", + "title": "되감기/빨리 감기 시간" + }, + "title": "되감기/빨리 감기 버튼 설정" + }, + "importExportSettings": { + "exportButton": { + "success": "설정을 성공적으로 내보냈습니다.", + "title": "설정 JSON로 내보내기", + "value": "설정 내보내기" + }, + "importButton": { + "error": { + "unknown": "설정 가져오기에 오류가 있습니다. 파일 형식을 확인하십시오.", + "validation": "설정 가져 오기에 오류가 있습니다. 파일 형식을 확인하십시오.\n{{ERROR_MESSAGE}}" + }, + "success": "설정 파일을 성공적으로 가져왔습니다.", + "title": "JSON 파일에서 설정 가져오기", + "value": "설정 가져오기" + } + }, + "language": { + "select": { + "label": "언어", + "title": "이곳에서 언어를 변경할 수 있습니다." + }, + "title": "언어" + }, + "miscellaneous": { + "features": { + "automaticTheaterMode": { + "label": "자동 극장 모드", + "title": "동영상 재생 시 자동으로 극장 모드가 활성화 됩니다." + }, + "automaticallyDisableAmbientMode": { + "label": "Automatically disable ambient mode", + "title": "Automatically disables ambient mode when you load a video" + }, + "automaticallyDisableClosedCaptions": { + "label": "Automatically disable closed captions", + "title": "Automatically disables closed captions when you load a video" + }, + "copyTimestampUrlButton": { + "label": "현재 시간 주소 복사 버튼", + "title": "현재 시간 주소 복사 (?t=123)" + }, + "defaultToOriginalAudioTrack": { + "label": "Default to original audio track", + "title": "Always default to the original audio track" + }, + "hideArtificialIntelligenceSummary": { + "label": "Hide AI summary", + "title": "Hides the artificial intelligence summary below videos" + }, + "hideEndScreenCards": { + "label": "최종 화면 숨기기", + "title": "동영상 마지막에 등장하는 추천 동영상 카드들을 숨깁니다." + }, + "hideEndScreenCardsButton": { + "label": "최종 화면 숨기기 버튼", + "title": "동영상 마지막에 등장하는 추천 동영상 카드들을 숨기거나 표시합니다." + }, + "hideLiveStreamChat": { + "label": "실시간 채팅 숨기기", + "title": "실시간 채팅 레이아웃을 숨깁니다." + }, + "hideOfficialArtistVideosFromHomePage": { + "label": "Hide Official Artist Videos", + "title": "Hide Official Artist Videos from Home Page" + }, + "hidePaidPromotionBanner": { + "label": "유료 광고 배너 숨기기", + "title": "유료 광고가 있는 동영상을 볼 때 나타나는 배너를 숨깁니다." + }, + "hidePlayables": { + "label": "Hide playables", + "title": "Hides all playables" + }, + "hideScrollbar": { + "label": "스크롤바 숨기기", + "title": "스크롤바를 숨깁니다. 깔끔한 느낌을 받으시려면 키세요" + }, + "hideShorts": { + "label": "쇼츠 숨기기", + "title": "쇼츠 동영상들을 숨깁니다." + }, + "hideTranslateComment": { + "label": "댓글 번역 버튼 숨기기", + "title": "댓글 아래에 표시되는 번역 버튼을 숨깁니다." + }, + "loopButton": { + "label": "연속 재생 버튼", + "title": "추가 기능 메뉴에 \"연속 재생\" 버튼을 추가합니다." + }, + "maximizePlayerButton": { + "label": "화면 크기에 맞추기 버튼", + "title": "추가 기능 메뉴에 \"화면 크기에 맞추기\" 버튼을 추가합니다." + }, + "openTranscriptButton": { + "label": "스크립트 보기 버튼", + "title": "추가 기능 메뉴에 \"스크립트 보기\" 버튼을 추가합니다." + }, + "openYouTubeSettingsOnHover": { + "label": "마우스 커서를 올려 유튜브 설정 열기", + "title": "설정 버튼 위로 마우스 커서를 올리면 유튜브 설정 메뉴를 엽니다." + }, + "pauseBackgroundPlayers": { + "label": "백그라운드 플레이어 일시 중지", + "title": "다른 탭에서 동영상을 재생할 때 이전 탭의 동영상 플레이어를 일시 중지합니다." + }, + "playlistRemover": { + "label": "Hide playlists from homepage", + "title": "Get rid of playlists from homepage" + }, + "remainingTime": { + "label": "남은 시간 표시", + "title": "현재 동영상의 남은 시간을 표시합니다." + }, + "rememberLastVolume": { + "label": "마지막 볼륨 기억", + "title": "마지막으로 본 동영상의 볼륨이 다른 동영상에서도 유지됩니다." + }, + "removeRedirect": { + "label": "유튜브 / 리디렉션 URL 제거", + "title": "리디렉션 경고 대화를 건너뛰고 실제 URL로 유튜브 리디렉션을 대체합니다." + }, + "restoreFullscreenScrolling": { + "label": "Restore fullscreen scrolling", + "title": "Restores scrolling in fullscreen mode" + }, + "shareShortener": { + "label": "유튜브 동영상 공유 링크 짧게하기", + "title": "si/feature 매개 변수를 제거하여 유튜브 동영상 공유 링크를 단축(youtu.be)" + }, + "shortsAutoScroll": { + "label": "쇼츠 동영상 자동 스크롤", + "title": "재생이 완료되면 다음 쇼츠로 넘어갑니다." + }, + "skipContinueWatching": { + "label": "'동영상이 일시중지되었습니다. 이어서 시청하시겠어요?' 팝업 스킵", + "title": "'동영상이 일시중지되었습니다. 이어서 시청하시겠어요?' 팝업을 자동으로 스킵하여 끊김 없는 재생을 유지합니다." + } + }, + "title": "기타 설정" + }, + "onScreenDisplaySettings": { + "color": { + "label": "색상", + "options": { + "blue": "블루", + "green": "그린", + "orange": "오렌지", + "pink": "핑크", + "purple": "퍼플", + "red": "레드", + "white": "화이트", + "yellow": "옐로우" + }, + "title": "화면에 속도 조절 등의 알림을 표시하는 텍스트 색상을 변경합니다." + }, + "hide": { + "label": "사라지는 시간", + "title": "온 스크린 디스플레이가 몇초 후에 사라지는지 설정합니다." + }, + "opacity": { + "label": "투명도", + "title": "온 스크린 디스플레이의 투명도 조절" + }, + "padding": { + "label": "여백", + "title": "온 스크린 디스플레이의 주변 여백을 픽셀 단위로 조절합니다." + }, + "position": { + "label": "위치", + "options": { + "bottom_left": "왼쪽 아래", + "bottom_right": "오른쪽 아래", + "center": "가운데", + "top_left": "왼쪽 위", + "top_right": "오른쪽 위" + }, + "title": "온 스크린 디스플레이의 위치를 선택하세요" + }, + "title": "온 스크린 디스플레이 설정", + "type": { + "label": "유형", + "options": { + "circle": "원형", + "line": "선", + "no_display": "표시 안 함", + "text": "텍스트" + }, + "title": "온 스크린 디스플레이가 어떻게 표시될지 선택합니다." + } + }, + "playbackSpeed": { + "enable": { + "label": "재생 속도 고정", + "title": "동영상 재생 속도를 아래에서 선택한 속도로 설정합니다." + }, + "playbackSpeedButtons": { + "label": "재생 속도 버튼", + "select": { + "label": "재생 속도 버튼", + "title": "클릭당 변경되는 속도 단위" + }, + "title": "보고있는 동영상의 재생 속도를 변경하기 위한 버튼 추가" + }, + "select": { + "label": "플레이어 속도", + "title": "동영상의 속도를 변경합니다." + }, + "title": "재생 속도 설정" + }, + "playlistLength": { + "enable": { + "label": "Display playlist length information", + "title": "Shows the total length of the playlist, how much has been watched, and how much remains." + }, + "title": "Playlist length settings", + "wayToGetLength": { + "select": { + "label": "Method to get playlist length", + "title": "The way to get playlist length information (API method will fallback to HTML if an error occurs)" + } + }, + "wayToGetWatchTime": { + "select": { + "label": "Method to get watched time", + "options": { + "duration": "Video Length", + "youtube": "Video Watch Time" + }, + "title": "The way to get the amount of time watched (Video Length type only used on watch page)" + } + } + }, + "screenshotButton": { + "enable": { + "label": "스크린샷 버튼", + "title": "현재 화면을 캡처하기 위한 스크린샷 버튼을 추가합니다." + }, + "saveAs": { + "clipboard": "클립보드로 복사", + "file": "파일로 저장" + }, + "selectFormat": { + "label": "캡처 방법", + "title": "스크린샷을 저장하는 방식" + }, + "selectSaveAs": { + "label": "스크린샷 저장 방식", + "title": "현재 화면을 클립보드에 복사, 파일로 저장 두 가지 옵션이 있습니다." + }, + "title": "스크린샷 설정" + }, + "scrollWheelSpeedControl": { + "adjustmentSteps": { + "label": "스크롤 당 속도 변경", + "title": "스크롤에 따라 속도가 조절됩니다." + }, + "enable": { + "label": "스크롤 휠로 속도 제어", + "title": "스크롤 휠을 사용해 속도를 조절하려면 이 옵션을 사용하세요" + }, + "optionLabel": "{{KEY}}", + "select": { + "label": "보조 키", + "title": "보조 키와 함께 사용해야 작동이 됩니다." + }, + "title": "스크롤 휠 속도 제어 설정" + }, + "scrollWheelVolumeControl": { + "adjustmentSteps": { + "label": "스크롤 당 볼륨 조절", + "title": "스크롤에 따라 볼륨이 조절됩니다." + }, + "enable": { + "label": "스크롤로 볼륨 조절", + "title": "스크롤 휠을 사용하여 보고 있는 동영상의 볼륨을 조절할 수 있습니다." + }, + "holdModifierKey": { + "enable": { + "label": "보조 키를 누를 때 활성화", + "title": "보조 키와 함께 사용해야 작동합니다." + }, + "optionLabel": "{{KEY}}", + "select": { + "label": "보조 키", + "title": "보조 키와 함께 사용해야 작동합니다." + } + }, + "holdRightClick": { + "enable": { + "label": "마우스 오른쪽 버튼을 누른 상태에서 활성화", + "title": "우클릭 상태로 스크롤 하세요" + } + }, + "title": "스크롤 휠로 볼륨 조절 설정" + }, + "settingSearch": { + "placeholder": "설정 검색" + }, + "videoHistory": { + "enable": { + "label": "시청한 동영상 기억", + "title": "동영상의 중단된 위치를 기억하고 이어서 시청할 수 있습니다." + }, + "resumeType": { + "select": { + "label": "이어서 시청하기", + "options": { + "automatic": "자동", + "prompt": "팝업 클릭" + }, + "title": "이어서 시청하는 방법 선택" + } + }, + "title": "동영상 시청 기록 설정" + }, + "volumeBoost": { + "boostAmount": { + "label": "부피 부스트(dB)", + "title": "높을 수록 소리가 커집니다." + }, + "enable": { + "label": "볼륨 부스트", + "title": "볼륨 부스트 켜기" + }, + "mode": { + "select": { + "label": "볼륨 부스트 적용 방법", + "options": { + "global": "전체", + "perVideo": "개별 동영상" + }, + "title": "볼륨 부스트 활성화 방법을 선택하십시오. '개별 동영상'을 사용하면 추가 기능 메뉴에서 각 비디오를 개별적으로 적용할 수 있습니다. 전체'를 선택하면 이 모든 동영상에 적용됩니다." + } + }, + "title": "볼륨 부스트 설정" + }, + "youtubeDataApiV3Key": { + "getApiKeyLinkText": "You can get one from here", + "input": { + "label": "API Key", + "title": "Enter your Youtube Data API V3 key." + }, + "title": "YouTube API V3 Key" + }, + "youtubeDeepDark": { + "author": "개발자", + "co-authors": "도와주신분들", + "colors": { + "colorShadow": { + "label": "그림자 색상", + "title": "그림자 색상" + }, + "dimmerText": { + "label": "보조 텍스트 색상", + "title": "보조 텍스트의 색상" + }, + "hoverBackground": { + "label": "마우스 커서를 올렸을 때 색상", + "title": "마우스 커서를 올렸을 때의 색상을 변경합니다." + }, + "mainBackground": { + "label": "메인 배경 색상", + "title": "메인 백그라운드 색상을 변경합니다." + }, + "mainColor": { + "label": "강조 색상", + "title": "강조할 색상을 선택하세요" + }, + "mainText": { + "label": "메인 텍스트 색상", + "title": "메인 텍스트 색상을 변경합니다." + }, + "secondBackground": { + "label": "보조 배경 색상", + "title": "보조 배경의 색상을 변경합니다." + } + }, + "enable": { + "label": "선택한 테마 사용", + "title": "선택한 테마를 활성화합니다." + }, + "select": { + "label": "테마 선택", + "title": "적용할 테마를 선택하세요" + }, + "title": "유튜브 딥 다크 설정" + } + } + } +} \ No newline at end of file diff --git a/public/locales/nl-NL.json b/public/locales/nl-NL.json index 10d55970a..8c7ba396e 100644 --- a/public/locales/nl-NL.json +++ b/public/locales/nl-NL.json @@ -134,7 +134,6 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "deepDarkCustomTheme": "Set theme to 'Custom' to configure this option.", "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." } }, diff --git a/public/locales/pl-PL.json b/public/locales/pl-PL.json index b1e348acc..1e898505e 100644 --- a/public/locales/pl-PL.json +++ b/public/locales/pl-PL.json @@ -134,7 +134,6 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "deepDarkCustomTheme": "Set theme to 'Custom' to configure this option.", "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." } }, diff --git a/public/locales/pt-BR.json b/public/locales/pt-BR.json index e6b909a25..d8109f246 100644 --- a/public/locales/pt-BR.json +++ b/public/locales/pt-BR.json @@ -134,7 +134,6 @@ }, "singular": "Ative o '{{OPTION}}' para configurar esta opção", "specificOption": { - "deepDarkCustomTheme": "Defina o tema para 'Personalizado' para configurar esta opção.", "featureMenu": "Altere pelo menos um botão no menu de recursos para configurar esta opção." } }, diff --git a/public/locales/ru-RU.json b/public/locales/ru-RU.json index 82569e5c4..114bd8e56 100644 --- a/public/locales/ru-RU.json +++ b/public/locales/ru-RU.json @@ -1,643 +1,642 @@ { - "langCode": "ru-RU", - "langName": "Русский", - "messages": { - "resumingVideo": "Возобновление видео на {{VIDEO_TIME}}", - "settingVolume": "Усиление громкости установлено на {{VOLUME_BOOST_AMOUNT}}" - }, - "pages": { - "content": { - "features": { - "copyTimestampUrlButton": { - "button": { - "copied": "Скопировано!", - "label": "Копировать URL видео с таймкодом" - } - }, - "featureMenu": { - "button": { - "label": "Меню функций" - } - }, - "forwardRewindButtons": { - "buttons": { - "forwardButton": { - "label": "Перемотка вперёд на {{TIME}}" - }, - "rewindButton": { - "label": "Перемотка назад на {{TIME}}" - } - } - }, - "hideEndScreenCardsButton": { - "button": { - "label": "Скрыть заставки следующих видео", - "toggle": { - "off": "Показать заставки следующих видео", - "on": "Скрыть заставки следующих видео" - } - } - }, - "loopButton": { - "button": { - "label": "Зациклить", - "toggle": { - "off": "Зацикливание выключено", - "on": "Зацикливание включено" - } - } - }, - "maximizePlayerButton": { - "button": { - "label": "Развернуть", - "toggle": { - "off": "Проигрыватель свернут", - "on": "Проигрыватель развернут" - } - } - }, - "openTranscriptButton": { - "button": { - "label": "Открыть стенограмму" - } - }, - "playbackSpeedButtons": { - "buttons": { - "decreasePlaybackSpeedButton": { - "label": "Уменьшить скорость на {{SPEED}}" - }, - "increasePlaybackSpeedButton": { - "label": "Увеличить скорость на {{SPEED}}" - } - }, - "decreaseLimit": "Невозможно уменьшить ({{SPEED}})", - "increaseLimit": "Невозможно увеличить ({{SPEED}})" - }, - "playlistLength": { - "title": "Общая длина может быть неточной, если некоторые видео скрыты или недостаточно видео прогружено, чтобы получить полную длину." - }, - "screenshotButton": { - "button": { - "label": "Скриншот" - }, - "copiedToClipboard": "Скриншот скопирован в буфер обмена" - }, - "videoHistory": { - "resumeButton": "Возобновить", - "resumePrompt": { - "close": "Закрыть" - } - }, - "volumeBoostButton": { - "button": { - "label": "Усиление громкости", - "toggle": { - "off": "Увеличение громкости выключено", - "on": "Увеличение громкости включено" - } - } - } - } - }, - "options": { - "notifications": { - "error": { - "scrollWheelHoldModifierKey": { - "sameKey": { - "speedControl": "Клавиша-модификатор для управления скоростью воспроизведения с помощью колеса мыши не может совпадать с клавишей-модификатором для управления громкостью.", - "volumeControl": "Клавиша-модификатор для управления громкостью с помощью колеса мыши не может совпадать с клавишей-модификатором для управления скоростью воспроизведения." - } - } - }, - "info": { - "reset": "Все параметры были сброшены к значениям по умолчанию.\nТеперь вы можете сохранить изменения, нажав кнопку «Подтвердить» или отменить их, закрыв эту страницу или проигнорировав это уведомление." - }, - "success": { - "saved": "Настройки сохранены." - } - } - } - }, - "settings": { - "clearData": { - "allDataDeleted": "Все данные были удалены.", - "confirmAlert": "Это приведет к удалению всех данных расширения, связанных с настройками. Продолжить?" - }, - "optionDisabled": { - "either": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " or " - }, - "plural": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " and " - }, - "singular": "Enable '{{OPTION}}' to configure this option", - "specificOption": { - "deepDarkCustomTheme": "Set theme to 'Custom' to configure this option.", - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." - } - }, - "scrollForMoreSettings": "Scroll for more settings", - "sections": { - "automaticQuality": { - "enable": { - "label": "Включить автоматическую регулировку качества", - "title": "Автоматически настраивает качество видео на выбранный уровень." - }, - "fallbackQualityStrategy": { - "select": { - "label": "Стратегия восстановления качества", - "options": { - "higher": "Выше", - "lower": "Ниже" - }, - "title": "Какую стратегию использовать, когда выбранное качество недоступно" - } - }, - "select": { - "label": "Качество проигрывателя", - "title": "Качество, которое будет задаваться для видео" - }, - "title": "Автоматические настройки качества" - }, - "bottomButtons": { - "clear": { - "title": "Очистить все данные, которые это расширение хранит на вашем компьютере", - "value": "Удалить данные" - }, - "confirm": { - "title": "Подтвердить сброс настроек", - "value": "Подтвердить" - }, - "openTab": { - "title": "Открывать настройки расширения в новой вкладке" - }, - "reset": { - "title": "Сбрасывает все параметры до значений по умолчанию. Нажмите \"Подтвердить\", чтобы сохранить изменения", - "value": "Сброс" - } - }, - "buttonPlacement": { - "select": { - "buttonNames": { - "copyTimestampUrlButton": "Кнопка «Копировать URL видео с таймкодом»", - "decreasePlaybackSpeedButton": "Кнопка уменьшения скорости видео", - "forwardButton": "Кнопка перемотки вперёд", - "hideEndScreenCardsButton": "Кнопка «Скрыть заставки следующих видео»", - "increasePlaybackSpeedButton": "Кнопка увеличения скорости видео", - "loopButton": "Кнопка «Зациклить»", - "maximizePlayerButton": "Кнопка «Развернуть»", - "openTranscriptButton": "Кнопка «Открыть стенограмму»", - "rewindButton": "Кнопка перемотки назад", - "screenshotButton": "Кнопка «Скриншот»", - "volumeBoostButton": "Кнопка «Усиление громкости»" - }, - "options": { - "below_player": { - "placement": "под проигрывателем", - "value": "Под проигрывателем" - }, - "feature_menu": { - "placement": "в меню функций", - "value": "Меню функций" - }, - "player_controls_left": { - "placement": "с левой стороны панели управления", - "value": "Слева" - }, - "player_controls_right": { - "placement": "с правой стороны панели управления", - "value": "Справа" - } - }, - "title": "Поместить {{BUTTON_NAME}} {{PLACEMENT}}" - }, - "title": "Настройки размещения кнопок" - }, - "customCSS": { - "editor": { - "collapse": "Свернуть редактор", - "expand": "Расширить редактор", - "noProblems": "Проблем не найдено." - }, - "enable": { - "label": "Включить пользовательский CSS", - "title": "Включает пользовательские настройки CSS для применения к странице" - }, - "title": "Пользовательские настройки CSS" - }, - "featureMenu": { - "openType": { - "select": { - "label": "Тип активации меню", - "options": { - "click": "Посредством нажатия", - "hover": "При наведении курсора" - }, - "title": "Выберите способ активации меню функций" - }, - "title": "Настройки меню функций" - } - }, - "forwardRewindButtons": { - "enable": { - "label": "Включить кнопки перемотки вперёд/назад", - "title": "Добавляет кнопки перемотки вперёд/назад в проигрыватель" - }, - "time": { - "label": "Время перемотки", - "title": "Кол-во времени, на которое будет перематываться видео" - }, - "title": "Настройки кнопок перемотки вперёд/назад" - }, - "importExportSettings": { - "exportButton": { - "success": "Настройки успешно экспортированы", - "title": "Экспорт настроек в JSON файл", - "value": "Экспорт настроек" - }, - "importButton": { - "error": { - "unknown": "Ошибка импорта настроек. Пожалуйста, проверьте формат файла.\nПроизошла неизвестная ошибка.", - "validation": "Ошибка импорта настроек. Пожалуйста, проверьте формат файла.\n{{ERROR_MESSAGE}}" - }, - "success": "Настройки успешно импортированы", - "title": "Импорт настроек из JSON файла", - "value": "Импорт настроек" - } - }, - "language": { - "select": { - "label": "Язык", - "title": "Язык расширения" - }, - "title": "Язык" - }, - "miscellaneous": { - "features": { - "automaticTheaterMode": { - "label": "Включить автоматический режим кинотеатра", - "title": "Автоматически включать режим кинотеатра при загрузке видео" - }, - "automaticallyDisableAmbientMode": { - "label": "Автоматическое отключение режима освещения", - "title": "Автоматически отключать режим освещения при загрузке видео" - }, - "automaticallyDisableClosedCaptions": { - "label": "Автоматически отключать субтитры", - "title": "Автоматически отключает субтитры при загрузке видео" - }, - "copyTimestampUrlButton": { - "label": "Кнопка «Копировать URL видео с таймкодом»", - "title": "Копирует ссылку видео с меткой времени (?t=123)" - }, - "defaultToOriginalAudioTrack": { - "label": "Default to original audio track", - "title": "Always default to the original audio track" - }, - "hideArtificialIntelligenceSummary": { - "label": "Hide AI summary", - "title": "Hides the artificial intelligence summary below videos" - }, - "hideEndScreenCards": { - "label": "Скрыть заставки следующих видео", - "title": "Скрывает заставки следующих (предлагаемых) видео в конце ролика" - }, - "hideEndScreenCardsButton": { - "label": "Кнопка «Скрыть заставки следующих видео»", - "title": "Добавляет кнопку для скрытия/отображения заставок следующих видео в конце ролика" - }, - "hideLiveStreamChat": { - "label": "Спрятать чат прямого эфира", - "title": "Прячет чат прямого эфира (стрима)" - }, - "hideOfficialArtistVideosFromHomePage": { - "label": "Скрывать официальные видео исполнителя", - "title": "Скрывает официальные видео исполнителя с домашней страницы" - }, - "hidePaidPromotionBanner": { - "label": "Скрыть \"Содержит прямую рекламу\"", - "title": "Скрывает баннер, отображающийся при просмотре видео, которое имеет платную рекламу" - }, - "hidePlayables": { - "label": "Hide playables", - "title": "Hides all playables" - }, - "hideScrollbar": { - "label": "Включить скрытие полосы прокрутки страницы", - "title": "Скрывает полосу прокрутки страницы" - }, - "hideShorts": { - "label": "Скрыть Shorts", - "title": "Скрывает все Shorts" - }, - "hideTranslateComment": { - "label": "Спрятать кнопку 'Перевести на...'", - "title": "Прячет кнопку 'Перевести на русский' под комментарием" - }, - "loopButton": { - "label": "Включить кнопку «Зациклить»", - "title": "Добавляет кнопку в меню функций для автоматического повтора просмотренного видео (зацикливание)" - }, - "maximizePlayerButton": { - "label": "Включить кнопку «Развернуть проигрыватель»", - "title": "Добавляет кнопку в меню функций, которая позволит максимизировать проигрыватель" - }, - "openTranscriptButton": { - "label": "Показать кнопку стенограммы видео", - "title": "Добавляет кнопку в меню функций, чтобы открыть стенограмму видео, которое вы просматриваете" - }, - "openYouTubeSettingsOnHover": { - "label": "Открывать настройки YouTube при наведении курсора", - "title": "Открывает меню настроек YouTube при наведении на кнопку меню" - }, - "pauseBackgroundPlayers": { - "label": "Ставить на паузу видео в фоновых вкладках", - "title": "Ставит на паузу видео в фоновых вкладках при запуске видео в активной (текущей) вкладке" - }, - "playlistRemover": { - "label": "Hide playlists from homepage", - "title": "Get rid of playlists from homepage" - }, - "remainingTime": { - "label": "Включить отображение оставшегося времени", - "title": "Показывает оставшееся время просмотра видео" - }, - "rememberLastVolume": { - "label": "Запомнить уровень громкости", - "title": "Запоминает громкость последнего видео, которое вы смотрели и устанавливает это значение при открытии нового видео" - }, - "removeRedirect": { - "label": "Убрать YouTube /redirect ссылки", - "title": "Заменяет /redirect ссылки на актуальные, убирая предупреждение о переходе на другой ресурс" - }, - "restoreFullscreenScrolling": { - "label": "Restore fullscreen scrolling", - "title": "Restores scrolling in fullscreen mode" - }, - "shareShortener": { - "label": "Укоротить ссылку с кнопки \"Поделиться\"", - "title": "Укорачивает ссылку с кнопки \"Поделиться\" (youtu.be), убирая параметры si/feature из нее" - }, - "shortsAutoScroll": { - "label": "Автоматическая прокрутка Shorts", - "title": "Автоматически скроллит до следующего Shorts" - }, - "skipContinueWatching": { - "label": "Пропускать \"Воспроизведение приостановлено. Продолжить?\"", - "title": "Автоматически пропускает диалог простоя, который приостанавливает воспроизведение" - } - }, - "title": "Прочие параметры" - }, - "onScreenDisplaySettings": { - "color": { - "label": "Цвет", - "options": { - "blue": "Синий", - "green": "Зеленый", - "orange": "Оранжевый", - "pink": "Розовый", - "purple": "Фиолетовый", - "red": "Красный", - "white": "Белый", - "yellow": "Желтый" - }, - "title": "Выберите цвет для отображения на экране (OSD)" - }, - "hide": { - "label": "Задержка скрытия", - "title": "Укажите время, в миллисекундах, перед автоматическим скрытием OSD" - }, - "opacity": { - "label": "Прозрачность", - "title": "Настройка прозрачности отображения на экране (OSD)" - }, - "padding": { - "label": "Отступы", - "title": "Регулировка интервала вокруг отображения на экране (OSD) в пикселях. Применяется в частности для углов OSD." - }, - "position": { - "label": "Расположение", - "options": { - "bottom_left": "Слева снизу", - "bottom_right": "Справа снизу", - "center": "По центру", - "top_left": "Слева сверху", - "top_right": "Справа сверху" - }, - "title": "Выберите позицию отображения на экране (OSD)" - }, - "title": "Настройки отображения на экране (OSD)", - "type": { - "label": "Тип", - "options": { - "circle": "Круг", - "line": "Линия", - "no_display": "Не показывать", - "text": "Текст" - }, - "title": "Выберите тип отображения на экране (OSD)" - } - }, - "playbackSpeed": { - "enable": { - "label": "Включить принудительную скорость воспроизведения", - "title": "Устанавливает скорость проигрывания видео на ту, что вы выбрали ниже" - }, - "playbackSpeedButtons": { - "label": "Кнопки регулирования скорости видео", - "select": { - "label": "Дельта кнопок регулирования скорости", - "title": "Число, на которое будет изменена скорость за клик" - }, - "title": "Добавляет кнопки для увеличения или уменьшения скорости воспроизведения просматриваемого видео" - }, - "select": { - "label": "Скорость проигрывателя", - "title": "Скорость, которая будет задаваться для видео" - }, - "title": "Настройки скорости воспроизведения" - }, - "playlistLength": { - "enable": { - "label": "Отображать информацию о длине плейлиста", - "title": "Отображает общую временную длину плейлиста, сколько было просмотрено и сколько осталось." - }, - "title": "Настройки длины плейлиста", - "wayToGetLength": { - "select": { - "label": "Способ получения длины плейлиста", - "title": "Способ получения информации о длине плейлиста (метод API будет переключаться обратно к HTML, если возникнет ошибка)" - } - }, - "wayToGetWatchTime": { - "select": { - "label": "Метод получения времени просмотра", - "options": { - "duration": "Продолжительность видео", - "youtube": "Время просмотра видео" - }, - "title": "Способ получения количества времени просмотра (тип длины видео используется только на странице просмотра)" - } - } - }, - "screenshotButton": { - "enable": { - "label": "Включить кнопку «Скриншот»", - "title": "Добавляет кнопку в проигрыватель которая делает скриншот видео" - }, - "saveAs": { - "clipboard": "Буфер обмена", - "file": "Файл" - }, - "selectFormat": { - "label": "Формат скриншота", - "title": "Формат, в котором будет сохраняться скриншот" - }, - "selectSaveAs": { - "label": "Тип сохранения скриншота", - "title": "Тип сохранения скриншота" - }, - "title": "Настройки скриншотов" - }, - "scrollWheelSpeedControl": { - "adjustmentSteps": { - "label": "Изменение скорости воспроизведения за прокрутку колеса", - "title": "Регулировка значения, на которое изменяется скорость воспроизведения за прокрутку" - }, - "enable": { - "label": "Включить управление скоростью воспроизведения с помощью колеса мыши", - "title": "Нажмите клавишу-модификатор, чтобы включить управление скоростью воспроизведения с помощью колеса мыши." - }, - "optionLabel": "Клавиша {{KEY}}", - "select": { - "label": "Клавиша-модификатор", - "title": "Используемая клавиша-модификатор" - }, - "title": "Настройки управления скоростью воспроизведения с помощью колеса мыши" - }, - "scrollWheelVolumeControl": { - "adjustmentSteps": { - "label": "Изменение громкости за прокрутку колеса", - "title": "Регулировка значения, на которое изменяется громкость за прокрутку" - }, - "enable": { - "label": "Включить управление громкостью с помощью колеса мыши", - "title": "Позволяет использовать колесо мыши для управления громкостью видео, которое вы просматриваете" - }, - "holdModifierKey": { - "enable": { - "label": "Включить при удержании клавиши-модификатора", - "title": "Нажмите клавишу-модификатор, чтобы включить управление громкостью с помощью колеса мыши." - }, - "optionLabel": "Клавиша {{KEY}}", - "select": { - "label": "Клавиша-модификатор", - "title": "Используемая клавиша-модификатор" - } - }, - "holdRightClick": { - "enable": { - "label": "Включить при удержании правой кнопки мыши", - "title": "Удерживайте правую кнопку мыши, чтобы включить управление громкостью с помощью колеса мыши" - } - }, - "title": "Настройки управления громкостью с помощью колеса мыши" - }, - "settingSearch": { - "placeholder": "Поиск настроек" - }, - "videoHistory": { - "enable": { - "label": "Отслеживание таймкода просматриваемого видео", - "title": "Отслеживает, на каком моменте вы остановили просмотр видео и продолжает с него" - }, - "resumeType": { - "select": { - "label": "Тип возобновления", - "options": { - "automatic": "Автоматически", - "prompt": "Запрашивать" - }, - "title": "Выберите, как вы хотите возобновлять просмотр видео" - } - }, - "title": "Настройки отслеживания" - }, - "volumeBoost": { - "boostAmount": { - "label": "Значение увеличения громкости (дБ)", - "title": "Значение, на которое будет увеличена громкость" - }, - "enable": { - "label": "Включить усиление громкости", - "title": "Включить усиление громкости" - }, - "mode": { - "select": { - "label": "Режим увеличения громкости", - "options": { - "global": "Глобально", - "perVideo": "Для видео" - }, - "title": "Выберите, каким образом должно применяться усиление громкости. 'Для видео' позволяет включать усиление для каждого видео отдельно в меню функций. 'Глобально' применяет усиление для всех просматриваемых видео когда усиление громкости включено." - } - }, - "title": "Настройки усиления громкости" - }, - "youtubeDataApiV3Key": { - "getApiKeyLinkText": "Вы можете получить ключ здесь", - "input": { - "label": "API ключ", - "title": "Введите ваш ключ Youtube Data API V3." - }, - "title": "Ключ YouTube API V3" - }, - "youtubeDeepDark": { - "author": "Автор", - "co-authors": "Соавторы", - "colors": { - "colorShadow": { - "label": "Цвет тени", - "title": "Цвет теней" - }, - "dimmerText": { - "label": "Цвет вторичного текста", - "title": "Цвет для вторичного текста" - }, - "hoverBackground": { - "label": "Цвет фона при наведении", - "title": "Цвет, который будет задаваться фону при наведении" - }, - "mainBackground": { - "label": "Основной цвет фона", - "title": "Цвет для основного фона" - }, - "mainColor": { - "label": "Цвет акцента", - "title": "Цвет для акцента" - }, - "mainText": { - "label": "Цвет основного текста", - "title": "Цвет для основного текста" - }, - "secondBackground": { - "label": "Дополнительный цвет фона", - "title": "Цвет для вторичного фона" - } - }, - "enable": { - "label": "Включить выбранную тему", - "title": "Активировать выбранную тему для страницы" - }, - "select": { - "label": "Выбрать тему", - "title": "Выберите тему для применения к странице" - }, - "title": "Настройки YouTube Deep Dark" - } - } - } -} + "langCode": "ru-RU", + "langName": "Русский", + "messages": { + "resumingVideo": "Возобновление видео на {{VIDEO_TIME}}", + "settingVolume": "Усиление громкости установлено на {{VOLUME_BOOST_AMOUNT}}" + }, + "pages": { + "content": { + "features": { + "copyTimestampUrlButton": { + "button": { + "copied": "Скопировано!", + "label": "Копировать URL видео с таймкодом" + } + }, + "featureMenu": { + "button": { + "label": "Меню функций" + } + }, + "forwardRewindButtons": { + "buttons": { + "forwardButton": { + "label": "Перемотка вперёд на {{TIME}}" + }, + "rewindButton": { + "label": "Перемотка назад на {{TIME}}" + } + } + }, + "hideEndScreenCardsButton": { + "button": { + "label": "Скрыть заставки следующих видео", + "toggle": { + "off": "Показать заставки следующих видео", + "on": "Скрыть заставки следующих видео" + } + } + }, + "loopButton": { + "button": { + "label": "Зациклить", + "toggle": { + "off": "Зацикливание выключено", + "on": "Зацикливание включено" + } + } + }, + "maximizePlayerButton": { + "button": { + "label": "Развернуть", + "toggle": { + "off": "Проигрыватель свернут", + "on": "Проигрыватель развернут" + } + } + }, + "openTranscriptButton": { + "button": { + "label": "Открыть стенограмму" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Уменьшить скорость на {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Увеличить скорость на {{SPEED}}" + } + }, + "decreaseLimit": "Невозможно уменьшить ({{SPEED}})", + "increaseLimit": "Невозможно увеличить ({{SPEED}})" + }, + "playlistLength": { + "title": "Общая длина может быть неточной, если некоторые видео скрыты или недостаточно видео прогружено, чтобы получить полную длину." + }, + "screenshotButton": { + "button": { + "label": "Скриншот" + }, + "copiedToClipboard": "Скриншот скопирован в буфер обмена" + }, + "videoHistory": { + "resumeButton": "Возобновить", + "resumePrompt": { + "close": "Закрыть" + } + }, + "volumeBoostButton": { + "button": { + "label": "Усиление громкости", + "toggle": { + "off": "Увеличение громкости выключено", + "on": "Увеличение громкости включено" + } + } + } + } + }, + "options": { + "notifications": { + "error": { + "scrollWheelHoldModifierKey": { + "sameKey": { + "speedControl": "Клавиша-модификатор для управления скоростью воспроизведения с помощью колеса мыши не может совпадать с клавишей-модификатором для управления громкостью.", + "volumeControl": "Клавиша-модификатор для управления громкостью с помощью колеса мыши не может совпадать с клавишей-модификатором для управления скоростью воспроизведения." + } + } + }, + "info": { + "reset": "Все параметры были сброшены к значениям по умолчанию.\nТеперь вы можете сохранить изменения, нажав кнопку «Подтвердить» или отменить их, закрыв эту страницу или проигнорировав это уведомление." + }, + "success": { + "saved": "Настройки сохранены." + } + } + } + }, + "settings": { + "clearData": { + "allDataDeleted": "Все данные были удалены.", + "confirmAlert": "Это приведет к удалению всех данных расширения, связанных с настройками. Продолжить?" + }, + "optionDisabled": { + "either": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " or " + }, + "plural": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " and " + }, + "singular": "Enable '{{OPTION}}' to configure this option", + "specificOption": { + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + } + }, + "scrollForMoreSettings": "Scroll for more settings", + "sections": { + "automaticQuality": { + "enable": { + "label": "Включить автоматическую регулировку качества", + "title": "Автоматически настраивает качество видео на выбранный уровень." + }, + "fallbackQualityStrategy": { + "select": { + "label": "Стратегия восстановления качества", + "options": { + "higher": "Выше", + "lower": "Ниже" + }, + "title": "Какую стратегию использовать, когда выбранное качество недоступно" + } + }, + "select": { + "label": "Качество проигрывателя", + "title": "Качество, которое будет задаваться для видео" + }, + "title": "Автоматические настройки качества" + }, + "bottomButtons": { + "clear": { + "title": "Очистить все данные, которые это расширение хранит на вашем компьютере", + "value": "Удалить данные" + }, + "confirm": { + "title": "Подтвердить сброс настроек", + "value": "Подтвердить" + }, + "openTab": { + "title": "Открывать настройки расширения в новой вкладке" + }, + "reset": { + "title": "Сбрасывает все параметры до значений по умолчанию. Нажмите \"Подтвердить\", чтобы сохранить изменения", + "value": "Сброс" + } + }, + "buttonPlacement": { + "select": { + "buttonNames": { + "copyTimestampUrlButton": "Кнопка «Копировать URL видео с таймкодом»", + "decreasePlaybackSpeedButton": "Кнопка уменьшения скорости видео", + "forwardButton": "Кнопка перемотки вперёд", + "hideEndScreenCardsButton": "Кнопка «Скрыть заставки следующих видео»", + "increasePlaybackSpeedButton": "Кнопка увеличения скорости видео", + "loopButton": "Кнопка «Зациклить»", + "maximizePlayerButton": "Кнопка «Развернуть»", + "openTranscriptButton": "Кнопка «Открыть стенограмму»", + "rewindButton": "Кнопка перемотки назад", + "screenshotButton": "Кнопка «Скриншот»", + "volumeBoostButton": "Кнопка «Усиление громкости»" + }, + "options": { + "below_player": { + "placement": "под проигрывателем", + "value": "Под проигрывателем" + }, + "feature_menu": { + "placement": "в меню функций", + "value": "Меню функций" + }, + "player_controls_left": { + "placement": "с левой стороны панели управления", + "value": "Слева" + }, + "player_controls_right": { + "placement": "с правой стороны панели управления", + "value": "Справа" + } + }, + "title": "Поместить {{BUTTON_NAME}} {{PLACEMENT}}" + }, + "title": "Настройки размещения кнопок" + }, + "customCSS": { + "editor": { + "collapse": "Свернуть редактор", + "expand": "Расширить редактор", + "noProblems": "Проблем не найдено." + }, + "enable": { + "label": "Включить пользовательский CSS", + "title": "Включает пользовательские настройки CSS для применения к странице" + }, + "title": "Пользовательские настройки CSS" + }, + "featureMenu": { + "openType": { + "select": { + "label": "Тип активации меню", + "options": { + "click": "Посредством нажатия", + "hover": "При наведении курсора" + }, + "title": "Выберите способ активации меню функций" + }, + "title": "Настройки меню функций" + } + }, + "forwardRewindButtons": { + "enable": { + "label": "Включить кнопки перемотки вперёд/назад", + "title": "Добавляет кнопки перемотки вперёд/назад в проигрыватель" + }, + "time": { + "label": "Время перемотки", + "title": "Кол-во времени, на которое будет перематываться видео" + }, + "title": "Настройки кнопок перемотки вперёд/назад" + }, + "importExportSettings": { + "exportButton": { + "success": "Настройки успешно экспортированы", + "title": "Экспорт настроек в JSON файл", + "value": "Экспорт настроек" + }, + "importButton": { + "error": { + "unknown": "Ошибка импорта настроек. Пожалуйста, проверьте формат файла.\nПроизошла неизвестная ошибка.", + "validation": "Ошибка импорта настроек. Пожалуйста, проверьте формат файла.\n{{ERROR_MESSAGE}}" + }, + "success": "Настройки успешно импортированы", + "title": "Импорт настроек из JSON файла", + "value": "Импорт настроек" + } + }, + "language": { + "select": { + "label": "Язык", + "title": "Язык расширения" + }, + "title": "Язык" + }, + "miscellaneous": { + "features": { + "automaticTheaterMode": { + "label": "Включить автоматический режим кинотеатра", + "title": "Автоматически включать режим кинотеатра при загрузке видео" + }, + "automaticallyDisableAmbientMode": { + "label": "Автоматическое отключение режима освещения", + "title": "Автоматически отключать режим освещения при загрузке видео" + }, + "automaticallyDisableClosedCaptions": { + "label": "Автоматически отключать субтитры", + "title": "Автоматически отключает субтитры при загрузке видео" + }, + "copyTimestampUrlButton": { + "label": "Кнопка «Копировать URL видео с таймкодом»", + "title": "Копирует ссылку видео с меткой времени (?t=123)" + }, + "defaultToOriginalAudioTrack": { + "label": "Default to original audio track", + "title": "Always default to the original audio track" + }, + "hideArtificialIntelligenceSummary": { + "label": "Hide AI summary", + "title": "Hides the artificial intelligence summary below videos" + }, + "hideEndScreenCards": { + "label": "Скрыть заставки следующих видео", + "title": "Скрывает заставки следующих (предлагаемых) видео в конце ролика" + }, + "hideEndScreenCardsButton": { + "label": "Кнопка «Скрыть заставки следующих видео»", + "title": "Добавляет кнопку для скрытия/отображения заставок следующих видео в конце ролика" + }, + "hideLiveStreamChat": { + "label": "Спрятать чат прямого эфира", + "title": "Прячет чат прямого эфира (стрима)" + }, + "hideOfficialArtistVideosFromHomePage": { + "label": "Скрывать официальные видео исполнителя", + "title": "Скрывает официальные видео исполнителя с домашней страницы" + }, + "hidePaidPromotionBanner": { + "label": "Скрыть \"Содержит прямую рекламу\"", + "title": "Скрывает баннер, отображающийся при просмотре видео, которое имеет платную рекламу" + }, + "hidePlayables": { + "label": "Hide playables", + "title": "Hides all playables" + }, + "hideScrollbar": { + "label": "Включить скрытие полосы прокрутки страницы", + "title": "Скрывает полосу прокрутки страницы" + }, + "hideShorts": { + "label": "Скрыть Shorts", + "title": "Скрывает все Shorts" + }, + "hideTranslateComment": { + "label": "Спрятать кнопку 'Перевести на...'", + "title": "Прячет кнопку 'Перевести на русский' под комментарием" + }, + "loopButton": { + "label": "Включить кнопку «Зациклить»", + "title": "Добавляет кнопку в меню функций для автоматического повтора просмотренного видео (зацикливание)" + }, + "maximizePlayerButton": { + "label": "Включить кнопку «Развернуть проигрыватель»", + "title": "Добавляет кнопку в меню функций, которая позволит максимизировать проигрыватель" + }, + "openTranscriptButton": { + "label": "Показать кнопку стенограммы видео", + "title": "Добавляет кнопку в меню функций, чтобы открыть стенограмму видео, которое вы просматриваете" + }, + "openYouTubeSettingsOnHover": { + "label": "Открывать настройки YouTube при наведении курсора", + "title": "Открывает меню настроек YouTube при наведении на кнопку меню" + }, + "pauseBackgroundPlayers": { + "label": "Ставить на паузу видео в фоновых вкладках", + "title": "Ставит на паузу видео в фоновых вкладках при запуске видео в активной (текущей) вкладке" + }, + "playlistRemover": { + "label": "Hide playlists from homepage", + "title": "Get rid of playlists from homepage" + }, + "remainingTime": { + "label": "Включить отображение оставшегося времени", + "title": "Показывает оставшееся время просмотра видео" + }, + "rememberLastVolume": { + "label": "Запомнить уровень громкости", + "title": "Запоминает громкость последнего видео, которое вы смотрели и устанавливает это значение при открытии нового видео" + }, + "removeRedirect": { + "label": "Убрать YouTube /redirect ссылки", + "title": "Заменяет /redirect ссылки на актуальные, убирая предупреждение о переходе на другой ресурс" + }, + "restoreFullscreenScrolling": { + "label": "Restore fullscreen scrolling", + "title": "Restores scrolling in fullscreen mode" + }, + "shareShortener": { + "label": "Укоротить ссылку с кнопки \"Поделиться\"", + "title": "Укорачивает ссылку с кнопки \"Поделиться\" (youtu.be), убирая параметры si/feature из нее" + }, + "shortsAutoScroll": { + "label": "Автоматическая прокрутка Shorts", + "title": "Автоматически скроллит до следующего Shorts" + }, + "skipContinueWatching": { + "label": "Пропускать \"Воспроизведение приостановлено. Продолжить?\"", + "title": "Автоматически пропускает диалог простоя, который приостанавливает воспроизведение" + } + }, + "title": "Прочие параметры" + }, + "onScreenDisplaySettings": { + "color": { + "label": "Цвет", + "options": { + "blue": "Синий", + "green": "Зеленый", + "orange": "Оранжевый", + "pink": "Розовый", + "purple": "Фиолетовый", + "red": "Красный", + "white": "Белый", + "yellow": "Желтый" + }, + "title": "Выберите цвет для отображения на экране (OSD)" + }, + "hide": { + "label": "Задержка скрытия", + "title": "Укажите время, в миллисекундах, перед автоматическим скрытием OSD" + }, + "opacity": { + "label": "Прозрачность", + "title": "Настройка прозрачности отображения на экране (OSD)" + }, + "padding": { + "label": "Отступы", + "title": "Регулировка интервала вокруг отображения на экране (OSD) в пикселях. Применяется в частности для углов OSD." + }, + "position": { + "label": "Расположение", + "options": { + "bottom_left": "Слева снизу", + "bottom_right": "Справа снизу", + "center": "По центру", + "top_left": "Слева сверху", + "top_right": "Справа сверху" + }, + "title": "Выберите позицию отображения на экране (OSD)" + }, + "title": "Настройки отображения на экране (OSD)", + "type": { + "label": "Тип", + "options": { + "circle": "Круг", + "line": "Линия", + "no_display": "Не показывать", + "text": "Текст" + }, + "title": "Выберите тип отображения на экране (OSD)" + } + }, + "playbackSpeed": { + "enable": { + "label": "Включить принудительную скорость воспроизведения", + "title": "Устанавливает скорость проигрывания видео на ту, что вы выбрали ниже" + }, + "playbackSpeedButtons": { + "label": "Кнопки регулирования скорости видео", + "select": { + "label": "Дельта кнопок регулирования скорости", + "title": "Число, на которое будет изменена скорость за клик" + }, + "title": "Добавляет кнопки для увеличения или уменьшения скорости воспроизведения просматриваемого видео" + }, + "select": { + "label": "Скорость проигрывателя", + "title": "Скорость, которая будет задаваться для видео" + }, + "title": "Настройки скорости воспроизведения" + }, + "playlistLength": { + "enable": { + "label": "Отображать информацию о длине плейлиста", + "title": "Отображает общую временную длину плейлиста, сколько было просмотрено и сколько осталось." + }, + "title": "Настройки длины плейлиста", + "wayToGetLength": { + "select": { + "label": "Способ получения длины плейлиста", + "title": "Способ получения информации о длине плейлиста (метод API будет переключаться обратно к HTML, если возникнет ошибка)" + } + }, + "wayToGetWatchTime": { + "select": { + "label": "Метод получения времени просмотра", + "options": { + "duration": "Продолжительность видео", + "youtube": "Время просмотра видео" + }, + "title": "Способ получения количества времени просмотра (тип длины видео используется только на странице просмотра)" + } + } + }, + "screenshotButton": { + "enable": { + "label": "Включить кнопку «Скриншот»", + "title": "Добавляет кнопку в проигрыватель которая делает скриншот видео" + }, + "saveAs": { + "clipboard": "Буфер обмена", + "file": "Файл" + }, + "selectFormat": { + "label": "Формат скриншота", + "title": "Формат, в котором будет сохраняться скриншот" + }, + "selectSaveAs": { + "label": "Тип сохранения скриншота", + "title": "Тип сохранения скриншота" + }, + "title": "Настройки скриншотов" + }, + "scrollWheelSpeedControl": { + "adjustmentSteps": { + "label": "Изменение скорости воспроизведения за прокрутку колеса", + "title": "Регулировка значения, на которое изменяется скорость воспроизведения за прокрутку" + }, + "enable": { + "label": "Включить управление скоростью воспроизведения с помощью колеса мыши", + "title": "Нажмите клавишу-модификатор, чтобы включить управление скоростью воспроизведения с помощью колеса мыши." + }, + "optionLabel": "Клавиша {{KEY}}", + "select": { + "label": "Клавиша-модификатор", + "title": "Используемая клавиша-модификатор" + }, + "title": "Настройки управления скоростью воспроизведения с помощью колеса мыши" + }, + "scrollWheelVolumeControl": { + "adjustmentSteps": { + "label": "Изменение громкости за прокрутку колеса", + "title": "Регулировка значения, на которое изменяется громкость за прокрутку" + }, + "enable": { + "label": "Включить управление громкостью с помощью колеса мыши", + "title": "Позволяет использовать колесо мыши для управления громкостью видео, которое вы просматриваете" + }, + "holdModifierKey": { + "enable": { + "label": "Включить при удержании клавиши-модификатора", + "title": "Нажмите клавишу-модификатор, чтобы включить управление громкостью с помощью колеса мыши." + }, + "optionLabel": "Клавиша {{KEY}}", + "select": { + "label": "Клавиша-модификатор", + "title": "Используемая клавиша-модификатор" + } + }, + "holdRightClick": { + "enable": { + "label": "Включить при удержании правой кнопки мыши", + "title": "Удерживайте правую кнопку мыши, чтобы включить управление громкостью с помощью колеса мыши" + } + }, + "title": "Настройки управления громкостью с помощью колеса мыши" + }, + "settingSearch": { + "placeholder": "Поиск настроек" + }, + "videoHistory": { + "enable": { + "label": "Отслеживание таймкода просматриваемого видео", + "title": "Отслеживает, на каком моменте вы остановили просмотр видео и продолжает с него" + }, + "resumeType": { + "select": { + "label": "Тип возобновления", + "options": { + "automatic": "Автоматически", + "prompt": "Запрашивать" + }, + "title": "Выберите, как вы хотите возобновлять просмотр видео" + } + }, + "title": "Настройки отслеживания" + }, + "volumeBoost": { + "boostAmount": { + "label": "Значение увеличения громкости (дБ)", + "title": "Значение, на которое будет увеличена громкость" + }, + "enable": { + "label": "Включить усиление громкости", + "title": "Включить усиление громкости" + }, + "mode": { + "select": { + "label": "Режим увеличения громкости", + "options": { + "global": "Глобально", + "perVideo": "Для видео" + }, + "title": "Выберите, каким образом должно применяться усиление громкости. 'Для видео' позволяет включать усиление для каждого видео отдельно в меню функций. 'Глобально' применяет усиление для всех просматриваемых видео когда усиление громкости включено." + } + }, + "title": "Настройки усиления громкости" + }, + "youtubeDataApiV3Key": { + "getApiKeyLinkText": "Вы можете получить ключ здесь", + "input": { + "label": "API ключ", + "title": "Введите ваш ключ Youtube Data API V3." + }, + "title": "Ключ YouTube API V3" + }, + "youtubeDeepDark": { + "author": "Автор", + "co-authors": "Соавторы", + "colors": { + "colorShadow": { + "label": "Цвет тени", + "title": "Цвет теней" + }, + "dimmerText": { + "label": "Цвет вторичного текста", + "title": "Цвет для вторичного текста" + }, + "hoverBackground": { + "label": "Цвет фона при наведении", + "title": "Цвет, который будет задаваться фону при наведении" + }, + "mainBackground": { + "label": "Основной цвет фона", + "title": "Цвет для основного фона" + }, + "mainColor": { + "label": "Цвет акцента", + "title": "Цвет для акцента" + }, + "mainText": { + "label": "Цвет основного текста", + "title": "Цвет для основного текста" + }, + "secondBackground": { + "label": "Дополнительный цвет фона", + "title": "Цвет для вторичного фона" + } + }, + "enable": { + "label": "Включить выбранную тему", + "title": "Активировать выбранную тему для страницы" + }, + "select": { + "label": "Выбрать тему", + "title": "Выберите тему для применения к странице" + }, + "title": "Настройки YouTube Deep Dark" + } + } + } +} \ No newline at end of file diff --git a/public/locales/sv-SE.json b/public/locales/sv-SE.json index f81ade172..6d24316e5 100644 --- a/public/locales/sv-SE.json +++ b/public/locales/sv-SE.json @@ -1,643 +1,642 @@ { - "langCode": "en-US", - "langName": "Svenska (SV)", - "messages": { - "resumingVideo": "Återupptar video vid {{VIDEO_TIME}}", - "settingVolume": "Ställa in volymökning till {{VOLUME_BOOST_AMOUNT}}" - }, - "pages": { - "content": { - "features": { - "copyTimestampUrlButton": { - "button": { - "copied": "Kopierad!", - "label": "Kopiera videons webbadress med tidsstämpel" - } - }, - "featureMenu": { - "button": { - "label": "Funktionsmeny" - } - }, - "forwardRewindButtons": { - "buttons": { - "forwardButton": { - "label": "Snabbspola med {{TIME}}" - }, - "rewindButton": { - "label": "Återspola med {{TIME}}" - } - } - }, - "hideEndScreenCardsButton": { - "button": { - "label": "Dölj slutskärmskort", - "toggle": { - "off": "Visa slutskärmskort", - "on": "Dölj slutskärmskort" - } - } - }, - "loopButton": { - "button": { - "label": "Slinga", - "toggle": { - "off": "Slinga av", - "on": "Slinga på" - } - } - }, - "maximizePlayerButton": { - "button": { - "label": "Maximera", - "toggle": { - "off": "Maximera av", - "on": "Maximera på" - } - } - }, - "openTranscriptButton": { - "button": { - "label": "Öppna transkript" - } - }, - "playbackSpeedButtons": { - "buttons": { - "decreasePlaybackSpeedButton": { - "label": "Minska hastigheten till {{SPEED}}" - }, - "increasePlaybackSpeedButton": { - "label": "Öka hastigheten till {{SPEED}}" - } - }, - "decreaseLimit": "Det går inte att sänka mer ({{SPEED}})", - "increaseLimit": "Det går inte att höja mer ({{SPEED}})" - }, - "playlistLength": { - "title": "Total längd kanske inte är korrekt om vissa videor är dolda eller om du inte har laddat tillräckligt med videor för att få hela längden." - }, - "screenshotButton": { - "button": { - "label": "Skärmbild" - }, - "copiedToClipboard": "Skärmbild kopierad till urklipp" - }, - "videoHistory": { - "resumeButton": "Återuppta", - "resumePrompt": { - "close": "Stäng" - } - }, - "volumeBoostButton": { - "button": { - "label": "Volymökning", - "toggle": { - "off": "Volymökning av", - "on": "Volymökning på" - } - } - } - } - }, - "options": { - "notifications": { - "error": { - "scrollWheelHoldModifierKey": { - "sameKey": { - "speedControl": "Rullningshjulets modifieringstangent för hastighetsreglering kan inte vara densamma modifieringstangent som rullningshjulets volymreglering.", - "volumeControl": "Rullningshjulets modifieringstangent för volymreglering kan inte vara densamma modifieringstangent som rullningshjulets hastighetsreglering." - } - } - }, - "info": { - "reset": "Alla alternativ har återställts till sina standardvärden.\nDu kan nu spara ändringarna genom att klicka på knappen \"Bekräfta\" eller örkasta dem genom att stänga denna sida eller ignorera detta meddelande." - }, - "success": { - "saved": "Inställningarna sparade." - } - } - } - }, - "settings": { - "clearData": { - "allDataDeleted": "All data har tagits bort.", - "confirmAlert": "Detta kommer att ta bort alla tilläggsdata relaterade till alternativen. Fortsätta?" - }, - "optionDisabled": { - "either": { - "label": "Aktivera {{OPTIONS}} för att konfigurera detta alternativ", - "separator": " eller " - }, - "plural": { - "label": "Aktivera {{OPTIONS}} för att konfigurera detta alternativ", - "separator": " och " - }, - "singular": "Aktivera {{OPTION}} för att konfigurera detta alternativ", - "specificOption": { - "deepDarkCustomTheme": "Sätt tema till 'Anpassad' för att konfigurera detta alternativ.", - "featureMenu": "Konfigurera minst en knapp som ska placeras i funktionsmenyn för att konfigurera det här alternativet." - } - }, - "scrollForMoreSettings": "Rulla för fler inställningar", - "sections": { - "automaticQuality": { - "enable": { - "label": "Automatisk kvalitetsjustering", - "title": "Justerar automatiskt videokvaliteten till den valda nivån." - }, - "fallbackQualityStrategy": { - "select": { - "label": "Reservmetod för kvaliten", - "options": { - "higher": "Högre", - "lower": "Lägre" - }, - "title": "Metod att använda när den valda kvaliteten inte är tillgänglig" - } - }, - "select": { - "label": "Spelarkvalitet", - "title": "Kvaliteten för att ställa in videon till" - }, - "title": "Automatisk kvalitetsinställningar" - }, - "bottomButtons": { - "clear": { - "title": "Rensar all data som detta tillägg har lagrat på din dator", - "value": "Rensa data" - }, - "confirm": { - "title": "Bekräfta återställning av inställningar", - "value": "Bekräfta" - }, - "openTab": { - "title": "Öppna tilläggsinställningar i en ny flik" - }, - "reset": { - "title": "Återställer alla inställningar till sina standardinställningar, Klicka på bekräftelseknappen för att spara ändringarna", - "value": "Återställ" - } - }, - "buttonPlacement": { - "select": { - "buttonNames": { - "copyTimestampUrlButton": "Kopiera videons webbadress med tidsstämpelknappen", - "decreasePlaybackSpeedButton": "Knapp för att mindska hastigheten", - "forwardButton": "Snabbspolningsknapp", - "hideEndScreenCardsButton": "Dölj knappen för slutskärmskort", - "increasePlaybackSpeedButton": "Knapp för att öka hastigheten", - "loopButton": "Slingknapp", - "maximizePlayerButton": "Maximeraknapp", - "openTranscriptButton": "Transkriptknapp", - "rewindButton": "Återspolningsknapp", - "screenshotButton": "Skärmbildsknapp", - "volumeBoostButton": "Volymökningsknapp" - }, - "options": { - "below_player": { - "placement": "under spelarkontrollerna", - "value": "Under spelaren" - }, - "feature_menu": { - "placement": "i funktionsmenyn", - "value": "Funktionsmeny" - }, - "player_controls_left": { - "placement": "på vänster sida av spelarkontrollerna", - "value": "Vänster kontroller" - }, - "player_controls_right": { - "placement": "på höger sida av spelarkontrollerna", - "value": "Höger kontroller" - } - }, - "title": "Placera {{BUTTON_NAME}} {{PLACEMENT}}" - }, - "title": "Inställningar för knapplacering" - }, - "customCSS": { - "editor": { - "collapse": "Fäll ihop redigeraren", - "expand": "Fäll ut redigeraren", - "noProblems": "Inga problem hittades." - }, - "enable": { - "label": "Aktivera anpassad CSS", - "title": "Aktiverar anpassad CSS som ska tillämpas på sidan" - }, - "title": "Anpassade CSS-inställningar" - }, - "featureMenu": { - "openType": { - "select": { - "label": "Aktiveringstyp för menyn", - "options": { - "click": "Klicka", - "hover": "Musöver" - }, - "title": "Välj metod för att aktivera funktionsmenyn" - }, - "title": "Inställningar för funktionsmeny" - } - }, - "forwardRewindButtons": { - "enable": { - "label": "Aktivera spola framåt-/återspolningsknappar", - "title": "Lägger till spola framåt- och återspolningsknappar till videospelaren" - }, - "time": { - "label": "Spola framåt-/återspolningstid", - "title": "Tiden som videon ska spolas framåt/återspolas med" - }, - "title": "Inställningar för knapparna spola framåt/återspola" - }, - "importExportSettings": { - "exportButton": { - "success": "Inställningar har exporterats", - "title": "Exportera inställningarna till en JSON-fil", - "value": "Exportera Inställningar" - }, - "importButton": { - "error": { - "unknown": "Fel vid import av inställningar. Kontrollera filformatet.\nEtt okänt fel uppstod.", - "validation": "Fel vid import av inställningar. Kontrollera filformatet.\n{{ERROR_MESSAGE}}" - }, - "success": "Inställningar har importerats", - "title": "Importera inställningarna från en JSON-fil", - "value": "Importera inställningar" - } - }, - "language": { - "select": { - "label": "Språk", - "title": "Språket som ska användas för tillägget" - }, - "title": "Språk" - }, - "miscellaneous": { - "features": { - "automaticTheaterMode": { - "label": "Automatiskt teaterläge", - "title": "Aktiverar automatiskt teaterläge när du startar en video" - }, - "automaticallyDisableAmbientMode": { - "label": "Inaktivera biobelysning automatiskt", - "title": "Inaktiverar automatiskt biobelysning när du startar en video" - }, - "automaticallyDisableClosedCaptions": { - "label": "Inaktivera textning automatiskt", - "title": "Inaktiverar textning automatiskt när du laddar en video" - }, - "copyTimestampUrlButton": { - "label": "Kopiera videons webbadress med tidsstämpelknappen", - "title": "Kopiera videons webbadress med tidsstämpel (?t=123)" - }, - "defaultToOriginalAudioTrack": { - "label": "Standard till originalljudspår", - "title": "Använd alltid originalljudspåret som standard" - }, - "hideArtificialIntelligenceSummary": { - "label": "Dölj AI-sammanfattning", - "title": "Döljer sammanfattningen av artificiell intelligens under videorna" - }, - "hideEndScreenCards": { - "label": "Dölj slutskärmskort", - "title": "Döljer korten i slutet av videon" - }, - "hideEndScreenCardsButton": { - "label": "Dölj knappen för slutskärmskort", - "title": "Lägger till en knapp för att visa/dölja korten i slutet av videon" - }, - "hideLiveStreamChat": { - "label": "Dölj direktströmschatt", - "title": "Döljer direktströmschatten" - }, - "hideOfficialArtistVideosFromHomePage": { - "label": "Dölj officiella artistvideor", - "title": "Dölj officiella artistvideor från startsidan" - }, - "hidePaidPromotionBanner": { - "label": "Dölj betald marknadsföringsbanner", - "title": "Döljer bannern som visas när du tittar på en video som har betald marknadsföring" - }, - "hidePlayables": { - "label": "Dölj spelbara", - "title": "Döljer alla spelbara" - }, - "hideScrollbar": { - "label": "Dölj rullningslisten", - "title": "Döljer sidornas rullningsfält" - }, - "hideShorts": { - "label": "Dölj shorts", - "title": "Döljer alla shorts" - }, - "hideTranslateComment": { - "label": "Dölj översättning av kommentarer", - "title": "Döljer knappen 'Översätt till språk' under kommentarer" - }, - "loopButton": { - "label": "Slingknapp", - "title": "Lägger till en knapp i funktionsmenyn för att slinga videon du tittar på" - }, - "maximizePlayerButton": { - "label": "Maximeringsknapp för spelaren", - "title": "Lägger till en knapp i funktionsmenyn för att maximera spelaren" - }, - "openTranscriptButton": { - "label": "Öppningsknapp för transkript", - "title": "Lägger till en knapp i funktionsmenyn för att visa transkript av videon du tittar på" - }, - "openYouTubeSettingsOnHover": { - "label": "Öppna YouTube-inställningar vid musöver", - "title": "Öppnar YouTube-inställningsmenyn när du håller muspekaren över inställningsknappen" - }, - "pauseBackgroundPlayers": { - "label": "Pausa spelare i bakgrunden", - "title": "Pausar videospelare i bakgrundsflikar när du startar en ny videospelare i en förgrundsflik" - }, - "playlistRemover": { - "label": "Dölj spellistor från hemsidan", - "title": "Bli av med spellistor från hemsidan" - }, - "remainingTime": { - "label": "Återstående tid", - "title": "Visar återstående tid för videon du tittar på" - }, - "rememberLastVolume": { - "label": "Kom ihåg senaste volymen", - "title": "Kommer ihåg volymen på den senaste videon du tittade på och ställer in den när du öppnar en ny video" - }, - "removeRedirect": { - "label": "Ta bort YouTube-omdirigeringswebbadresser", - "title": "Ersätter YouTube-omdirigering genom faktiska webbadresser, hoppar över omdirigeringsvarningsdialog" - }, - "restoreFullscreenScrolling": { - "label": "Återställ fullskärmsrullning", - "title": "Återställer rullning i helskärmsläge" - }, - "shareShortener": { - "label": "Förkorta YouTube-videons delningslänk", - "title": "Förkortar YouTube-videons delningslänk (youtu.be) genom att ta bort funktionsparametrar från den" - }, - "shortsAutoScroll": { - "label": "Automatisk rullning för shorts", - "title": "Rullar automatiskt till nästa shorts" - }, - "skipContinueWatching": { - "label": "Hoppa över \"Videon är pausad. Fortsätt titta?\"", - "title": "Hoppa över dialogrutan som pausar videouppspelningen" - } - }, - "title": "Övriga inställningar" - }, - "onScreenDisplaySettings": { - "color": { - "label": "Färg", - "options": { - "blue": "Blå", - "green": "Grön", - "orange": "Orange", - "pink": "Rosa", - "purple": "Lila", - "red": "Röd", - "white": "Vit", - "yellow": "Gul" - }, - "title": "Välj färgen för On-Screen Display" - }, - "hide": { - "label": "Döljfördröjning", - "title": "Ange tiden i millisekunder innan On-Screen Display automatiskt döljs" - }, - "opacity": { - "label": "Genomskinlighet", - "title": "Justera genomskinligheten för On-Screen Display" - }, - "padding": { - "label": "Utfyllnad", - "title": "Justera avståndet runt On-Screen Display i pixlar. Detta gäller specifikt för hörn On-Screen Display." - }, - "position": { - "label": "Position", - "options": { - "bottom_left": "Nedre vänstra", - "bottom_right": "Nedre högra", - "center": "Mitten", - "top_left": "Övre vänstra", - "top_right": "Övre högra" - }, - "title": "Välj placering av On-Screen Display" - }, - "title": "On-Screen Display-inställningar", - "type": { - "label": "Typ", - "options": { - "circle": "Cirkel", - "line": "Rad", - "no_display": "Ingen visning", - "text": "Text" - }, - "title": "Välj typ av On-Screen Display" - } - }, - "playbackSpeed": { - "enable": { - "label": "Tvingad uppspelningshastighet", - "title": "Ställer in videohastigheten till det du väljer nedan" - }, - "playbackSpeedButtons": { - "label": "Knapp för uppspelningshastigheten", - "select": { - "label": "Knapp för uppspelningshastigheten", - "title": "Hastighetsändring per klick" - }, - "title": "Lägger till knappar för att öka eller minska uppspelningshastigheten på videon du tittar på" - }, - "select": { - "label": "Uppspelningshastighet", - "title": "Hastigheten att spela upp videon i" - }, - "title": "Inställningar för uppspelningshastighet" - }, - "playlistLength": { - "enable": { - "label": "Visa information om spellistans längd", - "title": "Visar spellistans totala längd och hur mycket som har tittats på och hur mycket som återstår." - }, - "title": "Inställningar för spellistans längd", - "wayToGetLength": { - "select": { - "label": "Metod för att få spellistans längd", - "title": "Sättet att få information om spellista längd (API-metoden kommer att falla tillbaka till HTML om ett fel inträffar)" - } - }, - "wayToGetWatchTime": { - "select": { - "label": "Metod för att hämta tittad tid", - "options": { - "duration": "Videolängd", - "youtube": "Tittad videolängd" - }, - "title": "Sättet att få den tid som tittats på (videons längdtyp används endast på visningssidan)" - } - } - }, - "screenshotButton": { - "enable": { - "label": "Skärmbildsknapp", - "title": "Lägger till en knapp till spelaren för att ta en skärmbild av videon" - }, - "saveAs": { - "clipboard": "Urklipp", - "file": "Fil" - }, - "selectFormat": { - "label": "Skärmbildsformat", - "title": "Formatet för att spara skärmbilden i" - }, - "selectSaveAs": { - "label": "Skärmbildstyp att spara i", - "title": "Skärmbildens spartyp" - }, - "title": "Skärmbildsinställningar" - }, - "scrollWheelSpeedControl": { - "adjustmentSteps": { - "label": "Hastighetsändring per rullning", - "title": "Justera hastighetsändringen per rullning" - }, - "enable": { - "label": "Hastighetsändring med rullningshjulet", - "title": "Tryck på en modifierartangent för att aktivera hastighetsjustering med rullningshjulet." - }, - "optionLabel": "{{KEY}}-tangent", - "select": { - "label": "Modifieringstangent", - "title": "Modifieringstangent att använda" - }, - "title": "Inställningar för rullningshjulets hastighetsändring" - }, - "scrollWheelVolumeControl": { - "adjustmentSteps": { - "label": "Volymändring per rullning", - "title": "Justera volymändringen per rullning" - }, - "enable": { - "label": "Volymändring med rullningshjulet", - "title": "Låter dig använda rullningshjulet för att ändra volymen på videon du tittar på" - }, - "holdModifierKey": { - "enable": { - "label": "Aktivera när du håller ner modifieringstangenten", - "title": "Tryck på en modifierartangent för att aktivera hastighetsändringen med rullningshjulet." - }, - "optionLabel": "{{KEY}}-tangent", - "select": { - "label": "Modifieringstangent", - "title": "Modifieringstangent att använda" - } - }, - "holdRightClick": { - "enable": { - "label": "Aktivera när du håller ner höger musknapp", - "title": "Håll höger musknapp nertryckt för att aktivera rullningshjulets volymkontroll" - } - }, - "title": "Rullningshjulets volyminställningar" - }, - "settingSearch": { - "placeholder": "Sök efter en inställning" - }, - "videoHistory": { - "enable": { - "label": "Håll reda på visade videor", - "title": "Håller reda på var du slutade på videor du tittade på och gör det möjligt att återuppta uppspelningen" - }, - "resumeType": { - "select": { - "label": "Återupptagningstyp", - "options": { - "automatic": "Automatisk", - "prompt": "Fråga" - }, - "title": "Välj hur du vill återuppta videor" - } - }, - "title": "Inställningar för videohistorik" - }, - "volumeBoost": { - "boostAmount": { - "label": "Volymökningsmängd (dB)", - "title": "Hur mycket ljudet ska öka med" - }, - "enable": { - "label": "Volymökning", - "title": "Aktivera volymökning" - }, - "mode": { - "select": { - "label": "Volymökningsläge", - "options": { - "global": "Global", - "perVideo": "Per video" - }, - "title": "Välj hur volymökning tillämpas. \"Per video\" gör det möjligt att aktivera ökning för varje video individuellt i funktionsmenyn. 'Global' gäller ökning för alla videor när volymökning är aktiverat." - } - }, - "title": "Inställningar för volymökning" - }, - "youtubeDataApiV3Key": { - "getApiKeyLinkText": "Du kan hämta en härifrån", - "input": { - "label": "API-nyckel", - "title": "Ange din Youtube Data API V3-nyckel." - }, - "title": "YouTube API V3-nyckel" - }, - "youtubeDeepDark": { - "author": "Skapare", - "co-authors": "Medskapare", - "colors": { - "colorShadow": { - "label": "Skuggfärg", - "title": "Färg för skuggor" - }, - "dimmerText": { - "label": "Sekundär textfärg", - "title": "Färg för sekundärtext" - }, - "hoverBackground": { - "label": "Bakgrundsfärg för musöver", - "title": "Bakgrundsfärg för musöver" - }, - "mainBackground": { - "label": "Primär bakgrundsfärg", - "title": "Färg för primär bakgrund" - }, - "mainColor": { - "label": "Accentfärg", - "title": "Färg för accent" - }, - "mainText": { - "label": "Primär textfärg", - "title": "Färg för primär text" - }, - "secondBackground": { - "label": "Sekundär bakgrundsfärg", - "title": "Färg för sekundär bakgrund" - } - }, - "enable": { - "label": "Aktivera valt tema", - "title": "Aktivera det valda temat för sidan" - }, - "select": { - "label": "Välj tema", - "title": "Välj ett tema som ska tillämpas på sidan" - }, - "title": "Deep Dark-inställningar för YouTube" - } - } - } -} + "langCode": "en-US", + "langName": "Svenska (SV)", + "messages": { + "resumingVideo": "Återupptar video vid {{VIDEO_TIME}}", + "settingVolume": "Ställa in volymökning till {{VOLUME_BOOST_AMOUNT}}" + }, + "pages": { + "content": { + "features": { + "copyTimestampUrlButton": { + "button": { + "copied": "Kopierad!", + "label": "Kopiera videons webbadress med tidsstämpel" + } + }, + "featureMenu": { + "button": { + "label": "Funktionsmeny" + } + }, + "forwardRewindButtons": { + "buttons": { + "forwardButton": { + "label": "Snabbspola med {{TIME}}" + }, + "rewindButton": { + "label": "Återspola med {{TIME}}" + } + } + }, + "hideEndScreenCardsButton": { + "button": { + "label": "Dölj slutskärmskort", + "toggle": { + "off": "Visa slutskärmskort", + "on": "Dölj slutskärmskort" + } + } + }, + "loopButton": { + "button": { + "label": "Slinga", + "toggle": { + "off": "Slinga av", + "on": "Slinga på" + } + } + }, + "maximizePlayerButton": { + "button": { + "label": "Maximera", + "toggle": { + "off": "Maximera av", + "on": "Maximera på" + } + } + }, + "openTranscriptButton": { + "button": { + "label": "Öppna transkript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Minska hastigheten till {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Öka hastigheten till {{SPEED}}" + } + }, + "decreaseLimit": "Det går inte att sänka mer ({{SPEED}})", + "increaseLimit": "Det går inte att höja mer ({{SPEED}})" + }, + "playlistLength": { + "title": "Total längd kanske inte är korrekt om vissa videor är dolda eller om du inte har laddat tillräckligt med videor för att få hela längden." + }, + "screenshotButton": { + "button": { + "label": "Skärmbild" + }, + "copiedToClipboard": "Skärmbild kopierad till urklipp" + }, + "videoHistory": { + "resumeButton": "Återuppta", + "resumePrompt": { + "close": "Stäng" + } + }, + "volumeBoostButton": { + "button": { + "label": "Volymökning", + "toggle": { + "off": "Volymökning av", + "on": "Volymökning på" + } + } + } + } + }, + "options": { + "notifications": { + "error": { + "scrollWheelHoldModifierKey": { + "sameKey": { + "speedControl": "Rullningshjulets modifieringstangent för hastighetsreglering kan inte vara densamma modifieringstangent som rullningshjulets volymreglering.", + "volumeControl": "Rullningshjulets modifieringstangent för volymreglering kan inte vara densamma modifieringstangent som rullningshjulets hastighetsreglering." + } + } + }, + "info": { + "reset": "Alla alternativ har återställts till sina standardvärden.\nDu kan nu spara ändringarna genom att klicka på knappen \"Bekräfta\" eller örkasta dem genom att stänga denna sida eller ignorera detta meddelande." + }, + "success": { + "saved": "Inställningarna sparade." + } + } + } + }, + "settings": { + "clearData": { + "allDataDeleted": "All data har tagits bort.", + "confirmAlert": "Detta kommer att ta bort alla tilläggsdata relaterade till alternativen. Fortsätta?" + }, + "optionDisabled": { + "either": { + "label": "Aktivera {{OPTIONS}} för att konfigurera detta alternativ", + "separator": " eller " + }, + "plural": { + "label": "Aktivera {{OPTIONS}} för att konfigurera detta alternativ", + "separator": " och " + }, + "singular": "Aktivera {{OPTION}} för att konfigurera detta alternativ", + "specificOption": { + "featureMenu": "Konfigurera minst en knapp som ska placeras i funktionsmenyn för att konfigurera det här alternativet." + } + }, + "scrollForMoreSettings": "Rulla för fler inställningar", + "sections": { + "automaticQuality": { + "enable": { + "label": "Automatisk kvalitetsjustering", + "title": "Justerar automatiskt videokvaliteten till den valda nivån." + }, + "fallbackQualityStrategy": { + "select": { + "label": "Reservmetod för kvaliten", + "options": { + "higher": "Högre", + "lower": "Lägre" + }, + "title": "Metod att använda när den valda kvaliteten inte är tillgänglig" + } + }, + "select": { + "label": "Spelarkvalitet", + "title": "Kvaliteten för att ställa in videon till" + }, + "title": "Automatisk kvalitetsinställningar" + }, + "bottomButtons": { + "clear": { + "title": "Rensar all data som detta tillägg har lagrat på din dator", + "value": "Rensa data" + }, + "confirm": { + "title": "Bekräfta återställning av inställningar", + "value": "Bekräfta" + }, + "openTab": { + "title": "Öppna tilläggsinställningar i en ny flik" + }, + "reset": { + "title": "Återställer alla inställningar till sina standardinställningar, Klicka på bekräftelseknappen för att spara ändringarna", + "value": "Återställ" + } + }, + "buttonPlacement": { + "select": { + "buttonNames": { + "copyTimestampUrlButton": "Kopiera videons webbadress med tidsstämpelknappen", + "decreasePlaybackSpeedButton": "Knapp för att mindska hastigheten", + "forwardButton": "Snabbspolningsknapp", + "hideEndScreenCardsButton": "Dölj knappen för slutskärmskort", + "increasePlaybackSpeedButton": "Knapp för att öka hastigheten", + "loopButton": "Slingknapp", + "maximizePlayerButton": "Maximeraknapp", + "openTranscriptButton": "Transkriptknapp", + "rewindButton": "Återspolningsknapp", + "screenshotButton": "Skärmbildsknapp", + "volumeBoostButton": "Volymökningsknapp" + }, + "options": { + "below_player": { + "placement": "under spelarkontrollerna", + "value": "Under spelaren" + }, + "feature_menu": { + "placement": "i funktionsmenyn", + "value": "Funktionsmeny" + }, + "player_controls_left": { + "placement": "på vänster sida av spelarkontrollerna", + "value": "Vänster kontroller" + }, + "player_controls_right": { + "placement": "på höger sida av spelarkontrollerna", + "value": "Höger kontroller" + } + }, + "title": "Placera {{BUTTON_NAME}} {{PLACEMENT}}" + }, + "title": "Inställningar för knapplacering" + }, + "customCSS": { + "editor": { + "collapse": "Fäll ihop redigeraren", + "expand": "Fäll ut redigeraren", + "noProblems": "Inga problem hittades." + }, + "enable": { + "label": "Aktivera anpassad CSS", + "title": "Aktiverar anpassad CSS som ska tillämpas på sidan" + }, + "title": "Anpassade CSS-inställningar" + }, + "featureMenu": { + "openType": { + "select": { + "label": "Aktiveringstyp för menyn", + "options": { + "click": "Klicka", + "hover": "Musöver" + }, + "title": "Välj metod för att aktivera funktionsmenyn" + }, + "title": "Inställningar för funktionsmeny" + } + }, + "forwardRewindButtons": { + "enable": { + "label": "Aktivera spola framåt-/återspolningsknappar", + "title": "Lägger till spola framåt- och återspolningsknappar till videospelaren" + }, + "time": { + "label": "Spola framåt-/återspolningstid", + "title": "Tiden som videon ska spolas framåt/återspolas med" + }, + "title": "Inställningar för knapparna spola framåt/återspola" + }, + "importExportSettings": { + "exportButton": { + "success": "Inställningar har exporterats", + "title": "Exportera inställningarna till en JSON-fil", + "value": "Exportera Inställningar" + }, + "importButton": { + "error": { + "unknown": "Fel vid import av inställningar. Kontrollera filformatet.\nEtt okänt fel uppstod.", + "validation": "Fel vid import av inställningar. Kontrollera filformatet.\n{{ERROR_MESSAGE}}" + }, + "success": "Inställningar har importerats", + "title": "Importera inställningarna från en JSON-fil", + "value": "Importera inställningar" + } + }, + "language": { + "select": { + "label": "Språk", + "title": "Språket som ska användas för tillägget" + }, + "title": "Språk" + }, + "miscellaneous": { + "features": { + "automaticTheaterMode": { + "label": "Automatiskt teaterläge", + "title": "Aktiverar automatiskt teaterläge när du startar en video" + }, + "automaticallyDisableAmbientMode": { + "label": "Inaktivera biobelysning automatiskt", + "title": "Inaktiverar automatiskt biobelysning när du startar en video" + }, + "automaticallyDisableClosedCaptions": { + "label": "Inaktivera textning automatiskt", + "title": "Inaktiverar textning automatiskt när du laddar en video" + }, + "copyTimestampUrlButton": { + "label": "Kopiera videons webbadress med tidsstämpelknappen", + "title": "Kopiera videons webbadress med tidsstämpel (?t=123)" + }, + "defaultToOriginalAudioTrack": { + "label": "Standard till originalljudspår", + "title": "Använd alltid originalljudspåret som standard" + }, + "hideArtificialIntelligenceSummary": { + "label": "Dölj AI-sammanfattning", + "title": "Döljer sammanfattningen av artificiell intelligens under videorna" + }, + "hideEndScreenCards": { + "label": "Dölj slutskärmskort", + "title": "Döljer korten i slutet av videon" + }, + "hideEndScreenCardsButton": { + "label": "Dölj knappen för slutskärmskort", + "title": "Lägger till en knapp för att visa/dölja korten i slutet av videon" + }, + "hideLiveStreamChat": { + "label": "Dölj direktströmschatt", + "title": "Döljer direktströmschatten" + }, + "hideOfficialArtistVideosFromHomePage": { + "label": "Dölj officiella artistvideor", + "title": "Dölj officiella artistvideor från startsidan" + }, + "hidePaidPromotionBanner": { + "label": "Dölj betald marknadsföringsbanner", + "title": "Döljer bannern som visas när du tittar på en video som har betald marknadsföring" + }, + "hidePlayables": { + "label": "Dölj spelbara", + "title": "Döljer alla spelbara" + }, + "hideScrollbar": { + "label": "Dölj rullningslisten", + "title": "Döljer sidornas rullningsfält" + }, + "hideShorts": { + "label": "Dölj shorts", + "title": "Döljer alla shorts" + }, + "hideTranslateComment": { + "label": "Dölj översättning av kommentarer", + "title": "Döljer knappen 'Översätt till språk' under kommentarer" + }, + "loopButton": { + "label": "Slingknapp", + "title": "Lägger till en knapp i funktionsmenyn för att slinga videon du tittar på" + }, + "maximizePlayerButton": { + "label": "Maximeringsknapp för spelaren", + "title": "Lägger till en knapp i funktionsmenyn för att maximera spelaren" + }, + "openTranscriptButton": { + "label": "Öppningsknapp för transkript", + "title": "Lägger till en knapp i funktionsmenyn för att visa transkript av videon du tittar på" + }, + "openYouTubeSettingsOnHover": { + "label": "Öppna YouTube-inställningar vid musöver", + "title": "Öppnar YouTube-inställningsmenyn när du håller muspekaren över inställningsknappen" + }, + "pauseBackgroundPlayers": { + "label": "Pausa spelare i bakgrunden", + "title": "Pausar videospelare i bakgrundsflikar när du startar en ny videospelare i en förgrundsflik" + }, + "playlistRemover": { + "label": "Dölj spellistor från hemsidan", + "title": "Bli av med spellistor från hemsidan" + }, + "remainingTime": { + "label": "Återstående tid", + "title": "Visar återstående tid för videon du tittar på" + }, + "rememberLastVolume": { + "label": "Kom ihåg senaste volymen", + "title": "Kommer ihåg volymen på den senaste videon du tittade på och ställer in den när du öppnar en ny video" + }, + "removeRedirect": { + "label": "Ta bort YouTube-omdirigeringswebbadresser", + "title": "Ersätter YouTube-omdirigering genom faktiska webbadresser, hoppar över omdirigeringsvarningsdialog" + }, + "restoreFullscreenScrolling": { + "label": "Återställ fullskärmsrullning", + "title": "Återställer rullning i helskärmsläge" + }, + "shareShortener": { + "label": "Förkorta YouTube-videons delningslänk", + "title": "Förkortar YouTube-videons delningslänk (youtu.be) genom att ta bort funktionsparametrar från den" + }, + "shortsAutoScroll": { + "label": "Automatisk rullning för shorts", + "title": "Rullar automatiskt till nästa shorts" + }, + "skipContinueWatching": { + "label": "Hoppa över \"Videon är pausad. Fortsätt titta?\"", + "title": "Hoppa över dialogrutan som pausar videouppspelningen" + } + }, + "title": "Övriga inställningar" + }, + "onScreenDisplaySettings": { + "color": { + "label": "Färg", + "options": { + "blue": "Blå", + "green": "Grön", + "orange": "Orange", + "pink": "Rosa", + "purple": "Lila", + "red": "Röd", + "white": "Vit", + "yellow": "Gul" + }, + "title": "Välj färgen för On-Screen Display" + }, + "hide": { + "label": "Döljfördröjning", + "title": "Ange tiden i millisekunder innan On-Screen Display automatiskt döljs" + }, + "opacity": { + "label": "Genomskinlighet", + "title": "Justera genomskinligheten för On-Screen Display" + }, + "padding": { + "label": "Utfyllnad", + "title": "Justera avståndet runt On-Screen Display i pixlar. Detta gäller specifikt för hörn On-Screen Display." + }, + "position": { + "label": "Position", + "options": { + "bottom_left": "Nedre vänstra", + "bottom_right": "Nedre högra", + "center": "Mitten", + "top_left": "Övre vänstra", + "top_right": "Övre högra" + }, + "title": "Välj placering av On-Screen Display" + }, + "title": "On-Screen Display-inställningar", + "type": { + "label": "Typ", + "options": { + "circle": "Cirkel", + "line": "Rad", + "no_display": "Ingen visning", + "text": "Text" + }, + "title": "Välj typ av On-Screen Display" + } + }, + "playbackSpeed": { + "enable": { + "label": "Tvingad uppspelningshastighet", + "title": "Ställer in videohastigheten till det du väljer nedan" + }, + "playbackSpeedButtons": { + "label": "Knapp för uppspelningshastigheten", + "select": { + "label": "Knapp för uppspelningshastigheten", + "title": "Hastighetsändring per klick" + }, + "title": "Lägger till knappar för att öka eller minska uppspelningshastigheten på videon du tittar på" + }, + "select": { + "label": "Uppspelningshastighet", + "title": "Hastigheten att spela upp videon i" + }, + "title": "Inställningar för uppspelningshastighet" + }, + "playlistLength": { + "enable": { + "label": "Visa information om spellistans längd", + "title": "Visar spellistans totala längd och hur mycket som har tittats på och hur mycket som återstår." + }, + "title": "Inställningar för spellistans längd", + "wayToGetLength": { + "select": { + "label": "Metod för att få spellistans längd", + "title": "Sättet att få information om spellista längd (API-metoden kommer att falla tillbaka till HTML om ett fel inträffar)" + } + }, + "wayToGetWatchTime": { + "select": { + "label": "Metod för att hämta tittad tid", + "options": { + "duration": "Videolängd", + "youtube": "Tittad videolängd" + }, + "title": "Sättet att få den tid som tittats på (videons längdtyp används endast på visningssidan)" + } + } + }, + "screenshotButton": { + "enable": { + "label": "Skärmbildsknapp", + "title": "Lägger till en knapp till spelaren för att ta en skärmbild av videon" + }, + "saveAs": { + "clipboard": "Urklipp", + "file": "Fil" + }, + "selectFormat": { + "label": "Skärmbildsformat", + "title": "Formatet för att spara skärmbilden i" + }, + "selectSaveAs": { + "label": "Skärmbildstyp att spara i", + "title": "Skärmbildens spartyp" + }, + "title": "Skärmbildsinställningar" + }, + "scrollWheelSpeedControl": { + "adjustmentSteps": { + "label": "Hastighetsändring per rullning", + "title": "Justera hastighetsändringen per rullning" + }, + "enable": { + "label": "Hastighetsändring med rullningshjulet", + "title": "Tryck på en modifierartangent för att aktivera hastighetsjustering med rullningshjulet." + }, + "optionLabel": "{{KEY}}-tangent", + "select": { + "label": "Modifieringstangent", + "title": "Modifieringstangent att använda" + }, + "title": "Inställningar för rullningshjulets hastighetsändring" + }, + "scrollWheelVolumeControl": { + "adjustmentSteps": { + "label": "Volymändring per rullning", + "title": "Justera volymändringen per rullning" + }, + "enable": { + "label": "Volymändring med rullningshjulet", + "title": "Låter dig använda rullningshjulet för att ändra volymen på videon du tittar på" + }, + "holdModifierKey": { + "enable": { + "label": "Aktivera när du håller ner modifieringstangenten", + "title": "Tryck på en modifierartangent för att aktivera hastighetsändringen med rullningshjulet." + }, + "optionLabel": "{{KEY}}-tangent", + "select": { + "label": "Modifieringstangent", + "title": "Modifieringstangent att använda" + } + }, + "holdRightClick": { + "enable": { + "label": "Aktivera när du håller ner höger musknapp", + "title": "Håll höger musknapp nertryckt för att aktivera rullningshjulets volymkontroll" + } + }, + "title": "Rullningshjulets volyminställningar" + }, + "settingSearch": { + "placeholder": "Sök efter en inställning" + }, + "videoHistory": { + "enable": { + "label": "Håll reda på visade videor", + "title": "Håller reda på var du slutade på videor du tittade på och gör det möjligt att återuppta uppspelningen" + }, + "resumeType": { + "select": { + "label": "Återupptagningstyp", + "options": { + "automatic": "Automatisk", + "prompt": "Fråga" + }, + "title": "Välj hur du vill återuppta videor" + } + }, + "title": "Inställningar för videohistorik" + }, + "volumeBoost": { + "boostAmount": { + "label": "Volymökningsmängd (dB)", + "title": "Hur mycket ljudet ska öka med" + }, + "enable": { + "label": "Volymökning", + "title": "Aktivera volymökning" + }, + "mode": { + "select": { + "label": "Volymökningsläge", + "options": { + "global": "Global", + "perVideo": "Per video" + }, + "title": "Välj hur volymökning tillämpas. \"Per video\" gör det möjligt att aktivera ökning för varje video individuellt i funktionsmenyn. 'Global' gäller ökning för alla videor när volymökning är aktiverat." + } + }, + "title": "Inställningar för volymökning" + }, + "youtubeDataApiV3Key": { + "getApiKeyLinkText": "Du kan hämta en härifrån", + "input": { + "label": "API-nyckel", + "title": "Ange din Youtube Data API V3-nyckel." + }, + "title": "YouTube API V3-nyckel" + }, + "youtubeDeepDark": { + "author": "Skapare", + "co-authors": "Medskapare", + "colors": { + "colorShadow": { + "label": "Skuggfärg", + "title": "Färg för skuggor" + }, + "dimmerText": { + "label": "Sekundär textfärg", + "title": "Färg för sekundärtext" + }, + "hoverBackground": { + "label": "Bakgrundsfärg för musöver", + "title": "Bakgrundsfärg för musöver" + }, + "mainBackground": { + "label": "Primär bakgrundsfärg", + "title": "Färg för primär bakgrund" + }, + "mainColor": { + "label": "Accentfärg", + "title": "Färg för accent" + }, + "mainText": { + "label": "Primär textfärg", + "title": "Färg för primär text" + }, + "secondBackground": { + "label": "Sekundär bakgrundsfärg", + "title": "Färg för sekundär bakgrund" + } + }, + "enable": { + "label": "Aktivera valt tema", + "title": "Aktivera det valda temat för sidan" + }, + "select": { + "label": "Välj tema", + "title": "Välj ett tema som ska tillämpas på sidan" + }, + "title": "Deep Dark-inställningar för YouTube" + } + } + } +} \ No newline at end of file diff --git a/public/locales/tr-TR.json b/public/locales/tr-TR.json index ffb286d66..a487a458a 100644 --- a/public/locales/tr-TR.json +++ b/public/locales/tr-TR.json @@ -1,643 +1,642 @@ { - "langCode": "tr-TR", - "langName": "Türkçe", - "messages": { - "resumingVideo": "{{VIDEO_TIME}} tarihinde videoyu devam ettir", - "settingVolume": "Ses güçlendirmesini {{VOLUME_BOOST_AMOUNT}} olarak ayarla" - }, - "pages": { - "content": { - "features": { - "copyTimestampUrlButton": { - "button": { - "copied": "Kopyalandı!", - "label": "Geçerli zamana ait video URL'sini kopyala" - } - }, - "featureMenu": { - "button": { - "label": "Özellik menüsü" - } - }, - "forwardRewindButtons": { - "buttons": { - "forwardButton": { - "label": "{{TIME}} hızlı ileri sar" - }, - "rewindButton": { - "label": "{{TIME}} kadar geri sar" - } - } - }, - "hideEndScreenCardsButton": { - "button": { - "label": "Bitiş ekranı kartlarını gizle", - "toggle": { - "off": "Bitiş ekranı kartlarını göster", - "on": "Bitiş ekranı kartlarını gizle" - } - } - }, - "loopButton": { - "button": { - "label": "Tekrarla", - "toggle": { - "off": "Tekrarlama kapalı", - "on": "Tekrarlama açık" - } - } - }, - "maximizePlayerButton": { - "button": { - "label": "Ekranı kapla", - "toggle": { - "off": "Tam ekran kapalı", - "on": "Tam ekran açıl" - } - } - }, - "openTranscriptButton": { - "button": { - "label": "Transkripti Aç" - } - }, - "playbackSpeedButtons": { - "buttons": { - "decreasePlaybackSpeedButton": { - "label": "Hızı {{SPEED}} değerine düşür" - }, - "increasePlaybackSpeedButton": { - "label": "Hızı {{SPEED}} değerine çıkar" - } - }, - "decreaseLimit": "Daha fazla düşüremezsin ({{SPEED}})", - "increaseLimit": "Daha fazla artıramazsın ({{SPEED}})" - }, - "playlistLength": { - "title": "Bazı videolar gizliyse veya tam uzunluğa ulaşmak için yeterli sayıda video yüklemediyseniz, toplam uzunluk doğru olmayabilir." - }, - "screenshotButton": { - "button": { - "label": "Ekran görüntüsü" - }, - "copiedToClipboard": "Ekran görüntüsü panoya kopyalandı" - }, - "videoHistory": { - "resumeButton": "Devam Et", - "resumePrompt": { - "close": "Kapat" - } - }, - "volumeBoostButton": { - "button": { - "label": "Ses Yükseltici", - "toggle": { - "off": "Ses Yükseltici Devredışı", - "on": "Ses Yükseltici Aktif" - } - } - } - } - }, - "options": { - "notifications": { - "error": { - "scrollWheelHoldModifierKey": { - "sameKey": { - "speedControl": "Kaydırma tekerleği hız kontrolü için kullanılan değiştirici tuş, kaydırma tekerleği ses kontrolü için kullanılan değiştirici tuşla aynı olamaz.", - "volumeControl": "Kaydırma tekerleği ile ses düzeyi kontrolü için kullanılan değiştirici tuş, kaydırma hızı kontrolü için kullanılan değiştirici tuşla aynı olamaz." - } - } - }, - "info": { - "reset": "Tüm seçenekler varsayılan değerlerine sıfırlandı.\nArtık \"Onayla\" düğmesine tıklayarak değişiklikleri kaydedebilir veya bu sayfayı kapatarak iptal edebilir veya bu bildirimi göz ardı edebilirsiniz." - }, - "success": { - "saved": "Seçenekler kaydedildi." - } - } - } - }, - "settings": { - "clearData": { - "allDataDeleted": "Tüm veriler silindi.", - "confirmAlert": "Bu seçeneklerle ilgili tüm uzantı verilerini silecektir. Devam etmek istiyor musunuz?" - }, - "optionDisabled": { - "either": { - "label": "Bu seçeneği yapılandırmak için {{OPTIONS}} öğesini etkinleştirin", - "separator": " veya " - }, - "plural": { - "label": "Bu seçeneği yapılandırmak için {{OPTIONS}} öğesini etkinleştirin", - "separator": " ve " - }, - "singular": "Bu seçeneği yapılandırmak için '{{OPTION}}' öğesini etkinleştirin", - "specificOption": { - "deepDarkCustomTheme": "Bu seçeneği yapılandırmak için temayı 'Özel' olarak ayarlayın.", - "featureMenu": "Bu seçeneği yapılandırmak için özellik menüsüne yerleştirilecek en az bir düğmeyi yapılandırın." - } - }, - "scrollForMoreSettings": "Daha fazla ayar için kaydırın", - "sections": { - "automaticQuality": { - "enable": { - "label": "Otomatik kalite ayarlamayı etkinleştir", - "title": "Video kalitesini seçilen seviyeye otomatik olarak ayarlar." - }, - "fallbackQualityStrategy": { - "select": { - "label": "Kalite geri dönüş stratejisi", - "options": { - "higher": "Daha yüksek", - "lower": "Daha düşük" - }, - "title": "Seçilen kalite mevcut değilse kullanılacak strateji" - } - }, - "select": { - "label": "Oynatma kalitesi", - "title": "Videonun ayarlanacağı kalite" - }, - "title": "Otomatik kalite ayarları" - }, - "bottomButtons": { - "clear": { - "title": "Bu uzantının makinenizde sakladığı tüm verileri temizler", - "value": "Veriyi Temizle" - }, - "confirm": { - "title": "Ayarı sıfırlamayı onayla", - "value": "Onayla" - }, - "openTab": { - "title": "Uzantı ayarlarını yeni bir sekmede açın" - }, - "reset": { - "title": "Tüm ayarları varsayılan değerlerine sıfırlar. Değişiklikleri kaydetmek için onayla düğmesine tıklayın", - "value": "Sıfırla" - } - }, - "buttonPlacement": { - "select": { - "buttonNames": { - "copyTimestampUrlButton": "Video bağlantısını zaman damgasıyla kopyala butonu", - "decreasePlaybackSpeedButton": "Hızı Düşürme Butonu", - "forwardButton": "Hızlı İleri düğmesi", - "hideEndScreenCardsButton": "Bitiş ekranı kartlarını gizleme düğmesi", - "increasePlaybackSpeedButton": "Hızı Artırma Butonu", - "loopButton": "Döngü düğmesi", - "maximizePlayerButton": "Tam ekran düğmesi", - "openTranscriptButton": "Transkripti Aç butonu", - "rewindButton": "Geri sarma düğmesi", - "screenshotButton": "Ekran görüntüsü düğmesi", - "volumeBoostButton": "Ses güçlendirme düğmesi" - }, - "options": { - "below_player": { - "placement": "oynatıcı kontrollerinin altında", - "value": "Oynatıcının altında" - }, - "feature_menu": { - "placement": "özellik menüsünde", - "value": "Özellik Menüsü" - }, - "player_controls_left": { - "placement": "oynatıcı kontrollerinin sol tarafında", - "value": "Sol Kontroller" - }, - "player_controls_right": { - "placement": "oynatıcı kontrollerinin sağ tarafında", - "value": "Sağ Kontroller" - } - }, - "title": "{{BUTTON_NAME}} düğmesini {{PLACEMENT}} konumuna yerleştir" - }, - "title": "Düğme Yerleşim Ayarları" - }, - "customCSS": { - "editor": { - "collapse": "Düzenleyiciyi Daralt", - "expand": "Düzenleyiciyi Genişlet", - "noProblems": "Hiç bir sorun bulunamadı." - }, - "enable": { - "label": "Özel CSS'yi etkinleştir", - "title": "Özel CSS'nin sayfaya uygulanmasını sağlar" - }, - "title": "Özel CSS Ayarları" - }, - "featureMenu": { - "openType": { - "select": { - "label": "Menü Aktivasyon Türü", - "options": { - "click": "Tıkla", - "hover": "İmleci Üzerine Getir" - }, - "title": "Özellik menüsünü etkinleştirme yöntemini seçin" - }, - "title": "Özellik menüsü ayarları" - } - }, - "forwardRewindButtons": { - "enable": { - "label": "İleri/geri sarma düğmeleri", - "title": "Video oynatıcısına ileri ve geri sarma düğmeleri ekler" - }, - "time": { - "label": "İleri/geri sarma süresi", - "title": "Videoyu ileri/geri sarmak için atlanacak süre" - }, - "title": "İleri/geri sarma düğmesi ayarları" - }, - "importExportSettings": { - "exportButton": { - "success": "Ayarlar başarıyla dışa aktarıldı", - "title": "Ayarları JSON dosyasına aktar", - "value": "Ayarları Dışa Aktar" - }, - "importButton": { - "error": { - "unknown": "Ayarlar içe aktarılırken hata oluştu. Lütfen dosya formatını kontrol edin.\nBilinmeyen bir hata oluştu.", - "validation": "Ayarlar içe aktarılırken hata oluştu. Lütfen dosya formatını kontrol edin.\n{{ERROR_MESSAGE}}" - }, - "success": "Ayarlar başarıyla içe aktarıldı", - "title": "Ayarları JSON dosyasına aktar", - "value": "Ayarları İçe Aktar" - } - }, - "language": { - "select": { - "label": "Dil", - "title": "Uzuntı için kullanılacak dil" - }, - "title": "Dil" - }, - "miscellaneous": { - "features": { - "automaticTheaterMode": { - "label": "Otomatik tiyatro modu", - "title": "Bir video yüklediğinizde tiyatro modunu otomatik olarak etkinleştirir" - }, - "automaticallyDisableAmbientMode": { - "label": "Ortam modunu otomatik olarak devre dışı bırak", - "title": "Bir video yüklediğinizde ortam modunu otomatik olarak devre dışı bırakır" - }, - "automaticallyDisableClosedCaptions": { - "label": "Kapalı altyazıları otomatik olarak devre dışı bırak", - "title": "Bir video yüklendiğinde kapalı altyazıları otomatik olarak devre dışı bırakır" - }, - "copyTimestampUrlButton": { - "label": "Video URL'sini zaman damgası düğmesiyle kopyala", - "title": "Video URL'sini zaman damgasıyla kopyalar (?t=123)" - }, - "defaultToOriginalAudioTrack": { - "label": "Varsayılan olarak orijinal ses parçasına dön", - "title": "Her zaman varsayılan olarak orijinal ses parçasına dön" - }, - "hideArtificialIntelligenceSummary": { - "label": "AI özetini gizle", - "title": "Videoların altındaki yapay zeka özetini gizler" - }, - "hideEndScreenCards": { - "label": "Bitiş ekranı kartlarını gizle", - "title": "Video'nun sonundaki kartları gizler" - }, - "hideEndScreenCardsButton": { - "label": "Bitiş ekranı kartlarını gizleme düğmesi", - "title": "Video'nun sonuna bitiş ekranı kartlarını gizlemek/göstermek için bir düğme ekler" - }, - "hideLiveStreamChat": { - "label": "Canlı yayın sohbetini gizle", - "title": "Canlı yayın sohbetini gizler" - }, - "hideOfficialArtistVideosFromHomePage": { - "label": "Resmi Sanatçı Videolarını Gizle", - "title": "Ana Sayfada Resmi Sanatçı Videolarını Gizle" - }, - "hidePaidPromotionBanner": { - "label": "Ücretli tanıtım afişini gizle", - "title": "Ücretli tanıtım içeren bir videoyu izlediğinizde görünen başlığı gizler" - }, - "hidePlayables": { - "label": "Oynatılabilirleri gizle", - "title": "Tüm oynatılabilir öğeleri gizle" - }, - "hideScrollbar": { - "label": "Kaydırma çubuğu gizlemeyi etkinleştir", - "title": "Sayfa kaydırma çubuğunu gizler" - }, - "hideShorts": { - "label": "Kısa videoları gizle", - "title": "Tüm kısa videoları gizler" - }, - "hideTranslateComment": { - "label": "Yorumu Çevir'i Gizle Butonu", - "title": "Yorumlar altındaki 'Dile Çevir' düğmesini gizler" - }, - "loopButton": { - "label": "Tekrarlama düğmesi", - "title": "İzlediğiniz videoyu döngüye almak için özellik menüsüne bir düğme ekler" - }, - "maximizePlayerButton": { - "label": "Oynatıcıyı tam ekran yapma düğmesini etkinleştir", - "title": "Oynatıcıyı büyütmek için özellik menüsüne bir düğme ekler" - }, - "openTranscriptButton": { - "label": "Not dökümü düğmesini gizle", - "title": "İzlediğiniz videonun metnini açmak için özellik menüsüne bir düğme ekler" - }, - "openYouTubeSettingsOnHover": { - "label": "Fare ile üzerine gelerek Youtube ayarlarını açın", - "title": "Ayarlar düğmesinin üzerine gelindiğinde YouTube ayarlar menüsünü açar" - }, - "pauseBackgroundPlayers": { - "label": "Arka plan oynatıcılarını duraklat", - "title": "Ön plan sekmesinde yeni bir oynatıcı başlattığınızda arka plan sekmelerindeki video oynatıcıları duraklatır" - }, - "playlistRemover": { - "label": "Hide playlists from homepage", - "title": "Get rid of playlists from homepage" - }, - "remainingTime": { - "label": "Kalan süre", - "title": "İzlediğiniz videonun kalan süresini gösterir" - }, - "rememberLastVolume": { - "label": "Son ses hacmini hatırla", - "title": "İzlediğiniz son videonun ses seviyesini hatırlar ve yeni bir video açtığınızda bu ses seviyesine ayarlar" - }, - "removeRedirect": { - "label": "YouTube yönlendirme bağlantılarını kaldır", - "title": "Yönlendirme uyarı diyaloğunu atlayarak YouTube yönlendirmesini gerçek URL'lerle değiştirir" - }, - "restoreFullscreenScrolling": { - "label": "Restore fullscreen scrolling", - "title": "Restores scrolling in fullscreen mode" - }, - "shareShortener": { - "label": "YouTube video paylaşım bağlantısını kısalt", - "title": "YouTube video paylaşım bağlantısını (youtu.be) si/feature parametrelerini çıkararak kısaltır" - }, - "shortsAutoScroll": { - "label": "Kısa videoya otomatik kaydır", - "title": "Bir sonraki kısa videoya otomatik kaydır" - }, - "skipContinueWatching": { - "label": "\"Video durdu. Hala orda mısın?\"ı Atla", - "title": "Video oynatmayı durduran boşta kalma iletişim kutusunu atlar" - } - }, - "title": "Çeşitli ayarlar" - }, - "onScreenDisplaySettings": { - "color": { - "label": "Renk", - "options": { - "blue": "Mavi", - "green": "Yeşil", - "orange": "Turuncu", - "pink": "Pembe", - "purple": "Mor", - "red": "Kırmızı", - "white": "Beyaz", - "yellow": "Sarı" - }, - "title": "Ekran göstergesinin rengini seçin" - }, - "hide": { - "label": "Gecikmeyi Gizle", - "title": "Ekran görüntüsünü otomatik olarak gizlemeden önce geçen süreyi milisaniye cinsinden belirtin" - }, - "opacity": { - "label": "Saydamlık", - "title": "Ekrandaki gösterimin saydamlığını ayarlayın" - }, - "padding": { - "label": "İç Boşluk", - "title": "Adjust the spacing around the On-Screen Display in pixels. This applies specifically to corner On-Screen Display." - }, - "position": { - "label": "Konum", - "options": { - "bottom_left": "Sol Alt", - "bottom_right": "Sağ Alt", - "center": "Orta", - "top_left": "Sol Üst", - "top_right": "Sağ Üst" - }, - "title": "Ekran görüntüleme konumunu seçin" - }, - "title": "Ekran Üstü Görüntüleme Ayarları", - "type": { - "label": "Tür", - "options": { - "circle": "Daire", - "line": "Satır", - "no_display": "Ekran yok", - "text": "Metin" - }, - "title": "Ekran görüntüleme türünü seçin" - } - }, - "playbackSpeed": { - "enable": { - "label": "Zorunlu oynatma hızını etkinleştir", - "title": "Video hızını aşağıda seçtiğiniz hıza ayarlar" - }, - "playbackSpeedButtons": { - "label": "Oynatma hızı ayarları", - "select": { - "label": "Oynatma düğmelerinin hızı", - "title": "Tıklama başına değiştirilecek hız miktarı" - }, - "title": "İzlediğiniz videonun oynatma hızını artırmak veya azaltmak için düğmeler ekler" - }, - "select": { - "label": "Oynatma hızı", - "title": "Video oynatma hızını ayarlar" - }, - "title": "Oynatma hızı ayarları" - }, - "playlistLength": { - "enable": { - "label": "Çalma listesinin uzunluk bilgilerini göster", - "title": "Oynatma listesinin toplam, izlenen ve ne kalan uzunluğunu gösterir." - }, - "title": "Oynatma listesi uzunluk ayarları", - "wayToGetLength": { - "select": { - "label": "Oynatma listesi uzunluğunu alma yöntemi", - "title": "Oynatma listesi uzunluk bilgisi alma yolu (Bir hata oluşursa API yöntemi HTML'e geri dönecek)" - } - }, - "wayToGetWatchTime": { - "select": { - "label": "İzlenme süresini alma yöntemi", - "options": { - "duration": "Video Uzunluğu", - "youtube": "Video İzlenme Süresi" - }, - "title": "İzlenen süreyi alma yolu (Video Uzunluğu türü yalnızca izleme sayfasında kullanılır)" - } - } - }, - "screenshotButton": { - "enable": { - "label": "Ekran görüntüsü tuşunu etkinleştir", - "title": "Videonun ekran görüntüsünü almak için oynatıcıya bir düğme ekler" - }, - "saveAs": { - "clipboard": "Pano", - "file": "Dosya" - }, - "selectFormat": { - "label": "Ekran görüntüsü formatı", - "title": "Ekran görüntüsünün kaydedileceği format" - }, - "selectSaveAs": { - "label": "Ekran görüntüsü kaydetme türü", - "title": "Ekran görüntüsü kaydetme türü" - }, - "title": "Ekran görüntüsü ayarları" - }, - "scrollWheelSpeedControl": { - "adjustmentSteps": { - "label": "Kaydırma başına hız değişimi", - "title": "Kaydırma başına hız değiştirmeyi ayarlar" - }, - "enable": { - "label": "Kaydırma tekerleği hız kontrolü", - "title": "Kaydırma tekerleği ile hız ayarını etkinleştirmek için değiştirici tuşlarından birine basın." - }, - "optionLabel": "{{KEY}} anahtarı", - "select": { - "label": "Düzenleyici anahtar", - "title": "Kullanılacak kısayol düğmesi" - }, - "title": "Kaydırma tekerleği için hız kontrolü ayarları" - }, - "scrollWheelVolumeControl": { - "adjustmentSteps": { - "label": "Her kaydırmada değiştirilecek ses düzeyi", - "title": "Her kaydırmada değiştirilecek ses düzeyini ayarlayın" - }, - "enable": { - "label": "Kaydırma tekerleği ile ses kontrolü", - "title": "İzlediğiniz videonun ses düzeyini kontrol etmek için kaydırma tekerleğini kullanmanızı sağlar" - }, - "holdModifierKey": { - "enable": { - "label": "Değiştirici tuşa basılı tutulduğunda", - "title": "Kaydırma tekerleği ile ses düzeyi ayarını etkinleştirmek için değiştirici tuşlardan birine basın" - }, - "optionLabel": "{{KEY}} anahtarı", - "select": { - "label": "Düzenleyici anahtar", - "title": "Kullanılacak kısayol düğmesi" - } - }, - "holdRightClick": { - "enable": { - "label": "Etkinleştirmek için sağ tuşa basılı tutun", - "title": "Kaydırma tekerleği ile ses kontrolünü etkinleştirmek için farenin sağ düğmesine basılı tutun" - } - }, - "title": "Kaydırma tekerleği ile ses seviyesi kontrolü ayarları" - }, - "settingSearch": { - "placeholder": "Bir ayar arayın" - }, - "videoHistory": { - "enable": { - "label": "İzlenen videoları takip edin", - "title": "İzlediğiniz videolarda en son nerede kaldığınızı takip eder ve oynatmaya oradan devam etmenizi sağlar" - }, - "resumeType": { - "select": { - "label": "Devam etme türü", - "options": { - "automatic": "Otomatik", - "prompt": "İpucu" - }, - "title": "Videoları nasıl devam ettirmek istediğinizi seçin" - } - }, - "title": "Video geçmişi ayarları" - }, - "volumeBoost": { - "boostAmount": { - "label": "Ses güçlendirme miktarı (dB)", - "title": "Ses güçlendirme miktarı" - }, - "enable": { - "label": "Ses güçlendirmeyi etkinleştir", - "title": "Ses güçlendirmeyi etkinleştir" - }, - "mode": { - "select": { - "label": "Ses güçlendirme modu", - "options": { - "global": "Genel", - "perVideo": "Video başına" - }, - "title": "Ses artırmanın nasıl uygulanacağını seçin. 'Video başına', özellik menüsünde her video için ayrı ayrı güçlendirmenin etkinleştirilmesine olanak tanır. 'Genel', ses artırma etkinleştirildiğinde tüm videolara güçlendirme uygular." - } - }, - "title": "Ses güçlendirme ayarları" - }, - "youtubeDataApiV3Key": { - "getApiKeyLinkText": "Buradan bir tane alabilirsiniz", - "input": { - "label": "API Anahtarı", - "title": "Youtube Veri API V3 anahtarınızı girin." - }, - "title": "YouTube API V3 Anahtarı" - }, - "youtubeDeepDark": { - "author": "Yazar", - "co-authors": "Ortak yazarlar", - "colors": { - "colorShadow": { - "label": "Gölge rengi", - "title": "Gölge rengi" - }, - "dimmerText": { - "label": "İkincil metin rengi", - "title": "İkincil metin rengi" - }, - "hoverBackground": { - "label": "Üzerine gelindiğindeki arka plan rengi", - "title": "Üzerine gelindiğindeki arka plan rengi" - }, - "mainBackground": { - "label": "Ana arka plan rengi", - "title": "Ana arka plan rengi" - }, - "mainColor": { - "label": "Vurgulama rengi", - "title": "Vurgulama rengi" - }, - "mainText": { - "label": "Ana metin rengi", - "title": "Ana metin için renk" - }, - "secondBackground": { - "label": "İkincil arka plan rengi", - "title": "İkincil arka plan rengi" - } - }, - "enable": { - "label": "Seçilen temayı etkinleştir", - "title": "Sayfa için seçilen temayı etkinleştirin" - }, - "select": { - "label": "Tema seç", - "title": "Sayfa için uygulanacak bir tema seçin" - }, - "title": "YouTube Deep Dark Ayarları" - } - } - } -} + "langCode": "tr-TR", + "langName": "Türkçe", + "messages": { + "resumingVideo": "{{VIDEO_TIME}} tarihinde videoyu devam ettir", + "settingVolume": "Ses güçlendirmesini {{VOLUME_BOOST_AMOUNT}} olarak ayarla" + }, + "pages": { + "content": { + "features": { + "copyTimestampUrlButton": { + "button": { + "copied": "Kopyalandı!", + "label": "Geçerli zamana ait video URL'sini kopyala" + } + }, + "featureMenu": { + "button": { + "label": "Özellik menüsü" + } + }, + "forwardRewindButtons": { + "buttons": { + "forwardButton": { + "label": "{{TIME}} hızlı ileri sar" + }, + "rewindButton": { + "label": "{{TIME}} kadar geri sar" + } + } + }, + "hideEndScreenCardsButton": { + "button": { + "label": "Bitiş ekranı kartlarını gizle", + "toggle": { + "off": "Bitiş ekranı kartlarını göster", + "on": "Bitiş ekranı kartlarını gizle" + } + } + }, + "loopButton": { + "button": { + "label": "Tekrarla", + "toggle": { + "off": "Tekrarlama kapalı", + "on": "Tekrarlama açık" + } + } + }, + "maximizePlayerButton": { + "button": { + "label": "Ekranı kapla", + "toggle": { + "off": "Tam ekran kapalı", + "on": "Tam ekran açıl" + } + } + }, + "openTranscriptButton": { + "button": { + "label": "Transkripti Aç" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Hızı {{SPEED}} değerine düşür" + }, + "increasePlaybackSpeedButton": { + "label": "Hızı {{SPEED}} değerine çıkar" + } + }, + "decreaseLimit": "Daha fazla düşüremezsin ({{SPEED}})", + "increaseLimit": "Daha fazla artıramazsın ({{SPEED}})" + }, + "playlistLength": { + "title": "Bazı videolar gizliyse veya tam uzunluğa ulaşmak için yeterli sayıda video yüklemediyseniz, toplam uzunluk doğru olmayabilir." + }, + "screenshotButton": { + "button": { + "label": "Ekran görüntüsü" + }, + "copiedToClipboard": "Ekran görüntüsü panoya kopyalandı" + }, + "videoHistory": { + "resumeButton": "Devam Et", + "resumePrompt": { + "close": "Kapat" + } + }, + "volumeBoostButton": { + "button": { + "label": "Ses Yükseltici", + "toggle": { + "off": "Ses Yükseltici Devredışı", + "on": "Ses Yükseltici Aktif" + } + } + } + } + }, + "options": { + "notifications": { + "error": { + "scrollWheelHoldModifierKey": { + "sameKey": { + "speedControl": "Kaydırma tekerleği hız kontrolü için kullanılan değiştirici tuş, kaydırma tekerleği ses kontrolü için kullanılan değiştirici tuşla aynı olamaz.", + "volumeControl": "Kaydırma tekerleği ile ses düzeyi kontrolü için kullanılan değiştirici tuş, kaydırma hızı kontrolü için kullanılan değiştirici tuşla aynı olamaz." + } + } + }, + "info": { + "reset": "Tüm seçenekler varsayılan değerlerine sıfırlandı.\nArtık \"Onayla\" düğmesine tıklayarak değişiklikleri kaydedebilir veya bu sayfayı kapatarak iptal edebilir veya bu bildirimi göz ardı edebilirsiniz." + }, + "success": { + "saved": "Seçenekler kaydedildi." + } + } + } + }, + "settings": { + "clearData": { + "allDataDeleted": "Tüm veriler silindi.", + "confirmAlert": "Bu seçeneklerle ilgili tüm uzantı verilerini silecektir. Devam etmek istiyor musunuz?" + }, + "optionDisabled": { + "either": { + "label": "Bu seçeneği yapılandırmak için {{OPTIONS}} öğesini etkinleştirin", + "separator": " veya " + }, + "plural": { + "label": "Bu seçeneği yapılandırmak için {{OPTIONS}} öğesini etkinleştirin", + "separator": " ve " + }, + "singular": "Bu seçeneği yapılandırmak için '{{OPTION}}' öğesini etkinleştirin", + "specificOption": { + "featureMenu": "Bu seçeneği yapılandırmak için özellik menüsüne yerleştirilecek en az bir düğmeyi yapılandırın." + } + }, + "scrollForMoreSettings": "Daha fazla ayar için kaydırın", + "sections": { + "automaticQuality": { + "enable": { + "label": "Otomatik kalite ayarlamayı etkinleştir", + "title": "Video kalitesini seçilen seviyeye otomatik olarak ayarlar." + }, + "fallbackQualityStrategy": { + "select": { + "label": "Kalite geri dönüş stratejisi", + "options": { + "higher": "Daha yüksek", + "lower": "Daha düşük" + }, + "title": "Seçilen kalite mevcut değilse kullanılacak strateji" + } + }, + "select": { + "label": "Oynatma kalitesi", + "title": "Videonun ayarlanacağı kalite" + }, + "title": "Otomatik kalite ayarları" + }, + "bottomButtons": { + "clear": { + "title": "Bu uzantının makinenizde sakladığı tüm verileri temizler", + "value": "Veriyi Temizle" + }, + "confirm": { + "title": "Ayarı sıfırlamayı onayla", + "value": "Onayla" + }, + "openTab": { + "title": "Uzantı ayarlarını yeni bir sekmede açın" + }, + "reset": { + "title": "Tüm ayarları varsayılan değerlerine sıfırlar. Değişiklikleri kaydetmek için onayla düğmesine tıklayın", + "value": "Sıfırla" + } + }, + "buttonPlacement": { + "select": { + "buttonNames": { + "copyTimestampUrlButton": "Video bağlantısını zaman damgasıyla kopyala butonu", + "decreasePlaybackSpeedButton": "Hızı Düşürme Butonu", + "forwardButton": "Hızlı İleri düğmesi", + "hideEndScreenCardsButton": "Bitiş ekranı kartlarını gizleme düğmesi", + "increasePlaybackSpeedButton": "Hızı Artırma Butonu", + "loopButton": "Döngü düğmesi", + "maximizePlayerButton": "Tam ekran düğmesi", + "openTranscriptButton": "Transkripti Aç butonu", + "rewindButton": "Geri sarma düğmesi", + "screenshotButton": "Ekran görüntüsü düğmesi", + "volumeBoostButton": "Ses güçlendirme düğmesi" + }, + "options": { + "below_player": { + "placement": "oynatıcı kontrollerinin altında", + "value": "Oynatıcının altında" + }, + "feature_menu": { + "placement": "özellik menüsünde", + "value": "Özellik Menüsü" + }, + "player_controls_left": { + "placement": "oynatıcı kontrollerinin sol tarafında", + "value": "Sol Kontroller" + }, + "player_controls_right": { + "placement": "oynatıcı kontrollerinin sağ tarafında", + "value": "Sağ Kontroller" + } + }, + "title": "{{BUTTON_NAME}} düğmesini {{PLACEMENT}} konumuna yerleştir" + }, + "title": "Düğme Yerleşim Ayarları" + }, + "customCSS": { + "editor": { + "collapse": "Düzenleyiciyi Daralt", + "expand": "Düzenleyiciyi Genişlet", + "noProblems": "Hiç bir sorun bulunamadı." + }, + "enable": { + "label": "Özel CSS'yi etkinleştir", + "title": "Özel CSS'nin sayfaya uygulanmasını sağlar" + }, + "title": "Özel CSS Ayarları" + }, + "featureMenu": { + "openType": { + "select": { + "label": "Menü Aktivasyon Türü", + "options": { + "click": "Tıkla", + "hover": "İmleci Üzerine Getir" + }, + "title": "Özellik menüsünü etkinleştirme yöntemini seçin" + }, + "title": "Özellik menüsü ayarları" + } + }, + "forwardRewindButtons": { + "enable": { + "label": "İleri/geri sarma düğmeleri", + "title": "Video oynatıcısına ileri ve geri sarma düğmeleri ekler" + }, + "time": { + "label": "İleri/geri sarma süresi", + "title": "Videoyu ileri/geri sarmak için atlanacak süre" + }, + "title": "İleri/geri sarma düğmesi ayarları" + }, + "importExportSettings": { + "exportButton": { + "success": "Ayarlar başarıyla dışa aktarıldı", + "title": "Ayarları JSON dosyasına aktar", + "value": "Ayarları Dışa Aktar" + }, + "importButton": { + "error": { + "unknown": "Ayarlar içe aktarılırken hata oluştu. Lütfen dosya formatını kontrol edin.\nBilinmeyen bir hata oluştu.", + "validation": "Ayarlar içe aktarılırken hata oluştu. Lütfen dosya formatını kontrol edin.\n{{ERROR_MESSAGE}}" + }, + "success": "Ayarlar başarıyla içe aktarıldı", + "title": "Ayarları JSON dosyasına aktar", + "value": "Ayarları İçe Aktar" + } + }, + "language": { + "select": { + "label": "Dil", + "title": "Uzuntı için kullanılacak dil" + }, + "title": "Dil" + }, + "miscellaneous": { + "features": { + "automaticTheaterMode": { + "label": "Otomatik tiyatro modu", + "title": "Bir video yüklediğinizde tiyatro modunu otomatik olarak etkinleştirir" + }, + "automaticallyDisableAmbientMode": { + "label": "Ortam modunu otomatik olarak devre dışı bırak", + "title": "Bir video yüklediğinizde ortam modunu otomatik olarak devre dışı bırakır" + }, + "automaticallyDisableClosedCaptions": { + "label": "Kapalı altyazıları otomatik olarak devre dışı bırak", + "title": "Bir video yüklendiğinde kapalı altyazıları otomatik olarak devre dışı bırakır" + }, + "copyTimestampUrlButton": { + "label": "Video URL'sini zaman damgası düğmesiyle kopyala", + "title": "Video URL'sini zaman damgasıyla kopyalar (?t=123)" + }, + "defaultToOriginalAudioTrack": { + "label": "Varsayılan olarak orijinal ses parçasına dön", + "title": "Her zaman varsayılan olarak orijinal ses parçasına dön" + }, + "hideArtificialIntelligenceSummary": { + "label": "AI özetini gizle", + "title": "Videoların altındaki yapay zeka özetini gizler" + }, + "hideEndScreenCards": { + "label": "Bitiş ekranı kartlarını gizle", + "title": "Video'nun sonundaki kartları gizler" + }, + "hideEndScreenCardsButton": { + "label": "Bitiş ekranı kartlarını gizleme düğmesi", + "title": "Video'nun sonuna bitiş ekranı kartlarını gizlemek/göstermek için bir düğme ekler" + }, + "hideLiveStreamChat": { + "label": "Canlı yayın sohbetini gizle", + "title": "Canlı yayın sohbetini gizler" + }, + "hideOfficialArtistVideosFromHomePage": { + "label": "Resmi Sanatçı Videolarını Gizle", + "title": "Ana Sayfada Resmi Sanatçı Videolarını Gizle" + }, + "hidePaidPromotionBanner": { + "label": "Ücretli tanıtım afişini gizle", + "title": "Ücretli tanıtım içeren bir videoyu izlediğinizde görünen başlığı gizler" + }, + "hidePlayables": { + "label": "Oynatılabilirleri gizle", + "title": "Tüm oynatılabilir öğeleri gizle" + }, + "hideScrollbar": { + "label": "Kaydırma çubuğu gizlemeyi etkinleştir", + "title": "Sayfa kaydırma çubuğunu gizler" + }, + "hideShorts": { + "label": "Kısa videoları gizle", + "title": "Tüm kısa videoları gizler" + }, + "hideTranslateComment": { + "label": "Yorumu Çevir'i Gizle Butonu", + "title": "Yorumlar altındaki 'Dile Çevir' düğmesini gizler" + }, + "loopButton": { + "label": "Tekrarlama düğmesi", + "title": "İzlediğiniz videoyu döngüye almak için özellik menüsüne bir düğme ekler" + }, + "maximizePlayerButton": { + "label": "Oynatıcıyı tam ekran yapma düğmesini etkinleştir", + "title": "Oynatıcıyı büyütmek için özellik menüsüne bir düğme ekler" + }, + "openTranscriptButton": { + "label": "Not dökümü düğmesini gizle", + "title": "İzlediğiniz videonun metnini açmak için özellik menüsüne bir düğme ekler" + }, + "openYouTubeSettingsOnHover": { + "label": "Fare ile üzerine gelerek Youtube ayarlarını açın", + "title": "Ayarlar düğmesinin üzerine gelindiğinde YouTube ayarlar menüsünü açar" + }, + "pauseBackgroundPlayers": { + "label": "Arka plan oynatıcılarını duraklat", + "title": "Ön plan sekmesinde yeni bir oynatıcı başlattığınızda arka plan sekmelerindeki video oynatıcıları duraklatır" + }, + "playlistRemover": { + "label": "Hide playlists from homepage", + "title": "Get rid of playlists from homepage" + }, + "remainingTime": { + "label": "Kalan süre", + "title": "İzlediğiniz videonun kalan süresini gösterir" + }, + "rememberLastVolume": { + "label": "Son ses hacmini hatırla", + "title": "İzlediğiniz son videonun ses seviyesini hatırlar ve yeni bir video açtığınızda bu ses seviyesine ayarlar" + }, + "removeRedirect": { + "label": "YouTube yönlendirme bağlantılarını kaldır", + "title": "Yönlendirme uyarı diyaloğunu atlayarak YouTube yönlendirmesini gerçek URL'lerle değiştirir" + }, + "restoreFullscreenScrolling": { + "label": "Restore fullscreen scrolling", + "title": "Restores scrolling in fullscreen mode" + }, + "shareShortener": { + "label": "YouTube video paylaşım bağlantısını kısalt", + "title": "YouTube video paylaşım bağlantısını (youtu.be) si/feature parametrelerini çıkararak kısaltır" + }, + "shortsAutoScroll": { + "label": "Kısa videoya otomatik kaydır", + "title": "Bir sonraki kısa videoya otomatik kaydır" + }, + "skipContinueWatching": { + "label": "\"Video durdu. Hala orda mısın?\"ı Atla", + "title": "Video oynatmayı durduran boşta kalma iletişim kutusunu atlar" + } + }, + "title": "Çeşitli ayarlar" + }, + "onScreenDisplaySettings": { + "color": { + "label": "Renk", + "options": { + "blue": "Mavi", + "green": "Yeşil", + "orange": "Turuncu", + "pink": "Pembe", + "purple": "Mor", + "red": "Kırmızı", + "white": "Beyaz", + "yellow": "Sarı" + }, + "title": "Ekran göstergesinin rengini seçin" + }, + "hide": { + "label": "Gecikmeyi Gizle", + "title": "Ekran görüntüsünü otomatik olarak gizlemeden önce geçen süreyi milisaniye cinsinden belirtin" + }, + "opacity": { + "label": "Saydamlık", + "title": "Ekrandaki gösterimin saydamlığını ayarlayın" + }, + "padding": { + "label": "İç Boşluk", + "title": "Adjust the spacing around the On-Screen Display in pixels. This applies specifically to corner On-Screen Display." + }, + "position": { + "label": "Konum", + "options": { + "bottom_left": "Sol Alt", + "bottom_right": "Sağ Alt", + "center": "Orta", + "top_left": "Sol Üst", + "top_right": "Sağ Üst" + }, + "title": "Ekran görüntüleme konumunu seçin" + }, + "title": "Ekran Üstü Görüntüleme Ayarları", + "type": { + "label": "Tür", + "options": { + "circle": "Daire", + "line": "Satır", + "no_display": "Ekran yok", + "text": "Metin" + }, + "title": "Ekran görüntüleme türünü seçin" + } + }, + "playbackSpeed": { + "enable": { + "label": "Zorunlu oynatma hızını etkinleştir", + "title": "Video hızını aşağıda seçtiğiniz hıza ayarlar" + }, + "playbackSpeedButtons": { + "label": "Oynatma hızı ayarları", + "select": { + "label": "Oynatma düğmelerinin hızı", + "title": "Tıklama başına değiştirilecek hız miktarı" + }, + "title": "İzlediğiniz videonun oynatma hızını artırmak veya azaltmak için düğmeler ekler" + }, + "select": { + "label": "Oynatma hızı", + "title": "Video oynatma hızını ayarlar" + }, + "title": "Oynatma hızı ayarları" + }, + "playlistLength": { + "enable": { + "label": "Çalma listesinin uzunluk bilgilerini göster", + "title": "Oynatma listesinin toplam, izlenen ve ne kalan uzunluğunu gösterir." + }, + "title": "Oynatma listesi uzunluk ayarları", + "wayToGetLength": { + "select": { + "label": "Oynatma listesi uzunluğunu alma yöntemi", + "title": "Oynatma listesi uzunluk bilgisi alma yolu (Bir hata oluşursa API yöntemi HTML'e geri dönecek)" + } + }, + "wayToGetWatchTime": { + "select": { + "label": "İzlenme süresini alma yöntemi", + "options": { + "duration": "Video Uzunluğu", + "youtube": "Video İzlenme Süresi" + }, + "title": "İzlenen süreyi alma yolu (Video Uzunluğu türü yalnızca izleme sayfasında kullanılır)" + } + } + }, + "screenshotButton": { + "enable": { + "label": "Ekran görüntüsü tuşunu etkinleştir", + "title": "Videonun ekran görüntüsünü almak için oynatıcıya bir düğme ekler" + }, + "saveAs": { + "clipboard": "Pano", + "file": "Dosya" + }, + "selectFormat": { + "label": "Ekran görüntüsü formatı", + "title": "Ekran görüntüsünün kaydedileceği format" + }, + "selectSaveAs": { + "label": "Ekran görüntüsü kaydetme türü", + "title": "Ekran görüntüsü kaydetme türü" + }, + "title": "Ekran görüntüsü ayarları" + }, + "scrollWheelSpeedControl": { + "adjustmentSteps": { + "label": "Kaydırma başına hız değişimi", + "title": "Kaydırma başına hız değiştirmeyi ayarlar" + }, + "enable": { + "label": "Kaydırma tekerleği hız kontrolü", + "title": "Kaydırma tekerleği ile hız ayarını etkinleştirmek için değiştirici tuşlarından birine basın." + }, + "optionLabel": "{{KEY}} anahtarı", + "select": { + "label": "Düzenleyici anahtar", + "title": "Kullanılacak kısayol düğmesi" + }, + "title": "Kaydırma tekerleği için hız kontrolü ayarları" + }, + "scrollWheelVolumeControl": { + "adjustmentSteps": { + "label": "Her kaydırmada değiştirilecek ses düzeyi", + "title": "Her kaydırmada değiştirilecek ses düzeyini ayarlayın" + }, + "enable": { + "label": "Kaydırma tekerleği ile ses kontrolü", + "title": "İzlediğiniz videonun ses düzeyini kontrol etmek için kaydırma tekerleğini kullanmanızı sağlar" + }, + "holdModifierKey": { + "enable": { + "label": "Değiştirici tuşa basılı tutulduğunda", + "title": "Kaydırma tekerleği ile ses düzeyi ayarını etkinleştirmek için değiştirici tuşlardan birine basın" + }, + "optionLabel": "{{KEY}} anahtarı", + "select": { + "label": "Düzenleyici anahtar", + "title": "Kullanılacak kısayol düğmesi" + } + }, + "holdRightClick": { + "enable": { + "label": "Etkinleştirmek için sağ tuşa basılı tutun", + "title": "Kaydırma tekerleği ile ses kontrolünü etkinleştirmek için farenin sağ düğmesine basılı tutun" + } + }, + "title": "Kaydırma tekerleği ile ses seviyesi kontrolü ayarları" + }, + "settingSearch": { + "placeholder": "Bir ayar arayın" + }, + "videoHistory": { + "enable": { + "label": "İzlenen videoları takip edin", + "title": "İzlediğiniz videolarda en son nerede kaldığınızı takip eder ve oynatmaya oradan devam etmenizi sağlar" + }, + "resumeType": { + "select": { + "label": "Devam etme türü", + "options": { + "automatic": "Otomatik", + "prompt": "İpucu" + }, + "title": "Videoları nasıl devam ettirmek istediğinizi seçin" + } + }, + "title": "Video geçmişi ayarları" + }, + "volumeBoost": { + "boostAmount": { + "label": "Ses güçlendirme miktarı (dB)", + "title": "Ses güçlendirme miktarı" + }, + "enable": { + "label": "Ses güçlendirmeyi etkinleştir", + "title": "Ses güçlendirmeyi etkinleştir" + }, + "mode": { + "select": { + "label": "Ses güçlendirme modu", + "options": { + "global": "Genel", + "perVideo": "Video başına" + }, + "title": "Ses artırmanın nasıl uygulanacağını seçin. 'Video başına', özellik menüsünde her video için ayrı ayrı güçlendirmenin etkinleştirilmesine olanak tanır. 'Genel', ses artırma etkinleştirildiğinde tüm videolara güçlendirme uygular." + } + }, + "title": "Ses güçlendirme ayarları" + }, + "youtubeDataApiV3Key": { + "getApiKeyLinkText": "Buradan bir tane alabilirsiniz", + "input": { + "label": "API Anahtarı", + "title": "Youtube Veri API V3 anahtarınızı girin." + }, + "title": "YouTube API V3 Anahtarı" + }, + "youtubeDeepDark": { + "author": "Yazar", + "co-authors": "Ortak yazarlar", + "colors": { + "colorShadow": { + "label": "Gölge rengi", + "title": "Gölge rengi" + }, + "dimmerText": { + "label": "İkincil metin rengi", + "title": "İkincil metin rengi" + }, + "hoverBackground": { + "label": "Üzerine gelindiğindeki arka plan rengi", + "title": "Üzerine gelindiğindeki arka plan rengi" + }, + "mainBackground": { + "label": "Ana arka plan rengi", + "title": "Ana arka plan rengi" + }, + "mainColor": { + "label": "Vurgulama rengi", + "title": "Vurgulama rengi" + }, + "mainText": { + "label": "Ana metin rengi", + "title": "Ana metin için renk" + }, + "secondBackground": { + "label": "İkincil arka plan rengi", + "title": "İkincil arka plan rengi" + } + }, + "enable": { + "label": "Seçilen temayı etkinleştir", + "title": "Sayfa için seçilen temayı etkinleştirin" + }, + "select": { + "label": "Tema seç", + "title": "Sayfa için uygulanacak bir tema seçin" + }, + "title": "YouTube Deep Dark Ayarları" + } + } + } +} \ No newline at end of file diff --git a/public/locales/uk-UA.json b/public/locales/uk-UA.json index 5534dca11..b40aedf8b 100644 --- a/public/locales/uk-UA.json +++ b/public/locales/uk-UA.json @@ -134,7 +134,6 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "deepDarkCustomTheme": "Set theme to 'Custom' to configure this option.", "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." } }, diff --git a/public/locales/vi-VN.json b/public/locales/vi-VN.json index d6ca73c13..31fdd9191 100644 --- a/public/locales/vi-VN.json +++ b/public/locales/vi-VN.json @@ -134,7 +134,6 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "deepDarkCustomTheme": "Set theme to 'Custom' to configure this option.", "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." } }, diff --git a/public/locales/zh-CN.json b/public/locales/zh-CN.json index 90912e117..25213c9c9 100644 --- a/public/locales/zh-CN.json +++ b/public/locales/zh-CN.json @@ -1,643 +1,642 @@ { - "langCode": "zh-CN", - "langName": "中文 (简体)", - "messages": { - "resumingVideo": "恢复视频播放时刻于 {{VIDEO_TIME}}", - "settingVolume": "设置音量增强至 {{VOLUME_BOOST_AMOUNT}}" - }, - "pages": { - "content": { - "features": { - "copyTimestampUrlButton": { - "button": { - "copied": "复制成功!", - "label": "复制带有时间戳的视频 URL" - } - }, - "featureMenu": { - "button": { - "label": "功能菜单" - } - }, - "forwardRewindButtons": { - "buttons": { - "forwardButton": { - "label": "向前快进 {{TIME}}" - }, - "rewindButton": { - "label": "向后快退 {{TIME}}" - } - } - }, - "hideEndScreenCardsButton": { - "button": { - "label": "隐藏结束界面卡片", - "toggle": { - "off": "显示结束界面卡片", - "on": "隐藏结束界面卡片" - } - } - }, - "loopButton": { - "button": { - "label": "循环播放", - "toggle": { - "off": "取消循环", - "on": "启用循环" - } - } - }, - "maximizePlayerButton": { - "button": { - "label": "最大化", - "toggle": { - "off": "最大化关闭", - "on": "最大化开启" - } - } - }, - "openTranscriptButton": { - "button": { - "label": "打开转写文稿" - } - }, - "playbackSpeedButtons": { - "buttons": { - "decreasePlaybackSpeedButton": { - "label": "降低播放速度至 {{SPEED}}" - }, - "increasePlaybackSpeedButton": { - "label": "增加播放速度至 {{SPEED}}" - } - }, - "decreaseLimit": "不能继续降低({{SPEED}})", - "increaseLimit": "不能继续增加({{SPEED}})" - }, - "playlistLength": { - "title": "如果某些视频被隐藏,或者您没有加载足够的视频来获取全部长度,总长度可能不准确。" - }, - "screenshotButton": { - "button": { - "label": "屏幕截图" - }, - "copiedToClipboard": "截图已复制到剪贴板" - }, - "videoHistory": { - "resumeButton": "继续播放", - "resumePrompt": { - "close": "关" - } - }, - "volumeBoostButton": { - "button": { - "label": "音量增强", - "toggle": { - "off": "关闭音量增强", - "on": "开启音量增强" - } - } - } - } - }, - "options": { - "notifications": { - "error": { - "scrollWheelHoldModifierKey": { - "sameKey": { - "speedControl": "滚轮控制播放速度键位与控制音量冲突。", - "volumeControl": "滚轮控制音量键位与控制播放速度冲突。" - } - } - }, - "info": { - "reset": "所有选项已重置为默认值。\n现在您可以通过单击“确认”按钮保存更改,或通过关闭此页面或忽略此通知放弃更改。" - }, - "success": { - "saved": "选项已保存。" - } - } - } - }, - "settings": { - "clearData": { - "allDataDeleted": "所有数据已删除。", - "confirmAlert": "这将删除所有与选项相关的扩展数据。是否继续?" - }, - "optionDisabled": { - "either": { - "label": "启用 {{OPTIONS}} 以配置此选项", - "separator": " 或 " - }, - "plural": { - "label": "启用 {{OPTIONS}} 以配置此选项", - "separator": " 和 " - }, - "singular": "启用 '{{OPTION}}' 以配置此选项", - "specificOption": { - "deepDarkCustomTheme": "将主题设置为“自定义”以配置此选项。", - "featureMenu": "配置至少一个按钮放置在功能菜单中以配置此选项。" - } - }, - "scrollForMoreSettings": "滚动以查看更多设置", - "sections": { - "automaticQuality": { - "enable": { - "label": "自动质量调整", - "title": "自动调整视频质量到所选等级。" - }, - "fallbackQualityStrategy": { - "select": { - "label": "质量回退策略", - "options": { - "higher": "升高", - "lower": "降低" - }, - "title": "当所选质量不可用时使用的策略" - } - }, - "select": { - "label": "播放质量", - "title": "将视频质量设为" - }, - "title": "自动画质设置" - }, - "bottomButtons": { - "clear": { - "title": "清除此扩展存储在您机器上的所有数据", - "value": "清除数据" - }, - "confirm": { - "title": "确认重置设置", - "value": "确认" - }, - "openTab": { - "title": "在新标签中打开扩展设置" - }, - "reset": { - "title": "重置所有设置为默认设置,点击确认按钮以保存更改", - "value": "重新开始" - } - }, - "buttonPlacement": { - "select": { - "buttonNames": { - "copyTimestampUrlButton": "复制带有时间戳的视频 URL 按钮", - "decreasePlaybackSpeedButton": "降低速度按钮", - "forwardButton": "快进按钮", - "hideEndScreenCardsButton": "隐藏结束界面卡片按钮", - "increasePlaybackSpeedButton": "增加速度按钮", - "loopButton": "循环按钮", - "maximizePlayerButton": "最大化按钮", - "openTranscriptButton": "转写文稿按钮", - "rewindButton": "快退按钮", - "screenshotButton": "屏幕截图按钮", - "volumeBoostButton": "音量增强按钮" - }, - "options": { - "below_player": { - "placement": "位于播放器控制按键下方", - "value": "位于播放器下方" - }, - "feature_menu": { - "placement": "位于功能菜单内", - "value": "功能菜单" - }, - "player_controls_left": { - "placement": "位于播放器控制按键左侧", - "value": "控件居左" - }, - "player_controls_right": { - "placement": "位于播放器控制按键右侧", - "value": "控件居右" - } - }, - "title": "把 {{BUTTON_NAME}} 按钮放在 {{PLACEMENT}}" - }, - "title": "按钮位置设置" - }, - "customCSS": { - "editor": { - "collapse": "折叠编辑器", - "expand": "展开编辑器", - "noProblems": "未发现问题" - }, - "enable": { - "label": "启用自定义 CSS", - "title": "启用自定义 CSS 以应用到页面" - }, - "title": "自定义 CSS 设置" - }, - "featureMenu": { - "openType": { - "select": { - "label": "菜单激活方式", - "options": { - "click": "点击", - "hover": "悬停" - }, - "title": "设置打开功能菜单的方式" - }, - "title": "功能菜单设置" - } - }, - "forwardRewindButtons": { - "enable": { - "label": "启用快进/快退按钮", - "title": "给视频播放器添加快进/快退按钮" - }, - "time": { - "label": "快进/快退时间", - "title": "快进/快退视频的时间长度" - }, - "title": "快进/快退按钮设置" - }, - "importExportSettings": { - "exportButton": { - "success": "导出配置成功", - "title": "导出设置到 JSON 文件", - "value": "导出设置" - }, - "importButton": { - "error": { - "unknown": "导入设置时出错。请检查文件格式。\n发生未知错误。", - "validation": "导入设置出错。请检查文件格式。\n{{ERROR_MESSAGE}}" - }, - "success": "设置导入成功", - "title": "从 JSON 文件导入设置", - "value": "导入设置" - } - }, - "language": { - "select": { - "label": "语言", - "title": "用于扩展的语言" - }, - "title": "语言" - }, - "miscellaneous": { - "features": { - "automaticTheaterMode": { - "label": "自动启用剧场模式", - "title": "当视频打开时,自动启用剧场模式" - }, - "automaticallyDisableAmbientMode": { - "label": "自动禁用氛围模式", - "title": "载入视频时自动禁用氛围模式" - }, - "automaticallyDisableClosedCaptions": { - "label": "自动禁用隐藏式字幕", - "title": "载入视频时自动禁用隐藏式字幕" - }, - "copyTimestampUrlButton": { - "label": "复制带有时间戳的视频 URL 按钮", - "title": "复制带有时间戳的视频 URL (?t=123)" - }, - "defaultToOriginalAudioTrack": { - "label": "默认设置为原始音轨", - "title": "总是默认原始音轨" - }, - "hideArtificialIntelligenceSummary": { - "label": "隐藏 AI 摘要", - "title": "隐藏视频下方的人工智能摘要" - }, - "hideEndScreenCards": { - "label": "隐藏结束界面卡片", - "title": "隐藏视频末尾的卡片" - }, - "hideEndScreenCardsButton": { - "label": "隐藏结束界面卡片按钮", - "title": "添加按钮以显示/隐藏视频末尾的卡片" - }, - "hideLiveStreamChat": { - "label": "隐藏直播聊天", - "title": "隐藏直播聊天" - }, - "hideOfficialArtistVideosFromHomePage": { - "label": "隐藏音乐人官方视频", - "title": "从主页上隐藏来自音乐人官方频道的视频" - }, - "hidePaidPromotionBanner": { - "label": "隐藏付费推广横幅", - "title": "隐藏当您观看带有付费促销的视频时出现的横幅广告" - }, - "hidePlayables": { - "label": "隐藏可播放内容", - "title": "隐藏所有可播放内容" - }, - "hideScrollbar": { - "label": "启用隐藏滚动条", - "title": "隐藏页面滚动条" - }, - "hideShorts": { - "label": "隐藏短视频", - "title": "隐藏所有短视频" - }, - "hideTranslateComment": { - "label": "隐藏翻译评论按钮", - "title": "隐藏评论下方的“翻译至当前语言”按钮" - }, - "loopButton": { - "label": "循环按钮", - "title": "在功能菜单中添加一个按钮来循环你正在观看的视频" - }, - "maximizePlayerButton": { - "label": "最大化播放器按钮", - "title": "在功能菜单中添加一个按钮来最大化播放器" - }, - "openTranscriptButton": { - "label": "转写文稿按钮", - "title": "在功能菜单中添加一个按钮来循环你正在观看的视频" - }, - "openYouTubeSettingsOnHover": { - "label": "悬停时打开 YouTube 设置", - "title": "当您悬停在设置按钮上时打开 YouTube 设置菜单" - }, - "pauseBackgroundPlayers": { - "label": "暂停后台播放", - "title": "当您在前台标签中启用一个新播放器时,暂停后台标签中的视频播放器" - }, - "playlistRemover": { - "label": "从主页隐藏播放列表", - "title": "从主页去除播放列表" - }, - "remainingTime": { - "label": "剩余时间", - "title": "显示您观看的视频的剩余时间" - }, - "rememberLastVolume": { - "label": "记住最后一个音量", - "title": "记住最后一个视频的音量并在打开新视频时设置" - }, - "removeRedirect": { - "label": "屏蔽YouTube重定向链接", - "title": "用真实链接替换YouTube重定向,并跳过重定向警告" - }, - "restoreFullscreenScrolling": { - "label": "恢复全屏滚动", - "title": "在全屏模式下恢复滚动" - }, - "shareShortener": { - "label": "缩短YouTube视频分享链接", - "title": "分享Youtube视频(youtu.be)时,删除si/feature 参数以缩短链接" - }, - "shortsAutoScroll": { - "label": "短视频自动下滑", - "title": "短视频播完后,自动下滑播放下一个" - }, - "skipContinueWatching": { - "label": "跳过\"视频已暂停。继续观看吗?\"", - "title": "跳过暂停视频播放的闲置对话框" - } - }, - "title": "其他设置" - }, - "onScreenDisplaySettings": { - "color": { - "label": "颜色", - "options": { - "blue": "蓝色", - "green": "绿色", - "orange": "橙色", - "pink": "粉色", - "purple": "紫色", - "red": "红色", - "white": "白色", - "yellow": "黄色" - }, - "title": "选择屏幕提示文本颜色" - }, - "hide": { - "label": "隐藏延时", - "title": "指定时间,以毫秒计,然后自动隐藏屏幕显示" - }, - "opacity": { - "label": "透明度", - "title": "调整屏幕提示文本的透明度" - }, - "padding": { - "label": "内边距", - "title": "调整屏幕提示周围以像素为单位的间距。主要适用于角落的屏幕提示。" - }, - "position": { - "label": "位置", - "options": { - "bottom_left": "左下", - "bottom_right": "右下", - "center": "居中", - "top_left": "左上", - "top_right": "右上" - }, - "title": "选择屏幕提示文本颜色" - }, - "title": "屏幕提示信息设置", - "type": { - "label": "类型", - "options": { - "circle": "圆形图标", - "line": "直线", - "no_display": "无显示", - "text": "文本" - }, - "title": "选择屏幕提示文本颜色" - } - }, - "playbackSpeed": { - "enable": { - "label": "强制播放速度", - "title": "将视频速度设置为您在下面选择的内容" - }, - "playbackSpeedButtons": { - "label": "播放速度按钮", - "select": { - "label": "播放按钮的速度", - "title": "每次点击要更改的速度量" - }, - "title": "添加按钮以增加或降低您观看的视频的播放速度" - }, - "select": { - "label": "播放速度", - "title": "将视频播放速度设为" - }, - "title": "播放速度设置" - }, - "playlistLength": { - "enable": { - "label": "显示播放列表长度信息", - "title": "显示播放列表的总长度,已观看多少,以及还剩多少。" - }, - "title": "播放列表长度设置", - "wayToGetLength": { - "select": { - "label": "获取播放列表长度的方法", - "title": "获取播放列表长度信息的方式 (如果发生错误,API 方法将回退到 HTML)" - } - }, - "wayToGetWatchTime": { - "select": { - "label": "获取已观看时间的方法", - "options": { - "duration": "视频长度", - "youtube": "视频观看时间" - }, - "title": "获取已观看时间长度的方法 (“视频长度”方法仅会在观看页面使用)" - } - } - }, - "screenshotButton": { - "enable": { - "label": "屏幕截图按钮", - "title": "向播放器添加一个按钮以拍摄视频的截图" - }, - "saveAs": { - "clipboard": "剪贴板", - "file": "文件" - }, - "selectFormat": { - "label": "截图格式", - "title": "保存屏幕截图的格式" - }, - "selectSaveAs": { - "label": "屏幕截图保存类型", - "title": "屏幕截图保存类型" - }, - "title": "屏幕截图选项" - }, - "scrollWheelSpeedControl": { - "adjustmentSteps": { - "label": "每轮滚动音量", - "title": "调整每轮滚动的音量变化" - }, - "enable": { - "label": "滚轮控制播放速度设置", - "title": "按下控制键时启用滚轮音量调整" - }, - "optionLabel": "{{KEY}} 键", - "select": { - "label": "控制键", - "title": "启用功能时按住的控制键" - }, - "title": "滚轮控制播放速度设置" - }, - "scrollWheelVolumeControl": { - "adjustmentSteps": { - "label": "每轮滚动音量", - "title": "调整每轮滚动的音量变化" - }, - "enable": { - "label": "滚轮控制音量", - "title": "让您使用滚轮来控制您正在观看的视频音量" - }, - "holdModifierKey": { - "enable": { - "label": "在按住控制键时启用功能", - "title": "按下控制键时启用滚轮音量调整" - }, - "optionLabel": "{{KEY}} 键", - "select": { - "label": "控制键", - "title": "启用功能时按住的控制键" - } - }, - "holdRightClick": { - "enable": { - "label": "按住右键时启用", - "title": "按住右键以启用滚轮音量控制" - } - }, - "title": "滚轮控制音量设置" - }, - "settingSearch": { - "placeholder": "搜索设置" - }, - "videoHistory": { - "enable": { - "label": "记录已观看视频", - "title": "记录您关闭视频的进度并在下次播放时恢复" - }, - "resumeType": { - "select": { - "label": "进度恢复方式", - "options": { - "automatic": "自动", - "prompt": "提示" - }, - "title": "选择恢复视频播放进度的方式" - } - }, - "title": "视频历史记录设置" - }, - "volumeBoost": { - "boostAmount": { - "label": "音量提升量(分贝)", - "title": "音量提升量(分贝)" - }, - "enable": { - "label": "音量增强", - "title": "启用音量增强" - }, - "mode": { - "select": { - "label": "音量增强模式", - "options": { - "global": "全局统一", - "perVideo": "分别记忆" - }, - "title": "选择音量增强生效的方式。“分别记忆”为每个视频记住各自的设置。“全局”使音量增强功能开启时,对所有视频采用同一设置。" - } - }, - "title": "音量增强设置" - }, - "youtubeDataApiV3Key": { - "getApiKeyLinkText": "您可以从这里获取一个", - "input": { - "label": "API 密钥", - "title": "输入您的 Youtube 数据 API V3 密钥。" - }, - "title": "YouTube API V3 密钥" - }, - "youtubeDeepDark": { - "author": "作者", - "co-authors": "合作作者", - "colors": { - "colorShadow": { - "label": "阴影颜色", - "title": "阴影颜色" - }, - "dimmerText": { - "label": "次要文本颜色", - "title": "为次要文本使用的颜色" - }, - "hoverBackground": { - "label": "悬停背景颜色", - "title": "为悬停背景使用的颜色" - }, - "mainBackground": { - "label": "主要背景颜色", - "title": "为主要背景使用的颜色" - }, - "mainColor": { - "label": "强调颜色", - "title": "为强调使用的颜色" - }, - "mainText": { - "label": "主要文本颜色", - "title": "为主要文本使用的颜色" - }, - "secondBackground": { - "label": "次要背景颜色", - "title": "为次要背景使用的颜色" - } - }, - "enable": { - "label": "启用所选主题", - "title": "在页面上应用所选主题" - }, - "select": { - "label": "选择主题", - "title": "选择要应用到页面的主题" - }, - "title": "YouTube 暗黑模式设置" - } - } - } -} + "langCode": "zh-CN", + "langName": "中文 (简体)", + "messages": { + "resumingVideo": "恢复视频播放时刻于 {{VIDEO_TIME}}", + "settingVolume": "设置音量增强至 {{VOLUME_BOOST_AMOUNT}}" + }, + "pages": { + "content": { + "features": { + "copyTimestampUrlButton": { + "button": { + "copied": "复制成功!", + "label": "复制带有时间戳的视频 URL" + } + }, + "featureMenu": { + "button": { + "label": "功能菜单" + } + }, + "forwardRewindButtons": { + "buttons": { + "forwardButton": { + "label": "向前快进 {{TIME}}" + }, + "rewindButton": { + "label": "向后快退 {{TIME}}" + } + } + }, + "hideEndScreenCardsButton": { + "button": { + "label": "隐藏结束界面卡片", + "toggle": { + "off": "显示结束界面卡片", + "on": "隐藏结束界面卡片" + } + } + }, + "loopButton": { + "button": { + "label": "循环播放", + "toggle": { + "off": "取消循环", + "on": "启用循环" + } + } + }, + "maximizePlayerButton": { + "button": { + "label": "最大化", + "toggle": { + "off": "最大化关闭", + "on": "最大化开启" + } + } + }, + "openTranscriptButton": { + "button": { + "label": "打开转写文稿" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "降低播放速度至 {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "增加播放速度至 {{SPEED}}" + } + }, + "decreaseLimit": "不能继续降低({{SPEED}})", + "increaseLimit": "不能继续增加({{SPEED}})" + }, + "playlistLength": { + "title": "如果某些视频被隐藏,或者您没有加载足够的视频来获取全部长度,总长度可能不准确。" + }, + "screenshotButton": { + "button": { + "label": "屏幕截图" + }, + "copiedToClipboard": "截图已复制到剪贴板" + }, + "videoHistory": { + "resumeButton": "继续播放", + "resumePrompt": { + "close": "关" + } + }, + "volumeBoostButton": { + "button": { + "label": "音量增强", + "toggle": { + "off": "关闭音量增强", + "on": "开启音量增强" + } + } + } + } + }, + "options": { + "notifications": { + "error": { + "scrollWheelHoldModifierKey": { + "sameKey": { + "speedControl": "滚轮控制播放速度键位与控制音量冲突。", + "volumeControl": "滚轮控制音量键位与控制播放速度冲突。" + } + } + }, + "info": { + "reset": "所有选项已重置为默认值。\n现在您可以通过单击“确认”按钮保存更改,或通过关闭此页面或忽略此通知放弃更改。" + }, + "success": { + "saved": "选项已保存。" + } + } + } + }, + "settings": { + "clearData": { + "allDataDeleted": "所有数据已删除。", + "confirmAlert": "这将删除所有与选项相关的扩展数据。是否继续?" + }, + "optionDisabled": { + "either": { + "label": "启用 {{OPTIONS}} 以配置此选项", + "separator": " 或 " + }, + "plural": { + "label": "启用 {{OPTIONS}} 以配置此选项", + "separator": " 和 " + }, + "singular": "启用 '{{OPTION}}' 以配置此选项", + "specificOption": { + "featureMenu": "配置至少一个按钮放置在功能菜单中以配置此选项。" + } + }, + "scrollForMoreSettings": "滚动以查看更多设置", + "sections": { + "automaticQuality": { + "enable": { + "label": "自动质量调整", + "title": "自动调整视频质量到所选等级。" + }, + "fallbackQualityStrategy": { + "select": { + "label": "质量回退策略", + "options": { + "higher": "升高", + "lower": "降低" + }, + "title": "当所选质量不可用时使用的策略" + } + }, + "select": { + "label": "播放质量", + "title": "将视频质量设为" + }, + "title": "自动画质设置" + }, + "bottomButtons": { + "clear": { + "title": "清除此扩展存储在您机器上的所有数据", + "value": "清除数据" + }, + "confirm": { + "title": "确认重置设置", + "value": "确认" + }, + "openTab": { + "title": "在新标签中打开扩展设置" + }, + "reset": { + "title": "重置所有设置为默认设置,点击确认按钮以保存更改", + "value": "重新开始" + } + }, + "buttonPlacement": { + "select": { + "buttonNames": { + "copyTimestampUrlButton": "复制带有时间戳的视频 URL 按钮", + "decreasePlaybackSpeedButton": "降低速度按钮", + "forwardButton": "快进按钮", + "hideEndScreenCardsButton": "隐藏结束界面卡片按钮", + "increasePlaybackSpeedButton": "增加速度按钮", + "loopButton": "循环按钮", + "maximizePlayerButton": "最大化按钮", + "openTranscriptButton": "转写文稿按钮", + "rewindButton": "快退按钮", + "screenshotButton": "屏幕截图按钮", + "volumeBoostButton": "音量增强按钮" + }, + "options": { + "below_player": { + "placement": "位于播放器控制按键下方", + "value": "位于播放器下方" + }, + "feature_menu": { + "placement": "位于功能菜单内", + "value": "功能菜单" + }, + "player_controls_left": { + "placement": "位于播放器控制按键左侧", + "value": "控件居左" + }, + "player_controls_right": { + "placement": "位于播放器控制按键右侧", + "value": "控件居右" + } + }, + "title": "把 {{BUTTON_NAME}} 按钮放在 {{PLACEMENT}}" + }, + "title": "按钮位置设置" + }, + "customCSS": { + "editor": { + "collapse": "折叠编辑器", + "expand": "展开编辑器", + "noProblems": "未发现问题" + }, + "enable": { + "label": "启用自定义 CSS", + "title": "启用自定义 CSS 以应用到页面" + }, + "title": "自定义 CSS 设置" + }, + "featureMenu": { + "openType": { + "select": { + "label": "菜单激活方式", + "options": { + "click": "点击", + "hover": "悬停" + }, + "title": "设置打开功能菜单的方式" + }, + "title": "功能菜单设置" + } + }, + "forwardRewindButtons": { + "enable": { + "label": "启用快进/快退按钮", + "title": "给视频播放器添加快进/快退按钮" + }, + "time": { + "label": "快进/快退时间", + "title": "快进/快退视频的时间长度" + }, + "title": "快进/快退按钮设置" + }, + "importExportSettings": { + "exportButton": { + "success": "导出配置成功", + "title": "导出设置到 JSON 文件", + "value": "导出设置" + }, + "importButton": { + "error": { + "unknown": "导入设置时出错。请检查文件格式。\n发生未知错误。", + "validation": "导入设置出错。请检查文件格式。\n{{ERROR_MESSAGE}}" + }, + "success": "设置导入成功", + "title": "从 JSON 文件导入设置", + "value": "导入设置" + } + }, + "language": { + "select": { + "label": "语言", + "title": "用于扩展的语言" + }, + "title": "语言" + }, + "miscellaneous": { + "features": { + "automaticTheaterMode": { + "label": "自动启用剧场模式", + "title": "当视频打开时,自动启用剧场模式" + }, + "automaticallyDisableAmbientMode": { + "label": "自动禁用氛围模式", + "title": "载入视频时自动禁用氛围模式" + }, + "automaticallyDisableClosedCaptions": { + "label": "自动禁用隐藏式字幕", + "title": "载入视频时自动禁用隐藏式字幕" + }, + "copyTimestampUrlButton": { + "label": "复制带有时间戳的视频 URL 按钮", + "title": "复制带有时间戳的视频 URL (?t=123)" + }, + "defaultToOriginalAudioTrack": { + "label": "默认设置为原始音轨", + "title": "总是默认原始音轨" + }, + "hideArtificialIntelligenceSummary": { + "label": "隐藏 AI 摘要", + "title": "隐藏视频下方的人工智能摘要" + }, + "hideEndScreenCards": { + "label": "隐藏结束界面卡片", + "title": "隐藏视频末尾的卡片" + }, + "hideEndScreenCardsButton": { + "label": "隐藏结束界面卡片按钮", + "title": "添加按钮以显示/隐藏视频末尾的卡片" + }, + "hideLiveStreamChat": { + "label": "隐藏直播聊天", + "title": "隐藏直播聊天" + }, + "hideOfficialArtistVideosFromHomePage": { + "label": "隐藏音乐人官方视频", + "title": "从主页上隐藏来自音乐人官方频道的视频" + }, + "hidePaidPromotionBanner": { + "label": "隐藏付费推广横幅", + "title": "隐藏当您观看带有付费促销的视频时出现的横幅广告" + }, + "hidePlayables": { + "label": "隐藏可播放内容", + "title": "隐藏所有可播放内容" + }, + "hideScrollbar": { + "label": "启用隐藏滚动条", + "title": "隐藏页面滚动条" + }, + "hideShorts": { + "label": "隐藏短视频", + "title": "隐藏所有短视频" + }, + "hideTranslateComment": { + "label": "隐藏翻译评论按钮", + "title": "隐藏评论下方的“翻译至当前语言”按钮" + }, + "loopButton": { + "label": "循环按钮", + "title": "在功能菜单中添加一个按钮来循环你正在观看的视频" + }, + "maximizePlayerButton": { + "label": "最大化播放器按钮", + "title": "在功能菜单中添加一个按钮来最大化播放器" + }, + "openTranscriptButton": { + "label": "转写文稿按钮", + "title": "在功能菜单中添加一个按钮来循环你正在观看的视频" + }, + "openYouTubeSettingsOnHover": { + "label": "悬停时打开 YouTube 设置", + "title": "当您悬停在设置按钮上时打开 YouTube 设置菜单" + }, + "pauseBackgroundPlayers": { + "label": "暂停后台播放", + "title": "当您在前台标签中启用一个新播放器时,暂停后台标签中的视频播放器" + }, + "playlistRemover": { + "label": "从主页隐藏播放列表", + "title": "从主页去除播放列表" + }, + "remainingTime": { + "label": "剩余时间", + "title": "显示您观看的视频的剩余时间" + }, + "rememberLastVolume": { + "label": "记住最后一个音量", + "title": "记住最后一个视频的音量并在打开新视频时设置" + }, + "removeRedirect": { + "label": "屏蔽YouTube重定向链接", + "title": "用真实链接替换YouTube重定向,并跳过重定向警告" + }, + "restoreFullscreenScrolling": { + "label": "恢复全屏滚动", + "title": "在全屏模式下恢复滚动" + }, + "shareShortener": { + "label": "缩短YouTube视频分享链接", + "title": "分享Youtube视频(youtu.be)时,删除si/feature 参数以缩短链接" + }, + "shortsAutoScroll": { + "label": "短视频自动下滑", + "title": "短视频播完后,自动下滑播放下一个" + }, + "skipContinueWatching": { + "label": "跳过\"视频已暂停。继续观看吗?\"", + "title": "跳过暂停视频播放的闲置对话框" + } + }, + "title": "其他设置" + }, + "onScreenDisplaySettings": { + "color": { + "label": "颜色", + "options": { + "blue": "蓝色", + "green": "绿色", + "orange": "橙色", + "pink": "粉色", + "purple": "紫色", + "red": "红色", + "white": "白色", + "yellow": "黄色" + }, + "title": "选择屏幕提示文本颜色" + }, + "hide": { + "label": "隐藏延时", + "title": "指定时间,以毫秒计,然后自动隐藏屏幕显示" + }, + "opacity": { + "label": "透明度", + "title": "调整屏幕提示文本的透明度" + }, + "padding": { + "label": "内边距", + "title": "调整屏幕提示周围以像素为单位的间距。主要适用于角落的屏幕提示。" + }, + "position": { + "label": "位置", + "options": { + "bottom_left": "左下", + "bottom_right": "右下", + "center": "居中", + "top_left": "左上", + "top_right": "右上" + }, + "title": "选择屏幕提示文本颜色" + }, + "title": "屏幕提示信息设置", + "type": { + "label": "类型", + "options": { + "circle": "圆形图标", + "line": "直线", + "no_display": "无显示", + "text": "文本" + }, + "title": "选择屏幕提示文本颜色" + } + }, + "playbackSpeed": { + "enable": { + "label": "强制播放速度", + "title": "将视频速度设置为您在下面选择的内容" + }, + "playbackSpeedButtons": { + "label": "播放速度按钮", + "select": { + "label": "播放按钮的速度", + "title": "每次点击要更改的速度量" + }, + "title": "添加按钮以增加或降低您观看的视频的播放速度" + }, + "select": { + "label": "播放速度", + "title": "将视频播放速度设为" + }, + "title": "播放速度设置" + }, + "playlistLength": { + "enable": { + "label": "显示播放列表长度信息", + "title": "显示播放列表的总长度,已观看多少,以及还剩多少。" + }, + "title": "播放列表长度设置", + "wayToGetLength": { + "select": { + "label": "获取播放列表长度的方法", + "title": "获取播放列表长度信息的方式 (如果发生错误,API 方法将回退到 HTML)" + } + }, + "wayToGetWatchTime": { + "select": { + "label": "获取已观看时间的方法", + "options": { + "duration": "视频长度", + "youtube": "视频观看时间" + }, + "title": "获取已观看时间长度的方法 (“视频长度”方法仅会在观看页面使用)" + } + } + }, + "screenshotButton": { + "enable": { + "label": "屏幕截图按钮", + "title": "向播放器添加一个按钮以拍摄视频的截图" + }, + "saveAs": { + "clipboard": "剪贴板", + "file": "文件" + }, + "selectFormat": { + "label": "截图格式", + "title": "保存屏幕截图的格式" + }, + "selectSaveAs": { + "label": "屏幕截图保存类型", + "title": "屏幕截图保存类型" + }, + "title": "屏幕截图选项" + }, + "scrollWheelSpeedControl": { + "adjustmentSteps": { + "label": "每轮滚动音量", + "title": "调整每轮滚动的音量变化" + }, + "enable": { + "label": "滚轮控制播放速度设置", + "title": "按下控制键时启用滚轮音量调整" + }, + "optionLabel": "{{KEY}} 键", + "select": { + "label": "控制键", + "title": "启用功能时按住的控制键" + }, + "title": "滚轮控制播放速度设置" + }, + "scrollWheelVolumeControl": { + "adjustmentSteps": { + "label": "每轮滚动音量", + "title": "调整每轮滚动的音量变化" + }, + "enable": { + "label": "滚轮控制音量", + "title": "让您使用滚轮来控制您正在观看的视频音量" + }, + "holdModifierKey": { + "enable": { + "label": "在按住控制键时启用功能", + "title": "按下控制键时启用滚轮音量调整" + }, + "optionLabel": "{{KEY}} 键", + "select": { + "label": "控制键", + "title": "启用功能时按住的控制键" + } + }, + "holdRightClick": { + "enable": { + "label": "按住右键时启用", + "title": "按住右键以启用滚轮音量控制" + } + }, + "title": "滚轮控制音量设置" + }, + "settingSearch": { + "placeholder": "搜索设置" + }, + "videoHistory": { + "enable": { + "label": "记录已观看视频", + "title": "记录您关闭视频的进度并在下次播放时恢复" + }, + "resumeType": { + "select": { + "label": "进度恢复方式", + "options": { + "automatic": "自动", + "prompt": "提示" + }, + "title": "选择恢复视频播放进度的方式" + } + }, + "title": "视频历史记录设置" + }, + "volumeBoost": { + "boostAmount": { + "label": "音量提升量(分贝)", + "title": "音量提升量(分贝)" + }, + "enable": { + "label": "音量增强", + "title": "启用音量增强" + }, + "mode": { + "select": { + "label": "音量增强模式", + "options": { + "global": "全局统一", + "perVideo": "分别记忆" + }, + "title": "选择音量增强生效的方式。“分别记忆”为每个视频记住各自的设置。“全局”使音量增强功能开启时,对所有视频采用同一设置。" + } + }, + "title": "音量增强设置" + }, + "youtubeDataApiV3Key": { + "getApiKeyLinkText": "您可以从这里获取一个", + "input": { + "label": "API 密钥", + "title": "输入您的 Youtube 数据 API V3 密钥。" + }, + "title": "YouTube API V3 密钥" + }, + "youtubeDeepDark": { + "author": "作者", + "co-authors": "合作作者", + "colors": { + "colorShadow": { + "label": "阴影颜色", + "title": "阴影颜色" + }, + "dimmerText": { + "label": "次要文本颜色", + "title": "为次要文本使用的颜色" + }, + "hoverBackground": { + "label": "悬停背景颜色", + "title": "为悬停背景使用的颜色" + }, + "mainBackground": { + "label": "主要背景颜色", + "title": "为主要背景使用的颜色" + }, + "mainColor": { + "label": "强调颜色", + "title": "为强调使用的颜色" + }, + "mainText": { + "label": "主要文本颜色", + "title": "为主要文本使用的颜色" + }, + "secondBackground": { + "label": "次要背景颜色", + "title": "为次要背景使用的颜色" + } + }, + "enable": { + "label": "启用所选主题", + "title": "在页面上应用所选主题" + }, + "select": { + "label": "选择主题", + "title": "选择要应用到页面的主题" + }, + "title": "YouTube 暗黑模式设置" + } + } + } +} \ No newline at end of file diff --git a/public/locales/zh-TW.json b/public/locales/zh-TW.json index 6a0c00789..1351d70ee 100644 --- a/public/locales/zh-TW.json +++ b/public/locales/zh-TW.json @@ -134,7 +134,6 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "deepDarkCustomTheme": "Set theme to 'Custom' to configure this option.", "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." } }, diff --git a/src/components/Settings/Settings.tsx b/src/components/Settings/Settings.tsx index cf88db174..cfcd18524 100644 --- a/src/components/Settings/Settings.tsx +++ b/src/components/Settings/Settings.tsx @@ -437,17 +437,10 @@ export default function Settings() { settings.enable_scroll_wheel_volume_control?.toString() !== "true" && settings.enable_scroll_wheel_speed_control?.toString() !== "true"; const isDeepDarkThemeDisabled = settings.enable_deep_dark_theme?.toString() !== "true"; const isDeepDarkThemeCustom = settings.deep_dark_preset === "Custom"; - const isDeepDarkThemeColorPickerDisabled = isDeepDarkThemeDisabled || (!isDeepDarkThemeDisabled && !isDeepDarkThemeCustom); - const deepDarkThemeColorPickerParentSetting = ( - (isDeepDarkThemeDisabled && !isDeepDarkThemeCustom) || (isDeepDarkThemeDisabled && isDeepDarkThemeCustom) ? - { - type: "singular", - value: "settings.sections.youtubeDeepDark.enable.label" - } - : { - type: "specificOption", - value: "settings.optionDisabled.specificOption.deepDarkCustomTheme" - }) satisfies parentSetting; + const deepDarkThemeColorPickerParentSetting = { + type: "singular", + value: "settings.sections.youtubeDeepDark.enable.label" + } satisfies parentSetting; const osdParentSetting = { type: "either", value: ["settings.sections.scrollWheelVolumeControl.enable.label", "settings.sections.scrollWheelSpeedControl.enable.label"] @@ -1244,69 +1237,73 @@ export default function Settings() { title={t("settings.sections.youtubeDeepDark.select.title")} type="select" /> - - - - - - - + {isDeepDarkThemeCustom && ( + <> + + + + + + + + + )} From 752dedffe3214663fb1638c035deaf18ae8da18a Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Thu, 9 Oct 2025 00:13:39 -0400 Subject: [PATCH 19/70] chore: format --- public/contentStyle.css | 2 +- public/locales/cs-CZ.json | 1282 ++++++++--------- public/locales/es-ES.json | 1282 ++++++++--------- public/locales/he-IL.json | 1282 ++++++++--------- public/locales/hi-IN.json | 1282 ++++++++--------- public/locales/ko-KR.json | 1282 ++++++++--------- public/locales/ru-RU.json | 1282 ++++++++--------- public/locales/sv-SE.json | 1282 ++++++++--------- public/locales/tr-TR.json | 1282 ++++++++--------- public/locales/zh-CN.json | 1282 ++++++++--------- src/features/hidePlayables/index.css | 2 +- src/features/hideShorts/index.css | 2 +- .../restoreFullscreenScrolling/index.css | 4 +- 13 files changed, 5774 insertions(+), 5774 deletions(-) diff --git a/public/contentStyle.css b/public/contentStyle.css index 22073d1ef..693e5bb7c 100644 --- a/public/contentStyle.css +++ b/public/contentStyle.css @@ -63,4 +63,4 @@ body.no-scroll .yte-button-tooltip { .ytp-right-controls { display: flex !important; -} \ No newline at end of file +} diff --git a/public/locales/cs-CZ.json b/public/locales/cs-CZ.json index c53e6e98d..f2b932662 100644 --- a/public/locales/cs-CZ.json +++ b/public/locales/cs-CZ.json @@ -1,642 +1,642 @@ { - "langCode": "cs-CZ", - "langName": "Čeština", - "messages": { - "resumingVideo": "Resuming video at {{VIDEO_TIME}}", - "settingVolume": "Setting volume boost to {{VOLUME_BOOST_AMOUNT}}" - }, - "pages": { - "content": { - "features": { - "copyTimestampUrlButton": { - "button": { - "copied": "Copied!", - "label": "Copy video URL with timestamp" - } - }, - "featureMenu": { - "button": { - "label": "Feature menu" - } - }, - "forwardRewindButtons": { - "buttons": { - "forwardButton": { - "label": "Fast forward by {{TIME}}" - }, - "rewindButton": { - "label": "Rewind by {{TIME}}" - } - } - }, - "hideEndScreenCardsButton": { - "button": { - "label": "Hide end screen cards", - "toggle": { - "off": "Show end screen cards", - "on": "Hide end screen cards" - } - } - }, - "loopButton": { - "button": { - "label": "Loop", - "toggle": { - "off": "Loop off", - "on": "Loop on" - } - } - }, - "maximizePlayerButton": { - "button": { - "label": "Maximize", - "toggle": { - "off": "Maximize off", - "on": "Maximize on" - } - } - }, - "openTranscriptButton": { - "button": { - "label": "Open transcript" - } - }, - "playbackSpeedButtons": { - "buttons": { - "decreasePlaybackSpeedButton": { - "label": "Decrease Speed to {{SPEED}}" - }, - "increasePlaybackSpeedButton": { - "label": "Increase Speed to {{SPEED}}" - } - }, - "decreaseLimit": "Can't decrease further ({{SPEED}})", - "increaseLimit": "Can't increase further ({{SPEED}})" - }, - "playlistLength": { - "title": "Total length may not be accurate if some videos are hidden or if you haven't loaded enough videos to get the full length." - }, - "screenshotButton": { - "button": { - "label": "Screenshot" - }, - "copiedToClipboard": "Screenshot copied to clipboard" - }, - "videoHistory": { - "resumeButton": "Resume", - "resumePrompt": { - "close": "Close" - } - }, - "volumeBoostButton": { - "button": { - "label": "Volume Boost", - "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" - } - } - } - } - }, - "options": { - "notifications": { - "error": { - "scrollWheelHoldModifierKey": { - "sameKey": { - "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", - "volumeControl": "The scroll wheel volume control modifier key cannot be the same as the scroll wheel speed control modifier key." - } - } - }, - "info": { - "reset": "All options have been reset to their default values.\nYou can now save the changes by clicking the \"Confirm\" button or discard them by closing this page or ignore this notification." - }, - "success": { - "saved": "Options saved." - } - } - } - }, - "settings": { - "clearData": { - "allDataDeleted": "All data has been deleted.", - "confirmAlert": "This will delete all extension data related to options. Continue?" - }, - "optionDisabled": { - "either": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " or " - }, - "plural": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " and " - }, - "singular": "Enable '{{OPTION}}' to configure this option", - "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." - } - }, - "scrollForMoreSettings": "Scroll for more settings", - "sections": { - "automaticQuality": { - "enable": { - "label": "Automatic quality adjustment", - "title": "Automatically adjusts the video quality to the selected level." - }, - "fallbackQualityStrategy": { - "select": { - "label": "Quality fallback strategy", - "options": { - "higher": "Higher", - "lower": "Lower" - }, - "title": "The strategy to use when the selected quality is not available" - } - }, - "select": { - "label": "Player quality", - "title": "The quality to set the video to" - }, - "title": "Automatic quality settings" - }, - "bottomButtons": { - "clear": { - "title": "Clears all data this extension has stored on your machine", - "value": "Clear Data" - }, - "confirm": { - "title": "Confirm setting reset", - "value": "Confirm" - }, - "openTab": { - "title": "Open extension settings in a new tab" - }, - "reset": { - "title": "Resets all settings to their defaults, Click the confirm button to save the changes", - "value": "Reset" - } - }, - "buttonPlacement": { - "select": { - "buttonNames": { - "copyTimestampUrlButton": "Copy video URL with timestamp button", - "decreasePlaybackSpeedButton": "Decrease Speed button", - "forwardButton": "Fast Forward button", - "hideEndScreenCardsButton": "Hide end screen cards button", - "increasePlaybackSpeedButton": "Increase Speed button", - "loopButton": "Loop button", - "maximizePlayerButton": "Maximize button", - "openTranscriptButton": "Open Transcript button", - "rewindButton": "Rewind button", - "screenshotButton": "Screenshot button", - "volumeBoostButton": "Volume Boost button" - }, - "options": { - "below_player": { - "placement": "below the player controls", - "value": "Below Player" - }, - "feature_menu": { - "placement": "in the feature menu", - "value": "Feature Menu" - }, - "player_controls_left": { - "placement": "on the left side of player controls", - "value": "Left Controls" - }, - "player_controls_right": { - "placement": "on the right side of player controls", - "value": "Right Controls" - } - }, - "title": "Place the {{BUTTON_NAME}} {{PLACEMENT}}" - }, - "title": "Button Placement Settings" - }, - "customCSS": { - "editor": { - "collapse": "Collapse Editor", - "expand": "Expand Editor", - "noProblems": "No problems found." - }, - "enable": { - "label": "Custom CSS", - "title": "Enables custom CSS to be applied to the page" - }, - "title": "Custom CSS Settings" - }, - "featureMenu": { - "openType": { - "select": { - "label": "Menu Activation Type", - "options": { - "click": "Click", - "hover": "Hover" - }, - "title": "Select the method to activate the feature menu" - }, - "title": "Feature menu settings" - } - }, - "forwardRewindButtons": { - "enable": { - "label": "Forward/rewind buttons", - "title": "Adds forward and rewind buttons to the video player" - }, - "time": { - "label": "Forward/rewind time", - "title": "The amount of time to forward/rewind the video by" - }, - "title": "Forward/rewind button settings" - }, - "importExportSettings": { - "exportButton": { - "success": "Settings successfully exported", - "title": "Export settings to a JSON file", - "value": "Export Settings" - }, - "importButton": { - "error": { - "unknown": "Error importing settings. Please check the file format.\nAn unknown error occurred.", - "validation": "Error importing settings. Please check the file format.\n{{ERROR_MESSAGE}}" - }, - "success": "Settings imported successfully", - "title": "Import settings from a JSON file", - "value": "Import Settings" - } - }, - "language": { - "select": { - "label": "Language", - "title": "The language to use for the extension" - }, - "title": "Language" - }, - "miscellaneous": { - "features": { - "automaticTheaterMode": { - "label": "Automatic theater mode", - "title": "Automatically enables theater mode when you load a video" - }, - "automaticallyDisableAmbientMode": { - "label": "Automatically disable ambient mode", - "title": "Automatically disables ambient mode when you load a video" - }, - "automaticallyDisableClosedCaptions": { - "label": "Automatically disable closed captions", - "title": "Automatically disables closed captions when you load a video" - }, - "copyTimestampUrlButton": { - "label": "Copy video URL with timestamp button", - "title": "Copies video URL with timestamp (?t=123)" - }, - "defaultToOriginalAudioTrack": { - "label": "Default to original audio track", - "title": "Always default to the original audio track" - }, - "hideArtificialIntelligenceSummary": { - "label": "Hide AI summary", - "title": "Hides the artificial intelligence summary below videos" - }, - "hideEndScreenCards": { - "label": "Hide end screen cards", - "title": "Hides the cards at the end of the video" - }, - "hideEndScreenCardsButton": { - "label": "Hide end screen cards button", - "title": "Adds a button to show/hide the cards at the end of the video" - }, - "hideLiveStreamChat": { - "label": "Hide live stream chat", - "title": "Hides the live stream chat" - }, - "hideOfficialArtistVideosFromHomePage": { - "label": "Hide Official Artist Videos", - "title": "Hide Official Artist Videos from Home Page" - }, - "hidePaidPromotionBanner": { - "label": "Hide paid promotion banner", - "title": "Hides the banner that appears when you watch a video that has a paid promotion" - }, - "hidePlayables": { - "label": "Hide playables", - "title": "Hides all playables" - }, - "hideScrollbar": { - "label": "Hide scrollbar", - "title": "Hides the pages scrollbar" - }, - "hideShorts": { - "label": "Hide shorts", - "title": "Hides all shorts" - }, - "hideTranslateComment": { - "label": "Hide translate comment button", - "title": "Hides 'Translate to Language' button under comments" - }, - "loopButton": { - "label": "Loop button", - "title": "Adds a button to the feature menu to loop the video you're watching" - }, - "maximizePlayerButton": { - "label": "Maximize player button", - "title": "Adds a button to the feature menu to maximize the player" - }, - "openTranscriptButton": { - "label": "Open transcript button", - "title": "Adds a button to the feature menu to open the transcript of the video you're watching" - }, - "openYouTubeSettingsOnHover": { - "label": "Open YouTube settings on hover", - "title": "Opens the YouTube settings menu when you hover over the settings button" - }, - "pauseBackgroundPlayers": { - "label": "Pause background players", - "title": "Pauses video players in background tabs when you start a new player in foreground tab" - }, - "playlistRemover": { - "label": "Hide playlists from homepage", - "title": "Get rid of playlists from homepage" - }, - "remainingTime": { - "label": "Remaining time", - "title": "Shows the remaining time of the video you're watching" - }, - "rememberLastVolume": { - "label": "Remember last volume", - "title": "Remembers the volume of the last video you were watching and sets it when you open a new video" - }, - "removeRedirect": { - "label": "Remove YouTube /redirect URLs", - "title": "Replaces YouTube redirect by actual URLs, skipping redirect warning dialogue" - }, - "restoreFullscreenScrolling": { - "label": "Restore fullscreen scrolling", - "title": "Restores scrolling in fullscreen mode" - }, - "shareShortener": { - "label": "Shorten YouTube video share link", - "title": "Shortens YouTube video share link (youtu.be) by stripping si/feature parameters from it" - }, - "shortsAutoScroll": { - "label": "Shorts auto scroll", - "title": "Automatically scrolls to the next short" - }, - "skipContinueWatching": { - "label": "Skip \"Video is paused. Continue watching?\"", - "title": "Skips the idle dialog that pauses video playback" - } - }, - "title": "Miscellaneous settings" - }, - "onScreenDisplaySettings": { - "color": { - "label": "Color", - "options": { - "blue": "Blue", - "green": "Green", - "orange": "Orange", - "pink": "Pink", - "purple": "Purple", - "red": "Red", - "white": "White", - "yellow": "Yellow" - }, - "title": "Select the color for the On-Screen Display" - }, - "hide": { - "label": "Hide Delay", - "title": "Specify the time, in milliseconds, before automatically hiding the On-Screen Display" - }, - "opacity": { - "label": "Opacity", - "title": "Adjust the transparency of the On-Screen Display" - }, - "padding": { - "label": "Padding", - "title": "Adjust the spacing around the On-Screen Display in pixels. This applies specifically to corner On-Screen Display." - }, - "position": { - "label": "Position", - "options": { - "bottom_left": "Bottom Left", - "bottom_right": "Bottom Right", - "center": "Center", - "top_left": "Top Left", - "top_right": "Top Right" - }, - "title": "Select the position of the On-Screen Display" - }, - "title": "On-Screen Display Settings", - "type": { - "label": "Type", - "options": { - "circle": "Circle", - "line": "Line", - "no_display": "No display", - "text": "Text" - }, - "title": "Select the type of On-Screen Display" - } - }, - "playbackSpeed": { - "enable": { - "label": "Forced playback speed", - "title": "Sets the video speed to what you choose below" - }, - "playbackSpeedButtons": { - "label": "Playback speed buttons", - "select": { - "label": "Playback buttons speed", - "title": "Amount of speed to be changed per click" - }, - "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" - }, - "select": { - "label": "Player speed", - "title": "The speed to set the video to" - }, - "title": "Playback speed settings" - }, - "playlistLength": { - "enable": { - "label": "Display playlist length information", - "title": "Shows the total length of the playlist, how much has been watched, and how much remains." - }, - "title": "Playlist length settings", - "wayToGetLength": { - "select": { - "label": "Method to get playlist length", - "title": "The way to get playlist length information (API method will fallback to HTML if an error occurs)" - } - }, - "wayToGetWatchTime": { - "select": { - "label": "Method to get watched time", - "options": { - "duration": "Video Length", - "youtube": "Video Watch Time" - }, - "title": "The way to get the amount of time watched (Video Length type only used on watch page)" - } - } - }, - "screenshotButton": { - "enable": { - "label": "Screenshot button", - "title": "Adds a button to the player to take a screenshot of the video" - }, - "saveAs": { - "clipboard": "Clipboard", - "file": "File" - }, - "selectFormat": { - "label": "Screenshot format", - "title": "The format to save the screenshot in" - }, - "selectSaveAs": { - "label": "Screenshot save type", - "title": "The screenshot save type" - }, - "title": "Screenshot settings" - }, - "scrollWheelSpeedControl": { - "adjustmentSteps": { - "label": "Speed Change Per Scroll", - "title": "Adjust the speed change per scroll" - }, - "enable": { - "label": "Scroll wheel speed control", - "title": "Press a modifier key to enable speed adjustment with the scroll wheel." - }, - "optionLabel": "{{KEY}} key", - "select": { - "label": "Modifier key", - "title": "The modifier key to use" - }, - "title": "Scroll wheel speed control settings" - }, - "scrollWheelVolumeControl": { - "adjustmentSteps": { - "label": "Volume Change Per Scroll", - "title": "Adjust the volume change per scroll" - }, - "enable": { - "label": "Scroll wheel volume control", - "title": "Lets you use the scroll wheel to control the volume of the video you're watching" - }, - "holdModifierKey": { - "enable": { - "label": "When holding modifier key", - "title": "Press a modifier key to enable volume adjustment with the scroll wheel." - }, - "optionLabel": "{{KEY}} key", - "select": { - "label": "Modifier key", - "title": "The modifier key to use" - } - }, - "holdRightClick": { - "enable": { - "label": "When holding right click", - "title": "Hold right click to enable scroll wheel volume control" - } - }, - "title": "Scroll wheel volume control settings" - }, - "settingSearch": { - "placeholder": "Search for a setting" - }, - "videoHistory": { - "enable": { - "label": "Track watched videos", - "title": "Keeps track of where you left off on videos you were watching and enables resuming playback" - }, - "resumeType": { - "select": { - "label": "Resume type", - "options": { - "automatic": "Automatic", - "prompt": "Prompt" - }, - "title": "Select how you want to resume videos" - } - }, - "title": "Video history settings" - }, - "volumeBoost": { - "boostAmount": { - "label": "Volume boost amount (dB)", - "title": "The amount to boost the volume by" - }, - "enable": { - "label": "Volume boost", - "title": "Enable volume boost" - }, - "mode": { - "select": { - "label": "Volume boost mode", - "options": { - "global": "Global", - "perVideo": "Per video" - }, - "title": "Choose how volume boost is applied. 'Per video' allows enabling boost for each video individually in the feature menu. 'Global' applies boost to all videos when volume boost is enabled." - } - }, - "title": "Volume boost settings" - }, - "youtubeDataApiV3Key": { - "getApiKeyLinkText": "You can get one from here", - "input": { - "label": "API Key", - "title": "Enter your Youtube Data API V3 key." - }, - "title": "YouTube API V3 Key" - }, - "youtubeDeepDark": { - "author": "Author", - "co-authors": "Co-authors", - "colors": { - "colorShadow": { - "label": "Shadow color", - "title": "Color for shadows" - }, - "dimmerText": { - "label": "Secondary text color", - "title": "Color for secondary text" - }, - "hoverBackground": { - "label": "Hover background color", - "title": "Color for hover background" - }, - "mainBackground": { - "label": "Main background color", - "title": "Color for main background" - }, - "mainColor": { - "label": "Accent color", - "title": "Color for accent" - }, - "mainText": { - "label": "Main text color", - "title": "Color for main text" - }, - "secondBackground": { - "label": "Secondary background color", - "title": "Color for secondary background" - } - }, - "enable": { - "label": "Deep Dark Theme", - "title": "Activate the selected theme for the page" - }, - "select": { - "label": "Select theme", - "title": "Select a theme to be applied to the page" - }, - "title": "YouTube Deep Dark Settings" - } - } - } -} \ No newline at end of file + "langCode": "cs-CZ", + "langName": "Čeština", + "messages": { + "resumingVideo": "Resuming video at {{VIDEO_TIME}}", + "settingVolume": "Setting volume boost to {{VOLUME_BOOST_AMOUNT}}" + }, + "pages": { + "content": { + "features": { + "copyTimestampUrlButton": { + "button": { + "copied": "Copied!", + "label": "Copy video URL with timestamp" + } + }, + "featureMenu": { + "button": { + "label": "Feature menu" + } + }, + "forwardRewindButtons": { + "buttons": { + "forwardButton": { + "label": "Fast forward by {{TIME}}" + }, + "rewindButton": { + "label": "Rewind by {{TIME}}" + } + } + }, + "hideEndScreenCardsButton": { + "button": { + "label": "Hide end screen cards", + "toggle": { + "off": "Show end screen cards", + "on": "Hide end screen cards" + } + } + }, + "loopButton": { + "button": { + "label": "Loop", + "toggle": { + "off": "Loop off", + "on": "Loop on" + } + } + }, + "maximizePlayerButton": { + "button": { + "label": "Maximize", + "toggle": { + "off": "Maximize off", + "on": "Maximize on" + } + } + }, + "openTranscriptButton": { + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Decrease Speed to {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Increase Speed to {{SPEED}}" + } + }, + "decreaseLimit": "Can't decrease further ({{SPEED}})", + "increaseLimit": "Can't increase further ({{SPEED}})" + }, + "playlistLength": { + "title": "Total length may not be accurate if some videos are hidden or if you haven't loaded enough videos to get the full length." + }, + "screenshotButton": { + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "Screenshot copied to clipboard" + }, + "videoHistory": { + "resumeButton": "Resume", + "resumePrompt": { + "close": "Close" + } + }, + "volumeBoostButton": { + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } + } + } + } + }, + "options": { + "notifications": { + "error": { + "scrollWheelHoldModifierKey": { + "sameKey": { + "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", + "volumeControl": "The scroll wheel volume control modifier key cannot be the same as the scroll wheel speed control modifier key." + } + } + }, + "info": { + "reset": "All options have been reset to their default values.\nYou can now save the changes by clicking the \"Confirm\" button or discard them by closing this page or ignore this notification." + }, + "success": { + "saved": "Options saved." + } + } + } + }, + "settings": { + "clearData": { + "allDataDeleted": "All data has been deleted.", + "confirmAlert": "This will delete all extension data related to options. Continue?" + }, + "optionDisabled": { + "either": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " or " + }, + "plural": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " and " + }, + "singular": "Enable '{{OPTION}}' to configure this option", + "specificOption": { + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + } + }, + "scrollForMoreSettings": "Scroll for more settings", + "sections": { + "automaticQuality": { + "enable": { + "label": "Automatic quality adjustment", + "title": "Automatically adjusts the video quality to the selected level." + }, + "fallbackQualityStrategy": { + "select": { + "label": "Quality fallback strategy", + "options": { + "higher": "Higher", + "lower": "Lower" + }, + "title": "The strategy to use when the selected quality is not available" + } + }, + "select": { + "label": "Player quality", + "title": "The quality to set the video to" + }, + "title": "Automatic quality settings" + }, + "bottomButtons": { + "clear": { + "title": "Clears all data this extension has stored on your machine", + "value": "Clear Data" + }, + "confirm": { + "title": "Confirm setting reset", + "value": "Confirm" + }, + "openTab": { + "title": "Open extension settings in a new tab" + }, + "reset": { + "title": "Resets all settings to their defaults, Click the confirm button to save the changes", + "value": "Reset" + } + }, + "buttonPlacement": { + "select": { + "buttonNames": { + "copyTimestampUrlButton": "Copy video URL with timestamp button", + "decreasePlaybackSpeedButton": "Decrease Speed button", + "forwardButton": "Fast Forward button", + "hideEndScreenCardsButton": "Hide end screen cards button", + "increasePlaybackSpeedButton": "Increase Speed button", + "loopButton": "Loop button", + "maximizePlayerButton": "Maximize button", + "openTranscriptButton": "Open Transcript button", + "rewindButton": "Rewind button", + "screenshotButton": "Screenshot button", + "volumeBoostButton": "Volume Boost button" + }, + "options": { + "below_player": { + "placement": "below the player controls", + "value": "Below Player" + }, + "feature_menu": { + "placement": "in the feature menu", + "value": "Feature Menu" + }, + "player_controls_left": { + "placement": "on the left side of player controls", + "value": "Left Controls" + }, + "player_controls_right": { + "placement": "on the right side of player controls", + "value": "Right Controls" + } + }, + "title": "Place the {{BUTTON_NAME}} {{PLACEMENT}}" + }, + "title": "Button Placement Settings" + }, + "customCSS": { + "editor": { + "collapse": "Collapse Editor", + "expand": "Expand Editor", + "noProblems": "No problems found." + }, + "enable": { + "label": "Custom CSS", + "title": "Enables custom CSS to be applied to the page" + }, + "title": "Custom CSS Settings" + }, + "featureMenu": { + "openType": { + "select": { + "label": "Menu Activation Type", + "options": { + "click": "Click", + "hover": "Hover" + }, + "title": "Select the method to activate the feature menu" + }, + "title": "Feature menu settings" + } + }, + "forwardRewindButtons": { + "enable": { + "label": "Forward/rewind buttons", + "title": "Adds forward and rewind buttons to the video player" + }, + "time": { + "label": "Forward/rewind time", + "title": "The amount of time to forward/rewind the video by" + }, + "title": "Forward/rewind button settings" + }, + "importExportSettings": { + "exportButton": { + "success": "Settings successfully exported", + "title": "Export settings to a JSON file", + "value": "Export Settings" + }, + "importButton": { + "error": { + "unknown": "Error importing settings. Please check the file format.\nAn unknown error occurred.", + "validation": "Error importing settings. Please check the file format.\n{{ERROR_MESSAGE}}" + }, + "success": "Settings imported successfully", + "title": "Import settings from a JSON file", + "value": "Import Settings" + } + }, + "language": { + "select": { + "label": "Language", + "title": "The language to use for the extension" + }, + "title": "Language" + }, + "miscellaneous": { + "features": { + "automaticTheaterMode": { + "label": "Automatic theater mode", + "title": "Automatically enables theater mode when you load a video" + }, + "automaticallyDisableAmbientMode": { + "label": "Automatically disable ambient mode", + "title": "Automatically disables ambient mode when you load a video" + }, + "automaticallyDisableClosedCaptions": { + "label": "Automatically disable closed captions", + "title": "Automatically disables closed captions when you load a video" + }, + "copyTimestampUrlButton": { + "label": "Copy video URL with timestamp button", + "title": "Copies video URL with timestamp (?t=123)" + }, + "defaultToOriginalAudioTrack": { + "label": "Default to original audio track", + "title": "Always default to the original audio track" + }, + "hideArtificialIntelligenceSummary": { + "label": "Hide AI summary", + "title": "Hides the artificial intelligence summary below videos" + }, + "hideEndScreenCards": { + "label": "Hide end screen cards", + "title": "Hides the cards at the end of the video" + }, + "hideEndScreenCardsButton": { + "label": "Hide end screen cards button", + "title": "Adds a button to show/hide the cards at the end of the video" + }, + "hideLiveStreamChat": { + "label": "Hide live stream chat", + "title": "Hides the live stream chat" + }, + "hideOfficialArtistVideosFromHomePage": { + "label": "Hide Official Artist Videos", + "title": "Hide Official Artist Videos from Home Page" + }, + "hidePaidPromotionBanner": { + "label": "Hide paid promotion banner", + "title": "Hides the banner that appears when you watch a video that has a paid promotion" + }, + "hidePlayables": { + "label": "Hide playables", + "title": "Hides all playables" + }, + "hideScrollbar": { + "label": "Hide scrollbar", + "title": "Hides the pages scrollbar" + }, + "hideShorts": { + "label": "Hide shorts", + "title": "Hides all shorts" + }, + "hideTranslateComment": { + "label": "Hide translate comment button", + "title": "Hides 'Translate to Language' button under comments" + }, + "loopButton": { + "label": "Loop button", + "title": "Adds a button to the feature menu to loop the video you're watching" + }, + "maximizePlayerButton": { + "label": "Maximize player button", + "title": "Adds a button to the feature menu to maximize the player" + }, + "openTranscriptButton": { + "label": "Open transcript button", + "title": "Adds a button to the feature menu to open the transcript of the video you're watching" + }, + "openYouTubeSettingsOnHover": { + "label": "Open YouTube settings on hover", + "title": "Opens the YouTube settings menu when you hover over the settings button" + }, + "pauseBackgroundPlayers": { + "label": "Pause background players", + "title": "Pauses video players in background tabs when you start a new player in foreground tab" + }, + "playlistRemover": { + "label": "Hide playlists from homepage", + "title": "Get rid of playlists from homepage" + }, + "remainingTime": { + "label": "Remaining time", + "title": "Shows the remaining time of the video you're watching" + }, + "rememberLastVolume": { + "label": "Remember last volume", + "title": "Remembers the volume of the last video you were watching and sets it when you open a new video" + }, + "removeRedirect": { + "label": "Remove YouTube /redirect URLs", + "title": "Replaces YouTube redirect by actual URLs, skipping redirect warning dialogue" + }, + "restoreFullscreenScrolling": { + "label": "Restore fullscreen scrolling", + "title": "Restores scrolling in fullscreen mode" + }, + "shareShortener": { + "label": "Shorten YouTube video share link", + "title": "Shortens YouTube video share link (youtu.be) by stripping si/feature parameters from it" + }, + "shortsAutoScroll": { + "label": "Shorts auto scroll", + "title": "Automatically scrolls to the next short" + }, + "skipContinueWatching": { + "label": "Skip \"Video is paused. Continue watching?\"", + "title": "Skips the idle dialog that pauses video playback" + } + }, + "title": "Miscellaneous settings" + }, + "onScreenDisplaySettings": { + "color": { + "label": "Color", + "options": { + "blue": "Blue", + "green": "Green", + "orange": "Orange", + "pink": "Pink", + "purple": "Purple", + "red": "Red", + "white": "White", + "yellow": "Yellow" + }, + "title": "Select the color for the On-Screen Display" + }, + "hide": { + "label": "Hide Delay", + "title": "Specify the time, in milliseconds, before automatically hiding the On-Screen Display" + }, + "opacity": { + "label": "Opacity", + "title": "Adjust the transparency of the On-Screen Display" + }, + "padding": { + "label": "Padding", + "title": "Adjust the spacing around the On-Screen Display in pixels. This applies specifically to corner On-Screen Display." + }, + "position": { + "label": "Position", + "options": { + "bottom_left": "Bottom Left", + "bottom_right": "Bottom Right", + "center": "Center", + "top_left": "Top Left", + "top_right": "Top Right" + }, + "title": "Select the position of the On-Screen Display" + }, + "title": "On-Screen Display Settings", + "type": { + "label": "Type", + "options": { + "circle": "Circle", + "line": "Line", + "no_display": "No display", + "text": "Text" + }, + "title": "Select the type of On-Screen Display" + } + }, + "playbackSpeed": { + "enable": { + "label": "Forced playback speed", + "title": "Sets the video speed to what you choose below" + }, + "playbackSpeedButtons": { + "label": "Playback speed buttons", + "select": { + "label": "Playback buttons speed", + "title": "Amount of speed to be changed per click" + }, + "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" + }, + "select": { + "label": "Player speed", + "title": "The speed to set the video to" + }, + "title": "Playback speed settings" + }, + "playlistLength": { + "enable": { + "label": "Display playlist length information", + "title": "Shows the total length of the playlist, how much has been watched, and how much remains." + }, + "title": "Playlist length settings", + "wayToGetLength": { + "select": { + "label": "Method to get playlist length", + "title": "The way to get playlist length information (API method will fallback to HTML if an error occurs)" + } + }, + "wayToGetWatchTime": { + "select": { + "label": "Method to get watched time", + "options": { + "duration": "Video Length", + "youtube": "Video Watch Time" + }, + "title": "The way to get the amount of time watched (Video Length type only used on watch page)" + } + } + }, + "screenshotButton": { + "enable": { + "label": "Screenshot button", + "title": "Adds a button to the player to take a screenshot of the video" + }, + "saveAs": { + "clipboard": "Clipboard", + "file": "File" + }, + "selectFormat": { + "label": "Screenshot format", + "title": "The format to save the screenshot in" + }, + "selectSaveAs": { + "label": "Screenshot save type", + "title": "The screenshot save type" + }, + "title": "Screenshot settings" + }, + "scrollWheelSpeedControl": { + "adjustmentSteps": { + "label": "Speed Change Per Scroll", + "title": "Adjust the speed change per scroll" + }, + "enable": { + "label": "Scroll wheel speed control", + "title": "Press a modifier key to enable speed adjustment with the scroll wheel." + }, + "optionLabel": "{{KEY}} key", + "select": { + "label": "Modifier key", + "title": "The modifier key to use" + }, + "title": "Scroll wheel speed control settings" + }, + "scrollWheelVolumeControl": { + "adjustmentSteps": { + "label": "Volume Change Per Scroll", + "title": "Adjust the volume change per scroll" + }, + "enable": { + "label": "Scroll wheel volume control", + "title": "Lets you use the scroll wheel to control the volume of the video you're watching" + }, + "holdModifierKey": { + "enable": { + "label": "When holding modifier key", + "title": "Press a modifier key to enable volume adjustment with the scroll wheel." + }, + "optionLabel": "{{KEY}} key", + "select": { + "label": "Modifier key", + "title": "The modifier key to use" + } + }, + "holdRightClick": { + "enable": { + "label": "When holding right click", + "title": "Hold right click to enable scroll wheel volume control" + } + }, + "title": "Scroll wheel volume control settings" + }, + "settingSearch": { + "placeholder": "Search for a setting" + }, + "videoHistory": { + "enable": { + "label": "Track watched videos", + "title": "Keeps track of where you left off on videos you were watching and enables resuming playback" + }, + "resumeType": { + "select": { + "label": "Resume type", + "options": { + "automatic": "Automatic", + "prompt": "Prompt" + }, + "title": "Select how you want to resume videos" + } + }, + "title": "Video history settings" + }, + "volumeBoost": { + "boostAmount": { + "label": "Volume boost amount (dB)", + "title": "The amount to boost the volume by" + }, + "enable": { + "label": "Volume boost", + "title": "Enable volume boost" + }, + "mode": { + "select": { + "label": "Volume boost mode", + "options": { + "global": "Global", + "perVideo": "Per video" + }, + "title": "Choose how volume boost is applied. 'Per video' allows enabling boost for each video individually in the feature menu. 'Global' applies boost to all videos when volume boost is enabled." + } + }, + "title": "Volume boost settings" + }, + "youtubeDataApiV3Key": { + "getApiKeyLinkText": "You can get one from here", + "input": { + "label": "API Key", + "title": "Enter your Youtube Data API V3 key." + }, + "title": "YouTube API V3 Key" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background color", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background color", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Deep Dark Theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" + } + } + } +} diff --git a/public/locales/es-ES.json b/public/locales/es-ES.json index 679ee0751..5d5e2850d 100644 --- a/public/locales/es-ES.json +++ b/public/locales/es-ES.json @@ -1,642 +1,642 @@ { - "langCode": "es-ES", - "langName": "Español", - "messages": { - "resumingVideo": "Reanudando vídeo en {{VIDEO_TIME}}", - "settingVolume": "Ajustando el potenciador de volumen a {{VOLUME_BOOST_AMOUNT}}" - }, - "pages": { - "content": { - "features": { - "copyTimestampUrlButton": { - "button": { - "copied": "Copied!", - "label": "Copy video URL with timestamp" - } - }, - "featureMenu": { - "button": { - "label": "Feature menu" - } - }, - "forwardRewindButtons": { - "buttons": { - "forwardButton": { - "label": "Fast forward by {{TIME}}" - }, - "rewindButton": { - "label": "Rewind by {{TIME}}" - } - } - }, - "hideEndScreenCardsButton": { - "button": { - "label": "Hide end screen cards", - "toggle": { - "off": "Show end screen cards", - "on": "Hide end screen cards" - } - } - }, - "loopButton": { - "button": { - "label": "Loop", - "toggle": { - "off": "Loop off", - "on": "Loop on" - } - } - }, - "maximizePlayerButton": { - "button": { - "label": "Maximize", - "toggle": { - "off": "Maximize off", - "on": "Maximize on" - } - } - }, - "openTranscriptButton": { - "button": { - "label": "Open transcript" - } - }, - "playbackSpeedButtons": { - "buttons": { - "decreasePlaybackSpeedButton": { - "label": "Decrease Speed to {{SPEED}}" - }, - "increasePlaybackSpeedButton": { - "label": "Increase Speed to {{SPEED}}" - } - }, - "decreaseLimit": "Can't decrease further ({{SPEED}})", - "increaseLimit": "Can't increase further ({{SPEED}})" - }, - "playlistLength": { - "title": "Total length may not be accurate if some videos are hidden or if you haven't loaded enough videos to get the full length." - }, - "screenshotButton": { - "button": { - "label": "Screenshot" - }, - "copiedToClipboard": "Captura de pantalla copiada al portapapeles" - }, - "videoHistory": { - "resumeButton": "Reanudar", - "resumePrompt": { - "close": "Cerrar" - } - }, - "volumeBoostButton": { - "button": { - "label": "Volume Boost", - "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" - } - } - } - } - }, - "options": { - "notifications": { - "error": { - "scrollWheelHoldModifierKey": { - "sameKey": { - "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", - "volumeControl": "The scroll wheel volume control modifier key cannot be the same as the scroll wheel speed control modifier key." - } - } - }, - "info": { - "reset": "Todas las opciones han sido preestablecidas a sus valores de por defecto.\nAhora puedes guardarlas haciendo clic en el botón \"Confirmar\" o descartarlas cerrando esta página o ignorando esta notificación." - }, - "success": { - "saved": "Opciones guardadas." - } - } - } - }, - "settings": { - "clearData": { - "allDataDeleted": "Todos los datos han sido eliminados.", - "confirmAlert": "Esto eliminará todos los datos de la extensión relacionados con las opciones. ¿Continuar?" - }, - "optionDisabled": { - "either": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " or " - }, - "plural": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " and " - }, - "singular": "Enable '{{OPTION}}' to configure this option", - "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." - } - }, - "scrollForMoreSettings": "Scroll for more settings", - "sections": { - "automaticQuality": { - "enable": { - "label": "Habilitar ajuste automático de calidad", - "title": "Ajustar automáticamente la calidad del vídeo al nivel seleccionado." - }, - "fallbackQualityStrategy": { - "select": { - "label": "Quality fallback strategy", - "options": { - "higher": "Higher", - "lower": "Lower" - }, - "title": "The strategy to use when the selected quality is not available" - } - }, - "select": { - "label": "Calidad del reproductor", - "title": "La calidad a la que establecer el vídeo" - }, - "title": "Ajustes de calidad automáticos" - }, - "bottomButtons": { - "clear": { - "title": "Limpia todos los datos que esta extensión ha almacenado en su equipo", - "value": "Limpiar datos" - }, - "confirm": { - "title": "Confirma el restablecimiento de los ajustes", - "value": "Confirmar" - }, - "openTab": { - "title": "Open extension settings in a new tab" - }, - "reset": { - "title": "Restablece todos los ajustes a sus valores predeterminados, haga clic en el botón de confirmar para guardar los cambios", - "value": "Reestablecer" - } - }, - "buttonPlacement": { - "select": { - "buttonNames": { - "copyTimestampUrlButton": "Copy video URL with timestamp button", - "decreasePlaybackSpeedButton": "Decrease Speed button", - "forwardButton": "Fast Forward button", - "hideEndScreenCardsButton": "Hide end screen cards button", - "increasePlaybackSpeedButton": "Increase Speed button", - "loopButton": "Botón de repetición", - "maximizePlayerButton": "Maximizar botón", - "openTranscriptButton": "Abrir botón de transcripción", - "rewindButton": "Rewind button", - "screenshotButton": "Botón de captura de pantalla", - "volumeBoostButton": "Botón Aumento de Volumen" - }, - "options": { - "below_player": { - "placement": "debajo de los controles del reproductor", - "value": "Debajo del reproductor" - }, - "feature_menu": { - "placement": "in the feature menu", - "value": "Menú de funciones" - }, - "player_controls_left": { - "placement": "a la izquierda de los controles del reproductor", - "value": "Controles a la izquierda" - }, - "player_controls_right": { - "placement": "a la derecha de los controles del reproductor", - "value": "Controles a la derecha" - } - }, - "title": "Coloca el {{BUTTON_NAME}} a la {{PLACEMENT}}" - }, - "title": "Ajustes de posición de los botones" - }, - "customCSS": { - "editor": { - "collapse": "Colapsar editor", - "expand": "Expandir editor", - "noProblems": "No se encontraron problemas." - }, - "enable": { - "label": "Habilitar CSS personalizado", - "title": "Permite aplicar CSS personalizado a la página" - }, - "title": "Ajustes de CSS personalizados" - }, - "featureMenu": { - "openType": { - "select": { - "label": "Tipo de activación del menú", - "options": { - "click": "Click", - "hover": "Pasar el cursor por encima" - }, - "title": "Selecciona el método para abrir el menú" - }, - "title": "Configuración del menú" - } - }, - "forwardRewindButtons": { - "enable": { - "label": "Forward/rewind buttons", - "title": "Adds forward and rewind buttons to the video player" - }, - "time": { - "label": "Forward/rewind time", - "title": "The amount of time to forward/rewind the video by" - }, - "title": "Forward/rewind button settings" - }, - "importExportSettings": { - "exportButton": { - "success": "Ajustes exportados correctamente", - "title": "Exportar ajustes a un archivo JSON", - "value": "Exportar Ajustes" - }, - "importButton": { - "error": { - "unknown": "Error al importar la configuración. Por favor, compruebe el formato del archivo.\nUn error desconocido se ha producido.", - "validation": "Error al importar la configuración. Por favor, compruebe el formato del archivo.\n{{ERROR_MESSAGE}}" - }, - "success": "Ajustes importados correctamente", - "title": "Importar ajustes desde un archivo JSON", - "value": "Importar Ajustes" - } - }, - "language": { - "select": { - "label": "Idioma", - "title": "El idioma a usar para la extensión" - }, - "title": "Idioma" - }, - "miscellaneous": { - "features": { - "automaticTheaterMode": { - "label": "Modo cine automático", - "title": "Activar automáticamente el modo cine al cargar un vídeo" - }, - "automaticallyDisableAmbientMode": { - "label": "Automatically disable ambient mode", - "title": "Automatically disables ambient mode when you load a video" - }, - "automaticallyDisableClosedCaptions": { - "label": "Automatically disable closed captions", - "title": "Automatically disables closed captions when you load a video" - }, - "copyTimestampUrlButton": { - "label": "Copy video URL with timestamp button", - "title": "Copies video URL with timestamp (?t=123)" - }, - "defaultToOriginalAudioTrack": { - "label": "Default to original audio track", - "title": "Always default to the original audio track" - }, - "hideArtificialIntelligenceSummary": { - "label": "Hide AI summary", - "title": "Hides the artificial intelligence summary below videos" - }, - "hideEndScreenCards": { - "label": "Hide end screen cards", - "title": "Hides the cards at the end of the video" - }, - "hideEndScreenCardsButton": { - "label": "Hide end screen cards button", - "title": "Adds a button to show/hide the cards at the end of the video" - }, - "hideLiveStreamChat": { - "label": "Hide live stream chat", - "title": "Hides the live stream chat" - }, - "hideOfficialArtistVideosFromHomePage": { - "label": "Hide Official Artist Videos", - "title": "Hide Official Artist Videos from Home Page" - }, - "hidePaidPromotionBanner": { - "label": "Hide paid promotion banner", - "title": "Hides the banner that appears when you watch a video that has a paid promotion" - }, - "hidePlayables": { - "label": "Hide playables", - "title": "Hides all playables" - }, - "hideScrollbar": { - "label": "Ocultar barra de desplazamiento", - "title": "Oculta la barra de desplazamiento de la página" - }, - "hideShorts": { - "label": "Hide shorts", - "title": "Hides all shorts" - }, - "hideTranslateComment": { - "label": "Hide translate comment button", - "title": "Hides 'Translate to Language' button under comments" - }, - "loopButton": { - "label": "Botón de bucle", - "title": "Añade un botón al menú para poner en bucle el vídeo que estás viendo" - }, - "maximizePlayerButton": { - "label": "Botón de maximizar en el reproductor", - "title": "Añade un botón al menú para maximizar el reproductor" - }, - "openTranscriptButton": { - "label": "Botón \"Abrir transcripción\"", - "title": "Añade un botón al menú para abrir la transcripción del video que estás viendo" - }, - "openYouTubeSettingsOnHover": { - "label": "Abrir ajustes de YouTube al pasar el cursor", - "title": "Abre el menú de configuración de YouTube cuando pasa el cursor por encima del botón de ajustes" - }, - "pauseBackgroundPlayers": { - "label": "Pause background players", - "title": "Pauses video players in background tabs when you start a new player in foreground tab" - }, - "playlistRemover": { - "label": "Hide playlists from homepage", - "title": "Get rid of playlists from homepage" - }, - "remainingTime": { - "label": "Tiempo restante", - "title": "Muestra el tiempo restante del vídeo que estás viendo" - }, - "rememberLastVolume": { - "label": "Recordar el nivel de volumen", - "title": "Recuerda el volumen del último vídeo que estabas viendo y lo establece cuando abres un nuevo vídeo" - }, - "removeRedirect": { - "label": "Remove YouTube /redirect URLs", - "title": "Replaces YouTube redirect by actual URLs, skipping redirect warning dialogue" - }, - "restoreFullscreenScrolling": { - "label": "Restore fullscreen scrolling", - "title": "Restores scrolling in fullscreen mode" - }, - "shareShortener": { - "label": "Shorten YouTube video share link", - "title": "Shortens YouTube video share link (youtu.be) by stripping si/feature parameters from it" - }, - "shortsAutoScroll": { - "label": "Shorts auto scroll", - "title": "Automatically scrolls to the next short" - }, - "skipContinueWatching": { - "label": "Skip \"Video is paused. Continue watching?\"", - "title": "Skips the idle dialog that pauses video playback" - } - }, - "title": "Ajustes varios" - }, - "onScreenDisplaySettings": { - "color": { - "label": "Color", - "options": { - "blue": "Azul", - "green": "Verde", - "orange": "Naranja", - "pink": "Rosa", - "purple": "Morado", - "red": "Rojo", - "white": "Blanco", - "yellow": "Amarillo" - }, - "title": "Select the color for the On-Screen Display" - }, - "hide": { - "label": "Oculta el retardo", - "title": "Specify the time, in milliseconds, before automatically hiding the On-Screen Display" - }, - "opacity": { - "label": "Opacidad", - "title": "Adjust the transparency of the On-Screen Display" - }, - "padding": { - "label": "Margen", - "title": "Adjust the spacing around the On-Screen Display in pixels. This applies specifically to corner On-Screen Display." - }, - "position": { - "label": "Posición", - "options": { - "bottom_left": "Parte inferior izquierda", - "bottom_right": "Parte inferior derecha", - "center": "Centrado", - "top_left": "Parte superior izquierda", - "top_right": "Parte superior derecha" - }, - "title": "Select the position of the On-Screen Display" - }, - "title": "On-Screen Display Settings", - "type": { - "label": "Tipo", - "options": { - "circle": "Circle", - "line": "Línea", - "no_display": "No mostrar", - "text": "Texto" - }, - "title": "Select the type of On-Screen Display" - } - }, - "playbackSpeed": { - "enable": { - "label": "Velocidad de reproducción forzada", - "title": "Establece la velocidad del video a lo que elijas a continuación" - }, - "playbackSpeedButtons": { - "label": "Playback speed buttons", - "select": { - "label": "Playback buttons speed", - "title": "Amount of speed to be changed per click" - }, - "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" - }, - "select": { - "label": "Velocidad del reproductor", - "title": "La velocidad a la que ajustar el vídeo" - }, - "title": "Ajustes de velocidad de reproducción" - }, - "playlistLength": { - "enable": { - "label": "Display playlist length information", - "title": "Shows the total length of the playlist, how much has been watched, and how much remains." - }, - "title": "Playlist length settings", - "wayToGetLength": { - "select": { - "label": "Method to get playlist length", - "title": "The way to get playlist length information (API method will fallback to HTML if an error occurs)" - } - }, - "wayToGetWatchTime": { - "select": { - "label": "Method to get watched time", - "options": { - "duration": "Video Length", - "youtube": "Video Watch Time" - }, - "title": "The way to get the amount of time watched (Video Length type only used on watch page)" - } - } - }, - "screenshotButton": { - "enable": { - "label": "Botón de captura de pantalla", - "title": "Añade un botón al reproductor para capturar la pantalal del vídeo que estás viendo" - }, - "saveAs": { - "clipboard": "Portapapeles", - "file": "Archivo" - }, - "selectFormat": { - "label": "Formato de captura de pantalla", - "title": "El formato en el que guardar la captura de pantalla" - }, - "selectSaveAs": { - "label": "Método de guardado de captura de pantalla", - "title": "Método de guardado sobre el que se guardará la captura de pantalla" - }, - "title": "Ajustes de captura de pantalla" - }, - "scrollWheelSpeedControl": { - "adjustmentSteps": { - "label": "Volumen cambiado por cada scroll con la rueda del ratón", - "title": "Ajustar la velocidad que cambia por el scroll de la rueda del ratón" - }, - "enable": { - "label": "Control de velocidad con la rueda", - "title": "Pulsa una tecla para activar el ajuste de velocidad con la rueda del ratón." - }, - "optionLabel": "Tecla {{KEY}}", - "select": { - "label": "Tecla modificadora", - "title": "Tecla a usar" - }, - "title": "Ajustes sobre el control de velocidad con la rueda del ratón" - }, - "scrollWheelVolumeControl": { - "adjustmentSteps": { - "label": "Velocidad cambiada por cada scroll con la rueda del ratón", - "title": "Ajustar el volumen que cambia por el scroll de la rueda del ratón" - }, - "enable": { - "label": "Control de volumen con la rueda", - "title": "Te permite usar la rueda del ratón para controlar el volumen del vídeo que estás viendo" - }, - "holdModifierKey": { - "enable": { - "label": "Activar al mantener pulsada la tecla modificadora", - "title": "Presione una tecla modificadora para activar el ajuste de volumen con la rueda del ratón." - }, - "optionLabel": "Tecla {{KEY}}", - "select": { - "label": "Tecla modificadora", - "title": "La tecla del modificador a usar" - } - }, - "holdRightClick": { - "enable": { - "label": "Activar al mantener pulsado el botón derecho", - "title": "Mantenga pulsado el botón derecho para activar el control de volumen con la rueda del ratón" - } - }, - "title": "Ajustes de control de volumen con la rueda del ratón" - }, - "settingSearch": { - "placeholder": "Search for a setting" - }, - "videoHistory": { - "enable": { - "label": "Track watched videos", - "title": "Keeps track of where you left off on videos you were watching and enables resuming playback" - }, - "resumeType": { - "select": { - "label": "Resume type", - "options": { - "automatic": "Automatic", - "prompt": "Prompt" - }, - "title": "Select how you want to resume videos" - } - }, - "title": "Video history settings" - }, - "volumeBoost": { - "boostAmount": { - "label": "Incremento de volumen (dB)", - "title": "Cuantos decibelios quieres aumentar el volumen" - }, - "enable": { - "label": "Potenciador de volumen", - "title": "Activar incremento de volumen" - }, - "mode": { - "select": { - "label": "Volume boost mode", - "options": { - "global": "Global", - "perVideo": "Por vídeo" - }, - "title": "Elegir cómo se aplica el aumento de volumen. 'Por vídeo' permite activar optimización para cada video individualmente en el menú de características. 'Global' aplica el boost a todos los vídeos cuando el aumento de volumen está activado." - } - }, - "title": "Ajustes de potenciado de volumen" - }, - "youtubeDataApiV3Key": { - "getApiKeyLinkText": "You can get one from here", - "input": { - "label": "API Key", - "title": "Enter your Youtube Data API V3 key." - }, - "title": "YouTube API V3 Key" - }, - "youtubeDeepDark": { - "author": "Author", - "co-authors": "Co-authors", - "colors": { - "colorShadow": { - "label": "Shadow color", - "title": "Color for shadows" - }, - "dimmerText": { - "label": "Secondary text color", - "title": "Color for secondary text" - }, - "hoverBackground": { - "label": "Hover background color", - "title": "Color for hover background" - }, - "mainBackground": { - "label": "Main background color", - "title": "Color for main background" - }, - "mainColor": { - "label": "Accent color", - "title": "Color for accent" - }, - "mainText": { - "label": "Main text color", - "title": "Color for main text" - }, - "secondBackground": { - "label": "Secondary background color", - "title": "Color for secondary background" - } - }, - "enable": { - "label": "Deep Dark Theme", - "title": "Activate the selected theme for the page" - }, - "select": { - "label": "Select theme", - "title": "Select a theme to be applied to the page" - }, - "title": "YouTube Deep Dark Settings" - } - } - } -} \ No newline at end of file + "langCode": "es-ES", + "langName": "Español", + "messages": { + "resumingVideo": "Reanudando vídeo en {{VIDEO_TIME}}", + "settingVolume": "Ajustando el potenciador de volumen a {{VOLUME_BOOST_AMOUNT}}" + }, + "pages": { + "content": { + "features": { + "copyTimestampUrlButton": { + "button": { + "copied": "Copied!", + "label": "Copy video URL with timestamp" + } + }, + "featureMenu": { + "button": { + "label": "Feature menu" + } + }, + "forwardRewindButtons": { + "buttons": { + "forwardButton": { + "label": "Fast forward by {{TIME}}" + }, + "rewindButton": { + "label": "Rewind by {{TIME}}" + } + } + }, + "hideEndScreenCardsButton": { + "button": { + "label": "Hide end screen cards", + "toggle": { + "off": "Show end screen cards", + "on": "Hide end screen cards" + } + } + }, + "loopButton": { + "button": { + "label": "Loop", + "toggle": { + "off": "Loop off", + "on": "Loop on" + } + } + }, + "maximizePlayerButton": { + "button": { + "label": "Maximize", + "toggle": { + "off": "Maximize off", + "on": "Maximize on" + } + } + }, + "openTranscriptButton": { + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Decrease Speed to {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Increase Speed to {{SPEED}}" + } + }, + "decreaseLimit": "Can't decrease further ({{SPEED}})", + "increaseLimit": "Can't increase further ({{SPEED}})" + }, + "playlistLength": { + "title": "Total length may not be accurate if some videos are hidden or if you haven't loaded enough videos to get the full length." + }, + "screenshotButton": { + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "Captura de pantalla copiada al portapapeles" + }, + "videoHistory": { + "resumeButton": "Reanudar", + "resumePrompt": { + "close": "Cerrar" + } + }, + "volumeBoostButton": { + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } + } + } + } + }, + "options": { + "notifications": { + "error": { + "scrollWheelHoldModifierKey": { + "sameKey": { + "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", + "volumeControl": "The scroll wheel volume control modifier key cannot be the same as the scroll wheel speed control modifier key." + } + } + }, + "info": { + "reset": "Todas las opciones han sido preestablecidas a sus valores de por defecto.\nAhora puedes guardarlas haciendo clic en el botón \"Confirmar\" o descartarlas cerrando esta página o ignorando esta notificación." + }, + "success": { + "saved": "Opciones guardadas." + } + } + } + }, + "settings": { + "clearData": { + "allDataDeleted": "Todos los datos han sido eliminados.", + "confirmAlert": "Esto eliminará todos los datos de la extensión relacionados con las opciones. ¿Continuar?" + }, + "optionDisabled": { + "either": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " or " + }, + "plural": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " and " + }, + "singular": "Enable '{{OPTION}}' to configure this option", + "specificOption": { + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + } + }, + "scrollForMoreSettings": "Scroll for more settings", + "sections": { + "automaticQuality": { + "enable": { + "label": "Habilitar ajuste automático de calidad", + "title": "Ajustar automáticamente la calidad del vídeo al nivel seleccionado." + }, + "fallbackQualityStrategy": { + "select": { + "label": "Quality fallback strategy", + "options": { + "higher": "Higher", + "lower": "Lower" + }, + "title": "The strategy to use when the selected quality is not available" + } + }, + "select": { + "label": "Calidad del reproductor", + "title": "La calidad a la que establecer el vídeo" + }, + "title": "Ajustes de calidad automáticos" + }, + "bottomButtons": { + "clear": { + "title": "Limpia todos los datos que esta extensión ha almacenado en su equipo", + "value": "Limpiar datos" + }, + "confirm": { + "title": "Confirma el restablecimiento de los ajustes", + "value": "Confirmar" + }, + "openTab": { + "title": "Open extension settings in a new tab" + }, + "reset": { + "title": "Restablece todos los ajustes a sus valores predeterminados, haga clic en el botón de confirmar para guardar los cambios", + "value": "Reestablecer" + } + }, + "buttonPlacement": { + "select": { + "buttonNames": { + "copyTimestampUrlButton": "Copy video URL with timestamp button", + "decreasePlaybackSpeedButton": "Decrease Speed button", + "forwardButton": "Fast Forward button", + "hideEndScreenCardsButton": "Hide end screen cards button", + "increasePlaybackSpeedButton": "Increase Speed button", + "loopButton": "Botón de repetición", + "maximizePlayerButton": "Maximizar botón", + "openTranscriptButton": "Abrir botón de transcripción", + "rewindButton": "Rewind button", + "screenshotButton": "Botón de captura de pantalla", + "volumeBoostButton": "Botón Aumento de Volumen" + }, + "options": { + "below_player": { + "placement": "debajo de los controles del reproductor", + "value": "Debajo del reproductor" + }, + "feature_menu": { + "placement": "in the feature menu", + "value": "Menú de funciones" + }, + "player_controls_left": { + "placement": "a la izquierda de los controles del reproductor", + "value": "Controles a la izquierda" + }, + "player_controls_right": { + "placement": "a la derecha de los controles del reproductor", + "value": "Controles a la derecha" + } + }, + "title": "Coloca el {{BUTTON_NAME}} a la {{PLACEMENT}}" + }, + "title": "Ajustes de posición de los botones" + }, + "customCSS": { + "editor": { + "collapse": "Colapsar editor", + "expand": "Expandir editor", + "noProblems": "No se encontraron problemas." + }, + "enable": { + "label": "Habilitar CSS personalizado", + "title": "Permite aplicar CSS personalizado a la página" + }, + "title": "Ajustes de CSS personalizados" + }, + "featureMenu": { + "openType": { + "select": { + "label": "Tipo de activación del menú", + "options": { + "click": "Click", + "hover": "Pasar el cursor por encima" + }, + "title": "Selecciona el método para abrir el menú" + }, + "title": "Configuración del menú" + } + }, + "forwardRewindButtons": { + "enable": { + "label": "Forward/rewind buttons", + "title": "Adds forward and rewind buttons to the video player" + }, + "time": { + "label": "Forward/rewind time", + "title": "The amount of time to forward/rewind the video by" + }, + "title": "Forward/rewind button settings" + }, + "importExportSettings": { + "exportButton": { + "success": "Ajustes exportados correctamente", + "title": "Exportar ajustes a un archivo JSON", + "value": "Exportar Ajustes" + }, + "importButton": { + "error": { + "unknown": "Error al importar la configuración. Por favor, compruebe el formato del archivo.\nUn error desconocido se ha producido.", + "validation": "Error al importar la configuración. Por favor, compruebe el formato del archivo.\n{{ERROR_MESSAGE}}" + }, + "success": "Ajustes importados correctamente", + "title": "Importar ajustes desde un archivo JSON", + "value": "Importar Ajustes" + } + }, + "language": { + "select": { + "label": "Idioma", + "title": "El idioma a usar para la extensión" + }, + "title": "Idioma" + }, + "miscellaneous": { + "features": { + "automaticTheaterMode": { + "label": "Modo cine automático", + "title": "Activar automáticamente el modo cine al cargar un vídeo" + }, + "automaticallyDisableAmbientMode": { + "label": "Automatically disable ambient mode", + "title": "Automatically disables ambient mode when you load a video" + }, + "automaticallyDisableClosedCaptions": { + "label": "Automatically disable closed captions", + "title": "Automatically disables closed captions when you load a video" + }, + "copyTimestampUrlButton": { + "label": "Copy video URL with timestamp button", + "title": "Copies video URL with timestamp (?t=123)" + }, + "defaultToOriginalAudioTrack": { + "label": "Default to original audio track", + "title": "Always default to the original audio track" + }, + "hideArtificialIntelligenceSummary": { + "label": "Hide AI summary", + "title": "Hides the artificial intelligence summary below videos" + }, + "hideEndScreenCards": { + "label": "Hide end screen cards", + "title": "Hides the cards at the end of the video" + }, + "hideEndScreenCardsButton": { + "label": "Hide end screen cards button", + "title": "Adds a button to show/hide the cards at the end of the video" + }, + "hideLiveStreamChat": { + "label": "Hide live stream chat", + "title": "Hides the live stream chat" + }, + "hideOfficialArtistVideosFromHomePage": { + "label": "Hide Official Artist Videos", + "title": "Hide Official Artist Videos from Home Page" + }, + "hidePaidPromotionBanner": { + "label": "Hide paid promotion banner", + "title": "Hides the banner that appears when you watch a video that has a paid promotion" + }, + "hidePlayables": { + "label": "Hide playables", + "title": "Hides all playables" + }, + "hideScrollbar": { + "label": "Ocultar barra de desplazamiento", + "title": "Oculta la barra de desplazamiento de la página" + }, + "hideShorts": { + "label": "Hide shorts", + "title": "Hides all shorts" + }, + "hideTranslateComment": { + "label": "Hide translate comment button", + "title": "Hides 'Translate to Language' button under comments" + }, + "loopButton": { + "label": "Botón de bucle", + "title": "Añade un botón al menú para poner en bucle el vídeo que estás viendo" + }, + "maximizePlayerButton": { + "label": "Botón de maximizar en el reproductor", + "title": "Añade un botón al menú para maximizar el reproductor" + }, + "openTranscriptButton": { + "label": "Botón \"Abrir transcripción\"", + "title": "Añade un botón al menú para abrir la transcripción del video que estás viendo" + }, + "openYouTubeSettingsOnHover": { + "label": "Abrir ajustes de YouTube al pasar el cursor", + "title": "Abre el menú de configuración de YouTube cuando pasa el cursor por encima del botón de ajustes" + }, + "pauseBackgroundPlayers": { + "label": "Pause background players", + "title": "Pauses video players in background tabs when you start a new player in foreground tab" + }, + "playlistRemover": { + "label": "Hide playlists from homepage", + "title": "Get rid of playlists from homepage" + }, + "remainingTime": { + "label": "Tiempo restante", + "title": "Muestra el tiempo restante del vídeo que estás viendo" + }, + "rememberLastVolume": { + "label": "Recordar el nivel de volumen", + "title": "Recuerda el volumen del último vídeo que estabas viendo y lo establece cuando abres un nuevo vídeo" + }, + "removeRedirect": { + "label": "Remove YouTube /redirect URLs", + "title": "Replaces YouTube redirect by actual URLs, skipping redirect warning dialogue" + }, + "restoreFullscreenScrolling": { + "label": "Restore fullscreen scrolling", + "title": "Restores scrolling in fullscreen mode" + }, + "shareShortener": { + "label": "Shorten YouTube video share link", + "title": "Shortens YouTube video share link (youtu.be) by stripping si/feature parameters from it" + }, + "shortsAutoScroll": { + "label": "Shorts auto scroll", + "title": "Automatically scrolls to the next short" + }, + "skipContinueWatching": { + "label": "Skip \"Video is paused. Continue watching?\"", + "title": "Skips the idle dialog that pauses video playback" + } + }, + "title": "Ajustes varios" + }, + "onScreenDisplaySettings": { + "color": { + "label": "Color", + "options": { + "blue": "Azul", + "green": "Verde", + "orange": "Naranja", + "pink": "Rosa", + "purple": "Morado", + "red": "Rojo", + "white": "Blanco", + "yellow": "Amarillo" + }, + "title": "Select the color for the On-Screen Display" + }, + "hide": { + "label": "Oculta el retardo", + "title": "Specify the time, in milliseconds, before automatically hiding the On-Screen Display" + }, + "opacity": { + "label": "Opacidad", + "title": "Adjust the transparency of the On-Screen Display" + }, + "padding": { + "label": "Margen", + "title": "Adjust the spacing around the On-Screen Display in pixels. This applies specifically to corner On-Screen Display." + }, + "position": { + "label": "Posición", + "options": { + "bottom_left": "Parte inferior izquierda", + "bottom_right": "Parte inferior derecha", + "center": "Centrado", + "top_left": "Parte superior izquierda", + "top_right": "Parte superior derecha" + }, + "title": "Select the position of the On-Screen Display" + }, + "title": "On-Screen Display Settings", + "type": { + "label": "Tipo", + "options": { + "circle": "Circle", + "line": "Línea", + "no_display": "No mostrar", + "text": "Texto" + }, + "title": "Select the type of On-Screen Display" + } + }, + "playbackSpeed": { + "enable": { + "label": "Velocidad de reproducción forzada", + "title": "Establece la velocidad del video a lo que elijas a continuación" + }, + "playbackSpeedButtons": { + "label": "Playback speed buttons", + "select": { + "label": "Playback buttons speed", + "title": "Amount of speed to be changed per click" + }, + "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" + }, + "select": { + "label": "Velocidad del reproductor", + "title": "La velocidad a la que ajustar el vídeo" + }, + "title": "Ajustes de velocidad de reproducción" + }, + "playlistLength": { + "enable": { + "label": "Display playlist length information", + "title": "Shows the total length of the playlist, how much has been watched, and how much remains." + }, + "title": "Playlist length settings", + "wayToGetLength": { + "select": { + "label": "Method to get playlist length", + "title": "The way to get playlist length information (API method will fallback to HTML if an error occurs)" + } + }, + "wayToGetWatchTime": { + "select": { + "label": "Method to get watched time", + "options": { + "duration": "Video Length", + "youtube": "Video Watch Time" + }, + "title": "The way to get the amount of time watched (Video Length type only used on watch page)" + } + } + }, + "screenshotButton": { + "enable": { + "label": "Botón de captura de pantalla", + "title": "Añade un botón al reproductor para capturar la pantalal del vídeo que estás viendo" + }, + "saveAs": { + "clipboard": "Portapapeles", + "file": "Archivo" + }, + "selectFormat": { + "label": "Formato de captura de pantalla", + "title": "El formato en el que guardar la captura de pantalla" + }, + "selectSaveAs": { + "label": "Método de guardado de captura de pantalla", + "title": "Método de guardado sobre el que se guardará la captura de pantalla" + }, + "title": "Ajustes de captura de pantalla" + }, + "scrollWheelSpeedControl": { + "adjustmentSteps": { + "label": "Volumen cambiado por cada scroll con la rueda del ratón", + "title": "Ajustar la velocidad que cambia por el scroll de la rueda del ratón" + }, + "enable": { + "label": "Control de velocidad con la rueda", + "title": "Pulsa una tecla para activar el ajuste de velocidad con la rueda del ratón." + }, + "optionLabel": "Tecla {{KEY}}", + "select": { + "label": "Tecla modificadora", + "title": "Tecla a usar" + }, + "title": "Ajustes sobre el control de velocidad con la rueda del ratón" + }, + "scrollWheelVolumeControl": { + "adjustmentSteps": { + "label": "Velocidad cambiada por cada scroll con la rueda del ratón", + "title": "Ajustar el volumen que cambia por el scroll de la rueda del ratón" + }, + "enable": { + "label": "Control de volumen con la rueda", + "title": "Te permite usar la rueda del ratón para controlar el volumen del vídeo que estás viendo" + }, + "holdModifierKey": { + "enable": { + "label": "Activar al mantener pulsada la tecla modificadora", + "title": "Presione una tecla modificadora para activar el ajuste de volumen con la rueda del ratón." + }, + "optionLabel": "Tecla {{KEY}}", + "select": { + "label": "Tecla modificadora", + "title": "La tecla del modificador a usar" + } + }, + "holdRightClick": { + "enable": { + "label": "Activar al mantener pulsado el botón derecho", + "title": "Mantenga pulsado el botón derecho para activar el control de volumen con la rueda del ratón" + } + }, + "title": "Ajustes de control de volumen con la rueda del ratón" + }, + "settingSearch": { + "placeholder": "Search for a setting" + }, + "videoHistory": { + "enable": { + "label": "Track watched videos", + "title": "Keeps track of where you left off on videos you were watching and enables resuming playback" + }, + "resumeType": { + "select": { + "label": "Resume type", + "options": { + "automatic": "Automatic", + "prompt": "Prompt" + }, + "title": "Select how you want to resume videos" + } + }, + "title": "Video history settings" + }, + "volumeBoost": { + "boostAmount": { + "label": "Incremento de volumen (dB)", + "title": "Cuantos decibelios quieres aumentar el volumen" + }, + "enable": { + "label": "Potenciador de volumen", + "title": "Activar incremento de volumen" + }, + "mode": { + "select": { + "label": "Volume boost mode", + "options": { + "global": "Global", + "perVideo": "Por vídeo" + }, + "title": "Elegir cómo se aplica el aumento de volumen. 'Por vídeo' permite activar optimización para cada video individualmente en el menú de características. 'Global' aplica el boost a todos los vídeos cuando el aumento de volumen está activado." + } + }, + "title": "Ajustes de potenciado de volumen" + }, + "youtubeDataApiV3Key": { + "getApiKeyLinkText": "You can get one from here", + "input": { + "label": "API Key", + "title": "Enter your Youtube Data API V3 key." + }, + "title": "YouTube API V3 Key" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background color", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background color", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Deep Dark Theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" + } + } + } +} diff --git a/public/locales/he-IL.json b/public/locales/he-IL.json index 6bcf20f80..76c2c0124 100644 --- a/public/locales/he-IL.json +++ b/public/locales/he-IL.json @@ -1,642 +1,642 @@ { - "langCode": "he-IL", - "langName": "עברית", - "messages": { - "resumingVideo": "Resuming video at {{VIDEO_TIME}}", - "settingVolume": "Setting volume boost to {{VOLUME_BOOST_AMOUNT}}" - }, - "pages": { - "content": { - "features": { - "copyTimestampUrlButton": { - "button": { - "copied": "Copied!", - "label": "Copy video URL with timestamp" - } - }, - "featureMenu": { - "button": { - "label": "Feature menu" - } - }, - "forwardRewindButtons": { - "buttons": { - "forwardButton": { - "label": "Fast forward by {{TIME}}" - }, - "rewindButton": { - "label": "Rewind by {{TIME}}" - } - } - }, - "hideEndScreenCardsButton": { - "button": { - "label": "Hide end screen cards", - "toggle": { - "off": "Show end screen cards", - "on": "Hide end screen cards" - } - } - }, - "loopButton": { - "button": { - "label": "Loop", - "toggle": { - "off": "Loop off", - "on": "Loop on" - } - } - }, - "maximizePlayerButton": { - "button": { - "label": "Maximize", - "toggle": { - "off": "Maximize off", - "on": "Maximize on" - } - } - }, - "openTranscriptButton": { - "button": { - "label": "Open transcript" - } - }, - "playbackSpeedButtons": { - "buttons": { - "decreasePlaybackSpeedButton": { - "label": "Decrease Speed to {{SPEED}}" - }, - "increasePlaybackSpeedButton": { - "label": "Increase Speed to {{SPEED}}" - } - }, - "decreaseLimit": "Can't decrease further ({{SPEED}})", - "increaseLimit": "Can't increase further ({{SPEED}})" - }, - "playlistLength": { - "title": "Total length may not be accurate if some videos are hidden or if you haven't loaded enough videos to get the full length." - }, - "screenshotButton": { - "button": { - "label": "Screenshot" - }, - "copiedToClipboard": "Screenshot copied to clipboard" - }, - "videoHistory": { - "resumeButton": "Resume", - "resumePrompt": { - "close": "Close" - } - }, - "volumeBoostButton": { - "button": { - "label": "Volume Boost", - "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" - } - } - } - } - }, - "options": { - "notifications": { - "error": { - "scrollWheelHoldModifierKey": { - "sameKey": { - "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", - "volumeControl": "The scroll wheel volume control modifier key cannot be the same as the scroll wheel speed control modifier key." - } - } - }, - "info": { - "reset": "All options have been reset to their default values.\nYou can now save the changes by clicking the \"Confirm\" button or discard them by closing this page or ignore this notification." - }, - "success": { - "saved": "Options saved." - } - } - } - }, - "settings": { - "clearData": { - "allDataDeleted": "All data has been deleted.", - "confirmAlert": "This will delete all extension data related to options. Continue?" - }, - "optionDisabled": { - "either": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " or " - }, - "plural": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " and " - }, - "singular": "Enable '{{OPTION}}' to configure this option", - "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." - } - }, - "scrollForMoreSettings": "Scroll for more settings", - "sections": { - "automaticQuality": { - "enable": { - "label": "Automatic quality adjustment", - "title": "Automatically adjusts the video quality to the selected level." - }, - "fallbackQualityStrategy": { - "select": { - "label": "Quality fallback strategy", - "options": { - "higher": "Higher", - "lower": "Lower" - }, - "title": "The strategy to use when the selected quality is not available" - } - }, - "select": { - "label": "Player quality", - "title": "The quality to set the video to" - }, - "title": "Automatic quality settings" - }, - "bottomButtons": { - "clear": { - "title": "Clears all data this extension has stored on your machine", - "value": "Clear Data" - }, - "confirm": { - "title": "Confirm setting reset", - "value": "Confirm" - }, - "openTab": { - "title": "Open extension settings in a new tab" - }, - "reset": { - "title": "Resets all settings to their defaults, Click the confirm button to save the changes", - "value": "Reset" - } - }, - "buttonPlacement": { - "select": { - "buttonNames": { - "copyTimestampUrlButton": "Copy video URL with timestamp button", - "decreasePlaybackSpeedButton": "Decrease Speed button", - "forwardButton": "Fast Forward button", - "hideEndScreenCardsButton": "Hide end screen cards button", - "increasePlaybackSpeedButton": "Increase Speed button", - "loopButton": "Loop button", - "maximizePlayerButton": "Maximize button", - "openTranscriptButton": "Open Transcript button", - "rewindButton": "Rewind button", - "screenshotButton": "Screenshot button", - "volumeBoostButton": "Volume Boost button" - }, - "options": { - "below_player": { - "placement": "below the player controls", - "value": "Below Player" - }, - "feature_menu": { - "placement": "in the feature menu", - "value": "Feature Menu" - }, - "player_controls_left": { - "placement": "on the left side of player controls", - "value": "Left Controls" - }, - "player_controls_right": { - "placement": "on the right side of player controls", - "value": "Right Controls" - } - }, - "title": "Place the {{BUTTON_NAME}} {{PLACEMENT}}" - }, - "title": "Button Placement Settings" - }, - "customCSS": { - "editor": { - "collapse": "Collapse Editor", - "expand": "Expand Editor", - "noProblems": "No problems found." - }, - "enable": { - "label": "Custom CSS", - "title": "Enables custom CSS to be applied to the page" - }, - "title": "Custom CSS Settings" - }, - "featureMenu": { - "openType": { - "select": { - "label": "Menu Activation Type", - "options": { - "click": "Click", - "hover": "Hover" - }, - "title": "Select the method to activate the feature menu" - }, - "title": "Feature menu settings" - } - }, - "forwardRewindButtons": { - "enable": { - "label": "Forward/rewind buttons", - "title": "Adds forward and rewind buttons to the video player" - }, - "time": { - "label": "Forward/rewind time", - "title": "The amount of time to forward/rewind the video by" - }, - "title": "Forward/rewind button settings" - }, - "importExportSettings": { - "exportButton": { - "success": "Settings successfully exported", - "title": "Export settings to a JSON file", - "value": "Export Settings" - }, - "importButton": { - "error": { - "unknown": "Error importing settings. Please check the file format.\nAn unknown error occurred.", - "validation": "Error importing settings. Please check the file format.\n{{ERROR_MESSAGE}}" - }, - "success": "Settings imported successfully", - "title": "Import settings from a JSON file", - "value": "Import Settings" - } - }, - "language": { - "select": { - "label": "Language", - "title": "The language to use for the extension" - }, - "title": "Language" - }, - "miscellaneous": { - "features": { - "automaticTheaterMode": { - "label": "Automatic theater mode", - "title": "Automatically enables theater mode when you load a video" - }, - "automaticallyDisableAmbientMode": { - "label": "Automatically disable ambient mode", - "title": "Automatically disables ambient mode when you load a video" - }, - "automaticallyDisableClosedCaptions": { - "label": "Automatically disable closed captions", - "title": "Automatically disables closed captions when you load a video" - }, - "copyTimestampUrlButton": { - "label": "Copy video URL with timestamp button", - "title": "Copies video URL with timestamp (?t=123)" - }, - "defaultToOriginalAudioTrack": { - "label": "Default to original audio track", - "title": "Always default to the original audio track" - }, - "hideArtificialIntelligenceSummary": { - "label": "Hide AI summary", - "title": "Hides the artificial intelligence summary below videos" - }, - "hideEndScreenCards": { - "label": "Hide end screen cards", - "title": "Hides the cards at the end of the video" - }, - "hideEndScreenCardsButton": { - "label": "Hide end screen cards button", - "title": "Adds a button to show/hide the cards at the end of the video" - }, - "hideLiveStreamChat": { - "label": "Hide live stream chat", - "title": "Hides the live stream chat" - }, - "hideOfficialArtistVideosFromHomePage": { - "label": "Hide Official Artist Videos", - "title": "Hide Official Artist Videos from Home Page" - }, - "hidePaidPromotionBanner": { - "label": "Hide paid promotion banner", - "title": "Hides the banner that appears when you watch a video that has a paid promotion" - }, - "hidePlayables": { - "label": "Hide playables", - "title": "Hides all playables" - }, - "hideScrollbar": { - "label": "Hide scrollbar", - "title": "Hides the pages scrollbar" - }, - "hideShorts": { - "label": "Hide shorts", - "title": "Hides all shorts" - }, - "hideTranslateComment": { - "label": "Hide translate comment button", - "title": "Hides 'Translate to Language' button under comments" - }, - "loopButton": { - "label": "Loop button", - "title": "Adds a button to the feature menu to loop the video you're watching" - }, - "maximizePlayerButton": { - "label": "Maximize player button", - "title": "Adds a button to the feature menu to maximize the player" - }, - "openTranscriptButton": { - "label": "Open transcript button", - "title": "Adds a button to the feature menu to open the transcript of the video you're watching" - }, - "openYouTubeSettingsOnHover": { - "label": "Open YouTube settings on hover", - "title": "Opens the YouTube settings menu when you hover over the settings button" - }, - "pauseBackgroundPlayers": { - "label": "Pause background players", - "title": "Pauses video players in background tabs when you start a new player in foreground tab" - }, - "playlistRemover": { - "label": "Hide playlists from homepage", - "title": "Get rid of playlists from homepage" - }, - "remainingTime": { - "label": "Remaining time", - "title": "Shows the remaining time of the video you're watching" - }, - "rememberLastVolume": { - "label": "Remember last volume", - "title": "Remembers the volume of the last video you were watching and sets it when you open a new video" - }, - "removeRedirect": { - "label": "Remove YouTube /redirect URLs", - "title": "Replaces YouTube redirect by actual URLs, skipping redirect warning dialogue" - }, - "restoreFullscreenScrolling": { - "label": "Restore fullscreen scrolling", - "title": "Restores scrolling in fullscreen mode" - }, - "shareShortener": { - "label": "Shorten YouTube video share link", - "title": "Shortens YouTube video share link (youtu.be) by stripping si/feature parameters from it" - }, - "shortsAutoScroll": { - "label": "Shorts auto scroll", - "title": "Automatically scrolls to the next short" - }, - "skipContinueWatching": { - "label": "Skip \"Video is paused. Continue watching?\"", - "title": "Skips the idle dialog that pauses video playback" - } - }, - "title": "Miscellaneous settings" - }, - "onScreenDisplaySettings": { - "color": { - "label": "Color", - "options": { - "blue": "Blue", - "green": "Green", - "orange": "Orange", - "pink": "Pink", - "purple": "Purple", - "red": "Red", - "white": "White", - "yellow": "Yellow" - }, - "title": "Select the color for the On-Screen Display" - }, - "hide": { - "label": "Hide Delay", - "title": "Specify the time, in milliseconds, before automatically hiding the On-Screen Display" - }, - "opacity": { - "label": "Opacity", - "title": "Adjust the transparency of the On-Screen Display" - }, - "padding": { - "label": "Padding", - "title": "Adjust the spacing around the On-Screen Display in pixels. This applies specifically to corner On-Screen Display." - }, - "position": { - "label": "Position", - "options": { - "bottom_left": "Bottom Left", - "bottom_right": "Bottom Right", - "center": "Center", - "top_left": "Top Left", - "top_right": "Top Right" - }, - "title": "Select the position of the On-Screen Display" - }, - "title": "On-Screen Display Settings", - "type": { - "label": "Type", - "options": { - "circle": "Circle", - "line": "Line", - "no_display": "No display", - "text": "Text" - }, - "title": "Select the type of On-Screen Display" - } - }, - "playbackSpeed": { - "enable": { - "label": "Forced playback speed", - "title": "Sets the video speed to what you choose below" - }, - "playbackSpeedButtons": { - "label": "Playback speed buttons", - "select": { - "label": "Playback buttons speed", - "title": "Amount of speed to be changed per click" - }, - "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" - }, - "select": { - "label": "Player speed", - "title": "The speed to set the video to" - }, - "title": "Playback speed settings" - }, - "playlistLength": { - "enable": { - "label": "Display playlist length information", - "title": "Shows the total length of the playlist, how much has been watched, and how much remains." - }, - "title": "Playlist length settings", - "wayToGetLength": { - "select": { - "label": "Method to get playlist length", - "title": "The way to get playlist length information (API method will fallback to HTML if an error occurs)" - } - }, - "wayToGetWatchTime": { - "select": { - "label": "Method to get watched time", - "options": { - "duration": "Video Length", - "youtube": "Video Watch Time" - }, - "title": "The way to get the amount of time watched (Video Length type only used on watch page)" - } - } - }, - "screenshotButton": { - "enable": { - "label": "Screenshot button", - "title": "Adds a button to the player to take a screenshot of the video" - }, - "saveAs": { - "clipboard": "Clipboard", - "file": "File" - }, - "selectFormat": { - "label": "Screenshot format", - "title": "The format to save the screenshot in" - }, - "selectSaveAs": { - "label": "Screenshot save type", - "title": "The screenshot save type" - }, - "title": "Screenshot settings" - }, - "scrollWheelSpeedControl": { - "adjustmentSteps": { - "label": "Speed Change Per Scroll", - "title": "Adjust the speed change per scroll" - }, - "enable": { - "label": "Scroll wheel speed control", - "title": "Press a modifier key to enable speed adjustment with the scroll wheel." - }, - "optionLabel": "{{KEY}} key", - "select": { - "label": "Modifier key", - "title": "The modifier key to use" - }, - "title": "Scroll wheel speed control settings" - }, - "scrollWheelVolumeControl": { - "adjustmentSteps": { - "label": "Volume Change Per Scroll", - "title": "Adjust the volume change per scroll" - }, - "enable": { - "label": "Scroll wheel volume control", - "title": "Lets you use the scroll wheel to control the volume of the video you're watching" - }, - "holdModifierKey": { - "enable": { - "label": "When holding modifier key", - "title": "Press a modifier key to enable volume adjustment with the scroll wheel." - }, - "optionLabel": "{{KEY}} key", - "select": { - "label": "Modifier key", - "title": "The modifier key to use" - } - }, - "holdRightClick": { - "enable": { - "label": "When holding right click", - "title": "Hold right click to enable scroll wheel volume control" - } - }, - "title": "Scroll wheel volume control settings" - }, - "settingSearch": { - "placeholder": "Search for a setting" - }, - "videoHistory": { - "enable": { - "label": "Track watched videos", - "title": "Keeps track of where you left off on videos you were watching and enables resuming playback" - }, - "resumeType": { - "select": { - "label": "Resume type", - "options": { - "automatic": "Automatic", - "prompt": "Prompt" - }, - "title": "Select how you want to resume videos" - } - }, - "title": "Video history settings" - }, - "volumeBoost": { - "boostAmount": { - "label": "Volume boost amount (dB)", - "title": "The amount to boost the volume by" - }, - "enable": { - "label": "Volume boost", - "title": "Enable volume boost" - }, - "mode": { - "select": { - "label": "Volume boost mode", - "options": { - "global": "Global", - "perVideo": "Per video" - }, - "title": "Choose how volume boost is applied. 'Per video' allows enabling boost for each video individually in the feature menu. 'Global' applies boost to all videos when volume boost is enabled." - } - }, - "title": "Volume boost settings" - }, - "youtubeDataApiV3Key": { - "getApiKeyLinkText": "You can get one from here", - "input": { - "label": "API Key", - "title": "Enter your Youtube Data API V3 key." - }, - "title": "YouTube API V3 Key" - }, - "youtubeDeepDark": { - "author": "Author", - "co-authors": "Co-authors", - "colors": { - "colorShadow": { - "label": "Shadow color", - "title": "Color for shadows" - }, - "dimmerText": { - "label": "Secondary text color", - "title": "Color for secondary text" - }, - "hoverBackground": { - "label": "Hover background color", - "title": "Color for hover background" - }, - "mainBackground": { - "label": "Main background color", - "title": "Color for main background" - }, - "mainColor": { - "label": "Accent color", - "title": "Color for accent" - }, - "mainText": { - "label": "Main text color", - "title": "Color for main text" - }, - "secondBackground": { - "label": "Secondary background color", - "title": "Color for secondary background" - } - }, - "enable": { - "label": "Deep Dark Theme", - "title": "Activate the selected theme for the page" - }, - "select": { - "label": "Select theme", - "title": "Select a theme to be applied to the page" - }, - "title": "YouTube Deep Dark Settings" - } - } - } -} \ No newline at end of file + "langCode": "he-IL", + "langName": "עברית", + "messages": { + "resumingVideo": "Resuming video at {{VIDEO_TIME}}", + "settingVolume": "Setting volume boost to {{VOLUME_BOOST_AMOUNT}}" + }, + "pages": { + "content": { + "features": { + "copyTimestampUrlButton": { + "button": { + "copied": "Copied!", + "label": "Copy video URL with timestamp" + } + }, + "featureMenu": { + "button": { + "label": "Feature menu" + } + }, + "forwardRewindButtons": { + "buttons": { + "forwardButton": { + "label": "Fast forward by {{TIME}}" + }, + "rewindButton": { + "label": "Rewind by {{TIME}}" + } + } + }, + "hideEndScreenCardsButton": { + "button": { + "label": "Hide end screen cards", + "toggle": { + "off": "Show end screen cards", + "on": "Hide end screen cards" + } + } + }, + "loopButton": { + "button": { + "label": "Loop", + "toggle": { + "off": "Loop off", + "on": "Loop on" + } + } + }, + "maximizePlayerButton": { + "button": { + "label": "Maximize", + "toggle": { + "off": "Maximize off", + "on": "Maximize on" + } + } + }, + "openTranscriptButton": { + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Decrease Speed to {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Increase Speed to {{SPEED}}" + } + }, + "decreaseLimit": "Can't decrease further ({{SPEED}})", + "increaseLimit": "Can't increase further ({{SPEED}})" + }, + "playlistLength": { + "title": "Total length may not be accurate if some videos are hidden or if you haven't loaded enough videos to get the full length." + }, + "screenshotButton": { + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "Screenshot copied to clipboard" + }, + "videoHistory": { + "resumeButton": "Resume", + "resumePrompt": { + "close": "Close" + } + }, + "volumeBoostButton": { + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } + } + } + } + }, + "options": { + "notifications": { + "error": { + "scrollWheelHoldModifierKey": { + "sameKey": { + "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", + "volumeControl": "The scroll wheel volume control modifier key cannot be the same as the scroll wheel speed control modifier key." + } + } + }, + "info": { + "reset": "All options have been reset to their default values.\nYou can now save the changes by clicking the \"Confirm\" button or discard them by closing this page or ignore this notification." + }, + "success": { + "saved": "Options saved." + } + } + } + }, + "settings": { + "clearData": { + "allDataDeleted": "All data has been deleted.", + "confirmAlert": "This will delete all extension data related to options. Continue?" + }, + "optionDisabled": { + "either": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " or " + }, + "plural": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " and " + }, + "singular": "Enable '{{OPTION}}' to configure this option", + "specificOption": { + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + } + }, + "scrollForMoreSettings": "Scroll for more settings", + "sections": { + "automaticQuality": { + "enable": { + "label": "Automatic quality adjustment", + "title": "Automatically adjusts the video quality to the selected level." + }, + "fallbackQualityStrategy": { + "select": { + "label": "Quality fallback strategy", + "options": { + "higher": "Higher", + "lower": "Lower" + }, + "title": "The strategy to use when the selected quality is not available" + } + }, + "select": { + "label": "Player quality", + "title": "The quality to set the video to" + }, + "title": "Automatic quality settings" + }, + "bottomButtons": { + "clear": { + "title": "Clears all data this extension has stored on your machine", + "value": "Clear Data" + }, + "confirm": { + "title": "Confirm setting reset", + "value": "Confirm" + }, + "openTab": { + "title": "Open extension settings in a new tab" + }, + "reset": { + "title": "Resets all settings to their defaults, Click the confirm button to save the changes", + "value": "Reset" + } + }, + "buttonPlacement": { + "select": { + "buttonNames": { + "copyTimestampUrlButton": "Copy video URL with timestamp button", + "decreasePlaybackSpeedButton": "Decrease Speed button", + "forwardButton": "Fast Forward button", + "hideEndScreenCardsButton": "Hide end screen cards button", + "increasePlaybackSpeedButton": "Increase Speed button", + "loopButton": "Loop button", + "maximizePlayerButton": "Maximize button", + "openTranscriptButton": "Open Transcript button", + "rewindButton": "Rewind button", + "screenshotButton": "Screenshot button", + "volumeBoostButton": "Volume Boost button" + }, + "options": { + "below_player": { + "placement": "below the player controls", + "value": "Below Player" + }, + "feature_menu": { + "placement": "in the feature menu", + "value": "Feature Menu" + }, + "player_controls_left": { + "placement": "on the left side of player controls", + "value": "Left Controls" + }, + "player_controls_right": { + "placement": "on the right side of player controls", + "value": "Right Controls" + } + }, + "title": "Place the {{BUTTON_NAME}} {{PLACEMENT}}" + }, + "title": "Button Placement Settings" + }, + "customCSS": { + "editor": { + "collapse": "Collapse Editor", + "expand": "Expand Editor", + "noProblems": "No problems found." + }, + "enable": { + "label": "Custom CSS", + "title": "Enables custom CSS to be applied to the page" + }, + "title": "Custom CSS Settings" + }, + "featureMenu": { + "openType": { + "select": { + "label": "Menu Activation Type", + "options": { + "click": "Click", + "hover": "Hover" + }, + "title": "Select the method to activate the feature menu" + }, + "title": "Feature menu settings" + } + }, + "forwardRewindButtons": { + "enable": { + "label": "Forward/rewind buttons", + "title": "Adds forward and rewind buttons to the video player" + }, + "time": { + "label": "Forward/rewind time", + "title": "The amount of time to forward/rewind the video by" + }, + "title": "Forward/rewind button settings" + }, + "importExportSettings": { + "exportButton": { + "success": "Settings successfully exported", + "title": "Export settings to a JSON file", + "value": "Export Settings" + }, + "importButton": { + "error": { + "unknown": "Error importing settings. Please check the file format.\nAn unknown error occurred.", + "validation": "Error importing settings. Please check the file format.\n{{ERROR_MESSAGE}}" + }, + "success": "Settings imported successfully", + "title": "Import settings from a JSON file", + "value": "Import Settings" + } + }, + "language": { + "select": { + "label": "Language", + "title": "The language to use for the extension" + }, + "title": "Language" + }, + "miscellaneous": { + "features": { + "automaticTheaterMode": { + "label": "Automatic theater mode", + "title": "Automatically enables theater mode when you load a video" + }, + "automaticallyDisableAmbientMode": { + "label": "Automatically disable ambient mode", + "title": "Automatically disables ambient mode when you load a video" + }, + "automaticallyDisableClosedCaptions": { + "label": "Automatically disable closed captions", + "title": "Automatically disables closed captions when you load a video" + }, + "copyTimestampUrlButton": { + "label": "Copy video URL with timestamp button", + "title": "Copies video URL with timestamp (?t=123)" + }, + "defaultToOriginalAudioTrack": { + "label": "Default to original audio track", + "title": "Always default to the original audio track" + }, + "hideArtificialIntelligenceSummary": { + "label": "Hide AI summary", + "title": "Hides the artificial intelligence summary below videos" + }, + "hideEndScreenCards": { + "label": "Hide end screen cards", + "title": "Hides the cards at the end of the video" + }, + "hideEndScreenCardsButton": { + "label": "Hide end screen cards button", + "title": "Adds a button to show/hide the cards at the end of the video" + }, + "hideLiveStreamChat": { + "label": "Hide live stream chat", + "title": "Hides the live stream chat" + }, + "hideOfficialArtistVideosFromHomePage": { + "label": "Hide Official Artist Videos", + "title": "Hide Official Artist Videos from Home Page" + }, + "hidePaidPromotionBanner": { + "label": "Hide paid promotion banner", + "title": "Hides the banner that appears when you watch a video that has a paid promotion" + }, + "hidePlayables": { + "label": "Hide playables", + "title": "Hides all playables" + }, + "hideScrollbar": { + "label": "Hide scrollbar", + "title": "Hides the pages scrollbar" + }, + "hideShorts": { + "label": "Hide shorts", + "title": "Hides all shorts" + }, + "hideTranslateComment": { + "label": "Hide translate comment button", + "title": "Hides 'Translate to Language' button under comments" + }, + "loopButton": { + "label": "Loop button", + "title": "Adds a button to the feature menu to loop the video you're watching" + }, + "maximizePlayerButton": { + "label": "Maximize player button", + "title": "Adds a button to the feature menu to maximize the player" + }, + "openTranscriptButton": { + "label": "Open transcript button", + "title": "Adds a button to the feature menu to open the transcript of the video you're watching" + }, + "openYouTubeSettingsOnHover": { + "label": "Open YouTube settings on hover", + "title": "Opens the YouTube settings menu when you hover over the settings button" + }, + "pauseBackgroundPlayers": { + "label": "Pause background players", + "title": "Pauses video players in background tabs when you start a new player in foreground tab" + }, + "playlistRemover": { + "label": "Hide playlists from homepage", + "title": "Get rid of playlists from homepage" + }, + "remainingTime": { + "label": "Remaining time", + "title": "Shows the remaining time of the video you're watching" + }, + "rememberLastVolume": { + "label": "Remember last volume", + "title": "Remembers the volume of the last video you were watching and sets it when you open a new video" + }, + "removeRedirect": { + "label": "Remove YouTube /redirect URLs", + "title": "Replaces YouTube redirect by actual URLs, skipping redirect warning dialogue" + }, + "restoreFullscreenScrolling": { + "label": "Restore fullscreen scrolling", + "title": "Restores scrolling in fullscreen mode" + }, + "shareShortener": { + "label": "Shorten YouTube video share link", + "title": "Shortens YouTube video share link (youtu.be) by stripping si/feature parameters from it" + }, + "shortsAutoScroll": { + "label": "Shorts auto scroll", + "title": "Automatically scrolls to the next short" + }, + "skipContinueWatching": { + "label": "Skip \"Video is paused. Continue watching?\"", + "title": "Skips the idle dialog that pauses video playback" + } + }, + "title": "Miscellaneous settings" + }, + "onScreenDisplaySettings": { + "color": { + "label": "Color", + "options": { + "blue": "Blue", + "green": "Green", + "orange": "Orange", + "pink": "Pink", + "purple": "Purple", + "red": "Red", + "white": "White", + "yellow": "Yellow" + }, + "title": "Select the color for the On-Screen Display" + }, + "hide": { + "label": "Hide Delay", + "title": "Specify the time, in milliseconds, before automatically hiding the On-Screen Display" + }, + "opacity": { + "label": "Opacity", + "title": "Adjust the transparency of the On-Screen Display" + }, + "padding": { + "label": "Padding", + "title": "Adjust the spacing around the On-Screen Display in pixels. This applies specifically to corner On-Screen Display." + }, + "position": { + "label": "Position", + "options": { + "bottom_left": "Bottom Left", + "bottom_right": "Bottom Right", + "center": "Center", + "top_left": "Top Left", + "top_right": "Top Right" + }, + "title": "Select the position of the On-Screen Display" + }, + "title": "On-Screen Display Settings", + "type": { + "label": "Type", + "options": { + "circle": "Circle", + "line": "Line", + "no_display": "No display", + "text": "Text" + }, + "title": "Select the type of On-Screen Display" + } + }, + "playbackSpeed": { + "enable": { + "label": "Forced playback speed", + "title": "Sets the video speed to what you choose below" + }, + "playbackSpeedButtons": { + "label": "Playback speed buttons", + "select": { + "label": "Playback buttons speed", + "title": "Amount of speed to be changed per click" + }, + "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" + }, + "select": { + "label": "Player speed", + "title": "The speed to set the video to" + }, + "title": "Playback speed settings" + }, + "playlistLength": { + "enable": { + "label": "Display playlist length information", + "title": "Shows the total length of the playlist, how much has been watched, and how much remains." + }, + "title": "Playlist length settings", + "wayToGetLength": { + "select": { + "label": "Method to get playlist length", + "title": "The way to get playlist length information (API method will fallback to HTML if an error occurs)" + } + }, + "wayToGetWatchTime": { + "select": { + "label": "Method to get watched time", + "options": { + "duration": "Video Length", + "youtube": "Video Watch Time" + }, + "title": "The way to get the amount of time watched (Video Length type only used on watch page)" + } + } + }, + "screenshotButton": { + "enable": { + "label": "Screenshot button", + "title": "Adds a button to the player to take a screenshot of the video" + }, + "saveAs": { + "clipboard": "Clipboard", + "file": "File" + }, + "selectFormat": { + "label": "Screenshot format", + "title": "The format to save the screenshot in" + }, + "selectSaveAs": { + "label": "Screenshot save type", + "title": "The screenshot save type" + }, + "title": "Screenshot settings" + }, + "scrollWheelSpeedControl": { + "adjustmentSteps": { + "label": "Speed Change Per Scroll", + "title": "Adjust the speed change per scroll" + }, + "enable": { + "label": "Scroll wheel speed control", + "title": "Press a modifier key to enable speed adjustment with the scroll wheel." + }, + "optionLabel": "{{KEY}} key", + "select": { + "label": "Modifier key", + "title": "The modifier key to use" + }, + "title": "Scroll wheel speed control settings" + }, + "scrollWheelVolumeControl": { + "adjustmentSteps": { + "label": "Volume Change Per Scroll", + "title": "Adjust the volume change per scroll" + }, + "enable": { + "label": "Scroll wheel volume control", + "title": "Lets you use the scroll wheel to control the volume of the video you're watching" + }, + "holdModifierKey": { + "enable": { + "label": "When holding modifier key", + "title": "Press a modifier key to enable volume adjustment with the scroll wheel." + }, + "optionLabel": "{{KEY}} key", + "select": { + "label": "Modifier key", + "title": "The modifier key to use" + } + }, + "holdRightClick": { + "enable": { + "label": "When holding right click", + "title": "Hold right click to enable scroll wheel volume control" + } + }, + "title": "Scroll wheel volume control settings" + }, + "settingSearch": { + "placeholder": "Search for a setting" + }, + "videoHistory": { + "enable": { + "label": "Track watched videos", + "title": "Keeps track of where you left off on videos you were watching and enables resuming playback" + }, + "resumeType": { + "select": { + "label": "Resume type", + "options": { + "automatic": "Automatic", + "prompt": "Prompt" + }, + "title": "Select how you want to resume videos" + } + }, + "title": "Video history settings" + }, + "volumeBoost": { + "boostAmount": { + "label": "Volume boost amount (dB)", + "title": "The amount to boost the volume by" + }, + "enable": { + "label": "Volume boost", + "title": "Enable volume boost" + }, + "mode": { + "select": { + "label": "Volume boost mode", + "options": { + "global": "Global", + "perVideo": "Per video" + }, + "title": "Choose how volume boost is applied. 'Per video' allows enabling boost for each video individually in the feature menu. 'Global' applies boost to all videos when volume boost is enabled." + } + }, + "title": "Volume boost settings" + }, + "youtubeDataApiV3Key": { + "getApiKeyLinkText": "You can get one from here", + "input": { + "label": "API Key", + "title": "Enter your Youtube Data API V3 key." + }, + "title": "YouTube API V3 Key" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background color", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background color", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Deep Dark Theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" + } + } + } +} diff --git a/public/locales/hi-IN.json b/public/locales/hi-IN.json index 9f0a72b66..32e56282a 100644 --- a/public/locales/hi-IN.json +++ b/public/locales/hi-IN.json @@ -1,642 +1,642 @@ { - "langCode": "hi-IN", - "langName": "Hindi", - "messages": { - "resumingVideo": "Resuming video at {{VIDEO_TIME}}", - "settingVolume": "Setting volume boost to {{VOLUME_BOOST_AMOUNT}}" - }, - "pages": { - "content": { - "features": { - "copyTimestampUrlButton": { - "button": { - "copied": "Copied!", - "label": "Copy video URL with timestamp" - } - }, - "featureMenu": { - "button": { - "label": "Feature menu" - } - }, - "forwardRewindButtons": { - "buttons": { - "forwardButton": { - "label": "Fast forward by {{TIME}}" - }, - "rewindButton": { - "label": "Rewind by {{TIME}}" - } - } - }, - "hideEndScreenCardsButton": { - "button": { - "label": "Hide end screen cards", - "toggle": { - "off": "Show end screen cards", - "on": "Hide end screen cards" - } - } - }, - "loopButton": { - "button": { - "label": "Loop", - "toggle": { - "off": "Loop off", - "on": "Loop on" - } - } - }, - "maximizePlayerButton": { - "button": { - "label": "Maximize", - "toggle": { - "off": "Maximize off", - "on": "Maximize on" - } - } - }, - "openTranscriptButton": { - "button": { - "label": "Open transcript" - } - }, - "playbackSpeedButtons": { - "buttons": { - "decreasePlaybackSpeedButton": { - "label": "Decrease Speed to {{SPEED}}" - }, - "increasePlaybackSpeedButton": { - "label": "Increase Speed to {{SPEED}}" - } - }, - "decreaseLimit": "Can't decrease further ({{SPEED}})", - "increaseLimit": "Can't increase further ({{SPEED}})" - }, - "playlistLength": { - "title": "Total length may not be accurate if some videos are hidden or if you haven't loaded enough videos to get the full length." - }, - "screenshotButton": { - "button": { - "label": "Screenshot" - }, - "copiedToClipboard": "Screenshot copied to clipboard" - }, - "videoHistory": { - "resumeButton": "Resume", - "resumePrompt": { - "close": "Close" - } - }, - "volumeBoostButton": { - "button": { - "label": "Volume Boost", - "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" - } - } - } - } - }, - "options": { - "notifications": { - "error": { - "scrollWheelHoldModifierKey": { - "sameKey": { - "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", - "volumeControl": "The scroll wheel volume control modifier key cannot be the same as the scroll wheel speed control modifier key." - } - } - }, - "info": { - "reset": "All options have been reset to their default values.\nYou can now save the changes by clicking the \"Confirm\" button or discard them by closing this page or ignore this notification." - }, - "success": { - "saved": "Options saved." - } - } - } - }, - "settings": { - "clearData": { - "allDataDeleted": "All data has been deleted.", - "confirmAlert": "This will delete all extension data related to options. Continue?" - }, - "optionDisabled": { - "either": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " or " - }, - "plural": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " and " - }, - "singular": "Enable '{{OPTION}}' to configure this option", - "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." - } - }, - "scrollForMoreSettings": "Scroll for more settings", - "sections": { - "automaticQuality": { - "enable": { - "label": "Automatic quality adjustment", - "title": "Automatically adjusts the video quality to the selected level." - }, - "fallbackQualityStrategy": { - "select": { - "label": "Quality fallback strategy", - "options": { - "higher": "Higher", - "lower": "Lower" - }, - "title": "The strategy to use when the selected quality is not available" - } - }, - "select": { - "label": "Player quality", - "title": "The quality to set the video to" - }, - "title": "Automatic quality settings" - }, - "bottomButtons": { - "clear": { - "title": "Clears all data this extension has stored on your machine", - "value": "Clear Data" - }, - "confirm": { - "title": "Confirm setting reset", - "value": "Confirm" - }, - "openTab": { - "title": "Open extension settings in a new tab" - }, - "reset": { - "title": "Resets all settings to their defaults, Click the confirm button to save the changes", - "value": "Reset" - } - }, - "buttonPlacement": { - "select": { - "buttonNames": { - "copyTimestampUrlButton": "Copy video URL with timestamp button", - "decreasePlaybackSpeedButton": "Decrease Speed button", - "forwardButton": "Fast Forward button", - "hideEndScreenCardsButton": "Hide end screen cards button", - "increasePlaybackSpeedButton": "Increase Speed button", - "loopButton": "Loop button", - "maximizePlayerButton": "Maximize button", - "openTranscriptButton": "Open Transcript button", - "rewindButton": "Rewind button", - "screenshotButton": "Screenshot button", - "volumeBoostButton": "Volume Boost button" - }, - "options": { - "below_player": { - "placement": "below the player controls", - "value": "Below Player" - }, - "feature_menu": { - "placement": "in the feature menu", - "value": "Feature Menu" - }, - "player_controls_left": { - "placement": "on the left side of player controls", - "value": "Left Controls" - }, - "player_controls_right": { - "placement": "on the right side of player controls", - "value": "Right Controls" - } - }, - "title": "Place the {{BUTTON_NAME}} {{PLACEMENT}}" - }, - "title": "Button Placement Settings" - }, - "customCSS": { - "editor": { - "collapse": "Collapse Editor", - "expand": "Expand Editor", - "noProblems": "No problems found." - }, - "enable": { - "label": "Custom CSS", - "title": "Enables custom CSS to be applied to the page" - }, - "title": "Custom CSS Settings" - }, - "featureMenu": { - "openType": { - "select": { - "label": "Menu Activation Type", - "options": { - "click": "Click", - "hover": "Hover" - }, - "title": "Select the method to activate the feature menu" - }, - "title": "Feature menu settings" - } - }, - "forwardRewindButtons": { - "enable": { - "label": "Forward/rewind buttons", - "title": "Adds forward and rewind buttons to the video player" - }, - "time": { - "label": "Forward/rewind time", - "title": "The amount of time to forward/rewind the video by" - }, - "title": "Forward/rewind button settings" - }, - "importExportSettings": { - "exportButton": { - "success": "Settings successfully exported", - "title": "Export settings to a JSON file", - "value": "Export Settings" - }, - "importButton": { - "error": { - "unknown": "Error importing settings. Please check the file format.\nAn unknown error occurred.", - "validation": "Error importing settings. Please check the file format.\n{{ERROR_MESSAGE}}" - }, - "success": "Settings imported successfully", - "title": "Import settings from a JSON file", - "value": "Import Settings" - } - }, - "language": { - "select": { - "label": "Language", - "title": "The language to use for the extension" - }, - "title": "Language" - }, - "miscellaneous": { - "features": { - "automaticTheaterMode": { - "label": "Automatic theater mode", - "title": "Automatically enables theater mode when you load a video" - }, - "automaticallyDisableAmbientMode": { - "label": "Automatically disable ambient mode", - "title": "Automatically disables ambient mode when you load a video" - }, - "automaticallyDisableClosedCaptions": { - "label": "Automatically disable closed captions", - "title": "Automatically disables closed captions when you load a video" - }, - "copyTimestampUrlButton": { - "label": "Copy video URL with timestamp button", - "title": "Copies video URL with timestamp (?t=123)" - }, - "defaultToOriginalAudioTrack": { - "label": "Default to original audio track", - "title": "Always default to the original audio track" - }, - "hideArtificialIntelligenceSummary": { - "label": "Hide AI summary", - "title": "Hides the artificial intelligence summary below videos" - }, - "hideEndScreenCards": { - "label": "Hide end screen cards", - "title": "Hides the cards at the end of the video" - }, - "hideEndScreenCardsButton": { - "label": "Hide end screen cards button", - "title": "Adds a button to show/hide the cards at the end of the video" - }, - "hideLiveStreamChat": { - "label": "Hide live stream chat", - "title": "Hides the live stream chat" - }, - "hideOfficialArtistVideosFromHomePage": { - "label": "Hide Official Artist Videos", - "title": "Hide Official Artist Videos from Home Page" - }, - "hidePaidPromotionBanner": { - "label": "Hide paid promotion banner", - "title": "Hides the banner that appears when you watch a video that has a paid promotion" - }, - "hidePlayables": { - "label": "Hide playables", - "title": "Hides all playables" - }, - "hideScrollbar": { - "label": "Hide scrollbar", - "title": "Hides the pages scrollbar" - }, - "hideShorts": { - "label": "Hide shorts", - "title": "Hides all shorts" - }, - "hideTranslateComment": { - "label": "Hide translate comment button", - "title": "Hides 'Translate to Language' button under comments" - }, - "loopButton": { - "label": "Loop button", - "title": "Adds a button to the feature menu to loop the video you're watching" - }, - "maximizePlayerButton": { - "label": "Maximize player button", - "title": "Adds a button to the feature menu to maximize the player" - }, - "openTranscriptButton": { - "label": "Open transcript button", - "title": "Adds a button to the feature menu to open the transcript of the video you're watching" - }, - "openYouTubeSettingsOnHover": { - "label": "Open YouTube settings on hover", - "title": "Opens the YouTube settings menu when you hover over the settings button" - }, - "pauseBackgroundPlayers": { - "label": "Pause background players", - "title": "Pauses video players in background tabs when you start a new player in foreground tab" - }, - "playlistRemover": { - "label": "Hide playlists from homepage", - "title": "Get rid of playlists from homepage" - }, - "remainingTime": { - "label": "Remaining time", - "title": "Shows the remaining time of the video you're watching" - }, - "rememberLastVolume": { - "label": "Remember last volume", - "title": "Remembers the volume of the last video you were watching and sets it when you open a new video" - }, - "removeRedirect": { - "label": "Remove YouTube /redirect URLs", - "title": "Replaces YouTube redirect by actual URLs, skipping redirect warning dialogue" - }, - "restoreFullscreenScrolling": { - "label": "Restore fullscreen scrolling", - "title": "Restores scrolling in fullscreen mode" - }, - "shareShortener": { - "label": "Shorten YouTube video share link", - "title": "Shortens YouTube video share link (youtu.be) by stripping si/feature parameters from it" - }, - "shortsAutoScroll": { - "label": "Shorts auto scroll", - "title": "Automatically scrolls to the next short" - }, - "skipContinueWatching": { - "label": "Skip \"Video is paused. Continue watching?\"", - "title": "Skips the idle dialog that pauses video playback" - } - }, - "title": "Miscellaneous settings" - }, - "onScreenDisplaySettings": { - "color": { - "label": "Color", - "options": { - "blue": "Blue", - "green": "Green", - "orange": "Orange", - "pink": "Pink", - "purple": "Purple", - "red": "Red", - "white": "White", - "yellow": "Yellow" - }, - "title": "Select the color for the On-Screen Display" - }, - "hide": { - "label": "Hide Delay", - "title": "Specify the time, in milliseconds, before automatically hiding the On-Screen Display" - }, - "opacity": { - "label": "Opacity", - "title": "Adjust the transparency of the On-Screen Display" - }, - "padding": { - "label": "Padding", - "title": "Adjust the spacing around the On-Screen Display in pixels. This applies specifically to corner On-Screen Display." - }, - "position": { - "label": "Position", - "options": { - "bottom_left": "Bottom Left", - "bottom_right": "Bottom Right", - "center": "Center", - "top_left": "Top Left", - "top_right": "Top Right" - }, - "title": "Select the position of the On-Screen Display" - }, - "title": "On-Screen Display Settings", - "type": { - "label": "Type", - "options": { - "circle": "Circle", - "line": "Line", - "no_display": "No display", - "text": "Text" - }, - "title": "Select the type of On-Screen Display" - } - }, - "playbackSpeed": { - "enable": { - "label": "Forced playback speed", - "title": "Sets the video speed to what you choose below" - }, - "playbackSpeedButtons": { - "label": "Playback speed buttons", - "select": { - "label": "Playback buttons speed", - "title": "Amount of speed to be changed per click" - }, - "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" - }, - "select": { - "label": "Player speed", - "title": "The speed to set the video to" - }, - "title": "Playback speed settings" - }, - "playlistLength": { - "enable": { - "label": "Display playlist length information", - "title": "Shows the total length of the playlist, how much has been watched, and how much remains." - }, - "title": "Playlist length settings", - "wayToGetLength": { - "select": { - "label": "Method to get playlist length", - "title": "The way to get playlist length information (API method will fallback to HTML if an error occurs)" - } - }, - "wayToGetWatchTime": { - "select": { - "label": "Method to get watched time", - "options": { - "duration": "Video Length", - "youtube": "Video Watch Time" - }, - "title": "The way to get the amount of time watched (Video Length type only used on watch page)" - } - } - }, - "screenshotButton": { - "enable": { - "label": "Screenshot button", - "title": "Adds a button to the player to take a screenshot of the video" - }, - "saveAs": { - "clipboard": "Clipboard", - "file": "File" - }, - "selectFormat": { - "label": "Screenshot format", - "title": "The format to save the screenshot in" - }, - "selectSaveAs": { - "label": "Screenshot save type", - "title": "The screenshot save type" - }, - "title": "Screenshot settings" - }, - "scrollWheelSpeedControl": { - "adjustmentSteps": { - "label": "Speed Change Per Scroll", - "title": "Adjust the speed change per scroll" - }, - "enable": { - "label": "Scroll wheel speed control", - "title": "Press a modifier key to enable speed adjustment with the scroll wheel." - }, - "optionLabel": "{{KEY}} key", - "select": { - "label": "Modifier key", - "title": "The modifier key to use" - }, - "title": "Scroll wheel speed control settings" - }, - "scrollWheelVolumeControl": { - "adjustmentSteps": { - "label": "Volume Change Per Scroll", - "title": "Adjust the volume change per scroll" - }, - "enable": { - "label": "Scroll wheel volume control", - "title": "Lets you use the scroll wheel to control the volume of the video you're watching" - }, - "holdModifierKey": { - "enable": { - "label": "When holding modifier key", - "title": "Press a modifier key to enable volume adjustment with the scroll wheel." - }, - "optionLabel": "{{KEY}} key", - "select": { - "label": "Modifier key", - "title": "The modifier key to use" - } - }, - "holdRightClick": { - "enable": { - "label": "When holding right click", - "title": "Hold right click to enable scroll wheel volume control" - } - }, - "title": "Scroll wheel volume control settings" - }, - "settingSearch": { - "placeholder": "Search for a setting" - }, - "videoHistory": { - "enable": { - "label": "Track watched videos", - "title": "Keeps track of where you left off on videos you were watching and enables resuming playback" - }, - "resumeType": { - "select": { - "label": "Resume type", - "options": { - "automatic": "Automatic", - "prompt": "Prompt" - }, - "title": "Select how you want to resume videos" - } - }, - "title": "Video history settings" - }, - "volumeBoost": { - "boostAmount": { - "label": "Volume boost amount (dB)", - "title": "The amount to boost the volume by" - }, - "enable": { - "label": "Volume boost", - "title": "Enable volume boost" - }, - "mode": { - "select": { - "label": "Volume boost mode", - "options": { - "global": "Global", - "perVideo": "Per video" - }, - "title": "Choose how volume boost is applied. 'Per video' allows enabling boost for each video individually in the feature menu. 'Global' applies boost to all videos when volume boost is enabled." - } - }, - "title": "Volume boost settings" - }, - "youtubeDataApiV3Key": { - "getApiKeyLinkText": "You can get one from here", - "input": { - "label": "API Key", - "title": "Enter your Youtube Data API V3 key." - }, - "title": "YouTube API V3 Key" - }, - "youtubeDeepDark": { - "author": "Author", - "co-authors": "Co-authors", - "colors": { - "colorShadow": { - "label": "Shadow color", - "title": "Color for shadows" - }, - "dimmerText": { - "label": "Secondary text color", - "title": "Color for secondary text" - }, - "hoverBackground": { - "label": "Hover background color", - "title": "Color for hover background" - }, - "mainBackground": { - "label": "Main background color", - "title": "Color for main background" - }, - "mainColor": { - "label": "Accent color", - "title": "Color for accent" - }, - "mainText": { - "label": "Main text color", - "title": "Color for main text" - }, - "secondBackground": { - "label": "Secondary background color", - "title": "Color for secondary background" - } - }, - "enable": { - "label": "Deep Dark Theme", - "title": "Activate the selected theme for the page" - }, - "select": { - "label": "Select theme", - "title": "Select a theme to be applied to the page" - }, - "title": "YouTube Deep Dark Settings" - } - } - } -} \ No newline at end of file + "langCode": "hi-IN", + "langName": "Hindi", + "messages": { + "resumingVideo": "Resuming video at {{VIDEO_TIME}}", + "settingVolume": "Setting volume boost to {{VOLUME_BOOST_AMOUNT}}" + }, + "pages": { + "content": { + "features": { + "copyTimestampUrlButton": { + "button": { + "copied": "Copied!", + "label": "Copy video URL with timestamp" + } + }, + "featureMenu": { + "button": { + "label": "Feature menu" + } + }, + "forwardRewindButtons": { + "buttons": { + "forwardButton": { + "label": "Fast forward by {{TIME}}" + }, + "rewindButton": { + "label": "Rewind by {{TIME}}" + } + } + }, + "hideEndScreenCardsButton": { + "button": { + "label": "Hide end screen cards", + "toggle": { + "off": "Show end screen cards", + "on": "Hide end screen cards" + } + } + }, + "loopButton": { + "button": { + "label": "Loop", + "toggle": { + "off": "Loop off", + "on": "Loop on" + } + } + }, + "maximizePlayerButton": { + "button": { + "label": "Maximize", + "toggle": { + "off": "Maximize off", + "on": "Maximize on" + } + } + }, + "openTranscriptButton": { + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Decrease Speed to {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Increase Speed to {{SPEED}}" + } + }, + "decreaseLimit": "Can't decrease further ({{SPEED}})", + "increaseLimit": "Can't increase further ({{SPEED}})" + }, + "playlistLength": { + "title": "Total length may not be accurate if some videos are hidden or if you haven't loaded enough videos to get the full length." + }, + "screenshotButton": { + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "Screenshot copied to clipboard" + }, + "videoHistory": { + "resumeButton": "Resume", + "resumePrompt": { + "close": "Close" + } + }, + "volumeBoostButton": { + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } + } + } + } + }, + "options": { + "notifications": { + "error": { + "scrollWheelHoldModifierKey": { + "sameKey": { + "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", + "volumeControl": "The scroll wheel volume control modifier key cannot be the same as the scroll wheel speed control modifier key." + } + } + }, + "info": { + "reset": "All options have been reset to their default values.\nYou can now save the changes by clicking the \"Confirm\" button or discard them by closing this page or ignore this notification." + }, + "success": { + "saved": "Options saved." + } + } + } + }, + "settings": { + "clearData": { + "allDataDeleted": "All data has been deleted.", + "confirmAlert": "This will delete all extension data related to options. Continue?" + }, + "optionDisabled": { + "either": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " or " + }, + "plural": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " and " + }, + "singular": "Enable '{{OPTION}}' to configure this option", + "specificOption": { + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + } + }, + "scrollForMoreSettings": "Scroll for more settings", + "sections": { + "automaticQuality": { + "enable": { + "label": "Automatic quality adjustment", + "title": "Automatically adjusts the video quality to the selected level." + }, + "fallbackQualityStrategy": { + "select": { + "label": "Quality fallback strategy", + "options": { + "higher": "Higher", + "lower": "Lower" + }, + "title": "The strategy to use when the selected quality is not available" + } + }, + "select": { + "label": "Player quality", + "title": "The quality to set the video to" + }, + "title": "Automatic quality settings" + }, + "bottomButtons": { + "clear": { + "title": "Clears all data this extension has stored on your machine", + "value": "Clear Data" + }, + "confirm": { + "title": "Confirm setting reset", + "value": "Confirm" + }, + "openTab": { + "title": "Open extension settings in a new tab" + }, + "reset": { + "title": "Resets all settings to their defaults, Click the confirm button to save the changes", + "value": "Reset" + } + }, + "buttonPlacement": { + "select": { + "buttonNames": { + "copyTimestampUrlButton": "Copy video URL with timestamp button", + "decreasePlaybackSpeedButton": "Decrease Speed button", + "forwardButton": "Fast Forward button", + "hideEndScreenCardsButton": "Hide end screen cards button", + "increasePlaybackSpeedButton": "Increase Speed button", + "loopButton": "Loop button", + "maximizePlayerButton": "Maximize button", + "openTranscriptButton": "Open Transcript button", + "rewindButton": "Rewind button", + "screenshotButton": "Screenshot button", + "volumeBoostButton": "Volume Boost button" + }, + "options": { + "below_player": { + "placement": "below the player controls", + "value": "Below Player" + }, + "feature_menu": { + "placement": "in the feature menu", + "value": "Feature Menu" + }, + "player_controls_left": { + "placement": "on the left side of player controls", + "value": "Left Controls" + }, + "player_controls_right": { + "placement": "on the right side of player controls", + "value": "Right Controls" + } + }, + "title": "Place the {{BUTTON_NAME}} {{PLACEMENT}}" + }, + "title": "Button Placement Settings" + }, + "customCSS": { + "editor": { + "collapse": "Collapse Editor", + "expand": "Expand Editor", + "noProblems": "No problems found." + }, + "enable": { + "label": "Custom CSS", + "title": "Enables custom CSS to be applied to the page" + }, + "title": "Custom CSS Settings" + }, + "featureMenu": { + "openType": { + "select": { + "label": "Menu Activation Type", + "options": { + "click": "Click", + "hover": "Hover" + }, + "title": "Select the method to activate the feature menu" + }, + "title": "Feature menu settings" + } + }, + "forwardRewindButtons": { + "enable": { + "label": "Forward/rewind buttons", + "title": "Adds forward and rewind buttons to the video player" + }, + "time": { + "label": "Forward/rewind time", + "title": "The amount of time to forward/rewind the video by" + }, + "title": "Forward/rewind button settings" + }, + "importExportSettings": { + "exportButton": { + "success": "Settings successfully exported", + "title": "Export settings to a JSON file", + "value": "Export Settings" + }, + "importButton": { + "error": { + "unknown": "Error importing settings. Please check the file format.\nAn unknown error occurred.", + "validation": "Error importing settings. Please check the file format.\n{{ERROR_MESSAGE}}" + }, + "success": "Settings imported successfully", + "title": "Import settings from a JSON file", + "value": "Import Settings" + } + }, + "language": { + "select": { + "label": "Language", + "title": "The language to use for the extension" + }, + "title": "Language" + }, + "miscellaneous": { + "features": { + "automaticTheaterMode": { + "label": "Automatic theater mode", + "title": "Automatically enables theater mode when you load a video" + }, + "automaticallyDisableAmbientMode": { + "label": "Automatically disable ambient mode", + "title": "Automatically disables ambient mode when you load a video" + }, + "automaticallyDisableClosedCaptions": { + "label": "Automatically disable closed captions", + "title": "Automatically disables closed captions when you load a video" + }, + "copyTimestampUrlButton": { + "label": "Copy video URL with timestamp button", + "title": "Copies video URL with timestamp (?t=123)" + }, + "defaultToOriginalAudioTrack": { + "label": "Default to original audio track", + "title": "Always default to the original audio track" + }, + "hideArtificialIntelligenceSummary": { + "label": "Hide AI summary", + "title": "Hides the artificial intelligence summary below videos" + }, + "hideEndScreenCards": { + "label": "Hide end screen cards", + "title": "Hides the cards at the end of the video" + }, + "hideEndScreenCardsButton": { + "label": "Hide end screen cards button", + "title": "Adds a button to show/hide the cards at the end of the video" + }, + "hideLiveStreamChat": { + "label": "Hide live stream chat", + "title": "Hides the live stream chat" + }, + "hideOfficialArtistVideosFromHomePage": { + "label": "Hide Official Artist Videos", + "title": "Hide Official Artist Videos from Home Page" + }, + "hidePaidPromotionBanner": { + "label": "Hide paid promotion banner", + "title": "Hides the banner that appears when you watch a video that has a paid promotion" + }, + "hidePlayables": { + "label": "Hide playables", + "title": "Hides all playables" + }, + "hideScrollbar": { + "label": "Hide scrollbar", + "title": "Hides the pages scrollbar" + }, + "hideShorts": { + "label": "Hide shorts", + "title": "Hides all shorts" + }, + "hideTranslateComment": { + "label": "Hide translate comment button", + "title": "Hides 'Translate to Language' button under comments" + }, + "loopButton": { + "label": "Loop button", + "title": "Adds a button to the feature menu to loop the video you're watching" + }, + "maximizePlayerButton": { + "label": "Maximize player button", + "title": "Adds a button to the feature menu to maximize the player" + }, + "openTranscriptButton": { + "label": "Open transcript button", + "title": "Adds a button to the feature menu to open the transcript of the video you're watching" + }, + "openYouTubeSettingsOnHover": { + "label": "Open YouTube settings on hover", + "title": "Opens the YouTube settings menu when you hover over the settings button" + }, + "pauseBackgroundPlayers": { + "label": "Pause background players", + "title": "Pauses video players in background tabs when you start a new player in foreground tab" + }, + "playlistRemover": { + "label": "Hide playlists from homepage", + "title": "Get rid of playlists from homepage" + }, + "remainingTime": { + "label": "Remaining time", + "title": "Shows the remaining time of the video you're watching" + }, + "rememberLastVolume": { + "label": "Remember last volume", + "title": "Remembers the volume of the last video you were watching and sets it when you open a new video" + }, + "removeRedirect": { + "label": "Remove YouTube /redirect URLs", + "title": "Replaces YouTube redirect by actual URLs, skipping redirect warning dialogue" + }, + "restoreFullscreenScrolling": { + "label": "Restore fullscreen scrolling", + "title": "Restores scrolling in fullscreen mode" + }, + "shareShortener": { + "label": "Shorten YouTube video share link", + "title": "Shortens YouTube video share link (youtu.be) by stripping si/feature parameters from it" + }, + "shortsAutoScroll": { + "label": "Shorts auto scroll", + "title": "Automatically scrolls to the next short" + }, + "skipContinueWatching": { + "label": "Skip \"Video is paused. Continue watching?\"", + "title": "Skips the idle dialog that pauses video playback" + } + }, + "title": "Miscellaneous settings" + }, + "onScreenDisplaySettings": { + "color": { + "label": "Color", + "options": { + "blue": "Blue", + "green": "Green", + "orange": "Orange", + "pink": "Pink", + "purple": "Purple", + "red": "Red", + "white": "White", + "yellow": "Yellow" + }, + "title": "Select the color for the On-Screen Display" + }, + "hide": { + "label": "Hide Delay", + "title": "Specify the time, in milliseconds, before automatically hiding the On-Screen Display" + }, + "opacity": { + "label": "Opacity", + "title": "Adjust the transparency of the On-Screen Display" + }, + "padding": { + "label": "Padding", + "title": "Adjust the spacing around the On-Screen Display in pixels. This applies specifically to corner On-Screen Display." + }, + "position": { + "label": "Position", + "options": { + "bottom_left": "Bottom Left", + "bottom_right": "Bottom Right", + "center": "Center", + "top_left": "Top Left", + "top_right": "Top Right" + }, + "title": "Select the position of the On-Screen Display" + }, + "title": "On-Screen Display Settings", + "type": { + "label": "Type", + "options": { + "circle": "Circle", + "line": "Line", + "no_display": "No display", + "text": "Text" + }, + "title": "Select the type of On-Screen Display" + } + }, + "playbackSpeed": { + "enable": { + "label": "Forced playback speed", + "title": "Sets the video speed to what you choose below" + }, + "playbackSpeedButtons": { + "label": "Playback speed buttons", + "select": { + "label": "Playback buttons speed", + "title": "Amount of speed to be changed per click" + }, + "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" + }, + "select": { + "label": "Player speed", + "title": "The speed to set the video to" + }, + "title": "Playback speed settings" + }, + "playlistLength": { + "enable": { + "label": "Display playlist length information", + "title": "Shows the total length of the playlist, how much has been watched, and how much remains." + }, + "title": "Playlist length settings", + "wayToGetLength": { + "select": { + "label": "Method to get playlist length", + "title": "The way to get playlist length information (API method will fallback to HTML if an error occurs)" + } + }, + "wayToGetWatchTime": { + "select": { + "label": "Method to get watched time", + "options": { + "duration": "Video Length", + "youtube": "Video Watch Time" + }, + "title": "The way to get the amount of time watched (Video Length type only used on watch page)" + } + } + }, + "screenshotButton": { + "enable": { + "label": "Screenshot button", + "title": "Adds a button to the player to take a screenshot of the video" + }, + "saveAs": { + "clipboard": "Clipboard", + "file": "File" + }, + "selectFormat": { + "label": "Screenshot format", + "title": "The format to save the screenshot in" + }, + "selectSaveAs": { + "label": "Screenshot save type", + "title": "The screenshot save type" + }, + "title": "Screenshot settings" + }, + "scrollWheelSpeedControl": { + "adjustmentSteps": { + "label": "Speed Change Per Scroll", + "title": "Adjust the speed change per scroll" + }, + "enable": { + "label": "Scroll wheel speed control", + "title": "Press a modifier key to enable speed adjustment with the scroll wheel." + }, + "optionLabel": "{{KEY}} key", + "select": { + "label": "Modifier key", + "title": "The modifier key to use" + }, + "title": "Scroll wheel speed control settings" + }, + "scrollWheelVolumeControl": { + "adjustmentSteps": { + "label": "Volume Change Per Scroll", + "title": "Adjust the volume change per scroll" + }, + "enable": { + "label": "Scroll wheel volume control", + "title": "Lets you use the scroll wheel to control the volume of the video you're watching" + }, + "holdModifierKey": { + "enable": { + "label": "When holding modifier key", + "title": "Press a modifier key to enable volume adjustment with the scroll wheel." + }, + "optionLabel": "{{KEY}} key", + "select": { + "label": "Modifier key", + "title": "The modifier key to use" + } + }, + "holdRightClick": { + "enable": { + "label": "When holding right click", + "title": "Hold right click to enable scroll wheel volume control" + } + }, + "title": "Scroll wheel volume control settings" + }, + "settingSearch": { + "placeholder": "Search for a setting" + }, + "videoHistory": { + "enable": { + "label": "Track watched videos", + "title": "Keeps track of where you left off on videos you were watching and enables resuming playback" + }, + "resumeType": { + "select": { + "label": "Resume type", + "options": { + "automatic": "Automatic", + "prompt": "Prompt" + }, + "title": "Select how you want to resume videos" + } + }, + "title": "Video history settings" + }, + "volumeBoost": { + "boostAmount": { + "label": "Volume boost amount (dB)", + "title": "The amount to boost the volume by" + }, + "enable": { + "label": "Volume boost", + "title": "Enable volume boost" + }, + "mode": { + "select": { + "label": "Volume boost mode", + "options": { + "global": "Global", + "perVideo": "Per video" + }, + "title": "Choose how volume boost is applied. 'Per video' allows enabling boost for each video individually in the feature menu. 'Global' applies boost to all videos when volume boost is enabled." + } + }, + "title": "Volume boost settings" + }, + "youtubeDataApiV3Key": { + "getApiKeyLinkText": "You can get one from here", + "input": { + "label": "API Key", + "title": "Enter your Youtube Data API V3 key." + }, + "title": "YouTube API V3 Key" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background color", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background color", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Deep Dark Theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" + } + } + } +} diff --git a/public/locales/ko-KR.json b/public/locales/ko-KR.json index 820e63137..033ad02be 100644 --- a/public/locales/ko-KR.json +++ b/public/locales/ko-KR.json @@ -1,642 +1,642 @@ { - "langCode": "ko-KR", - "langName": "한국어", - "messages": { - "resumingVideo": "영상을 {{VIDEO_TIME}} 부터 다시 재생합니다.", - "settingVolume": "볼륨 부스트를 {{VOLUME_BOOST_AMOUNT}} 로 설정합니다." - }, - "pages": { - "content": { - "features": { - "copyTimestampUrlButton": { - "button": { - "copied": "복사되었습니다.", - "label": "현재 시간 주소 복사" - } - }, - "featureMenu": { - "button": { - "label": "추가 기능" - } - }, - "forwardRewindButtons": { - "buttons": { - "forwardButton": { - "label": "{{TIME}} 초 빨리 감기" - }, - "rewindButton": { - "label": "{{TIME}} 초 되감기" - } - } - }, - "hideEndScreenCardsButton": { - "button": { - "label": "최종 화면 숨기기", - "toggle": { - "off": "최종 화면 보기", - "on": "최종 화면 숨기기" - } - } - }, - "loopButton": { - "button": { - "label": "연속 재생", - "toggle": { - "off": "연속 재생 끄기", - "on": "연속 재생 켜기" - } - } - }, - "maximizePlayerButton": { - "button": { - "label": "화면 크기에 맞추기", - "toggle": { - "off": "끄기", - "on": "켜기" - } - } - }, - "openTranscriptButton": { - "button": { - "label": "스크립트 보기" - } - }, - "playbackSpeedButtons": { - "buttons": { - "decreasePlaybackSpeedButton": { - "label": "재생 속도를 {{SPEED}} 로 변경" - }, - "increasePlaybackSpeedButton": { - "label": "재생 속도를 {{SPEED}} 로 변경" - } - }, - "decreaseLimit": "({{SPEED}}) 에서 더 줄일 수 없습니다.", - "increaseLimit": "({{SPEED}}) 에서 더 늘릴 수 없습니다." - }, - "playlistLength": { - "title": "Total length may not be accurate if some videos are hidden or if you haven't loaded enough videos to get the full length." - }, - "screenshotButton": { - "button": { - "label": "스크린샷" - }, - "copiedToClipboard": "현재 화면 클립보드에 복사" - }, - "videoHistory": { - "resumeButton": "이어서 시청하기", - "resumePrompt": { - "close": "닫기" - } - }, - "volumeBoostButton": { - "button": { - "label": "볼륨 부스트", - "toggle": { - "off": "볼륨 부스트 끄기", - "on": "볼륨 부스트 켜기" - } - } - } - } - }, - "options": { - "notifications": { - "error": { - "scrollWheelHoldModifierKey": { - "sameKey": { - "speedControl": "중복되는 키가 설정되어 있습니다.", - "volumeControl": "중복되는 키가 설정되어 있습니다." - } - } - }, - "info": { - "reset": "모든 옵션이 기본값으로 재설정되었습니다.\n이제 \"확인\" 버튼를 눌러 변경사항을 저장하거나 이 페이지를 닫아 변경사항을 취소할 수 있습니다." - }, - "success": { - "saved": "저장되었습니다." - } - } - } - }, - "settings": { - "clearData": { - "allDataDeleted": "모든 데이터가 삭제되었습니다.", - "confirmAlert": "모든 데이터가 삭제됩니다. 진행할까요?" - }, - "optionDisabled": { - "either": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " or " - }, - "plural": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " and " - }, - "singular": "Enable '{{OPTION}}' to configure this option", - "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." - } - }, - "scrollForMoreSettings": "Scroll for more settings", - "sections": { - "automaticQuality": { - "enable": { - "label": "화질 설정", - "title": "영상의 화질이 자동으로 변경됩니다." - }, - "fallbackQualityStrategy": { - "select": { - "label": "화질 대체", - "options": { - "higher": "높음", - "lower": "낮음" - }, - "title": "선택한 화질을 사용할 수 없을 때 다음 방법을 사용합니다." - } - }, - "select": { - "label": "동영상 화질", - "title": "항상 선택한 화질로 동영상이 재생됩니다." - }, - "title": "동영상 화질 자동 변경" - }, - "bottomButtons": { - "clear": { - "title": "확장과 관련된 데이터를 PC에서 모두 삭제합니다.", - "value": "데이터 삭제" - }, - "confirm": { - "title": "작업을 진행하려면 다시 누르세요", - "value": "확인" - }, - "openTab": { - "title": "새 탭에서 설정 열기" - }, - "reset": { - "title": "모든 설정을 기본값으로 변경합니다. 진행을 원하시면 확인을 누르세요", - "value": "초기화" - } - }, - "buttonPlacement": { - "select": { - "buttonNames": { - "copyTimestampUrlButton": "현재 시간 주소 복사 버튼", - "decreasePlaybackSpeedButton": "속도 조절 버튼", - "forwardButton": "빨리 감기 버튼", - "hideEndScreenCardsButton": "최종 화면 숨기기", - "increasePlaybackSpeedButton": "속도 조절 버튼", - "loopButton": "연속 재생 버튼", - "maximizePlayerButton": "화면 크기에 맞추기 버튼", - "openTranscriptButton": "스크립트 보기 버튼", - "rewindButton": "되감기 버튼", - "screenshotButton": "스크린샷 버튼", - "volumeBoostButton": "볼륨 부스트 버튼" - }, - "options": { - "below_player": { - "placement": "플레이어 컨트롤 아래", - "value": "아래" - }, - "feature_menu": { - "placement": "추가 기능 버튼", - "value": "추가 기능" - }, - "player_controls_left": { - "placement": "플레이어 컨트롤의 왼쪽", - "value": "왼쪽" - }, - "player_controls_right": { - "placement": "플레이어 컨트롤의 오른쪽", - "value": "오른쪽" - } - }, - "title": "{{BUTTON_NAME}} 을 {{PLACEMENT}} 에 배치하세요" - }, - "title": "버튼 배치 설정" - }, - "customCSS": { - "editor": { - "collapse": "편집기 축소", - "expand": "편집기 확대", - "noProblems": "발견된 문제가 없습니다." - }, - "enable": { - "label": "CSS 커스텀 활성화", - "title": "커스텀 CSS를 적용할 수 있습니다." - }, - "title": "커스텀 CSS 설정" - }, - "featureMenu": { - "openType": { - "select": { - "label": "메뉴 활성화 방식", - "options": { - "click": "클릭 시", - "hover": "마우스 커서를 올릴 때" - }, - "title": "추가 기능 메뉴를 어떤 방식으로 열지 선택하세요" - }, - "title": "추가 기능 설정" - } - }, - "forwardRewindButtons": { - "enable": { - "label": "되감기/빨리 감기 버튼 사용", - "title": "플레이어에 되감기와 빨리 감기 버튼을 추가합니다." - }, - "time": { - "label": "되감기/빨리 감기 시간", - "title": "되감기/빨리 감기 시간" - }, - "title": "되감기/빨리 감기 버튼 설정" - }, - "importExportSettings": { - "exportButton": { - "success": "설정을 성공적으로 내보냈습니다.", - "title": "설정 JSON로 내보내기", - "value": "설정 내보내기" - }, - "importButton": { - "error": { - "unknown": "설정 가져오기에 오류가 있습니다. 파일 형식을 확인하십시오.", - "validation": "설정 가져 오기에 오류가 있습니다. 파일 형식을 확인하십시오.\n{{ERROR_MESSAGE}}" - }, - "success": "설정 파일을 성공적으로 가져왔습니다.", - "title": "JSON 파일에서 설정 가져오기", - "value": "설정 가져오기" - } - }, - "language": { - "select": { - "label": "언어", - "title": "이곳에서 언어를 변경할 수 있습니다." - }, - "title": "언어" - }, - "miscellaneous": { - "features": { - "automaticTheaterMode": { - "label": "자동 극장 모드", - "title": "동영상 재생 시 자동으로 극장 모드가 활성화 됩니다." - }, - "automaticallyDisableAmbientMode": { - "label": "Automatically disable ambient mode", - "title": "Automatically disables ambient mode when you load a video" - }, - "automaticallyDisableClosedCaptions": { - "label": "Automatically disable closed captions", - "title": "Automatically disables closed captions when you load a video" - }, - "copyTimestampUrlButton": { - "label": "현재 시간 주소 복사 버튼", - "title": "현재 시간 주소 복사 (?t=123)" - }, - "defaultToOriginalAudioTrack": { - "label": "Default to original audio track", - "title": "Always default to the original audio track" - }, - "hideArtificialIntelligenceSummary": { - "label": "Hide AI summary", - "title": "Hides the artificial intelligence summary below videos" - }, - "hideEndScreenCards": { - "label": "최종 화면 숨기기", - "title": "동영상 마지막에 등장하는 추천 동영상 카드들을 숨깁니다." - }, - "hideEndScreenCardsButton": { - "label": "최종 화면 숨기기 버튼", - "title": "동영상 마지막에 등장하는 추천 동영상 카드들을 숨기거나 표시합니다." - }, - "hideLiveStreamChat": { - "label": "실시간 채팅 숨기기", - "title": "실시간 채팅 레이아웃을 숨깁니다." - }, - "hideOfficialArtistVideosFromHomePage": { - "label": "Hide Official Artist Videos", - "title": "Hide Official Artist Videos from Home Page" - }, - "hidePaidPromotionBanner": { - "label": "유료 광고 배너 숨기기", - "title": "유료 광고가 있는 동영상을 볼 때 나타나는 배너를 숨깁니다." - }, - "hidePlayables": { - "label": "Hide playables", - "title": "Hides all playables" - }, - "hideScrollbar": { - "label": "스크롤바 숨기기", - "title": "스크롤바를 숨깁니다. 깔끔한 느낌을 받으시려면 키세요" - }, - "hideShorts": { - "label": "쇼츠 숨기기", - "title": "쇼츠 동영상들을 숨깁니다." - }, - "hideTranslateComment": { - "label": "댓글 번역 버튼 숨기기", - "title": "댓글 아래에 표시되는 번역 버튼을 숨깁니다." - }, - "loopButton": { - "label": "연속 재생 버튼", - "title": "추가 기능 메뉴에 \"연속 재생\" 버튼을 추가합니다." - }, - "maximizePlayerButton": { - "label": "화면 크기에 맞추기 버튼", - "title": "추가 기능 메뉴에 \"화면 크기에 맞추기\" 버튼을 추가합니다." - }, - "openTranscriptButton": { - "label": "스크립트 보기 버튼", - "title": "추가 기능 메뉴에 \"스크립트 보기\" 버튼을 추가합니다." - }, - "openYouTubeSettingsOnHover": { - "label": "마우스 커서를 올려 유튜브 설정 열기", - "title": "설정 버튼 위로 마우스 커서를 올리면 유튜브 설정 메뉴를 엽니다." - }, - "pauseBackgroundPlayers": { - "label": "백그라운드 플레이어 일시 중지", - "title": "다른 탭에서 동영상을 재생할 때 이전 탭의 동영상 플레이어를 일시 중지합니다." - }, - "playlistRemover": { - "label": "Hide playlists from homepage", - "title": "Get rid of playlists from homepage" - }, - "remainingTime": { - "label": "남은 시간 표시", - "title": "현재 동영상의 남은 시간을 표시합니다." - }, - "rememberLastVolume": { - "label": "마지막 볼륨 기억", - "title": "마지막으로 본 동영상의 볼륨이 다른 동영상에서도 유지됩니다." - }, - "removeRedirect": { - "label": "유튜브 / 리디렉션 URL 제거", - "title": "리디렉션 경고 대화를 건너뛰고 실제 URL로 유튜브 리디렉션을 대체합니다." - }, - "restoreFullscreenScrolling": { - "label": "Restore fullscreen scrolling", - "title": "Restores scrolling in fullscreen mode" - }, - "shareShortener": { - "label": "유튜브 동영상 공유 링크 짧게하기", - "title": "si/feature 매개 변수를 제거하여 유튜브 동영상 공유 링크를 단축(youtu.be)" - }, - "shortsAutoScroll": { - "label": "쇼츠 동영상 자동 스크롤", - "title": "재생이 완료되면 다음 쇼츠로 넘어갑니다." - }, - "skipContinueWatching": { - "label": "'동영상이 일시중지되었습니다. 이어서 시청하시겠어요?' 팝업 스킵", - "title": "'동영상이 일시중지되었습니다. 이어서 시청하시겠어요?' 팝업을 자동으로 스킵하여 끊김 없는 재생을 유지합니다." - } - }, - "title": "기타 설정" - }, - "onScreenDisplaySettings": { - "color": { - "label": "색상", - "options": { - "blue": "블루", - "green": "그린", - "orange": "오렌지", - "pink": "핑크", - "purple": "퍼플", - "red": "레드", - "white": "화이트", - "yellow": "옐로우" - }, - "title": "화면에 속도 조절 등의 알림을 표시하는 텍스트 색상을 변경합니다." - }, - "hide": { - "label": "사라지는 시간", - "title": "온 스크린 디스플레이가 몇초 후에 사라지는지 설정합니다." - }, - "opacity": { - "label": "투명도", - "title": "온 스크린 디스플레이의 투명도 조절" - }, - "padding": { - "label": "여백", - "title": "온 스크린 디스플레이의 주변 여백을 픽셀 단위로 조절합니다." - }, - "position": { - "label": "위치", - "options": { - "bottom_left": "왼쪽 아래", - "bottom_right": "오른쪽 아래", - "center": "가운데", - "top_left": "왼쪽 위", - "top_right": "오른쪽 위" - }, - "title": "온 스크린 디스플레이의 위치를 선택하세요" - }, - "title": "온 스크린 디스플레이 설정", - "type": { - "label": "유형", - "options": { - "circle": "원형", - "line": "선", - "no_display": "표시 안 함", - "text": "텍스트" - }, - "title": "온 스크린 디스플레이가 어떻게 표시될지 선택합니다." - } - }, - "playbackSpeed": { - "enable": { - "label": "재생 속도 고정", - "title": "동영상 재생 속도를 아래에서 선택한 속도로 설정합니다." - }, - "playbackSpeedButtons": { - "label": "재생 속도 버튼", - "select": { - "label": "재생 속도 버튼", - "title": "클릭당 변경되는 속도 단위" - }, - "title": "보고있는 동영상의 재생 속도를 변경하기 위한 버튼 추가" - }, - "select": { - "label": "플레이어 속도", - "title": "동영상의 속도를 변경합니다." - }, - "title": "재생 속도 설정" - }, - "playlistLength": { - "enable": { - "label": "Display playlist length information", - "title": "Shows the total length of the playlist, how much has been watched, and how much remains." - }, - "title": "Playlist length settings", - "wayToGetLength": { - "select": { - "label": "Method to get playlist length", - "title": "The way to get playlist length information (API method will fallback to HTML if an error occurs)" - } - }, - "wayToGetWatchTime": { - "select": { - "label": "Method to get watched time", - "options": { - "duration": "Video Length", - "youtube": "Video Watch Time" - }, - "title": "The way to get the amount of time watched (Video Length type only used on watch page)" - } - } - }, - "screenshotButton": { - "enable": { - "label": "스크린샷 버튼", - "title": "현재 화면을 캡처하기 위한 스크린샷 버튼을 추가합니다." - }, - "saveAs": { - "clipboard": "클립보드로 복사", - "file": "파일로 저장" - }, - "selectFormat": { - "label": "캡처 방법", - "title": "스크린샷을 저장하는 방식" - }, - "selectSaveAs": { - "label": "스크린샷 저장 방식", - "title": "현재 화면을 클립보드에 복사, 파일로 저장 두 가지 옵션이 있습니다." - }, - "title": "스크린샷 설정" - }, - "scrollWheelSpeedControl": { - "adjustmentSteps": { - "label": "스크롤 당 속도 변경", - "title": "스크롤에 따라 속도가 조절됩니다." - }, - "enable": { - "label": "스크롤 휠로 속도 제어", - "title": "스크롤 휠을 사용해 속도를 조절하려면 이 옵션을 사용하세요" - }, - "optionLabel": "{{KEY}}", - "select": { - "label": "보조 키", - "title": "보조 키와 함께 사용해야 작동이 됩니다." - }, - "title": "스크롤 휠 속도 제어 설정" - }, - "scrollWheelVolumeControl": { - "adjustmentSteps": { - "label": "스크롤 당 볼륨 조절", - "title": "스크롤에 따라 볼륨이 조절됩니다." - }, - "enable": { - "label": "스크롤로 볼륨 조절", - "title": "스크롤 휠을 사용하여 보고 있는 동영상의 볼륨을 조절할 수 있습니다." - }, - "holdModifierKey": { - "enable": { - "label": "보조 키를 누를 때 활성화", - "title": "보조 키와 함께 사용해야 작동합니다." - }, - "optionLabel": "{{KEY}}", - "select": { - "label": "보조 키", - "title": "보조 키와 함께 사용해야 작동합니다." - } - }, - "holdRightClick": { - "enable": { - "label": "마우스 오른쪽 버튼을 누른 상태에서 활성화", - "title": "우클릭 상태로 스크롤 하세요" - } - }, - "title": "스크롤 휠로 볼륨 조절 설정" - }, - "settingSearch": { - "placeholder": "설정 검색" - }, - "videoHistory": { - "enable": { - "label": "시청한 동영상 기억", - "title": "동영상의 중단된 위치를 기억하고 이어서 시청할 수 있습니다." - }, - "resumeType": { - "select": { - "label": "이어서 시청하기", - "options": { - "automatic": "자동", - "prompt": "팝업 클릭" - }, - "title": "이어서 시청하는 방법 선택" - } - }, - "title": "동영상 시청 기록 설정" - }, - "volumeBoost": { - "boostAmount": { - "label": "부피 부스트(dB)", - "title": "높을 수록 소리가 커집니다." - }, - "enable": { - "label": "볼륨 부스트", - "title": "볼륨 부스트 켜기" - }, - "mode": { - "select": { - "label": "볼륨 부스트 적용 방법", - "options": { - "global": "전체", - "perVideo": "개별 동영상" - }, - "title": "볼륨 부스트 활성화 방법을 선택하십시오. '개별 동영상'을 사용하면 추가 기능 메뉴에서 각 비디오를 개별적으로 적용할 수 있습니다. 전체'를 선택하면 이 모든 동영상에 적용됩니다." - } - }, - "title": "볼륨 부스트 설정" - }, - "youtubeDataApiV3Key": { - "getApiKeyLinkText": "You can get one from here", - "input": { - "label": "API Key", - "title": "Enter your Youtube Data API V3 key." - }, - "title": "YouTube API V3 Key" - }, - "youtubeDeepDark": { - "author": "개발자", - "co-authors": "도와주신분들", - "colors": { - "colorShadow": { - "label": "그림자 색상", - "title": "그림자 색상" - }, - "dimmerText": { - "label": "보조 텍스트 색상", - "title": "보조 텍스트의 색상" - }, - "hoverBackground": { - "label": "마우스 커서를 올렸을 때 색상", - "title": "마우스 커서를 올렸을 때의 색상을 변경합니다." - }, - "mainBackground": { - "label": "메인 배경 색상", - "title": "메인 백그라운드 색상을 변경합니다." - }, - "mainColor": { - "label": "강조 색상", - "title": "강조할 색상을 선택하세요" - }, - "mainText": { - "label": "메인 텍스트 색상", - "title": "메인 텍스트 색상을 변경합니다." - }, - "secondBackground": { - "label": "보조 배경 색상", - "title": "보조 배경의 색상을 변경합니다." - } - }, - "enable": { - "label": "선택한 테마 사용", - "title": "선택한 테마를 활성화합니다." - }, - "select": { - "label": "테마 선택", - "title": "적용할 테마를 선택하세요" - }, - "title": "유튜브 딥 다크 설정" - } - } - } -} \ No newline at end of file + "langCode": "ko-KR", + "langName": "한국어", + "messages": { + "resumingVideo": "영상을 {{VIDEO_TIME}} 부터 다시 재생합니다.", + "settingVolume": "볼륨 부스트를 {{VOLUME_BOOST_AMOUNT}} 로 설정합니다." + }, + "pages": { + "content": { + "features": { + "copyTimestampUrlButton": { + "button": { + "copied": "복사되었습니다.", + "label": "현재 시간 주소 복사" + } + }, + "featureMenu": { + "button": { + "label": "추가 기능" + } + }, + "forwardRewindButtons": { + "buttons": { + "forwardButton": { + "label": "{{TIME}} 초 빨리 감기" + }, + "rewindButton": { + "label": "{{TIME}} 초 되감기" + } + } + }, + "hideEndScreenCardsButton": { + "button": { + "label": "최종 화면 숨기기", + "toggle": { + "off": "최종 화면 보기", + "on": "최종 화면 숨기기" + } + } + }, + "loopButton": { + "button": { + "label": "연속 재생", + "toggle": { + "off": "연속 재생 끄기", + "on": "연속 재생 켜기" + } + } + }, + "maximizePlayerButton": { + "button": { + "label": "화면 크기에 맞추기", + "toggle": { + "off": "끄기", + "on": "켜기" + } + } + }, + "openTranscriptButton": { + "button": { + "label": "스크립트 보기" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "재생 속도를 {{SPEED}} 로 변경" + }, + "increasePlaybackSpeedButton": { + "label": "재생 속도를 {{SPEED}} 로 변경" + } + }, + "decreaseLimit": "({{SPEED}}) 에서 더 줄일 수 없습니다.", + "increaseLimit": "({{SPEED}}) 에서 더 늘릴 수 없습니다." + }, + "playlistLength": { + "title": "Total length may not be accurate if some videos are hidden or if you haven't loaded enough videos to get the full length." + }, + "screenshotButton": { + "button": { + "label": "스크린샷" + }, + "copiedToClipboard": "현재 화면 클립보드에 복사" + }, + "videoHistory": { + "resumeButton": "이어서 시청하기", + "resumePrompt": { + "close": "닫기" + } + }, + "volumeBoostButton": { + "button": { + "label": "볼륨 부스트", + "toggle": { + "off": "볼륨 부스트 끄기", + "on": "볼륨 부스트 켜기" + } + } + } + } + }, + "options": { + "notifications": { + "error": { + "scrollWheelHoldModifierKey": { + "sameKey": { + "speedControl": "중복되는 키가 설정되어 있습니다.", + "volumeControl": "중복되는 키가 설정되어 있습니다." + } + } + }, + "info": { + "reset": "모든 옵션이 기본값으로 재설정되었습니다.\n이제 \"확인\" 버튼를 눌러 변경사항을 저장하거나 이 페이지를 닫아 변경사항을 취소할 수 있습니다." + }, + "success": { + "saved": "저장되었습니다." + } + } + } + }, + "settings": { + "clearData": { + "allDataDeleted": "모든 데이터가 삭제되었습니다.", + "confirmAlert": "모든 데이터가 삭제됩니다. 진행할까요?" + }, + "optionDisabled": { + "either": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " or " + }, + "plural": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " and " + }, + "singular": "Enable '{{OPTION}}' to configure this option", + "specificOption": { + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + } + }, + "scrollForMoreSettings": "Scroll for more settings", + "sections": { + "automaticQuality": { + "enable": { + "label": "화질 설정", + "title": "영상의 화질이 자동으로 변경됩니다." + }, + "fallbackQualityStrategy": { + "select": { + "label": "화질 대체", + "options": { + "higher": "높음", + "lower": "낮음" + }, + "title": "선택한 화질을 사용할 수 없을 때 다음 방법을 사용합니다." + } + }, + "select": { + "label": "동영상 화질", + "title": "항상 선택한 화질로 동영상이 재생됩니다." + }, + "title": "동영상 화질 자동 변경" + }, + "bottomButtons": { + "clear": { + "title": "확장과 관련된 데이터를 PC에서 모두 삭제합니다.", + "value": "데이터 삭제" + }, + "confirm": { + "title": "작업을 진행하려면 다시 누르세요", + "value": "확인" + }, + "openTab": { + "title": "새 탭에서 설정 열기" + }, + "reset": { + "title": "모든 설정을 기본값으로 변경합니다. 진행을 원하시면 확인을 누르세요", + "value": "초기화" + } + }, + "buttonPlacement": { + "select": { + "buttonNames": { + "copyTimestampUrlButton": "현재 시간 주소 복사 버튼", + "decreasePlaybackSpeedButton": "속도 조절 버튼", + "forwardButton": "빨리 감기 버튼", + "hideEndScreenCardsButton": "최종 화면 숨기기", + "increasePlaybackSpeedButton": "속도 조절 버튼", + "loopButton": "연속 재생 버튼", + "maximizePlayerButton": "화면 크기에 맞추기 버튼", + "openTranscriptButton": "스크립트 보기 버튼", + "rewindButton": "되감기 버튼", + "screenshotButton": "스크린샷 버튼", + "volumeBoostButton": "볼륨 부스트 버튼" + }, + "options": { + "below_player": { + "placement": "플레이어 컨트롤 아래", + "value": "아래" + }, + "feature_menu": { + "placement": "추가 기능 버튼", + "value": "추가 기능" + }, + "player_controls_left": { + "placement": "플레이어 컨트롤의 왼쪽", + "value": "왼쪽" + }, + "player_controls_right": { + "placement": "플레이어 컨트롤의 오른쪽", + "value": "오른쪽" + } + }, + "title": "{{BUTTON_NAME}} 을 {{PLACEMENT}} 에 배치하세요" + }, + "title": "버튼 배치 설정" + }, + "customCSS": { + "editor": { + "collapse": "편집기 축소", + "expand": "편집기 확대", + "noProblems": "발견된 문제가 없습니다." + }, + "enable": { + "label": "CSS 커스텀 활성화", + "title": "커스텀 CSS를 적용할 수 있습니다." + }, + "title": "커스텀 CSS 설정" + }, + "featureMenu": { + "openType": { + "select": { + "label": "메뉴 활성화 방식", + "options": { + "click": "클릭 시", + "hover": "마우스 커서를 올릴 때" + }, + "title": "추가 기능 메뉴를 어떤 방식으로 열지 선택하세요" + }, + "title": "추가 기능 설정" + } + }, + "forwardRewindButtons": { + "enable": { + "label": "되감기/빨리 감기 버튼 사용", + "title": "플레이어에 되감기와 빨리 감기 버튼을 추가합니다." + }, + "time": { + "label": "되감기/빨리 감기 시간", + "title": "되감기/빨리 감기 시간" + }, + "title": "되감기/빨리 감기 버튼 설정" + }, + "importExportSettings": { + "exportButton": { + "success": "설정을 성공적으로 내보냈습니다.", + "title": "설정 JSON로 내보내기", + "value": "설정 내보내기" + }, + "importButton": { + "error": { + "unknown": "설정 가져오기에 오류가 있습니다. 파일 형식을 확인하십시오.", + "validation": "설정 가져 오기에 오류가 있습니다. 파일 형식을 확인하십시오.\n{{ERROR_MESSAGE}}" + }, + "success": "설정 파일을 성공적으로 가져왔습니다.", + "title": "JSON 파일에서 설정 가져오기", + "value": "설정 가져오기" + } + }, + "language": { + "select": { + "label": "언어", + "title": "이곳에서 언어를 변경할 수 있습니다." + }, + "title": "언어" + }, + "miscellaneous": { + "features": { + "automaticTheaterMode": { + "label": "자동 극장 모드", + "title": "동영상 재생 시 자동으로 극장 모드가 활성화 됩니다." + }, + "automaticallyDisableAmbientMode": { + "label": "Automatically disable ambient mode", + "title": "Automatically disables ambient mode when you load a video" + }, + "automaticallyDisableClosedCaptions": { + "label": "Automatically disable closed captions", + "title": "Automatically disables closed captions when you load a video" + }, + "copyTimestampUrlButton": { + "label": "현재 시간 주소 복사 버튼", + "title": "현재 시간 주소 복사 (?t=123)" + }, + "defaultToOriginalAudioTrack": { + "label": "Default to original audio track", + "title": "Always default to the original audio track" + }, + "hideArtificialIntelligenceSummary": { + "label": "Hide AI summary", + "title": "Hides the artificial intelligence summary below videos" + }, + "hideEndScreenCards": { + "label": "최종 화면 숨기기", + "title": "동영상 마지막에 등장하는 추천 동영상 카드들을 숨깁니다." + }, + "hideEndScreenCardsButton": { + "label": "최종 화면 숨기기 버튼", + "title": "동영상 마지막에 등장하는 추천 동영상 카드들을 숨기거나 표시합니다." + }, + "hideLiveStreamChat": { + "label": "실시간 채팅 숨기기", + "title": "실시간 채팅 레이아웃을 숨깁니다." + }, + "hideOfficialArtistVideosFromHomePage": { + "label": "Hide Official Artist Videos", + "title": "Hide Official Artist Videos from Home Page" + }, + "hidePaidPromotionBanner": { + "label": "유료 광고 배너 숨기기", + "title": "유료 광고가 있는 동영상을 볼 때 나타나는 배너를 숨깁니다." + }, + "hidePlayables": { + "label": "Hide playables", + "title": "Hides all playables" + }, + "hideScrollbar": { + "label": "스크롤바 숨기기", + "title": "스크롤바를 숨깁니다. 깔끔한 느낌을 받으시려면 키세요" + }, + "hideShorts": { + "label": "쇼츠 숨기기", + "title": "쇼츠 동영상들을 숨깁니다." + }, + "hideTranslateComment": { + "label": "댓글 번역 버튼 숨기기", + "title": "댓글 아래에 표시되는 번역 버튼을 숨깁니다." + }, + "loopButton": { + "label": "연속 재생 버튼", + "title": "추가 기능 메뉴에 \"연속 재생\" 버튼을 추가합니다." + }, + "maximizePlayerButton": { + "label": "화면 크기에 맞추기 버튼", + "title": "추가 기능 메뉴에 \"화면 크기에 맞추기\" 버튼을 추가합니다." + }, + "openTranscriptButton": { + "label": "스크립트 보기 버튼", + "title": "추가 기능 메뉴에 \"스크립트 보기\" 버튼을 추가합니다." + }, + "openYouTubeSettingsOnHover": { + "label": "마우스 커서를 올려 유튜브 설정 열기", + "title": "설정 버튼 위로 마우스 커서를 올리면 유튜브 설정 메뉴를 엽니다." + }, + "pauseBackgroundPlayers": { + "label": "백그라운드 플레이어 일시 중지", + "title": "다른 탭에서 동영상을 재생할 때 이전 탭의 동영상 플레이어를 일시 중지합니다." + }, + "playlistRemover": { + "label": "Hide playlists from homepage", + "title": "Get rid of playlists from homepage" + }, + "remainingTime": { + "label": "남은 시간 표시", + "title": "현재 동영상의 남은 시간을 표시합니다." + }, + "rememberLastVolume": { + "label": "마지막 볼륨 기억", + "title": "마지막으로 본 동영상의 볼륨이 다른 동영상에서도 유지됩니다." + }, + "removeRedirect": { + "label": "유튜브 / 리디렉션 URL 제거", + "title": "리디렉션 경고 대화를 건너뛰고 실제 URL로 유튜브 리디렉션을 대체합니다." + }, + "restoreFullscreenScrolling": { + "label": "Restore fullscreen scrolling", + "title": "Restores scrolling in fullscreen mode" + }, + "shareShortener": { + "label": "유튜브 동영상 공유 링크 짧게하기", + "title": "si/feature 매개 변수를 제거하여 유튜브 동영상 공유 링크를 단축(youtu.be)" + }, + "shortsAutoScroll": { + "label": "쇼츠 동영상 자동 스크롤", + "title": "재생이 완료되면 다음 쇼츠로 넘어갑니다." + }, + "skipContinueWatching": { + "label": "'동영상이 일시중지되었습니다. 이어서 시청하시겠어요?' 팝업 스킵", + "title": "'동영상이 일시중지되었습니다. 이어서 시청하시겠어요?' 팝업을 자동으로 스킵하여 끊김 없는 재생을 유지합니다." + } + }, + "title": "기타 설정" + }, + "onScreenDisplaySettings": { + "color": { + "label": "색상", + "options": { + "blue": "블루", + "green": "그린", + "orange": "오렌지", + "pink": "핑크", + "purple": "퍼플", + "red": "레드", + "white": "화이트", + "yellow": "옐로우" + }, + "title": "화면에 속도 조절 등의 알림을 표시하는 텍스트 색상을 변경합니다." + }, + "hide": { + "label": "사라지는 시간", + "title": "온 스크린 디스플레이가 몇초 후에 사라지는지 설정합니다." + }, + "opacity": { + "label": "투명도", + "title": "온 스크린 디스플레이의 투명도 조절" + }, + "padding": { + "label": "여백", + "title": "온 스크린 디스플레이의 주변 여백을 픽셀 단위로 조절합니다." + }, + "position": { + "label": "위치", + "options": { + "bottom_left": "왼쪽 아래", + "bottom_right": "오른쪽 아래", + "center": "가운데", + "top_left": "왼쪽 위", + "top_right": "오른쪽 위" + }, + "title": "온 스크린 디스플레이의 위치를 선택하세요" + }, + "title": "온 스크린 디스플레이 설정", + "type": { + "label": "유형", + "options": { + "circle": "원형", + "line": "선", + "no_display": "표시 안 함", + "text": "텍스트" + }, + "title": "온 스크린 디스플레이가 어떻게 표시될지 선택합니다." + } + }, + "playbackSpeed": { + "enable": { + "label": "재생 속도 고정", + "title": "동영상 재생 속도를 아래에서 선택한 속도로 설정합니다." + }, + "playbackSpeedButtons": { + "label": "재생 속도 버튼", + "select": { + "label": "재생 속도 버튼", + "title": "클릭당 변경되는 속도 단위" + }, + "title": "보고있는 동영상의 재생 속도를 변경하기 위한 버튼 추가" + }, + "select": { + "label": "플레이어 속도", + "title": "동영상의 속도를 변경합니다." + }, + "title": "재생 속도 설정" + }, + "playlistLength": { + "enable": { + "label": "Display playlist length information", + "title": "Shows the total length of the playlist, how much has been watched, and how much remains." + }, + "title": "Playlist length settings", + "wayToGetLength": { + "select": { + "label": "Method to get playlist length", + "title": "The way to get playlist length information (API method will fallback to HTML if an error occurs)" + } + }, + "wayToGetWatchTime": { + "select": { + "label": "Method to get watched time", + "options": { + "duration": "Video Length", + "youtube": "Video Watch Time" + }, + "title": "The way to get the amount of time watched (Video Length type only used on watch page)" + } + } + }, + "screenshotButton": { + "enable": { + "label": "스크린샷 버튼", + "title": "현재 화면을 캡처하기 위한 스크린샷 버튼을 추가합니다." + }, + "saveAs": { + "clipboard": "클립보드로 복사", + "file": "파일로 저장" + }, + "selectFormat": { + "label": "캡처 방법", + "title": "스크린샷을 저장하는 방식" + }, + "selectSaveAs": { + "label": "스크린샷 저장 방식", + "title": "현재 화면을 클립보드에 복사, 파일로 저장 두 가지 옵션이 있습니다." + }, + "title": "스크린샷 설정" + }, + "scrollWheelSpeedControl": { + "adjustmentSteps": { + "label": "스크롤 당 속도 변경", + "title": "스크롤에 따라 속도가 조절됩니다." + }, + "enable": { + "label": "스크롤 휠로 속도 제어", + "title": "스크롤 휠을 사용해 속도를 조절하려면 이 옵션을 사용하세요" + }, + "optionLabel": "{{KEY}}", + "select": { + "label": "보조 키", + "title": "보조 키와 함께 사용해야 작동이 됩니다." + }, + "title": "스크롤 휠 속도 제어 설정" + }, + "scrollWheelVolumeControl": { + "adjustmentSteps": { + "label": "스크롤 당 볼륨 조절", + "title": "스크롤에 따라 볼륨이 조절됩니다." + }, + "enable": { + "label": "스크롤로 볼륨 조절", + "title": "스크롤 휠을 사용하여 보고 있는 동영상의 볼륨을 조절할 수 있습니다." + }, + "holdModifierKey": { + "enable": { + "label": "보조 키를 누를 때 활성화", + "title": "보조 키와 함께 사용해야 작동합니다." + }, + "optionLabel": "{{KEY}}", + "select": { + "label": "보조 키", + "title": "보조 키와 함께 사용해야 작동합니다." + } + }, + "holdRightClick": { + "enable": { + "label": "마우스 오른쪽 버튼을 누른 상태에서 활성화", + "title": "우클릭 상태로 스크롤 하세요" + } + }, + "title": "스크롤 휠로 볼륨 조절 설정" + }, + "settingSearch": { + "placeholder": "설정 검색" + }, + "videoHistory": { + "enable": { + "label": "시청한 동영상 기억", + "title": "동영상의 중단된 위치를 기억하고 이어서 시청할 수 있습니다." + }, + "resumeType": { + "select": { + "label": "이어서 시청하기", + "options": { + "automatic": "자동", + "prompt": "팝업 클릭" + }, + "title": "이어서 시청하는 방법 선택" + } + }, + "title": "동영상 시청 기록 설정" + }, + "volumeBoost": { + "boostAmount": { + "label": "부피 부스트(dB)", + "title": "높을 수록 소리가 커집니다." + }, + "enable": { + "label": "볼륨 부스트", + "title": "볼륨 부스트 켜기" + }, + "mode": { + "select": { + "label": "볼륨 부스트 적용 방법", + "options": { + "global": "전체", + "perVideo": "개별 동영상" + }, + "title": "볼륨 부스트 활성화 방법을 선택하십시오. '개별 동영상'을 사용하면 추가 기능 메뉴에서 각 비디오를 개별적으로 적용할 수 있습니다. 전체'를 선택하면 이 모든 동영상에 적용됩니다." + } + }, + "title": "볼륨 부스트 설정" + }, + "youtubeDataApiV3Key": { + "getApiKeyLinkText": "You can get one from here", + "input": { + "label": "API Key", + "title": "Enter your Youtube Data API V3 key." + }, + "title": "YouTube API V3 Key" + }, + "youtubeDeepDark": { + "author": "개발자", + "co-authors": "도와주신분들", + "colors": { + "colorShadow": { + "label": "그림자 색상", + "title": "그림자 색상" + }, + "dimmerText": { + "label": "보조 텍스트 색상", + "title": "보조 텍스트의 색상" + }, + "hoverBackground": { + "label": "마우스 커서를 올렸을 때 색상", + "title": "마우스 커서를 올렸을 때의 색상을 변경합니다." + }, + "mainBackground": { + "label": "메인 배경 색상", + "title": "메인 백그라운드 색상을 변경합니다." + }, + "mainColor": { + "label": "강조 색상", + "title": "강조할 색상을 선택하세요" + }, + "mainText": { + "label": "메인 텍스트 색상", + "title": "메인 텍스트 색상을 변경합니다." + }, + "secondBackground": { + "label": "보조 배경 색상", + "title": "보조 배경의 색상을 변경합니다." + } + }, + "enable": { + "label": "선택한 테마 사용", + "title": "선택한 테마를 활성화합니다." + }, + "select": { + "label": "테마 선택", + "title": "적용할 테마를 선택하세요" + }, + "title": "유튜브 딥 다크 설정" + } + } + } +} diff --git a/public/locales/ru-RU.json b/public/locales/ru-RU.json index 114bd8e56..144fc47fb 100644 --- a/public/locales/ru-RU.json +++ b/public/locales/ru-RU.json @@ -1,642 +1,642 @@ { - "langCode": "ru-RU", - "langName": "Русский", - "messages": { - "resumingVideo": "Возобновление видео на {{VIDEO_TIME}}", - "settingVolume": "Усиление громкости установлено на {{VOLUME_BOOST_AMOUNT}}" - }, - "pages": { - "content": { - "features": { - "copyTimestampUrlButton": { - "button": { - "copied": "Скопировано!", - "label": "Копировать URL видео с таймкодом" - } - }, - "featureMenu": { - "button": { - "label": "Меню функций" - } - }, - "forwardRewindButtons": { - "buttons": { - "forwardButton": { - "label": "Перемотка вперёд на {{TIME}}" - }, - "rewindButton": { - "label": "Перемотка назад на {{TIME}}" - } - } - }, - "hideEndScreenCardsButton": { - "button": { - "label": "Скрыть заставки следующих видео", - "toggle": { - "off": "Показать заставки следующих видео", - "on": "Скрыть заставки следующих видео" - } - } - }, - "loopButton": { - "button": { - "label": "Зациклить", - "toggle": { - "off": "Зацикливание выключено", - "on": "Зацикливание включено" - } - } - }, - "maximizePlayerButton": { - "button": { - "label": "Развернуть", - "toggle": { - "off": "Проигрыватель свернут", - "on": "Проигрыватель развернут" - } - } - }, - "openTranscriptButton": { - "button": { - "label": "Открыть стенограмму" - } - }, - "playbackSpeedButtons": { - "buttons": { - "decreasePlaybackSpeedButton": { - "label": "Уменьшить скорость на {{SPEED}}" - }, - "increasePlaybackSpeedButton": { - "label": "Увеличить скорость на {{SPEED}}" - } - }, - "decreaseLimit": "Невозможно уменьшить ({{SPEED}})", - "increaseLimit": "Невозможно увеличить ({{SPEED}})" - }, - "playlistLength": { - "title": "Общая длина может быть неточной, если некоторые видео скрыты или недостаточно видео прогружено, чтобы получить полную длину." - }, - "screenshotButton": { - "button": { - "label": "Скриншот" - }, - "copiedToClipboard": "Скриншот скопирован в буфер обмена" - }, - "videoHistory": { - "resumeButton": "Возобновить", - "resumePrompt": { - "close": "Закрыть" - } - }, - "volumeBoostButton": { - "button": { - "label": "Усиление громкости", - "toggle": { - "off": "Увеличение громкости выключено", - "on": "Увеличение громкости включено" - } - } - } - } - }, - "options": { - "notifications": { - "error": { - "scrollWheelHoldModifierKey": { - "sameKey": { - "speedControl": "Клавиша-модификатор для управления скоростью воспроизведения с помощью колеса мыши не может совпадать с клавишей-модификатором для управления громкостью.", - "volumeControl": "Клавиша-модификатор для управления громкостью с помощью колеса мыши не может совпадать с клавишей-модификатором для управления скоростью воспроизведения." - } - } - }, - "info": { - "reset": "Все параметры были сброшены к значениям по умолчанию.\nТеперь вы можете сохранить изменения, нажав кнопку «Подтвердить» или отменить их, закрыв эту страницу или проигнорировав это уведомление." - }, - "success": { - "saved": "Настройки сохранены." - } - } - } - }, - "settings": { - "clearData": { - "allDataDeleted": "Все данные были удалены.", - "confirmAlert": "Это приведет к удалению всех данных расширения, связанных с настройками. Продолжить?" - }, - "optionDisabled": { - "either": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " or " - }, - "plural": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " and " - }, - "singular": "Enable '{{OPTION}}' to configure this option", - "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." - } - }, - "scrollForMoreSettings": "Scroll for more settings", - "sections": { - "automaticQuality": { - "enable": { - "label": "Включить автоматическую регулировку качества", - "title": "Автоматически настраивает качество видео на выбранный уровень." - }, - "fallbackQualityStrategy": { - "select": { - "label": "Стратегия восстановления качества", - "options": { - "higher": "Выше", - "lower": "Ниже" - }, - "title": "Какую стратегию использовать, когда выбранное качество недоступно" - } - }, - "select": { - "label": "Качество проигрывателя", - "title": "Качество, которое будет задаваться для видео" - }, - "title": "Автоматические настройки качества" - }, - "bottomButtons": { - "clear": { - "title": "Очистить все данные, которые это расширение хранит на вашем компьютере", - "value": "Удалить данные" - }, - "confirm": { - "title": "Подтвердить сброс настроек", - "value": "Подтвердить" - }, - "openTab": { - "title": "Открывать настройки расширения в новой вкладке" - }, - "reset": { - "title": "Сбрасывает все параметры до значений по умолчанию. Нажмите \"Подтвердить\", чтобы сохранить изменения", - "value": "Сброс" - } - }, - "buttonPlacement": { - "select": { - "buttonNames": { - "copyTimestampUrlButton": "Кнопка «Копировать URL видео с таймкодом»", - "decreasePlaybackSpeedButton": "Кнопка уменьшения скорости видео", - "forwardButton": "Кнопка перемотки вперёд", - "hideEndScreenCardsButton": "Кнопка «Скрыть заставки следующих видео»", - "increasePlaybackSpeedButton": "Кнопка увеличения скорости видео", - "loopButton": "Кнопка «Зациклить»", - "maximizePlayerButton": "Кнопка «Развернуть»", - "openTranscriptButton": "Кнопка «Открыть стенограмму»", - "rewindButton": "Кнопка перемотки назад", - "screenshotButton": "Кнопка «Скриншот»", - "volumeBoostButton": "Кнопка «Усиление громкости»" - }, - "options": { - "below_player": { - "placement": "под проигрывателем", - "value": "Под проигрывателем" - }, - "feature_menu": { - "placement": "в меню функций", - "value": "Меню функций" - }, - "player_controls_left": { - "placement": "с левой стороны панели управления", - "value": "Слева" - }, - "player_controls_right": { - "placement": "с правой стороны панели управления", - "value": "Справа" - } - }, - "title": "Поместить {{BUTTON_NAME}} {{PLACEMENT}}" - }, - "title": "Настройки размещения кнопок" - }, - "customCSS": { - "editor": { - "collapse": "Свернуть редактор", - "expand": "Расширить редактор", - "noProblems": "Проблем не найдено." - }, - "enable": { - "label": "Включить пользовательский CSS", - "title": "Включает пользовательские настройки CSS для применения к странице" - }, - "title": "Пользовательские настройки CSS" - }, - "featureMenu": { - "openType": { - "select": { - "label": "Тип активации меню", - "options": { - "click": "Посредством нажатия", - "hover": "При наведении курсора" - }, - "title": "Выберите способ активации меню функций" - }, - "title": "Настройки меню функций" - } - }, - "forwardRewindButtons": { - "enable": { - "label": "Включить кнопки перемотки вперёд/назад", - "title": "Добавляет кнопки перемотки вперёд/назад в проигрыватель" - }, - "time": { - "label": "Время перемотки", - "title": "Кол-во времени, на которое будет перематываться видео" - }, - "title": "Настройки кнопок перемотки вперёд/назад" - }, - "importExportSettings": { - "exportButton": { - "success": "Настройки успешно экспортированы", - "title": "Экспорт настроек в JSON файл", - "value": "Экспорт настроек" - }, - "importButton": { - "error": { - "unknown": "Ошибка импорта настроек. Пожалуйста, проверьте формат файла.\nПроизошла неизвестная ошибка.", - "validation": "Ошибка импорта настроек. Пожалуйста, проверьте формат файла.\n{{ERROR_MESSAGE}}" - }, - "success": "Настройки успешно импортированы", - "title": "Импорт настроек из JSON файла", - "value": "Импорт настроек" - } - }, - "language": { - "select": { - "label": "Язык", - "title": "Язык расширения" - }, - "title": "Язык" - }, - "miscellaneous": { - "features": { - "automaticTheaterMode": { - "label": "Включить автоматический режим кинотеатра", - "title": "Автоматически включать режим кинотеатра при загрузке видео" - }, - "automaticallyDisableAmbientMode": { - "label": "Автоматическое отключение режима освещения", - "title": "Автоматически отключать режим освещения при загрузке видео" - }, - "automaticallyDisableClosedCaptions": { - "label": "Автоматически отключать субтитры", - "title": "Автоматически отключает субтитры при загрузке видео" - }, - "copyTimestampUrlButton": { - "label": "Кнопка «Копировать URL видео с таймкодом»", - "title": "Копирует ссылку видео с меткой времени (?t=123)" - }, - "defaultToOriginalAudioTrack": { - "label": "Default to original audio track", - "title": "Always default to the original audio track" - }, - "hideArtificialIntelligenceSummary": { - "label": "Hide AI summary", - "title": "Hides the artificial intelligence summary below videos" - }, - "hideEndScreenCards": { - "label": "Скрыть заставки следующих видео", - "title": "Скрывает заставки следующих (предлагаемых) видео в конце ролика" - }, - "hideEndScreenCardsButton": { - "label": "Кнопка «Скрыть заставки следующих видео»", - "title": "Добавляет кнопку для скрытия/отображения заставок следующих видео в конце ролика" - }, - "hideLiveStreamChat": { - "label": "Спрятать чат прямого эфира", - "title": "Прячет чат прямого эфира (стрима)" - }, - "hideOfficialArtistVideosFromHomePage": { - "label": "Скрывать официальные видео исполнителя", - "title": "Скрывает официальные видео исполнителя с домашней страницы" - }, - "hidePaidPromotionBanner": { - "label": "Скрыть \"Содержит прямую рекламу\"", - "title": "Скрывает баннер, отображающийся при просмотре видео, которое имеет платную рекламу" - }, - "hidePlayables": { - "label": "Hide playables", - "title": "Hides all playables" - }, - "hideScrollbar": { - "label": "Включить скрытие полосы прокрутки страницы", - "title": "Скрывает полосу прокрутки страницы" - }, - "hideShorts": { - "label": "Скрыть Shorts", - "title": "Скрывает все Shorts" - }, - "hideTranslateComment": { - "label": "Спрятать кнопку 'Перевести на...'", - "title": "Прячет кнопку 'Перевести на русский' под комментарием" - }, - "loopButton": { - "label": "Включить кнопку «Зациклить»", - "title": "Добавляет кнопку в меню функций для автоматического повтора просмотренного видео (зацикливание)" - }, - "maximizePlayerButton": { - "label": "Включить кнопку «Развернуть проигрыватель»", - "title": "Добавляет кнопку в меню функций, которая позволит максимизировать проигрыватель" - }, - "openTranscriptButton": { - "label": "Показать кнопку стенограммы видео", - "title": "Добавляет кнопку в меню функций, чтобы открыть стенограмму видео, которое вы просматриваете" - }, - "openYouTubeSettingsOnHover": { - "label": "Открывать настройки YouTube при наведении курсора", - "title": "Открывает меню настроек YouTube при наведении на кнопку меню" - }, - "pauseBackgroundPlayers": { - "label": "Ставить на паузу видео в фоновых вкладках", - "title": "Ставит на паузу видео в фоновых вкладках при запуске видео в активной (текущей) вкладке" - }, - "playlistRemover": { - "label": "Hide playlists from homepage", - "title": "Get rid of playlists from homepage" - }, - "remainingTime": { - "label": "Включить отображение оставшегося времени", - "title": "Показывает оставшееся время просмотра видео" - }, - "rememberLastVolume": { - "label": "Запомнить уровень громкости", - "title": "Запоминает громкость последнего видео, которое вы смотрели и устанавливает это значение при открытии нового видео" - }, - "removeRedirect": { - "label": "Убрать YouTube /redirect ссылки", - "title": "Заменяет /redirect ссылки на актуальные, убирая предупреждение о переходе на другой ресурс" - }, - "restoreFullscreenScrolling": { - "label": "Restore fullscreen scrolling", - "title": "Restores scrolling in fullscreen mode" - }, - "shareShortener": { - "label": "Укоротить ссылку с кнопки \"Поделиться\"", - "title": "Укорачивает ссылку с кнопки \"Поделиться\" (youtu.be), убирая параметры si/feature из нее" - }, - "shortsAutoScroll": { - "label": "Автоматическая прокрутка Shorts", - "title": "Автоматически скроллит до следующего Shorts" - }, - "skipContinueWatching": { - "label": "Пропускать \"Воспроизведение приостановлено. Продолжить?\"", - "title": "Автоматически пропускает диалог простоя, который приостанавливает воспроизведение" - } - }, - "title": "Прочие параметры" - }, - "onScreenDisplaySettings": { - "color": { - "label": "Цвет", - "options": { - "blue": "Синий", - "green": "Зеленый", - "orange": "Оранжевый", - "pink": "Розовый", - "purple": "Фиолетовый", - "red": "Красный", - "white": "Белый", - "yellow": "Желтый" - }, - "title": "Выберите цвет для отображения на экране (OSD)" - }, - "hide": { - "label": "Задержка скрытия", - "title": "Укажите время, в миллисекундах, перед автоматическим скрытием OSD" - }, - "opacity": { - "label": "Прозрачность", - "title": "Настройка прозрачности отображения на экране (OSD)" - }, - "padding": { - "label": "Отступы", - "title": "Регулировка интервала вокруг отображения на экране (OSD) в пикселях. Применяется в частности для углов OSD." - }, - "position": { - "label": "Расположение", - "options": { - "bottom_left": "Слева снизу", - "bottom_right": "Справа снизу", - "center": "По центру", - "top_left": "Слева сверху", - "top_right": "Справа сверху" - }, - "title": "Выберите позицию отображения на экране (OSD)" - }, - "title": "Настройки отображения на экране (OSD)", - "type": { - "label": "Тип", - "options": { - "circle": "Круг", - "line": "Линия", - "no_display": "Не показывать", - "text": "Текст" - }, - "title": "Выберите тип отображения на экране (OSD)" - } - }, - "playbackSpeed": { - "enable": { - "label": "Включить принудительную скорость воспроизведения", - "title": "Устанавливает скорость проигрывания видео на ту, что вы выбрали ниже" - }, - "playbackSpeedButtons": { - "label": "Кнопки регулирования скорости видео", - "select": { - "label": "Дельта кнопок регулирования скорости", - "title": "Число, на которое будет изменена скорость за клик" - }, - "title": "Добавляет кнопки для увеличения или уменьшения скорости воспроизведения просматриваемого видео" - }, - "select": { - "label": "Скорость проигрывателя", - "title": "Скорость, которая будет задаваться для видео" - }, - "title": "Настройки скорости воспроизведения" - }, - "playlistLength": { - "enable": { - "label": "Отображать информацию о длине плейлиста", - "title": "Отображает общую временную длину плейлиста, сколько было просмотрено и сколько осталось." - }, - "title": "Настройки длины плейлиста", - "wayToGetLength": { - "select": { - "label": "Способ получения длины плейлиста", - "title": "Способ получения информации о длине плейлиста (метод API будет переключаться обратно к HTML, если возникнет ошибка)" - } - }, - "wayToGetWatchTime": { - "select": { - "label": "Метод получения времени просмотра", - "options": { - "duration": "Продолжительность видео", - "youtube": "Время просмотра видео" - }, - "title": "Способ получения количества времени просмотра (тип длины видео используется только на странице просмотра)" - } - } - }, - "screenshotButton": { - "enable": { - "label": "Включить кнопку «Скриншот»", - "title": "Добавляет кнопку в проигрыватель которая делает скриншот видео" - }, - "saveAs": { - "clipboard": "Буфер обмена", - "file": "Файл" - }, - "selectFormat": { - "label": "Формат скриншота", - "title": "Формат, в котором будет сохраняться скриншот" - }, - "selectSaveAs": { - "label": "Тип сохранения скриншота", - "title": "Тип сохранения скриншота" - }, - "title": "Настройки скриншотов" - }, - "scrollWheelSpeedControl": { - "adjustmentSteps": { - "label": "Изменение скорости воспроизведения за прокрутку колеса", - "title": "Регулировка значения, на которое изменяется скорость воспроизведения за прокрутку" - }, - "enable": { - "label": "Включить управление скоростью воспроизведения с помощью колеса мыши", - "title": "Нажмите клавишу-модификатор, чтобы включить управление скоростью воспроизведения с помощью колеса мыши." - }, - "optionLabel": "Клавиша {{KEY}}", - "select": { - "label": "Клавиша-модификатор", - "title": "Используемая клавиша-модификатор" - }, - "title": "Настройки управления скоростью воспроизведения с помощью колеса мыши" - }, - "scrollWheelVolumeControl": { - "adjustmentSteps": { - "label": "Изменение громкости за прокрутку колеса", - "title": "Регулировка значения, на которое изменяется громкость за прокрутку" - }, - "enable": { - "label": "Включить управление громкостью с помощью колеса мыши", - "title": "Позволяет использовать колесо мыши для управления громкостью видео, которое вы просматриваете" - }, - "holdModifierKey": { - "enable": { - "label": "Включить при удержании клавиши-модификатора", - "title": "Нажмите клавишу-модификатор, чтобы включить управление громкостью с помощью колеса мыши." - }, - "optionLabel": "Клавиша {{KEY}}", - "select": { - "label": "Клавиша-модификатор", - "title": "Используемая клавиша-модификатор" - } - }, - "holdRightClick": { - "enable": { - "label": "Включить при удержании правой кнопки мыши", - "title": "Удерживайте правую кнопку мыши, чтобы включить управление громкостью с помощью колеса мыши" - } - }, - "title": "Настройки управления громкостью с помощью колеса мыши" - }, - "settingSearch": { - "placeholder": "Поиск настроек" - }, - "videoHistory": { - "enable": { - "label": "Отслеживание таймкода просматриваемого видео", - "title": "Отслеживает, на каком моменте вы остановили просмотр видео и продолжает с него" - }, - "resumeType": { - "select": { - "label": "Тип возобновления", - "options": { - "automatic": "Автоматически", - "prompt": "Запрашивать" - }, - "title": "Выберите, как вы хотите возобновлять просмотр видео" - } - }, - "title": "Настройки отслеживания" - }, - "volumeBoost": { - "boostAmount": { - "label": "Значение увеличения громкости (дБ)", - "title": "Значение, на которое будет увеличена громкость" - }, - "enable": { - "label": "Включить усиление громкости", - "title": "Включить усиление громкости" - }, - "mode": { - "select": { - "label": "Режим увеличения громкости", - "options": { - "global": "Глобально", - "perVideo": "Для видео" - }, - "title": "Выберите, каким образом должно применяться усиление громкости. 'Для видео' позволяет включать усиление для каждого видео отдельно в меню функций. 'Глобально' применяет усиление для всех просматриваемых видео когда усиление громкости включено." - } - }, - "title": "Настройки усиления громкости" - }, - "youtubeDataApiV3Key": { - "getApiKeyLinkText": "Вы можете получить ключ здесь", - "input": { - "label": "API ключ", - "title": "Введите ваш ключ Youtube Data API V3." - }, - "title": "Ключ YouTube API V3" - }, - "youtubeDeepDark": { - "author": "Автор", - "co-authors": "Соавторы", - "colors": { - "colorShadow": { - "label": "Цвет тени", - "title": "Цвет теней" - }, - "dimmerText": { - "label": "Цвет вторичного текста", - "title": "Цвет для вторичного текста" - }, - "hoverBackground": { - "label": "Цвет фона при наведении", - "title": "Цвет, который будет задаваться фону при наведении" - }, - "mainBackground": { - "label": "Основной цвет фона", - "title": "Цвет для основного фона" - }, - "mainColor": { - "label": "Цвет акцента", - "title": "Цвет для акцента" - }, - "mainText": { - "label": "Цвет основного текста", - "title": "Цвет для основного текста" - }, - "secondBackground": { - "label": "Дополнительный цвет фона", - "title": "Цвет для вторичного фона" - } - }, - "enable": { - "label": "Включить выбранную тему", - "title": "Активировать выбранную тему для страницы" - }, - "select": { - "label": "Выбрать тему", - "title": "Выберите тему для применения к странице" - }, - "title": "Настройки YouTube Deep Dark" - } - } - } -} \ No newline at end of file + "langCode": "ru-RU", + "langName": "Русский", + "messages": { + "resumingVideo": "Возобновление видео на {{VIDEO_TIME}}", + "settingVolume": "Усиление громкости установлено на {{VOLUME_BOOST_AMOUNT}}" + }, + "pages": { + "content": { + "features": { + "copyTimestampUrlButton": { + "button": { + "copied": "Скопировано!", + "label": "Копировать URL видео с таймкодом" + } + }, + "featureMenu": { + "button": { + "label": "Меню функций" + } + }, + "forwardRewindButtons": { + "buttons": { + "forwardButton": { + "label": "Перемотка вперёд на {{TIME}}" + }, + "rewindButton": { + "label": "Перемотка назад на {{TIME}}" + } + } + }, + "hideEndScreenCardsButton": { + "button": { + "label": "Скрыть заставки следующих видео", + "toggle": { + "off": "Показать заставки следующих видео", + "on": "Скрыть заставки следующих видео" + } + } + }, + "loopButton": { + "button": { + "label": "Зациклить", + "toggle": { + "off": "Зацикливание выключено", + "on": "Зацикливание включено" + } + } + }, + "maximizePlayerButton": { + "button": { + "label": "Развернуть", + "toggle": { + "off": "Проигрыватель свернут", + "on": "Проигрыватель развернут" + } + } + }, + "openTranscriptButton": { + "button": { + "label": "Открыть стенограмму" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Уменьшить скорость на {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Увеличить скорость на {{SPEED}}" + } + }, + "decreaseLimit": "Невозможно уменьшить ({{SPEED}})", + "increaseLimit": "Невозможно увеличить ({{SPEED}})" + }, + "playlistLength": { + "title": "Общая длина может быть неточной, если некоторые видео скрыты или недостаточно видео прогружено, чтобы получить полную длину." + }, + "screenshotButton": { + "button": { + "label": "Скриншот" + }, + "copiedToClipboard": "Скриншот скопирован в буфер обмена" + }, + "videoHistory": { + "resumeButton": "Возобновить", + "resumePrompt": { + "close": "Закрыть" + } + }, + "volumeBoostButton": { + "button": { + "label": "Усиление громкости", + "toggle": { + "off": "Увеличение громкости выключено", + "on": "Увеличение громкости включено" + } + } + } + } + }, + "options": { + "notifications": { + "error": { + "scrollWheelHoldModifierKey": { + "sameKey": { + "speedControl": "Клавиша-модификатор для управления скоростью воспроизведения с помощью колеса мыши не может совпадать с клавишей-модификатором для управления громкостью.", + "volumeControl": "Клавиша-модификатор для управления громкостью с помощью колеса мыши не может совпадать с клавишей-модификатором для управления скоростью воспроизведения." + } + } + }, + "info": { + "reset": "Все параметры были сброшены к значениям по умолчанию.\nТеперь вы можете сохранить изменения, нажав кнопку «Подтвердить» или отменить их, закрыв эту страницу или проигнорировав это уведомление." + }, + "success": { + "saved": "Настройки сохранены." + } + } + } + }, + "settings": { + "clearData": { + "allDataDeleted": "Все данные были удалены.", + "confirmAlert": "Это приведет к удалению всех данных расширения, связанных с настройками. Продолжить?" + }, + "optionDisabled": { + "either": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " or " + }, + "plural": { + "label": "Enable {{OPTIONS}} to configure this option", + "separator": " and " + }, + "singular": "Enable '{{OPTION}}' to configure this option", + "specificOption": { + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + } + }, + "scrollForMoreSettings": "Scroll for more settings", + "sections": { + "automaticQuality": { + "enable": { + "label": "Включить автоматическую регулировку качества", + "title": "Автоматически настраивает качество видео на выбранный уровень." + }, + "fallbackQualityStrategy": { + "select": { + "label": "Стратегия восстановления качества", + "options": { + "higher": "Выше", + "lower": "Ниже" + }, + "title": "Какую стратегию использовать, когда выбранное качество недоступно" + } + }, + "select": { + "label": "Качество проигрывателя", + "title": "Качество, которое будет задаваться для видео" + }, + "title": "Автоматические настройки качества" + }, + "bottomButtons": { + "clear": { + "title": "Очистить все данные, которые это расширение хранит на вашем компьютере", + "value": "Удалить данные" + }, + "confirm": { + "title": "Подтвердить сброс настроек", + "value": "Подтвердить" + }, + "openTab": { + "title": "Открывать настройки расширения в новой вкладке" + }, + "reset": { + "title": "Сбрасывает все параметры до значений по умолчанию. Нажмите \"Подтвердить\", чтобы сохранить изменения", + "value": "Сброс" + } + }, + "buttonPlacement": { + "select": { + "buttonNames": { + "copyTimestampUrlButton": "Кнопка «Копировать URL видео с таймкодом»", + "decreasePlaybackSpeedButton": "Кнопка уменьшения скорости видео", + "forwardButton": "Кнопка перемотки вперёд", + "hideEndScreenCardsButton": "Кнопка «Скрыть заставки следующих видео»", + "increasePlaybackSpeedButton": "Кнопка увеличения скорости видео", + "loopButton": "Кнопка «Зациклить»", + "maximizePlayerButton": "Кнопка «Развернуть»", + "openTranscriptButton": "Кнопка «Открыть стенограмму»", + "rewindButton": "Кнопка перемотки назад", + "screenshotButton": "Кнопка «Скриншот»", + "volumeBoostButton": "Кнопка «Усиление громкости»" + }, + "options": { + "below_player": { + "placement": "под проигрывателем", + "value": "Под проигрывателем" + }, + "feature_menu": { + "placement": "в меню функций", + "value": "Меню функций" + }, + "player_controls_left": { + "placement": "с левой стороны панели управления", + "value": "Слева" + }, + "player_controls_right": { + "placement": "с правой стороны панели управления", + "value": "Справа" + } + }, + "title": "Поместить {{BUTTON_NAME}} {{PLACEMENT}}" + }, + "title": "Настройки размещения кнопок" + }, + "customCSS": { + "editor": { + "collapse": "Свернуть редактор", + "expand": "Расширить редактор", + "noProblems": "Проблем не найдено." + }, + "enable": { + "label": "Включить пользовательский CSS", + "title": "Включает пользовательские настройки CSS для применения к странице" + }, + "title": "Пользовательские настройки CSS" + }, + "featureMenu": { + "openType": { + "select": { + "label": "Тип активации меню", + "options": { + "click": "Посредством нажатия", + "hover": "При наведении курсора" + }, + "title": "Выберите способ активации меню функций" + }, + "title": "Настройки меню функций" + } + }, + "forwardRewindButtons": { + "enable": { + "label": "Включить кнопки перемотки вперёд/назад", + "title": "Добавляет кнопки перемотки вперёд/назад в проигрыватель" + }, + "time": { + "label": "Время перемотки", + "title": "Кол-во времени, на которое будет перематываться видео" + }, + "title": "Настройки кнопок перемотки вперёд/назад" + }, + "importExportSettings": { + "exportButton": { + "success": "Настройки успешно экспортированы", + "title": "Экспорт настроек в JSON файл", + "value": "Экспорт настроек" + }, + "importButton": { + "error": { + "unknown": "Ошибка импорта настроек. Пожалуйста, проверьте формат файла.\nПроизошла неизвестная ошибка.", + "validation": "Ошибка импорта настроек. Пожалуйста, проверьте формат файла.\n{{ERROR_MESSAGE}}" + }, + "success": "Настройки успешно импортированы", + "title": "Импорт настроек из JSON файла", + "value": "Импорт настроек" + } + }, + "language": { + "select": { + "label": "Язык", + "title": "Язык расширения" + }, + "title": "Язык" + }, + "miscellaneous": { + "features": { + "automaticTheaterMode": { + "label": "Включить автоматический режим кинотеатра", + "title": "Автоматически включать режим кинотеатра при загрузке видео" + }, + "automaticallyDisableAmbientMode": { + "label": "Автоматическое отключение режима освещения", + "title": "Автоматически отключать режим освещения при загрузке видео" + }, + "automaticallyDisableClosedCaptions": { + "label": "Автоматически отключать субтитры", + "title": "Автоматически отключает субтитры при загрузке видео" + }, + "copyTimestampUrlButton": { + "label": "Кнопка «Копировать URL видео с таймкодом»", + "title": "Копирует ссылку видео с меткой времени (?t=123)" + }, + "defaultToOriginalAudioTrack": { + "label": "Default to original audio track", + "title": "Always default to the original audio track" + }, + "hideArtificialIntelligenceSummary": { + "label": "Hide AI summary", + "title": "Hides the artificial intelligence summary below videos" + }, + "hideEndScreenCards": { + "label": "Скрыть заставки следующих видео", + "title": "Скрывает заставки следующих (предлагаемых) видео в конце ролика" + }, + "hideEndScreenCardsButton": { + "label": "Кнопка «Скрыть заставки следующих видео»", + "title": "Добавляет кнопку для скрытия/отображения заставок следующих видео в конце ролика" + }, + "hideLiveStreamChat": { + "label": "Спрятать чат прямого эфира", + "title": "Прячет чат прямого эфира (стрима)" + }, + "hideOfficialArtistVideosFromHomePage": { + "label": "Скрывать официальные видео исполнителя", + "title": "Скрывает официальные видео исполнителя с домашней страницы" + }, + "hidePaidPromotionBanner": { + "label": "Скрыть \"Содержит прямую рекламу\"", + "title": "Скрывает баннер, отображающийся при просмотре видео, которое имеет платную рекламу" + }, + "hidePlayables": { + "label": "Hide playables", + "title": "Hides all playables" + }, + "hideScrollbar": { + "label": "Включить скрытие полосы прокрутки страницы", + "title": "Скрывает полосу прокрутки страницы" + }, + "hideShorts": { + "label": "Скрыть Shorts", + "title": "Скрывает все Shorts" + }, + "hideTranslateComment": { + "label": "Спрятать кнопку 'Перевести на...'", + "title": "Прячет кнопку 'Перевести на русский' под комментарием" + }, + "loopButton": { + "label": "Включить кнопку «Зациклить»", + "title": "Добавляет кнопку в меню функций для автоматического повтора просмотренного видео (зацикливание)" + }, + "maximizePlayerButton": { + "label": "Включить кнопку «Развернуть проигрыватель»", + "title": "Добавляет кнопку в меню функций, которая позволит максимизировать проигрыватель" + }, + "openTranscriptButton": { + "label": "Показать кнопку стенограммы видео", + "title": "Добавляет кнопку в меню функций, чтобы открыть стенограмму видео, которое вы просматриваете" + }, + "openYouTubeSettingsOnHover": { + "label": "Открывать настройки YouTube при наведении курсора", + "title": "Открывает меню настроек YouTube при наведении на кнопку меню" + }, + "pauseBackgroundPlayers": { + "label": "Ставить на паузу видео в фоновых вкладках", + "title": "Ставит на паузу видео в фоновых вкладках при запуске видео в активной (текущей) вкладке" + }, + "playlistRemover": { + "label": "Hide playlists from homepage", + "title": "Get rid of playlists from homepage" + }, + "remainingTime": { + "label": "Включить отображение оставшегося времени", + "title": "Показывает оставшееся время просмотра видео" + }, + "rememberLastVolume": { + "label": "Запомнить уровень громкости", + "title": "Запоминает громкость последнего видео, которое вы смотрели и устанавливает это значение при открытии нового видео" + }, + "removeRedirect": { + "label": "Убрать YouTube /redirect ссылки", + "title": "Заменяет /redirect ссылки на актуальные, убирая предупреждение о переходе на другой ресурс" + }, + "restoreFullscreenScrolling": { + "label": "Restore fullscreen scrolling", + "title": "Restores scrolling in fullscreen mode" + }, + "shareShortener": { + "label": "Укоротить ссылку с кнопки \"Поделиться\"", + "title": "Укорачивает ссылку с кнопки \"Поделиться\" (youtu.be), убирая параметры si/feature из нее" + }, + "shortsAutoScroll": { + "label": "Автоматическая прокрутка Shorts", + "title": "Автоматически скроллит до следующего Shorts" + }, + "skipContinueWatching": { + "label": "Пропускать \"Воспроизведение приостановлено. Продолжить?\"", + "title": "Автоматически пропускает диалог простоя, который приостанавливает воспроизведение" + } + }, + "title": "Прочие параметры" + }, + "onScreenDisplaySettings": { + "color": { + "label": "Цвет", + "options": { + "blue": "Синий", + "green": "Зеленый", + "orange": "Оранжевый", + "pink": "Розовый", + "purple": "Фиолетовый", + "red": "Красный", + "white": "Белый", + "yellow": "Желтый" + }, + "title": "Выберите цвет для отображения на экране (OSD)" + }, + "hide": { + "label": "Задержка скрытия", + "title": "Укажите время, в миллисекундах, перед автоматическим скрытием OSD" + }, + "opacity": { + "label": "Прозрачность", + "title": "Настройка прозрачности отображения на экране (OSD)" + }, + "padding": { + "label": "Отступы", + "title": "Регулировка интервала вокруг отображения на экране (OSD) в пикселях. Применяется в частности для углов OSD." + }, + "position": { + "label": "Расположение", + "options": { + "bottom_left": "Слева снизу", + "bottom_right": "Справа снизу", + "center": "По центру", + "top_left": "Слева сверху", + "top_right": "Справа сверху" + }, + "title": "Выберите позицию отображения на экране (OSD)" + }, + "title": "Настройки отображения на экране (OSD)", + "type": { + "label": "Тип", + "options": { + "circle": "Круг", + "line": "Линия", + "no_display": "Не показывать", + "text": "Текст" + }, + "title": "Выберите тип отображения на экране (OSD)" + } + }, + "playbackSpeed": { + "enable": { + "label": "Включить принудительную скорость воспроизведения", + "title": "Устанавливает скорость проигрывания видео на ту, что вы выбрали ниже" + }, + "playbackSpeedButtons": { + "label": "Кнопки регулирования скорости видео", + "select": { + "label": "Дельта кнопок регулирования скорости", + "title": "Число, на которое будет изменена скорость за клик" + }, + "title": "Добавляет кнопки для увеличения или уменьшения скорости воспроизведения просматриваемого видео" + }, + "select": { + "label": "Скорость проигрывателя", + "title": "Скорость, которая будет задаваться для видео" + }, + "title": "Настройки скорости воспроизведения" + }, + "playlistLength": { + "enable": { + "label": "Отображать информацию о длине плейлиста", + "title": "Отображает общую временную длину плейлиста, сколько было просмотрено и сколько осталось." + }, + "title": "Настройки длины плейлиста", + "wayToGetLength": { + "select": { + "label": "Способ получения длины плейлиста", + "title": "Способ получения информации о длине плейлиста (метод API будет переключаться обратно к HTML, если возникнет ошибка)" + } + }, + "wayToGetWatchTime": { + "select": { + "label": "Метод получения времени просмотра", + "options": { + "duration": "Продолжительность видео", + "youtube": "Время просмотра видео" + }, + "title": "Способ получения количества времени просмотра (тип длины видео используется только на странице просмотра)" + } + } + }, + "screenshotButton": { + "enable": { + "label": "Включить кнопку «Скриншот»", + "title": "Добавляет кнопку в проигрыватель которая делает скриншот видео" + }, + "saveAs": { + "clipboard": "Буфер обмена", + "file": "Файл" + }, + "selectFormat": { + "label": "Формат скриншота", + "title": "Формат, в котором будет сохраняться скриншот" + }, + "selectSaveAs": { + "label": "Тип сохранения скриншота", + "title": "Тип сохранения скриншота" + }, + "title": "Настройки скриншотов" + }, + "scrollWheelSpeedControl": { + "adjustmentSteps": { + "label": "Изменение скорости воспроизведения за прокрутку колеса", + "title": "Регулировка значения, на которое изменяется скорость воспроизведения за прокрутку" + }, + "enable": { + "label": "Включить управление скоростью воспроизведения с помощью колеса мыши", + "title": "Нажмите клавишу-модификатор, чтобы включить управление скоростью воспроизведения с помощью колеса мыши." + }, + "optionLabel": "Клавиша {{KEY}}", + "select": { + "label": "Клавиша-модификатор", + "title": "Используемая клавиша-модификатор" + }, + "title": "Настройки управления скоростью воспроизведения с помощью колеса мыши" + }, + "scrollWheelVolumeControl": { + "adjustmentSteps": { + "label": "Изменение громкости за прокрутку колеса", + "title": "Регулировка значения, на которое изменяется громкость за прокрутку" + }, + "enable": { + "label": "Включить управление громкостью с помощью колеса мыши", + "title": "Позволяет использовать колесо мыши для управления громкостью видео, которое вы просматриваете" + }, + "holdModifierKey": { + "enable": { + "label": "Включить при удержании клавиши-модификатора", + "title": "Нажмите клавишу-модификатор, чтобы включить управление громкостью с помощью колеса мыши." + }, + "optionLabel": "Клавиша {{KEY}}", + "select": { + "label": "Клавиша-модификатор", + "title": "Используемая клавиша-модификатор" + } + }, + "holdRightClick": { + "enable": { + "label": "Включить при удержании правой кнопки мыши", + "title": "Удерживайте правую кнопку мыши, чтобы включить управление громкостью с помощью колеса мыши" + } + }, + "title": "Настройки управления громкостью с помощью колеса мыши" + }, + "settingSearch": { + "placeholder": "Поиск настроек" + }, + "videoHistory": { + "enable": { + "label": "Отслеживание таймкода просматриваемого видео", + "title": "Отслеживает, на каком моменте вы остановили просмотр видео и продолжает с него" + }, + "resumeType": { + "select": { + "label": "Тип возобновления", + "options": { + "automatic": "Автоматически", + "prompt": "Запрашивать" + }, + "title": "Выберите, как вы хотите возобновлять просмотр видео" + } + }, + "title": "Настройки отслеживания" + }, + "volumeBoost": { + "boostAmount": { + "label": "Значение увеличения громкости (дБ)", + "title": "Значение, на которое будет увеличена громкость" + }, + "enable": { + "label": "Включить усиление громкости", + "title": "Включить усиление громкости" + }, + "mode": { + "select": { + "label": "Режим увеличения громкости", + "options": { + "global": "Глобально", + "perVideo": "Для видео" + }, + "title": "Выберите, каким образом должно применяться усиление громкости. 'Для видео' позволяет включать усиление для каждого видео отдельно в меню функций. 'Глобально' применяет усиление для всех просматриваемых видео когда усиление громкости включено." + } + }, + "title": "Настройки усиления громкости" + }, + "youtubeDataApiV3Key": { + "getApiKeyLinkText": "Вы можете получить ключ здесь", + "input": { + "label": "API ключ", + "title": "Введите ваш ключ Youtube Data API V3." + }, + "title": "Ключ YouTube API V3" + }, + "youtubeDeepDark": { + "author": "Автор", + "co-authors": "Соавторы", + "colors": { + "colorShadow": { + "label": "Цвет тени", + "title": "Цвет теней" + }, + "dimmerText": { + "label": "Цвет вторичного текста", + "title": "Цвет для вторичного текста" + }, + "hoverBackground": { + "label": "Цвет фона при наведении", + "title": "Цвет, который будет задаваться фону при наведении" + }, + "mainBackground": { + "label": "Основной цвет фона", + "title": "Цвет для основного фона" + }, + "mainColor": { + "label": "Цвет акцента", + "title": "Цвет для акцента" + }, + "mainText": { + "label": "Цвет основного текста", + "title": "Цвет для основного текста" + }, + "secondBackground": { + "label": "Дополнительный цвет фона", + "title": "Цвет для вторичного фона" + } + }, + "enable": { + "label": "Включить выбранную тему", + "title": "Активировать выбранную тему для страницы" + }, + "select": { + "label": "Выбрать тему", + "title": "Выберите тему для применения к странице" + }, + "title": "Настройки YouTube Deep Dark" + } + } + } +} diff --git a/public/locales/sv-SE.json b/public/locales/sv-SE.json index 6d24316e5..2b7184eb9 100644 --- a/public/locales/sv-SE.json +++ b/public/locales/sv-SE.json @@ -1,642 +1,642 @@ { - "langCode": "en-US", - "langName": "Svenska (SV)", - "messages": { - "resumingVideo": "Återupptar video vid {{VIDEO_TIME}}", - "settingVolume": "Ställa in volymökning till {{VOLUME_BOOST_AMOUNT}}" - }, - "pages": { - "content": { - "features": { - "copyTimestampUrlButton": { - "button": { - "copied": "Kopierad!", - "label": "Kopiera videons webbadress med tidsstämpel" - } - }, - "featureMenu": { - "button": { - "label": "Funktionsmeny" - } - }, - "forwardRewindButtons": { - "buttons": { - "forwardButton": { - "label": "Snabbspola med {{TIME}}" - }, - "rewindButton": { - "label": "Återspola med {{TIME}}" - } - } - }, - "hideEndScreenCardsButton": { - "button": { - "label": "Dölj slutskärmskort", - "toggle": { - "off": "Visa slutskärmskort", - "on": "Dölj slutskärmskort" - } - } - }, - "loopButton": { - "button": { - "label": "Slinga", - "toggle": { - "off": "Slinga av", - "on": "Slinga på" - } - } - }, - "maximizePlayerButton": { - "button": { - "label": "Maximera", - "toggle": { - "off": "Maximera av", - "on": "Maximera på" - } - } - }, - "openTranscriptButton": { - "button": { - "label": "Öppna transkript" - } - }, - "playbackSpeedButtons": { - "buttons": { - "decreasePlaybackSpeedButton": { - "label": "Minska hastigheten till {{SPEED}}" - }, - "increasePlaybackSpeedButton": { - "label": "Öka hastigheten till {{SPEED}}" - } - }, - "decreaseLimit": "Det går inte att sänka mer ({{SPEED}})", - "increaseLimit": "Det går inte att höja mer ({{SPEED}})" - }, - "playlistLength": { - "title": "Total längd kanske inte är korrekt om vissa videor är dolda eller om du inte har laddat tillräckligt med videor för att få hela längden." - }, - "screenshotButton": { - "button": { - "label": "Skärmbild" - }, - "copiedToClipboard": "Skärmbild kopierad till urklipp" - }, - "videoHistory": { - "resumeButton": "Återuppta", - "resumePrompt": { - "close": "Stäng" - } - }, - "volumeBoostButton": { - "button": { - "label": "Volymökning", - "toggle": { - "off": "Volymökning av", - "on": "Volymökning på" - } - } - } - } - }, - "options": { - "notifications": { - "error": { - "scrollWheelHoldModifierKey": { - "sameKey": { - "speedControl": "Rullningshjulets modifieringstangent för hastighetsreglering kan inte vara densamma modifieringstangent som rullningshjulets volymreglering.", - "volumeControl": "Rullningshjulets modifieringstangent för volymreglering kan inte vara densamma modifieringstangent som rullningshjulets hastighetsreglering." - } - } - }, - "info": { - "reset": "Alla alternativ har återställts till sina standardvärden.\nDu kan nu spara ändringarna genom att klicka på knappen \"Bekräfta\" eller örkasta dem genom att stänga denna sida eller ignorera detta meddelande." - }, - "success": { - "saved": "Inställningarna sparade." - } - } - } - }, - "settings": { - "clearData": { - "allDataDeleted": "All data har tagits bort.", - "confirmAlert": "Detta kommer att ta bort alla tilläggsdata relaterade till alternativen. Fortsätta?" - }, - "optionDisabled": { - "either": { - "label": "Aktivera {{OPTIONS}} för att konfigurera detta alternativ", - "separator": " eller " - }, - "plural": { - "label": "Aktivera {{OPTIONS}} för att konfigurera detta alternativ", - "separator": " och " - }, - "singular": "Aktivera {{OPTION}} för att konfigurera detta alternativ", - "specificOption": { - "featureMenu": "Konfigurera minst en knapp som ska placeras i funktionsmenyn för att konfigurera det här alternativet." - } - }, - "scrollForMoreSettings": "Rulla för fler inställningar", - "sections": { - "automaticQuality": { - "enable": { - "label": "Automatisk kvalitetsjustering", - "title": "Justerar automatiskt videokvaliteten till den valda nivån." - }, - "fallbackQualityStrategy": { - "select": { - "label": "Reservmetod för kvaliten", - "options": { - "higher": "Högre", - "lower": "Lägre" - }, - "title": "Metod att använda när den valda kvaliteten inte är tillgänglig" - } - }, - "select": { - "label": "Spelarkvalitet", - "title": "Kvaliteten för att ställa in videon till" - }, - "title": "Automatisk kvalitetsinställningar" - }, - "bottomButtons": { - "clear": { - "title": "Rensar all data som detta tillägg har lagrat på din dator", - "value": "Rensa data" - }, - "confirm": { - "title": "Bekräfta återställning av inställningar", - "value": "Bekräfta" - }, - "openTab": { - "title": "Öppna tilläggsinställningar i en ny flik" - }, - "reset": { - "title": "Återställer alla inställningar till sina standardinställningar, Klicka på bekräftelseknappen för att spara ändringarna", - "value": "Återställ" - } - }, - "buttonPlacement": { - "select": { - "buttonNames": { - "copyTimestampUrlButton": "Kopiera videons webbadress med tidsstämpelknappen", - "decreasePlaybackSpeedButton": "Knapp för att mindska hastigheten", - "forwardButton": "Snabbspolningsknapp", - "hideEndScreenCardsButton": "Dölj knappen för slutskärmskort", - "increasePlaybackSpeedButton": "Knapp för att öka hastigheten", - "loopButton": "Slingknapp", - "maximizePlayerButton": "Maximeraknapp", - "openTranscriptButton": "Transkriptknapp", - "rewindButton": "Återspolningsknapp", - "screenshotButton": "Skärmbildsknapp", - "volumeBoostButton": "Volymökningsknapp" - }, - "options": { - "below_player": { - "placement": "under spelarkontrollerna", - "value": "Under spelaren" - }, - "feature_menu": { - "placement": "i funktionsmenyn", - "value": "Funktionsmeny" - }, - "player_controls_left": { - "placement": "på vänster sida av spelarkontrollerna", - "value": "Vänster kontroller" - }, - "player_controls_right": { - "placement": "på höger sida av spelarkontrollerna", - "value": "Höger kontroller" - } - }, - "title": "Placera {{BUTTON_NAME}} {{PLACEMENT}}" - }, - "title": "Inställningar för knapplacering" - }, - "customCSS": { - "editor": { - "collapse": "Fäll ihop redigeraren", - "expand": "Fäll ut redigeraren", - "noProblems": "Inga problem hittades." - }, - "enable": { - "label": "Aktivera anpassad CSS", - "title": "Aktiverar anpassad CSS som ska tillämpas på sidan" - }, - "title": "Anpassade CSS-inställningar" - }, - "featureMenu": { - "openType": { - "select": { - "label": "Aktiveringstyp för menyn", - "options": { - "click": "Klicka", - "hover": "Musöver" - }, - "title": "Välj metod för att aktivera funktionsmenyn" - }, - "title": "Inställningar för funktionsmeny" - } - }, - "forwardRewindButtons": { - "enable": { - "label": "Aktivera spola framåt-/återspolningsknappar", - "title": "Lägger till spola framåt- och återspolningsknappar till videospelaren" - }, - "time": { - "label": "Spola framåt-/återspolningstid", - "title": "Tiden som videon ska spolas framåt/återspolas med" - }, - "title": "Inställningar för knapparna spola framåt/återspola" - }, - "importExportSettings": { - "exportButton": { - "success": "Inställningar har exporterats", - "title": "Exportera inställningarna till en JSON-fil", - "value": "Exportera Inställningar" - }, - "importButton": { - "error": { - "unknown": "Fel vid import av inställningar. Kontrollera filformatet.\nEtt okänt fel uppstod.", - "validation": "Fel vid import av inställningar. Kontrollera filformatet.\n{{ERROR_MESSAGE}}" - }, - "success": "Inställningar har importerats", - "title": "Importera inställningarna från en JSON-fil", - "value": "Importera inställningar" - } - }, - "language": { - "select": { - "label": "Språk", - "title": "Språket som ska användas för tillägget" - }, - "title": "Språk" - }, - "miscellaneous": { - "features": { - "automaticTheaterMode": { - "label": "Automatiskt teaterläge", - "title": "Aktiverar automatiskt teaterläge när du startar en video" - }, - "automaticallyDisableAmbientMode": { - "label": "Inaktivera biobelysning automatiskt", - "title": "Inaktiverar automatiskt biobelysning när du startar en video" - }, - "automaticallyDisableClosedCaptions": { - "label": "Inaktivera textning automatiskt", - "title": "Inaktiverar textning automatiskt när du laddar en video" - }, - "copyTimestampUrlButton": { - "label": "Kopiera videons webbadress med tidsstämpelknappen", - "title": "Kopiera videons webbadress med tidsstämpel (?t=123)" - }, - "defaultToOriginalAudioTrack": { - "label": "Standard till originalljudspår", - "title": "Använd alltid originalljudspåret som standard" - }, - "hideArtificialIntelligenceSummary": { - "label": "Dölj AI-sammanfattning", - "title": "Döljer sammanfattningen av artificiell intelligens under videorna" - }, - "hideEndScreenCards": { - "label": "Dölj slutskärmskort", - "title": "Döljer korten i slutet av videon" - }, - "hideEndScreenCardsButton": { - "label": "Dölj knappen för slutskärmskort", - "title": "Lägger till en knapp för att visa/dölja korten i slutet av videon" - }, - "hideLiveStreamChat": { - "label": "Dölj direktströmschatt", - "title": "Döljer direktströmschatten" - }, - "hideOfficialArtistVideosFromHomePage": { - "label": "Dölj officiella artistvideor", - "title": "Dölj officiella artistvideor från startsidan" - }, - "hidePaidPromotionBanner": { - "label": "Dölj betald marknadsföringsbanner", - "title": "Döljer bannern som visas när du tittar på en video som har betald marknadsföring" - }, - "hidePlayables": { - "label": "Dölj spelbara", - "title": "Döljer alla spelbara" - }, - "hideScrollbar": { - "label": "Dölj rullningslisten", - "title": "Döljer sidornas rullningsfält" - }, - "hideShorts": { - "label": "Dölj shorts", - "title": "Döljer alla shorts" - }, - "hideTranslateComment": { - "label": "Dölj översättning av kommentarer", - "title": "Döljer knappen 'Översätt till språk' under kommentarer" - }, - "loopButton": { - "label": "Slingknapp", - "title": "Lägger till en knapp i funktionsmenyn för att slinga videon du tittar på" - }, - "maximizePlayerButton": { - "label": "Maximeringsknapp för spelaren", - "title": "Lägger till en knapp i funktionsmenyn för att maximera spelaren" - }, - "openTranscriptButton": { - "label": "Öppningsknapp för transkript", - "title": "Lägger till en knapp i funktionsmenyn för att visa transkript av videon du tittar på" - }, - "openYouTubeSettingsOnHover": { - "label": "Öppna YouTube-inställningar vid musöver", - "title": "Öppnar YouTube-inställningsmenyn när du håller muspekaren över inställningsknappen" - }, - "pauseBackgroundPlayers": { - "label": "Pausa spelare i bakgrunden", - "title": "Pausar videospelare i bakgrundsflikar när du startar en ny videospelare i en förgrundsflik" - }, - "playlistRemover": { - "label": "Dölj spellistor från hemsidan", - "title": "Bli av med spellistor från hemsidan" - }, - "remainingTime": { - "label": "Återstående tid", - "title": "Visar återstående tid för videon du tittar på" - }, - "rememberLastVolume": { - "label": "Kom ihåg senaste volymen", - "title": "Kommer ihåg volymen på den senaste videon du tittade på och ställer in den när du öppnar en ny video" - }, - "removeRedirect": { - "label": "Ta bort YouTube-omdirigeringswebbadresser", - "title": "Ersätter YouTube-omdirigering genom faktiska webbadresser, hoppar över omdirigeringsvarningsdialog" - }, - "restoreFullscreenScrolling": { - "label": "Återställ fullskärmsrullning", - "title": "Återställer rullning i helskärmsläge" - }, - "shareShortener": { - "label": "Förkorta YouTube-videons delningslänk", - "title": "Förkortar YouTube-videons delningslänk (youtu.be) genom att ta bort funktionsparametrar från den" - }, - "shortsAutoScroll": { - "label": "Automatisk rullning för shorts", - "title": "Rullar automatiskt till nästa shorts" - }, - "skipContinueWatching": { - "label": "Hoppa över \"Videon är pausad. Fortsätt titta?\"", - "title": "Hoppa över dialogrutan som pausar videouppspelningen" - } - }, - "title": "Övriga inställningar" - }, - "onScreenDisplaySettings": { - "color": { - "label": "Färg", - "options": { - "blue": "Blå", - "green": "Grön", - "orange": "Orange", - "pink": "Rosa", - "purple": "Lila", - "red": "Röd", - "white": "Vit", - "yellow": "Gul" - }, - "title": "Välj färgen för On-Screen Display" - }, - "hide": { - "label": "Döljfördröjning", - "title": "Ange tiden i millisekunder innan On-Screen Display automatiskt döljs" - }, - "opacity": { - "label": "Genomskinlighet", - "title": "Justera genomskinligheten för On-Screen Display" - }, - "padding": { - "label": "Utfyllnad", - "title": "Justera avståndet runt On-Screen Display i pixlar. Detta gäller specifikt för hörn On-Screen Display." - }, - "position": { - "label": "Position", - "options": { - "bottom_left": "Nedre vänstra", - "bottom_right": "Nedre högra", - "center": "Mitten", - "top_left": "Övre vänstra", - "top_right": "Övre högra" - }, - "title": "Välj placering av On-Screen Display" - }, - "title": "On-Screen Display-inställningar", - "type": { - "label": "Typ", - "options": { - "circle": "Cirkel", - "line": "Rad", - "no_display": "Ingen visning", - "text": "Text" - }, - "title": "Välj typ av On-Screen Display" - } - }, - "playbackSpeed": { - "enable": { - "label": "Tvingad uppspelningshastighet", - "title": "Ställer in videohastigheten till det du väljer nedan" - }, - "playbackSpeedButtons": { - "label": "Knapp för uppspelningshastigheten", - "select": { - "label": "Knapp för uppspelningshastigheten", - "title": "Hastighetsändring per klick" - }, - "title": "Lägger till knappar för att öka eller minska uppspelningshastigheten på videon du tittar på" - }, - "select": { - "label": "Uppspelningshastighet", - "title": "Hastigheten att spela upp videon i" - }, - "title": "Inställningar för uppspelningshastighet" - }, - "playlistLength": { - "enable": { - "label": "Visa information om spellistans längd", - "title": "Visar spellistans totala längd och hur mycket som har tittats på och hur mycket som återstår." - }, - "title": "Inställningar för spellistans längd", - "wayToGetLength": { - "select": { - "label": "Metod för att få spellistans längd", - "title": "Sättet att få information om spellista längd (API-metoden kommer att falla tillbaka till HTML om ett fel inträffar)" - } - }, - "wayToGetWatchTime": { - "select": { - "label": "Metod för att hämta tittad tid", - "options": { - "duration": "Videolängd", - "youtube": "Tittad videolängd" - }, - "title": "Sättet att få den tid som tittats på (videons längdtyp används endast på visningssidan)" - } - } - }, - "screenshotButton": { - "enable": { - "label": "Skärmbildsknapp", - "title": "Lägger till en knapp till spelaren för att ta en skärmbild av videon" - }, - "saveAs": { - "clipboard": "Urklipp", - "file": "Fil" - }, - "selectFormat": { - "label": "Skärmbildsformat", - "title": "Formatet för att spara skärmbilden i" - }, - "selectSaveAs": { - "label": "Skärmbildstyp att spara i", - "title": "Skärmbildens spartyp" - }, - "title": "Skärmbildsinställningar" - }, - "scrollWheelSpeedControl": { - "adjustmentSteps": { - "label": "Hastighetsändring per rullning", - "title": "Justera hastighetsändringen per rullning" - }, - "enable": { - "label": "Hastighetsändring med rullningshjulet", - "title": "Tryck på en modifierartangent för att aktivera hastighetsjustering med rullningshjulet." - }, - "optionLabel": "{{KEY}}-tangent", - "select": { - "label": "Modifieringstangent", - "title": "Modifieringstangent att använda" - }, - "title": "Inställningar för rullningshjulets hastighetsändring" - }, - "scrollWheelVolumeControl": { - "adjustmentSteps": { - "label": "Volymändring per rullning", - "title": "Justera volymändringen per rullning" - }, - "enable": { - "label": "Volymändring med rullningshjulet", - "title": "Låter dig använda rullningshjulet för att ändra volymen på videon du tittar på" - }, - "holdModifierKey": { - "enable": { - "label": "Aktivera när du håller ner modifieringstangenten", - "title": "Tryck på en modifierartangent för att aktivera hastighetsändringen med rullningshjulet." - }, - "optionLabel": "{{KEY}}-tangent", - "select": { - "label": "Modifieringstangent", - "title": "Modifieringstangent att använda" - } - }, - "holdRightClick": { - "enable": { - "label": "Aktivera när du håller ner höger musknapp", - "title": "Håll höger musknapp nertryckt för att aktivera rullningshjulets volymkontroll" - } - }, - "title": "Rullningshjulets volyminställningar" - }, - "settingSearch": { - "placeholder": "Sök efter en inställning" - }, - "videoHistory": { - "enable": { - "label": "Håll reda på visade videor", - "title": "Håller reda på var du slutade på videor du tittade på och gör det möjligt att återuppta uppspelningen" - }, - "resumeType": { - "select": { - "label": "Återupptagningstyp", - "options": { - "automatic": "Automatisk", - "prompt": "Fråga" - }, - "title": "Välj hur du vill återuppta videor" - } - }, - "title": "Inställningar för videohistorik" - }, - "volumeBoost": { - "boostAmount": { - "label": "Volymökningsmängd (dB)", - "title": "Hur mycket ljudet ska öka med" - }, - "enable": { - "label": "Volymökning", - "title": "Aktivera volymökning" - }, - "mode": { - "select": { - "label": "Volymökningsläge", - "options": { - "global": "Global", - "perVideo": "Per video" - }, - "title": "Välj hur volymökning tillämpas. \"Per video\" gör det möjligt att aktivera ökning för varje video individuellt i funktionsmenyn. 'Global' gäller ökning för alla videor när volymökning är aktiverat." - } - }, - "title": "Inställningar för volymökning" - }, - "youtubeDataApiV3Key": { - "getApiKeyLinkText": "Du kan hämta en härifrån", - "input": { - "label": "API-nyckel", - "title": "Ange din Youtube Data API V3-nyckel." - }, - "title": "YouTube API V3-nyckel" - }, - "youtubeDeepDark": { - "author": "Skapare", - "co-authors": "Medskapare", - "colors": { - "colorShadow": { - "label": "Skuggfärg", - "title": "Färg för skuggor" - }, - "dimmerText": { - "label": "Sekundär textfärg", - "title": "Färg för sekundärtext" - }, - "hoverBackground": { - "label": "Bakgrundsfärg för musöver", - "title": "Bakgrundsfärg för musöver" - }, - "mainBackground": { - "label": "Primär bakgrundsfärg", - "title": "Färg för primär bakgrund" - }, - "mainColor": { - "label": "Accentfärg", - "title": "Färg för accent" - }, - "mainText": { - "label": "Primär textfärg", - "title": "Färg för primär text" - }, - "secondBackground": { - "label": "Sekundär bakgrundsfärg", - "title": "Färg för sekundär bakgrund" - } - }, - "enable": { - "label": "Aktivera valt tema", - "title": "Aktivera det valda temat för sidan" - }, - "select": { - "label": "Välj tema", - "title": "Välj ett tema som ska tillämpas på sidan" - }, - "title": "Deep Dark-inställningar för YouTube" - } - } - } -} \ No newline at end of file + "langCode": "en-US", + "langName": "Svenska (SV)", + "messages": { + "resumingVideo": "Återupptar video vid {{VIDEO_TIME}}", + "settingVolume": "Ställa in volymökning till {{VOLUME_BOOST_AMOUNT}}" + }, + "pages": { + "content": { + "features": { + "copyTimestampUrlButton": { + "button": { + "copied": "Kopierad!", + "label": "Kopiera videons webbadress med tidsstämpel" + } + }, + "featureMenu": { + "button": { + "label": "Funktionsmeny" + } + }, + "forwardRewindButtons": { + "buttons": { + "forwardButton": { + "label": "Snabbspola med {{TIME}}" + }, + "rewindButton": { + "label": "Återspola med {{TIME}}" + } + } + }, + "hideEndScreenCardsButton": { + "button": { + "label": "Dölj slutskärmskort", + "toggle": { + "off": "Visa slutskärmskort", + "on": "Dölj slutskärmskort" + } + } + }, + "loopButton": { + "button": { + "label": "Slinga", + "toggle": { + "off": "Slinga av", + "on": "Slinga på" + } + } + }, + "maximizePlayerButton": { + "button": { + "label": "Maximera", + "toggle": { + "off": "Maximera av", + "on": "Maximera på" + } + } + }, + "openTranscriptButton": { + "button": { + "label": "Öppna transkript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Minska hastigheten till {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Öka hastigheten till {{SPEED}}" + } + }, + "decreaseLimit": "Det går inte att sänka mer ({{SPEED}})", + "increaseLimit": "Det går inte att höja mer ({{SPEED}})" + }, + "playlistLength": { + "title": "Total längd kanske inte är korrekt om vissa videor är dolda eller om du inte har laddat tillräckligt med videor för att få hela längden." + }, + "screenshotButton": { + "button": { + "label": "Skärmbild" + }, + "copiedToClipboard": "Skärmbild kopierad till urklipp" + }, + "videoHistory": { + "resumeButton": "Återuppta", + "resumePrompt": { + "close": "Stäng" + } + }, + "volumeBoostButton": { + "button": { + "label": "Volymökning", + "toggle": { + "off": "Volymökning av", + "on": "Volymökning på" + } + } + } + } + }, + "options": { + "notifications": { + "error": { + "scrollWheelHoldModifierKey": { + "sameKey": { + "speedControl": "Rullningshjulets modifieringstangent för hastighetsreglering kan inte vara densamma modifieringstangent som rullningshjulets volymreglering.", + "volumeControl": "Rullningshjulets modifieringstangent för volymreglering kan inte vara densamma modifieringstangent som rullningshjulets hastighetsreglering." + } + } + }, + "info": { + "reset": "Alla alternativ har återställts till sina standardvärden.\nDu kan nu spara ändringarna genom att klicka på knappen \"Bekräfta\" eller örkasta dem genom att stänga denna sida eller ignorera detta meddelande." + }, + "success": { + "saved": "Inställningarna sparade." + } + } + } + }, + "settings": { + "clearData": { + "allDataDeleted": "All data har tagits bort.", + "confirmAlert": "Detta kommer att ta bort alla tilläggsdata relaterade till alternativen. Fortsätta?" + }, + "optionDisabled": { + "either": { + "label": "Aktivera {{OPTIONS}} för att konfigurera detta alternativ", + "separator": " eller " + }, + "plural": { + "label": "Aktivera {{OPTIONS}} för att konfigurera detta alternativ", + "separator": " och " + }, + "singular": "Aktivera {{OPTION}} för att konfigurera detta alternativ", + "specificOption": { + "featureMenu": "Konfigurera minst en knapp som ska placeras i funktionsmenyn för att konfigurera det här alternativet." + } + }, + "scrollForMoreSettings": "Rulla för fler inställningar", + "sections": { + "automaticQuality": { + "enable": { + "label": "Automatisk kvalitetsjustering", + "title": "Justerar automatiskt videokvaliteten till den valda nivån." + }, + "fallbackQualityStrategy": { + "select": { + "label": "Reservmetod för kvaliten", + "options": { + "higher": "Högre", + "lower": "Lägre" + }, + "title": "Metod att använda när den valda kvaliteten inte är tillgänglig" + } + }, + "select": { + "label": "Spelarkvalitet", + "title": "Kvaliteten för att ställa in videon till" + }, + "title": "Automatisk kvalitetsinställningar" + }, + "bottomButtons": { + "clear": { + "title": "Rensar all data som detta tillägg har lagrat på din dator", + "value": "Rensa data" + }, + "confirm": { + "title": "Bekräfta återställning av inställningar", + "value": "Bekräfta" + }, + "openTab": { + "title": "Öppna tilläggsinställningar i en ny flik" + }, + "reset": { + "title": "Återställer alla inställningar till sina standardinställningar, Klicka på bekräftelseknappen för att spara ändringarna", + "value": "Återställ" + } + }, + "buttonPlacement": { + "select": { + "buttonNames": { + "copyTimestampUrlButton": "Kopiera videons webbadress med tidsstämpelknappen", + "decreasePlaybackSpeedButton": "Knapp för att mindska hastigheten", + "forwardButton": "Snabbspolningsknapp", + "hideEndScreenCardsButton": "Dölj knappen för slutskärmskort", + "increasePlaybackSpeedButton": "Knapp för att öka hastigheten", + "loopButton": "Slingknapp", + "maximizePlayerButton": "Maximeraknapp", + "openTranscriptButton": "Transkriptknapp", + "rewindButton": "Återspolningsknapp", + "screenshotButton": "Skärmbildsknapp", + "volumeBoostButton": "Volymökningsknapp" + }, + "options": { + "below_player": { + "placement": "under spelarkontrollerna", + "value": "Under spelaren" + }, + "feature_menu": { + "placement": "i funktionsmenyn", + "value": "Funktionsmeny" + }, + "player_controls_left": { + "placement": "på vänster sida av spelarkontrollerna", + "value": "Vänster kontroller" + }, + "player_controls_right": { + "placement": "på höger sida av spelarkontrollerna", + "value": "Höger kontroller" + } + }, + "title": "Placera {{BUTTON_NAME}} {{PLACEMENT}}" + }, + "title": "Inställningar för knapplacering" + }, + "customCSS": { + "editor": { + "collapse": "Fäll ihop redigeraren", + "expand": "Fäll ut redigeraren", + "noProblems": "Inga problem hittades." + }, + "enable": { + "label": "Aktivera anpassad CSS", + "title": "Aktiverar anpassad CSS som ska tillämpas på sidan" + }, + "title": "Anpassade CSS-inställningar" + }, + "featureMenu": { + "openType": { + "select": { + "label": "Aktiveringstyp för menyn", + "options": { + "click": "Klicka", + "hover": "Musöver" + }, + "title": "Välj metod för att aktivera funktionsmenyn" + }, + "title": "Inställningar för funktionsmeny" + } + }, + "forwardRewindButtons": { + "enable": { + "label": "Aktivera spola framåt-/återspolningsknappar", + "title": "Lägger till spola framåt- och återspolningsknappar till videospelaren" + }, + "time": { + "label": "Spola framåt-/återspolningstid", + "title": "Tiden som videon ska spolas framåt/återspolas med" + }, + "title": "Inställningar för knapparna spola framåt/återspola" + }, + "importExportSettings": { + "exportButton": { + "success": "Inställningar har exporterats", + "title": "Exportera inställningarna till en JSON-fil", + "value": "Exportera Inställningar" + }, + "importButton": { + "error": { + "unknown": "Fel vid import av inställningar. Kontrollera filformatet.\nEtt okänt fel uppstod.", + "validation": "Fel vid import av inställningar. Kontrollera filformatet.\n{{ERROR_MESSAGE}}" + }, + "success": "Inställningar har importerats", + "title": "Importera inställningarna från en JSON-fil", + "value": "Importera inställningar" + } + }, + "language": { + "select": { + "label": "Språk", + "title": "Språket som ska användas för tillägget" + }, + "title": "Språk" + }, + "miscellaneous": { + "features": { + "automaticTheaterMode": { + "label": "Automatiskt teaterläge", + "title": "Aktiverar automatiskt teaterläge när du startar en video" + }, + "automaticallyDisableAmbientMode": { + "label": "Inaktivera biobelysning automatiskt", + "title": "Inaktiverar automatiskt biobelysning när du startar en video" + }, + "automaticallyDisableClosedCaptions": { + "label": "Inaktivera textning automatiskt", + "title": "Inaktiverar textning automatiskt när du laddar en video" + }, + "copyTimestampUrlButton": { + "label": "Kopiera videons webbadress med tidsstämpelknappen", + "title": "Kopiera videons webbadress med tidsstämpel (?t=123)" + }, + "defaultToOriginalAudioTrack": { + "label": "Standard till originalljudspår", + "title": "Använd alltid originalljudspåret som standard" + }, + "hideArtificialIntelligenceSummary": { + "label": "Dölj AI-sammanfattning", + "title": "Döljer sammanfattningen av artificiell intelligens under videorna" + }, + "hideEndScreenCards": { + "label": "Dölj slutskärmskort", + "title": "Döljer korten i slutet av videon" + }, + "hideEndScreenCardsButton": { + "label": "Dölj knappen för slutskärmskort", + "title": "Lägger till en knapp för att visa/dölja korten i slutet av videon" + }, + "hideLiveStreamChat": { + "label": "Dölj direktströmschatt", + "title": "Döljer direktströmschatten" + }, + "hideOfficialArtistVideosFromHomePage": { + "label": "Dölj officiella artistvideor", + "title": "Dölj officiella artistvideor från startsidan" + }, + "hidePaidPromotionBanner": { + "label": "Dölj betald marknadsföringsbanner", + "title": "Döljer bannern som visas när du tittar på en video som har betald marknadsföring" + }, + "hidePlayables": { + "label": "Dölj spelbara", + "title": "Döljer alla spelbara" + }, + "hideScrollbar": { + "label": "Dölj rullningslisten", + "title": "Döljer sidornas rullningsfält" + }, + "hideShorts": { + "label": "Dölj shorts", + "title": "Döljer alla shorts" + }, + "hideTranslateComment": { + "label": "Dölj översättning av kommentarer", + "title": "Döljer knappen 'Översätt till språk' under kommentarer" + }, + "loopButton": { + "label": "Slingknapp", + "title": "Lägger till en knapp i funktionsmenyn för att slinga videon du tittar på" + }, + "maximizePlayerButton": { + "label": "Maximeringsknapp för spelaren", + "title": "Lägger till en knapp i funktionsmenyn för att maximera spelaren" + }, + "openTranscriptButton": { + "label": "Öppningsknapp för transkript", + "title": "Lägger till en knapp i funktionsmenyn för att visa transkript av videon du tittar på" + }, + "openYouTubeSettingsOnHover": { + "label": "Öppna YouTube-inställningar vid musöver", + "title": "Öppnar YouTube-inställningsmenyn när du håller muspekaren över inställningsknappen" + }, + "pauseBackgroundPlayers": { + "label": "Pausa spelare i bakgrunden", + "title": "Pausar videospelare i bakgrundsflikar när du startar en ny videospelare i en förgrundsflik" + }, + "playlistRemover": { + "label": "Dölj spellistor från hemsidan", + "title": "Bli av med spellistor från hemsidan" + }, + "remainingTime": { + "label": "Återstående tid", + "title": "Visar återstående tid för videon du tittar på" + }, + "rememberLastVolume": { + "label": "Kom ihåg senaste volymen", + "title": "Kommer ihåg volymen på den senaste videon du tittade på och ställer in den när du öppnar en ny video" + }, + "removeRedirect": { + "label": "Ta bort YouTube-omdirigeringswebbadresser", + "title": "Ersätter YouTube-omdirigering genom faktiska webbadresser, hoppar över omdirigeringsvarningsdialog" + }, + "restoreFullscreenScrolling": { + "label": "Återställ fullskärmsrullning", + "title": "Återställer rullning i helskärmsläge" + }, + "shareShortener": { + "label": "Förkorta YouTube-videons delningslänk", + "title": "Förkortar YouTube-videons delningslänk (youtu.be) genom att ta bort funktionsparametrar från den" + }, + "shortsAutoScroll": { + "label": "Automatisk rullning för shorts", + "title": "Rullar automatiskt till nästa shorts" + }, + "skipContinueWatching": { + "label": "Hoppa över \"Videon är pausad. Fortsätt titta?\"", + "title": "Hoppa över dialogrutan som pausar videouppspelningen" + } + }, + "title": "Övriga inställningar" + }, + "onScreenDisplaySettings": { + "color": { + "label": "Färg", + "options": { + "blue": "Blå", + "green": "Grön", + "orange": "Orange", + "pink": "Rosa", + "purple": "Lila", + "red": "Röd", + "white": "Vit", + "yellow": "Gul" + }, + "title": "Välj färgen för On-Screen Display" + }, + "hide": { + "label": "Döljfördröjning", + "title": "Ange tiden i millisekunder innan On-Screen Display automatiskt döljs" + }, + "opacity": { + "label": "Genomskinlighet", + "title": "Justera genomskinligheten för On-Screen Display" + }, + "padding": { + "label": "Utfyllnad", + "title": "Justera avståndet runt On-Screen Display i pixlar. Detta gäller specifikt för hörn On-Screen Display." + }, + "position": { + "label": "Position", + "options": { + "bottom_left": "Nedre vänstra", + "bottom_right": "Nedre högra", + "center": "Mitten", + "top_left": "Övre vänstra", + "top_right": "Övre högra" + }, + "title": "Välj placering av On-Screen Display" + }, + "title": "On-Screen Display-inställningar", + "type": { + "label": "Typ", + "options": { + "circle": "Cirkel", + "line": "Rad", + "no_display": "Ingen visning", + "text": "Text" + }, + "title": "Välj typ av On-Screen Display" + } + }, + "playbackSpeed": { + "enable": { + "label": "Tvingad uppspelningshastighet", + "title": "Ställer in videohastigheten till det du väljer nedan" + }, + "playbackSpeedButtons": { + "label": "Knapp för uppspelningshastigheten", + "select": { + "label": "Knapp för uppspelningshastigheten", + "title": "Hastighetsändring per klick" + }, + "title": "Lägger till knappar för att öka eller minska uppspelningshastigheten på videon du tittar på" + }, + "select": { + "label": "Uppspelningshastighet", + "title": "Hastigheten att spela upp videon i" + }, + "title": "Inställningar för uppspelningshastighet" + }, + "playlistLength": { + "enable": { + "label": "Visa information om spellistans längd", + "title": "Visar spellistans totala längd och hur mycket som har tittats på och hur mycket som återstår." + }, + "title": "Inställningar för spellistans längd", + "wayToGetLength": { + "select": { + "label": "Metod för att få spellistans längd", + "title": "Sättet att få information om spellista längd (API-metoden kommer att falla tillbaka till HTML om ett fel inträffar)" + } + }, + "wayToGetWatchTime": { + "select": { + "label": "Metod för att hämta tittad tid", + "options": { + "duration": "Videolängd", + "youtube": "Tittad videolängd" + }, + "title": "Sättet att få den tid som tittats på (videons längdtyp används endast på visningssidan)" + } + } + }, + "screenshotButton": { + "enable": { + "label": "Skärmbildsknapp", + "title": "Lägger till en knapp till spelaren för att ta en skärmbild av videon" + }, + "saveAs": { + "clipboard": "Urklipp", + "file": "Fil" + }, + "selectFormat": { + "label": "Skärmbildsformat", + "title": "Formatet för att spara skärmbilden i" + }, + "selectSaveAs": { + "label": "Skärmbildstyp att spara i", + "title": "Skärmbildens spartyp" + }, + "title": "Skärmbildsinställningar" + }, + "scrollWheelSpeedControl": { + "adjustmentSteps": { + "label": "Hastighetsändring per rullning", + "title": "Justera hastighetsändringen per rullning" + }, + "enable": { + "label": "Hastighetsändring med rullningshjulet", + "title": "Tryck på en modifierartangent för att aktivera hastighetsjustering med rullningshjulet." + }, + "optionLabel": "{{KEY}}-tangent", + "select": { + "label": "Modifieringstangent", + "title": "Modifieringstangent att använda" + }, + "title": "Inställningar för rullningshjulets hastighetsändring" + }, + "scrollWheelVolumeControl": { + "adjustmentSteps": { + "label": "Volymändring per rullning", + "title": "Justera volymändringen per rullning" + }, + "enable": { + "label": "Volymändring med rullningshjulet", + "title": "Låter dig använda rullningshjulet för att ändra volymen på videon du tittar på" + }, + "holdModifierKey": { + "enable": { + "label": "Aktivera när du håller ner modifieringstangenten", + "title": "Tryck på en modifierartangent för att aktivera hastighetsändringen med rullningshjulet." + }, + "optionLabel": "{{KEY}}-tangent", + "select": { + "label": "Modifieringstangent", + "title": "Modifieringstangent att använda" + } + }, + "holdRightClick": { + "enable": { + "label": "Aktivera när du håller ner höger musknapp", + "title": "Håll höger musknapp nertryckt för att aktivera rullningshjulets volymkontroll" + } + }, + "title": "Rullningshjulets volyminställningar" + }, + "settingSearch": { + "placeholder": "Sök efter en inställning" + }, + "videoHistory": { + "enable": { + "label": "Håll reda på visade videor", + "title": "Håller reda på var du slutade på videor du tittade på och gör det möjligt att återuppta uppspelningen" + }, + "resumeType": { + "select": { + "label": "Återupptagningstyp", + "options": { + "automatic": "Automatisk", + "prompt": "Fråga" + }, + "title": "Välj hur du vill återuppta videor" + } + }, + "title": "Inställningar för videohistorik" + }, + "volumeBoost": { + "boostAmount": { + "label": "Volymökningsmängd (dB)", + "title": "Hur mycket ljudet ska öka med" + }, + "enable": { + "label": "Volymökning", + "title": "Aktivera volymökning" + }, + "mode": { + "select": { + "label": "Volymökningsläge", + "options": { + "global": "Global", + "perVideo": "Per video" + }, + "title": "Välj hur volymökning tillämpas. \"Per video\" gör det möjligt att aktivera ökning för varje video individuellt i funktionsmenyn. 'Global' gäller ökning för alla videor när volymökning är aktiverat." + } + }, + "title": "Inställningar för volymökning" + }, + "youtubeDataApiV3Key": { + "getApiKeyLinkText": "Du kan hämta en härifrån", + "input": { + "label": "API-nyckel", + "title": "Ange din Youtube Data API V3-nyckel." + }, + "title": "YouTube API V3-nyckel" + }, + "youtubeDeepDark": { + "author": "Skapare", + "co-authors": "Medskapare", + "colors": { + "colorShadow": { + "label": "Skuggfärg", + "title": "Färg för skuggor" + }, + "dimmerText": { + "label": "Sekundär textfärg", + "title": "Färg för sekundärtext" + }, + "hoverBackground": { + "label": "Bakgrundsfärg för musöver", + "title": "Bakgrundsfärg för musöver" + }, + "mainBackground": { + "label": "Primär bakgrundsfärg", + "title": "Färg för primär bakgrund" + }, + "mainColor": { + "label": "Accentfärg", + "title": "Färg för accent" + }, + "mainText": { + "label": "Primär textfärg", + "title": "Färg för primär text" + }, + "secondBackground": { + "label": "Sekundär bakgrundsfärg", + "title": "Färg för sekundär bakgrund" + } + }, + "enable": { + "label": "Aktivera valt tema", + "title": "Aktivera det valda temat för sidan" + }, + "select": { + "label": "Välj tema", + "title": "Välj ett tema som ska tillämpas på sidan" + }, + "title": "Deep Dark-inställningar för YouTube" + } + } + } +} diff --git a/public/locales/tr-TR.json b/public/locales/tr-TR.json index a487a458a..a82349296 100644 --- a/public/locales/tr-TR.json +++ b/public/locales/tr-TR.json @@ -1,642 +1,642 @@ { - "langCode": "tr-TR", - "langName": "Türkçe", - "messages": { - "resumingVideo": "{{VIDEO_TIME}} tarihinde videoyu devam ettir", - "settingVolume": "Ses güçlendirmesini {{VOLUME_BOOST_AMOUNT}} olarak ayarla" - }, - "pages": { - "content": { - "features": { - "copyTimestampUrlButton": { - "button": { - "copied": "Kopyalandı!", - "label": "Geçerli zamana ait video URL'sini kopyala" - } - }, - "featureMenu": { - "button": { - "label": "Özellik menüsü" - } - }, - "forwardRewindButtons": { - "buttons": { - "forwardButton": { - "label": "{{TIME}} hızlı ileri sar" - }, - "rewindButton": { - "label": "{{TIME}} kadar geri sar" - } - } - }, - "hideEndScreenCardsButton": { - "button": { - "label": "Bitiş ekranı kartlarını gizle", - "toggle": { - "off": "Bitiş ekranı kartlarını göster", - "on": "Bitiş ekranı kartlarını gizle" - } - } - }, - "loopButton": { - "button": { - "label": "Tekrarla", - "toggle": { - "off": "Tekrarlama kapalı", - "on": "Tekrarlama açık" - } - } - }, - "maximizePlayerButton": { - "button": { - "label": "Ekranı kapla", - "toggle": { - "off": "Tam ekran kapalı", - "on": "Tam ekran açıl" - } - } - }, - "openTranscriptButton": { - "button": { - "label": "Transkripti Aç" - } - }, - "playbackSpeedButtons": { - "buttons": { - "decreasePlaybackSpeedButton": { - "label": "Hızı {{SPEED}} değerine düşür" - }, - "increasePlaybackSpeedButton": { - "label": "Hızı {{SPEED}} değerine çıkar" - } - }, - "decreaseLimit": "Daha fazla düşüremezsin ({{SPEED}})", - "increaseLimit": "Daha fazla artıramazsın ({{SPEED}})" - }, - "playlistLength": { - "title": "Bazı videolar gizliyse veya tam uzunluğa ulaşmak için yeterli sayıda video yüklemediyseniz, toplam uzunluk doğru olmayabilir." - }, - "screenshotButton": { - "button": { - "label": "Ekran görüntüsü" - }, - "copiedToClipboard": "Ekran görüntüsü panoya kopyalandı" - }, - "videoHistory": { - "resumeButton": "Devam Et", - "resumePrompt": { - "close": "Kapat" - } - }, - "volumeBoostButton": { - "button": { - "label": "Ses Yükseltici", - "toggle": { - "off": "Ses Yükseltici Devredışı", - "on": "Ses Yükseltici Aktif" - } - } - } - } - }, - "options": { - "notifications": { - "error": { - "scrollWheelHoldModifierKey": { - "sameKey": { - "speedControl": "Kaydırma tekerleği hız kontrolü için kullanılan değiştirici tuş, kaydırma tekerleği ses kontrolü için kullanılan değiştirici tuşla aynı olamaz.", - "volumeControl": "Kaydırma tekerleği ile ses düzeyi kontrolü için kullanılan değiştirici tuş, kaydırma hızı kontrolü için kullanılan değiştirici tuşla aynı olamaz." - } - } - }, - "info": { - "reset": "Tüm seçenekler varsayılan değerlerine sıfırlandı.\nArtık \"Onayla\" düğmesine tıklayarak değişiklikleri kaydedebilir veya bu sayfayı kapatarak iptal edebilir veya bu bildirimi göz ardı edebilirsiniz." - }, - "success": { - "saved": "Seçenekler kaydedildi." - } - } - } - }, - "settings": { - "clearData": { - "allDataDeleted": "Tüm veriler silindi.", - "confirmAlert": "Bu seçeneklerle ilgili tüm uzantı verilerini silecektir. Devam etmek istiyor musunuz?" - }, - "optionDisabled": { - "either": { - "label": "Bu seçeneği yapılandırmak için {{OPTIONS}} öğesini etkinleştirin", - "separator": " veya " - }, - "plural": { - "label": "Bu seçeneği yapılandırmak için {{OPTIONS}} öğesini etkinleştirin", - "separator": " ve " - }, - "singular": "Bu seçeneği yapılandırmak için '{{OPTION}}' öğesini etkinleştirin", - "specificOption": { - "featureMenu": "Bu seçeneği yapılandırmak için özellik menüsüne yerleştirilecek en az bir düğmeyi yapılandırın." - } - }, - "scrollForMoreSettings": "Daha fazla ayar için kaydırın", - "sections": { - "automaticQuality": { - "enable": { - "label": "Otomatik kalite ayarlamayı etkinleştir", - "title": "Video kalitesini seçilen seviyeye otomatik olarak ayarlar." - }, - "fallbackQualityStrategy": { - "select": { - "label": "Kalite geri dönüş stratejisi", - "options": { - "higher": "Daha yüksek", - "lower": "Daha düşük" - }, - "title": "Seçilen kalite mevcut değilse kullanılacak strateji" - } - }, - "select": { - "label": "Oynatma kalitesi", - "title": "Videonun ayarlanacağı kalite" - }, - "title": "Otomatik kalite ayarları" - }, - "bottomButtons": { - "clear": { - "title": "Bu uzantının makinenizde sakladığı tüm verileri temizler", - "value": "Veriyi Temizle" - }, - "confirm": { - "title": "Ayarı sıfırlamayı onayla", - "value": "Onayla" - }, - "openTab": { - "title": "Uzantı ayarlarını yeni bir sekmede açın" - }, - "reset": { - "title": "Tüm ayarları varsayılan değerlerine sıfırlar. Değişiklikleri kaydetmek için onayla düğmesine tıklayın", - "value": "Sıfırla" - } - }, - "buttonPlacement": { - "select": { - "buttonNames": { - "copyTimestampUrlButton": "Video bağlantısını zaman damgasıyla kopyala butonu", - "decreasePlaybackSpeedButton": "Hızı Düşürme Butonu", - "forwardButton": "Hızlı İleri düğmesi", - "hideEndScreenCardsButton": "Bitiş ekranı kartlarını gizleme düğmesi", - "increasePlaybackSpeedButton": "Hızı Artırma Butonu", - "loopButton": "Döngü düğmesi", - "maximizePlayerButton": "Tam ekran düğmesi", - "openTranscriptButton": "Transkripti Aç butonu", - "rewindButton": "Geri sarma düğmesi", - "screenshotButton": "Ekran görüntüsü düğmesi", - "volumeBoostButton": "Ses güçlendirme düğmesi" - }, - "options": { - "below_player": { - "placement": "oynatıcı kontrollerinin altında", - "value": "Oynatıcının altında" - }, - "feature_menu": { - "placement": "özellik menüsünde", - "value": "Özellik Menüsü" - }, - "player_controls_left": { - "placement": "oynatıcı kontrollerinin sol tarafında", - "value": "Sol Kontroller" - }, - "player_controls_right": { - "placement": "oynatıcı kontrollerinin sağ tarafında", - "value": "Sağ Kontroller" - } - }, - "title": "{{BUTTON_NAME}} düğmesini {{PLACEMENT}} konumuna yerleştir" - }, - "title": "Düğme Yerleşim Ayarları" - }, - "customCSS": { - "editor": { - "collapse": "Düzenleyiciyi Daralt", - "expand": "Düzenleyiciyi Genişlet", - "noProblems": "Hiç bir sorun bulunamadı." - }, - "enable": { - "label": "Özel CSS'yi etkinleştir", - "title": "Özel CSS'nin sayfaya uygulanmasını sağlar" - }, - "title": "Özel CSS Ayarları" - }, - "featureMenu": { - "openType": { - "select": { - "label": "Menü Aktivasyon Türü", - "options": { - "click": "Tıkla", - "hover": "İmleci Üzerine Getir" - }, - "title": "Özellik menüsünü etkinleştirme yöntemini seçin" - }, - "title": "Özellik menüsü ayarları" - } - }, - "forwardRewindButtons": { - "enable": { - "label": "İleri/geri sarma düğmeleri", - "title": "Video oynatıcısına ileri ve geri sarma düğmeleri ekler" - }, - "time": { - "label": "İleri/geri sarma süresi", - "title": "Videoyu ileri/geri sarmak için atlanacak süre" - }, - "title": "İleri/geri sarma düğmesi ayarları" - }, - "importExportSettings": { - "exportButton": { - "success": "Ayarlar başarıyla dışa aktarıldı", - "title": "Ayarları JSON dosyasına aktar", - "value": "Ayarları Dışa Aktar" - }, - "importButton": { - "error": { - "unknown": "Ayarlar içe aktarılırken hata oluştu. Lütfen dosya formatını kontrol edin.\nBilinmeyen bir hata oluştu.", - "validation": "Ayarlar içe aktarılırken hata oluştu. Lütfen dosya formatını kontrol edin.\n{{ERROR_MESSAGE}}" - }, - "success": "Ayarlar başarıyla içe aktarıldı", - "title": "Ayarları JSON dosyasına aktar", - "value": "Ayarları İçe Aktar" - } - }, - "language": { - "select": { - "label": "Dil", - "title": "Uzuntı için kullanılacak dil" - }, - "title": "Dil" - }, - "miscellaneous": { - "features": { - "automaticTheaterMode": { - "label": "Otomatik tiyatro modu", - "title": "Bir video yüklediğinizde tiyatro modunu otomatik olarak etkinleştirir" - }, - "automaticallyDisableAmbientMode": { - "label": "Ortam modunu otomatik olarak devre dışı bırak", - "title": "Bir video yüklediğinizde ortam modunu otomatik olarak devre dışı bırakır" - }, - "automaticallyDisableClosedCaptions": { - "label": "Kapalı altyazıları otomatik olarak devre dışı bırak", - "title": "Bir video yüklendiğinde kapalı altyazıları otomatik olarak devre dışı bırakır" - }, - "copyTimestampUrlButton": { - "label": "Video URL'sini zaman damgası düğmesiyle kopyala", - "title": "Video URL'sini zaman damgasıyla kopyalar (?t=123)" - }, - "defaultToOriginalAudioTrack": { - "label": "Varsayılan olarak orijinal ses parçasına dön", - "title": "Her zaman varsayılan olarak orijinal ses parçasına dön" - }, - "hideArtificialIntelligenceSummary": { - "label": "AI özetini gizle", - "title": "Videoların altındaki yapay zeka özetini gizler" - }, - "hideEndScreenCards": { - "label": "Bitiş ekranı kartlarını gizle", - "title": "Video'nun sonundaki kartları gizler" - }, - "hideEndScreenCardsButton": { - "label": "Bitiş ekranı kartlarını gizleme düğmesi", - "title": "Video'nun sonuna bitiş ekranı kartlarını gizlemek/göstermek için bir düğme ekler" - }, - "hideLiveStreamChat": { - "label": "Canlı yayın sohbetini gizle", - "title": "Canlı yayın sohbetini gizler" - }, - "hideOfficialArtistVideosFromHomePage": { - "label": "Resmi Sanatçı Videolarını Gizle", - "title": "Ana Sayfada Resmi Sanatçı Videolarını Gizle" - }, - "hidePaidPromotionBanner": { - "label": "Ücretli tanıtım afişini gizle", - "title": "Ücretli tanıtım içeren bir videoyu izlediğinizde görünen başlığı gizler" - }, - "hidePlayables": { - "label": "Oynatılabilirleri gizle", - "title": "Tüm oynatılabilir öğeleri gizle" - }, - "hideScrollbar": { - "label": "Kaydırma çubuğu gizlemeyi etkinleştir", - "title": "Sayfa kaydırma çubuğunu gizler" - }, - "hideShorts": { - "label": "Kısa videoları gizle", - "title": "Tüm kısa videoları gizler" - }, - "hideTranslateComment": { - "label": "Yorumu Çevir'i Gizle Butonu", - "title": "Yorumlar altındaki 'Dile Çevir' düğmesini gizler" - }, - "loopButton": { - "label": "Tekrarlama düğmesi", - "title": "İzlediğiniz videoyu döngüye almak için özellik menüsüne bir düğme ekler" - }, - "maximizePlayerButton": { - "label": "Oynatıcıyı tam ekran yapma düğmesini etkinleştir", - "title": "Oynatıcıyı büyütmek için özellik menüsüne bir düğme ekler" - }, - "openTranscriptButton": { - "label": "Not dökümü düğmesini gizle", - "title": "İzlediğiniz videonun metnini açmak için özellik menüsüne bir düğme ekler" - }, - "openYouTubeSettingsOnHover": { - "label": "Fare ile üzerine gelerek Youtube ayarlarını açın", - "title": "Ayarlar düğmesinin üzerine gelindiğinde YouTube ayarlar menüsünü açar" - }, - "pauseBackgroundPlayers": { - "label": "Arka plan oynatıcılarını duraklat", - "title": "Ön plan sekmesinde yeni bir oynatıcı başlattığınızda arka plan sekmelerindeki video oynatıcıları duraklatır" - }, - "playlistRemover": { - "label": "Hide playlists from homepage", - "title": "Get rid of playlists from homepage" - }, - "remainingTime": { - "label": "Kalan süre", - "title": "İzlediğiniz videonun kalan süresini gösterir" - }, - "rememberLastVolume": { - "label": "Son ses hacmini hatırla", - "title": "İzlediğiniz son videonun ses seviyesini hatırlar ve yeni bir video açtığınızda bu ses seviyesine ayarlar" - }, - "removeRedirect": { - "label": "YouTube yönlendirme bağlantılarını kaldır", - "title": "Yönlendirme uyarı diyaloğunu atlayarak YouTube yönlendirmesini gerçek URL'lerle değiştirir" - }, - "restoreFullscreenScrolling": { - "label": "Restore fullscreen scrolling", - "title": "Restores scrolling in fullscreen mode" - }, - "shareShortener": { - "label": "YouTube video paylaşım bağlantısını kısalt", - "title": "YouTube video paylaşım bağlantısını (youtu.be) si/feature parametrelerini çıkararak kısaltır" - }, - "shortsAutoScroll": { - "label": "Kısa videoya otomatik kaydır", - "title": "Bir sonraki kısa videoya otomatik kaydır" - }, - "skipContinueWatching": { - "label": "\"Video durdu. Hala orda mısın?\"ı Atla", - "title": "Video oynatmayı durduran boşta kalma iletişim kutusunu atlar" - } - }, - "title": "Çeşitli ayarlar" - }, - "onScreenDisplaySettings": { - "color": { - "label": "Renk", - "options": { - "blue": "Mavi", - "green": "Yeşil", - "orange": "Turuncu", - "pink": "Pembe", - "purple": "Mor", - "red": "Kırmızı", - "white": "Beyaz", - "yellow": "Sarı" - }, - "title": "Ekran göstergesinin rengini seçin" - }, - "hide": { - "label": "Gecikmeyi Gizle", - "title": "Ekran görüntüsünü otomatik olarak gizlemeden önce geçen süreyi milisaniye cinsinden belirtin" - }, - "opacity": { - "label": "Saydamlık", - "title": "Ekrandaki gösterimin saydamlığını ayarlayın" - }, - "padding": { - "label": "İç Boşluk", - "title": "Adjust the spacing around the On-Screen Display in pixels. This applies specifically to corner On-Screen Display." - }, - "position": { - "label": "Konum", - "options": { - "bottom_left": "Sol Alt", - "bottom_right": "Sağ Alt", - "center": "Orta", - "top_left": "Sol Üst", - "top_right": "Sağ Üst" - }, - "title": "Ekran görüntüleme konumunu seçin" - }, - "title": "Ekran Üstü Görüntüleme Ayarları", - "type": { - "label": "Tür", - "options": { - "circle": "Daire", - "line": "Satır", - "no_display": "Ekran yok", - "text": "Metin" - }, - "title": "Ekran görüntüleme türünü seçin" - } - }, - "playbackSpeed": { - "enable": { - "label": "Zorunlu oynatma hızını etkinleştir", - "title": "Video hızını aşağıda seçtiğiniz hıza ayarlar" - }, - "playbackSpeedButtons": { - "label": "Oynatma hızı ayarları", - "select": { - "label": "Oynatma düğmelerinin hızı", - "title": "Tıklama başına değiştirilecek hız miktarı" - }, - "title": "İzlediğiniz videonun oynatma hızını artırmak veya azaltmak için düğmeler ekler" - }, - "select": { - "label": "Oynatma hızı", - "title": "Video oynatma hızını ayarlar" - }, - "title": "Oynatma hızı ayarları" - }, - "playlistLength": { - "enable": { - "label": "Çalma listesinin uzunluk bilgilerini göster", - "title": "Oynatma listesinin toplam, izlenen ve ne kalan uzunluğunu gösterir." - }, - "title": "Oynatma listesi uzunluk ayarları", - "wayToGetLength": { - "select": { - "label": "Oynatma listesi uzunluğunu alma yöntemi", - "title": "Oynatma listesi uzunluk bilgisi alma yolu (Bir hata oluşursa API yöntemi HTML'e geri dönecek)" - } - }, - "wayToGetWatchTime": { - "select": { - "label": "İzlenme süresini alma yöntemi", - "options": { - "duration": "Video Uzunluğu", - "youtube": "Video İzlenme Süresi" - }, - "title": "İzlenen süreyi alma yolu (Video Uzunluğu türü yalnızca izleme sayfasında kullanılır)" - } - } - }, - "screenshotButton": { - "enable": { - "label": "Ekran görüntüsü tuşunu etkinleştir", - "title": "Videonun ekran görüntüsünü almak için oynatıcıya bir düğme ekler" - }, - "saveAs": { - "clipboard": "Pano", - "file": "Dosya" - }, - "selectFormat": { - "label": "Ekran görüntüsü formatı", - "title": "Ekran görüntüsünün kaydedileceği format" - }, - "selectSaveAs": { - "label": "Ekran görüntüsü kaydetme türü", - "title": "Ekran görüntüsü kaydetme türü" - }, - "title": "Ekran görüntüsü ayarları" - }, - "scrollWheelSpeedControl": { - "adjustmentSteps": { - "label": "Kaydırma başına hız değişimi", - "title": "Kaydırma başına hız değiştirmeyi ayarlar" - }, - "enable": { - "label": "Kaydırma tekerleği hız kontrolü", - "title": "Kaydırma tekerleği ile hız ayarını etkinleştirmek için değiştirici tuşlarından birine basın." - }, - "optionLabel": "{{KEY}} anahtarı", - "select": { - "label": "Düzenleyici anahtar", - "title": "Kullanılacak kısayol düğmesi" - }, - "title": "Kaydırma tekerleği için hız kontrolü ayarları" - }, - "scrollWheelVolumeControl": { - "adjustmentSteps": { - "label": "Her kaydırmada değiştirilecek ses düzeyi", - "title": "Her kaydırmada değiştirilecek ses düzeyini ayarlayın" - }, - "enable": { - "label": "Kaydırma tekerleği ile ses kontrolü", - "title": "İzlediğiniz videonun ses düzeyini kontrol etmek için kaydırma tekerleğini kullanmanızı sağlar" - }, - "holdModifierKey": { - "enable": { - "label": "Değiştirici tuşa basılı tutulduğunda", - "title": "Kaydırma tekerleği ile ses düzeyi ayarını etkinleştirmek için değiştirici tuşlardan birine basın" - }, - "optionLabel": "{{KEY}} anahtarı", - "select": { - "label": "Düzenleyici anahtar", - "title": "Kullanılacak kısayol düğmesi" - } - }, - "holdRightClick": { - "enable": { - "label": "Etkinleştirmek için sağ tuşa basılı tutun", - "title": "Kaydırma tekerleği ile ses kontrolünü etkinleştirmek için farenin sağ düğmesine basılı tutun" - } - }, - "title": "Kaydırma tekerleği ile ses seviyesi kontrolü ayarları" - }, - "settingSearch": { - "placeholder": "Bir ayar arayın" - }, - "videoHistory": { - "enable": { - "label": "İzlenen videoları takip edin", - "title": "İzlediğiniz videolarda en son nerede kaldığınızı takip eder ve oynatmaya oradan devam etmenizi sağlar" - }, - "resumeType": { - "select": { - "label": "Devam etme türü", - "options": { - "automatic": "Otomatik", - "prompt": "İpucu" - }, - "title": "Videoları nasıl devam ettirmek istediğinizi seçin" - } - }, - "title": "Video geçmişi ayarları" - }, - "volumeBoost": { - "boostAmount": { - "label": "Ses güçlendirme miktarı (dB)", - "title": "Ses güçlendirme miktarı" - }, - "enable": { - "label": "Ses güçlendirmeyi etkinleştir", - "title": "Ses güçlendirmeyi etkinleştir" - }, - "mode": { - "select": { - "label": "Ses güçlendirme modu", - "options": { - "global": "Genel", - "perVideo": "Video başına" - }, - "title": "Ses artırmanın nasıl uygulanacağını seçin. 'Video başına', özellik menüsünde her video için ayrı ayrı güçlendirmenin etkinleştirilmesine olanak tanır. 'Genel', ses artırma etkinleştirildiğinde tüm videolara güçlendirme uygular." - } - }, - "title": "Ses güçlendirme ayarları" - }, - "youtubeDataApiV3Key": { - "getApiKeyLinkText": "Buradan bir tane alabilirsiniz", - "input": { - "label": "API Anahtarı", - "title": "Youtube Veri API V3 anahtarınızı girin." - }, - "title": "YouTube API V3 Anahtarı" - }, - "youtubeDeepDark": { - "author": "Yazar", - "co-authors": "Ortak yazarlar", - "colors": { - "colorShadow": { - "label": "Gölge rengi", - "title": "Gölge rengi" - }, - "dimmerText": { - "label": "İkincil metin rengi", - "title": "İkincil metin rengi" - }, - "hoverBackground": { - "label": "Üzerine gelindiğindeki arka plan rengi", - "title": "Üzerine gelindiğindeki arka plan rengi" - }, - "mainBackground": { - "label": "Ana arka plan rengi", - "title": "Ana arka plan rengi" - }, - "mainColor": { - "label": "Vurgulama rengi", - "title": "Vurgulama rengi" - }, - "mainText": { - "label": "Ana metin rengi", - "title": "Ana metin için renk" - }, - "secondBackground": { - "label": "İkincil arka plan rengi", - "title": "İkincil arka plan rengi" - } - }, - "enable": { - "label": "Seçilen temayı etkinleştir", - "title": "Sayfa için seçilen temayı etkinleştirin" - }, - "select": { - "label": "Tema seç", - "title": "Sayfa için uygulanacak bir tema seçin" - }, - "title": "YouTube Deep Dark Ayarları" - } - } - } -} \ No newline at end of file + "langCode": "tr-TR", + "langName": "Türkçe", + "messages": { + "resumingVideo": "{{VIDEO_TIME}} tarihinde videoyu devam ettir", + "settingVolume": "Ses güçlendirmesini {{VOLUME_BOOST_AMOUNT}} olarak ayarla" + }, + "pages": { + "content": { + "features": { + "copyTimestampUrlButton": { + "button": { + "copied": "Kopyalandı!", + "label": "Geçerli zamana ait video URL'sini kopyala" + } + }, + "featureMenu": { + "button": { + "label": "Özellik menüsü" + } + }, + "forwardRewindButtons": { + "buttons": { + "forwardButton": { + "label": "{{TIME}} hızlı ileri sar" + }, + "rewindButton": { + "label": "{{TIME}} kadar geri sar" + } + } + }, + "hideEndScreenCardsButton": { + "button": { + "label": "Bitiş ekranı kartlarını gizle", + "toggle": { + "off": "Bitiş ekranı kartlarını göster", + "on": "Bitiş ekranı kartlarını gizle" + } + } + }, + "loopButton": { + "button": { + "label": "Tekrarla", + "toggle": { + "off": "Tekrarlama kapalı", + "on": "Tekrarlama açık" + } + } + }, + "maximizePlayerButton": { + "button": { + "label": "Ekranı kapla", + "toggle": { + "off": "Tam ekran kapalı", + "on": "Tam ekran açıl" + } + } + }, + "openTranscriptButton": { + "button": { + "label": "Transkripti Aç" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Hızı {{SPEED}} değerine düşür" + }, + "increasePlaybackSpeedButton": { + "label": "Hızı {{SPEED}} değerine çıkar" + } + }, + "decreaseLimit": "Daha fazla düşüremezsin ({{SPEED}})", + "increaseLimit": "Daha fazla artıramazsın ({{SPEED}})" + }, + "playlistLength": { + "title": "Bazı videolar gizliyse veya tam uzunluğa ulaşmak için yeterli sayıda video yüklemediyseniz, toplam uzunluk doğru olmayabilir." + }, + "screenshotButton": { + "button": { + "label": "Ekran görüntüsü" + }, + "copiedToClipboard": "Ekran görüntüsü panoya kopyalandı" + }, + "videoHistory": { + "resumeButton": "Devam Et", + "resumePrompt": { + "close": "Kapat" + } + }, + "volumeBoostButton": { + "button": { + "label": "Ses Yükseltici", + "toggle": { + "off": "Ses Yükseltici Devredışı", + "on": "Ses Yükseltici Aktif" + } + } + } + } + }, + "options": { + "notifications": { + "error": { + "scrollWheelHoldModifierKey": { + "sameKey": { + "speedControl": "Kaydırma tekerleği hız kontrolü için kullanılan değiştirici tuş, kaydırma tekerleği ses kontrolü için kullanılan değiştirici tuşla aynı olamaz.", + "volumeControl": "Kaydırma tekerleği ile ses düzeyi kontrolü için kullanılan değiştirici tuş, kaydırma hızı kontrolü için kullanılan değiştirici tuşla aynı olamaz." + } + } + }, + "info": { + "reset": "Tüm seçenekler varsayılan değerlerine sıfırlandı.\nArtık \"Onayla\" düğmesine tıklayarak değişiklikleri kaydedebilir veya bu sayfayı kapatarak iptal edebilir veya bu bildirimi göz ardı edebilirsiniz." + }, + "success": { + "saved": "Seçenekler kaydedildi." + } + } + } + }, + "settings": { + "clearData": { + "allDataDeleted": "Tüm veriler silindi.", + "confirmAlert": "Bu seçeneklerle ilgili tüm uzantı verilerini silecektir. Devam etmek istiyor musunuz?" + }, + "optionDisabled": { + "either": { + "label": "Bu seçeneği yapılandırmak için {{OPTIONS}} öğesini etkinleştirin", + "separator": " veya " + }, + "plural": { + "label": "Bu seçeneği yapılandırmak için {{OPTIONS}} öğesini etkinleştirin", + "separator": " ve " + }, + "singular": "Bu seçeneği yapılandırmak için '{{OPTION}}' öğesini etkinleştirin", + "specificOption": { + "featureMenu": "Bu seçeneği yapılandırmak için özellik menüsüne yerleştirilecek en az bir düğmeyi yapılandırın." + } + }, + "scrollForMoreSettings": "Daha fazla ayar için kaydırın", + "sections": { + "automaticQuality": { + "enable": { + "label": "Otomatik kalite ayarlamayı etkinleştir", + "title": "Video kalitesini seçilen seviyeye otomatik olarak ayarlar." + }, + "fallbackQualityStrategy": { + "select": { + "label": "Kalite geri dönüş stratejisi", + "options": { + "higher": "Daha yüksek", + "lower": "Daha düşük" + }, + "title": "Seçilen kalite mevcut değilse kullanılacak strateji" + } + }, + "select": { + "label": "Oynatma kalitesi", + "title": "Videonun ayarlanacağı kalite" + }, + "title": "Otomatik kalite ayarları" + }, + "bottomButtons": { + "clear": { + "title": "Bu uzantının makinenizde sakladığı tüm verileri temizler", + "value": "Veriyi Temizle" + }, + "confirm": { + "title": "Ayarı sıfırlamayı onayla", + "value": "Onayla" + }, + "openTab": { + "title": "Uzantı ayarlarını yeni bir sekmede açın" + }, + "reset": { + "title": "Tüm ayarları varsayılan değerlerine sıfırlar. Değişiklikleri kaydetmek için onayla düğmesine tıklayın", + "value": "Sıfırla" + } + }, + "buttonPlacement": { + "select": { + "buttonNames": { + "copyTimestampUrlButton": "Video bağlantısını zaman damgasıyla kopyala butonu", + "decreasePlaybackSpeedButton": "Hızı Düşürme Butonu", + "forwardButton": "Hızlı İleri düğmesi", + "hideEndScreenCardsButton": "Bitiş ekranı kartlarını gizleme düğmesi", + "increasePlaybackSpeedButton": "Hızı Artırma Butonu", + "loopButton": "Döngü düğmesi", + "maximizePlayerButton": "Tam ekran düğmesi", + "openTranscriptButton": "Transkripti Aç butonu", + "rewindButton": "Geri sarma düğmesi", + "screenshotButton": "Ekran görüntüsü düğmesi", + "volumeBoostButton": "Ses güçlendirme düğmesi" + }, + "options": { + "below_player": { + "placement": "oynatıcı kontrollerinin altında", + "value": "Oynatıcının altında" + }, + "feature_menu": { + "placement": "özellik menüsünde", + "value": "Özellik Menüsü" + }, + "player_controls_left": { + "placement": "oynatıcı kontrollerinin sol tarafında", + "value": "Sol Kontroller" + }, + "player_controls_right": { + "placement": "oynatıcı kontrollerinin sağ tarafında", + "value": "Sağ Kontroller" + } + }, + "title": "{{BUTTON_NAME}} düğmesini {{PLACEMENT}} konumuna yerleştir" + }, + "title": "Düğme Yerleşim Ayarları" + }, + "customCSS": { + "editor": { + "collapse": "Düzenleyiciyi Daralt", + "expand": "Düzenleyiciyi Genişlet", + "noProblems": "Hiç bir sorun bulunamadı." + }, + "enable": { + "label": "Özel CSS'yi etkinleştir", + "title": "Özel CSS'nin sayfaya uygulanmasını sağlar" + }, + "title": "Özel CSS Ayarları" + }, + "featureMenu": { + "openType": { + "select": { + "label": "Menü Aktivasyon Türü", + "options": { + "click": "Tıkla", + "hover": "İmleci Üzerine Getir" + }, + "title": "Özellik menüsünü etkinleştirme yöntemini seçin" + }, + "title": "Özellik menüsü ayarları" + } + }, + "forwardRewindButtons": { + "enable": { + "label": "İleri/geri sarma düğmeleri", + "title": "Video oynatıcısına ileri ve geri sarma düğmeleri ekler" + }, + "time": { + "label": "İleri/geri sarma süresi", + "title": "Videoyu ileri/geri sarmak için atlanacak süre" + }, + "title": "İleri/geri sarma düğmesi ayarları" + }, + "importExportSettings": { + "exportButton": { + "success": "Ayarlar başarıyla dışa aktarıldı", + "title": "Ayarları JSON dosyasına aktar", + "value": "Ayarları Dışa Aktar" + }, + "importButton": { + "error": { + "unknown": "Ayarlar içe aktarılırken hata oluştu. Lütfen dosya formatını kontrol edin.\nBilinmeyen bir hata oluştu.", + "validation": "Ayarlar içe aktarılırken hata oluştu. Lütfen dosya formatını kontrol edin.\n{{ERROR_MESSAGE}}" + }, + "success": "Ayarlar başarıyla içe aktarıldı", + "title": "Ayarları JSON dosyasına aktar", + "value": "Ayarları İçe Aktar" + } + }, + "language": { + "select": { + "label": "Dil", + "title": "Uzuntı için kullanılacak dil" + }, + "title": "Dil" + }, + "miscellaneous": { + "features": { + "automaticTheaterMode": { + "label": "Otomatik tiyatro modu", + "title": "Bir video yüklediğinizde tiyatro modunu otomatik olarak etkinleştirir" + }, + "automaticallyDisableAmbientMode": { + "label": "Ortam modunu otomatik olarak devre dışı bırak", + "title": "Bir video yüklediğinizde ortam modunu otomatik olarak devre dışı bırakır" + }, + "automaticallyDisableClosedCaptions": { + "label": "Kapalı altyazıları otomatik olarak devre dışı bırak", + "title": "Bir video yüklendiğinde kapalı altyazıları otomatik olarak devre dışı bırakır" + }, + "copyTimestampUrlButton": { + "label": "Video URL'sini zaman damgası düğmesiyle kopyala", + "title": "Video URL'sini zaman damgasıyla kopyalar (?t=123)" + }, + "defaultToOriginalAudioTrack": { + "label": "Varsayılan olarak orijinal ses parçasına dön", + "title": "Her zaman varsayılan olarak orijinal ses parçasına dön" + }, + "hideArtificialIntelligenceSummary": { + "label": "AI özetini gizle", + "title": "Videoların altındaki yapay zeka özetini gizler" + }, + "hideEndScreenCards": { + "label": "Bitiş ekranı kartlarını gizle", + "title": "Video'nun sonundaki kartları gizler" + }, + "hideEndScreenCardsButton": { + "label": "Bitiş ekranı kartlarını gizleme düğmesi", + "title": "Video'nun sonuna bitiş ekranı kartlarını gizlemek/göstermek için bir düğme ekler" + }, + "hideLiveStreamChat": { + "label": "Canlı yayın sohbetini gizle", + "title": "Canlı yayın sohbetini gizler" + }, + "hideOfficialArtistVideosFromHomePage": { + "label": "Resmi Sanatçı Videolarını Gizle", + "title": "Ana Sayfada Resmi Sanatçı Videolarını Gizle" + }, + "hidePaidPromotionBanner": { + "label": "Ücretli tanıtım afişini gizle", + "title": "Ücretli tanıtım içeren bir videoyu izlediğinizde görünen başlığı gizler" + }, + "hidePlayables": { + "label": "Oynatılabilirleri gizle", + "title": "Tüm oynatılabilir öğeleri gizle" + }, + "hideScrollbar": { + "label": "Kaydırma çubuğu gizlemeyi etkinleştir", + "title": "Sayfa kaydırma çubuğunu gizler" + }, + "hideShorts": { + "label": "Kısa videoları gizle", + "title": "Tüm kısa videoları gizler" + }, + "hideTranslateComment": { + "label": "Yorumu Çevir'i Gizle Butonu", + "title": "Yorumlar altındaki 'Dile Çevir' düğmesini gizler" + }, + "loopButton": { + "label": "Tekrarlama düğmesi", + "title": "İzlediğiniz videoyu döngüye almak için özellik menüsüne bir düğme ekler" + }, + "maximizePlayerButton": { + "label": "Oynatıcıyı tam ekran yapma düğmesini etkinleştir", + "title": "Oynatıcıyı büyütmek için özellik menüsüne bir düğme ekler" + }, + "openTranscriptButton": { + "label": "Not dökümü düğmesini gizle", + "title": "İzlediğiniz videonun metnini açmak için özellik menüsüne bir düğme ekler" + }, + "openYouTubeSettingsOnHover": { + "label": "Fare ile üzerine gelerek Youtube ayarlarını açın", + "title": "Ayarlar düğmesinin üzerine gelindiğinde YouTube ayarlar menüsünü açar" + }, + "pauseBackgroundPlayers": { + "label": "Arka plan oynatıcılarını duraklat", + "title": "Ön plan sekmesinde yeni bir oynatıcı başlattığınızda arka plan sekmelerindeki video oynatıcıları duraklatır" + }, + "playlistRemover": { + "label": "Hide playlists from homepage", + "title": "Get rid of playlists from homepage" + }, + "remainingTime": { + "label": "Kalan süre", + "title": "İzlediğiniz videonun kalan süresini gösterir" + }, + "rememberLastVolume": { + "label": "Son ses hacmini hatırla", + "title": "İzlediğiniz son videonun ses seviyesini hatırlar ve yeni bir video açtığınızda bu ses seviyesine ayarlar" + }, + "removeRedirect": { + "label": "YouTube yönlendirme bağlantılarını kaldır", + "title": "Yönlendirme uyarı diyaloğunu atlayarak YouTube yönlendirmesini gerçek URL'lerle değiştirir" + }, + "restoreFullscreenScrolling": { + "label": "Restore fullscreen scrolling", + "title": "Restores scrolling in fullscreen mode" + }, + "shareShortener": { + "label": "YouTube video paylaşım bağlantısını kısalt", + "title": "YouTube video paylaşım bağlantısını (youtu.be) si/feature parametrelerini çıkararak kısaltır" + }, + "shortsAutoScroll": { + "label": "Kısa videoya otomatik kaydır", + "title": "Bir sonraki kısa videoya otomatik kaydır" + }, + "skipContinueWatching": { + "label": "\"Video durdu. Hala orda mısın?\"ı Atla", + "title": "Video oynatmayı durduran boşta kalma iletişim kutusunu atlar" + } + }, + "title": "Çeşitli ayarlar" + }, + "onScreenDisplaySettings": { + "color": { + "label": "Renk", + "options": { + "blue": "Mavi", + "green": "Yeşil", + "orange": "Turuncu", + "pink": "Pembe", + "purple": "Mor", + "red": "Kırmızı", + "white": "Beyaz", + "yellow": "Sarı" + }, + "title": "Ekran göstergesinin rengini seçin" + }, + "hide": { + "label": "Gecikmeyi Gizle", + "title": "Ekran görüntüsünü otomatik olarak gizlemeden önce geçen süreyi milisaniye cinsinden belirtin" + }, + "opacity": { + "label": "Saydamlık", + "title": "Ekrandaki gösterimin saydamlığını ayarlayın" + }, + "padding": { + "label": "İç Boşluk", + "title": "Adjust the spacing around the On-Screen Display in pixels. This applies specifically to corner On-Screen Display." + }, + "position": { + "label": "Konum", + "options": { + "bottom_left": "Sol Alt", + "bottom_right": "Sağ Alt", + "center": "Orta", + "top_left": "Sol Üst", + "top_right": "Sağ Üst" + }, + "title": "Ekran görüntüleme konumunu seçin" + }, + "title": "Ekran Üstü Görüntüleme Ayarları", + "type": { + "label": "Tür", + "options": { + "circle": "Daire", + "line": "Satır", + "no_display": "Ekran yok", + "text": "Metin" + }, + "title": "Ekran görüntüleme türünü seçin" + } + }, + "playbackSpeed": { + "enable": { + "label": "Zorunlu oynatma hızını etkinleştir", + "title": "Video hızını aşağıda seçtiğiniz hıza ayarlar" + }, + "playbackSpeedButtons": { + "label": "Oynatma hızı ayarları", + "select": { + "label": "Oynatma düğmelerinin hızı", + "title": "Tıklama başına değiştirilecek hız miktarı" + }, + "title": "İzlediğiniz videonun oynatma hızını artırmak veya azaltmak için düğmeler ekler" + }, + "select": { + "label": "Oynatma hızı", + "title": "Video oynatma hızını ayarlar" + }, + "title": "Oynatma hızı ayarları" + }, + "playlistLength": { + "enable": { + "label": "Çalma listesinin uzunluk bilgilerini göster", + "title": "Oynatma listesinin toplam, izlenen ve ne kalan uzunluğunu gösterir." + }, + "title": "Oynatma listesi uzunluk ayarları", + "wayToGetLength": { + "select": { + "label": "Oynatma listesi uzunluğunu alma yöntemi", + "title": "Oynatma listesi uzunluk bilgisi alma yolu (Bir hata oluşursa API yöntemi HTML'e geri dönecek)" + } + }, + "wayToGetWatchTime": { + "select": { + "label": "İzlenme süresini alma yöntemi", + "options": { + "duration": "Video Uzunluğu", + "youtube": "Video İzlenme Süresi" + }, + "title": "İzlenen süreyi alma yolu (Video Uzunluğu türü yalnızca izleme sayfasında kullanılır)" + } + } + }, + "screenshotButton": { + "enable": { + "label": "Ekran görüntüsü tuşunu etkinleştir", + "title": "Videonun ekran görüntüsünü almak için oynatıcıya bir düğme ekler" + }, + "saveAs": { + "clipboard": "Pano", + "file": "Dosya" + }, + "selectFormat": { + "label": "Ekran görüntüsü formatı", + "title": "Ekran görüntüsünün kaydedileceği format" + }, + "selectSaveAs": { + "label": "Ekran görüntüsü kaydetme türü", + "title": "Ekran görüntüsü kaydetme türü" + }, + "title": "Ekran görüntüsü ayarları" + }, + "scrollWheelSpeedControl": { + "adjustmentSteps": { + "label": "Kaydırma başına hız değişimi", + "title": "Kaydırma başına hız değiştirmeyi ayarlar" + }, + "enable": { + "label": "Kaydırma tekerleği hız kontrolü", + "title": "Kaydırma tekerleği ile hız ayarını etkinleştirmek için değiştirici tuşlarından birine basın." + }, + "optionLabel": "{{KEY}} anahtarı", + "select": { + "label": "Düzenleyici anahtar", + "title": "Kullanılacak kısayol düğmesi" + }, + "title": "Kaydırma tekerleği için hız kontrolü ayarları" + }, + "scrollWheelVolumeControl": { + "adjustmentSteps": { + "label": "Her kaydırmada değiştirilecek ses düzeyi", + "title": "Her kaydırmada değiştirilecek ses düzeyini ayarlayın" + }, + "enable": { + "label": "Kaydırma tekerleği ile ses kontrolü", + "title": "İzlediğiniz videonun ses düzeyini kontrol etmek için kaydırma tekerleğini kullanmanızı sağlar" + }, + "holdModifierKey": { + "enable": { + "label": "Değiştirici tuşa basılı tutulduğunda", + "title": "Kaydırma tekerleği ile ses düzeyi ayarını etkinleştirmek için değiştirici tuşlardan birine basın" + }, + "optionLabel": "{{KEY}} anahtarı", + "select": { + "label": "Düzenleyici anahtar", + "title": "Kullanılacak kısayol düğmesi" + } + }, + "holdRightClick": { + "enable": { + "label": "Etkinleştirmek için sağ tuşa basılı tutun", + "title": "Kaydırma tekerleği ile ses kontrolünü etkinleştirmek için farenin sağ düğmesine basılı tutun" + } + }, + "title": "Kaydırma tekerleği ile ses seviyesi kontrolü ayarları" + }, + "settingSearch": { + "placeholder": "Bir ayar arayın" + }, + "videoHistory": { + "enable": { + "label": "İzlenen videoları takip edin", + "title": "İzlediğiniz videolarda en son nerede kaldığınızı takip eder ve oynatmaya oradan devam etmenizi sağlar" + }, + "resumeType": { + "select": { + "label": "Devam etme türü", + "options": { + "automatic": "Otomatik", + "prompt": "İpucu" + }, + "title": "Videoları nasıl devam ettirmek istediğinizi seçin" + } + }, + "title": "Video geçmişi ayarları" + }, + "volumeBoost": { + "boostAmount": { + "label": "Ses güçlendirme miktarı (dB)", + "title": "Ses güçlendirme miktarı" + }, + "enable": { + "label": "Ses güçlendirmeyi etkinleştir", + "title": "Ses güçlendirmeyi etkinleştir" + }, + "mode": { + "select": { + "label": "Ses güçlendirme modu", + "options": { + "global": "Genel", + "perVideo": "Video başına" + }, + "title": "Ses artırmanın nasıl uygulanacağını seçin. 'Video başına', özellik menüsünde her video için ayrı ayrı güçlendirmenin etkinleştirilmesine olanak tanır. 'Genel', ses artırma etkinleştirildiğinde tüm videolara güçlendirme uygular." + } + }, + "title": "Ses güçlendirme ayarları" + }, + "youtubeDataApiV3Key": { + "getApiKeyLinkText": "Buradan bir tane alabilirsiniz", + "input": { + "label": "API Anahtarı", + "title": "Youtube Veri API V3 anahtarınızı girin." + }, + "title": "YouTube API V3 Anahtarı" + }, + "youtubeDeepDark": { + "author": "Yazar", + "co-authors": "Ortak yazarlar", + "colors": { + "colorShadow": { + "label": "Gölge rengi", + "title": "Gölge rengi" + }, + "dimmerText": { + "label": "İkincil metin rengi", + "title": "İkincil metin rengi" + }, + "hoverBackground": { + "label": "Üzerine gelindiğindeki arka plan rengi", + "title": "Üzerine gelindiğindeki arka plan rengi" + }, + "mainBackground": { + "label": "Ana arka plan rengi", + "title": "Ana arka plan rengi" + }, + "mainColor": { + "label": "Vurgulama rengi", + "title": "Vurgulama rengi" + }, + "mainText": { + "label": "Ana metin rengi", + "title": "Ana metin için renk" + }, + "secondBackground": { + "label": "İkincil arka plan rengi", + "title": "İkincil arka plan rengi" + } + }, + "enable": { + "label": "Seçilen temayı etkinleştir", + "title": "Sayfa için seçilen temayı etkinleştirin" + }, + "select": { + "label": "Tema seç", + "title": "Sayfa için uygulanacak bir tema seçin" + }, + "title": "YouTube Deep Dark Ayarları" + } + } + } +} diff --git a/public/locales/zh-CN.json b/public/locales/zh-CN.json index 25213c9c9..7640cf1cd 100644 --- a/public/locales/zh-CN.json +++ b/public/locales/zh-CN.json @@ -1,642 +1,642 @@ { - "langCode": "zh-CN", - "langName": "中文 (简体)", - "messages": { - "resumingVideo": "恢复视频播放时刻于 {{VIDEO_TIME}}", - "settingVolume": "设置音量增强至 {{VOLUME_BOOST_AMOUNT}}" - }, - "pages": { - "content": { - "features": { - "copyTimestampUrlButton": { - "button": { - "copied": "复制成功!", - "label": "复制带有时间戳的视频 URL" - } - }, - "featureMenu": { - "button": { - "label": "功能菜单" - } - }, - "forwardRewindButtons": { - "buttons": { - "forwardButton": { - "label": "向前快进 {{TIME}}" - }, - "rewindButton": { - "label": "向后快退 {{TIME}}" - } - } - }, - "hideEndScreenCardsButton": { - "button": { - "label": "隐藏结束界面卡片", - "toggle": { - "off": "显示结束界面卡片", - "on": "隐藏结束界面卡片" - } - } - }, - "loopButton": { - "button": { - "label": "循环播放", - "toggle": { - "off": "取消循环", - "on": "启用循环" - } - } - }, - "maximizePlayerButton": { - "button": { - "label": "最大化", - "toggle": { - "off": "最大化关闭", - "on": "最大化开启" - } - } - }, - "openTranscriptButton": { - "button": { - "label": "打开转写文稿" - } - }, - "playbackSpeedButtons": { - "buttons": { - "decreasePlaybackSpeedButton": { - "label": "降低播放速度至 {{SPEED}}" - }, - "increasePlaybackSpeedButton": { - "label": "增加播放速度至 {{SPEED}}" - } - }, - "decreaseLimit": "不能继续降低({{SPEED}})", - "increaseLimit": "不能继续增加({{SPEED}})" - }, - "playlistLength": { - "title": "如果某些视频被隐藏,或者您没有加载足够的视频来获取全部长度,总长度可能不准确。" - }, - "screenshotButton": { - "button": { - "label": "屏幕截图" - }, - "copiedToClipboard": "截图已复制到剪贴板" - }, - "videoHistory": { - "resumeButton": "继续播放", - "resumePrompt": { - "close": "关" - } - }, - "volumeBoostButton": { - "button": { - "label": "音量增强", - "toggle": { - "off": "关闭音量增强", - "on": "开启音量增强" - } - } - } - } - }, - "options": { - "notifications": { - "error": { - "scrollWheelHoldModifierKey": { - "sameKey": { - "speedControl": "滚轮控制播放速度键位与控制音量冲突。", - "volumeControl": "滚轮控制音量键位与控制播放速度冲突。" - } - } - }, - "info": { - "reset": "所有选项已重置为默认值。\n现在您可以通过单击“确认”按钮保存更改,或通过关闭此页面或忽略此通知放弃更改。" - }, - "success": { - "saved": "选项已保存。" - } - } - } - }, - "settings": { - "clearData": { - "allDataDeleted": "所有数据已删除。", - "confirmAlert": "这将删除所有与选项相关的扩展数据。是否继续?" - }, - "optionDisabled": { - "either": { - "label": "启用 {{OPTIONS}} 以配置此选项", - "separator": " 或 " - }, - "plural": { - "label": "启用 {{OPTIONS}} 以配置此选项", - "separator": " 和 " - }, - "singular": "启用 '{{OPTION}}' 以配置此选项", - "specificOption": { - "featureMenu": "配置至少一个按钮放置在功能菜单中以配置此选项。" - } - }, - "scrollForMoreSettings": "滚动以查看更多设置", - "sections": { - "automaticQuality": { - "enable": { - "label": "自动质量调整", - "title": "自动调整视频质量到所选等级。" - }, - "fallbackQualityStrategy": { - "select": { - "label": "质量回退策略", - "options": { - "higher": "升高", - "lower": "降低" - }, - "title": "当所选质量不可用时使用的策略" - } - }, - "select": { - "label": "播放质量", - "title": "将视频质量设为" - }, - "title": "自动画质设置" - }, - "bottomButtons": { - "clear": { - "title": "清除此扩展存储在您机器上的所有数据", - "value": "清除数据" - }, - "confirm": { - "title": "确认重置设置", - "value": "确认" - }, - "openTab": { - "title": "在新标签中打开扩展设置" - }, - "reset": { - "title": "重置所有设置为默认设置,点击确认按钮以保存更改", - "value": "重新开始" - } - }, - "buttonPlacement": { - "select": { - "buttonNames": { - "copyTimestampUrlButton": "复制带有时间戳的视频 URL 按钮", - "decreasePlaybackSpeedButton": "降低速度按钮", - "forwardButton": "快进按钮", - "hideEndScreenCardsButton": "隐藏结束界面卡片按钮", - "increasePlaybackSpeedButton": "增加速度按钮", - "loopButton": "循环按钮", - "maximizePlayerButton": "最大化按钮", - "openTranscriptButton": "转写文稿按钮", - "rewindButton": "快退按钮", - "screenshotButton": "屏幕截图按钮", - "volumeBoostButton": "音量增强按钮" - }, - "options": { - "below_player": { - "placement": "位于播放器控制按键下方", - "value": "位于播放器下方" - }, - "feature_menu": { - "placement": "位于功能菜单内", - "value": "功能菜单" - }, - "player_controls_left": { - "placement": "位于播放器控制按键左侧", - "value": "控件居左" - }, - "player_controls_right": { - "placement": "位于播放器控制按键右侧", - "value": "控件居右" - } - }, - "title": "把 {{BUTTON_NAME}} 按钮放在 {{PLACEMENT}}" - }, - "title": "按钮位置设置" - }, - "customCSS": { - "editor": { - "collapse": "折叠编辑器", - "expand": "展开编辑器", - "noProblems": "未发现问题" - }, - "enable": { - "label": "启用自定义 CSS", - "title": "启用自定义 CSS 以应用到页面" - }, - "title": "自定义 CSS 设置" - }, - "featureMenu": { - "openType": { - "select": { - "label": "菜单激活方式", - "options": { - "click": "点击", - "hover": "悬停" - }, - "title": "设置打开功能菜单的方式" - }, - "title": "功能菜单设置" - } - }, - "forwardRewindButtons": { - "enable": { - "label": "启用快进/快退按钮", - "title": "给视频播放器添加快进/快退按钮" - }, - "time": { - "label": "快进/快退时间", - "title": "快进/快退视频的时间长度" - }, - "title": "快进/快退按钮设置" - }, - "importExportSettings": { - "exportButton": { - "success": "导出配置成功", - "title": "导出设置到 JSON 文件", - "value": "导出设置" - }, - "importButton": { - "error": { - "unknown": "导入设置时出错。请检查文件格式。\n发生未知错误。", - "validation": "导入设置出错。请检查文件格式。\n{{ERROR_MESSAGE}}" - }, - "success": "设置导入成功", - "title": "从 JSON 文件导入设置", - "value": "导入设置" - } - }, - "language": { - "select": { - "label": "语言", - "title": "用于扩展的语言" - }, - "title": "语言" - }, - "miscellaneous": { - "features": { - "automaticTheaterMode": { - "label": "自动启用剧场模式", - "title": "当视频打开时,自动启用剧场模式" - }, - "automaticallyDisableAmbientMode": { - "label": "自动禁用氛围模式", - "title": "载入视频时自动禁用氛围模式" - }, - "automaticallyDisableClosedCaptions": { - "label": "自动禁用隐藏式字幕", - "title": "载入视频时自动禁用隐藏式字幕" - }, - "copyTimestampUrlButton": { - "label": "复制带有时间戳的视频 URL 按钮", - "title": "复制带有时间戳的视频 URL (?t=123)" - }, - "defaultToOriginalAudioTrack": { - "label": "默认设置为原始音轨", - "title": "总是默认原始音轨" - }, - "hideArtificialIntelligenceSummary": { - "label": "隐藏 AI 摘要", - "title": "隐藏视频下方的人工智能摘要" - }, - "hideEndScreenCards": { - "label": "隐藏结束界面卡片", - "title": "隐藏视频末尾的卡片" - }, - "hideEndScreenCardsButton": { - "label": "隐藏结束界面卡片按钮", - "title": "添加按钮以显示/隐藏视频末尾的卡片" - }, - "hideLiveStreamChat": { - "label": "隐藏直播聊天", - "title": "隐藏直播聊天" - }, - "hideOfficialArtistVideosFromHomePage": { - "label": "隐藏音乐人官方视频", - "title": "从主页上隐藏来自音乐人官方频道的视频" - }, - "hidePaidPromotionBanner": { - "label": "隐藏付费推广横幅", - "title": "隐藏当您观看带有付费促销的视频时出现的横幅广告" - }, - "hidePlayables": { - "label": "隐藏可播放内容", - "title": "隐藏所有可播放内容" - }, - "hideScrollbar": { - "label": "启用隐藏滚动条", - "title": "隐藏页面滚动条" - }, - "hideShorts": { - "label": "隐藏短视频", - "title": "隐藏所有短视频" - }, - "hideTranslateComment": { - "label": "隐藏翻译评论按钮", - "title": "隐藏评论下方的“翻译至当前语言”按钮" - }, - "loopButton": { - "label": "循环按钮", - "title": "在功能菜单中添加一个按钮来循环你正在观看的视频" - }, - "maximizePlayerButton": { - "label": "最大化播放器按钮", - "title": "在功能菜单中添加一个按钮来最大化播放器" - }, - "openTranscriptButton": { - "label": "转写文稿按钮", - "title": "在功能菜单中添加一个按钮来循环你正在观看的视频" - }, - "openYouTubeSettingsOnHover": { - "label": "悬停时打开 YouTube 设置", - "title": "当您悬停在设置按钮上时打开 YouTube 设置菜单" - }, - "pauseBackgroundPlayers": { - "label": "暂停后台播放", - "title": "当您在前台标签中启用一个新播放器时,暂停后台标签中的视频播放器" - }, - "playlistRemover": { - "label": "从主页隐藏播放列表", - "title": "从主页去除播放列表" - }, - "remainingTime": { - "label": "剩余时间", - "title": "显示您观看的视频的剩余时间" - }, - "rememberLastVolume": { - "label": "记住最后一个音量", - "title": "记住最后一个视频的音量并在打开新视频时设置" - }, - "removeRedirect": { - "label": "屏蔽YouTube重定向链接", - "title": "用真实链接替换YouTube重定向,并跳过重定向警告" - }, - "restoreFullscreenScrolling": { - "label": "恢复全屏滚动", - "title": "在全屏模式下恢复滚动" - }, - "shareShortener": { - "label": "缩短YouTube视频分享链接", - "title": "分享Youtube视频(youtu.be)时,删除si/feature 参数以缩短链接" - }, - "shortsAutoScroll": { - "label": "短视频自动下滑", - "title": "短视频播完后,自动下滑播放下一个" - }, - "skipContinueWatching": { - "label": "跳过\"视频已暂停。继续观看吗?\"", - "title": "跳过暂停视频播放的闲置对话框" - } - }, - "title": "其他设置" - }, - "onScreenDisplaySettings": { - "color": { - "label": "颜色", - "options": { - "blue": "蓝色", - "green": "绿色", - "orange": "橙色", - "pink": "粉色", - "purple": "紫色", - "red": "红色", - "white": "白色", - "yellow": "黄色" - }, - "title": "选择屏幕提示文本颜色" - }, - "hide": { - "label": "隐藏延时", - "title": "指定时间,以毫秒计,然后自动隐藏屏幕显示" - }, - "opacity": { - "label": "透明度", - "title": "调整屏幕提示文本的透明度" - }, - "padding": { - "label": "内边距", - "title": "调整屏幕提示周围以像素为单位的间距。主要适用于角落的屏幕提示。" - }, - "position": { - "label": "位置", - "options": { - "bottom_left": "左下", - "bottom_right": "右下", - "center": "居中", - "top_left": "左上", - "top_right": "右上" - }, - "title": "选择屏幕提示文本颜色" - }, - "title": "屏幕提示信息设置", - "type": { - "label": "类型", - "options": { - "circle": "圆形图标", - "line": "直线", - "no_display": "无显示", - "text": "文本" - }, - "title": "选择屏幕提示文本颜色" - } - }, - "playbackSpeed": { - "enable": { - "label": "强制播放速度", - "title": "将视频速度设置为您在下面选择的内容" - }, - "playbackSpeedButtons": { - "label": "播放速度按钮", - "select": { - "label": "播放按钮的速度", - "title": "每次点击要更改的速度量" - }, - "title": "添加按钮以增加或降低您观看的视频的播放速度" - }, - "select": { - "label": "播放速度", - "title": "将视频播放速度设为" - }, - "title": "播放速度设置" - }, - "playlistLength": { - "enable": { - "label": "显示播放列表长度信息", - "title": "显示播放列表的总长度,已观看多少,以及还剩多少。" - }, - "title": "播放列表长度设置", - "wayToGetLength": { - "select": { - "label": "获取播放列表长度的方法", - "title": "获取播放列表长度信息的方式 (如果发生错误,API 方法将回退到 HTML)" - } - }, - "wayToGetWatchTime": { - "select": { - "label": "获取已观看时间的方法", - "options": { - "duration": "视频长度", - "youtube": "视频观看时间" - }, - "title": "获取已观看时间长度的方法 (“视频长度”方法仅会在观看页面使用)" - } - } - }, - "screenshotButton": { - "enable": { - "label": "屏幕截图按钮", - "title": "向播放器添加一个按钮以拍摄视频的截图" - }, - "saveAs": { - "clipboard": "剪贴板", - "file": "文件" - }, - "selectFormat": { - "label": "截图格式", - "title": "保存屏幕截图的格式" - }, - "selectSaveAs": { - "label": "屏幕截图保存类型", - "title": "屏幕截图保存类型" - }, - "title": "屏幕截图选项" - }, - "scrollWheelSpeedControl": { - "adjustmentSteps": { - "label": "每轮滚动音量", - "title": "调整每轮滚动的音量变化" - }, - "enable": { - "label": "滚轮控制播放速度设置", - "title": "按下控制键时启用滚轮音量调整" - }, - "optionLabel": "{{KEY}} 键", - "select": { - "label": "控制键", - "title": "启用功能时按住的控制键" - }, - "title": "滚轮控制播放速度设置" - }, - "scrollWheelVolumeControl": { - "adjustmentSteps": { - "label": "每轮滚动音量", - "title": "调整每轮滚动的音量变化" - }, - "enable": { - "label": "滚轮控制音量", - "title": "让您使用滚轮来控制您正在观看的视频音量" - }, - "holdModifierKey": { - "enable": { - "label": "在按住控制键时启用功能", - "title": "按下控制键时启用滚轮音量调整" - }, - "optionLabel": "{{KEY}} 键", - "select": { - "label": "控制键", - "title": "启用功能时按住的控制键" - } - }, - "holdRightClick": { - "enable": { - "label": "按住右键时启用", - "title": "按住右键以启用滚轮音量控制" - } - }, - "title": "滚轮控制音量设置" - }, - "settingSearch": { - "placeholder": "搜索设置" - }, - "videoHistory": { - "enable": { - "label": "记录已观看视频", - "title": "记录您关闭视频的进度并在下次播放时恢复" - }, - "resumeType": { - "select": { - "label": "进度恢复方式", - "options": { - "automatic": "自动", - "prompt": "提示" - }, - "title": "选择恢复视频播放进度的方式" - } - }, - "title": "视频历史记录设置" - }, - "volumeBoost": { - "boostAmount": { - "label": "音量提升量(分贝)", - "title": "音量提升量(分贝)" - }, - "enable": { - "label": "音量增强", - "title": "启用音量增强" - }, - "mode": { - "select": { - "label": "音量增强模式", - "options": { - "global": "全局统一", - "perVideo": "分别记忆" - }, - "title": "选择音量增强生效的方式。“分别记忆”为每个视频记住各自的设置。“全局”使音量增强功能开启时,对所有视频采用同一设置。" - } - }, - "title": "音量增强设置" - }, - "youtubeDataApiV3Key": { - "getApiKeyLinkText": "您可以从这里获取一个", - "input": { - "label": "API 密钥", - "title": "输入您的 Youtube 数据 API V3 密钥。" - }, - "title": "YouTube API V3 密钥" - }, - "youtubeDeepDark": { - "author": "作者", - "co-authors": "合作作者", - "colors": { - "colorShadow": { - "label": "阴影颜色", - "title": "阴影颜色" - }, - "dimmerText": { - "label": "次要文本颜色", - "title": "为次要文本使用的颜色" - }, - "hoverBackground": { - "label": "悬停背景颜色", - "title": "为悬停背景使用的颜色" - }, - "mainBackground": { - "label": "主要背景颜色", - "title": "为主要背景使用的颜色" - }, - "mainColor": { - "label": "强调颜色", - "title": "为强调使用的颜色" - }, - "mainText": { - "label": "主要文本颜色", - "title": "为主要文本使用的颜色" - }, - "secondBackground": { - "label": "次要背景颜色", - "title": "为次要背景使用的颜色" - } - }, - "enable": { - "label": "启用所选主题", - "title": "在页面上应用所选主题" - }, - "select": { - "label": "选择主题", - "title": "选择要应用到页面的主题" - }, - "title": "YouTube 暗黑模式设置" - } - } - } -} \ No newline at end of file + "langCode": "zh-CN", + "langName": "中文 (简体)", + "messages": { + "resumingVideo": "恢复视频播放时刻于 {{VIDEO_TIME}}", + "settingVolume": "设置音量增强至 {{VOLUME_BOOST_AMOUNT}}" + }, + "pages": { + "content": { + "features": { + "copyTimestampUrlButton": { + "button": { + "copied": "复制成功!", + "label": "复制带有时间戳的视频 URL" + } + }, + "featureMenu": { + "button": { + "label": "功能菜单" + } + }, + "forwardRewindButtons": { + "buttons": { + "forwardButton": { + "label": "向前快进 {{TIME}}" + }, + "rewindButton": { + "label": "向后快退 {{TIME}}" + } + } + }, + "hideEndScreenCardsButton": { + "button": { + "label": "隐藏结束界面卡片", + "toggle": { + "off": "显示结束界面卡片", + "on": "隐藏结束界面卡片" + } + } + }, + "loopButton": { + "button": { + "label": "循环播放", + "toggle": { + "off": "取消循环", + "on": "启用循环" + } + } + }, + "maximizePlayerButton": { + "button": { + "label": "最大化", + "toggle": { + "off": "最大化关闭", + "on": "最大化开启" + } + } + }, + "openTranscriptButton": { + "button": { + "label": "打开转写文稿" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "降低播放速度至 {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "增加播放速度至 {{SPEED}}" + } + }, + "decreaseLimit": "不能继续降低({{SPEED}})", + "increaseLimit": "不能继续增加({{SPEED}})" + }, + "playlistLength": { + "title": "如果某些视频被隐藏,或者您没有加载足够的视频来获取全部长度,总长度可能不准确。" + }, + "screenshotButton": { + "button": { + "label": "屏幕截图" + }, + "copiedToClipboard": "截图已复制到剪贴板" + }, + "videoHistory": { + "resumeButton": "继续播放", + "resumePrompt": { + "close": "关" + } + }, + "volumeBoostButton": { + "button": { + "label": "音量增强", + "toggle": { + "off": "关闭音量增强", + "on": "开启音量增强" + } + } + } + } + }, + "options": { + "notifications": { + "error": { + "scrollWheelHoldModifierKey": { + "sameKey": { + "speedControl": "滚轮控制播放速度键位与控制音量冲突。", + "volumeControl": "滚轮控制音量键位与控制播放速度冲突。" + } + } + }, + "info": { + "reset": "所有选项已重置为默认值。\n现在您可以通过单击“确认”按钮保存更改,或通过关闭此页面或忽略此通知放弃更改。" + }, + "success": { + "saved": "选项已保存。" + } + } + } + }, + "settings": { + "clearData": { + "allDataDeleted": "所有数据已删除。", + "confirmAlert": "这将删除所有与选项相关的扩展数据。是否继续?" + }, + "optionDisabled": { + "either": { + "label": "启用 {{OPTIONS}} 以配置此选项", + "separator": " 或 " + }, + "plural": { + "label": "启用 {{OPTIONS}} 以配置此选项", + "separator": " 和 " + }, + "singular": "启用 '{{OPTION}}' 以配置此选项", + "specificOption": { + "featureMenu": "配置至少一个按钮放置在功能菜单中以配置此选项。" + } + }, + "scrollForMoreSettings": "滚动以查看更多设置", + "sections": { + "automaticQuality": { + "enable": { + "label": "自动质量调整", + "title": "自动调整视频质量到所选等级。" + }, + "fallbackQualityStrategy": { + "select": { + "label": "质量回退策略", + "options": { + "higher": "升高", + "lower": "降低" + }, + "title": "当所选质量不可用时使用的策略" + } + }, + "select": { + "label": "播放质量", + "title": "将视频质量设为" + }, + "title": "自动画质设置" + }, + "bottomButtons": { + "clear": { + "title": "清除此扩展存储在您机器上的所有数据", + "value": "清除数据" + }, + "confirm": { + "title": "确认重置设置", + "value": "确认" + }, + "openTab": { + "title": "在新标签中打开扩展设置" + }, + "reset": { + "title": "重置所有设置为默认设置,点击确认按钮以保存更改", + "value": "重新开始" + } + }, + "buttonPlacement": { + "select": { + "buttonNames": { + "copyTimestampUrlButton": "复制带有时间戳的视频 URL 按钮", + "decreasePlaybackSpeedButton": "降低速度按钮", + "forwardButton": "快进按钮", + "hideEndScreenCardsButton": "隐藏结束界面卡片按钮", + "increasePlaybackSpeedButton": "增加速度按钮", + "loopButton": "循环按钮", + "maximizePlayerButton": "最大化按钮", + "openTranscriptButton": "转写文稿按钮", + "rewindButton": "快退按钮", + "screenshotButton": "屏幕截图按钮", + "volumeBoostButton": "音量增强按钮" + }, + "options": { + "below_player": { + "placement": "位于播放器控制按键下方", + "value": "位于播放器下方" + }, + "feature_menu": { + "placement": "位于功能菜单内", + "value": "功能菜单" + }, + "player_controls_left": { + "placement": "位于播放器控制按键左侧", + "value": "控件居左" + }, + "player_controls_right": { + "placement": "位于播放器控制按键右侧", + "value": "控件居右" + } + }, + "title": "把 {{BUTTON_NAME}} 按钮放在 {{PLACEMENT}}" + }, + "title": "按钮位置设置" + }, + "customCSS": { + "editor": { + "collapse": "折叠编辑器", + "expand": "展开编辑器", + "noProblems": "未发现问题" + }, + "enable": { + "label": "启用自定义 CSS", + "title": "启用自定义 CSS 以应用到页面" + }, + "title": "自定义 CSS 设置" + }, + "featureMenu": { + "openType": { + "select": { + "label": "菜单激活方式", + "options": { + "click": "点击", + "hover": "悬停" + }, + "title": "设置打开功能菜单的方式" + }, + "title": "功能菜单设置" + } + }, + "forwardRewindButtons": { + "enable": { + "label": "启用快进/快退按钮", + "title": "给视频播放器添加快进/快退按钮" + }, + "time": { + "label": "快进/快退时间", + "title": "快进/快退视频的时间长度" + }, + "title": "快进/快退按钮设置" + }, + "importExportSettings": { + "exportButton": { + "success": "导出配置成功", + "title": "导出设置到 JSON 文件", + "value": "导出设置" + }, + "importButton": { + "error": { + "unknown": "导入设置时出错。请检查文件格式。\n发生未知错误。", + "validation": "导入设置出错。请检查文件格式。\n{{ERROR_MESSAGE}}" + }, + "success": "设置导入成功", + "title": "从 JSON 文件导入设置", + "value": "导入设置" + } + }, + "language": { + "select": { + "label": "语言", + "title": "用于扩展的语言" + }, + "title": "语言" + }, + "miscellaneous": { + "features": { + "automaticTheaterMode": { + "label": "自动启用剧场模式", + "title": "当视频打开时,自动启用剧场模式" + }, + "automaticallyDisableAmbientMode": { + "label": "自动禁用氛围模式", + "title": "载入视频时自动禁用氛围模式" + }, + "automaticallyDisableClosedCaptions": { + "label": "自动禁用隐藏式字幕", + "title": "载入视频时自动禁用隐藏式字幕" + }, + "copyTimestampUrlButton": { + "label": "复制带有时间戳的视频 URL 按钮", + "title": "复制带有时间戳的视频 URL (?t=123)" + }, + "defaultToOriginalAudioTrack": { + "label": "默认设置为原始音轨", + "title": "总是默认原始音轨" + }, + "hideArtificialIntelligenceSummary": { + "label": "隐藏 AI 摘要", + "title": "隐藏视频下方的人工智能摘要" + }, + "hideEndScreenCards": { + "label": "隐藏结束界面卡片", + "title": "隐藏视频末尾的卡片" + }, + "hideEndScreenCardsButton": { + "label": "隐藏结束界面卡片按钮", + "title": "添加按钮以显示/隐藏视频末尾的卡片" + }, + "hideLiveStreamChat": { + "label": "隐藏直播聊天", + "title": "隐藏直播聊天" + }, + "hideOfficialArtistVideosFromHomePage": { + "label": "隐藏音乐人官方视频", + "title": "从主页上隐藏来自音乐人官方频道的视频" + }, + "hidePaidPromotionBanner": { + "label": "隐藏付费推广横幅", + "title": "隐藏当您观看带有付费促销的视频时出现的横幅广告" + }, + "hidePlayables": { + "label": "隐藏可播放内容", + "title": "隐藏所有可播放内容" + }, + "hideScrollbar": { + "label": "启用隐藏滚动条", + "title": "隐藏页面滚动条" + }, + "hideShorts": { + "label": "隐藏短视频", + "title": "隐藏所有短视频" + }, + "hideTranslateComment": { + "label": "隐藏翻译评论按钮", + "title": "隐藏评论下方的“翻译至当前语言”按钮" + }, + "loopButton": { + "label": "循环按钮", + "title": "在功能菜单中添加一个按钮来循环你正在观看的视频" + }, + "maximizePlayerButton": { + "label": "最大化播放器按钮", + "title": "在功能菜单中添加一个按钮来最大化播放器" + }, + "openTranscriptButton": { + "label": "转写文稿按钮", + "title": "在功能菜单中添加一个按钮来循环你正在观看的视频" + }, + "openYouTubeSettingsOnHover": { + "label": "悬停时打开 YouTube 设置", + "title": "当您悬停在设置按钮上时打开 YouTube 设置菜单" + }, + "pauseBackgroundPlayers": { + "label": "暂停后台播放", + "title": "当您在前台标签中启用一个新播放器时,暂停后台标签中的视频播放器" + }, + "playlistRemover": { + "label": "从主页隐藏播放列表", + "title": "从主页去除播放列表" + }, + "remainingTime": { + "label": "剩余时间", + "title": "显示您观看的视频的剩余时间" + }, + "rememberLastVolume": { + "label": "记住最后一个音量", + "title": "记住最后一个视频的音量并在打开新视频时设置" + }, + "removeRedirect": { + "label": "屏蔽YouTube重定向链接", + "title": "用真实链接替换YouTube重定向,并跳过重定向警告" + }, + "restoreFullscreenScrolling": { + "label": "恢复全屏滚动", + "title": "在全屏模式下恢复滚动" + }, + "shareShortener": { + "label": "缩短YouTube视频分享链接", + "title": "分享Youtube视频(youtu.be)时,删除si/feature 参数以缩短链接" + }, + "shortsAutoScroll": { + "label": "短视频自动下滑", + "title": "短视频播完后,自动下滑播放下一个" + }, + "skipContinueWatching": { + "label": "跳过\"视频已暂停。继续观看吗?\"", + "title": "跳过暂停视频播放的闲置对话框" + } + }, + "title": "其他设置" + }, + "onScreenDisplaySettings": { + "color": { + "label": "颜色", + "options": { + "blue": "蓝色", + "green": "绿色", + "orange": "橙色", + "pink": "粉色", + "purple": "紫色", + "red": "红色", + "white": "白色", + "yellow": "黄色" + }, + "title": "选择屏幕提示文本颜色" + }, + "hide": { + "label": "隐藏延时", + "title": "指定时间,以毫秒计,然后自动隐藏屏幕显示" + }, + "opacity": { + "label": "透明度", + "title": "调整屏幕提示文本的透明度" + }, + "padding": { + "label": "内边距", + "title": "调整屏幕提示周围以像素为单位的间距。主要适用于角落的屏幕提示。" + }, + "position": { + "label": "位置", + "options": { + "bottom_left": "左下", + "bottom_right": "右下", + "center": "居中", + "top_left": "左上", + "top_right": "右上" + }, + "title": "选择屏幕提示文本颜色" + }, + "title": "屏幕提示信息设置", + "type": { + "label": "类型", + "options": { + "circle": "圆形图标", + "line": "直线", + "no_display": "无显示", + "text": "文本" + }, + "title": "选择屏幕提示文本颜色" + } + }, + "playbackSpeed": { + "enable": { + "label": "强制播放速度", + "title": "将视频速度设置为您在下面选择的内容" + }, + "playbackSpeedButtons": { + "label": "播放速度按钮", + "select": { + "label": "播放按钮的速度", + "title": "每次点击要更改的速度量" + }, + "title": "添加按钮以增加或降低您观看的视频的播放速度" + }, + "select": { + "label": "播放速度", + "title": "将视频播放速度设为" + }, + "title": "播放速度设置" + }, + "playlistLength": { + "enable": { + "label": "显示播放列表长度信息", + "title": "显示播放列表的总长度,已观看多少,以及还剩多少。" + }, + "title": "播放列表长度设置", + "wayToGetLength": { + "select": { + "label": "获取播放列表长度的方法", + "title": "获取播放列表长度信息的方式 (如果发生错误,API 方法将回退到 HTML)" + } + }, + "wayToGetWatchTime": { + "select": { + "label": "获取已观看时间的方法", + "options": { + "duration": "视频长度", + "youtube": "视频观看时间" + }, + "title": "获取已观看时间长度的方法 (“视频长度”方法仅会在观看页面使用)" + } + } + }, + "screenshotButton": { + "enable": { + "label": "屏幕截图按钮", + "title": "向播放器添加一个按钮以拍摄视频的截图" + }, + "saveAs": { + "clipboard": "剪贴板", + "file": "文件" + }, + "selectFormat": { + "label": "截图格式", + "title": "保存屏幕截图的格式" + }, + "selectSaveAs": { + "label": "屏幕截图保存类型", + "title": "屏幕截图保存类型" + }, + "title": "屏幕截图选项" + }, + "scrollWheelSpeedControl": { + "adjustmentSteps": { + "label": "每轮滚动音量", + "title": "调整每轮滚动的音量变化" + }, + "enable": { + "label": "滚轮控制播放速度设置", + "title": "按下控制键时启用滚轮音量调整" + }, + "optionLabel": "{{KEY}} 键", + "select": { + "label": "控制键", + "title": "启用功能时按住的控制键" + }, + "title": "滚轮控制播放速度设置" + }, + "scrollWheelVolumeControl": { + "adjustmentSteps": { + "label": "每轮滚动音量", + "title": "调整每轮滚动的音量变化" + }, + "enable": { + "label": "滚轮控制音量", + "title": "让您使用滚轮来控制您正在观看的视频音量" + }, + "holdModifierKey": { + "enable": { + "label": "在按住控制键时启用功能", + "title": "按下控制键时启用滚轮音量调整" + }, + "optionLabel": "{{KEY}} 键", + "select": { + "label": "控制键", + "title": "启用功能时按住的控制键" + } + }, + "holdRightClick": { + "enable": { + "label": "按住右键时启用", + "title": "按住右键以启用滚轮音量控制" + } + }, + "title": "滚轮控制音量设置" + }, + "settingSearch": { + "placeholder": "搜索设置" + }, + "videoHistory": { + "enable": { + "label": "记录已观看视频", + "title": "记录您关闭视频的进度并在下次播放时恢复" + }, + "resumeType": { + "select": { + "label": "进度恢复方式", + "options": { + "automatic": "自动", + "prompt": "提示" + }, + "title": "选择恢复视频播放进度的方式" + } + }, + "title": "视频历史记录设置" + }, + "volumeBoost": { + "boostAmount": { + "label": "音量提升量(分贝)", + "title": "音量提升量(分贝)" + }, + "enable": { + "label": "音量增强", + "title": "启用音量增强" + }, + "mode": { + "select": { + "label": "音量增强模式", + "options": { + "global": "全局统一", + "perVideo": "分别记忆" + }, + "title": "选择音量增强生效的方式。“分别记忆”为每个视频记住各自的设置。“全局”使音量增强功能开启时,对所有视频采用同一设置。" + } + }, + "title": "音量增强设置" + }, + "youtubeDataApiV3Key": { + "getApiKeyLinkText": "您可以从这里获取一个", + "input": { + "label": "API 密钥", + "title": "输入您的 Youtube 数据 API V3 密钥。" + }, + "title": "YouTube API V3 密钥" + }, + "youtubeDeepDark": { + "author": "作者", + "co-authors": "合作作者", + "colors": { + "colorShadow": { + "label": "阴影颜色", + "title": "阴影颜色" + }, + "dimmerText": { + "label": "次要文本颜色", + "title": "为次要文本使用的颜色" + }, + "hoverBackground": { + "label": "悬停背景颜色", + "title": "为悬停背景使用的颜色" + }, + "mainBackground": { + "label": "主要背景颜色", + "title": "为主要背景使用的颜色" + }, + "mainColor": { + "label": "强调颜色", + "title": "为强调使用的颜色" + }, + "mainText": { + "label": "主要文本颜色", + "title": "为主要文本使用的颜色" + }, + "secondBackground": { + "label": "次要背景颜色", + "title": "为次要背景使用的颜色" + } + }, + "enable": { + "label": "启用所选主题", + "title": "在页面上应用所选主题" + }, + "select": { + "label": "选择主题", + "title": "选择要应用到页面的主题" + }, + "title": "YouTube 暗黑模式设置" + } + } + } +} diff --git a/src/features/hidePlayables/index.css b/src/features/hidePlayables/index.css index 9595dab75..8160698d0 100644 --- a/src/features/hidePlayables/index.css +++ b/src/features/hidePlayables/index.css @@ -1,3 +1,3 @@ .yte-hide-playables { display: none !important; -} \ No newline at end of file +} diff --git a/src/features/hideShorts/index.css b/src/features/hideShorts/index.css index 2d5991e72..7274720d3 100644 --- a/src/features/hideShorts/index.css +++ b/src/features/hideShorts/index.css @@ -1,3 +1,3 @@ .yte-hide-shorts { display: none !important; -} \ No newline at end of file +} diff --git a/src/features/restoreFullscreenScrolling/index.css b/src/features/restoreFullscreenScrolling/index.css index e2a88fd0d..14c38bd8b 100644 --- a/src/features/restoreFullscreenScrolling/index.css +++ b/src/features/restoreFullscreenScrolling/index.css @@ -11,7 +11,7 @@ position: absolute !important; top: 0 !important; left: 0 !important; - right: calc((var(--ytd-app-fullerscreen-scrollbar-width) + 1px)* -1) !important; + right: calc((var(--ytd-app-fullerscreen-scrollbar-width) + 1px) * -1) !important; bottom: 0 !important; overflow-x: auto !important; -} \ No newline at end of file +} From 5e8491141544d1cc19bef96bb0952d3652d96d09 Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Thu, 9 Oct 2025 00:29:27 -0400 Subject: [PATCH 20/70] chore(deep dark theme): Update css file --- src/deepDarkMaterialCSS.ts | 116 ++++++++++++++++++++++++++++++------- 1 file changed, 96 insertions(+), 20 deletions(-) diff --git a/src/deepDarkMaterialCSS.ts b/src/deepDarkMaterialCSS.ts index f55c615ef..3b27c3a21 100644 --- a/src/deepDarkMaterialCSS.ts +++ b/src/deepDarkMaterialCSS.ts @@ -1,5 +1,5 @@ /** - * Version 4.5.8 + * Version 4.6.3 * Author: https://github.com/RaitaroH * Co-authors: https://github.com/MechaLynx * Repository: https://github.com/RaitaroH/YouTube-DeepDark @@ -456,6 +456,11 @@ yt-chip-cloud-chip-renderer[chip-style="STYLE_REFRESH_TO_NOVEL_CHIP"][selected] background-image: none !important; } +/*2025-09-04 - YouTube Small Thumbnails addon issue*/ +#frosted-glass.with-chipbar.ytd-app { + background: var(--main-background) !important; +} + /*video recommendation filter*/ yt-chip-cloud-chip-renderer[chip-style="STYLE_DEFAULT"][selected] #chip-container.yt-chip-cloud-chip-renderer, yt-chip-cloud-chip-renderer[chip-style="STYLE_HOME_FILTER"][selected] #chip-container.yt-chip-cloud-chip-renderer { @@ -476,11 +481,13 @@ ytd-compact-promoted-item-renderer[view-style="COMPACT_PROMOTED_ITEM_STYLE_RICH_ /*your selection*/ tp-yt-paper-item.ytd-backstage-poll-renderer[selected] .progress-bar.ytd-backstage-poll-renderer { background-color: var(--main-color) !important; + opacity: 0.9; } /*other bars*/ .progress-bar.ytd-backstage-poll-renderer { - background-color: var(--second-background) !important; + background-color: var(--main-color) !important; + opacity: 0.2; } ytd-backstage-poll-renderer:not([is-image-poll]) tp-yt-paper-item.ytd-backstage-poll-renderer .choice-info.ytd-backstage-poll-renderer { @@ -504,7 +511,8 @@ ytd-backstage-poll-renderer:not([is-image-poll]) tp-yt-paper-item.ytd-backstage- background: var(--hover-background) !important; } -#channel-title.ytd-c4-tabbed-header-renderer { +#channel-title.ytd-c4-tabbed-header-renderer, +.dynamicTextViewModelH1 { color: var(--main-text) !important; } @@ -512,7 +520,8 @@ ytd-backstage-poll-renderer:not([is-image-poll]) tp-yt-paper-item.ytd-backstage- color: var(--dimmer-text) !important; } -.truncated-text-wiz { +.truncated-text-wiz, +.yt-truncated-text__truncated-text-content { color: var(--dimmer-text) !important; } @@ -523,13 +532,16 @@ ytd-backstage-poll-renderer:not([is-image-poll]) tp-yt-paper-item.ytd-backstage- .tab-content.paper-tab, .tab-content.tp-yt-paper-tab, -.yt-tab-shape-wiz__tab { +.yt-tab-shape-wiz__tab, +/*2025-08-30*/ +.yt-tab-shape__tab { color: var(--main-text) !important; } paper-tab:hover .tab-content.paper-tab, tp-yt-paper-tab:hover > .tab-content.tp-yt-paper-tab, -.yt-tab-shape-wiz__tab--tab-selected { +.yt-tab-shape-wiz__tab--tab-selected, +.yt-tab-shape__tab--tab-selected { color: var(--main-color) !important; } @@ -538,8 +550,10 @@ tp-yt-paper-tabs { } /* for tab selected */ -.yt-tab-group-shape-wiz__slider { +.yt-tab-group-shape-wiz__slider, +.yt-tab-shape__tab-bar--tab-bar-selected { background-color: var(--main-color) !important; + height: 2px !important; } /* Join button, Sign In, Show Transcript */ @@ -583,7 +597,7 @@ iron-icon:hover { color: var(--main-color) !important; } -#contents > .ytd-browse-secondary-contents-renderer:not(:first-child) { +#contents>.ytd-browse-secondary-contents-renderer:not(:first-child) { border-color: var(--hover-background) !important; } @@ -878,7 +892,9 @@ h3.ytd-playlist-renderer, .ShortsLockupViewModelHostOutsideMetadataEndpoint, .shortsLockupViewModelHostOutsideMetadataEndpoint, /*home page titles - 2024-11-17*/ -.yt-lockup-metadata-view-model-wiz__title { +.yt-lockup-metadata-view-model-wiz__title, +/*2025-08-30*/ +.yt-lockup-metadata-view-model__title { color: var(--main-text) !important; } @@ -893,7 +909,9 @@ a.yt-simple-endpoint.ytd-playlist-panel-video-renderer:hover #unplayableText, #video-title:hover, ytd-grid-video-renderer:hover #video-title.yt-simple-endpoint.ytd-grid-video-renderer, /*home page titles - 2024-11-17*/ -.yt-lockup-metadata-view-model-wiz__title:hover { +.yt-lockup-metadata-view-model-wiz__title:hover, +/*2025-08-30*/ +.yt-lockup-metadata-view-model__title:hover { color: var(--main-color) !important; } @@ -901,7 +919,10 @@ ytd-grid-video-renderer:hover #video-title.yt-simple-endpoint.ytd-grid-video-ren yt-formatted-string[ellipsis-truncate] a.yt-formatted-string:last-child, #byline.ytd-video-meta-block, #channel-title.ytd-channel-renderer span.ytd-channel-renderer, -#text.ytd-channel-name { +#text.ytd-channel-name, +.yt-content-metadata-view-model-wiz__metadata-row:first-child .yt-core-attributed-string--link-inherit-color, +/*2025-08-30*/ +.yt-content-metadata-view-model__metadata-row:nth-child(1)>.yt-core-attributed-string { color: var(--main-color) !important; } @@ -916,6 +937,21 @@ yt-formatted-string[ellipsis-truncate] a.yt-formatted-string:last-child, color: var(--dimmer-text) !important; } +/*new badge*/ +.badge-shape-wiz--default, +/*2025-08-30*/ +.yt-badge-shape--default { + color: var(--accent-color) !important; + background: var(--hover-background) !important; +} + +/*check badge*/ +ytd-author-comment-badge-renderer[enable-modern-comment-badges][creator] #icon.ytd-author-comment-badge-renderer, +/*2025-08-30*/ +.yt-content-metadata-view-model__metadata-row:nth-child(1)>.yt-core-attributed-string--link-inherit-color>span { + color: var(--accent-color) !important; +} + /*youtube channel in the watch next sidebar*/ /*ytd-item-section-renderer.ytd-watch-next-secondary-results-renderer #metadata.ytd-channel-renderer*/ ytd-item-section-renderer.ytd-watch-next-secondary-results-renderer #description.ytd-channel-renderer { @@ -932,7 +968,7 @@ ytd-item-section-renderer.ytd-watch-next-secondary-results-renderer #avatar-sect } /*video description*/ -#description:not([class*="yt-music"]), +#description:not([class*="yt-music"]):not([class*="ytd-channel-video-player-renderer"]), #bio, #right-column>yt-formatted-string { background: var(--second-background) !important; @@ -1451,15 +1487,19 @@ ytd-button-renderer.style-primary[is-paper-button] { } /*2024-07 subscribe dropdown*/ -.yt-contextual-sheet-layout-wiz { +.yt-contextual-sheet-layout-wiz, +/*2025-08-30 also triple dots for videos*/ +.ytContextualSheetLayoutHost { background-color: var(--second-background) !important; } -.yt-list-item-view-model-wiz__title { +.yt-list-item-view-model-wiz__title, +.yt-list-item-view-model__title { color: var(--main-text) !important; } -.yt-list-item-view-model-wiz__accessory { +.yt-list-item-view-model-wiz__accessory, +.yt-list-item-view-model__accessory { color: var(--main-text) !important; } @@ -1752,7 +1792,7 @@ ytd-thumbnail-overlay-resume-playback-renderer[enable-refresh-signature-moments- .YtProgressBarLineProgressBarPlayedRefresh, .ytProgressBarLineProgressBarPlayedRefresh, .YtThumbnailOverlayProgressBarHostWatchedProgressBarSegmentModern, -.ytThumbnailOverlayProgressBarHostWatchedProgressBarSegmentModern { +.ytThumbnailOverlayProgressBarHostWatchedProgressBarSegment { background: var(--main-color) !important; } @@ -1863,24 +1903,34 @@ ytd-thumbnail-overlay-resume-playback-renderer[enable-refresh-signature-moments- /*Miniplayer*/ #info-bar.ytd-miniplayer .metadata.ytd-miniplayer, -#info-bar.ytd-miniplayer { +#info-bar.ytd-miniplayer, +/*2025-08-30*/ +.ytdMiniplayerInfoBarHost { background-color: var(--main-background) !important; } -#info-bar.ytd-miniplayer .channel.ytd-miniplayer { +#info-bar.ytd-miniplayer .channel.ytd-miniplayer, +.ytdMiniplayerInfoBarTitle { color: var(--main-color) !important; } +.ytdMiniplayerInfoBarSubtitle { + color: var(--main-text) !important; +} + .ytd-miniplayer .ytp-button:not([aria-disabled="true"]):not([disabled]):not([aria-hidden="true"]):hover svg path { fill: var(--main-color) !important; } /*added to queue*/ -ytd-miniplayer-toast[opened] { +ytd-miniplayer-toast[opened], +.ytdMiniplayerToastOpening { background-color: var(--second-background) !important; } -#label.ytd-miniplayer-toast { +#label.ytd-miniplayer-toast, +.ytdMiniplayerToastLabel, +.ytdMiniplayerToastTitle { color: var(--main-color) !important; } @@ -2403,6 +2453,11 @@ ytd-searchbox input, color: var(--main-color) !important; } +/*2025-08-30 right search icon*/ +.ytSearchboxComponentSearchButton>span:nth-child(1)>span:nth-child(1)>div:nth-child(1)>svg:nth-child(1) { + color: var(--main-text) !important; +} + #masthead-search .search-btn-component .yt-uix-button-content /*account*/ { @@ -3140,6 +3195,27 @@ yt-live-chat-poll-choice:not([has-voted]) #label-text.yt-live-chat-poll-choice, color: var(--main-text) !important; } +/*Top Fans*/ +/*2025-08-30*/ +ytd-section-list-renderer[live-chat-engagement-panel][panel-target-id="PAlive_viewer_leaderboard"]:not([hide-bottom-separator]) #contents.ytd-section-list-renderer>ytd-item-section-renderer.ytd-section-list-renderer:not(:last-child) { + border-color: var(--hover-background) !important; +} + +.ytvlLiveLeaderboardItemViewModelRankNumber, +.ytvlLiveLeaderboardItemChannelContentViewModelChannelName, +.ytvlLiveLeaderboardItemViewModelPoints { + color: var(--main-text) !important; +} + +/*top fans info*/ +#inner.yt-live-chat-dialog-renderer { + background-color: var(--hover-background) !important; +} + +#live-chat-dialog-body.yt-live-chat-dialog-renderer yt-formatted-string.yt-live-chat-dialog-renderer>span { + color: var(--main-text) !important; +} + /*Fund raiser*/ #header-section.ytd-donation-shelf-renderer, From 0937fa63a44c1fce724031b502c6f013af694195 Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Thu, 9 Oct 2025 02:55:51 -0400 Subject: [PATCH 21/70] fix(playlist length): Add support for immersive header layout --- src/features/playlistLength/utils.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/features/playlistLength/utils.ts b/src/features/playlistLength/utils.ts index a5ef603c0..08a6031c3 100644 --- a/src/features/playlistLength/utils.ts +++ b/src/features/playlistLength/utils.ts @@ -17,11 +17,15 @@ import { const NO_PADDING_HEADER_SELECTOR = "yt-page-header-view-model.yt-page-header-view-model.yt-page-header-view-model--no-padding"; const CINEMATIC_HEADER_SELECTOR = "yt-page-header-renderer yt-page-header-view-model.yt-page-header-view-model--cinematic-container-overflow-boundary"; +const IMMERSIVE_HEADER_SELECTOR = + "ytd-playlist-header-renderer .immersive-header-container .immersive-header-content .thumbnail-and-metadata-wrapper"; export const getHeaderSelectors = () => ({ playlist: (() => { const noPaddingHeader = document.querySelector(NO_PADDING_HEADER_SELECTOR); const cinematicHeader = document.querySelector(CINEMATIC_HEADER_SELECTOR); + const immersiveHeader = document.querySelector(IMMERSIVE_HEADER_SELECTOR); + if (immersiveHeader && immersiveHeader.clientWidth > 0) return IMMERSIVE_HEADER_SELECTOR; if (noPaddingHeader && noPaddingHeader.clientWidth > 0) return NO_PADDING_HEADER_SELECTOR; if (cinematicHeader && cinematicHeader.clientWidth > 0) return `${CINEMATIC_HEADER_SELECTOR} .yt-page-header-view-model__page-header-content`; return NO_PADDING_HEADER_SELECTOR; From 8b14dfc1e908bdf6de2b40487905f6c300dc8eca Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Thu, 9 Oct 2025 03:06:36 -0400 Subject: [PATCH 22/70] change selector to only select videos that are in playlist. --- src/features/playlistManagementButtons/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/features/playlistManagementButtons/index.ts b/src/features/playlistManagementButtons/index.ts index 8b61b6f60..8e4faed70 100644 --- a/src/features/playlistManagementButtons/index.ts +++ b/src/features/playlistManagementButtons/index.ts @@ -19,7 +19,8 @@ if (window.trustedTypes && !window.trustedTypes.defaultPolicy) { }); } -const PLAYLIST_ITEM_SELECTOR = "ytd-playlist-panel-video-renderer, ytd-playlist-video-renderer"; +const PLAYLIST_ITEM_SELECTOR = + "ytd-playlist-video-list-renderer ytd-playlist-panel-video-renderer, ytd-playlist-video-list-renderer ytd-playlist-video-renderer"; let playlistObserver: MutationObserver | null = null; From b9ac842c2e42c0af0e44642bb050b945fd361030 Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Thu, 9 Oct 2025 03:11:38 -0400 Subject: [PATCH 23/70] remove redundant code --- src/features/playlistManagementButtons/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/playlistManagementButtons/index.ts b/src/features/playlistManagementButtons/index.ts index 8e4faed70..68e838aa0 100644 --- a/src/features/playlistManagementButtons/index.ts +++ b/src/features/playlistManagementButtons/index.ts @@ -55,7 +55,7 @@ export async function enablePlaylistManagementButtons() { function addButtonToPlaylistItems() { const playlistItems = document.querySelectorAll(PLAYLIST_ITEM_SELECTOR); playlistItems.forEach((item) => { - if (!item.querySelector("#index-container") || item.querySelector(".yte-remove-button") || item.querySelector(".yte-reset-button")) { + if (item.querySelector(".yte-remove-button") || item.querySelector(".yte-reset-button")) { return; } From 14490c9cfd36f9ddf2c5c9cf308eaa6a28914bbf Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Fri, 10 Oct 2025 01:42:06 -0400 Subject: [PATCH 24/70] fix(hide shorts): improper selector was causing gaps in home page at times --- src/features/hideShorts/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/hideShorts/utils.ts b/src/features/hideShorts/utils.ts index 61914b505..6f0ddd25b 100644 --- a/src/features/hideShorts/utils.ts +++ b/src/features/hideShorts/utils.ts @@ -1,7 +1,7 @@ import { modifyElementsClassList } from "@/src/utils/utilities"; export const sideBarOpenedShortsButtonSelector = "ytd-guide-entry-renderer:has(a[title=Shorts])"; export const sideBarClosedShortsButtonSelector = "ytd-mini-guide-entry-renderer:has(a[title=Shorts])"; -export const homePageShortsSectionSelector = "ytd-rich-shelf-renderer[is-shorts]"; +export const homePageShortsSectionSelector = "ytd-rich-section-renderer:has([is-shorts])"; export const channelHomePageShortsSectionSelector = "ytd-reel-shelf-renderer:has(#title-container)"; export const channelPageShortsTabSelector = "yt-tab-shape[tab-title=Shorts]"; export const searchResultsShortsTabSelector = "yt-chip-cloud-chip-renderer:has(yt-formatted-string[title=Shorts])"; From 3af50d112fbc605280e6598b7da6e4ee9714e6d5 Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Sat, 11 Oct 2025 03:44:16 -0400 Subject: [PATCH 25/70] feat: Automatically enable closed captions #989 --- public/locales/ca-ES.json | 8 +++- public/locales/cs-CZ.json | 8 +++- public/locales/de-DE.json | 8 +++- public/locales/en-GB.json | 8 +++- public/locales/en-US.json | 5 +++ public/locales/en-US.json.d.ts | 5 +++ public/locales/es-ES.json | 8 +++- public/locales/fa-IR.json | 8 +++- public/locales/fr-FR.json | 8 +++- public/locales/he-IL.json | 8 +++- public/locales/hi-IN.json | 8 +++- public/locales/it-IT.json | 8 +++- public/locales/ja-JP.json | 8 +++- public/locales/ko-KR.json | 8 +++- public/locales/nl-NL.json | 8 +++- public/locales/pl-PL.json | 42 +++++++++++-------- public/locales/pt-BR.json | 8 +++- public/locales/ru-RU.json | 40 ++++++++++-------- public/locales/sv-SE.json | 8 +++- public/locales/tr-TR.json | 16 ++++--- public/locales/uk-UA.json | 8 +++- public/locales/vi-VN.json | 8 +++- public/locales/zh-CN.json | 8 +++- public/locales/zh-TW.json | 8 +++- src/components/Inputs/CheckBox/CheckBox.tsx | 27 +++++++++--- src/components/Settings/Settings.tsx | 16 +++++++ .../Settings/components/Setting.tsx | 14 ++++++- .../index.ts | 34 +++++++++++++++ src/pages/content/index.ts | 5 +++ src/pages/embedded/index.ts | 13 ++++++ src/types/index.ts | 5 +++ src/utils/constants.ts | 2 + 32 files changed, 309 insertions(+), 67 deletions(-) create mode 100644 src/features/automaticallyEnableClosedCaptions/index.ts diff --git a/public/locales/ca-ES.json b/public/locales/ca-ES.json index 768bdf750..f66ec232f 100644 --- a/public/locales/ca-ES.json +++ b/public/locales/ca-ES.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", @@ -134,7 +135,8 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option.", + "screenshotButtonFileFormat": "Set screenshot save type to 'File' to configure this option" } }, "scrollForMoreSettings": "Scroll for more settings", @@ -287,6 +289,10 @@ "label": "Automatically disable closed captions", "title": "Automatically disables closed captions when you load a video" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" diff --git a/public/locales/cs-CZ.json b/public/locales/cs-CZ.json index f2b932662..e94f801bb 100644 --- a/public/locales/cs-CZ.json +++ b/public/locales/cs-CZ.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", @@ -134,7 +135,8 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option.", + "screenshotButtonFileFormat": "Set screenshot save type to 'File' to configure this option" } }, "scrollForMoreSettings": "Scroll for more settings", @@ -287,6 +289,10 @@ "label": "Automatically disable closed captions", "title": "Automatically disables closed captions when you load a video" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" diff --git a/public/locales/de-DE.json b/public/locales/de-DE.json index 8121e024e..8bf4d04df 100644 --- a/public/locales/de-DE.json +++ b/public/locales/de-DE.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", @@ -134,7 +135,8 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option.", + "screenshotButtonFileFormat": "Set screenshot save type to 'File' to configure this option" } }, "scrollForMoreSettings": "Scroll for more settings", @@ -287,6 +289,10 @@ "label": "Automatically disable closed captions", "title": "Automatically disables closed captions when you load a video" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" diff --git a/public/locales/en-GB.json b/public/locales/en-GB.json index f8b5b88fb..e51549d0b 100644 --- a/public/locales/en-GB.json +++ b/public/locales/en-GB.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", @@ -134,7 +135,8 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option.", + "screenshotButtonFileFormat": "Set screenshot save type to 'File' to configure this option" } }, "scrollForMoreSettings": "Scroll for more settings", @@ -287,6 +289,10 @@ "label": "Automatically disable closed captions", "title": "Automatically disables closed captions when you load a video" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" diff --git a/public/locales/en-US.json b/public/locales/en-US.json index 41158868d..9621fc8db 100644 --- a/public/locales/en-US.json +++ b/public/locales/en-US.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", @@ -288,6 +289,10 @@ "label": "Automatically disable closed captions", "title": "Automatically disables closed captions when you load a video" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" diff --git a/public/locales/en-US.json.d.ts b/public/locales/en-US.json.d.ts index 3138c29bb..d0407f81e 100644 --- a/public/locales/en-US.json.d.ts +++ b/public/locales/en-US.json.d.ts @@ -52,6 +52,7 @@ interface EnUS { options: { notifications: { error: { + optionConflict: "This option cannot be enabled while '{{OPTION}}' is enabled."; scrollWheelHoldModifierKey: { sameKey: { speedControl: "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key."; @@ -194,6 +195,10 @@ interface EnUS { label: "Automatically disable closed captions"; title: "Automatically disables closed captions when you load a video"; }; + automaticallyEnableClosedCaptions: { + label: "Automatically enable closed captions"; + title: "Automatically enables closed captions when you load a video"; + }; automaticTheaterMode: { label: "Automatic theater mode"; title: "Automatically enables theater mode when you load a video"; diff --git a/public/locales/es-ES.json b/public/locales/es-ES.json index 5d5e2850d..dfaefca5e 100644 --- a/public/locales/es-ES.json +++ b/public/locales/es-ES.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", @@ -134,7 +135,8 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option.", + "screenshotButtonFileFormat": "Set screenshot save type to 'File' to configure this option" } }, "scrollForMoreSettings": "Scroll for more settings", @@ -287,6 +289,10 @@ "label": "Automatically disable closed captions", "title": "Automatically disables closed captions when you load a video" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" diff --git a/public/locales/fa-IR.json b/public/locales/fa-IR.json index 9cfc7e007..fdc3ccc96 100644 --- a/public/locales/fa-IR.json +++ b/public/locales/fa-IR.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", @@ -134,7 +135,8 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option.", + "screenshotButtonFileFormat": "Set screenshot save type to 'File' to configure this option" } }, "scrollForMoreSettings": "Scroll for more settings", @@ -287,6 +289,10 @@ "label": "Automatically disable closed captions", "title": "Automatically disables closed captions when you load a video" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" diff --git a/public/locales/fr-FR.json b/public/locales/fr-FR.json index 7ce2961e1..bb0812ae6 100644 --- a/public/locales/fr-FR.json +++ b/public/locales/fr-FR.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "La touche de contrôle de la vitesse de la molette ne peut pas être la même que la touche de contrôle du volume par la molette de défilement.", @@ -134,7 +135,8 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option.", + "screenshotButtonFileFormat": "Set screenshot save type to 'File' to configure this option" } }, "scrollForMoreSettings": "Scroll for more settings", @@ -287,6 +289,10 @@ "label": "Automatically disable closed captions", "title": "Automatically disables closed captions when you load a video" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" diff --git a/public/locales/he-IL.json b/public/locales/he-IL.json index 76c2c0124..ab776088f 100644 --- a/public/locales/he-IL.json +++ b/public/locales/he-IL.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", @@ -134,7 +135,8 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option.", + "screenshotButtonFileFormat": "Set screenshot save type to 'File' to configure this option" } }, "scrollForMoreSettings": "Scroll for more settings", @@ -287,6 +289,10 @@ "label": "Automatically disable closed captions", "title": "Automatically disables closed captions when you load a video" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" diff --git a/public/locales/hi-IN.json b/public/locales/hi-IN.json index 32e56282a..aedcfb6a8 100644 --- a/public/locales/hi-IN.json +++ b/public/locales/hi-IN.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", @@ -134,7 +135,8 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option.", + "screenshotButtonFileFormat": "Set screenshot save type to 'File' to configure this option" } }, "scrollForMoreSettings": "Scroll for more settings", @@ -287,6 +289,10 @@ "label": "Automatically disable closed captions", "title": "Automatically disables closed captions when you load a video" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" diff --git a/public/locales/it-IT.json b/public/locales/it-IT.json index b131059f8..0c451ea96 100644 --- a/public/locales/it-IT.json +++ b/public/locales/it-IT.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "Il tasto per modificare la velocità della rotellina del mouse non può essere lo stesso che modifica il volume con la rotellina del mouse.", @@ -134,7 +135,8 @@ }, "singular": "Abilita '{{OPTION}}' per configurare questa opzione", "specificOption": { - "featureMenu": "Configura almeno un pulsante da posizionare nel menu' delle funzioni per configurare questa opzione." + "featureMenu": "Configura almeno un pulsante da posizionare nel menu' delle funzioni per configurare questa opzione.", + "screenshotButtonFileFormat": "Imposta il tipo di salvataggio della schermata come 'File' per configurare questa opzione" } }, "scrollForMoreSettings": "Scorri per altre impostazioni", @@ -287,6 +289,10 @@ "label": "Disabilita automaticamente le didascalie chiuse", "title": "Disabilita automaticamente le didascalie chiuse quando si carica un video" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "Pulsante \"Copia URL video con temporizzazione\"", "title": "Copia l'URL del video con la temporizzazione (?t=123)" diff --git a/public/locales/ja-JP.json b/public/locales/ja-JP.json index 8081e16bc..f72a5a7be 100644 --- a/public/locales/ja-JP.json +++ b/public/locales/ja-JP.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "スクロールホイール再生速度制御キーバインドは、スクロールホイール音量制御キーバインドと同じにすることはできません。", @@ -134,7 +135,8 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option.", + "screenshotButtonFileFormat": "Set screenshot save type to 'File' to configure this option" } }, "scrollForMoreSettings": "Scroll for more settings", @@ -287,6 +289,10 @@ "label": "クローズドキャプションを自動にディセーブルする", "title": "動画の読み込み時にクローズドキャプションを自動にディセーブルする" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "タイムスタンプ付きの動画URLをコピーのボタン", "title": "タイムスタンプ付きの動画URLをコピーする (?t=123)" diff --git a/public/locales/ko-KR.json b/public/locales/ko-KR.json index 033ad02be..5c4d2ae32 100644 --- a/public/locales/ko-KR.json +++ b/public/locales/ko-KR.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "중복되는 키가 설정되어 있습니다.", @@ -134,7 +135,8 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option.", + "screenshotButtonFileFormat": "Set screenshot save type to 'File' to configure this option" } }, "scrollForMoreSettings": "Scroll for more settings", @@ -287,6 +289,10 @@ "label": "Automatically disable closed captions", "title": "Automatically disables closed captions when you load a video" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "현재 시간 주소 복사 버튼", "title": "현재 시간 주소 복사 (?t=123)" diff --git a/public/locales/nl-NL.json b/public/locales/nl-NL.json index 8c7ba396e..7cdb3fdd7 100644 --- a/public/locales/nl-NL.json +++ b/public/locales/nl-NL.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "De snelheid van de scrollwiel snelheid controleknop kan niet dezelfde zijn als de scrollwiel volume controleknop.", @@ -134,7 +135,8 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option.", + "screenshotButtonFileFormat": "Set screenshot save type to 'File' to configure this option" } }, "scrollForMoreSettings": "Scroll for more settings", @@ -287,6 +289,10 @@ "label": "Automatisch ondertiteling uitschakelen", "title": "Automatisch ondertiteling uitzetten wanneer je een video inlaadt" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "Kopieer video URL met tijdstempel knop", "title": "Kopieer video URL met tijdstempel (?t=123)" diff --git a/public/locales/pl-PL.json b/public/locales/pl-PL.json index 1e898505e..982affdc3 100644 --- a/public/locales/pl-PL.json +++ b/public/locales/pl-PL.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "Ustawiony klawisz zmiany prędkości przewijania nie może być taki sam, jak klawisz zmiany głośności przewijania kółka.", @@ -134,7 +135,8 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option.", + "screenshotButtonFileFormat": "Set screenshot save type to 'File' to configure this option" } }, "scrollForMoreSettings": "Scroll for more settings", @@ -221,10 +223,10 @@ "noProblems": "No problems found." }, "enable": { - "label": "Custom CSS", + "label": "Własny CSS", "title": "Enables custom CSS to be applied to the page" }, - "title": "Custom CSS Settings" + "title": "Własne ustawienia CSS" }, "featureMenu": { "openType": { @@ -268,10 +270,10 @@ }, "language": { "select": { - "label": "Language", + "label": "Język", "title": "The language to use for the extension" }, - "title": "Language" + "title": "Język" }, "miscellaneous": { "features": { @@ -287,6 +289,10 @@ "label": "Automatically disable closed captions", "title": "Automatically disables closed captions when you load a video" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" @@ -392,16 +398,16 @@ }, "onScreenDisplaySettings": { "color": { - "label": "Color", + "label": "Kolor", "options": { - "blue": "Blue", - "green": "Green", - "orange": "Orange", - "pink": "Pink", - "purple": "Purple", - "red": "Red", - "white": "White", - "yellow": "Yellow" + "blue": "Niebieski", + "green": "Zielony", + "orange": "Pomarańczowy", + "pink": "Różowy", + "purple": "Fioletowy", + "red": "Czerwony", + "white": "Biały", + "yellow": "Żółty" }, "title": "Select the color for the On-Screen Display" }, @@ -589,14 +595,14 @@ "youtubeDataApiV3Key": { "getApiKeyLinkText": "You can get one from here", "input": { - "label": "API Key", + "label": "Klucz API", "title": "Enter your Youtube Data API V3 key." }, - "title": "YouTube API V3 Key" + "title": "Klucz YouTube API V3" }, "youtubeDeepDark": { - "author": "Author", - "co-authors": "Co-authors", + "author": "Autor", + "co-authors": "Współautorzy", "colors": { "colorShadow": { "label": "Shadow color", diff --git a/public/locales/pt-BR.json b/public/locales/pt-BR.json index d8109f246..17cbb816b 100644 --- a/public/locales/pt-BR.json +++ b/public/locales/pt-BR.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "A tecla alternadora da velocidade de rolagem não pode ser a mesma que a tecla alternadora do volume.", @@ -134,7 +135,8 @@ }, "singular": "Ative o '{{OPTION}}' para configurar esta opção", "specificOption": { - "featureMenu": "Altere pelo menos um botão no menu de recursos para configurar esta opção." + "featureMenu": "Altere pelo menos um botão no menu de recursos para configurar esta opção.", + "screenshotButtonFileFormat": "Set screenshot save type to 'File' to configure this option" } }, "scrollForMoreSettings": "Role para mais opções", @@ -287,6 +289,10 @@ "label": "Desativar legendas automaticamente", "title": "Desativa as legendas ao carregar um vídeo" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "Copiar URL do vídeo com o botão de minutagem", "title": "Copia o URL do vídeo com a minutagem (?t=123)" diff --git a/public/locales/ru-RU.json b/public/locales/ru-RU.json index 144fc47fb..7ad5ef798 100644 --- a/public/locales/ru-RU.json +++ b/public/locales/ru-RU.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "Клавиша-модификатор для управления скоростью воспроизведения с помощью колеса мыши не может совпадать с клавишей-модификатором для управления громкостью.", @@ -125,19 +126,20 @@ }, "optionDisabled": { "either": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " or " + "label": "Включите {{OPTIONS}} для настройки этого параметра", + "separator": " или " }, "plural": { - "label": "Enable {{OPTIONS}} to configure this option", - "separator": " and " + "label": "Включите {{OPTIONS}} для настройки этого параметра", + "separator": " и " }, - "singular": "Enable '{{OPTION}}' to configure this option", + "singular": "Включите '{{OPTION}}' для настройки этого параметра", "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + "featureMenu": "Включите по крайней мере одну кнопку, которая будет размещена в меню функций для настройки этой опции.", + "screenshotButtonFileFormat": "Установите тип сохранения скриншота «Файл» для настройки этого параметра" } }, - "scrollForMoreSettings": "Scroll for more settings", + "scrollForMoreSettings": "Прокрутите для других настроек", "sections": { "automaticQuality": { "enable": { @@ -287,17 +289,21 @@ "label": "Автоматически отключать субтитры", "title": "Автоматически отключает субтитры при загрузке видео" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "Кнопка «Копировать URL видео с таймкодом»", "title": "Копирует ссылку видео с меткой времени (?t=123)" }, "defaultToOriginalAudioTrack": { - "label": "Default to original audio track", - "title": "Always default to the original audio track" + "label": "Выставлять оригинальную звуковую дорожку по умолчанию", + "title": "Всегда выставлять оригинальную аудио дорожку видео по умолчанию" }, "hideArtificialIntelligenceSummary": { - "label": "Hide AI summary", - "title": "Hides the artificial intelligence summary below videos" + "label": "Прятать краткое содержание от ИИ", + "title": "Прячет краткое содержание видео от ИИ под описанием" }, "hideEndScreenCards": { "label": "Скрыть заставки следующих видео", @@ -320,8 +326,8 @@ "title": "Скрывает баннер, отображающийся при просмотре видео, которое имеет платную рекламу" }, "hidePlayables": { - "label": "Hide playables", - "title": "Hides all playables" + "label": "Спрятать игры", + "title": "Прячет все игры (playables)" }, "hideScrollbar": { "label": "Включить скрытие полосы прокрутки страницы", @@ -356,8 +362,8 @@ "title": "Ставит на паузу видео в фоновых вкладках при запуске видео в активной (текущей) вкладке" }, "playlistRemover": { - "label": "Hide playlists from homepage", - "title": "Get rid of playlists from homepage" + "label": "Спрятать плейлисты на главной", + "title": "Прячет плейлисты на главной (домашней) странице" }, "remainingTime": { "label": "Включить отображение оставшегося времени", @@ -372,8 +378,8 @@ "title": "Заменяет /redirect ссылки на актуальные, убирая предупреждение о переходе на другой ресурс" }, "restoreFullscreenScrolling": { - "label": "Restore fullscreen scrolling", - "title": "Restores scrolling in fullscreen mode" + "label": "Включить прокрутку в полноэкранном режиме", + "title": "Восстанавливает возможность прокрутки в полноэкранном режиме" }, "shareShortener": { "label": "Укоротить ссылку с кнопки \"Поделиться\"", diff --git a/public/locales/sv-SE.json b/public/locales/sv-SE.json index 2b7184eb9..8c59ebca5 100644 --- a/public/locales/sv-SE.json +++ b/public/locales/sv-SE.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "Rullningshjulets modifieringstangent för hastighetsreglering kan inte vara densamma modifieringstangent som rullningshjulets volymreglering.", @@ -134,7 +135,8 @@ }, "singular": "Aktivera {{OPTION}} för att konfigurera detta alternativ", "specificOption": { - "featureMenu": "Konfigurera minst en knapp som ska placeras i funktionsmenyn för att konfigurera det här alternativet." + "featureMenu": "Konfigurera minst en knapp som ska placeras i funktionsmenyn för att konfigurera det här alternativet.", + "screenshotButtonFileFormat": "Set screenshot save type to 'File' to configure this option" } }, "scrollForMoreSettings": "Rulla för fler inställningar", @@ -287,6 +289,10 @@ "label": "Inaktivera textning automatiskt", "title": "Inaktiverar textning automatiskt när du laddar en video" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "Kopiera videons webbadress med tidsstämpelknappen", "title": "Kopiera videons webbadress med tidsstämpel (?t=123)" diff --git a/public/locales/tr-TR.json b/public/locales/tr-TR.json index a82349296..9933c46d5 100644 --- a/public/locales/tr-TR.json +++ b/public/locales/tr-TR.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "Kaydırma tekerleği hız kontrolü için kullanılan değiştirici tuş, kaydırma tekerleği ses kontrolü için kullanılan değiştirici tuşla aynı olamaz.", @@ -134,7 +135,8 @@ }, "singular": "Bu seçeneği yapılandırmak için '{{OPTION}}' öğesini etkinleştirin", "specificOption": { - "featureMenu": "Bu seçeneği yapılandırmak için özellik menüsüne yerleştirilecek en az bir düğmeyi yapılandırın." + "featureMenu": "Bu seçeneği yapılandırmak için özellik menüsüne yerleştirilecek en az bir düğmeyi yapılandırın.", + "screenshotButtonFileFormat": "Bu seçeneği yapılandırmak için ekran görüntüsü kaydetme türünü 'File' olarak ayarlayın" } }, "scrollForMoreSettings": "Daha fazla ayar için kaydırın", @@ -287,6 +289,10 @@ "label": "Kapalı altyazıları otomatik olarak devre dışı bırak", "title": "Bir video yüklendiğinde kapalı altyazıları otomatik olarak devre dışı bırakır" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "Video URL'sini zaman damgası düğmesiyle kopyala", "title": "Video URL'sini zaman damgasıyla kopyalar (?t=123)" @@ -356,8 +362,8 @@ "title": "Ön plan sekmesinde yeni bir oynatıcı başlattığınızda arka plan sekmelerindeki video oynatıcıları duraklatır" }, "playlistRemover": { - "label": "Hide playlists from homepage", - "title": "Get rid of playlists from homepage" + "label": "Ana sayfadaki oynatma listelerini gizle", + "title": "Ana sayfadaki oynatma listelerinden kurtulun" }, "remainingTime": { "label": "Kalan süre", @@ -372,8 +378,8 @@ "title": "Yönlendirme uyarı diyaloğunu atlayarak YouTube yönlendirmesini gerçek URL'lerle değiştirir" }, "restoreFullscreenScrolling": { - "label": "Restore fullscreen scrolling", - "title": "Restores scrolling in fullscreen mode" + "label": "Tam ekran kaydırmayı geri yükle", + "title": "Tam ekran modunda kaydırmayı geri yükler" }, "shareShortener": { "label": "YouTube video paylaşım bağlantısını kısalt", diff --git a/public/locales/uk-UA.json b/public/locales/uk-UA.json index b40aedf8b..788740b1d 100644 --- a/public/locales/uk-UA.json +++ b/public/locales/uk-UA.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "Клавіша для керування швидкістю прокрутки компʼютерною мишею не може бути тією ж, що й клавіша для регулювання гучності.", @@ -134,7 +135,8 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option.", + "screenshotButtonFileFormat": "Set screenshot save type to 'File' to configure this option" } }, "scrollForMoreSettings": "Scroll for more settings", @@ -287,6 +289,10 @@ "label": "Automatically disable closed captions", "title": "Automatically disables closed captions when you load a video" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" diff --git a/public/locales/vi-VN.json b/public/locales/vi-VN.json index 31fdd9191..9621fc8db 100644 --- a/public/locales/vi-VN.json +++ b/public/locales/vi-VN.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "The scroll wheel speed control modifier key cannot be the same as the scroll wheel volume control modifier key.", @@ -134,7 +135,8 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option.", + "screenshotButtonFileFormat": "Set screenshot save type to 'File' to configure this option" } }, "scrollForMoreSettings": "Scroll for more settings", @@ -287,6 +289,10 @@ "label": "Automatically disable closed captions", "title": "Automatically disables closed captions when you load a video" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" diff --git a/public/locales/zh-CN.json b/public/locales/zh-CN.json index 7640cf1cd..5618d4cac 100644 --- a/public/locales/zh-CN.json +++ b/public/locales/zh-CN.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "滚轮控制播放速度键位与控制音量冲突。", @@ -134,7 +135,8 @@ }, "singular": "启用 '{{OPTION}}' 以配置此选项", "specificOption": { - "featureMenu": "配置至少一个按钮放置在功能菜单中以配置此选项。" + "featureMenu": "配置至少一个按钮放置在功能菜单中以配置此选项。", + "screenshotButtonFileFormat": "将屏幕截图保存类型设置为“文件”以配置此选项" } }, "scrollForMoreSettings": "滚动以查看更多设置", @@ -287,6 +289,10 @@ "label": "自动禁用隐藏式字幕", "title": "载入视频时自动禁用隐藏式字幕" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "复制带有时间戳的视频 URL 按钮", "title": "复制带有时间戳的视频 URL (?t=123)" diff --git a/public/locales/zh-TW.json b/public/locales/zh-TW.json index 1351d70ee..e102e0141 100644 --- a/public/locales/zh-TW.json +++ b/public/locales/zh-TW.json @@ -102,6 +102,7 @@ "options": { "notifications": { "error": { + "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "滾輪播放速度輔助按鍵不能跟音量增強輔助按鍵相同。", @@ -134,7 +135,8 @@ }, "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { - "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option." + "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option.", + "screenshotButtonFileFormat": "Set screenshot save type to 'File' to configure this option" } }, "scrollForMoreSettings": "Scroll for more settings", @@ -287,6 +289,10 @@ "label": "自動停用字幕", "title": "載入影片時自動停用字幕" }, + "automaticallyEnableClosedCaptions": { + "label": "Automatically enable closed captions", + "title": "Automatically enables closed captions when you load a video" + }, "copyTimestampUrlButton": { "label": "複製目前播放時間的影片網址按鈕", "title": "複製目前播放時間的影片網址 (?t=123)" diff --git a/src/components/Inputs/CheckBox/CheckBox.tsx b/src/components/Inputs/CheckBox/CheckBox.tsx index 7cbb5f13b..38e2a090e 100644 --- a/src/components/Inputs/CheckBox/CheckBox.tsx +++ b/src/components/Inputs/CheckBox/CheckBox.tsx @@ -7,26 +7,41 @@ import { useSettings } from "../../Settings/Settings"; export type CheckboxProps = { checked: boolean; className?: string; + disabled?: boolean; + disabledReason?: string; label: string; onChange: (event: ChangeEvent) => void; title: string; }; -const Checkbox: React.FC = ({ checked, className, label, onChange, title }) => { +const Checkbox: React.FC = ({ checked, className, disabled = false, disabledReason, label, onChange, title }) => { const { direction } = useSettings(); const id = useId(); return ( -
+
- +
+ + {disabled && disabledReason && ( + + {disabledReason} + + )} +
); }; diff --git a/src/components/Settings/Settings.tsx b/src/components/Settings/Settings.tsx index cfcd18524..f7d8234cb 100644 --- a/src/components/Settings/Settings.tsx +++ b/src/components/Settings/Settings.tsx @@ -740,12 +740,28 @@ export default function Settings() { /> + (settingProps: SettingInputProp const { type } = settingProps; switch (type) { case "checkbox": { - const { checked, className, label, onChange, title } = settingProps; - return ; + const { checked, className, disabled, disabledReason, label, onChange, title } = settingProps; + return ( + + ); } case "color-picker": { const { className, disabled, label, onChange, title, value } = settingProps; diff --git a/src/features/automaticallyEnableClosedCaptions/index.ts b/src/features/automaticallyEnableClosedCaptions/index.ts new file mode 100644 index 000000000..4288343da --- /dev/null +++ b/src/features/automaticallyEnableClosedCaptions/index.ts @@ -0,0 +1,34 @@ +import type { YouTubePlayerDiv } from "@/src/types"; + +import { isLivePage, isWatchPage, waitForElement, waitForSpecificMessage } from "@/src/utils/utilities"; +let captionsWhereEnabled = false; +export async function disableAutomaticallyEnableClosedCaptions() { + if (!(isWatchPage() || isLivePage())) return; + // Get the player element + const playerContainer = await waitForElement("div#movie_player"); + // If player element is not available, return + if (!playerContainer) return; + // If captions were enabled, return + if (captionsWhereEnabled) return; + // Disable captions + playerContainer.unloadModule("captions"); +} +export async function enableAutomaticallyEnableClosedCaptions() { + if (!(isWatchPage() || isLivePage())) return; + const { + data: { + options: { enable_automatically_enable_closed_captions } + } + } = await waitForSpecificMessage("options", "request_data", "content"); + if (!enable_automatically_enable_closed_captions) return; + // Get the player element + const playerContainer = await waitForElement("div#movie_player"); + const subtitlesButton = document.querySelector("button.ytp-subtitles-button"); + // If player element or subtitles button is not available, return + if (!playerContainer || !subtitlesButton) return; + captionsWhereEnabled = subtitlesButton.getAttribute("aria-pressed") === "true"; + // If captions were already enabled, return + if (captionsWhereEnabled) return; + // Enable captions + subtitlesButton.click(); +} diff --git a/src/pages/content/index.ts b/src/pages/content/index.ts index 858e56278..5aa6cd135 100644 --- a/src/pages/content/index.ts +++ b/src/pages/content/index.ts @@ -280,6 +280,11 @@ const storageChangeHandler = async (changes: StorageChanges, areaName: string) = automaticallyDisableClosedCaptionsEnabled: newValue }); }, + enable_automatically_enable_closed_captions: (__oldValue, newValue) => { + sendExtensionOnlyMessage("automaticallyEnableClosedCaptionsChange", { + automaticallyEnableClosedCaptionsEnabled: newValue + }); + }, enable_copy_timestamp_url_button: (__oldValue, newValue) => { sendExtensionOnlyMessage("copyTimestampUrlButtonChange", { copyTimestampUrlButtonEnabled: newValue diff --git a/src/pages/embedded/index.ts b/src/pages/embedded/index.ts index 8c9bc8b12..f78124556 100644 --- a/src/pages/embedded/index.ts +++ b/src/pages/embedded/index.ts @@ -5,6 +5,7 @@ import { disableAutomaticallyDisableClosedCaptions, enableAutomaticallyDisableClosedCaptions } from "@/src/features/automaticallyDisableClosedCaptions"; +import { disableAutomaticallyEnableClosedCaptions, enableAutomaticallyEnableClosedCaptions } from "@/src/features/automaticallyEnableClosedCaptions"; import { enableAutomaticTheaterMode } from "@/src/features/automaticTheaterMode"; import { featuresInControls } from "@/src/features/buttonPlacement"; import { getFeatureButton, updateButtonsIconColor, updateFeatureButtonIcon, updateFeatureButtonTitle } from "@/src/features/buttonPlacement/utils"; @@ -261,6 +262,7 @@ const enableFeatures = async () => { enableHideEndScreenCards(), enablePlaylistLength(), enableAutomaticallyDisableClosedCaptions(), + enableAutomaticallyEnableClosedCaptions(), enableAutomaticallyDisableAmbientMode(), enableDefaultToOriginalAudioTrack(), enableRestoreFullscreenScrolling() @@ -348,6 +350,17 @@ const initialize = function () { } break; } + case "automaticallyEnableClosedCaptionsChange": { + const { + data: { automaticallyEnableClosedCaptionsEnabled } + } = message; + if (automaticallyEnableClosedCaptionsEnabled) { + await enableAutomaticallyEnableClosedCaptions(); + } else { + await disableAutomaticallyEnableClosedCaptions(); + } + break; + } case "automaticTheaterModeChange": { // Get the player element const playerContainer = diff --git a/src/types/index.ts b/src/types/index.ts index 3b824412e..0c2f80372 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -238,6 +238,7 @@ export type configuration = { enable_automatic_theater_mode: boolean; enable_automatically_disable_ambient_mode: boolean; enable_automatically_disable_closed_captions: boolean; + enable_automatically_enable_closed_captions: boolean; enable_automatically_set_quality: boolean; enable_copy_timestamp_url_button: boolean; enable_custom_css: boolean; @@ -371,6 +372,10 @@ export type ExtensionSendOnlyMessageMappings = { "automaticallyDisableClosedCaptionsChange", { automaticallyDisableClosedCaptionsEnabled: boolean } >; + automaticallyEnableClosedCaptionsChange: DataResponseMessage< + "automaticallyEnableClosedCaptionsChange", + { automaticallyEnableClosedCaptionsEnabled: boolean } + >; automaticTheaterModeChange: DataResponseMessage<"automaticTheaterModeChange", { automaticTheaterModeEnabled: boolean }>; buttonPlacementChange: DataResponseMessage<"buttonPlacementChange", ButtonPlacementChange>; copyTimestampUrlButtonChange: DataResponseMessage<"copyTimestampUrlButtonChange", { copyTimestampUrlButtonEnabled: boolean }>; diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 286e37b97..0397162b6 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -54,6 +54,7 @@ export const defaultConfiguration = { enable_automatic_theater_mode: false, enable_automatically_disable_ambient_mode: false, enable_automatically_disable_closed_captions: false, + enable_automatically_enable_closed_captions: false, enable_automatically_set_quality: false, enable_copy_timestamp_url_button: false, enable_custom_css: false, @@ -156,6 +157,7 @@ export const configurationImportSchema: TypeToPartialZodSchema< enable_automatic_theater_mode: z.boolean().optional(), enable_automatically_disable_ambient_mode: z.boolean().optional(), enable_automatically_disable_closed_captions: z.boolean().optional(), + enable_automatically_enable_closed_captions: z.boolean().optional(), enable_automatically_set_quality: z.boolean().optional(), enable_copy_timestamp_url_button: z.boolean().optional(), enable_custom_css: z.boolean().optional(), From f4b2c7d98100a485f8a707bc1ac452f247a39db6 Mon Sep 17 00:00:00 2001 From: Dave Nicolson Date: Sat, 11 Oct 2025 15:58:00 +0200 Subject: [PATCH 26/70] Exclude liked videos playlist --- src/features/playlistManagementButtons/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/playlistManagementButtons/index.ts b/src/features/playlistManagementButtons/index.ts index 68e838aa0..db95e0b80 100644 --- a/src/features/playlistManagementButtons/index.ts +++ b/src/features/playlistManagementButtons/index.ts @@ -43,7 +43,7 @@ export async function enablePlaylistManagementButtons() { } } = await waitForSpecificMessage("options", "request_data", "content"); - if (!enable_playlist_management_buttons || !isPlaylistPage()) { + if (!enable_playlist_management_buttons || !isPlaylistPage() || getPlaylistId() === "LL") { return; } From c1bef7b4d1ba78d198eba48dbdd8658a3b997e37 Mon Sep 17 00:00:00 2001 From: Dave Nicolson Date: Sat, 11 Oct 2025 15:58:12 +0200 Subject: [PATCH 27/70] Add error tooltips --- src/features/playlistManagementButtons/index.ts | 16 +++++++++++++++- src/utils/EventManager.ts | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/features/playlistManagementButtons/index.ts b/src/features/playlistManagementButtons/index.ts index db95e0b80..be3ca647e 100644 --- a/src/features/playlistManagementButtons/index.ts +++ b/src/features/playlistManagementButtons/index.ts @@ -5,7 +5,7 @@ import { FaTrash } from "react-icons/fa6"; import { Innertube } from "youtubei.js/web"; import "./index.css"; -import { isPlaylistPage, waitForSpecificMessage } from "@/src/utils/utilities"; +import { createTooltip, isPlaylistPage, waitForSpecificMessage } from "@/src/utils/utilities"; import { getPlaylistId } from "../playlistLength/utils"; @@ -75,6 +75,13 @@ export async function enablePlaylistManagementButtons() { item.remove(); } catch (err) { console.error("Failed to remove video:", err); + const { listener } = createTooltip({ + element: removeButton, + featureName: "playlistManagementButtons", + id: "yte-feature-playlistManagementButtons-tooltip", + text: `Failed to remove video: ${err instanceof Error ? err.message : String(err)}` + }); + listener(); } }; @@ -89,6 +96,13 @@ export async function enablePlaylistManagementButtons() { item.querySelector("#overlays ytd-thumbnail-overlay-resume-playback-renderer")?.remove(); } catch (err) { console.error("Failed to reset video:", err); + const { listener } = createTooltip({ + element: resetButton, + featureName: "playlistManagementButtons", + id: "yte-feature-playlistManagementButtons-tooltip", + text: `Failed to reset video: ${err instanceof Error ? err.message : String(err)}` + }); + listener(); } }; diff --git a/src/utils/EventManager.ts b/src/utils/EventManager.ts index 30c331fde..a77832aea 100644 --- a/src/utils/EventManager.ts +++ b/src/utils/EventManager.ts @@ -41,6 +41,7 @@ export type FeatureName = | "playerQuality" | "playerSpeed" | "playlistLength" + | "playlistManagementButtons" | "remainingTime" | "rememberVolume" | "removeRedirect" From 72ef1c378fdb4ccaca071d140ff9ce83be83e484 Mon Sep 17 00:00:00 2001 From: Dave Nicolson Date: Sat, 11 Oct 2025 18:24:46 +0200 Subject: [PATCH 28/70] Fetch additional watch history pages --- .../playlistManagementButtons/index.ts | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/features/playlistManagementButtons/index.ts b/src/features/playlistManagementButtons/index.ts index be3ca647e..c67303a25 100644 --- a/src/features/playlistManagementButtons/index.ts +++ b/src/features/playlistManagementButtons/index.ts @@ -91,9 +91,26 @@ export async function enablePlaylistManagementButtons() { resetButton.title = "Mark as unwatched"; resetButton.onclick = async () => { try { - const history = await youtube.getHistory(); - await history.removeVideo(setVideoId); - item.querySelector("#overlays ytd-thumbnail-overlay-resume-playback-renderer")?.remove(); + let pagesToLoad = 5; + let history = await youtube.getHistory(); + + while (pagesToLoad > 0) { + try { + await history.removeVideo(setVideoId); + item.querySelector("#overlays ytd-thumbnail-overlay-resume-playback-renderer")?.remove(); + break; + } catch (err) { + if (err instanceof Error && /Failed to get feedback token/.test(err.message)) { + if (--pagesToLoad > 0) { + history = await history.getContinuation(); + } else { + throw new Error(`Failed to find video in history after checking 5 pages`); + } + } else { + throw err; + } + } + } } catch (err) { console.error("Failed to reset video:", err); const { listener } = createTooltip({ From 877a0daec2deda6daec2f1b5e14a705bf41166fd Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Sat, 11 Oct 2025 17:17:52 -0400 Subject: [PATCH 29/70] update translation context screenshots --- .../Automatically_Enable_Closed_Captions.png | Bin 0 -> 3436 bytes .../Option Disabled/Deep_Dark_Custom_Theme.png | Bin 1182 -> 0 bytes ...ave_Type_To_FILE_To_Configure_This_Option.png | Bin 0 -> 1515 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/translation context screenshots/Miscellaneous Settings/Automatically_Enable_Closed_Captions.png delete mode 100644 assets/translation context screenshots/Option Disabled/Deep_Dark_Custom_Theme.png create mode 100644 assets/translation context screenshots/Option Disabled/Set_Screenshot_Save_Type_To_FILE_To_Configure_This_Option.png diff --git a/assets/translation context screenshots/Miscellaneous Settings/Automatically_Enable_Closed_Captions.png b/assets/translation context screenshots/Miscellaneous Settings/Automatically_Enable_Closed_Captions.png new file mode 100644 index 0000000000000000000000000000000000000000..6ef4bc5f7eb416669fe83014cdf174fc8eefc26f GIT binary patch literal 3436 zcmYjUdpr|*8&}F*Qlt`6ZmCc^E^|GbT*`4j9Z54oxr}C(%VJw<Qf!8&Yq4>jKj;Mr*DxP^lE*va24tP$$ZF@{d7*22HM*WDotLj_* z2Bf(6${^_oCpSVcCBJgcS9;7Md9X^*`LZ(&Al0z39mcvNLetgJ(l-ycwZmeK)hb#hY30YcG zifA-EHYCt}e4TddK^jHUa51^+=?j_dKfVZ!1FO}T9bC(ydz-6$WDI+512~cWSdO(F zyW4kEZmG-)q0e)rd6-}AYA>#P)^-O5>tN?<{T!YFq!cFy{24#XFm=D=N;4FS#q*#LY8b0z|CP06UPI&+?!6p)mTA(RZNe!Rr~x5v6NN5>GjU_+iC5;YRZRx zzCPvtSX%donWixsdjQoXSVafrn-$+y;qhdm<1+bD52fvS&|o>(a>78Ko5g*Z8@UXl zZsbO{@ORZJNR$Gl6yKiQIh3kA897+z&OQ>e!;SM9X`c_9D`(>;dn$WC^vwRpJE0etl@cVsb&`JlsW;LLos(_o+lry8{LEe{&zjWpC`JH|MsLoP=QO)M} zuDp`1ir`VRwb*3J#tlpv$(neL;m&w|pp?epvyXH)AztK;{X7oq_`d5)egJ!CY><)N zYkFt5xA3O$=2xZ`wt!tlxzmM(VqftO&5q&=*(M3MmL>Xj4 zoL?-hdpWZ(@xi|^hd;;EztZdNEi+4h&Y#Mr*+<$EFODkT z9Xk8396|et{#0Jc=#_P-?;p=11uQ-3Kdmu;=W8AA*v7dR%3x&=-vz(a1 z%wWCcB_7?hqn?*fspL5munu|jrKbm*Ry|_;mWC3JO0>$OXDxL}mb-IX#o6)H zGf4T4lbv?$qPQC6^p)Rcr=N^($BbD#@$&#E-?p3Ua37gepo}Fry7p~Ff8I%h+;O4B zB6i+j?tl~_*0E)Ym$B9R&mPo;UJi6_%u*uCd)} zO795vQ;ZkvD*DOIkC7=+-mIPo=7gJxE_W)0ieYizmW}?}T4SCySSY$gpB#~_Yn)1A zYF?wcZ4}BKmi_$jhO_to+2pGO2-~5%3fLt2$P>XXhk-o?c3^>wXvfvKoYk6MkELOKMYk=8IxeA+BQ z7S^#HxHBdgSAZf7?~)MgzpcvskfJO{`5*L;b!jp8e(`gniL3fjXdoDFQmNqGqQfER z@{?dq(K^lbO^$Fx=-T^9P9Z|2y{#GWNX6}BRNzwU_&CvIKILMneGexA?%f}+Qujze zGpGydaB~q3HH_P6otT(1gJpRQrqmpJo{{MIX*luFP8p#lrM`#rjg~*SwAp7M7Hd{3 z;90@kZ1<}byIs2w%U>uWSeVIiO2M$gJAHVFXZN38w4}>FlU5?>-p~)dr(>TM<`?U! z7aOl6RQo)`|I)~mg^J57E}$vZ+TdB4yi(IBy3$l!bHDXD(-%nsk!dgK2kp;a*3Y@Z z|H?~;51@xsOzqIsKKd&b=y_HtEr196l2ry3wKCnGHE`JzWr@?_;=o{N|iB{f< zU*`*{^oaaWjIJQ|FAf`drZFtv#fP;sWB4D94CKFhP_Ho+S~W!UEyh&Z9O!uN3q{xX z{AkYh@@#-V?s!LnKKd@&)5n=1w-(3NG-zknco`V)5+8#69V#EMrmbG=bws#-Bxdwr;#CquSsrU~ju`SW`s=iuH6&LOu=`@{ z*n3BlJ7mAjic1F+!;{PNkn=uvgk@A5G2z!8QOfNq2sH_{4f9=89Rb=+FP|$s-9Sj) zuwmWasYICo@nLNMZ`>(Y#|bv)FXW0L$%(ooQ0QOi5Tno^x24m_11H%TH zqC(54l3QU+4%~}z_hhYw_A$MVNng8xtpTUAh66GY;p&oM2!wOHn2_5g(sS= zf8i=|&yD#zhK|Zx7UlLm?Wo^Uq|XaGF?=yP*`IPksYyOm%{pB&k$v5Cu=(}{?qPl> z9|_6#qwaf@9ao2zEgU2iL`Sz^vjuusNv>SH#g!R;*a-yFoA3DbU^mT?aB1MnOMOC< z1x$ClaYH2H{EQgsVU=^RpN5bAAX$u85jg|&+)q3^5S<1m_Faja>$GNxTKBK`gEGQ^ z1mf|R(#@vdptir)zmBH(1mvp$G=S#m3@zRx-HFtoa#yK?D3U2P&vC<2wRHQ8*iXgQ z^}35%IzBR#Gk8=4`4)e`ANSo|ofOvI0Kqs>R)YeeO-+#w2;9!6kpjo>#**kv?8y=D z+(mV6RUr7wGtcrl5Ux0zw7n6uY6^*J6P(7T!=+RWvyXPtdh4_8!W5)ju{WnbqDJut z;a<+T(4Y)yl;My9?~^Npo|GRf@gj-aGTC9OE`PP@$f4SRvI9%$iDG{^>h%W}6PDFj zhPt(AEoNpfR4Hv144c*;h7N9B^yd{3+}2(nB>4dTQQ;!OQSgTX(BCR<_NZ&mc%n#u wi0>^MX|oTwEtmGnhigy%pK8}M%?e~j)0NpfQw|M#8X1^@s6BFWoJ00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1T#rQK~#8N?U^xl zA~6hx_Z}(sRy4T^TX2ghasZlKfhJWNt~9aiu`S7##!Th~$o|Fm9>$hN`Xwts{(OF3 zX8-`Oh(qG#PF z_RehPG@p0(`EwkmkNJG$@4e2`h5euTd}4d|CTM+mn-AT+2O;-bi1T02_A&Hxdi3x% zU+&Pq$Mbc*Ot0O&J)v5x4+$+oSWn_o^q`CKF;9oyUP`cDtj8DDB?7teRBADkW)!@TyR?!khiYl@rs$bNZ$EPi>8-kocF-Z*H;X7Gp08iZAhbS4YK zU$;oRC4n3~3Btu;N%5v3ALaLvMfkiIhefx6?6}0a=#QVH80~x_qFGvG9DHrWr2NHv zl@@s&UzhkCJsq~@Pj<~kbM3wOq!vxROa64Ou0`x>9qp8k_3U6jcrmj&@p!we=o({X ze`si3{HeQ8<4aob=W;vg)2^e%4MQT6#Nxq`J*V#3!PEo^@>zx9>(u<}8QsQEK8m1T zj1u85*z01iHb9eyM8+%E^t$;$SPTiuL;IFG)!3Bw!jH|i{EeJldu_wlGWKfI=_ht+ z*0imA8~eeFnd?h28U7+Gy6QX{-`yb*V$txNNp6}!GbGRLZi zr>)3qS#upNq@5G9p|7mT!iugsHj%SAB-$EqJDCSt5BA02CyAvX;ao&GR(njySU7sG zSCDv_vM;9qf#PQ&CoGd!K7^oli~-Y5TwW><<&Q-gig<@Oa1p@;hh;+WopvccmMzZ diff --git a/assets/translation context screenshots/Option Disabled/Set_Screenshot_Save_Type_To_FILE_To_Configure_This_Option.png b/assets/translation context screenshots/Option Disabled/Set_Screenshot_Save_Type_To_FILE_To_Configure_This_Option.png new file mode 100644 index 0000000000000000000000000000000000000000..bca5844ed9d9487e112e0fb4a3a79b60ab6451e5 GIT binary patch literal 1515 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1%OFJK~#8N?U~DQ z97ha>9feCa56+4grLuMvv)F?Imk^zwZ^KYDUEMrx6AZuhVTH$(jSALonYfBoRI z&MfQm)h3fd-$`*dvUl*^%fP&uAA?IXMD%d*UAbIu8hm?w{MoFC^CsAQynB9bJ14dc zzFkG*;CnAP_y7(*4F}(rue$PT{yJaIU!A?!m|{bSGWE4S&=g$nmxh%hWS#tmnF@0b zXQXG+L|M)j(dsY6ixXoAd*Dxaoj1=%^7@SGJLW+7l<|DVXZfp-JX8AOM~~6{8atRd#cW2 z2Wx8fr={2PAV@VT{^2@(R`;UgZ$a&+d?Y)y59$!Y8hH1lLB$EftT`js!kH6Ew#2;J zChQFm*$snFs7_+DwN05Fz|RJ^*`*mA`BbcOhS4p>@e-EgVx#6pz;jFkCc5&$7xYp4 ztaE`3a*-+i8rk0Sj_-oq`a0NW?`M|^>Uon1(WlTH=~DZ7ddP3qmbnB%o@-7 z929o@sB4=U>4(onM||zo0sOW-74iW!!k)%;&;$Ec*3_`z*@Ql@@x9LK2FC$67MuetK_)QAfLs)sjc?_J zacui}U7v%(ULRe*#`@^9pw`MBoY|ZsXQY^HjYjnoJ2p4CpBdRS>*{~%Q_o&PWNq)4 zy4f>u595_RbN*_Z&KVw(moWJL{QE~(ctTxDv5eD-(OyIXld~ld)g*`ss4M3-YNRIF zUxzcKQIdXFemTRQjs7%t8`8xM@x*2-@)&3StYYt6PzUQrZlL^ccy98Fdfgmblnsfe zKNOT6(y5!D*Y!Cl?DWyk!C2qwsI`i-ucPjbtr4#6-k|>#Bb#R3_$GUBPY{vCo)b#l z>>0R+@yeb#f3;2L43BMtZ%HaTAP(V>@DpwV>X8c;lIqCYfJEMF{+|9qO|rj^)Mo6; zH)n`WUHf(|IWJl_C`a^>7XkC?c6{x*1eowbc80=^@*XM#T% zW2e^!gYT-%Q5+p)*8TeBx3zD4vEf86pbjv5;Akk6JhP1z0&3;m=T1PyZlYXrrC%?I z9RzhPMQrW#-PVSk9;iTO~5uD2j5*1-f)~Z;13N4AGt00YmM^;!NGSYZ2ju~0pZ{ygpl`xgO3n$ zI5_wSA%~+3KKYA-j}USMn!!g1AxEGLK0?Ty^4CA}kGc2f-+A(M$Q2&u{{S-;U4KH} Rhyefq002ovPDHLkV1le-@&y0@ literal 0 HcmV?d00001 From c4cf60d1962c76be0fed6f23a030baceee6c6db5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Oct 2025 01:05:07 +0000 Subject: [PATCH 30/70] build(deps-dev): bump vite from 7.0.6 to 7.1.9 Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.0.6 to 7.1.9. - [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/v7.1.9/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 7.1.9 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 59eb96e14..819706688 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14600,11 +14600,13 @@ } }, "node_modules/tinyglobby": { - "version": "0.2.14", + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "license": "MIT", "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { "node": ">=12.0.0" @@ -14614,8 +14616,13 @@ } }, "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.5", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -14626,7 +14633,9 @@ } }, "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.2", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", "engines": { "node": ">=12" @@ -15091,15 +15100,17 @@ } }, "node_modules/vite": { - "version": "7.0.6", + "version": "7.1.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.9.tgz", + "integrity": "sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==", "license": "MIT", "dependencies": { "esbuild": "^0.25.0", - "fdir": "^6.4.6", + "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", - "rollup": "^4.40.0", - "tinyglobby": "^0.2.14" + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" }, "bin": { "vite": "bin/vite.js" @@ -15170,8 +15181,13 @@ } }, "node_modules/vite/node_modules/fdir": { - "version": "6.4.6", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -15183,6 +15199,8 @@ }, "node_modules/vite/node_modules/picomatch": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", "engines": { "node": ">=12" From e939f6511fc4df7c836dd859f9fef68377b5e794 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Oct 2025 01:05:15 +0000 Subject: [PATCH 31/70] build(deps-dev): bump eslint-plugin-perfectionist from 4.15.0 to 4.15.1 Bumps [eslint-plugin-perfectionist](https://github.com/azat-io/eslint-plugin-perfectionist) from 4.15.0 to 4.15.1. - [Release notes](https://github.com/azat-io/eslint-plugin-perfectionist/releases) - [Changelog](https://github.com/azat-io/eslint-plugin-perfectionist/blob/main/changelog.md) - [Commits](https://github.com/azat-io/eslint-plugin-perfectionist/compare/v4.15.0...v4.15.1) --- updated-dependencies: - dependency-name: eslint-plugin-perfectionist dependency-version: 4.15.1 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 59eb96e14..62dbab520 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7135,12 +7135,14 @@ } }, "node_modules/eslint-plugin-perfectionist": { - "version": "4.15.0", + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-4.15.1.tgz", + "integrity": "sha512-MHF0cBoOG0XyBf7G0EAFCuJJu4I18wy0zAoT1OHfx2o6EOx1EFTIzr2HGeuZa1kDcusoX0xJ9V7oZmaeFd773Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "^8.34.1", - "@typescript-eslint/utils": "^8.34.1", + "@typescript-eslint/types": "^8.38.0", + "@typescript-eslint/utils": "^8.38.0", "natural-orderby": "^5.0.0" }, "engines": { From e8c93ed9d633f79cde5c666fc5b543763b98a039 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Oct 2025 01:05:23 +0000 Subject: [PATCH 32/70] build(deps-dev): bump @types/chrome from 0.1.11 to 0.1.24 Bumps [@types/chrome](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/chrome) from 0.1.11 to 0.1.24. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/chrome) --- updated-dependencies: - dependency-name: "@types/chrome" dependency-version: 0.1.24 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 59eb96e14..a4d2ed1c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4705,9 +4705,9 @@ } }, "node_modules/@types/chrome": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.1.11.tgz", - "integrity": "sha512-8KFchpiY51tZaOpojRM9WPkJzr3ZLei1blsR8nkr42XXMKav4GXQgDK/lP1JTP2wsljXhpDDqAsGw9eOgm8G9Q==", + "version": "0.1.24", + "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.1.24.tgz", + "integrity": "sha512-9iO9HL2bMeGS4C8m6gNFWUyuPE5HEUFk+rGh+7oriUjg+ata4Fc9PoVlu8xvGm7yoo3AmS3J6fAjoFj61NL2rw==", "dev": true, "license": "MIT", "dependencies": { From b82f26bf6eadfec42150b131f727b3c353447bce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Oct 2025 01:05:32 +0000 Subject: [PATCH 33/70] build(deps): bump @rollup/rollup-linux-x64-gnu from 4.52.3 to 4.52.4 Bumps [@rollup/rollup-linux-x64-gnu](https://github.com/rollup/rollup) from 4.52.3 to 4.52.4. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v4.52.3...v4.52.4) --- updated-dependencies: - dependency-name: "@rollup/rollup-linux-x64-gnu" dependency-version: 4.52.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 59eb96e14..5459759bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "@formkit/auto-animate": "^0.9.0", "@monaco-editor/react": "^4.6.0", + "@rollup/rollup-linux-x64-gnu": "^4.14.3", "@tanstack/react-query": "^5.18.0", "dotenv": "^17.2.1", "globals": "^16.2.0", @@ -1058,9 +1059,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.3.tgz", - "integrity": "sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==", + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.4.tgz", + "integrity": "sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==", "cpu": [ "x64" ], From 4fffa0d1171989941c1cf0b35eaf944310fe40a8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Oct 2025 01:05:47 +0000 Subject: [PATCH 34/70] build(deps-dev): bump eslint-plugin-react-hooks from 5.2.0 to 7.0.0 Bumps [eslint-plugin-react-hooks](https://github.com/facebook/react/tree/HEAD/packages/eslint-plugin-react-hooks) from 5.2.0 to 7.0.0. - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/facebook/react/blob/main/packages/eslint-plugin-react-hooks/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/HEAD/packages/eslint-plugin-react-hooks) --- updated-dependencies: - dependency-name: eslint-plugin-react-hooks dependency-version: 7.0.0 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- package-lock.json | 363 +++++++++++++++++++++++++++++++++++++++------- package.json | 2 +- 2 files changed, 309 insertions(+), 56 deletions(-) diff --git a/package-lock.json b/package-lock.json index 59eb96e14..063b94662 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,7 +54,7 @@ "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-promise": "^7.1.0", "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-hooks": "^7.0.0", "eslint-plugin-tailwindcss": "^3.13.0", "fs-extra": "^11.1.1", "get-installed-browsers": "^0.1.7", @@ -99,101 +99,232 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.2", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.2", - "picocolors": "^1.0.0" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", + "node_modules/@babel/compat-data": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz", + "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==", "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { - "version": "7.24.2", + "node_modules/@babel/core": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", + "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.4", + "@babel/types": "^7.28.4", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", + "node_modules/@babel/helper-compilation-targets": { + "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": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@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" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", + "node_modules/@babel/helper-validator-identifier": { + "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==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", + "node_modules/@babel/helper-validator-option": { + "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": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", + "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.4" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/@babel/runtime": { @@ -205,6 +336,54 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@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.28.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", + "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", + "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@colors/colors": { "version": "1.5.0", "dev": true, @@ -562,28 +741,29 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "devOptional": true, "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "devOptional": true, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=6.0.0" + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", "devOptional": true, "license": "MIT", "engines": { @@ -601,12 +781,16 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "devOptional": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -6138,6 +6322,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, "node_modules/core-util-is": { "version": "1.0.3", "dev": true, @@ -7232,11 +7423,20 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "5.2.0", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.0.tgz", + "integrity": "sha512-fNXaOwvKwq2+pXiRpXc825Vd63+KM4DLL40Rtlycb8m7fYpp6efrTp1sa6ZbP/Ap58K2bEKFXRmhURE+CJAQWw==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.22.4 || ^4.0.0", + "zod-validation-error": "^3.0.3 || ^4.0.0" + }, "engines": { - "node": ">=10" + "node": ">=18" }, "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" @@ -7806,6 +8006,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "dev": true, @@ -8118,6 +8328,23 @@ "node": ">= 0.4" } }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, "node_modules/highlight.js": { "version": "10.7.3", "dev": true, @@ -8864,6 +9091,19 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "dev": true, @@ -15527,6 +15767,19 @@ "funding": { "url": "https://github.com/sponsors/colinhacks" } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } } } } diff --git a/package.json b/package.json index 4083a67c1..ae33f1633 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-promise": "^7.1.0", "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-hooks": "^7.0.0", "eslint-plugin-tailwindcss": "^3.13.0", "fs-extra": "^11.1.1", "get-installed-browsers": "^0.1.7", From 6555a83feceeff5d40ed9e0edcac5011365d01d6 Mon Sep 17 00:00:00 2001 From: Dave Nicolson Date: Mon, 13 Oct 2025 18:28:01 +0200 Subject: [PATCH 35/70] Update youtubei.js --- package-lock.json | 426 ++---------------- package.json | 2 +- .../playlistManagementButtons/index.ts | 23 +- 3 files changed, 35 insertions(+), 416 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2d3bb39ec..da8644742 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,6 @@ "dependencies": { "@formkit/auto-animate": "^0.9.0", "@monaco-editor/react": "^4.6.0", - "@rollup/rollup-linux-x64-gnu": "^4.14.3", "@tanstack/react-query": "^5.18.0", "dotenv": "^17.2.1", "globals": "^16.2.0", @@ -25,7 +24,7 @@ "tailwindcss-multi": "^0.4.0", "vite-plugin-css-injected-by-js": "^3.3.0", "webextension-polyfill": "^0.12.0", - "youtubei.js": "^15.0.1" + "youtubei.js": "^16.0.0" }, "devDependencies": { "@eslint/compat": "^1.2.0", @@ -89,8 +88,6 @@ }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", "dev": true, "license": "MIT", "engines": { @@ -331,8 +328,6 @@ }, "node_modules/@babel/runtime": { "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.3.tgz", - "integrity": "sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -386,6 +381,10 @@ "node": ">=6.9.0" } }, + "node_modules/@bufbuild/protobuf": { + "version": "2.9.0", + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, "node_modules/@colors/colors": { "version": "1.5.0", "dev": true, @@ -420,24 +419,8 @@ "dev": true, "license": "ISC" }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.2", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", "dev": true, "license": "MIT", "dependencies": { @@ -463,8 +446,6 @@ }, "node_modules/@eslint/compat": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.4.0.tgz", - "integrity": "sha512-DEzm5dKeDBPm3r08Ixli/0cmxr8LkRdwxMRUIJBlSCpAwSrvFEJpVBzV+66JhDxiaqKxnRzCXhtiMiczF7Hglg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -484,8 +465,6 @@ }, "node_modules/@eslint/compat/node_modules/@eslint/core": { "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", - "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -530,8 +509,6 @@ }, "node_modules/@eslint/config-helpers": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", - "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -540,8 +517,6 @@ }, "node_modules/@eslint/core": { "version": "0.15.2", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", - "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -606,8 +581,6 @@ }, "node_modules/@eslint/js": { "version": "9.37.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.37.0.tgz", - "integrity": "sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==", "dev": true, "license": "MIT", "engines": { @@ -627,8 +600,6 @@ }, "node_modules/@eslint/plugin-kit": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", - "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -641,8 +612,6 @@ }, "node_modules/@formkit/auto-animate": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@formkit/auto-animate/-/auto-animate-0.9.0.tgz", - "integrity": "sha512-VhP4zEAacXS3dfTpJpJ88QdLqMTcabMg0jwpOSxZ/VzfQVfl3GkZSCZThhGC5uhq/TxPHPzW0dzr4H9Bb1OgKA==", "license": "MIT" }, "node_modules/@humanfs/core": { @@ -1043,8 +1012,6 @@ }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-beta.32", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.32.tgz", - "integrity": "sha512-QReCdvxiUZAPkvp1xpAg62IeNzykOFA6syH2CnClif4YmALN1XKpB39XneL80008UbtMShthSVDKmrx05N1q/g==", "dev": true, "license": "MIT" }, @@ -1076,8 +1043,6 @@ }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.45.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.0.tgz", - "integrity": "sha512-BA4yPIPssPB2aRAWzmqzQ3y2/KotkLyZukVB7j3psK/U3nVJdceo6qr9pLM2xN6iRP/wKfxEbOb1yrlZH6sYZg==", "cpu": [ "arm64" ], @@ -1297,6 +1262,8 @@ }, "node_modules/@rollup/rollup-win32-x64-msvc": { "version": "4.45.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.0.tgz", + "integrity": "sha512-SRf1cytG7wqcHVLrBc9VtPK4pU5wxiB/lNIkNmW2ApKXIg+RpqwHfsaEK+e7eH4A1BpI6BX/aBWXxZCIrJg3uA==", "cpu": [ "x64" ], @@ -4596,8 +4563,6 @@ }, "node_modules/@swc/core": { "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.13.5.tgz", - "integrity": "sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -4635,8 +4600,6 @@ }, "node_modules/@swc/core-darwin-arm64": { "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.5.tgz", - "integrity": "sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ==", "cpu": [ "arm64" ], @@ -4650,170 +4613,13 @@ "node": ">=10" } }, - "node_modules/@swc/core-darwin-x64": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.13.5.tgz", - "integrity": "sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.5.tgz", - "integrity": "sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.5.tgz", - "integrity": "sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.5.tgz", - "integrity": "sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.5.tgz", - "integrity": "sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-musl": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.5.tgz", - "integrity": "sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.5.tgz", - "integrity": "sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.5.tgz", - "integrity": "sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.5.tgz", - "integrity": "sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, "node_modules/@swc/counter": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", "dev": true, "license": "Apache-2.0" }, "node_modules/@swc/types": { "version": "0.1.24", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.24.tgz", - "integrity": "sha512-tjTMh3V4vAORHtdTprLlfoMptu1WfTZG9Rsca6yOKyNYsRr+MUXutKmliB17orgSZk5DpnDxs8GUdd/qwYxOng==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -4822,8 +4628,6 @@ }, "node_modules/@tanstack/query-core": { "version": "5.87.1", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.87.1.tgz", - "integrity": "sha512-HOFHVvhOCprrWvtccSzc7+RNqpnLlZ5R6lTmngb8aq7b4rc2/jDT0w+vLdQ4lD9bNtQ+/A4GsFXy030Gk4ollA==", "license": "MIT", "funding": { "type": "github", @@ -4832,8 +4636,6 @@ }, "node_modules/@tanstack/react-query": { "version": "5.87.1", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.87.1.tgz", - "integrity": "sha512-YKauf8jfMowgAqcxj96AHs+Ux3m3bWT1oSVKamaRPXSnW2HqSznnTCEkAVqctF1e/W9R/mPcyzzINIgpOH94qg==", "license": "MIT", "dependencies": { "@tanstack/query-core": "5.87.1" @@ -4891,9 +4693,7 @@ } }, "node_modules/@types/chrome": { - "version": "0.1.24", - "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.1.24.tgz", - "integrity": "sha512-9iO9HL2bMeGS4C8m6gNFWUyuPE5HEUFk+rGh+7oriUjg+ata4Fc9PoVlu8xvGm7yoo3AmS3J6fAjoFj61NL2rw==", + "version": "0.1.11", "dev": true, "license": "MIT", "dependencies": { @@ -4946,8 +4746,6 @@ }, "node_modules/@types/node": { "version": "24.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.5.2.tgz", - "integrity": "sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -4961,8 +4759,6 @@ }, "node_modules/@types/react": { "version": "19.1.15", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.15.tgz", - "integrity": "sha512-+kLxJpaJzXybyDyFXYADyP1cznTO8HSuBpenGlnKOAkH4hyNINiywvXS/tGJhsrGGP/gM185RA3xpjY0Yg4erA==", "dev": true, "license": "MIT", "dependencies": { @@ -4971,8 +4767,6 @@ }, "node_modules/@types/react-dom": { "version": "19.1.9", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.9.tgz", - "integrity": "sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -4994,14 +4788,10 @@ }, "node_modules/@types/trusted-types": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-1.0.6.tgz", - "integrity": "sha512-230RC8sFeHoT6sSUlRO6a8cAnclO06eeiq1QDfiv2FGCLWFvvERWgwIQD4FWqD9A69BN7Lzee4OXwoMVnnsWDw==", "license": "MIT" }, "node_modules/@types/webextension-polyfill": { "version": "0.12.3", - "resolved": "https://registry.npmjs.org/@types/webextension-polyfill/-/webextension-polyfill-0.12.3.tgz", - "integrity": "sha512-F58aDVSeN/MjUGazXo/cPsmR76EvqQhQ1v4x23hFjUX0cfAJYE+JBWwiOGW36/VJGGxoH74sVlRIF3z7SJCKyg==", "dev": true, "license": "MIT" }, @@ -5012,8 +4802,6 @@ }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.45.0.tgz", - "integrity": "sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg==", "dev": true, "license": "MIT", "dependencies": { @@ -5042,8 +4830,6 @@ }, "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": { @@ -5052,8 +4838,6 @@ }, "node_modules/@typescript-eslint/parser": { "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.45.0.tgz", - "integrity": "sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5077,8 +4861,6 @@ }, "node_modules/@typescript-eslint/project-service": { "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.45.0.tgz", - "integrity": "sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==", "dev": true, "license": "MIT", "dependencies": { @@ -5099,8 +4881,6 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.45.0.tgz", - "integrity": "sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==", "dev": true, "license": "MIT", "dependencies": { @@ -5117,8 +4897,6 @@ }, "node_modules/@typescript-eslint/tsconfig-utils": { "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.45.0.tgz", - "integrity": "sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==", "dev": true, "license": "MIT", "engines": { @@ -5134,8 +4912,6 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.45.0.tgz", - "integrity": "sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==", "dev": true, "license": "MIT", "dependencies": { @@ -5159,8 +4935,6 @@ }, "node_modules/@typescript-eslint/types": { "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.45.0.tgz", - "integrity": "sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==", "dev": true, "license": "MIT", "engines": { @@ -5173,8 +4947,6 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.45.0.tgz", - "integrity": "sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==", "dev": true, "license": "MIT", "dependencies": { @@ -5202,8 +4974,6 @@ }, "node_modules/@typescript-eslint/utils": { "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.45.0.tgz", - "integrity": "sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg==", "dev": true, "license": "MIT", "dependencies": { @@ -5226,8 +4996,6 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.45.0.tgz", - "integrity": "sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==", "dev": true, "license": "MIT", "dependencies": { @@ -5244,8 +5012,6 @@ }, "node_modules/@typescript-eslint/visitor-keys/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": { @@ -5257,8 +5023,6 @@ }, "node_modules/@vitejs/plugin-react-swc": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-4.0.1.tgz", - "integrity": "sha512-NQhPjysi5duItyrMd5JWZFf2vNOuSMyw+EoZyTBDzk+DkfYD8WNrsUs09sELV2cr1P15nufsN25hsUBt4CKF9Q==", "dev": true, "license": "MIT", "dependencies": { @@ -5290,8 +5054,7 @@ }, "node_modules/acorn": { "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "devOptional": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -5443,8 +5206,6 @@ }, "node_modules/arg": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "dev": true, "license": "MIT" }, @@ -5896,8 +5657,6 @@ }, "node_modules/camelcase-css": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", "dev": true, "license": "MIT", "engines": { @@ -6193,8 +5952,6 @@ }, "node_modules/commander": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true, "license": "MIT", "engines": { @@ -6430,8 +6187,6 @@ }, "node_modules/cssesc": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, "license": "MIT", "bin": { @@ -6562,8 +6317,6 @@ }, "node_modules/didyoumean": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "dev": true, "license": "Apache-2.0" }, @@ -6588,8 +6341,6 @@ }, "node_modules/dlv": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "dev": true, "license": "MIT" }, @@ -6606,8 +6357,6 @@ }, "node_modules/dotenv": { "version": "17.2.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", - "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -7072,8 +6821,6 @@ }, "node_modules/eslint": { "version": "9.36.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.36.0.tgz", - "integrity": "sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7133,8 +6880,6 @@ }, "node_modules/eslint-config-prettier": { "version": "10.1.8", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", - "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", "bin": { @@ -7329,14 +7074,12 @@ } }, "node_modules/eslint-plugin-perfectionist": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-4.15.1.tgz", - "integrity": "sha512-MHF0cBoOG0XyBf7G0EAFCuJJu4I18wy0zAoT1OHfx2o6EOx1EFTIzr2HGeuZa1kDcusoX0xJ9V7oZmaeFd773Q==", + "version": "4.15.0", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "^8.38.0", - "@typescript-eslint/utils": "^8.38.0", + "@typescript-eslint/types": "^8.34.1", + "@typescript-eslint/utils": "^8.34.1", "natural-orderby": "^5.0.0" }, "engines": { @@ -7348,8 +7091,6 @@ }, "node_modules/eslint-plugin-prettier": { "version": "5.5.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz", - "integrity": "sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==", "dev": true, "license": "MIT", "dependencies": { @@ -7396,8 +7137,6 @@ }, "node_modules/eslint-plugin-react": { "version": "7.37.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", - "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", "dev": true, "license": "MIT", "dependencies": { @@ -7545,8 +7284,6 @@ }, "node_modules/eslint/node_modules/@eslint/js": { "version": "9.36.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.36.0.tgz", - "integrity": "sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==", "dev": true, "license": "MIT", "engines": { @@ -7938,8 +7675,6 @@ }, "node_modules/fs-extra": { "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", "dev": true, "license": "MIT", "dependencies": { @@ -7953,9 +7688,6 @@ }, "node_modules/fsevents": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, "license": "MIT", "optional": true, "os": [ @@ -8155,8 +7887,6 @@ }, "node_modules/globals": { "version": "16.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", - "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", "license": "MIT", "engines": { "node": ">=18" @@ -8228,8 +7958,6 @@ }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, "license": "MIT" }, @@ -8360,8 +8088,6 @@ }, "node_modules/hook-std": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-4.0.0.tgz", - "integrity": "sha512-IHI4bEVOt3vRUDJ+bFA9VUJlo7SzvFARPNLw75pqSmAOP2HmTWfFJtPvLBrDrlgjEYXY9zs7SFdHPQaJShkSCQ==", "dev": true, "license": "MIT", "engines": { @@ -8416,8 +8142,6 @@ }, "node_modules/i18next": { "version": "25.5.2", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.5.2.tgz", - "integrity": "sha512-lW8Zeh37i/o0zVr+NoCHfNnfvVw+M6FQbRp36ZZ/NyHDJ3NJVpp2HhAUyU9WafL5AssymNoOjMRB48mmx2P6Hw==", "funding": [ { "type": "individual", @@ -9072,18 +8796,6 @@ "node": ">= 0.6.0" } }, - "node_modules/jintr": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jintr/-/jintr-3.3.1.tgz", - "integrity": "sha512-nnOzyhf0SLpbWuZ270Omwbj5LcXUkTcZkVnK8/veJXtSZOiATM5gMZMdmzN75FmTyj+NVgrGaPdH12zIJ24oIA==", - "funding": [ - "https://github.com/sponsors/LuanRT" - ], - "license": "MIT", - "dependencies": { - "acorn": "^8.8.0" - } - }, "node_modules/jiti": { "version": "1.21.6", "devOptional": true, @@ -9263,8 +8975,6 @@ }, "node_modules/lilconfig": { "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": { @@ -9468,6 +9178,13 @@ "node": ">= 8" } }, + "node_modules/meriyah": { + "version": "6.1.4", + "license": "ISC", + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/micromatch": { "version": "4.0.8", "dev": true, @@ -9534,8 +9251,6 @@ }, "node_modules/monaco-editor": { "version": "0.53.0", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.53.0.tgz", - "integrity": "sha512-0WNThgC6CMWNXXBxTbaYYcunj08iB5rnx4/G56UOPeL9UVIUGGHA1GR0EWIh9Ebabj7NpCRawQ5b0hfN1jQmYQ==", "license": "MIT", "dependencies": { "@types/trusted-types": "^1.0.6" @@ -12425,8 +12140,6 @@ }, "node_modules/object-hash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "dev": true, "license": "MIT", "engines": { @@ -12473,8 +12186,6 @@ }, "node_modules/object.entries": { "version": "1.1.9", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", - "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", "dev": true, "license": "MIT", "dependencies": { @@ -12794,8 +12505,6 @@ }, "node_modules/pirates": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, "license": "MIT", "engines": { @@ -12903,8 +12612,6 @@ }, "node_modules/postcss-import": { "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", "dev": true, "license": "MIT", "dependencies": { @@ -12921,8 +12628,6 @@ }, "node_modules/postcss-js": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", - "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", "dev": true, "funding": [ { @@ -12947,8 +12652,6 @@ }, "node_modules/postcss-load-config": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", "dev": true, "funding": [ { @@ -12983,8 +12686,6 @@ }, "node_modules/postcss-nested": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", - "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", "dev": true, "funding": [ { @@ -13009,8 +12710,6 @@ }, "node_modules/postcss-selector-parser": { "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, "license": "MIT", "dependencies": { @@ -13036,8 +12735,6 @@ }, "node_modules/prettier": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", "bin": { @@ -13164,8 +12861,6 @@ }, "node_modules/react": { "version": "19.1.1", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", - "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -13181,8 +12876,6 @@ }, "node_modules/react-dom": { "version": "19.1.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz", - "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==", "license": "MIT", "dependencies": { "scheduler": "^0.26.0" @@ -13205,8 +12898,6 @@ }, "node_modules/read-cache": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dev": true, "license": "MIT", "dependencies": { @@ -13215,8 +12906,6 @@ }, "node_modules/read-cache/node_modules/pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "license": "MIT", "engines": { @@ -13580,14 +13269,10 @@ }, "node_modules/scheduler": { "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", "license": "MIT" }, "node_modules/semantic-release": { "version": "24.2.9", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-24.2.9.tgz", - "integrity": "sha512-phCkJ6pjDi9ANdhuF5ElS10GGdAKY6R1Pvt9lT3SFhOwM4T7QZE7MLpBDbNruUx/Q3gFD92/UOFringGipRqZA==", "dev": true, "license": "MIT", "dependencies": { @@ -13862,9 +13547,6 @@ }, "node_modules/semver-diff": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-5.0.0.tgz", - "integrity": "sha512-0HbGtOm+S7T6NGQ/pxJSJipJvc4DK3FcRVMRkhsIwJDJ4Jcz5DQC1cPPzB5GhzyHjwttW878HaWQq46CkL3cqg==", - "deprecated": "Deprecated as the semver package now supports this built-in.", "dev": true, "license": "MIT", "dependencies": { @@ -14535,8 +14217,6 @@ }, "node_modules/sucrase": { "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", "dev": true, "license": "MIT", "dependencies": { @@ -14647,8 +14327,6 @@ }, "node_modules/tailwindcss": { "version": "3.4.17", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", - "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", "dev": true, "license": "MIT", "dependencies": { @@ -14857,13 +14535,11 @@ } }, "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "version": "0.2.14", "license": "MIT", "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" + "fdir": "^6.4.4", + "picomatch": "^4.0.2" }, "engines": { "node": ">=12.0.0" @@ -14873,13 +14549,8 @@ } }, "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "version": "6.4.5", "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -14890,9 +14561,7 @@ } }, "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "version": "4.0.2", "license": "MIT", "engines": { "node": ">=12" @@ -14960,8 +14629,6 @@ }, "node_modules/ts-interface-checker": { "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "dev": true, "license": "Apache-2.0" }, @@ -15169,8 +14836,6 @@ }, "node_modules/typescript": { "version": "5.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", - "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "devOptional": true, "license": "Apache-2.0", "bin": { @@ -15183,8 +14848,6 @@ }, "node_modules/typescript-eslint": { "version": "8.45.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.45.0.tgz", - "integrity": "sha512-qzDmZw/Z5beNLUrXfd0HIW6MzIaAV5WNDxmMs9/3ojGOpYavofgNAAD/nC6tGV2PczIi0iw8vot2eAe/sBn7zg==", "dev": true, "license": "MIT", "dependencies": { @@ -15239,19 +14902,8 @@ "dev": true, "license": "MIT" }, - "node_modules/undici": { - "version": "6.21.3", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", - "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, "node_modules/undici-types": { "version": "7.12.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.12.0.tgz", - "integrity": "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==", "devOptional": true, "license": "MIT" }, @@ -15366,17 +15018,15 @@ } }, "node_modules/vite": { - "version": "7.1.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.9.tgz", - "integrity": "sha512-4nVGliEpxmhCL8DslSAUdxlB6+SMrhB0a1v5ijlh1xB1nEPuy1mxaHxysVucLHuWryAxLWg6a5ei+U4TLn/rFg==", + "version": "7.0.6", "license": "MIT", "dependencies": { "esbuild": "^0.25.0", - "fdir": "^6.5.0", + "fdir": "^6.4.6", "picomatch": "^4.0.3", "postcss": "^8.5.6", - "rollup": "^4.43.0", - "tinyglobby": "^0.2.15" + "rollup": "^4.40.0", + "tinyglobby": "^0.2.14" }, "bin": { "vite": "bin/vite.js" @@ -15447,13 +15097,8 @@ } }, "node_modules/vite/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "version": "6.4.6", "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -15465,8 +15110,6 @@ }, "node_modules/vite/node_modules/picomatch": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", "engines": { "node": ">=12" @@ -15772,17 +15415,14 @@ } }, "node_modules/youtubei.js": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/youtubei.js/-/youtubei.js-15.0.1.tgz", - "integrity": "sha512-2slapqJS5NuXKHvcACEknyVz0AjH/TrXaOhDM0q2twQKa54kCmfj+7B/2nGfd20uzAe29zW1ejk2qOc4ABuGkg==", + "version": "16.0.0", "funding": [ "https://github.com/sponsors/LuanRT" ], "license": "MIT", "dependencies": { "@bufbuild/protobuf": "^2.0.0", - "jintr": "^3.3.1", - "undici": "^6.21.3" + "meriyah": "^6.1.4" } }, "node_modules/zip-stream": { @@ -15800,8 +15440,6 @@ }, "node_modules/zod": { "version": "4.1.11", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.11.tgz", - "integrity": "sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==", "dev": true, "license": "MIT", "funding": { @@ -15818,8 +15456,6 @@ }, "node_modules/zod-error/node_modules/zod": { "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "dev": true, "license": "MIT", "funding": { diff --git a/package.json b/package.json index 05515ef41..cb439dc90 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "tailwindcss-multi": "^0.4.0", "vite-plugin-css-injected-by-js": "^3.3.0", "webextension-polyfill": "^0.12.0", - "youtubei.js": "^15.0.1" + "youtubei.js": "^16.0.0" }, "devDependencies": { "@eslint/compat": "^1.2.0", diff --git a/src/features/playlistManagementButtons/index.ts b/src/features/playlistManagementButtons/index.ts index c67303a25..19166ff16 100644 --- a/src/features/playlistManagementButtons/index.ts +++ b/src/features/playlistManagementButtons/index.ts @@ -91,26 +91,9 @@ export async function enablePlaylistManagementButtons() { resetButton.title = "Mark as unwatched"; resetButton.onclick = async () => { try { - let pagesToLoad = 5; - let history = await youtube.getHistory(); - - while (pagesToLoad > 0) { - try { - await history.removeVideo(setVideoId); - item.querySelector("#overlays ytd-thumbnail-overlay-resume-playback-renderer")?.remove(); - break; - } catch (err) { - if (err instanceof Error && /Failed to get feedback token/.test(err.message)) { - if (--pagesToLoad > 0) { - history = await history.getContinuation(); - } else { - throw new Error(`Failed to find video in history after checking 5 pages`); - } - } else { - throw err; - } - } - } + const history = await youtube.getHistory(); + await history.removeVideo(setVideoId, 5); + item.querySelector("#overlays ytd-thumbnail-overlay-resume-playback-renderer")?.remove(); } catch (err) { console.error("Failed to reset video:", err); const { listener } = createTooltip({ From 7f0e8047d8fa612fbc778f78d4803ced256493d8 Mon Sep 17 00:00:00 2001 From: Dave Nicolson Date: Mon, 13 Oct 2025 19:44:04 +0200 Subject: [PATCH 36/70] Add loading indicator --- .../playlistManagementButtons/index.css | 27 ++++++++++++++----- .../playlistManagementButtons/index.ts | 23 +++++++++++++++- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/src/features/playlistManagementButtons/index.css b/src/features/playlistManagementButtons/index.css index 4787e4004..56b809294 100644 --- a/src/features/playlistManagementButtons/index.css +++ b/src/features/playlistManagementButtons/index.css @@ -1,12 +1,12 @@ .yte-remove-button, .yte-reset-button { - background: none; - border-radius: 50%; - border: none; - cursor: pointer; - margin-right: 18px; - padding: 12px; - vertical-align: top; + background: none; + border-radius: 50%; + border: none; + cursor: pointer; + margin-right: 18px; + padding: 12px; + vertical-align: top; } .yte-remove-button:hover, @@ -14,3 +14,16 @@ background: black; transition: background 0.2s; } + +@keyframes yte-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +.yte-spinning { + animation: yte-spin 2s linear infinite; +} diff --git a/src/features/playlistManagementButtons/index.ts b/src/features/playlistManagementButtons/index.ts index 19166ff16..31e6db16a 100644 --- a/src/features/playlistManagementButtons/index.ts +++ b/src/features/playlistManagementButtons/index.ts @@ -1,6 +1,6 @@ import React from "react"; import { renderToString } from "react-dom/server"; -import { FaUndoAlt } from "react-icons/fa"; +import { FaSpinner, FaUndoAlt } from "react-icons/fa"; import { FaTrash } from "react-icons/fa6"; import { Innertube } from "youtubei.js/web"; @@ -69,6 +69,11 @@ export async function enablePlaylistManagementButtons() { removeButton.className = "yte-remove-button"; removeButton.title = "Remove video"; removeButton.onclick = async () => { + const { innerHTML: originalHTML, title: originalTitle } = removeButton; + removeButton.disabled = true; + removeButton.title = "Removing video..."; + removeButton.innerHTML = renderToString(React.createElement(FaSpinner, { color: "gray", size: 18 })); + removeButton.classList.add("yte-spinning"); try { const playlistId = getPlaylistId()!; await youtube.playlist.removeVideos(playlistId, [setVideoId]); @@ -82,6 +87,11 @@ export async function enablePlaylistManagementButtons() { text: `Failed to remove video: ${err instanceof Error ? err.message : String(err)}` }); listener(); + } finally { + removeButton.disabled = false; + removeButton.innerHTML = originalHTML; + removeButton.title = originalTitle; + removeButton.classList.remove("yte-spinning"); } }; @@ -90,6 +100,12 @@ export async function enablePlaylistManagementButtons() { resetButton.className = "yte-reset-button"; resetButton.title = "Mark as unwatched"; resetButton.onclick = async () => { + const { innerHTML: originalHTML, title: originalTitle } = resetButton; + resetButton.disabled = true; + resetButton.title = "Marking as unwatched..."; + resetButton.innerHTML = renderToString(React.createElement(FaSpinner, { color: "gray", size: 18 })); + resetButton.classList.add("yte-spinning"); + try { const history = await youtube.getHistory(); await history.removeVideo(setVideoId, 5); @@ -103,6 +119,11 @@ export async function enablePlaylistManagementButtons() { text: `Failed to reset video: ${err instanceof Error ? err.message : String(err)}` }); listener(); + } finally { + resetButton.disabled = false; + resetButton.innerHTML = originalHTML; + resetButton.title = originalTitle; + resetButton.classList.remove("yte-spinning"); } }; From b58e9045233e3f063195e098bea777d568551cc1 Mon Sep 17 00:00:00 2001 From: Dave Nicolson Date: Mon, 13 Oct 2025 21:16:29 +0200 Subject: [PATCH 37/70] Add translations --- public/locales/ca-ES.json | 8 ++++++++ public/locales/cs-CZ.json | 8 ++++++++ public/locales/de-DE.json | 8 ++++++++ public/locales/en-GB.json | 8 ++++++++ public/locales/en-US.json | 8 ++++++++ public/locales/en-US.json.d.ts | 8 ++++++++ public/locales/es-ES.json | 8 ++++++++ public/locales/fa-IR.json | 8 ++++++++ public/locales/fr-FR.json | 8 ++++++++ public/locales/he-IL.json | 8 ++++++++ public/locales/hi-IN.json | 10 +++++++++- public/locales/it-IT.json | 8 ++++++++ public/locales/ja-JP.json | 8 ++++++++ public/locales/ko-KR.json | 8 ++++++++ public/locales/nl-NL.json | 8 ++++++++ public/locales/pl-PL.json | 8 ++++++++ public/locales/pt-BR.json | 8 ++++++++ public/locales/ru-RU.json | 8 ++++++++ public/locales/sv-SE.json | 8 ++++++++ public/locales/tr-TR.json | 8 ++++++++ public/locales/uk-UA.json | 8 ++++++++ public/locales/vi-VN.json | 8 ++++++++ public/locales/zh-CN.json | 8 ++++++++ public/locales/zh-TW.json | 8 ++++++++ src/features/playlistManagementButtons/index.ts | 15 +++++++-------- 25 files changed, 200 insertions(+), 9 deletions(-) diff --git a/public/locales/ca-ES.json b/public/locales/ca-ES.json index 07be7c3f4..18c3439bd 100644 --- a/public/locales/ca-ES.json +++ b/public/locales/ca-ES.json @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "Eliminar vídeo", + "removingVideo": "Eliminant vídeo…", + "failedToRemoveVideo": "No s'ha pogut eliminar el vídeo", + "markAsUnwatched": "Marca com a no vist", + "markingAsUnwatched": "Marcant com a no vist…", + "failedToMarkAsUnwatched": "No s'ha pogut marcar com a no vist" + }, "screenshotButton": { "enable": { "label": "Screenshot button", diff --git a/public/locales/cs-CZ.json b/public/locales/cs-CZ.json index c694c1ca9..7b18620bb 100644 --- a/public/locales/cs-CZ.json +++ b/public/locales/cs-CZ.json @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "Odstranit video", + "removingVideo": "Odstraňování videa…", + "failedToRemoveVideo": "Nepodařilo se odstranit video", + "markAsUnwatched": "Označit jako neshlédnuté", + "markingAsUnwatched": "Označování jako neshlédnuté…", + "failedToMarkAsUnwatched": "Nepodařilo se označit jako neshlédnuté" + }, "screenshotButton": { "enable": { "label": "Screenshot button", diff --git a/public/locales/de-DE.json b/public/locales/de-DE.json index 70d632309..0a7419d34 100644 --- a/public/locales/de-DE.json +++ b/public/locales/de-DE.json @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "Video entfernen", + "removingVideo": "Video wird entfernt…", + "failedToRemoveVideo": "Video konnte nicht entfernt werden", + "markAsUnwatched": "Als ungesehen markieren", + "markingAsUnwatched": "Wird als ungesehen markiert…", + "failedToMarkAsUnwatched": "Konnte nicht als ungesehen markiert werden" + }, "screenshotButton": { "enable": { "label": "Screenshot-Taste", diff --git a/public/locales/en-GB.json b/public/locales/en-GB.json index 1195bdb4d..7b6951b47 100644 --- a/public/locales/en-GB.json +++ b/public/locales/en-GB.json @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "Remove video", + "removingVideo": "Removing video…", + "failedToRemoveVideo": "Failed to remove video", + "markAsUnwatched": "Mark as unwatched", + "markingAsUnwatched": "Marking as unwatched…", + "failedToMarkAsUnwatched": "Failed to mark as unwatched" + }, "screenshotButton": { "enable": { "label": "Screenshot button", diff --git a/public/locales/en-US.json b/public/locales/en-US.json index 98432ec87..f39e82aba 100644 --- a/public/locales/en-US.json +++ b/public/locales/en-US.json @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "Remove video", + "removingVideo": "Removing video…", + "markAsUnwatched": "Mark as unwatched", + "markingAsUnwatched": "Marking as unwatched…", + "failedToRemoveVideo": "Failed to remove video", + "failedToMarkAsUnwatched": "Failed to mark video as unwatched" + }, "screenshotButton": { "enable": { "label": "Screenshot button", diff --git a/public/locales/en-US.json.d.ts b/public/locales/en-US.json.d.ts index 471af7f4b..b1c265c25 100644 --- a/public/locales/en-US.json.d.ts +++ b/public/locales/en-US.json.d.ts @@ -373,6 +373,14 @@ interface EnUS { }; }; }; + playlistManagementButtons: { + failedToMarkAsUnwatched: "Failed to mark video as unwatched"; + failedToRemoveVideo: "Failed to remove video"; + markAsUnwatched: "Mark as unwatched"; + markingAsUnwatched: "Marking as unwatched…"; + removeVideo: "Remove video"; + removingVideo: "Removing video…"; + }; screenshotButton: { enable: { label: "Screenshot button"; diff --git a/public/locales/es-ES.json b/public/locales/es-ES.json index eb61bbbfe..80222a181 100644 --- a/public/locales/es-ES.json +++ b/public/locales/es-ES.json @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "Eliminar vídeo", + "removingVideo": "Eliminando vídeo…", + "failedToRemoveVideo": "No se pudo eliminar el vídeo", + "markAsUnwatched": "Marcar como no visto", + "markingAsUnwatched": "Marcando como no visto…", + "failedToMarkAsUnwatched": "No se pudo marcar como no visto" + }, "screenshotButton": { "enable": { "label": "Botón de captura de pantalla", diff --git a/public/locales/fa-IR.json b/public/locales/fa-IR.json index 8f733e485..7a6fe3424 100644 --- a/public/locales/fa-IR.json +++ b/public/locales/fa-IR.json @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "حذف ویدیو", + "removingVideo": "در حال حذف ویدیو…", + "failedToRemoveVideo": "حذف ویدیو ناموفق بود", + "markAsUnwatched": "علامت‌گذاری به‌عنوان دیده‌نشده", + "markingAsUnwatched": "در حال علامت‌گذاری به‌عنوان دیده‌نشده…", + "failedToMarkAsUnwatched": "علامت‌گذاری به‌عنوان دیده‌نشده ناموفق بود" + }, "screenshotButton": { "enable": { "label": "Screenshot button", diff --git a/public/locales/fr-FR.json b/public/locales/fr-FR.json index 6199dbc03..758b336d9 100644 --- a/public/locales/fr-FR.json +++ b/public/locales/fr-FR.json @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "Supprimer la vidéo", + "removingVideo": "Suppression de la vidéo…", + "failedToRemoveVideo": "Échec de la suppression de la vidéo", + "markAsUnwatched": "Marquer comme non vue", + "markingAsUnwatched": "Marquage comme non vue…", + "failedToMarkAsUnwatched": "Échec du marquage comme non vue" + }, "screenshotButton": { "enable": { "label": "Bouton de capture d'écran", diff --git a/public/locales/he-IL.json b/public/locales/he-IL.json index 7516ab1a3..6a0cdf330 100644 --- a/public/locales/he-IL.json +++ b/public/locales/he-IL.json @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "הסר וידאו", + "removingVideo": "מסיר וידאו…", + "failedToRemoveVideo": "נכשל בהסרת הווידאו", + "markAsUnwatched": "סמן כלא נצפה", + "markingAsUnwatched": "מסמן כלא נצפה…", + "failedToMarkAsUnwatched": "נכשל בסימון כלא נצפה" + }, "screenshotButton": { "enable": { "label": "Screenshot button", diff --git a/public/locales/hi-IN.json b/public/locales/hi-IN.json index 00eeb9da0..4ec735a22 100644 --- a/public/locales/hi-IN.json +++ b/public/locales/hi-IN.json @@ -303,7 +303,7 @@ }, "enablePlaylistManagementButtons": { "label": "प्लेलिस्ट प्रबंधन बटन सक्षम करें", - "title": "प्लेलिस्ट आइटम में ऐसे बटन जोड़ता है जिनसे वीडियो को प्लेलिस्ट से हटाया जा सके या उन्हें 'न देखा हुआ' के रूप में चिह्नित किया जा सके" + "title": "प्लेलिस्ट आइटम में ऐसे बटन जोड़ता है जिनसे वीडियो को प्लेलिस्ट से हटाया जा सके या उन्हें 'न देखा हुआ' के रूप में चिह्नित किया जा सके"x }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "वीडियो हटाएं", + "removingVideo": "वीडियो हटाया जा रहा है…", + "failedToRemoveVideo": "वीडियो हटाने में विफल", + "markAsUnwatched": "अनदेखा के रूप में चिह्नित करें", + "markingAsUnwatched": "अनदेखा के रूप में चिह्नित किया जा रहा है…", + "failedToMarkAsUnwatched": "अनदेखा के रूप में चिह्नित करने में विफल" + }, "screenshotButton": { "enable": { "label": "Screenshot button", diff --git a/public/locales/it-IT.json b/public/locales/it-IT.json index 5e9636711..7ef31ac58 100644 --- a/public/locales/it-IT.json +++ b/public/locales/it-IT.json @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "Rimuovi video", + "removingVideo": "Rimozione del video in corso…", + "failedToRemoveVideo": "Impossibile rimuovere il video", + "markAsUnwatched": "Segna come non visto", + "markingAsUnwatched": "Contrassegno come non visto in corso…", + "failedToMarkAsUnwatched": "Impossibile contrassegnare come non visto" + }, "screenshotButton": { "enable": { "label": "Pulsante Schermata", diff --git a/public/locales/ja-JP.json b/public/locales/ja-JP.json index 8520216f9..5cc914d3d 100644 --- a/public/locales/ja-JP.json +++ b/public/locales/ja-JP.json @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "動画を削除する", + "removingVideo": "動画を削除中…", + "failedToRemoveVideo": "動画を削除できませんでした", + "markAsUnwatched": "未視聴としてマークする", + "markingAsUnwatched": "未視聴としてマーク中…", + "failedToMarkAsUnwatched": "未視聴としてマークできませんでした" + }, "screenshotButton": { "enable": { "label": "スクリーンショットボタン", diff --git a/public/locales/ko-KR.json b/public/locales/ko-KR.json index a2768ab6a..d53ef8e3f 100644 --- a/public/locales/ko-KR.json +++ b/public/locales/ko-KR.json @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "동영상 제거", + "removingVideo": "동영상을 제거하는 중…", + "failedToRemoveVideo": "동영상을 제거하지 못했습니다", + "markAsUnwatched": "시청하지 않음으로 표시", + "markingAsUnwatched": "시청하지 않음으로 표시 중…", + "failedToMarkAsUnwatched": "시청하지 않음으로 표시하지 못했습니다" + }, "screenshotButton": { "enable": { "label": "스크린샷 버튼", diff --git a/public/locales/nl-NL.json b/public/locales/nl-NL.json index 2ec42f396..fc65b4677 100644 --- a/public/locales/nl-NL.json +++ b/public/locales/nl-NL.json @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "Video verwijderen", + "removingVideo": "Video wordt verwijderd…", + "failedToRemoveVideo": "Video verwijderen mislukt", + "markAsUnwatched": "Markeren als niet bekeken", + "markingAsUnwatched": "Markeren als niet bekeken…", + "failedToMarkAsUnwatched": "Markeren als niet bekeken mislukt" + }, "screenshotButton": { "enable": { "label": "Schermafbeelding knop", diff --git a/public/locales/pl-PL.json b/public/locales/pl-PL.json index b709ed747..38d4b1ccb 100644 --- a/public/locales/pl-PL.json +++ b/public/locales/pl-PL.json @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "Usuń wideo", + "removingVideo": "Usuwanie wideo…", + "failedToRemoveVideo": "Nie udało się usunąć wideo", + "markAsUnwatched": "Oznacz jako nieobejrzane", + "markingAsUnwatched": "Oznaczanie jako nieobejrzane…", + "failedToMarkAsUnwatched": "Nie udało się oznaczyć jako nieobejrzane" + }, "screenshotButton": { "enable": { "label": "Screenshot button", diff --git a/public/locales/pt-BR.json b/public/locales/pt-BR.json index d72cfe959..4a2623270 100644 --- a/public/locales/pt-BR.json +++ b/public/locales/pt-BR.json @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "Remover vídeo", + "removingVideo": "Removendo vídeo…", + "failedToRemoveVideo": "Falha ao remover vídeo", + "markAsUnwatched": "Marcar como não assistido", + "markingAsUnwatched": "Marcando como não assistido…", + "failedToMarkAsUnwatched": "Falha ao marcar como não assistido" + }, "screenshotButton": { "enable": { "label": "Botão de captura de tela", diff --git a/public/locales/ru-RU.json b/public/locales/ru-RU.json index f1fbbf130..c6df75f38 100644 --- a/public/locales/ru-RU.json +++ b/public/locales/ru-RU.json @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "Удалить видео", + "removingVideo": "Удаление видео…", + "failedToRemoveVideo": "Не удалось удалить видео", + "markAsUnwatched": "Отметить как непросмотренное", + "markingAsUnwatched": "Отмечаю как непросмотренное…", + "failedToMarkAsUnwatched": "Не удалось отметить как непросмотренное" + }, "screenshotButton": { "enable": { "label": "Включить кнопку «Скриншот»", diff --git a/public/locales/sv-SE.json b/public/locales/sv-SE.json index fd764a715..438fd1534 100644 --- a/public/locales/sv-SE.json +++ b/public/locales/sv-SE.json @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "Ta bort video", + "removingVideo": "Tar bort video…", + "failedToRemoveVideo": "Kunde inte ta bort video", + "markAsUnwatched": "Markera som osedd", + "markingAsUnwatched": "Markerar som osedd…", + "failedToMarkAsUnwatched": "Kunde inte markera som osedd" + }, "screenshotButton": { "enable": { "label": "Skärmbildsknapp", diff --git a/public/locales/tr-TR.json b/public/locales/tr-TR.json index dd18d95d3..faea016b1 100644 --- a/public/locales/tr-TR.json +++ b/public/locales/tr-TR.json @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "Videoyu kaldır", + "removingVideo": "Video kaldırılıyor…", + "failedToRemoveVideo": "Video kaldırılamadı", + "markAsUnwatched": "İzlenmedi olarak işaretle", + "markingAsUnwatched": "İzlenmedi olarak işaretleniyor…", + "failedToMarkAsUnwatched": "İzlenmedi olarak işaretlenemedi" + }, "screenshotButton": { "enable": { "label": "Ekran görüntüsü tuşunu etkinleştir", diff --git a/public/locales/uk-UA.json b/public/locales/uk-UA.json index 7d68f5860..e68246b79 100644 --- a/public/locales/uk-UA.json +++ b/public/locales/uk-UA.json @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "Видалити відео", + "removingVideo": "Видалення відео…", + "failedToRemoveVideo": "Не вдалося видалити відео", + "markAsUnwatched": "Позначити як не переглянуте", + "markingAsUnwatched": "Позначення як не переглянуте…", + "failedToMarkAsUnwatched": "Не вдалося позначити як не переглянуте" + }, "screenshotButton": { "enable": { "label": "Screenshot button", diff --git a/public/locales/vi-VN.json b/public/locales/vi-VN.json index 714e527fe..49e8ab60d 100644 --- a/public/locales/vi-VN.json +++ b/public/locales/vi-VN.json @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "Xóa video", + "removingVideo": "Đang xóa video…", + "failedToRemoveVideo": "Không thể xóa video", + "markAsUnwatched": "Đánh dấu là chưa xem", + "markingAsUnwatched": "Đang đánh dấu là chưa xem…", + "failedToMarkAsUnwatched": "Không thể đánh dấu là chưa xem" + }, "screenshotButton": { "enable": { "label": "Screenshot button", diff --git a/public/locales/zh-CN.json b/public/locales/zh-CN.json index 8e5305f36..e0fff7453 100644 --- a/public/locales/zh-CN.json +++ b/public/locales/zh-CN.json @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "移除视频", + "removingVideo": "正在移除视频…", + "failedToRemoveVideo": "移除视频失败", + "markAsUnwatched": "标记为未观看", + "markingAsUnwatched": "正在标记为未观看…", + "failedToMarkAsUnwatched": "标记为未观看失败" + }, "screenshotButton": { "enable": { "label": "屏幕截图按钮", diff --git a/public/locales/zh-TW.json b/public/locales/zh-TW.json index d0f95e98c..9d6fbb4ed 100644 --- a/public/locales/zh-TW.json +++ b/public/locales/zh-TW.json @@ -492,6 +492,14 @@ } } }, + "playlistManagementButtons": { + "removeVideo": "移除影片", + "removingVideo": "正在移除影片…", + "failedToRemoveVideo": "移除影片失敗", + "markAsUnwatched": "標記為未觀看", + "markingAsUnwatched": "正在標記為未觀看…", + "failedToMarkAsUnwatched": "標記為未觀看失敗" + }, "screenshotButton": { "enable": { "label": "螢幕截圖按鈕", diff --git a/src/features/playlistManagementButtons/index.ts b/src/features/playlistManagementButtons/index.ts index 31e6db16a..65ea67019 100644 --- a/src/features/playlistManagementButtons/index.ts +++ b/src/features/playlistManagementButtons/index.ts @@ -21,6 +21,7 @@ if (window.trustedTypes && !window.trustedTypes.defaultPolicy) { const PLAYLIST_ITEM_SELECTOR = "ytd-playlist-video-list-renderer ytd-playlist-panel-video-renderer, ytd-playlist-video-list-renderer ytd-playlist-video-renderer"; +const TRANSLATION_KEY_PREFIX = "settings.sections.playlistManagementButtons"; let playlistObserver: MutationObserver | null = null; @@ -67,11 +68,11 @@ export async function enablePlaylistManagementButtons() { const removeButton = document.createElement("button"); removeButton.innerHTML = renderToString(React.createElement(FaTrash, { color: "red", size: 18 })); removeButton.className = "yte-remove-button"; - removeButton.title = "Remove video"; + removeButton.title = window.i18nextInstance?.t(`${TRANSLATION_KEY_PREFIX}.removeVideo`); removeButton.onclick = async () => { const { innerHTML: originalHTML, title: originalTitle } = removeButton; removeButton.disabled = true; - removeButton.title = "Removing video..."; + removeButton.title = window.i18nextInstance?.t(`${TRANSLATION_KEY_PREFIX}.removingVideo`); removeButton.innerHTML = renderToString(React.createElement(FaSpinner, { color: "gray", size: 18 })); removeButton.classList.add("yte-spinning"); try { @@ -79,12 +80,11 @@ export async function enablePlaylistManagementButtons() { await youtube.playlist.removeVideos(playlistId, [setVideoId]); item.remove(); } catch (err) { - console.error("Failed to remove video:", err); const { listener } = createTooltip({ element: removeButton, featureName: "playlistManagementButtons", id: "yte-feature-playlistManagementButtons-tooltip", - text: `Failed to remove video: ${err instanceof Error ? err.message : String(err)}` + text: `${window.i18nextInstance?.t(`${TRANSLATION_KEY_PREFIX}.failedToRemoveVideo`)}: ${err instanceof Error ? err.message : String(err)}` }); listener(); } finally { @@ -98,11 +98,11 @@ export async function enablePlaylistManagementButtons() { const resetButton = document.createElement("button"); resetButton.innerHTML = renderToString(React.createElement(FaUndoAlt, { color: "red", size: 18 })); resetButton.className = "yte-reset-button"; - resetButton.title = "Mark as unwatched"; + resetButton.title = window.i18nextInstance?.t(`${TRANSLATION_KEY_PREFIX}.markAsUnwatched`); resetButton.onclick = async () => { const { innerHTML: originalHTML, title: originalTitle } = resetButton; resetButton.disabled = true; - resetButton.title = "Marking as unwatched..."; + resetButton.title = window.i18nextInstance?.t(`${TRANSLATION_KEY_PREFIX}.markingAsUnwatched`); resetButton.innerHTML = renderToString(React.createElement(FaSpinner, { color: "gray", size: 18 })); resetButton.classList.add("yte-spinning"); @@ -111,12 +111,11 @@ export async function enablePlaylistManagementButtons() { await history.removeVideo(setVideoId, 5); item.querySelector("#overlays ytd-thumbnail-overlay-resume-playback-renderer")?.remove(); } catch (err) { - console.error("Failed to reset video:", err); const { listener } = createTooltip({ element: resetButton, featureName: "playlistManagementButtons", id: "yte-feature-playlistManagementButtons-tooltip", - text: `Failed to reset video: ${err instanceof Error ? err.message : String(err)}` + text: `${window.i18nextInstance?.t(`${TRANSLATION_KEY_PREFIX}.failedToMarkAsUnwatched`)}: ${err instanceof Error ? err.message : String(err)}` }); listener(); } finally { From 90082f71751270416686f6abf18f2c50e741a16a Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Tue, 14 Oct 2025 16:22:49 -0400 Subject: [PATCH 38/70] chore: update locale percentages --- src/i18n/constants.ts | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/i18n/constants.ts b/src/i18n/constants.ts index 41bf573f5..6a5f7c2b5 100644 --- a/src/i18n/constants.ts +++ b/src/i18n/constants.ts @@ -26,27 +26,27 @@ export const availableLocales = [ export const localePercentages: Record = { "ca-ES": 0, "cs-CZ": 0, - "de-DE": 25, + "de-DE": 24, "en-GB": 1, "en-US": 100, - "es-ES": 44, + "es-ES": 43, "fa-IR": 0, "fr-FR": 46, "he-IL": 0, "hi-IN": 0, - "it-IT": 100, - "ja-JP": 93, - "ko-KR": 82, - "nl-NL": 92, + "it-IT": 98, + "ja-JP": 91, + "ko-KR": 81, + "nl-NL": 90, "pl-PL": 8, - "pt-BR": 98, - "ru-RU": 93, - "sv-SE": 100, + "pt-BR": 96, + "ru-RU": 98, + "sv-SE": 97, "tr-TR": 97, "uk-UA": 35, "vi-VN": 0, - "zh-CN": 100, - "zh-TW": 93 + "zh-CN": 98, + "zh-TW": 91 }; export const localeDirection: Record = { "ca-ES": "ltr", From 8e8dc26dc2b79b58808d950048d0749d5a45256d Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Tue, 14 Oct 2025 19:29:36 -0400 Subject: [PATCH 39/70] fix: Make player buttons match new layout --- src/features/buttonPlacement/index.css | 26 ++++++++++++++++++++++++++ src/features/buttonPlacement/index.ts | 1 + src/features/buttonPlacement/utils.ts | 15 ++++++++------- 3 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 src/features/buttonPlacement/index.css diff --git a/src/features/buttonPlacement/index.css b/src/features/buttonPlacement/index.css new file mode 100644 index 000000000..e377a211b --- /dev/null +++ b/src/features/buttonPlacement/index.css @@ -0,0 +1,26 @@ +.yte-button-player-controls-left { + margin: var(--yt-delhi-pill-top-height, 12px) 0 var(--yt-delhi-pill-top-height, 12px) 12px; + height: var(--yt-delhi-pill-height, 48px) !important; + border-radius: 28px; + -webkit-backdrop-filter: var(--yt-frosted-glass-backdrop-filter-override, blur(16px)) !important; + backdrop-filter: var(--yt-frosted-glass-backdrop-filter-override, blur(16px)); + background: var(--yt-spec-overlay-background-medium-light, rgba(0, 0, 0, .3)) !important; + text-shadow: 0 0 2px #000; + padding: 0; + position: relative; +} + +.ytp-delhi-modern.ytp-big-mode .yte-button-player-controls-left { + margin-top: calc((var(--yt-delhi-big-mode-bottom-controls-height, 96px) - var(--yt-delhi-big-mode-pill-height, 56px))/2) !important; + height: var(--yt-delhi-big-mode-pill-height, 56px) !important; + width: 56px !important; +} + +.yte-button-below-player { + place-content: center; + display: flex; + flex-wrap: wrap; + z-index: 0; + height: 48px; + width: 48px; +} \ No newline at end of file diff --git a/src/features/buttonPlacement/index.ts b/src/features/buttonPlacement/index.ts index b9b35d49d..27a734fa1 100644 --- a/src/features/buttonPlacement/index.ts +++ b/src/features/buttonPlacement/index.ts @@ -1,3 +1,4 @@ +import "./index.css"; import type { GetIconType } from "@/src/icons"; import type { AllButtonNames, ButtonPlacement, MultiButtonNames, SingleButtonFeatureNames } from "@/src/types"; diff --git a/src/features/buttonPlacement/utils.ts b/src/features/buttonPlacement/utils.ts index 392c76884..ae0ca27c2 100644 --- a/src/features/buttonPlacement/utils.ts +++ b/src/features/buttonPlacement/utils.ts @@ -51,16 +51,17 @@ export async function makeFeatureButton Date: Wed, 15 Oct 2025 15:04:17 -0400 Subject: [PATCH 40/70] fix: update tooltip for Modern Delhi player --- public/contentStyle.css | 22 +++++++++++----------- src/utils/utilities.ts | 13 ++++++++++--- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/public/contentStyle.css b/public/contentStyle.css index 693e5bb7c..708434ceb 100644 --- a/public/contentStyle.css +++ b/public/contentStyle.css @@ -1,22 +1,22 @@ .yte-button-tooltip { - font-size: 13px !important; - font-weight: 500 !important; - line-height: 15px !important; + font-size: 13px; + font-weight: 500; + line-height: 15px; position: fixed !important; + -webkit-backdrop-filter: var(--yt-frosted-glass-backdrop-filter-override, blur(16px)) !important; + backdrop-filter: var(--yt-frosted-glass-backdrop-filter-override, blur(16px)) !important; padding: 5px 9px; transform: translate(-50%, -150%) !important; pointer-events: none !important; color: #eee !important; - border-radius: 2px !important; - background-color: rgba(28, 28, 28, 0.9) !important; - text-shadow: 0 0 2px rgb(0, 0, 0, 0.5) !important; + border-radius: 8px !important; + background-color: var(--yt-spec-overlay-background-medium-light, rgba(0, 0, 0, .3)) !important; + text-shadow: 0 0 2px #000 !important; } -body.no-scroll .yte-button-tooltip { - font-size: 20px !important; +.ytp-big-mode .yte-button-tooltip { line-height: 22px !important; - padding: 8px 9px !important; - transform: translate(-50%, -75%) !important; + font: 20px !important } .maximized_chapter { @@ -63,4 +63,4 @@ body.no-scroll .yte-button-tooltip { .ytp-right-controls { display: flex !important; -} +} \ No newline at end of file diff --git a/src/utils/utilities.ts b/src/utils/utilities.ts index 0ade8bedc..e3d65965e 100644 --- a/src/utils/utilities.ts +++ b/src/utils/utilities.ts @@ -246,10 +246,11 @@ export function createTooltip({ update: () => void; } { function makeTooltip() { + const isBigMode = document.querySelector(".ytp-big-mode") !== null; const rect = element.getBoundingClientRect(); // Create tooltip element const tooltip = createStyledElement({ - classlist: ["yte-button-tooltip", "ytp-tooltip", "ytp-rounded-tooltip", "ytp-bottom"], + classlist: ["yte-button-tooltip", "ytp-tooltip", "ytp-bottom"], elementId: id, elementType: "div", styles: { @@ -259,7 +260,7 @@ export function createTooltip({ }), ...conditionalStyles({ condition: direction === "up", - top: `${rect.top - 2}px` + top: `${rect.top - (isBigMode ? 20 : 6)}px` }), ...conditionalStyles({ condition: direction === "down", @@ -297,7 +298,13 @@ export function createTooltip({ tooltip.remove(); } const tooltip = makeTooltip(); - document.body.appendChild(tooltip); + const isButtonBelowPlayer = element?.parentElement?.id === "yte-button-container"; + const playerContainer = document.querySelector("#movie_player"); + if (isButtonBelowPlayer) document.body.appendChild(tooltip); + else { + if (playerContainer) playerContainer.appendChild(tooltip); + else document.body.appendChild(tooltip); + } }, remove: () => { const tooltip = document.getElementById(id); From b4dea7d9d41e57cf89770f2ad654000c2ade2aa5 Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Wed, 15 Oct 2025 15:04:58 -0400 Subject: [PATCH 41/70] fix: update feature menu for Modern Delhi player #1017 --- src/features/featureMenu/index.ts | 24 ++++++------------------ src/features/featureMenu/utils.ts | 3 ++- 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/src/features/featureMenu/index.ts b/src/features/featureMenu/index.ts index 038fdeebd..a45e11314 100644 --- a/src/features/featureMenu/index.ts +++ b/src/features/featureMenu/index.ts @@ -3,8 +3,6 @@ import type { FeatureMenuOpenType } from "@/src/types"; import eventManager from "@/src/utils/EventManager"; import { createStyledElement, createSVGElement, createTooltip, isWatchPage, waitForAllElements, waitForSpecificMessage } from "@/src/utils/utilities"; -import { isNewYouTubeVideoLayout } from "../../utils/utilities"; - // Function to enable the feature menu export async function enableFeatureMenu() { const featureMenuButtonExists = document.querySelector("#yte-feature-menu-button") !== null; @@ -16,12 +14,7 @@ export function setupFeatureMenuEventListeners(featureMenuOpenType: FeatureMenuO eventManager.removeEventListeners("featureMenu"); const settingsButton = document.querySelector("button.ytp-settings-button"); if (!settingsButton) return; - const playerContainer = - isWatchPage() ? - document.querySelector( - isNewYouTubeVideoLayout() ? "div#player-container.ytd-watch-grid" : "div#player-container.ytd-watch-flexy" - ) - : null; + const playerContainer = isWatchPage() ? document.querySelector("#movie_player") : null; if (!playerContainer) return; const bottomControls = document.querySelector("div.ytp-chrome-bottom"); if (!bottomControls) return; @@ -197,12 +190,7 @@ async function createFeatureMenuButton() { // Get references to various elements and check their existence const settingsButton = document.querySelector("button.ytp-settings-button"); if (!settingsButton) return; - const playerContainer = - isWatchPage() ? - document.querySelector( - isNewYouTubeVideoLayout() ? "div#player-container.ytd-watch-grid" : "div#player-container.ytd-watch-flexy" - ) - : null; + const playerContainer = isWatchPage() ? document.querySelector("#movie_player") : null; if (!playerContainer) return; // Insert the feature menu button and feature menu itself settingsButton.insertAdjacentElement("beforebegin", featureMenuButton); @@ -221,12 +209,12 @@ function makeFeatureMenuIcon() { "svg", { fill: "white", - height: "48px", - viewBox: "0 0 36 36", - width: "48px" + height: "24px", + viewBox: "0 0 24 24", + width: "24px" }, createSVGElement("path", { - d: "M 9.1273596,13.56368 H 13.56368 V 9.1273596 H 9.1273596 Z M 15.78184,26.872641 h 4.43632 V 22.43632 h -4.43632 z m -6.6544804,0 H 13.56368 V 22.43632 H 9.1273596 Z m 0,-6.654481 H 13.56368 V 15.78184 H 9.1273596 Z m 6.6544804,0 h 4.43632 V 15.78184 H 15.78184 Z M 22.43632,9.1273596 V 13.56368 h 4.436321 V 9.1273596 Z M 15.78184,13.56368 h 4.43632 V 9.1273596 h -4.43632 z m 6.65448,6.65448 h 4.436321 V 15.78184 H 22.43632 Z m 0,6.654481 h 4.436321 V 22.43632 H 22.43632 Z", + d: "M 3.1273593,7.5636797 H 7.5636797 V 3.1273593 H 3.1273593 Z M 9.7818397,20.872641 H 14.21816 V 16.43632 H 9.7818397 Z m -6.6544804,0 H 7.5636797 V 16.43632 H 3.1273593 Z m 0,-6.654481 H 7.5636797 V 9.7818397 H 3.1273593 Z m 6.6544804,0 H 14.21816 V 9.7818397 H 9.7818397 Z M 16.43632,3.1273593 v 4.4363204 h 4.436321 V 3.1273593 Z M 9.7818397,7.5636797 H 14.21816 V 3.1273593 H 9.7818397 Z M 16.43632,14.21816 h 4.436321 V 9.7818397 H 16.43632 Z m 0,6.654481 h 4.436321 V 16.43632 H 16.43632 Z", fill: "white" }) ); diff --git a/src/features/featureMenu/utils.ts b/src/features/featureMenu/utils.ts index 05a675e77..fb9fa9006 100644 --- a/src/features/featureMenu/utils.ts +++ b/src/features/featureMenu/utils.ts @@ -59,6 +59,7 @@ export async function addFeatureItemToMenu("#yte-feature-menu-button"); if (featureMenuButton) { - featureMenuButton.style.display = "initial"; + featureMenuButton.style.display = "flex"; } } /** From f73603219bd59c3916900be16fa19dd1c9c7af47 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 15 Oct 2025 19:06:12 +0000 Subject: [PATCH 42/70] docs: update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d070d4038..e2b72ffc6 100755 --- a/README.md +++ b/README.md @@ -318,7 +318,8 @@ Contributions to the YouTube Enhancer Extension are welcome! If you'd like to co Lexiosity
Lexiosity

🐛 HelloIamarandomperson
HelloIamarandomperson

💻 The Major
The Major

🤔 - Dave Nicolson
Dave Nicolson

💻 + Dave Nicolson
Dave Nicolson

💻 + Dheatly23
Dheatly23

💻 From d66a3cb5f908a3fbc65285df821d2f7500f12df5 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Wed, 15 Oct 2025 19:06:13 +0000 Subject: [PATCH 43/70] docs: update .all-contributorsrc --- .all-contributorsrc | 493 ++++++++++++++++++++++---------------------- 1 file changed, 251 insertions(+), 242 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index ac9195dea..28e458864 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -1,244 +1,253 @@ { - "commitConvention": "angular", - "commitType": "docs", - "contributors": [ - { - "avatar_url": "https://avatars.githubusercontent.com/u/46955469?v=4", - "contributions": [ - "translation", - "code", - "bug" - ], - "login": "mist8kengas", - "name": "mist8kengas", - "profile": "https://hioctane.org" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/45531575?v=4", - "contributions": [ - "design", - "code", - "translation" - ], - "login": "VampireChicken12", - "name": "Nathan", - "profile": "https://hikari-bot.com" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/51011212?v=4", - "contributions": [ - "bug" - ], - "login": "commonly-ts", - "name": "Commonly", - "profile": "https://github.com/commonly-ts" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/30407412?v=4", - "contributions": [ - "translation" - ], - "login": "eduardozgz", - "name": "Eduardo Aznar", - "profile": "https://eduardozgz.com" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/42092626?v=4", - "contributions": [ - "ideas" - ], - "login": "lamyergeier", - "name": "Lamyergeier", - "profile": "https://github.com/lamyergeier" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/670216?v=4", - "contributions": [ - "translation" - ], - "login": "SleepyPrince", - "name": "Jackal Chan", - "profile": "https://github.com/SleepyPrince" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/63370734?v=4", - "contributions": [ - "translation", - "code" - ], - "login": "livingflore", - "name": "livingflore", - "profile": "http://livingflore.me" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/79649679?v=4", - "contributions": [ - "translation" - ], - "login": "crvt7", - "name": "Patryk Popardowski", - "profile": "https://github.com/crvt7" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/48157083?v=4", - "contributions": [ - "translation" - ], - "login": "luisaosan", - "name": "Luis Felipe", - "profile": "https://github.com/luisaosan" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/74506415?v=4", - "contributions": [ - "translation" - ], - "login": "v1ctorio", - "name": "Vic", - "profile": "http://nosesisaid.com" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/41172201?v=4", - "contributions": [ - "bug" - ], - "login": "rado84-github", - "name": "rado84", - "profile": "https://github.com/rado84-github" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/54115653?v=4", - "contributions": [ - "translation" - ], - "login": "pulsar2105", - "name": "pulsar2105", - "profile": "https://github.com/pulsar2105" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/12037193?v=4", - "contributions": [ - "translation" - ], - "login": "G-Ran-Berg", - "name": "Granberg", - "profile": "https://github.com/G-Ran-Berg" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/166921574?v=4", - "contributions": [ - "translation" - ], - "login": "Secret-Peter", - "name": "Secret-Peter", - "profile": "https://github.com/Secret-Peter" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/78204388?v=4", - "contributions": [ - "ideas" - ], - "login": "szaumoor", - "name": "Marcos C.R.", - "profile": "https://github.com/szaumoor" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/62484941?v=4", - "contributions": [ - "ideas" - ], - "login": "charlymoon741", - "name": "Carlos Ramos Luna", - "profile": "https://github.com/charlymoon741" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/79510039?v=4", - "contributions": [ - "translation" - ], - "login": "Angsimosaurus", - "name": "앙시모사우루스", - "profile": "https://github.com/Angsimosaurus" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/12016338?v=4", - "contributions": [ - "ideas" - ], - "login": "Mabra51", - "name": "Mabra51", - "profile": "https://github.com/Mabra51" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/30407412?v=4", - "contributions": [ - "translation", - "code" - ], - "login": "eduardozgz", - "name": "Eduardo Aznar", - "profile": "https://eduardozgz.com" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/90166733?v=4", - "contributions": [ - "ideas", - "design" - ], - "login": "at-pyrix", - "name": "pyrix", - "profile": "https://notyasho.netlify.app/blogs" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/150627108?v=4", - "contributions": [ - "bug" - ], - "login": "CaiCheng-Li", - "name": "CaiCheng-Li", - "profile": "https://github.com/CaiCheng-Li" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/121247693?v=4", - "contributions": [ - "bug" - ], - "login": "Lexiosity", - "name": "Lexiosity", - "profile": "https://sites.google.com/u/0/d/1OdIAWachs1svsjOS4lT9jqwlE632B6rP" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/136181387?v=4", - "contributions": [ - "code" - ], - "login": "HelloIamarandomperson", - "name": "HelloIamarandomperson", - "profile": "https://github.com/HelloIamarandomperson" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/94167392?v=4", - "contributions": [ - "ideas" - ], - "login": "TheMajor-GitHub", - "name": "The Major", - "profile": "https://github.com/TheMajor-GitHub" - }, - { - "avatar_url": "https://avatars.githubusercontent.com/u/2276355?v=4", - "contributions": [ - "code" - ], - "login": "dnicolson", - "name": "Dave Nicolson", - "profile": "https://github.com/dnicolson" - } - ], - "contributorsPerLine": 7, - "files": [ - "README.md" - ], - "projectName": "extension", - "projectOwner": "YouTube-Enhancer" + "commitConvention": "angular", + "commitType": "docs", + "contributors": [ + { + "avatar_url": "https://avatars.githubusercontent.com/u/46955469?v=4", + "contributions": [ + "translation", + "code", + "bug" + ], + "login": "mist8kengas", + "name": "mist8kengas", + "profile": "https://hioctane.org" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/45531575?v=4", + "contributions": [ + "design", + "code", + "translation" + ], + "login": "VampireChicken12", + "name": "Nathan", + "profile": "https://hikari-bot.com" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/51011212?v=4", + "contributions": [ + "bug" + ], + "login": "commonly-ts", + "name": "Commonly", + "profile": "https://github.com/commonly-ts" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/30407412?v=4", + "contributions": [ + "translation" + ], + "login": "eduardozgz", + "name": "Eduardo Aznar", + "profile": "https://eduardozgz.com" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/42092626?v=4", + "contributions": [ + "ideas" + ], + "login": "lamyergeier", + "name": "Lamyergeier", + "profile": "https://github.com/lamyergeier" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/670216?v=4", + "contributions": [ + "translation" + ], + "login": "SleepyPrince", + "name": "Jackal Chan", + "profile": "https://github.com/SleepyPrince" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/63370734?v=4", + "contributions": [ + "translation", + "code" + ], + "login": "livingflore", + "name": "livingflore", + "profile": "http://livingflore.me" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/79649679?v=4", + "contributions": [ + "translation" + ], + "login": "crvt7", + "name": "Patryk Popardowski", + "profile": "https://github.com/crvt7" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/48157083?v=4", + "contributions": [ + "translation" + ], + "login": "luisaosan", + "name": "Luis Felipe", + "profile": "https://github.com/luisaosan" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/74506415?v=4", + "contributions": [ + "translation" + ], + "login": "v1ctorio", + "name": "Vic", + "profile": "http://nosesisaid.com" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/41172201?v=4", + "contributions": [ + "bug" + ], + "login": "rado84-github", + "name": "rado84", + "profile": "https://github.com/rado84-github" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/54115653?v=4", + "contributions": [ + "translation" + ], + "login": "pulsar2105", + "name": "pulsar2105", + "profile": "https://github.com/pulsar2105" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/12037193?v=4", + "contributions": [ + "translation" + ], + "login": "G-Ran-Berg", + "name": "Granberg", + "profile": "https://github.com/G-Ran-Berg" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/166921574?v=4", + "contributions": [ + "translation" + ], + "login": "Secret-Peter", + "name": "Secret-Peter", + "profile": "https://github.com/Secret-Peter" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/78204388?v=4", + "contributions": [ + "ideas" + ], + "login": "szaumoor", + "name": "Marcos C.R.", + "profile": "https://github.com/szaumoor" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/62484941?v=4", + "contributions": [ + "ideas" + ], + "login": "charlymoon741", + "name": "Carlos Ramos Luna", + "profile": "https://github.com/charlymoon741" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/79510039?v=4", + "contributions": [ + "translation" + ], + "login": "Angsimosaurus", + "name": "앙시모사우루스", + "profile": "https://github.com/Angsimosaurus" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/12016338?v=4", + "contributions": [ + "ideas" + ], + "login": "Mabra51", + "name": "Mabra51", + "profile": "https://github.com/Mabra51" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/30407412?v=4", + "contributions": [ + "translation", + "code" + ], + "login": "eduardozgz", + "name": "Eduardo Aznar", + "profile": "https://eduardozgz.com" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/90166733?v=4", + "contributions": [ + "ideas", + "design" + ], + "login": "at-pyrix", + "name": "pyrix", + "profile": "https://notyasho.netlify.app/blogs" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/150627108?v=4", + "contributions": [ + "bug" + ], + "login": "CaiCheng-Li", + "name": "CaiCheng-Li", + "profile": "https://github.com/CaiCheng-Li" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/121247693?v=4", + "contributions": [ + "bug" + ], + "login": "Lexiosity", + "name": "Lexiosity", + "profile": "https://sites.google.com/u/0/d/1OdIAWachs1svsjOS4lT9jqwlE632B6rP" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/136181387?v=4", + "contributions": [ + "code" + ], + "login": "HelloIamarandomperson", + "name": "HelloIamarandomperson", + "profile": "https://github.com/HelloIamarandomperson" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/94167392?v=4", + "contributions": [ + "ideas" + ], + "login": "TheMajor-GitHub", + "name": "The Major", + "profile": "https://github.com/TheMajor-GitHub" + }, + { + "avatar_url": "https://avatars.githubusercontent.com/u/2276355?v=4", + "contributions": [ + "code" + ], + "login": "dnicolson", + "name": "Dave Nicolson", + "profile": "https://github.com/dnicolson" + }, + { + "login": "Dheatly23", + "name": "Dheatly23", + "avatar_url": "https://avatars.githubusercontent.com/u/71598333?v=4", + "profile": "https://github.com/Dheatly23", + "contributions": [ + "code" + ] + } + ], + "contributorsPerLine": 7, + "files": [ + "README.md" + ], + "projectName": "extension", + "projectOwner": "YouTube-Enhancer" } From a87d68a0967ffc3e1d293f28b18448138f6c4589 Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Wed, 15 Oct 2025 16:00:46 -0400 Subject: [PATCH 44/70] fix(automatically disable ambient mode): update code for Modern Delhi UI --- src/features/automaticallyDisableAmbientMode/index.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/features/automaticallyDisableAmbientMode/index.ts b/src/features/automaticallyDisableAmbientMode/index.ts index e6c5f8f6b..83871bf9e 100644 --- a/src/features/automaticallyDisableAmbientMode/index.ts +++ b/src/features/automaticallyDisableAmbientMode/index.ts @@ -4,9 +4,6 @@ import { delay, isShortsPage, isWatchPage, waitForAllElements, waitForElement, w let ambientModeWasEnabled = false; -const AMBIENT_MODE_PATH_SELECTOR = - "path[d='M21 7v10H3V7h18m1-1H2v12h20V6zM11.5 2v3h1V2h-1zm1 17h-1v3h1v-3zM3.79 3 6 5.21l.71-.71L4.5 2.29 3.79 3zm2.92 16.5L6 18.79 3.79 21l.71.71 2.21-2.21zM19.5 2.29 17.29 4.5l.71.71L20.21 3l-.71-.71zm0 19.42.71-.71L18 18.79l-.71.71 2.21 2.21z']"; - export async function disableAutomaticallyDisableAmbientMode(): Promise { if (!ambientModeWasEnabled) return; await toggleAmbientMode(true); @@ -36,7 +33,7 @@ async function toggleAmbientMode(desiredState: boolean): Promise { settingsButton.click(); } const ambientModeMenuItem: Nullable = settingsPanelMenu.querySelector( - `.ytp-menuitem:has(.ytp-menuitem-icon svg ${AMBIENT_MODE_PATH_SELECTOR})` + `.ytp-menuitem:has(.ytp-menuitem-icon svg path[d='M12 .5C11.73 .5 11.48 .60 11.29 .79C11.10 .98 11 1.23 11 1.5V3.5C11 3.76 11.10 4.01 11.29 4.20C11.48 4.39 11.73 4.5 12 4.5C12.26 4.5 12.51 4.39 12.70 4.20C12.89 4.01 13 3.76 13 3.5V1.5C13 1.23 12.89 .98 12.70 .79C12.51 .60 12.26 .5 12 .5ZM3.79 1.29C3.61 1.46 3.51 1.70 3.50 1.94C3.48 2.19 3.56 2.43 3.72 2.63L3.79 2.70L5.29 4.20L5.37 4.27C5.56 4.42 5.80 4.50 6.04 4.49C6.29 4.47 6.52 4.37 6.70 4.20C6.87 4.02 6.97 3.79 6.99 3.54C7.00 3.30 6.92 3.06 6.77 2.86L6.70 2.79L5.20 1.29L5.13 1.22C4.93 1.06 4.69 .98 4.44 1.00C4.20 1.01 3.96 1.11 3.79 1.29ZM18.86 1.22L18.79 1.29L17.29 2.79L17.22 2.86C17.07 3.06 16.99 3.30 17.00 3.54C17.01 3.79 17.12 4.02 17.29 4.20C17.47 4.37 17.70 4.48 17.95 4.49C18.19 4.50 18.43 4.42 18.63 4.27L18.70 4.20L20.20 2.70L20.27 2.63C20.42 2.43 20.50 2.19 20.49 1.95C20.48 1.70 20.37 1.47 20.20 1.29C20.02 1.12 19.79 1.01 19.54 1.00C19.30 .99 19.06 1.07 18.86 1.22ZM19.20 6.01L19 6H5L4.79 6.01C4.30 6.06 3.84 6.29 3.51 6.65C3.18 7.02 2.99 7.50 3 8V16L3.01 16.20C3.05 16.66 3.26 17.08 3.58 17.41C3.91 17.73 4.33 17.94 4.79 17.99L5 18H19L19.20 17.98C19.66 17.94 20.08 17.73 20.41 17.41C20.73 17.08 20.94 16.66 20.99 16.20L21 16V8C20.99 7.50 20.81 7.02 20.48 6.66C20.15 6.29 19.69 6.06 19.20 6.01ZM5 16V8H19V16H5ZM17.29 19.79C17.11 19.96 17.01 20.20 17.00 20.44C16.98 20.69 17.06 20.93 17.22 21.13L17.29 21.20L18.79 22.70L18.86 22.77C19.06 22.92 19.30 23.00 19.54 22.99C19.79 22.98 20.02 22.87 20.20 22.70C20.37 22.52 20.48 22.29 20.49 22.04C20.50 21.80 20.42 21.56 20.27 21.36L20.20 21.29L18.70 19.79L18.63 19.72C18.43 19.56 18.19 19.48 17.94 19.50C17.70 19.51 17.46 19.61 17.29 19.79ZM5.37 19.72L5.29 19.79L3.79 21.29L3.72 21.36C3.57 21.56 3.49 21.80 3.50 22.04C3.51 22.29 3.62 22.52 3.79 22.70C3.97 22.87 4.20 22.98 4.45 22.99C4.69 23.00 4.93 22.92 5.13 22.77L5.20 22.70L6.70 21.20L6.77 21.13C6.92 20.93 7.00 20.69 6.99 20.45C6.97 20.20 6.87 19.97 6.70 19.79C6.52 19.62 6.29 19.52 6.04 19.50C5.80 19.49 5.56 19.57 5.37 19.72ZM12 19.5C11.73 19.5 11.48 19.60 11.29 19.79C11.10 19.98 11 20.23 11 20.5V22.5C11 22.76 11.10 23.01 11.29 23.20C11.48 23.39 11.73 23.5 12 23.5C12.26 23.5 12.51 23.39 12.70 23.20C12.89 23.01 13 22.76 13 22.5V20.5C13 20.23 12.89 19.98 12.70 19.79C12.51 19.60 12.26 19.5 12 19.5Z'])` ); if (!ambientModeMenuItem) { settingsMenu.classList.remove("hidden"); @@ -68,7 +65,7 @@ async function toggleAmbientMode(desiredState: boolean): Promise { } // Wait for ambient mode item const ambientModeItem = await waitForElement( - `div ytd-menu-popup-renderer tp-yt-paper-listbox > :has(tp-yt-paper-item svg ${AMBIENT_MODE_PATH_SELECTOR})` + `div ytd-menu-popup-renderer tp-yt-paper-listbox > :has(tp-yt-paper-item svg path[d='M12 .5a1 1 0 00-1 1v2a1 1 0 002 0v-2a1 1 0 00-1-1Zm6.793.793-1.5 1.5a1 1 0 101.414 1.414l1.5-1.5a1 1 0 10-1.414-1.414Zm-15 0a1 1 0 000 1.414l1.5 1.5a1 1 0 101.414-1.414l-1.5-1.5a1 1 0 00-1.414 0ZM19 6H5a2 2 0 00-2 2v8a2 2 0 002 2h14a2 2 0 002-2V8a2 2 0 00-2-2ZM5 16V8h14v8H5Zm12.293 3.792a1.001 1.001 0 000 1.415l1.5 1.5a1 1 0 001.414-1.415l-1.5-1.5a1 1 0 00-1.414 0Zm-12 0-1.5 1.5a1 1 0 101.414 1.415l1.5-1.5a1 1 0 10-1.414-1.415ZM12 19.5a1 1 0 00-1 1v2a1 1 0 002 0v-2a1 1 0 00-1-1Z'])` ); if (!ambientModeItem) { popupContainer.style.display = originalDisplay; From 1a696179b258eadc1d67cdd89b9df84f319fa4b7 Mon Sep 17 00:00:00 2001 From: Dheatly23 <71598333+Dheatly23@users.noreply.github.com> Date: Thu, 16 Oct 2025 09:21:17 +0700 Subject: [PATCH 45/70] Update Feature Menu Button for New Youtube UI --- src/features/featureMenu/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/features/featureMenu/index.ts b/src/features/featureMenu/index.ts index 038fdeebd..7a9fabe0a 100644 --- a/src/features/featureMenu/index.ts +++ b/src/features/featureMenu/index.ts @@ -221,12 +221,12 @@ function makeFeatureMenuIcon() { "svg", { fill: "white", - height: "48px", - viewBox: "0 0 36 36", - width: "48px" + height: "24px", + viewBox: "0 0 24 24", + width: "24px" }, createSVGElement("path", { - d: "M 9.1273596,13.56368 H 13.56368 V 9.1273596 H 9.1273596 Z M 15.78184,26.872641 h 4.43632 V 22.43632 h -4.43632 z m -6.6544804,0 H 13.56368 V 22.43632 H 9.1273596 Z m 0,-6.654481 H 13.56368 V 15.78184 H 9.1273596 Z m 6.6544804,0 h 4.43632 V 15.78184 H 15.78184 Z M 22.43632,9.1273596 V 13.56368 h 4.436321 V 9.1273596 Z M 15.78184,13.56368 h 4.43632 V 9.1273596 h -4.43632 z m 6.65448,6.65448 h 4.436321 V 15.78184 H 22.43632 Z m 0,6.654481 h 4.436321 V 22.43632 H 22.43632 Z", + d: "M 3.1273593,7.5636797 H 7.5636797 V 3.1273593 H 3.1273593 Z M 9.7818397,20.872641 H 14.21816 V 16.43632 H 9.7818397 Z m -6.6544804,0 H 7.5636797 V 16.43632 H 3.1273593 Z m 0,-6.654481 H 7.5636797 V 9.7818397 H 3.1273593 Z m 6.6544804,0 H 14.21816 V 9.7818397 H 9.7818397 Z M 16.43632,3.1273593 v 4.4363204 h 4.436321 V 3.1273593 Z M 9.7818397,7.5636797 H 14.21816 V 3.1273593 H 9.7818397 Z M 16.43632,14.21816 h 4.436321 V 9.7818397 H 16.43632 Z m 0,6.654481 h 4.436321 V 16.43632 H 16.43632 Z", fill: "white" }) ); From d838decf2b551ceb7aad5f5a3c94531b3ff29ecf Mon Sep 17 00:00:00 2001 From: Dave Nicolson Date: Sat, 18 Oct 2025 22:31:23 +0200 Subject: [PATCH 46/70] Replace API calls with YouTube.js --- package-lock.json | 32 ++++++- package.json | 3 +- src/features/playlistLength/index.ts | 9 +- src/features/playlistLength/utils.ts | 133 +++++++-------------------- src/utils/utilities.ts | 22 ----- 5 files changed, 67 insertions(+), 132 deletions(-) diff --git a/package-lock.json b/package-lock.json index 53aee375d..01807afc3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,6 @@ "dependencies": { "@formkit/auto-animate": "^0.9.0", "@monaco-editor/react": "^4.6.0", - "@rollup/rollup-linux-x64-gnu": "^4.14.3", "@tanstack/react-query": "^5.18.0", "dotenv": "^17.2.1", "globals": "^16.2.0", @@ -24,7 +23,8 @@ "safe-units": "^2.0.1", "tailwindcss-multi": "^0.4.0", "vite-plugin-css-injected-by-js": "^3.3.0", - "webextension-polyfill": "^0.12.0" + "webextension-polyfill": "^0.12.0", + "youtubei.js": "^16.0.1" }, "devDependencies": { "@eslint/compat": "^1.2.0", @@ -385,6 +385,12 @@ "node": ">=6.9.0" } }, + "node_modules/@bufbuild/protobuf": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.9.0.tgz", + "integrity": "sha512-rnJenoStJ8nvmt9Gzye8nkYd6V22xUAnu4086ER7h1zJ508vStko4pMvDeQ446ilDTFpV5wnoc5YS7XvMwwMqA==", + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, "node_modules/@colors/colors": { "version": "1.5.0", "dev": true, @@ -9454,6 +9460,15 @@ "node": ">= 8" } }, + "node_modules/meriyah": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/meriyah/-/meriyah-6.1.4.tgz", + "integrity": "sha512-Sz8FzjzI0kN13GK/6MVEsVzMZEPvOhnmmI1lU5+/1cGOiK3QUahntrNNtdVeihrO7t9JpoH75iMNXg6R6uWflQ==", + "license": "ISC", + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/micromatch": { "version": "4.0.8", "dev": true, @@ -15748,6 +15763,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/youtubei.js": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/youtubei.js/-/youtubei.js-16.0.1.tgz", + "integrity": "sha512-3802bCAGkBc2/G5WUTc0l/bO5mPYJbQAHL04d9hE9PnrDHoBUT8MN721Yqt4RCNncAXdHcfee9VdJy3Fhq1r5g==", + "funding": [ + "https://github.com/sponsors/LuanRT" + ], + "license": "MIT", + "dependencies": { + "@bufbuild/protobuf": "^2.0.0", + "meriyah": "^6.1.4" + } + }, "node_modules/zip-stream": { "version": "6.0.1", "dev": true, diff --git a/package.json b/package.json index ae33f1633..f942ebc54 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,8 @@ "safe-units": "^2.0.1", "tailwindcss-multi": "^0.4.0", "vite-plugin-css-injected-by-js": "^3.3.0", - "webextension-polyfill": "^0.12.0" + "webextension-polyfill": "^0.12.0", + "youtubei.js": "^16.0.1" }, "devDependencies": { "@eslint/compat": "^1.2.0", diff --git a/src/features/playlistLength/index.ts b/src/features/playlistLength/index.ts index 85f1cb8d9..75f9e6cf5 100644 --- a/src/features/playlistLength/index.ts +++ b/src/features/playlistLength/index.ts @@ -22,8 +22,7 @@ export async function enablePlaylistLength() { options: { enable_playlist_length, playlist_length_get_method: playlistLengthGetMethod, - playlist_watch_time_get_method: playlistWatchTimeGetMethod, - youtube_data_api_v3_key + playlist_watch_time_get_method: playlistWatchTimeGetMethod } } } = await waitForSpecificMessage("options", "request_data", "content"); @@ -31,10 +30,8 @@ export async function enablePlaylistLength() { if (!document.querySelector(playlistItemsSelector())) return; const { playlist, watch } = getHeaderSelectors(); await waitForAllElements([isWatchPageFlag ? watch : playlist, playlistItemsSelector()]); - const apiKey = youtube_data_api_v3_key || YouTube_Enhancer_Public_Youtube_Data_API_V3_Key; const pageType = isWatchPageFlag ? "watch" : "playlist"; documentObserver = await initPlaylistLength({ - apiKey, pageType, playlistLengthGetMethod, playlistWatchTimeGetMethod @@ -42,7 +39,6 @@ export async function enablePlaylistLength() { resizeObserver?.disconnect(); resizeObserver = new ResizeObserver(async () => { documentObserver = await initPlaylistLength({ - apiKey, pageType, playlistLengthGetMethod, playlistWatchTimeGetMethod @@ -51,7 +47,6 @@ export async function enablePlaylistLength() { resizeObserver.observe(document.documentElement); } async function initPlaylistLength({ - apiKey, pageType, playlistLengthGetMethod, playlistWatchTimeGetMethod @@ -59,7 +54,6 @@ async function initPlaylistLength({ documentObserver?.disconnect(); try { return await initializePlaylistLength({ - apiKey, pageType, playlistLengthGetMethod, playlistWatchTimeGetMethod @@ -67,7 +61,6 @@ async function initPlaylistLength({ } catch { return playlistLengthGetMethod === "html" ? null : ( initPlaylistLength({ - apiKey, pageType, playlistLengthGetMethod: "html", playlistWatchTimeGetMethod diff --git a/src/features/playlistLength/utils.ts b/src/features/playlistLength/utils.ts index 08a6031c3..1d0abbddb 100644 --- a/src/features/playlistLength/utils.ts +++ b/src/features/playlistLength/utils.ts @@ -1,16 +1,16 @@ -import { z } from "zod"; +import type PlaylistVideo from "youtubei.js/dist/src/parser/classes/PlaylistVideo"; -import type { Nullable, PlaylistLengthGetMethod, PlaylistWatchTimeGetMethod, VideoDetails, YouTubePlaylistItem } from "@/src/types"; +import { Innertube } from "youtubei.js/web"; + +import type { Nullable, PlaylistLengthGetMethod, PlaylistWatchTimeGetMethod, VideoDetails } from "@/src/types"; import eventManager from "@/src/utils/EventManager"; import { conditionalStyles, createStyledElement, - delay, formatDuration, isNewYouTubeVideoLayout, isWatchPage, - parseISO8601Duration, timeStringToSeconds, waitForAllElements } from "@/src/utils/utilities"; @@ -37,26 +37,7 @@ export const getHeaderSelectors = () => }) as const satisfies { playlist: string; watch: string }; export const playlistItemsSelector = () => isWatchPage() ? "ytd-playlist-panel-renderer:not([hidden]) div#container div#items" : "ytd-playlist-video-list-renderer div#contents"; -const youtubePlaylistResponseSchema = z.object({ - items: z.array(z.object({ contentDetails: z.object({ videoId: z.string() }) })), - nextPageToken: z.string().optional() -}); -const youtubeVideoDurationResponseSchema = z.object({ - items: z.array(z.object({ contentDetails: z.object({ duration: z.string() }) })) -}); -const youtubeDataAPIErrorSchema = z.object({ - error: z.object({ - code: z.number(), - errors: z.array( - z.object({ - reason: z.string() - }) - ), - message: z.string() - }) -}); export type PlaylistLengthParameters = { - apiKey: string; pageType: PageType; playlistLengthGetMethod: PlaylistLengthGetMethod; playlistWatchTimeGetMethod: PlaylistWatchTimeGetMethod; @@ -163,39 +144,7 @@ export function createPlaylistLengthUIElement( update: updateElement }; } -export async function fetchPlaylistVideos(playlistId: string, apiKey: string): Promise { - const playlistItemsUrl = `https://www.googleapis.com/youtube/v3/playlistItems?part=contentDetails&maxResults=50&fields=items/contentDetails/videoId,nextPageToken&key=${apiKey}&playlistId=${playlistId}`; - let nextPageToken: string | undefined = undefined; - const allVideos: YouTubePlaylistItem[] = []; - try { - do { - const playlistResponse = await fetch(`${playlistItemsUrl}${nextPageToken ? `&pageToken=${nextPageToken}` : ""}`); - const data = await playlistResponse.json(); - const youtubeDataAPIParsed = youtubeDataAPIErrorSchema.safeParse(data); - if (youtubeDataAPIParsed.success && youtubeDataAPIParsed.data.error) { - switch (youtubeDataAPIParsed.data.error.code) { - case 403: - throw new Error("YouTube Enhancer (YouTube Data API V3): Quota exceeded. Please try again later."); - case 404: - throw new Error("YouTube Enhancer (YouTube Data API V3): Playlist not found. Please try again later."); - default: - throw new Error("YouTube Enhancer (YouTube Data API V3): Unknown error. Please try again later."); - } - } - const parsedData = youtubePlaylistResponseSchema.safeParse(data); - if (!parsedData.success) throw new Error("Failed to parse playlist response."); - if (parsedData.data.items && parsedData.data.items.length === 0) throw new Error("No items found in playlist."); - nextPageToken = parsedData.data.nextPageToken || ""; - allVideos.push(...parsedData.data.items); - await delay(40); // Adding delay between requests to avoid rate limiting - } while (nextPageToken); - return allVideos; - } catch (error) { - throw new Error(`Error fetching playlist videos: ${error}`); - } -} export async function getDataForPlaylistLengthUIElement({ - apiKey, pageType, playlistLengthGetMethod, playlistWatchTimeGetMethod @@ -216,7 +165,7 @@ export async function getDataForPlaylistLengthUIElement({ const watchedTimeSeconds = calculateWatchedTime({ pageType, playlistItemsVideoDetails, playlistWatchTimeGetMethod }); return { totalTimeSeconds, watchedTimeSeconds }; } - totalTimeSeconds = await getDurationFromAPI(playlistId, apiKey); + totalTimeSeconds = await getDurationFromAPI(playlistId); // Cache the duration window.cachedPlaylistDuration = { playlistId, totalTimeSeconds }; } else if (playlistLengthGetMethod === "html") { @@ -227,20 +176,6 @@ export async function getDataForPlaylistLengthUIElement({ const watchedTimeSeconds = calculateWatchedTime({ pageType, playlistItemsVideoDetails, playlistWatchTimeGetMethod }); return { totalTimeSeconds, watchedTimeSeconds }; } -export async function getPlaylistDuration(playlistVideos: YouTubePlaylistItem[], apiKey: string) { - const videoIds = playlistVideos.map((video) => video.contentDetails.videoId); - try { - const videoDurationPromises = videoIds.map(async (videoId) => { - await delay(1); // Adding delay between requests to avoid rate limiting - return getVideoDuration(videoId, apiKey); - }); - const videoDurations = await Promise.all(videoDurationPromises); - const totalDuration = videoDurations.reduce((acc, duration) => acc + duration, 0); - return totalDuration; - } catch (error) { - throw new Error(`Error fetching playlist duration: ${error}`); - } -} export function getPlaylistId(): null | string { const playlistId = new URLSearchParams(window.location.search).get("list"); return playlistId; @@ -262,31 +197,7 @@ export function getPlaylistItemsFromWatchPage() { export function getPlaylistItemsWatchedProgress(playlistItems: HTMLElement[]): VideoDetails[] { return playlistItems.map(getVideoDetails); } -export async function getVideoDuration(videoId: string, apiKey: string) { - const videoDetailsUrl = `https://www.googleapis.com/youtube/v3/videos?part=contentDetails&fields=items/contentDetails/duration&key=${apiKey}&id=${videoId}`; - try { - const videoResponse = await fetch(videoDetailsUrl); - const data = await videoResponse.json(); - const youtubeDataAPIParsed = youtubeDataAPIErrorSchema.safeParse(data); - const parsedData = youtubeVideoDurationResponseSchema.safeParse(data); - if (!parsedData.success) throw new Error("Failed to parse video duration response."); - if ( - youtubeDataAPIParsed.success && - youtubeDataAPIParsed.data.error && - youtubeDataAPIParsed.data.error.code === 403 && - youtubeDataAPIParsed.data.error.errors.find((e) => e.reason === "quotaExceeded") - ) { - throw new Error("Quota exceeded. Please try again later."); - } - const videoDuration = parsedData.data.items.at(0)?.contentDetails?.duration; - if (!videoDuration) throw new Error("Failed to get video duration."); - return parseISO8601Duration(videoDuration); - } catch (error) { - throw new Error(`Error getting video duration: ${error}`); - } -} export async function initializePlaylistLength({ - apiKey, pageType, playlistLengthGetMethod, playlistWatchTimeGetMethod @@ -300,7 +211,6 @@ export async function initializePlaylistLength({ if (!playlistItemsElement) return null; const { playbackRate: playerSpeed = 1 } = videoElement || {}; const { totalTimeSeconds, watchedTimeSeconds } = await getDataForPlaylistLengthUIElement({ - apiKey, pageType, playlistLengthGetMethod, playlistWatchTimeGetMethod @@ -322,7 +232,6 @@ export async function initializePlaylistLength({ const videoElement = document.querySelector("video"); const { playbackRate: playerSpeed = 1 } = videoElement || {}; const data = await getDataForPlaylistLengthUIElement({ - apiKey, pageType, playlistLengthGetMethod, playlistWatchTimeGetMethod @@ -379,9 +288,35 @@ function getDurationAndWatchedTimeHTML({ pageType, playlistItemsVideoDetails, pl const watchedTimeSeconds = calculateWatchedTime({ pageType, playlistItemsVideoDetails, playlistWatchTimeGetMethod }); return { totalTimeSeconds, watchedTimeSeconds }; } -async function getDurationFromAPI(playlistId: string, apiKey: string): Promise { - const playlistVideos = await fetchPlaylistVideos(playlistId, apiKey); - return getPlaylistDuration(playlistVideos, apiKey); +async function getDurationFromAPI(playlistId: string): Promise { + const youtube = await Innertube.create({ + cookie: document.cookie, + fetch: (...args) => fetch(...args) + }); + + try { + const playlist = await youtube.getPlaylist(playlistId); + + let totalSeconds = 0; + for (const video of playlist.videos) { + if ((video as PlaylistVideo).duration) { + totalSeconds += (video as PlaylistVideo).duration.seconds; + } + } + + while (playlist.has_continuation) { + const continuation = await playlist.getContinuation(); + for (const video of continuation.videos) { + if ((video as PlaylistVideo).duration) { + totalSeconds += (video as PlaylistVideo).duration.seconds; + } + } + } + + return totalSeconds; + } catch (error) { + throw new Error(`Error fetching playlist duration: ${error}`); + } } function getVideoDetails(videoElement: Element): VideoDetails { const videoId = getVideoId(videoElement); diff --git a/src/utils/utilities.ts b/src/utils/utilities.ts index 0ade8bedc..97574b311 100644 --- a/src/utils/utilities.ts +++ b/src/utils/utilities.ts @@ -545,28 +545,6 @@ export function modifyElementClassList(action: ModifyElementAction, elementPair: export function modifyElementsClassList(action: ModifyElementAction, elements: ElementClassPair[]) { elements.forEach((element) => modifyElementClassList(action, element)); } -/** - * Parses an ISO 8601 duration string and returns the total number of seconds. - * - * @param {string} duration - The ISO 8601 duration string to parse. - * @return {number} The total number of seconds represented by the duration string. - */ -export function parseISO8601Duration(duration: string): number { - // Regular expression to match ISO 8601 duration format - const regex = /^PT(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?$/; - // Extract hours, minutes, and seconds from the duration string - const matches = regex.exec(duration); - // If the duration string does not match the expected format, return 0 - if (!matches) return 0; - - // Parse the hours, minutes, and seconds from the matches array - const hours = parseInt(matches[1] || "0", 10); - const minutes = parseInt(matches[2] || "0", 10); - const seconds = parseInt(matches[3] || "0", 10); - - // Calculate the total number of seconds by multiplying hours, minutes, and seconds - return hours * 3600 + minutes * 60 + seconds; -} export function parseStoredValue(value: string) { try { // Attempt to parse the value as JSON From 3ada9baa3529948f961f4d42b23ca20d5cb8372c Mon Sep 17 00:00:00 2001 From: Dave Nicolson Date: Sat, 18 Oct 2025 22:41:00 +0200 Subject: [PATCH 47/70] Fix layout issue for tablet breakpoint --- src/features/playlistLength/utils.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/features/playlistLength/utils.ts b/src/features/playlistLength/utils.ts index 08a6031c3..6eea95ce1 100644 --- a/src/features/playlistLength/utils.ts +++ b/src/features/playlistLength/utils.ts @@ -17,8 +17,7 @@ import { const NO_PADDING_HEADER_SELECTOR = "yt-page-header-view-model.yt-page-header-view-model.yt-page-header-view-model--no-padding"; const CINEMATIC_HEADER_SELECTOR = "yt-page-header-renderer yt-page-header-view-model.yt-page-header-view-model--cinematic-container-overflow-boundary"; -const IMMERSIVE_HEADER_SELECTOR = - "ytd-playlist-header-renderer .immersive-header-container .immersive-header-content .thumbnail-and-metadata-wrapper"; +const IMMERSIVE_HEADER_SELECTOR = "ytd-playlist-header-renderer .immersive-header-container .immersive-header-content"; export const getHeaderSelectors = () => ({ playlist: (() => { From 7a17d9d8bb7f909d38d00eac2530595624c41eb5 Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Sat, 18 Oct 2025 18:43:12 -0400 Subject: [PATCH 48/70] remove unused variable --- src/features/playlistLength/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/features/playlistLength/index.ts b/src/features/playlistLength/index.ts index 75f9e6cf5..e5a3a1598 100644 --- a/src/features/playlistLength/index.ts +++ b/src/features/playlistLength/index.ts @@ -1,6 +1,5 @@ import type { Nullable } from "@/src/types"; -import { YouTube_Enhancer_Public_Youtube_Data_API_V3_Key } from "@/src/utils/constants"; import eventManager from "@/src/utils/EventManager"; import { isWatchPage, waitForAllElements, waitForSpecificMessage } from "@/src/utils/utilities"; From 21f056603d38c4356f27909db5494dc422fa4634 Mon Sep 17 00:00:00 2001 From: Dave Nicolson Date: Sun, 19 Oct 2025 14:35:17 +0200 Subject: [PATCH 49/70] Remove unused type --- src/types/index.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/types/index.ts b/src/types/index.ts index 3b824412e..48ab29a59 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -519,13 +519,6 @@ export type VideoHistoryEntry = { }; export type VideoHistoryStatus = "watched" | "watching"; export type VideoHistoryStorage = Record; -export type YouTubeAPIQuotaError = { - error: { - code: number; - errors: { domain: string; message: string; reason: string }[]; - message: string; - }; -}; export type YouTubePlayerDiv = HTMLDivElement & YouTubePlayer; export type YouTubePlaylistItem = { contentDetails: { From 18c0f39a72e1996d62ed69e9447fc4c592bf06fb Mon Sep 17 00:00:00 2001 From: Dave Nicolson Date: Sun, 19 Oct 2025 14:49:22 +0200 Subject: [PATCH 50/70] Limit observed elements --- src/features/playlistManagementButtons/index.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/features/playlistManagementButtons/index.ts b/src/features/playlistManagementButtons/index.ts index 65ea67019..49cc877b4 100644 --- a/src/features/playlistManagementButtons/index.ts +++ b/src/features/playlistManagementButtons/index.ts @@ -139,8 +139,11 @@ export async function enablePlaylistManagementButtons() { function observePlaylist() { addButtonToPlaylistItems(); - playlistObserver = new MutationObserver(addButtonToPlaylistItems); - playlistObserver.observe(document.body, { childList: true, subtree: true }); + const container = document.querySelector("ytd-playlist-video-list-renderer"); + if (container) { + playlistObserver = new MutationObserver(addButtonToPlaylistItems); + playlistObserver.observe(container, { childList: true, subtree: true }); + } } window.addEventListener("DOMContentLoaded", observePlaylist); From 9b18acaee348aec9c877498c431d2e783f49e0c2 Mon Sep 17 00:00:00 2001 From: Dave Nicolson Date: Sun, 19 Oct 2025 15:47:07 +0200 Subject: [PATCH 51/70] Fix duration calculation --- src/features/playlistLength/utils.ts | 10 ++++++---- src/utils/utilities.ts | 3 +++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/features/playlistLength/utils.ts b/src/features/playlistLength/utils.ts index 1d0abbddb..1d2cf946b 100644 --- a/src/features/playlistLength/utils.ts +++ b/src/features/playlistLength/utils.ts @@ -299,16 +299,18 @@ async function getDurationFromAPI(playlistId: string): Promise { let totalSeconds = 0; for (const video of playlist.videos) { - if ((video as PlaylistVideo).duration) { - totalSeconds += (video as PlaylistVideo).duration.seconds; + const playlistVideo = video as PlaylistVideo; + if (playlistVideo?.duration?.seconds) { + totalSeconds += playlistVideo.duration.seconds; } } while (playlist.has_continuation) { const continuation = await playlist.getContinuation(); for (const video of continuation.videos) { - if ((video as PlaylistVideo).duration) { - totalSeconds += (video as PlaylistVideo).duration.seconds; + const playlistVideo = video as PlaylistVideo; + if (playlistVideo?.duration?.seconds) { + totalSeconds += playlistVideo.duration.seconds; } } } diff --git a/src/utils/utilities.ts b/src/utils/utilities.ts index 97574b311..b192f381e 100644 --- a/src/utils/utilities.ts +++ b/src/utils/utilities.ts @@ -686,6 +686,9 @@ export function sendExtensionOnlyMessage Date: Sun, 19 Oct 2025 17:27:07 +0200 Subject: [PATCH 52/70] Add page checks and refactor URL extract method --- src/utils/utilities.ts | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/utils/utilities.ts b/src/utils/utilities.ts index 97574b311..d8e6f9901 100644 --- a/src/utils/utilities.ts +++ b/src/utils/utilities.ts @@ -511,8 +511,12 @@ export function IsDarkMode() { const darkMode = document.documentElement.hasAttribute("dark"); return darkMode; } +export function isHomePage() { + const [firstSection] = extractSectionsFromYouTubeURL(window.location.href); + return firstSection === undefined; +} export function isLivePage() { - const firstSection = extractFirstSectionFromYouTubeURL(window.location.href); + const [firstSection] = extractSectionsFromYouTubeURL(window.location.href); return firstSection === "live"; } export function isNewYouTubeVideoLayout(): boolean { @@ -526,15 +530,19 @@ export function isNewYouTubeVideoLayout(): boolean { } } export function isPlaylistPage() { - const firstSection = extractFirstSectionFromYouTubeURL(window.location.href); + const [firstSection] = extractSectionsFromYouTubeURL(window.location.href); return firstSection === "playlist"; } export function isShortsPage() { - const firstSection = extractFirstSectionFromYouTubeURL(window.location.href); + const [firstSection] = extractSectionsFromYouTubeURL(window.location.href); return firstSection === "shorts"; } +export function isSubscriptionsPage() { + const [firstSection, secondSection] = extractSectionsFromYouTubeURL(window.location.href); + return firstSection === "feed" && secondSection === "subscriptions"; +} export function isWatchPage() { - const firstSection = extractFirstSectionFromYouTubeURL(window.location.href); + const [firstSection] = extractSectionsFromYouTubeURL(window.location.href); return firstSection === "watch"; } @@ -798,18 +806,16 @@ function colorizeLog(message: string, type: ColorType = "FgBlack"): { message: s } /** - * Extracts the first section from a YouTube URL path. + * Extracts all sections from a YouTube URL path. * @param {string} url - The YouTube URL. - * @returns {string|null} The first section of the URL path, or null if not found. + * @returns {string[]} An array of all sections of the URL path. */ -function extractFirstSectionFromYouTubeURL(url: string): null | string { +function extractSectionsFromYouTubeURL(url: string): string[] { // Parse the URL into its components const { pathname: path } = new URL(url); // Split the path into an array of sections - const sections = path.split("/").filter((section) => section !== ""); - - return sections.length > 0 ? sections[0] : null; + return path.split("/").filter((section) => section !== ""); } function getColor(type: ColorType) { switch (type) { From fcbcb055ef21aff288f5c1dc3bcacb10387a9123 Mon Sep 17 00:00:00 2001 From: Dave Nicolson Date: Sun, 19 Oct 2025 17:27:15 +0200 Subject: [PATCH 53/70] Add save to Watch Later button --- public/locales/en-US.json | 8 ++ public/locales/en-US.json.d.ts | 5 + src/components/Settings/Settings.tsx | 8 ++ src/features/saveToWatchLaterButton/index.css | 12 ++ src/features/saveToWatchLaterButton/index.ts | 121 ++++++++++++++++++ src/pages/content/index.ts | 5 + src/pages/embedded/index.ts | 15 ++- src/types/index.ts | 2 + src/utils/EventManager.ts | 1 + src/utils/constants.ts | 2 + 10 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 src/features/saveToWatchLaterButton/index.css create mode 100644 src/features/saveToWatchLaterButton/index.ts diff --git a/public/locales/en-US.json b/public/locales/en-US.json index 9621fc8db..00eefb207 100644 --- a/public/locales/en-US.json +++ b/public/locales/en-US.json @@ -301,6 +301,10 @@ "label": "Default to original audio track", "title": "Always default to the original audio track" }, + "enableSaveToWatchLaterButton": { + "label": "Enable save to Watch Later button", + "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" + }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", "title": "Hides the artificial intelligence summary below videos" @@ -488,6 +492,10 @@ } } }, + "saveToWatchLaterButton": { + "save": "Save to Watch Later", + "error": "Failed to add video to Watch Later" + }, "screenshotButton": { "enable": { "label": "Screenshot button", diff --git a/public/locales/en-US.json.d.ts b/public/locales/en-US.json.d.ts index d0407f81e..ee7e43ce3 100644 --- a/public/locales/en-US.json.d.ts +++ b/public/locales/en-US.json.d.ts @@ -211,6 +211,10 @@ interface EnUS { label: "Default to original audio track"; title: "Always default to the original audio track"; }; + enableSaveToWatchLaterButton: { + label: "Enable save to Watch Later button"; + title: "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist"; + }; hideArtificialIntelligenceSummary: { label: "Hide AI summary"; title: "Hides the artificial intelligence summary below videos"; @@ -369,6 +373,7 @@ interface EnUS { }; }; }; + saveToWatchLaterButton: { error: "Failed to add video to Watch Later"; save: "Save to Watch Later" }; screenshotButton: { enable: { label: "Screenshot button"; diff --git a/src/components/Settings/Settings.tsx b/src/components/Settings/Settings.tsx index f7d8234cb..980492b7c 100644 --- a/src/components/Settings/Settings.tsx +++ b/src/components/Settings/Settings.tsx @@ -794,6 +794,14 @@ export default function Settings() { title={t("settings.sections.miscellaneous.features.restoreFullscreenScrolling.title")} type="checkbox" /> + diff --git a/src/features/saveToWatchLaterButton/index.css b/src/features/saveToWatchLaterButton/index.css new file mode 100644 index 000000000..0c1d2d534 --- /dev/null +++ b/src/features/saveToWatchLaterButton/index.css @@ -0,0 +1,12 @@ +@keyframes yte-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +.yte-spinning { + animation: yte-spin 2s linear infinite; +} diff --git a/src/features/saveToWatchLaterButton/index.ts b/src/features/saveToWatchLaterButton/index.ts new file mode 100644 index 000000000..65a872dfb --- /dev/null +++ b/src/features/saveToWatchLaterButton/index.ts @@ -0,0 +1,121 @@ +import React from "react"; +import { renderToString } from "react-dom/server"; +import { AiOutlineVideoCameraAdd } from "react-icons/ai"; +import { FaSpinner } from "react-icons/fa"; +import { Innertube } from "youtubei.js/web"; + +import "./index.css"; + +import { createTooltip, isHomePage, isSubscriptionsPage, waitForSpecificMessage } from "@/src/utils/utilities"; + +interface YTLockupViewModel extends HTMLElement { + rawProps: { + data: () => { + contentId: string; + }; + }; +} + +if (window.trustedTypes && !window.trustedTypes.defaultPolicy) { + window.trustedTypes.createPolicy("default", { + createHTML: (input: string) => input + }); +} + +let videosObserver: MutationObserver | null = null; + +export async function disableSaveToWatchLaterButton() { + if (videosObserver) { + videosObserver.disconnect(); + videosObserver = null; + } + + document.querySelectorAll(".yte-save-to-watch-later-button").forEach((saveButton) => { + removeSaveToWatchLaterButton(saveButton as HTMLElement); + }); +} + +export async function enableSaveToWatchLaterButton() { + const { + data: { + options: { enable_save_to_watch_later_button } + } + } = await waitForSpecificMessage("options", "request_data", "content"); + + if (!enable_save_to_watch_later_button || (!isHomePage() && !isSubscriptionsPage())) { + return; + } + + const youtube = await Innertube.create({ + cookie: document.cookie, + fetch: (...args) => fetch(...args) + }); + + function addButtonToVideoItems() { + document.querySelectorAll("yt-lockup-view-model:not(:has(.yte-save-to-watch-later-button))").forEach((video) => { + const { contentId: videoId } = (video as YTLockupViewModel).rawProps.data(); + + const saveButton = document.createElement("button"); + saveButton.innerHTML = renderToString(React.createElement(AiOutlineVideoCameraAdd, { color: "white", size: 18 })); + saveButton.title = window.i18nextInstance?.t("settings.sections.saveToWatchLaterButton.save"); + saveButton.className = "yte-save-to-watch-later-button"; + saveButton.addEventListener("click", async () => { + const { innerHTML: originalHTML } = saveButton; + saveButton.disabled = true; + saveButton.innerHTML = renderToString(React.createElement(FaSpinner, { color: "gray", size: 18 })); + saveButton.classList.add("yte-spinning"); + try { + saveButton.classList.add("yte-spinning"); + await youtube.playlist.addVideos("WL", [videoId]); + removeSaveToWatchLaterButton(saveButton); + } catch (error) { + const { listener } = createTooltip({ + element: saveButton, + featureName: "saveToWatchLaterButton", + id: "yte-feature-saveToWatchLaterButton-tooltip", + text: `${window.i18nextInstance?.t(`settings.sections.saveToWatchLaterButton.error`)}: ${error instanceof Error ? error.message : String(error)}` + }); + listener(); + } finally { + saveButton.disabled = false; + saveButton.innerHTML = originalHTML; + saveButton.classList.remove("yte-spinning"); + } + }); + + const buttons = video.querySelector("button-view-model"); + if (buttons) { + const title = video.querySelector(".yt-lockup-metadata-view-model__title") as HTMLElement; + const paddingRight = parseInt(getComputedStyle(title).paddingRight, 10); + title.style.paddingRight = `${paddingRight + 40}px`; + const buttonClasses = Array.from(buttons.children[0].classList).join(" "); + saveButton.className += " " + buttonClasses; + buttons.prepend(saveButton); + Array.from(buttons.children).forEach((child) => { + (child as HTMLElement).style.display = "inline-flex"; + }); + } + }); + } + + function observePlaylist() { + addButtonToVideoItems(); + const container = document.querySelector("ytd-two-column-browse-results-renderer"); + if (container) { + videosObserver = new MutationObserver(addButtonToVideoItems); + videosObserver.observe(container, { childList: true, subtree: true }); + } + } + + window.addEventListener("DOMContentLoaded", observePlaylist); + if (document.readyState === "complete" || document.readyState === "interactive") { + observePlaylist(); + } +} + +function removeSaveToWatchLaterButton(button: HTMLElement) { + const title = button.closest("yt-lockup-view-model")!.querySelector(".yt-lockup-metadata-view-model__title") as HTMLElement; + const paddingRight = parseInt(getComputedStyle(title).paddingRight, 10); + title.style.paddingRight = `${paddingRight - 40}px`; + button.style.display = "none"; +} diff --git a/src/pages/content/index.ts b/src/pages/content/index.ts index 5aa6cd135..d38f2b0f0 100644 --- a/src/pages/content/index.ts +++ b/src/pages/content/index.ts @@ -426,6 +426,11 @@ const storageChangeHandler = async (changes: StorageChanges, areaName: string) = restoreFullscreenScrollingEnabled: newValue }); }, + enable_save_to_watch_later_button: (__oldValue, newValue) => { + sendExtensionOnlyMessage("saveToWatchLaterButtonChange", { + saveToWatchLaterButtonEnabled: newValue + }); + }, enable_screenshot_button: (__oldValue, newValue) => { sendExtensionOnlyMessage("screenshotButtonChange", { screenshotButtonEnabled: newValue diff --git a/src/pages/embedded/index.ts b/src/pages/embedded/index.ts index f78124556..75922138b 100644 --- a/src/pages/embedded/index.ts +++ b/src/pages/embedded/index.ts @@ -63,6 +63,7 @@ import { setupRemainingTime as enableRemainingTime, removeRemainingTimeDisplay } import enableRememberVolume from "@/src/features/rememberVolume"; import enableRemoveRedirect from "@/src/features/removeRedirect"; import { disableRestoreFullscreenScrolling, enableRestoreFullscreenScrolling } from "@/src/features/restoreFullscreenScrolling"; +import { disableSaveToWatchLaterButton, enableSaveToWatchLaterButton } from "@/src/features/saveToWatchLaterButton"; import { addScreenshotButton, removeScreenshotButton } from "@/src/features/screenshotButton"; import adjustSpeedOnScrollWheel from "@/src/features/scrollWheelSpeedControl"; import adjustVolumeOnScrollWheel from "@/src/features/scrollWheelVolumeControl"; @@ -194,7 +195,8 @@ const enableFeatures = async () => { enableCustomCSS(), enableDeepDarkCSS(), enableHideOfficialArtistVideosFromHomePage(), - enableHidePlaylistRecommendationsFromHomePage() + enableHidePlaylistRecommendationsFromHomePage(), + enableSaveToWatchLaterButton() ]); // Use a guard clause to reduce amount of times nesting code happens if (shouldEnableFeaturesFuncReturn()) return; @@ -957,6 +959,17 @@ const initialize = function () { } break; } + case "saveToWatchLaterButtonChange": { + const { + data: { saveToWatchLaterButtonEnabled } + } = message; + if (saveToWatchLaterButtonEnabled) { + await enableSaveToWatchLaterButton(); + } else { + await disableSaveToWatchLaterButton(); + } + break; + } case "screenshotButtonChange": { const { data: { screenshotButtonEnabled } diff --git a/src/types/index.ts b/src/types/index.ts index 0c2f80372..3eb1252f6 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -268,6 +268,7 @@ export type configuration = { enable_remaining_time: boolean; enable_remember_last_volume: boolean; enable_restore_fullscreen_scrolling: boolean; + enable_save_to_watch_later_button: boolean; enable_screenshot_button: boolean; enable_scroll_wheel_speed_control: boolean; enable_scroll_wheel_volume_control: boolean; @@ -433,6 +434,7 @@ export type ExtensionSendOnlyMessageMappings = { rememberVolumeChange: DataResponseMessage<"rememberVolumeChange", { rememberVolumeEnabled: boolean }>; removeRedirectChange: DataResponseMessage<"removeRedirectChange", { removeRedirectEnabled: boolean }>; restoreFullscreenScrollingChange: DataResponseMessage<"restoreFullscreenScrollingChange", { restoreFullscreenScrollingEnabled: boolean }>; + saveToWatchLaterButtonChange: DataResponseMessage<"saveToWatchLaterButtonChange", { saveToWatchLaterButtonEnabled: boolean }>; screenshotButtonChange: DataResponseMessage<"screenshotButtonChange", { screenshotButtonEnabled: boolean }>; scrollWheelSpeedControlChange: DataResponseMessage<"scrollWheelSpeedControlChange", { scrollWheelSpeedControlEnabled: boolean }>; scrollWheelVolumeControlChange: DataResponseMessage<"scrollWheelVolumeControlChange", { scrollWheelVolumeControlEnabled: boolean }>; diff --git a/src/utils/EventManager.ts b/src/utils/EventManager.ts index 30c331fde..b19107bb1 100644 --- a/src/utils/EventManager.ts +++ b/src/utils/EventManager.ts @@ -44,6 +44,7 @@ export type FeatureName = | "remainingTime" | "rememberVolume" | "removeRedirect" + | "saveToWatchLaterButton" | "screenshotButton" | "scrollWheelSpeedControl" | "scrollWheelVolumeControl" diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 0397162b6..ed9f3515c 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -84,6 +84,7 @@ export const defaultConfiguration = { enable_remaining_time: false, enable_remember_last_volume: false, enable_restore_fullscreen_scrolling: false, + enable_save_to_watch_later_button: false, enable_screenshot_button: false, enable_scroll_wheel_speed_control: false, enable_scroll_wheel_volume_control: false, @@ -187,6 +188,7 @@ export const configurationImportSchema: TypeToPartialZodSchema< enable_remaining_time: z.boolean().optional(), enable_remember_last_volume: z.boolean().optional(), enable_restore_fullscreen_scrolling: z.boolean().optional(), + enable_save_to_watch_later_button: z.boolean().optional(), enable_screenshot_button: z.boolean().optional(), enable_scroll_wheel_speed_control: z.boolean().optional(), enable_scroll_wheel_volume_control: z.boolean().optional(), From 67a189b93da0a0b02c084c094b4b74c39d26398f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 01:07:38 +0000 Subject: [PATCH 54/70] build(deps-dev): bump @vitejs/plugin-react-swc from 4.0.1 to 4.1.0 Bumps [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react-swc) from 4.0.1 to 4.1.0. - [Release notes](https://github.com/vitejs/vite-plugin-react/releases) - [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite-plugin-react/commits/v4.1.0/packages/plugin-react-swc) --- updated-dependencies: - dependency-name: "@vitejs/plugin-react-swc" dependency-version: 4.1.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 01807afc3..9e9306eed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1047,9 +1047,9 @@ } }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.32", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.32.tgz", - "integrity": "sha512-QReCdvxiUZAPkvp1xpAg62IeNzykOFA6syH2CnClif4YmALN1XKpB39XneL80008UbtMShthSVDKmrx05N1q/g==", + "version": "1.0.0-beta.35", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.35.tgz", + "integrity": "sha512-slYrCpoxJUqzFDDNlvrOYRazQUNRvWPjXA17dAOISY3rDMxX6k8K4cj2H+hEYMHF81HO3uNd5rHVigAWRM5dSg==", "dev": true, "license": "MIT" }, @@ -5261,14 +5261,14 @@ } }, "node_modules/@vitejs/plugin-react-swc": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-4.0.1.tgz", - "integrity": "sha512-NQhPjysi5duItyrMd5JWZFf2vNOuSMyw+EoZyTBDzk+DkfYD8WNrsUs09sELV2cr1P15nufsN25hsUBt4CKF9Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-4.1.0.tgz", + "integrity": "sha512-Ff690TUck0Anlh7wdIcnsVMhofeEVgm44Y4OYdeeEEPSKyZHzDI9gfVBvySEhDfXtBp8tLCbfsVKPWEMEjq8/g==", "dev": true, "license": "MIT", "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.32", - "@swc/core": "^1.13.2" + "@rolldown/pluginutils": "1.0.0-beta.35", + "@swc/core": "^1.13.5" }, "engines": { "node": "^20.19.0 || >=22.12.0" From d99b338eac12ff96b617bbbf072b323b9717dce3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 01:08:24 +0000 Subject: [PATCH 55/70] build(deps-dev): bump typescript-eslint from 8.45.0 to 8.46.1 Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.45.0 to 8.46.1. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.46.1/packages/typescript-eslint) --- updated-dependencies: - dependency-name: typescript-eslint dependency-version: 8.46.1 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 122 +++++++++++++++++++++++----------------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/package-lock.json b/package-lock.json index 01807afc3..844b0c896 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5016,17 +5016,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.45.0.tgz", - "integrity": "sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg==", + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.1.tgz", + "integrity": "sha512-rUsLh8PXmBjdiPY+Emjz9NX2yHvhS11v0SR6xNJkm5GM1MO9ea/1GoDKlHHZGrOJclL/cZ2i/vRUYVtjRhrHVQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.45.0", - "@typescript-eslint/type-utils": "8.45.0", - "@typescript-eslint/utils": "8.45.0", - "@typescript-eslint/visitor-keys": "8.45.0", + "@typescript-eslint/scope-manager": "8.46.1", + "@typescript-eslint/type-utils": "8.46.1", + "@typescript-eslint/utils": "8.46.1", + "@typescript-eslint/visitor-keys": "8.46.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -5040,7 +5040,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.45.0", + "@typescript-eslint/parser": "^8.46.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } @@ -5056,16 +5056,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.45.0.tgz", - "integrity": "sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==", + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.1.tgz", + "integrity": "sha512-6JSSaBZmsKvEkbRUkf7Zj7dru/8ZCrJxAqArcLaVMee5907JdtEbKGsZ7zNiIm/UAkpGUkaSMZEXShnN2D1HZA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.45.0", - "@typescript-eslint/types": "8.45.0", - "@typescript-eslint/typescript-estree": "8.45.0", - "@typescript-eslint/visitor-keys": "8.45.0", + "@typescript-eslint/scope-manager": "8.46.1", + "@typescript-eslint/types": "8.46.1", + "@typescript-eslint/typescript-estree": "8.46.1", + "@typescript-eslint/visitor-keys": "8.46.1", "debug": "^4.3.4" }, "engines": { @@ -5081,14 +5081,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.45.0.tgz", - "integrity": "sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==", + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.1.tgz", + "integrity": "sha512-FOIaFVMHzRskXr5J4Jp8lFVV0gz5ngv3RHmn+E4HYxSJ3DgDzU7fVI1/M7Ijh1zf6S7HIoaIOtln1H5y8V+9Zg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.45.0", - "@typescript-eslint/types": "^8.45.0", + "@typescript-eslint/tsconfig-utils": "^8.46.1", + "@typescript-eslint/types": "^8.46.1", "debug": "^4.3.4" }, "engines": { @@ -5103,14 +5103,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.45.0.tgz", - "integrity": "sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==", + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.1.tgz", + "integrity": "sha512-weL9Gg3/5F0pVQKiF8eOXFZp8emqWzZsOJuWRUNtHT+UNV2xSJegmpCNQHy37aEQIbToTq7RHKhWvOsmbM680A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.45.0", - "@typescript-eslint/visitor-keys": "8.45.0" + "@typescript-eslint/types": "8.46.1", + "@typescript-eslint/visitor-keys": "8.46.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5121,9 +5121,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.45.0.tgz", - "integrity": "sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==", + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.1.tgz", + "integrity": "sha512-X88+J/CwFvlJB+mK09VFqx5FE4H5cXD+H/Bdza2aEWkSb8hnWIQorNcscRl4IEo1Cz9VI/+/r/jnGWkbWPx54g==", "dev": true, "license": "MIT", "engines": { @@ -5138,15 +5138,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.45.0.tgz", - "integrity": "sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==", + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.1.tgz", + "integrity": "sha512-+BlmiHIiqufBxkVnOtFwjah/vrkF4MtKKvpXrKSPLCkCtAp8H01/VV43sfqA98Od7nJpDcFnkwgyfQbOG0AMvw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.45.0", - "@typescript-eslint/typescript-estree": "8.45.0", - "@typescript-eslint/utils": "8.45.0", + "@typescript-eslint/types": "8.46.1", + "@typescript-eslint/typescript-estree": "8.46.1", + "@typescript-eslint/utils": "8.46.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -5163,9 +5163,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.45.0.tgz", - "integrity": "sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==", + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.1.tgz", + "integrity": "sha512-C+soprGBHwWBdkDpbaRC4paGBrkIXxVlNohadL5o0kfhsXqOC6GYH2S/Obmig+I0HTDl8wMaRySwrfrXVP8/pQ==", "dev": true, "license": "MIT", "engines": { @@ -5177,16 +5177,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.45.0.tgz", - "integrity": "sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==", + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.1.tgz", + "integrity": "sha512-uIifjT4s8cQKFQ8ZBXXyoUODtRoAd7F7+G8MKmtzj17+1UbdzFl52AzRyZRyKqPHhgzvXunnSckVu36flGy8cg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.45.0", - "@typescript-eslint/tsconfig-utils": "8.45.0", - "@typescript-eslint/types": "8.45.0", - "@typescript-eslint/visitor-keys": "8.45.0", + "@typescript-eslint/project-service": "8.46.1", + "@typescript-eslint/tsconfig-utils": "8.46.1", + "@typescript-eslint/types": "8.46.1", + "@typescript-eslint/visitor-keys": "8.46.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -5206,16 +5206,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.45.0.tgz", - "integrity": "sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg==", + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.1.tgz", + "integrity": "sha512-vkYUy6LdZS7q1v/Gxb2Zs7zziuXN0wxqsetJdeZdRe/f5dwJFglmuvZBfTUivCtjH725C1jWCDfpadadD95EDQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.45.0", - "@typescript-eslint/types": "8.45.0", - "@typescript-eslint/typescript-estree": "8.45.0" + "@typescript-eslint/scope-manager": "8.46.1", + "@typescript-eslint/types": "8.46.1", + "@typescript-eslint/typescript-estree": "8.46.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5230,13 +5230,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.45.0.tgz", - "integrity": "sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==", + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.1.tgz", + "integrity": "sha512-ptkmIf2iDkNUjdeu2bQqhFPV1m6qTnFFjg7PPDjxKWaMaP0Z6I9l30Jr3g5QqbZGdw8YdYvLp+XnqnWWZOg/NA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/types": "8.46.1", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -15183,16 +15183,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.45.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.45.0.tgz", - "integrity": "sha512-qzDmZw/Z5beNLUrXfd0HIW6MzIaAV5WNDxmMs9/3ojGOpYavofgNAAD/nC6tGV2PczIi0iw8vot2eAe/sBn7zg==", + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.46.1.tgz", + "integrity": "sha512-VHgijW803JafdSsDO8I761r3SHrgk4T00IdyQ+/UsthtgPRsBWQLqoSxOolxTpxRKi1kGXK0bSz4CoAc9ObqJA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.45.0", - "@typescript-eslint/parser": "8.45.0", - "@typescript-eslint/typescript-estree": "8.45.0", - "@typescript-eslint/utils": "8.45.0" + "@typescript-eslint/eslint-plugin": "8.46.1", + "@typescript-eslint/parser": "8.46.1", + "@typescript-eslint/typescript-estree": "8.46.1", + "@typescript-eslint/utils": "8.46.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" From 919ac2bd14ef0d5e5c257e07300106a6720e4b7e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 01:09:02 +0000 Subject: [PATCH 56/70] build(deps-dev): bump zod-error from 1.5.0 to 2.0.0 Bumps [zod-error](https://github.com/andrewvo89/zod-error) from 1.5.0 to 2.0.0. - [Release notes](https://github.com/andrewvo89/zod-error/releases) - [Commits](https://github.com/andrewvo89/zod-error/compare/v1.5.0...v2.0.0) --- updated-dependencies: - dependency-name: zod-error dependency-version: 2.0.0 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- package-lock.json | 20 ++++++-------------- package.json | 2 +- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index 01807afc3..6d1b5771b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -72,7 +72,7 @@ "typescript-eslint": "^8.8.1", "vite": "^7.0.4", "zod": "^4.0.17", - "zod-error": "^1.5.0" + "zod-error": "^2.0.0" }, "optionalDependencies": { "@rollup/rollup-linux-x64-gnu": "^4.14.3" @@ -15800,21 +15800,13 @@ } }, "node_modules/zod-error": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "zod": "^3.20.2" - } - }, - "node_modules/zod-error/node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/zod-error/-/zod-error-2.0.0.tgz", + "integrity": "sha512-ivSoPm7h5SEGG8GUvQ7YTwrnEx36qNmUIU5hSIGcqcdl7+ZFoTrYXAdQEs3KP/rkihrrR9REEdOeGU+fWdMoNw==", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" + "peerDependencies": { + "zod": "^4.0.0" } }, "node_modules/zod-validation-error": { diff --git a/package.json b/package.json index f942ebc54..73dcbc238 100644 --- a/package.json +++ b/package.json @@ -86,6 +86,6 @@ "typescript-eslint": "^8.8.1", "vite": "^7.0.4", "zod": "^4.0.17", - "zod-error": "^1.5.0" + "zod-error": "^2.0.0" } } From 22df7c326e2f917a7005cf00ce45a00d4e4430fe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 01:09:20 +0000 Subject: [PATCH 57/70] build(deps-dev): bump semantic-release from 24.2.9 to 25.0.1 Bumps [semantic-release](https://github.com/semantic-release/semantic-release) from 24.2.9 to 25.0.1. - [Release notes](https://github.com/semantic-release/semantic-release/releases) - [Commits](https://github.com/semantic-release/semantic-release/compare/v24.2.9...v25.0.1) --- updated-dependencies: - dependency-name: semantic-release dependency-version: 25.0.1 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- package-lock.json | 4342 ++++++++++----------------------------------- package.json | 2 +- 2 files changed, 961 insertions(+), 3383 deletions(-) diff --git a/package-lock.json b/package-lock.json index 01807afc3..ef111a3e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -63,7 +63,7 @@ "npm": "^11.3.0", "postcss": "^8.4.31", "prettier": "^3.0.3", - "semantic-release": "^24.0.0", + "semantic-release": "^25.0.1", "tailwind-merge": "^3.2.0", "tailwindcss": "^3.4.17", "ts-json-as-const": "^1.0.7", @@ -86,6 +86,45 @@ "node": ">=0.10.0" } }, + "node_modules/@actions/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.11.1.tgz", + "integrity": "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@actions/exec": "^1.1.1", + "@actions/http-client": "^2.0.1" + } + }, + "node_modules/@actions/exec": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz", + "integrity": "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@actions/io": "^1.0.1" + } + }, + "node_modules/@actions/http-client": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.3.tgz", + "integrity": "sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tunnel": "^0.0.6", + "undici": "^5.25.4" + } + }, + "node_modules/@actions/io": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.3.tgz", + "integrity": "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", @@ -644,6 +683,16 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/@formkit/auto-animate": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/@formkit/auto-animate/-/auto-animate-0.9.0.tgz", @@ -857,136 +906,159 @@ } }, "node_modules/@octokit/auth-token": { - "version": "5.1.1", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", + "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", "dev": true, "license": "MIT", "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/@octokit/core": { - "version": "6.1.2", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.5.tgz", + "integrity": "sha512-t54CUOsFMappY1Jbzb7fetWeO0n6K0k/4+/ZpkS+3Joz8I4VcvY9OiEBFRYISqaI2fq5sCiPtAjRDOzVYG8m+Q==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/auth-token": "^5.0.0", - "@octokit/graphql": "^8.0.0", - "@octokit/request": "^9.0.0", - "@octokit/request-error": "^6.0.1", - "@octokit/types": "^13.0.0", - "before-after-hook": "^3.0.2", + "@octokit/auth-token": "^6.0.0", + "@octokit/graphql": "^9.0.2", + "@octokit/request": "^10.0.4", + "@octokit/request-error": "^7.0.1", + "@octokit/types": "^15.0.0", + "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/@octokit/endpoint": { - "version": "10.1.1", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.1.tgz", + "integrity": "sha512-7P1dRAZxuWAOPI7kXfio88trNi/MegQ0IJD3vfgC3b+LZo1Qe6gRJc2v0mz2USWWJOKrB2h5spXCzGbw+fAdqA==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^13.0.0", + "@octokit/types": "^15.0.0", "universal-user-agent": "^7.0.2" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/@octokit/graphql": { - "version": "8.1.1", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.2.tgz", + "integrity": "sha512-iz6KzZ7u95Fzy9Nt2L8cG88lGRMr/qy1Q36ih/XVzMIlPDMYwaNLE/ENhqmIzgPrlNWiYJkwmveEetvxAgFBJw==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/request": "^9.0.0", - "@octokit/types": "^13.0.0", + "@octokit/request": "^10.0.4", + "@octokit/types": "^15.0.0", "universal-user-agent": "^7.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/@octokit/openapi-types": { - "version": "22.2.0", + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-26.0.0.tgz", + "integrity": "sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA==", "dev": true, "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "11.3.5", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-13.2.0.tgz", + "integrity": "sha512-YuAlyjR8o5QoRSOvMHxSJzPtogkNMgeMv2mpccrvdUGeC3MKyfi/hS+KiFwyH/iRKIKyx+eIMsDjbt3p9r2GYA==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^13.6.0" + "@octokit/types": "^15.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 20" }, "peerDependencies": { "@octokit/core": ">=6" } }, "node_modules/@octokit/plugin-retry": { - "version": "7.1.2", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-8.0.2.tgz", + "integrity": "sha512-mVPCe77iaD8g1lIX46n9bHPUirFLzc3BfIzsZOpB7bcQh1ecS63YsAgcsyMGqvGa2ARQWKEFTrhMJX2MLJVHVw==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/request-error": "^6.0.0", - "@octokit/types": "^13.0.0", + "@octokit/request-error": "^7.0.1", + "@octokit/types": "^15.0.0", "bottleneck": "^2.15.3" }, "engines": { - "node": ">= 18" + "node": ">= 20" }, "peerDependencies": { - "@octokit/core": ">=6" + "@octokit/core": ">=7" } }, "node_modules/@octokit/plugin-throttling": { - "version": "9.3.2", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-11.0.2.tgz", + "integrity": "sha512-ntNIig4zZhQVOZF4fG9Wt8QCoz9ehb+xnlUwp74Ic2ANChCk8oKmRwV9zDDCtrvU1aERIOvtng8wsalEX7Jk5Q==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^13.0.0", + "@octokit/types": "^15.0.0", "bottleneck": "^2.15.3" }, "engines": { - "node": ">= 18" + "node": ">= 20" }, "peerDependencies": { - "@octokit/core": "^6.0.0" + "@octokit/core": "^7.0.0" } }, "node_modules/@octokit/request": { - "version": "9.1.3", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.5.tgz", + "integrity": "sha512-TXnouHIYLtgDhKo+N6mXATnDBkV05VwbR0TtMWpgTHIoQdRQfCSzmy/LGqR1AbRMbijq/EckC/E3/ZNcU92NaQ==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/endpoint": "^10.0.0", - "@octokit/request-error": "^6.0.1", - "@octokit/types": "^13.1.0", + "@octokit/endpoint": "^11.0.1", + "@octokit/request-error": "^7.0.1", + "@octokit/types": "^15.0.0", + "fast-content-type-parse": "^3.0.0", "universal-user-agent": "^7.0.2" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/@octokit/request-error": { - "version": "6.1.5", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.0.1.tgz", + "integrity": "sha512-CZpFwV4+1uBrxu7Cw8E5NCXDWFNf18MSY23TdxCBgjw1tXXHvTrZVsXlW8hgFTOLw8RQR1BBrMvYRtuyaijHMA==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^13.0.0" + "@octokit/types": "^15.0.0" }, "engines": { - "node": ">= 18" + "node": ">= 20" } }, "node_modules/@octokit/types": { - "version": "13.6.1", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-15.0.0.tgz", + "integrity": "sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/openapi-types": "^22.2.0" + "@octokit/openapi-types": "^26.0.0" } }, "node_modules/@pkgjs/parseargs": { @@ -1011,6 +1083,8 @@ }, "node_modules/@pnpm/config.env-replace": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", "dev": true, "license": "MIT", "engines": { @@ -1019,6 +1093,8 @@ }, "node_modules/@pnpm/network.ca-file": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", "dev": true, "license": "MIT", "dependencies": { @@ -1030,11 +1106,15 @@ }, "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true, "license": "ISC" }, "node_modules/@pnpm/npm-conf": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", + "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", "dev": true, "license": "MIT", "dependencies": { @@ -1339,7 +1419,9 @@ } }, "node_modules/@semantic-release/commit-analyzer": { - "version": "13.0.0", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-13.0.1.tgz", + "integrity": "sha512-wdnBPHKkr9HhNhXOhZD5a2LNl91+hs8CC2vsAVYxtZH3y0dV3wKn+uZSN61rdJQZ8EGxzWB3inWocBHV9+u/CQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1348,7 +1430,7 @@ "conventional-commits-filter": "^5.0.0", "conventional-commits-parser": "^6.0.0", "debug": "^4.0.0", - "import-from-esm": "^1.0.3", + "import-from-esm": "^2.0.0", "lodash-es": "^4.17.21", "micromatch": "^4.0.2" }, @@ -1394,17 +1476,6 @@ "node": ">=18" } }, - "node_modules/@semantic-release/exec/node_modules/@sindresorhus/merge-streams": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@semantic-release/exec/node_modules/execa": { "version": "9.5.2", "dev": true, @@ -1561,29 +1632,31 @@ } }, "node_modules/@semantic-release/github": { - "version": "11.0.0", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-12.0.0.tgz", + "integrity": "sha512-louWFjzZ+1dogfJTY8IuJuBcBUOTliYhBUYNcomnTfj0i959wtRQbr1POgdCoTHK7ut4N/0LNlYTH8SvSJM3hg==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/core": "^6.0.0", - "@octokit/plugin-paginate-rest": "^11.0.0", - "@octokit/plugin-retry": "^7.0.0", - "@octokit/plugin-throttling": "^9.0.0", + "@octokit/core": "^7.0.0", + "@octokit/plugin-paginate-rest": "^13.0.0", + "@octokit/plugin-retry": "^8.0.0", + "@octokit/plugin-throttling": "^11.0.0", "@semantic-release/error": "^4.0.0", "aggregate-error": "^5.0.0", "debug": "^4.3.4", "dir-glob": "^3.0.1", - "globby": "^14.0.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.0", "issue-parser": "^7.0.0", "lodash-es": "^4.17.21", "mime": "^4.0.0", "p-filter": "^4.0.0", + "tinyglobby": "^0.2.14", "url-join": "^5.0.0" }, "engines": { - "node": ">=20.8.1" + "node": "^22.14.0 || >= 24.10.0" }, "peerDependencies": { "semantic-release": ">=24.1.0" @@ -1591,6 +1664,8 @@ }, "node_modules/@semantic-release/github/node_modules/@semantic-release/error": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", + "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", "dev": true, "license": "MIT", "engines": { @@ -1599,6 +1674,8 @@ }, "node_modules/@semantic-release/github/node_modules/aggregate-error": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz", + "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", "dev": true, "license": "MIT", "dependencies": { @@ -1613,7 +1690,9 @@ } }, "node_modules/@semantic-release/github/node_modules/clean-stack": { - "version": "5.2.0", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.3.0.tgz", + "integrity": "sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==", "dev": true, "license": "MIT", "dependencies": { @@ -1628,6 +1707,8 @@ }, "node_modules/@semantic-release/github/node_modules/escape-string-regexp": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "license": "MIT", "engines": { @@ -1639,6 +1720,8 @@ }, "node_modules/@semantic-release/github/node_modules/indent-string": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, "license": "MIT", "engines": { @@ -1649,18 +1732,22 @@ } }, "node_modules/@semantic-release/npm": { - "version": "12.0.2", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-13.1.1.tgz", + "integrity": "sha512-c4tlp3STYaTYORmMcLjiTaI8SLoxJ0Uf7IXkem8EyihuOM624wnaGuH4OuY2HHcsHDerNAQNzZ8VO6d4PMHSzA==", "dev": true, "license": "MIT", "dependencies": { + "@actions/core": "^1.11.1", "@semantic-release/error": "^4.0.0", "aggregate-error": "^5.0.0", + "env-ci": "^11.2.0", "execa": "^9.0.0", "fs-extra": "^11.0.0", "lodash-es": "^4.17.21", "nerf-dart": "^1.0.0", "normalize-url": "^8.0.0", - "npm": "^10.9.3", + "npm": "^11.6.2", "rc": "^1.2.8", "read-pkg": "^9.0.0", "registry-auth-token": "^5.0.0", @@ -1668,7 +1755,7 @@ "tempy": "^3.0.0" }, "engines": { - "node": ">=20.8.1" + "node": "^22.14.0 || >= 24.10.0" }, "peerDependencies": { "semantic-release": ">=20.1.0" @@ -1676,25 +1763,18 @@ }, "node_modules/@semantic-release/npm/node_modules/@semantic-release/error": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", + "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", "dev": true, "license": "MIT", "engines": { "node": ">=18" } }, - "node_modules/@semantic-release/npm/node_modules/@sindresorhus/merge-streams": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@semantic-release/npm/node_modules/aggregate-error": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz", + "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", "dev": true, "license": "MIT", "dependencies": { @@ -1709,7 +1789,9 @@ } }, "node_modules/@semantic-release/npm/node_modules/clean-stack": { - "version": "5.2.0", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.3.0.tgz", + "integrity": "sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==", "dev": true, "license": "MIT", "dependencies": { @@ -1724,6 +1806,8 @@ }, "node_modules/@semantic-release/npm/node_modules/escape-string-regexp": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "license": "MIT", "engines": { @@ -1735,6 +1819,8 @@ }, "node_modules/@semantic-release/npm/node_modules/execa": { "version": "9.6.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.0.tgz", + "integrity": "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==", "dev": true, "license": "MIT", "dependencies": { @@ -1760,6 +1846,8 @@ }, "node_modules/@semantic-release/npm/node_modules/get-stream": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", "dev": true, "license": "MIT", "dependencies": { @@ -1775,6 +1863,8 @@ }, "node_modules/@semantic-release/npm/node_modules/human-signals": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1783,6 +1873,8 @@ }, "node_modules/@semantic-release/npm/node_modules/indent-string": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, "license": "MIT", "engines": { @@ -1794,6 +1886,8 @@ }, "node_modules/@semantic-release/npm/node_modules/is-stream": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", "dev": true, "license": "MIT", "engines": { @@ -1803,167 +1897,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/npm/node_modules/npm": { - "version": "10.9.3", - "bundleDependencies": [ - "@isaacs/string-locale-compare", - "@npmcli/arborist", - "@npmcli/config", - "@npmcli/fs", - "@npmcli/map-workspaces", - "@npmcli/package-json", - "@npmcli/promise-spawn", - "@npmcli/redact", - "@npmcli/run-script", - "@sigstore/tuf", - "abbrev", - "archy", - "cacache", - "chalk", - "ci-info", - "cli-columns", - "fastest-levenshtein", - "fs-minipass", - "glob", - "graceful-fs", - "hosted-git-info", - "ini", - "init-package-json", - "is-cidr", - "json-parse-even-better-errors", - "libnpmaccess", - "libnpmdiff", - "libnpmexec", - "libnpmfund", - "libnpmhook", - "libnpmorg", - "libnpmpack", - "libnpmpublish", - "libnpmsearch", - "libnpmteam", - "libnpmversion", - "make-fetch-happen", - "minimatch", - "minipass", - "minipass-pipeline", - "ms", - "node-gyp", - "nopt", - "normalize-package-data", - "npm-audit-report", - "npm-install-checks", - "npm-package-arg", - "npm-pick-manifest", - "npm-profile", - "npm-registry-fetch", - "npm-user-validate", - "p-map", - "pacote", - "parse-conflict-json", - "proc-log", - "qrcode-terminal", - "read", - "semver", - "spdx-expression-parse", - "ssri", - "supports-color", - "tar", - "text-table", - "tiny-relative-date", - "treeverse", - "validate-npm-package-name", - "which", - "write-file-atomic" - ], - "dev": true, - "license": "Artistic-2.0", - "workspaces": [ - "docs", - "smoke-tests", - "mock-globals", - "mock-registry", - "workspaces/*" - ], - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^8.0.1", - "@npmcli/config": "^9.0.0", - "@npmcli/fs": "^4.0.0", - "@npmcli/map-workspaces": "^4.0.2", - "@npmcli/package-json": "^6.2.0", - "@npmcli/promise-spawn": "^8.0.2", - "@npmcli/redact": "^3.2.2", - "@npmcli/run-script": "^9.1.0", - "@sigstore/tuf": "^3.1.1", - "abbrev": "^3.0.1", - "archy": "~1.0.0", - "cacache": "^19.0.1", - "chalk": "^5.4.1", - "ci-info": "^4.2.0", - "cli-columns": "^4.0.0", - "fastest-levenshtein": "^1.0.16", - "fs-minipass": "^3.0.3", - "glob": "^10.4.5", - "graceful-fs": "^4.2.11", - "hosted-git-info": "^8.1.0", - "ini": "^5.0.0", - "init-package-json": "^7.0.2", - "is-cidr": "^5.1.1", - "json-parse-even-better-errors": "^4.0.0", - "libnpmaccess": "^9.0.0", - "libnpmdiff": "^7.0.1", - "libnpmexec": "^9.0.1", - "libnpmfund": "^6.0.1", - "libnpmhook": "^11.0.0", - "libnpmorg": "^7.0.0", - "libnpmpack": "^8.0.1", - "libnpmpublish": "^10.0.1", - "libnpmsearch": "^8.0.0", - "libnpmteam": "^7.0.0", - "libnpmversion": "^7.0.0", - "make-fetch-happen": "^14.0.3", - "minimatch": "^9.0.5", - "minipass": "^7.1.1", - "minipass-pipeline": "^1.2.4", - "ms": "^2.1.2", - "node-gyp": "^11.2.0", - "nopt": "^8.1.0", - "normalize-package-data": "^7.0.0", - "npm-audit-report": "^6.0.0", - "npm-install-checks": "^7.1.1", - "npm-package-arg": "^12.0.2", - "npm-pick-manifest": "^10.0.0", - "npm-profile": "^11.0.1", - "npm-registry-fetch": "^18.0.2", - "npm-user-validate": "^3.0.0", - "p-map": "^7.0.3", - "pacote": "^19.0.1", - "parse-conflict-json": "^4.0.0", - "proc-log": "^5.0.0", - "qrcode-terminal": "^0.12.0", - "read": "^4.1.0", - "semver": "^7.7.2", - "spdx-expression-parse": "^4.0.0", - "ssri": "^12.0.0", - "supports-color": "^9.4.0", - "tar": "^6.2.1", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "treeverse": "^3.0.0", - "validate-npm-package-name": "^6.0.1", - "which": "^5.0.0", - "write-file-atomic": "^6.0.0" - }, - "bin": { - "npm": "bin/npm-cli.js", - "npx": "bin/npx-cli.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, "node_modules/@semantic-release/npm/node_modules/npm-run-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", "dev": true, "license": "MIT", "dependencies": { @@ -1977,2576 +1914,64 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@isaacs/cliui": { - "version": "8.0.2", + "node_modules/@semantic-release/npm/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, + "license": "MIT", "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", + "node_modules/@semantic-release/npm/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "inBundle": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=12" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", + "node_modules/@semantic-release/npm/node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", "dev": true, - "inBundle": true, "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", + "node_modules/@semantic-release/npm/node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", "dev": true, - "inBundle": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", + "node_modules/@semantic-release/release-notes-generator": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-14.1.0.tgz", + "integrity": "sha512-CcyDRk7xq+ON/20YNR+1I/jP7BYKICr1uKd1HHpROSnnTdGqOTburi4jcRiTYz0cpfhxSloQO3cGhnoot7IEkA==", "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.4" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@npmcli/agent": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@npmcli/arborist": { - "version": "8.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^4.0.0", - "@npmcli/installed-package-contents": "^3.0.0", - "@npmcli/map-workspaces": "^4.0.1", - "@npmcli/metavuln-calculator": "^8.0.0", - "@npmcli/name-from-folder": "^3.0.0", - "@npmcli/node-gyp": "^4.0.0", - "@npmcli/package-json": "^6.0.1", - "@npmcli/query": "^4.0.0", - "@npmcli/redact": "^3.0.0", - "@npmcli/run-script": "^9.0.1", - "bin-links": "^5.0.0", - "cacache": "^19.0.1", - "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^8.0.0", - "json-parse-even-better-errors": "^4.0.0", - "json-stringify-nice": "^1.1.4", - "lru-cache": "^10.2.2", - "minimatch": "^9.0.4", - "nopt": "^8.0.0", - "npm-install-checks": "^7.1.0", - "npm-package-arg": "^12.0.0", - "npm-pick-manifest": "^10.0.0", - "npm-registry-fetch": "^18.0.1", - "pacote": "^19.0.0", - "parse-conflict-json": "^4.0.0", - "proc-log": "^5.0.0", - "proggy": "^3.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^3.0.1", - "read-package-json-fast": "^4.0.0", - "semver": "^7.3.7", - "ssri": "^12.0.0", - "treeverse": "^3.0.0", - "walk-up-path": "^3.0.1" - }, - "bin": { - "arborist": "bin/index.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@npmcli/config": { - "version": "9.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/map-workspaces": "^4.0.1", - "@npmcli/package-json": "^6.0.1", - "ci-info": "^4.0.0", - "ini": "^5.0.0", - "nopt": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "walk-up-path": "^3.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@npmcli/fs": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@npmcli/git": { - "version": "6.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/promise-spawn": "^8.0.0", - "ini": "^5.0.0", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^10.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@npmcli/installed-package-contents": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^4.0.0", - "npm-normalize-package-bin": "^4.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "4.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/name-from-folder": "^3.0.0", - "@npmcli/package-json": "^6.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "8.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "cacache": "^19.0.0", - "json-parse-even-better-errors": "^4.0.0", - "pacote": "^20.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote": { - "version": "20.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^6.0.0", - "@npmcli/installed-package-contents": "^3.0.0", - "@npmcli/package-json": "^6.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "@npmcli/run-script": "^9.0.0", - "cacache": "^19.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^12.0.0", - "npm-packlist": "^9.0.0", - "npm-pick-manifest": "^10.0.0", - "npm-registry-fetch": "^18.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^3.0.0", - "ssri": "^12.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "bin/index.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@npmcli/name-from-folder": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@npmcli/node-gyp": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@npmcli/package-json": { - "version": "6.2.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^6.0.0", - "glob": "^10.2.2", - "hosted-git-info": "^8.0.0", - "json-parse-even-better-errors": "^4.0.0", - "proc-log": "^5.0.0", - "semver": "^7.5.3", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "8.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@npmcli/query": { - "version": "4.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@npmcli/redact": { - "version": "3.2.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@npmcli/run-script": { - "version": "9.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^4.0.0", - "@npmcli/package-json": "^6.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "node-gyp": "^11.0.0", - "proc-log": "^5.0.0", - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@sigstore/protobuf-specs": { - "version": "0.4.3", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@sigstore/tuf": { - "version": "3.1.1", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.4.1", - "tuf-js": "^3.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/abbrev": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/agent-base": { - "version": "7.1.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/ansi-styles": { - "version": "6.2.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/aproba": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/archy": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/bin-links": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "cmd-shim": "^7.0.0", - "npm-normalize-package-bin": "^4.0.0", - "proc-log": "^5.0.0", - "read-cmd-shim": "^5.0.0", - "write-file-atomic": "^6.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/binary-extensions": { - "version": "2.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/brace-expansion": { - "version": "2.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/cacache": { - "version": "19.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^4.0.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^7.0.2", - "ssri": "^12.0.0", - "tar": "^7.4.3", - "unique-filename": "^4.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/cacache/node_modules/chownr": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/cacache/node_modules/mkdirp": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/cacache/node_modules/tar": { - "version": "7.4.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/cacache/node_modules/yallist": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/chalk": { - "version": "5.4.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/chownr": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/ci-info": { - "version": "4.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/cidr-regex": { - "version": "4.1.3", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "ip-regex": "^5.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/cli-columns": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/cmd-shim": { - "version": "7.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/common-ancestor-path": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/cross-spawn": { - "version": "7.0.6", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/cssesc": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/debug": { - "version": "4.4.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/diff": { - "version": "5.2.0", - "dev": true, - "inBundle": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/eastasianwidth": { - "version": "0.2.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/encoding": { - "version": "0.1.13", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/env-paths": { - "version": "2.2.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/err-code": { - "version": "2.0.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/exponential-backoff": { - "version": "3.1.2", - "dev": true, - "inBundle": true, - "license": "Apache-2.0" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/fastest-levenshtein": { - "version": "1.0.16", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/foreground-child": { - "version": "3.3.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/fs-minipass": { - "version": "3.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/glob": { - "version": "10.4.5", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/graceful-fs": { - "version": "4.2.11", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/hosted-git-info": { - "version": "8.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/http-cache-semantics": { - "version": "4.2.0", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/http-proxy-agent": { - "version": "7.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/https-proxy-agent": { - "version": "7.0.6", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/ignore-walk": { - "version": "7.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/ini": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/init-package-json": { - "version": "7.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/package-json": "^6.0.0", - "npm-package-arg": "^12.0.0", - "promzard": "^2.0.0", - "read": "^4.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^6.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/ip-address": { - "version": "9.0.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/ip-regex": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/is-cidr": { - "version": "5.1.1", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "cidr-regex": "^4.1.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/jackspeak": { - "version": "3.4.3", - "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/jsbn": { - "version": "1.1.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/json-stringify-nice": { - "version": "1.1.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/jsonparse": { - "version": "1.3.1", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/just-diff": { - "version": "6.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/just-diff-apply": { - "version": "5.5.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/libnpmaccess": { - "version": "9.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-package-arg": "^12.0.0", - "npm-registry-fetch": "^18.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/libnpmdiff": { - "version": "7.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^8.0.1", - "@npmcli/installed-package-contents": "^3.0.0", - "binary-extensions": "^2.3.0", - "diff": "^5.1.0", - "minimatch": "^9.0.4", - "npm-package-arg": "^12.0.0", - "pacote": "^19.0.0", - "tar": "^6.2.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/libnpmexec": { - "version": "9.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^8.0.1", - "@npmcli/run-script": "^9.0.1", - "ci-info": "^4.0.0", - "npm-package-arg": "^12.0.0", - "pacote": "^19.0.0", - "proc-log": "^5.0.0", - "read": "^4.0.0", - "read-package-json-fast": "^4.0.0", - "semver": "^7.3.7", - "walk-up-path": "^3.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/libnpmfund": { - "version": "6.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^8.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/libnpmhook": { - "version": "11.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^18.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/libnpmorg": { - "version": "7.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^18.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/libnpmpack": { - "version": "8.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/arborist": "^8.0.1", - "@npmcli/run-script": "^9.0.1", - "npm-package-arg": "^12.0.0", - "pacote": "^19.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/libnpmpublish": { - "version": "10.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "ci-info": "^4.0.0", - "normalize-package-data": "^7.0.0", - "npm-package-arg": "^12.0.0", - "npm-registry-fetch": "^18.0.1", - "proc-log": "^5.0.0", - "semver": "^7.3.7", - "sigstore": "^3.0.0", - "ssri": "^12.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/libnpmsearch": { - "version": "8.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^18.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/libnpmteam": { - "version": "7.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^18.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/libnpmversion": { - "version": "7.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^6.0.1", - "@npmcli/run-script": "^9.0.1", - "json-parse-even-better-errors": "^4.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/lru-cache": { - "version": "10.4.3", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/make-fetch-happen": { - "version": "14.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/agent": "^3.0.0", - "cacache": "^19.0.1", - "http-cache-semantics": "^4.1.1", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^1.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "ssri": "^12.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/minipass": { - "version": "7.1.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/minipass-collect": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/minipass-fetch": { - "version": "4.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^3.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/minipass-flush": { - "version": "1.0.5", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/minipass-pipeline": { - "version": "1.2.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/minipass-sized": { - "version": "1.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/minizlib": { - "version": "3.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.1.2" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/mute-stream": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/node-gyp": { - "version": "11.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^14.0.3", - "nopt": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "tar": "^7.4.3", - "tinyglobby": "^0.2.12", - "which": "^5.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/node-gyp/node_modules/chownr": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/node-gyp/node_modules/mkdirp": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/node-gyp/node_modules/tar": { - "version": "7.4.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/node-gyp/node_modules/yallist": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/nopt": { - "version": "8.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "abbrev": "^3.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/normalize-package-data": { - "version": "7.0.0", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^8.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/npm-audit-report": { - "version": "6.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/npm-bundled": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^4.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/npm-install-checks": { - "version": "7.1.1", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/npm-normalize-package-bin": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/npm-package-arg": { - "version": "12.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^6.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/npm-packlist": { - "version": "9.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "ignore-walk": "^7.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/npm-pick-manifest": { - "version": "10.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^7.1.0", - "npm-normalize-package-bin": "^4.0.0", - "npm-package-arg": "^12.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/npm-profile": { - "version": "11.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^18.0.0", - "proc-log": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/npm-registry-fetch": { - "version": "18.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/redact": "^3.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^14.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minizlib": "^3.0.1", - "npm-package-arg": "^12.0.0", - "proc-log": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/npm-user-validate": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/p-map": { - "version": "7.0.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/package-json-from-dist": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/pacote": { - "version": "19.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^6.0.0", - "@npmcli/installed-package-contents": "^3.0.0", - "@npmcli/package-json": "^6.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "@npmcli/run-script": "^9.0.0", - "cacache": "^19.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^12.0.0", - "npm-packlist": "^9.0.0", - "npm-pick-manifest": "^10.0.0", - "npm-registry-fetch": "^18.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^3.0.0", - "ssri": "^12.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "bin/index.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/parse-conflict-json": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^4.0.0", - "just-diff": "^6.0.0", - "just-diff-apply": "^5.2.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/path-scurry": { - "version": "1.11.1", - "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/proc-log": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/proggy": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/promise-all-reject-late": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/promise-call-limit": { - "version": "3.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/promise-retry": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/promzard": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "read": "^4.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/qrcode-terminal": { - "version": "0.12.0", - "dev": true, - "inBundle": true, - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/read": { - "version": "4.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "mute-stream": "^2.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/read-cmd-shim": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/read-package-json-fast": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^4.0.0", - "npm-normalize-package-bin": "^4.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/retry": { - "version": "0.12.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/semver": { - "version": "7.7.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/signal-exit": { - "version": "4.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/sigstore": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^3.1.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.4.0", - "@sigstore/sign": "^3.1.0", - "@sigstore/tuf": "^3.1.0", - "@sigstore/verify": "^2.1.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.4.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^3.1.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.4.0", - "make-fetch-happen": "^14.0.2", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify": { - "version": "2.1.1", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^3.1.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.4.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/smart-buffer": { - "version": "4.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/socks": { - "version": "2.8.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/socks-proxy-agent": { - "version": "8.0.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/spdx-correct": { - "version": "3.2.0", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/spdx-exceptions": { - "version": "2.5.0", - "dev": true, - "inBundle": true, - "license": "CC-BY-3.0" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/spdx-expression-parse": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.21", - "dev": true, - "inBundle": true, - "license": "CC0-1.0" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/sprintf-js": { - "version": "1.1.3", - "dev": true, - "inBundle": true, - "license": "BSD-3-Clause" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/ssri": { - "version": "12.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/supports-color": { - "version": "9.4.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/tar": { - "version": "6.2.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/tar/node_modules/minizlib": { - "version": "2.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/tar/node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/tiny-relative-date": { - "version": "1.3.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/tinyglobby": { - "version": "0.2.14", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.6", - "dev": true, - "inBundle": true, - "license": "MIT", - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/treeverse": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/tuf-js": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@tufjs/models": "3.0.1", - "debug": "^4.3.6", - "make-fetch-happen": "^14.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.5" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/unique-filename": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/unique-slug": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/util-deprecate": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/validate-npm-package-name": { - "version": "6.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/walk-up-path": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/which": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/which/node_modules/isexe": { - "version": "3.1.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/wrap-ansi": { - "version": "8.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "9.2.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/write-file-atomic": { - "version": "6.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@semantic-release/npm/node_modules/npm/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/@semantic-release/npm/node_modules/path-key": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm/node_modules/signal-exit": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@semantic-release/npm/node_modules/strip-final-newline": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/npm/node_modules/unicorn-magic": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/release-notes-generator": { - "version": "14.0.0", - "dev": true, - "license": "MIT", + "license": "MIT", "dependencies": { "conventional-changelog-angular": "^8.0.0", "conventional-changelog-writer": "^8.0.0", @@ -4554,10 +1979,10 @@ "conventional-commits-parser": "^6.0.0", "debug": "^4.0.0", "get-stream": "^7.0.0", - "import-from-esm": "^1.0.3", + "import-from-esm": "^2.0.0", "into-stream": "^7.0.0", "lodash-es": "^4.17.21", - "read-pkg-up": "^11.0.0" + "read-package-up": "^11.0.0" }, "engines": { "node": ">=20.8.1" @@ -4568,6 +1993,8 @@ }, "node_modules/@semantic-release/release-notes-generator/node_modules/get-stream": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz", + "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==", "dev": true, "license": "MIT", "engines": { @@ -4589,7 +2016,9 @@ } }, "node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", "dev": true, "license": "MIT", "engines": { @@ -4992,11 +2421,6 @@ "@types/node": "*" } }, - "node_modules/@types/semver": { - "version": "7.5.8", - "dev": true, - "license": "MIT" - }, "node_modules/@types/trusted-types": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-1.0.6.tgz", @@ -5321,12 +2745,11 @@ } }, "node_modules/agent-base": { - "version": "7.1.1", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, "engines": { "node": ">= 14" } @@ -5487,6 +2910,8 @@ }, "node_modules/array-ify": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", "dev": true, "license": "MIT" }, @@ -5739,7 +3164,9 @@ "license": "MIT" }, "node_modules/before-after-hook": { - "version": "3.0.2", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz", + "integrity": "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==", "dev": true, "license": "Apache-2.0" }, @@ -5756,6 +3183,8 @@ }, "node_modules/bottleneck": { "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", "dev": true, "license": "MIT" }, @@ -6207,6 +3636,8 @@ }, "node_modules/compare-func": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, "license": "MIT", "dependencies": { @@ -6260,6 +3691,8 @@ }, "node_modules/config-chain": { "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6269,6 +3702,8 @@ }, "node_modules/conventional-changelog-angular": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.0.0.tgz", + "integrity": "sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==", "dev": true, "license": "ISC", "dependencies": { @@ -6279,11 +3714,12 @@ } }, "node_modules/conventional-changelog-writer": { - "version": "8.0.0", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-8.2.0.tgz", + "integrity": "sha512-Y2aW4596l9AEvFJRwFGJGiQjt2sBYTjPD18DdvxX9Vpz0Z7HQ+g1Z+6iYDAm1vR3QOJrDBkRHixHK/+FhkR6Pw==", "dev": true, "license": "MIT", "dependencies": { - "@types/semver": "^7.5.5", "conventional-commits-filter": "^5.0.0", "handlebars": "^4.7.7", "meow": "^13.0.0", @@ -6298,6 +3734,8 @@ }, "node_modules/conventional-commits-filter": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-5.0.0.tgz", + "integrity": "sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==", "dev": true, "license": "MIT", "engines": { @@ -6305,7 +3743,9 @@ } }, "node_modules/conventional-commits-parser": { - "version": "6.0.0", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.2.0.tgz", + "integrity": "sha512-uLnoLeIW4XaoFtH37qEcg/SXMJmKF4vi7V0H2rnPueg+VEtFGA/asSCNTcq4M/GQ6QmlzchAEtOoDTtKqWeHag==", "dev": true, "license": "MIT", "dependencies": { @@ -6409,6 +3849,8 @@ }, "node_modules/crypto-random-string": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", "dev": true, "license": "MIT", "dependencies": { @@ -6423,6 +3865,8 @@ }, "node_modules/crypto-random-string/node_modules/type-fest": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -6521,6 +3965,8 @@ }, "node_modules/deep-extend": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "license": "MIT", "engines": { @@ -6599,6 +4045,8 @@ }, "node_modules/dot-prop": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6694,7 +4142,9 @@ "license": "MIT" }, "node_modules/env-ci": { - "version": "11.0.0", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-11.2.0.tgz", + "integrity": "sha512-D5kWfzkmaOQDioPmiviWAVtKmpPT4/iJmMVQxWxMPJTFyTkdc5JQUfc5iXEeWxcOdsYTKSAiA/Age4NUOqKsRA==", "dev": true, "license": "MIT", "dependencies": { @@ -7694,6 +5144,23 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/fast-content-type-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz", + "integrity": "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "dev": true, @@ -7901,6 +5368,8 @@ }, "node_modules/from2": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", "dev": true, "license": "MIT", "dependencies": { @@ -7910,11 +5379,15 @@ }, "node_modules/from2/node_modules/isarray": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, "license": "MIT" }, "node_modules/from2/node_modules/readable-stream": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", "dependencies": { @@ -7929,11 +5402,15 @@ }, "node_modules/from2/node_modules/safe-buffer": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "license": "MIT" }, "node_modules/from2/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", "dependencies": { @@ -8033,6 +5510,19 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-installed-browsers": { "version": "0.1.7", "dev": true @@ -8184,36 +5674,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "14.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/path-type": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/gopd": { "version": "1.2.0", "dev": true, @@ -8239,6 +5699,8 @@ }, "node_modules/handlebars": { "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8388,6 +5850,8 @@ }, "node_modules/http-proxy-agent": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "license": "MIT", "dependencies": { @@ -8399,11 +5863,13 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.5", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -8497,7 +5963,9 @@ } }, "node_modules/import-from-esm": { - "version": "1.3.4", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-from-esm/-/import-from-esm-2.0.0.tgz", + "integrity": "sha512-YVt14UZCgsX1vZQ3gKjkWVdBdHQ6eu3MPU1TBgL1H5orXe2+jWD006WCPPtOuwlQm10NuzOW5WawiF1Q9veW8g==", "dev": true, "license": "MIT", "dependencies": { @@ -8505,7 +5973,7 @@ "import-meta-resolve": "^4.0.0" }, "engines": { - "node": ">=16.20" + "node": ">=18.20" } }, "node_modules/import-meta-resolve": { @@ -8551,6 +6019,8 @@ }, "node_modules/ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, "license": "ISC" }, @@ -8569,6 +6039,8 @@ }, "node_modules/into-stream": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", + "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", "dev": true, "license": "MIT", "dependencies": { @@ -8822,6 +6294,8 @@ }, "node_modules/is-obj": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, "license": "MIT", "engines": { @@ -9022,6 +6496,8 @@ }, "node_modules/issue-parser": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.1.tgz", + "integrity": "sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==", "dev": true, "license": "MIT", "dependencies": { @@ -9323,21 +6799,29 @@ }, "node_modules/lodash.capitalize": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", + "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==", "dev": true, "license": "MIT" }, "node_modules/lodash.escaperegexp": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", "dev": true, "license": "MIT" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", "dev": true, "license": "MIT" }, "node_modules/lodash.isstring": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", "dev": true, "license": "MIT" }, @@ -9348,6 +6832,8 @@ }, "node_modules/lodash.uniqby": { "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", "dev": true, "license": "MIT" }, @@ -9438,6 +6924,8 @@ }, "node_modules/meow": { "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", "dev": true, "license": "MIT", "engines": { @@ -9482,7 +6970,9 @@ } }, "node_modules/mime": { - "version": "4.0.4", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz", + "integrity": "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==", "dev": true, "funding": [ "https://github.com/sponsors/broofa" @@ -9588,11 +7078,15 @@ }, "node_modules/neo-async": { "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true, "license": "MIT" }, "node_modules/nerf-dart": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", + "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==", "dev": true, "license": "MIT" }, @@ -9723,7 +7217,9 @@ } }, "node_modules/normalize-url": { - "version": "8.0.2", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.0.tgz", + "integrity": "sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==", "dev": true, "license": "MIT", "engines": { @@ -9734,7 +7230,9 @@ } }, "node_modules/npm": { - "version": "11.5.1", + "version": "11.6.2", + "resolved": "https://registry.npmjs.org/npm/-/npm-11.6.2.tgz", + "integrity": "sha512-7iKzNfy8lWYs3zq4oFPa8EXZz5xt9gQNKJZau3B1ErLBb6bF7sBJ00x09485DOvRT2l5Gerbl3VlZNT57MxJVA==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -9778,7 +7276,6 @@ "ms", "node-gyp", "nopt", - "normalize-package-data", "npm-audit-report", "npm-install-checks", "npm-package-arg", @@ -9814,68 +7311,67 @@ ], "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^9.1.3", - "@npmcli/config": "^10.3.1", + "@npmcli/arborist": "^9.1.6", + "@npmcli/config": "^10.4.2", "@npmcli/fs": "^4.0.0", - "@npmcli/map-workspaces": "^4.0.2", - "@npmcli/package-json": "^6.2.0", - "@npmcli/promise-spawn": "^8.0.2", + "@npmcli/map-workspaces": "^5.0.0", + "@npmcli/package-json": "^7.0.1", + "@npmcli/promise-spawn": "^8.0.3", "@npmcli/redact": "^3.2.2", - "@npmcli/run-script": "^9.1.0", - "@sigstore/tuf": "^3.1.1", + "@npmcli/run-script": "^10.0.0", + "@sigstore/tuf": "^4.0.0", "abbrev": "^3.0.1", "archy": "~1.0.0", - "cacache": "^19.0.1", - "chalk": "^5.4.1", - "ci-info": "^4.3.0", + "cacache": "^20.0.1", + "chalk": "^5.6.2", + "ci-info": "^4.3.1", "cli-columns": "^4.0.0", "fastest-levenshtein": "^1.0.16", "fs-minipass": "^3.0.3", - "glob": "^10.4.5", + "glob": "^11.0.3", "graceful-fs": "^4.2.11", - "hosted-git-info": "^8.1.0", + "hosted-git-info": "^9.0.2", "ini": "^5.0.0", - "init-package-json": "^8.2.1", - "is-cidr": "^5.1.1", + "init-package-json": "^8.2.2", + "is-cidr": "^6.0.1", "json-parse-even-better-errors": "^4.0.0", - "libnpmaccess": "^10.0.1", - "libnpmdiff": "^8.0.6", - "libnpmexec": "^10.1.5", - "libnpmfund": "^7.0.6", - "libnpmorg": "^8.0.0", - "libnpmpack": "^9.0.6", - "libnpmpublish": "^11.1.0", - "libnpmsearch": "^9.0.0", - "libnpmteam": "^8.0.1", - "libnpmversion": "^8.0.1", - "make-fetch-happen": "^14.0.3", - "minimatch": "^9.0.5", + "libnpmaccess": "^10.0.3", + "libnpmdiff": "^8.0.9", + "libnpmexec": "^10.1.8", + "libnpmfund": "^7.0.9", + "libnpmorg": "^8.0.1", + "libnpmpack": "^9.0.9", + "libnpmpublish": "^11.1.2", + "libnpmsearch": "^9.0.1", + "libnpmteam": "^8.0.2", + "libnpmversion": "^8.0.2", + "make-fetch-happen": "^15.0.2", + "minimatch": "^10.0.3", "minipass": "^7.1.1", "minipass-pipeline": "^1.2.4", "ms": "^2.1.2", - "node-gyp": "^11.2.0", + "node-gyp": "^11.4.2", "nopt": "^8.1.0", - "normalize-package-data": "^7.0.1", "npm-audit-report": "^6.0.0", - "npm-install-checks": "^7.1.1", - "npm-package-arg": "^12.0.2", - "npm-pick-manifest": "^10.0.0", - "npm-profile": "^11.0.1", - "npm-registry-fetch": "^18.0.2", + "npm-install-checks": "^7.1.2", + "npm-package-arg": "^13.0.1", + "npm-pick-manifest": "^11.0.1", + "npm-profile": "^12.0.0", + "npm-registry-fetch": "^19.0.0", "npm-user-validate": "^3.0.0", "p-map": "^7.0.3", - "pacote": "^21.0.0", + "pacote": "^21.0.3", "parse-conflict-json": "^4.0.0", "proc-log": "^5.0.0", "qrcode-terminal": "^0.12.0", "read": "^4.1.0", - "semver": "^7.7.2", + "semver": "^7.7.3", "spdx-expression-parse": "^4.0.0", "ssri": "^12.0.0", - "supports-color": "^10.0.0", - "tar": "^6.2.1", + "supports-color": "^10.2.2", + "tar": "^7.5.1", "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", + "tiny-relative-date": "^2.0.2", "treeverse": "^3.0.0", "validate-npm-package-name": "^6.0.2", "which": "^5.0.0" @@ -9899,6 +7395,27 @@ "node": ">=8" } }, + "node_modules/npm/node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/npm/node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/npm/node_modules/@isaacs/cliui": { "version": "8.0.2", "dev": true, @@ -9917,7 +7434,7 @@ } }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", + "version": "6.2.2", "dev": true, "inBundle": true, "license": "MIT", @@ -9952,7 +7469,7 @@ } }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", + "version": "7.1.2", "dev": true, "inBundle": true, "license": "MIT", @@ -9985,7 +7502,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/agent": { - "version": "3.0.0", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -9993,15 +7510,15 @@ "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", + "lru-cache": "^11.2.1", "socks-proxy-agent": "^8.0.3" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "9.1.3", + "version": "9.1.6", "dev": true, "inBundle": true, "license": "ISC", @@ -10009,33 +7526,32 @@ "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/fs": "^4.0.0", "@npmcli/installed-package-contents": "^3.0.0", - "@npmcli/map-workspaces": "^4.0.1", - "@npmcli/metavuln-calculator": "^9.0.0", + "@npmcli/map-workspaces": "^5.0.0", + "@npmcli/metavuln-calculator": "^9.0.2", "@npmcli/name-from-folder": "^3.0.0", "@npmcli/node-gyp": "^4.0.0", - "@npmcli/package-json": "^6.0.1", + "@npmcli/package-json": "^7.0.0", "@npmcli/query": "^4.0.0", "@npmcli/redact": "^3.0.0", - "@npmcli/run-script": "^9.0.1", + "@npmcli/run-script": "^10.0.0", "bin-links": "^5.0.0", - "cacache": "^19.0.1", + "cacache": "^20.0.1", "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^8.0.0", + "hosted-git-info": "^9.0.0", "json-stringify-nice": "^1.1.4", - "lru-cache": "^10.2.2", - "minimatch": "^9.0.4", + "lru-cache": "^11.2.1", + "minimatch": "^10.0.3", "nopt": "^8.0.0", "npm-install-checks": "^7.1.0", - "npm-package-arg": "^12.0.0", - "npm-pick-manifest": "^10.0.0", - "npm-registry-fetch": "^18.0.1", - "pacote": "^21.0.0", + "npm-package-arg": "^13.0.0", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "pacote": "^21.0.2", "parse-conflict-json": "^4.0.0", "proc-log": "^5.0.0", "proggy": "^3.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^3.0.1", - "read-package-json-fast": "^4.0.0", "semver": "^7.3.7", "ssri": "^12.0.0", "treeverse": "^3.0.0", @@ -10049,13 +7565,13 @@ } }, "node_modules/npm/node_modules/@npmcli/config": { - "version": "10.3.1", + "version": "10.4.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/map-workspaces": "^4.0.1", - "@npmcli/package-json": "^6.0.1", + "@npmcli/map-workspaces": "^5.0.0", + "@npmcli/package-json": "^7.0.0", "ci-info": "^4.0.0", "ini": "^5.0.0", "nopt": "^8.1.0", @@ -10080,22 +7596,22 @@ } }, "node_modules/npm/node_modules/@npmcli/git": { - "version": "6.0.3", + "version": "7.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/promise-spawn": "^8.0.0", "ini": "^5.0.0", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^10.0.0", + "lru-cache": "^11.2.1", + "npm-pick-manifest": "^11.0.1", "proc-log": "^5.0.0", "promise-retry": "^2.0.1", "semver": "^7.3.5", "which": "^5.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/@npmcli/installed-package-contents": { @@ -10115,27 +7631,27 @@ } }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "4.0.2", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/name-from-folder": "^3.0.0", - "@npmcli/package-json": "^6.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0" + "@npmcli/package-json": "^7.0.0", + "glob": "^11.0.3", + "minimatch": "^10.0.3" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "9.0.1", + "version": "9.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "cacache": "^19.0.0", + "cacache": "^20.0.0", "json-parse-even-better-errors": "^4.0.0", "pacote": "^21.0.0", "proc-log": "^5.0.0", @@ -10164,25 +7680,25 @@ } }, "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "6.2.0", + "version": "7.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^6.0.0", - "glob": "^10.2.2", - "hosted-git-info": "^8.0.0", + "@npmcli/git": "^7.0.0", + "glob": "^11.0.3", + "hosted-git-info": "^9.0.0", "json-parse-even-better-errors": "^4.0.0", "proc-log": "^5.0.0", "semver": "^7.5.3", "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "8.0.2", + "version": "8.0.3", "dev": true, "inBundle": true, "license": "ISC", @@ -10215,20 +7731,20 @@ } }, "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "9.1.0", + "version": "10.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/node-gyp": "^4.0.0", - "@npmcli/package-json": "^6.0.0", + "@npmcli/package-json": "^7.0.0", "@npmcli/promise-spawn": "^8.0.0", "node-gyp": "^11.0.0", "proc-log": "^5.0.0", "which": "^5.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/@pkgjs/parseargs": { @@ -10242,28 +7758,28 @@ } }, "node_modules/npm/node_modules/@sigstore/bundle": { - "version": "3.1.0", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.4.0" + "@sigstore/protobuf-specs": "^0.5.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/@sigstore/core": { - "version": "2.0.0", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "Apache-2.0", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/@sigstore/protobuf-specs": { - "version": "0.4.3", + "version": "0.5.0", "dev": true, "inBundle": true, "license": "Apache-2.0", @@ -10272,47 +7788,47 @@ } }, "node_modules/npm/node_modules/@sigstore/sign": { - "version": "3.1.0", + "version": "4.0.1", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^3.1.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.4.0", - "make-fetch-happen": "^14.0.2", + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0", + "make-fetch-happen": "^15.0.2", "proc-log": "^5.0.0", "promise-retry": "^2.0.1" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "3.1.1", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.4.1", - "tuf-js": "^3.0.1" + "@sigstore/protobuf-specs": "^0.5.0", + "tuf-js": "^4.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/@sigstore/verify": { - "version": "2.1.1", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^3.1.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.4.1" + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/@tufjs/canonical-json": { @@ -10325,7 +7841,7 @@ } }, "node_modules/npm/node_modules/@tufjs/models": { - "version": "3.0.1", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "MIT", @@ -10334,7 +7850,22 @@ "minimatch": "^9.0.5" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/npm/node_modules/abbrev": { @@ -10365,7 +7896,7 @@ } }, "node_modules/npm/node_modules/ansi-styles": { - "version": "6.2.1", + "version": "6.2.3", "dev": true, "inBundle": true, "license": "MIT", @@ -10432,92 +7963,29 @@ } }, "node_modules/npm/node_modules/cacache": { - "version": "19.0.1", + "version": "20.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/fs": "^4.0.0", "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", + "glob": "^11.0.3", + "lru-cache": "^11.1.0", "minipass": "^7.0.3", "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "p-map": "^7.0.2", "ssri": "^12.0.0", - "tar": "^7.4.3", "unique-filename": "^4.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/cacache/node_modules/chownr": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/npm/node_modules/cacache/node_modules/minizlib": { - "version": "3.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.1.2" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/npm/node_modules/cacache/node_modules/mkdirp": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/cacache/node_modules/tar": { - "version": "7.4.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/npm/node_modules/cacache/node_modules/yallist": { - "version": "5.0.0", - "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/chalk": { - "version": "5.4.1", + "version": "5.6.2", "dev": true, "inBundle": true, "license": "MIT", @@ -10529,16 +7997,16 @@ } }, "node_modules/npm/node_modules/chownr": { - "version": "2.0.0", + "version": "3.0.0", "dev": true, "inBundle": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/npm/node_modules/ci-info": { - "version": "4.3.0", + "version": "4.3.1", "dev": true, "funding": [ { @@ -10553,15 +8021,15 @@ } }, "node_modules/npm/node_modules/cidr-regex": { - "version": "4.1.3", + "version": "5.0.1", "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { - "ip-regex": "^5.0.0" + "ip-regex": "5.0.0" }, "engines": { - "node": ">=14" + "node": ">=20" } }, "node_modules/npm/node_modules/cli-columns": { @@ -10624,6 +8092,12 @@ "node": ">= 8" } }, + "node_modules/npm/node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, "node_modules/npm/node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", "dev": true, @@ -10652,7 +8126,7 @@ } }, "node_modules/npm/node_modules/debug": { - "version": "4.4.1", + "version": "4.4.3", "dev": true, "inBundle": true, "license": "MIT", @@ -10669,7 +8143,7 @@ } }, "node_modules/npm/node_modules/diff": { - "version": "7.0.0", + "version": "8.0.2", "dev": true, "inBundle": true, "license": "BSD-3-Clause", @@ -10758,21 +8232,24 @@ } }, "node_modules/npm/node_modules/glob": { - "version": "10.4.5", + "version": "11.0.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "path-scurry": "^2.0.0" }, "bin": { "glob": "dist/esm/bin.mjs" }, + "engines": { + "node": "20 || >=22" + }, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -10784,15 +8261,15 @@ "license": "ISC" }, "node_modules/npm/node_modules/hosted-git-info": { - "version": "8.1.0", + "version": "9.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "lru-cache": "^10.0.1" + "lru-cache": "^11.1.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/http-cache-semantics": { @@ -10841,15 +8318,15 @@ } }, "node_modules/npm/node_modules/ignore-walk": { - "version": "7.0.0", + "version": "8.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "minimatch": "^9.0.0" + "minimatch": "^10.0.3" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/imurmurhash": { @@ -10871,32 +8348,28 @@ } }, "node_modules/npm/node_modules/init-package-json": { - "version": "8.2.1", + "version": "8.2.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/package-json": "^6.1.0", - "npm-package-arg": "^12.0.0", + "@npmcli/package-json": "^7.0.0", + "npm-package-arg": "^13.0.0", "promzard": "^2.0.0", "read": "^4.0.0", - "semver": "^7.3.5", + "semver": "^7.7.2", "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^6.0.0" + "validate-npm-package-name": "^6.0.2" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/ip-address": { - "version": "9.0.5", + "version": "10.0.1", "dev": true, "inBundle": true, "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, "engines": { "node": ">= 12" } @@ -10914,15 +8387,15 @@ } }, "node_modules/npm/node_modules/is-cidr": { - "version": "5.1.1", + "version": "6.0.1", "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { - "cidr-regex": "^4.1.1" + "cidr-regex": "5.0.1" }, "engines": { - "node": ">=14" + "node": ">=20" } }, "node_modules/npm/node_modules/is-fullwidth-code-point": { @@ -10935,32 +8408,29 @@ } }, "node_modules/npm/node_modules/isexe": { - "version": "2.0.0", + "version": "3.1.1", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": ">=16" + } }, "node_modules/npm/node_modules/jackspeak": { - "version": "3.4.3", + "version": "4.1.1", "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, + "engines": { + "node": "20 || >=22" + }, "funding": { "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/npm/node_modules/jsbn": { - "version": "1.1.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/json-parse-even-better-errors": { "version": "4.0.0", "dev": true, @@ -11001,53 +8471,54 @@ "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { - "version": "10.0.1", + "version": "10.0.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-package-arg": "^12.0.0", - "npm-registry-fetch": "^18.0.1" + "npm-package-arg": "^13.0.0", + "npm-registry-fetch": "^19.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/libnpmdiff": { - "version": "8.0.6", + "version": "8.0.9", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^9.1.3", + "@npmcli/arborist": "^9.1.6", "@npmcli/installed-package-contents": "^3.0.0", "binary-extensions": "^3.0.0", - "diff": "^7.0.0", - "minimatch": "^9.0.4", - "npm-package-arg": "^12.0.0", - "pacote": "^21.0.0", - "tar": "^6.2.1" + "diff": "^8.0.2", + "minimatch": "^10.0.3", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2", + "tar": "^7.5.1" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "10.1.5", + "version": "10.1.8", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^9.1.3", - "@npmcli/package-json": "^6.1.1", - "@npmcli/run-script": "^9.0.1", + "@npmcli/arborist": "^9.1.6", + "@npmcli/package-json": "^7.0.0", + "@npmcli/run-script": "^10.0.0", "ci-info": "^4.0.0", - "npm-package-arg": "^12.0.0", - "pacote": "^21.0.0", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2", "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", "read": "^4.0.0", - "read-package-json-fast": "^4.0.0", "semver": "^7.3.7", + "signal-exit": "^4.1.0", "walk-up-path": "^4.0.0" }, "engines": { @@ -11055,58 +8526,58 @@ } }, "node_modules/npm/node_modules/libnpmfund": { - "version": "7.0.6", + "version": "7.0.9", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^9.1.3" + "@npmcli/arborist": "^9.1.6" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/libnpmorg": { - "version": "8.0.0", + "version": "8.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^18.0.1" + "npm-registry-fetch": "^19.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "9.0.6", + "version": "9.0.9", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^9.1.3", - "@npmcli/run-script": "^9.0.1", - "npm-package-arg": "^12.0.0", - "pacote": "^21.0.0" + "@npmcli/arborist": "^9.1.6", + "@npmcli/run-script": "^10.0.0", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/libnpmpublish": { - "version": "11.1.0", + "version": "11.1.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/package-json": "^6.2.0", + "@npmcli/package-json": "^7.0.0", "ci-info": "^4.0.0", - "npm-package-arg": "^12.0.0", - "npm-registry-fetch": "^18.0.1", + "npm-package-arg": "^13.0.0", + "npm-registry-fetch": "^19.0.0", "proc-log": "^5.0.0", "semver": "^7.3.7", - "sigstore": "^3.0.0", + "sigstore": "^4.0.0", "ssri": "^12.0.0" }, "engines": { @@ -11114,38 +8585,38 @@ } }, "node_modules/npm/node_modules/libnpmsearch": { - "version": "9.0.0", + "version": "9.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^18.0.1" + "npm-registry-fetch": "^19.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/libnpmteam": { - "version": "8.0.1", + "version": "8.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^18.0.1" + "npm-registry-fetch": "^19.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/libnpmversion": { - "version": "8.0.1", + "version": "8.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^6.0.1", - "@npmcli/run-script": "^9.0.1", + "@npmcli/git": "^7.0.0", + "@npmcli/run-script": "^10.0.0", "json-parse-even-better-errors": "^4.0.0", "proc-log": "^5.0.0", "semver": "^7.3.7" @@ -11155,19 +8626,22 @@ } }, "node_modules/npm/node_modules/lru-cache": { - "version": "10.4.3", + "version": "11.2.2", "dev": true, "inBundle": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": "20 || >=22" + } }, "node_modules/npm/node_modules/make-fetch-happen": { - "version": "14.0.3", + "version": "15.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/agent": "^3.0.0", - "cacache": "^19.0.1", + "@npmcli/agent": "^4.0.0", + "cacache": "^20.0.1", "http-cache-semantics": "^4.1.1", "minipass": "^7.0.2", "minipass-fetch": "^4.0.0", @@ -11179,28 +8653,19 @@ "ssri": "^12.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/minimatch": { - "version": "9.0.5", + "version": "10.0.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -11244,18 +8709,6 @@ "encoding": "^0.1.13" } }, - "node_modules/npm/node_modules/minipass-fetch/node_modules/minizlib": { - "version": "3.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.1.2" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/npm/node_modules/minipass-flush": { "version": "1.0.5", "dev": true, @@ -11329,40 +8782,15 @@ } }, "node_modules/npm/node_modules/minizlib": { - "version": "2.1.2", + "version": "3.1.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "minipass": "^7.1.2" }, "engines": { - "node": ">=10" + "node": ">= 18" } }, "node_modules/npm/node_modules/ms": { @@ -11380,8 +8808,17 @@ "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/npm/node_modules/negotiator": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/npm/node_modules/node-gyp": { - "version": "11.2.0", + "version": "11.4.2", "dev": true, "inBundle": true, "license": "MIT", @@ -11404,66 +8841,137 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/chownr": { + "node_modules/npm/node_modules/node-gyp/node_modules/@npmcli/agent": { "version": "3.0.0", "dev": true, "inBundle": true, - "license": "BlueOak-1.0.0", + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, "engines": { - "node": ">=18" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/minizlib": { - "version": "3.0.2", + "node_modules/npm/node_modules/node-gyp/node_modules/cacache": { + "version": "19.0.1", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "minipass": "^7.1.2" + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" }, "engines": { - "node": ">= 18" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/mkdirp": { - "version": "3.0.1", + "node_modules/npm/node_modules/node-gyp/node_modules/glob": { + "version": "10.4.5", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, "bin": { - "mkdirp": "dist/cjs/src/bin.js" + "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/jackspeak": { + "version": "3.4.3", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" }, "funding": { "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/lru-cache": { + "version": "10.4.3", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/node-gyp/node_modules/make-fetch-happen": { + "version": "14.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "ssri": "^12.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/tar": { - "version": "7.4.3", + "node_modules/npm/node_modules/node-gyp/node_modules/minimatch": { + "version": "9.0.5", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=18" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/yallist": { - "version": "5.0.0", + "node_modules/npm/node_modules/node-gyp/node_modules/path-scurry": { + "version": "1.11.1", "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, "engines": { - "node": ">=18" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/npm/node_modules/nopt": { @@ -11481,20 +8989,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/normalize-package-data": { - "version": "7.0.1", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^8.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, "node_modules/npm/node_modules/npm-audit-report": { "version": "6.0.0", "dev": true, @@ -11517,7 +9011,7 @@ } }, "node_modules/npm/node_modules/npm-install-checks": { - "version": "7.1.1", + "version": "7.1.2", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -11538,89 +9032,78 @@ } }, "node_modules/npm/node_modules/npm-package-arg": { - "version": "12.0.2", + "version": "13.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "hosted-git-info": "^8.0.0", + "hosted-git-info": "^9.0.0", "proc-log": "^5.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^6.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/npm-packlist": { - "version": "10.0.0", + "version": "10.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "ignore-walk": "^7.0.0" + "ignore-walk": "^8.0.0", + "proc-log": "^5.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "10.0.0", + "version": "11.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "npm-install-checks": "^7.1.0", "npm-normalize-package-bin": "^4.0.0", - "npm-package-arg": "^12.0.0", + "npm-package-arg": "^13.0.0", "semver": "^7.3.5" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/npm-profile": { - "version": "11.0.1", + "version": "12.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^18.0.0", + "npm-registry-fetch": "^19.0.0", "proc-log": "^5.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "18.0.2", + "version": "19.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/redact": "^3.0.0", "jsonparse": "^1.3.1", - "make-fetch-happen": "^14.0.0", + "make-fetch-happen": "^15.0.0", "minipass": "^7.0.2", "minipass-fetch": "^4.0.0", "minizlib": "^3.0.1", - "npm-package-arg": "^12.0.0", + "npm-package-arg": "^13.0.0", "proc-log": "^5.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm/node_modules/npm-registry-fetch/node_modules/minizlib": { - "version": "3.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.1.2" - }, - "engines": { - "node": ">= 18" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/npm-user-validate": { @@ -11651,28 +9134,28 @@ "license": "BlueOak-1.0.0" }, "node_modules/npm/node_modules/pacote": { - "version": "21.0.0", + "version": "21.0.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^6.0.0", + "@npmcli/git": "^7.0.0", "@npmcli/installed-package-contents": "^3.0.0", - "@npmcli/package-json": "^6.0.0", + "@npmcli/package-json": "^7.0.0", "@npmcli/promise-spawn": "^8.0.0", - "@npmcli/run-script": "^9.0.0", - "cacache": "^19.0.0", + "@npmcli/run-script": "^10.0.0", + "cacache": "^20.0.0", "fs-minipass": "^3.0.0", "minipass": "^7.0.2", - "npm-package-arg": "^12.0.0", - "npm-packlist": "^10.0.0", - "npm-pick-manifest": "^10.0.0", - "npm-registry-fetch": "^18.0.0", + "npm-package-arg": "^13.0.0", + "npm-packlist": "^10.0.1", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", "proc-log": "^5.0.0", "promise-retry": "^2.0.1", - "sigstore": "^3.0.0", + "sigstore": "^4.0.0", "ssri": "^12.0.0", - "tar": "^6.1.11" + "tar": "^7.4.3" }, "bin": { "pacote": "bin/index.js" @@ -11705,16 +9188,16 @@ } }, "node_modules/npm/node_modules/path-scurry": { - "version": "1.11.1", + "version": "2.0.0", "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -11823,19 +9306,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/read-package-json-fast": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^4.0.0", - "npm-normalize-package-bin": "^4.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, "node_modules/npm/node_modules/retry": { "version": "0.12.0", "dev": true, @@ -11853,7 +9323,7 @@ "optional": true }, "node_modules/npm/node_modules/semver": { - "version": "7.7.2", + "version": "7.7.3", "dev": true, "inBundle": true, "license": "ISC", @@ -11898,20 +9368,20 @@ } }, "node_modules/npm/node_modules/sigstore": { - "version": "3.1.0", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^3.1.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.4.0", - "@sigstore/sign": "^3.1.0", - "@sigstore/tuf": "^3.1.0", - "@sigstore/verify": "^2.1.0" + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.0.0", + "@sigstore/protobuf-specs": "^0.5.0", + "@sigstore/sign": "^4.0.0", + "@sigstore/tuf": "^4.0.0", + "@sigstore/verify": "^3.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/smart-buffer": { @@ -11925,12 +9395,12 @@ } }, "node_modules/npm/node_modules/socks": { - "version": "2.8.6", + "version": "2.8.7", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "ip-address": "^9.0.5", + "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" }, "engines": { @@ -11989,17 +9459,11 @@ } }, "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.21", + "version": "3.0.22", "dev": true, "inBundle": true, "license": "CC0-1.0" }, - "node_modules/npm/node_modules/sprintf-js": { - "version": "1.1.3", - "dev": true, - "inBundle": true, - "license": "BSD-3-Clause" - }, "node_modules/npm/node_modules/ssri": { "version": "12.0.0", "dev": true, @@ -12067,7 +9531,7 @@ } }, "node_modules/npm/node_modules/supports-color": { - "version": "10.0.0", + "version": "10.2.2", "dev": true, "inBundle": true, "license": "MIT", @@ -12079,53 +9543,28 @@ } }, "node_modules/npm/node_modules/tar": { - "version": "6.2.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", + "version": "7.5.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/npm/node_modules/tar/node_modules/minipass": { + "node_modules/npm/node_modules/tar/node_modules/yallist": { "version": "5.0.0", "dev": true, "inBundle": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=8" + "node": ">=18" } }, "node_modules/npm/node_modules/text-table": { @@ -12135,19 +9574,19 @@ "license": "MIT" }, "node_modules/npm/node_modules/tiny-relative-date": { - "version": "1.3.0", + "version": "2.0.2", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/tinyglobby": { - "version": "0.2.14", + "version": "0.2.15", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { "node": ">=12.0.0" @@ -12157,10 +9596,13 @@ } }, "node_modules/npm/node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.6", + "version": "6.5.0", "dev": true, "inBundle": true, "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -12192,17 +9634,17 @@ } }, "node_modules/npm/node_modules/tuf-js": { - "version": "3.1.0", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "@tufjs/models": "3.0.1", + "@tufjs/models": "4.0.0", "debug": "^4.4.1", - "make-fetch-happen": "^14.0.3" + "make-fetch-happen": "^15.0.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm/node_modules/unique-filename": { @@ -12288,15 +9730,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/which/node_modules/isexe": { - "version": "3.1.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, "node_modules/npm/node_modules/wrap-ansi": { "version": "8.1.0", "dev": true, @@ -12348,7 +9781,7 @@ } }, "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.1.0", + "version": "6.2.2", "dev": true, "inBundle": true, "license": "MIT", @@ -12383,7 +9816,7 @@ } }, "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", + "version": "7.1.2", "dev": true, "inBundle": true, "license": "MIT", @@ -12594,6 +10027,8 @@ }, "node_modules/p-filter": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz", + "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", "dev": true, "license": "MIT", "dependencies": { @@ -12608,6 +10043,8 @@ }, "node_modules/p-is-promise": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", "dev": true, "license": "MIT", "engines": { @@ -12643,7 +10080,9 @@ } }, "node_modules/p-map": { - "version": "7.0.2", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", "dev": true, "license": "MIT", "engines": { @@ -13101,6 +10540,8 @@ }, "node_modules/proto-list": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true, "license": "ISC" }, @@ -13143,6 +10584,8 @@ }, "node_modules/rc": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { @@ -13157,6 +10600,8 @@ }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, "license": "MIT", "engines": { @@ -13258,22 +10703,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-pkg-up": { - "version": "11.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up-simple": "^1.0.0", - "read-pkg": "^9.0.0", - "type-fest": "^4.6.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/read-pkg/node_modules/parse-json": { "version": "8.1.0", "dev": true, @@ -13377,6 +10806,8 @@ }, "node_modules/registry-auth-token": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", + "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", "dev": true, "license": "MIT", "dependencies": { @@ -13586,17 +11017,17 @@ "license": "MIT" }, "node_modules/semantic-release": { - "version": "24.2.9", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-24.2.9.tgz", - "integrity": "sha512-phCkJ6pjDi9ANdhuF5ElS10GGdAKY6R1Pvt9lT3SFhOwM4T7QZE7MLpBDbNruUx/Q3gFD92/UOFringGipRqZA==", + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-25.0.1.tgz", + "integrity": "sha512-0OCYLm0AfVilNGukM+w0C4aptITfuW1Mhvmz8LQliLeYbPOTFRCIJzoltWWx/F5zVFe6np9eNatBUHdAvMFeZg==", "dev": true, "license": "MIT", "dependencies": { - "@semantic-release/commit-analyzer": "^13.0.0-beta.1", + "@semantic-release/commit-analyzer": "^13.0.1", "@semantic-release/error": "^4.0.0", - "@semantic-release/github": "^11.0.0", - "@semantic-release/npm": "^12.0.2", - "@semantic-release/release-notes-generator": "^14.0.0-beta.1", + "@semantic-release/github": "^12.0.0", + "@semantic-release/npm": "^13.1.1", + "@semantic-release/release-notes-generator": "^14.1.0", "aggregate-error": "^5.0.0", "cosmiconfig": "^9.0.0", "debug": "^4.0.0", @@ -13607,7 +11038,7 @@ "get-stream": "^6.0.0", "git-log-parser": "^1.2.0", "hook-std": "^4.0.0", - "hosted-git-info": "^8.0.0", + "hosted-git-info": "^9.0.0", "import-from-esm": "^2.0.0", "lodash-es": "^4.17.21", "marked": "^15.0.0", @@ -13620,13 +11051,13 @@ "semver": "^7.3.2", "semver-diff": "^5.0.0", "signale": "^1.2.1", - "yargs": "^17.5.1" + "yargs": "^18.0.0" }, "bin": { "semantic-release": "bin/semantic-release.js" }, "engines": { - "node": ">=20.8.1" + "node": "^22.14.0 || >= 24.10.0" } }, "node_modules/semantic-release/node_modules/@semantic-release/error": { @@ -13637,10 +11068,14 @@ "node": ">=18" } }, - "node_modules/semantic-release/node_modules/@sindresorhus/merge-streams": { - "version": "4.0.0", + "node_modules/semantic-release/node_modules/aggregate-error": { + "version": "5.0.0", "dev": true, "license": "MIT", + "dependencies": { + "clean-stack": "^5.2.0", + "indent-string": "^5.0.0" + }, "engines": { "node": ">=18" }, @@ -13648,19 +11083,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/aggregate-error": { - "version": "5.0.0", + "node_modules/semantic-release/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", - "dependencies": { - "clean-stack": "^5.2.0", - "indent-string": "^5.0.0" + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/semantic-release/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=18" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/semantic-release/node_modules/clean-stack": { @@ -13677,6 +11123,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/semantic-release/node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/semantic-release/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, "node_modules/semantic-release/node_modules/escape-string-regexp": { "version": "5.0.0", "dev": true, @@ -13729,14 +11197,16 @@ } }, "node_modules/semantic-release/node_modules/hosted-git-info": { - "version": "8.0.0", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", + "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", "dev": true, "license": "ISC", "dependencies": { - "lru-cache": "^10.0.1" + "lru-cache": "^11.1.0" }, "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/semantic-release/node_modules/human-signals": { @@ -13747,18 +11217,6 @@ "node": ">=18.18.0" } }, - "node_modules/semantic-release/node_modules/import-from-esm": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4", - "import-meta-resolve": "^4.0.0" - }, - "engines": { - "node": ">=18.20" - } - }, "node_modules/semantic-release/node_modules/indent-string": { "version": "5.0.0", "dev": true, @@ -13781,6 +11239,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/semantic-release/node_modules/lru-cache": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, "node_modules/semantic-release/node_modules/npm-run-path": { "version": "5.3.0", "dev": true, @@ -13836,6 +11304,40 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/semantic-release/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/semantic-release/node_modules/strip-final-newline": { "version": "4.0.0", "dev": true, @@ -13847,6 +11349,52 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/semantic-release/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/semantic-release/node_modules/yargs": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^7.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/semantic-release/node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, "node_modules/semver": { "version": "7.6.0", "dev": true, @@ -14153,17 +11701,6 @@ "node": ">=8" } }, - "node_modules/slash": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/source-map": { "version": "0.6.1", "devOptional": true, @@ -14714,6 +12251,8 @@ }, "node_modules/temp-dir": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", + "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", "dev": true, "license": "MIT", "engines": { @@ -14722,6 +12261,8 @@ }, "node_modules/tempy": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", + "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", "dev": true, "license": "MIT", "dependencies": { @@ -14739,6 +12280,8 @@ }, "node_modules/tempy/node_modules/is-stream": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, "license": "MIT", "engines": { @@ -14750,6 +12293,8 @@ }, "node_modules/tempy/node_modules/type-fest": { "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -15057,6 +12602,16 @@ "dev": true, "license": "0BSD" }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, "node_modules/type-check": { "version": "0.4.0", "dev": true, @@ -15207,7 +12762,9 @@ } }, "node_modules/uglify-js": { - "version": "3.17.4", + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", "dev": true, "license": "BSD-2-Clause", "optional": true, @@ -15240,6 +12797,19 @@ "dev": true, "license": "MIT" }, + "node_modules/undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, "node_modules/undici-types": { "version": "7.12.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.12.0.tgz", @@ -15268,6 +12838,8 @@ }, "node_modules/unique-string": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15281,7 +12853,9 @@ } }, "node_modules/universal-user-agent": { - "version": "7.0.2", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", + "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", "dev": true, "license": "ISC" }, @@ -15332,6 +12906,8 @@ }, "node_modules/url-join": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", "dev": true, "license": "MIT", "engines": { @@ -15568,6 +13144,8 @@ }, "node_modules/wordwrap": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true, "license": "MIT" }, diff --git a/package.json b/package.json index f942ebc54..5ccd59712 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,7 @@ "npm": "^11.3.0", "postcss": "^8.4.31", "prettier": "^3.0.3", - "semantic-release": "^24.0.0", + "semantic-release": "^25.0.1", "tailwind-merge": "^3.2.0", "tailwindcss": "^3.4.17", "ts-json-as-const": "^1.0.7", From 744ca8c56dcfea8de7094823bea0af0a28ae95d3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Oct 2025 03:36:02 +0000 Subject: [PATCH 58/70] build(deps-dev): bump zod from 4.1.11 to 4.1.12 Bumps [zod](https://github.com/colinhacks/zod) from 4.1.11 to 4.1.12. - [Release notes](https://github.com/colinhacks/zod/releases) - [Commits](https://github.com/colinhacks/zod/compare/v4.1.11...v4.1.12) --- updated-dependencies: - dependency-name: zod dependency-version: 4.1.12 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3002d1788..35ffef574 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15790,9 +15790,9 @@ } }, "node_modules/zod": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.11.tgz", - "integrity": "sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==", + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", + "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", "dev": true, "license": "MIT", "funding": { From c498fd3606ad0f3492c0aaf72861e3b4cd1b73f7 Mon Sep 17 00:00:00 2001 From: Dave Nicolson Date: Tue, 21 Oct 2025 18:59:21 +0200 Subject: [PATCH 59/70] Fix playlist API duration on playlist change --- src/features/playlistLength/utils.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/features/playlistLength/utils.ts b/src/features/playlistLength/utils.ts index d1419309f..9e26199ba 100644 --- a/src/features/playlistLength/utils.ts +++ b/src/features/playlistLength/utils.ts @@ -224,12 +224,23 @@ export async function initializePlaylistLength({ await appendPlaylistLengthUIElement(element); let lastUpdate = 0; const throttleDelay = 500; + let lastPlaylistLength: null | number = null; async function safeUpdate() { const now = Date.now(); if (now - lastUpdate < throttleDelay) return; lastUpdate = now; const videoElement = document.querySelector("video"); const { playbackRate: playerSpeed = 1 } = videoElement || {}; + if (playlistLengthGetMethod === "api") { + const playlistItems = pageType === "watch" ? getPlaylistItemsFromWatchPage() : getPlaylistItemsFromPlaylistPage(); + const { length: currentLength } = playlistItems; + if (lastPlaylistLength === null) { + lastPlaylistLength = currentLength; + } else if (currentLength !== lastPlaylistLength) { + window.cachedPlaylistDuration = null; + lastPlaylistLength = currentLength; + } + } const data = await getDataForPlaylistLengthUIElement({ pageType, playlistLengthGetMethod, From 5e0798ecda3126d4bea73444badd82da58342e50 Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Thu, 23 Oct 2025 01:17:42 -0400 Subject: [PATCH 60/70] fix(maximize player button): New layout and fix positioning #738 #1013 --- public/contentStyle.css | 50 +---- src/features/maximizePlayerButton/index.css | 21 ++ src/features/maximizePlayerButton/index.ts | 181 +++------------- src/features/maximizePlayerButton/utils.ts | 221 ++++++++++---------- src/pages/embedded/index.ts | 14 +- 5 files changed, 160 insertions(+), 327 deletions(-) create mode 100644 src/features/maximizePlayerButton/index.css diff --git a/public/contentStyle.css b/public/contentStyle.css index 708434ceb..2c10d8bdf 100644 --- a/public/contentStyle.css +++ b/public/contentStyle.css @@ -10,57 +10,11 @@ pointer-events: none !important; color: #eee !important; border-radius: 8px !important; - background-color: var(--yt-spec-overlay-background-medium-light, rgba(0, 0, 0, .3)) !important; + background-color: var(--yt-spec-overlay-background-medium-light, rgba(0, 0, 0, 0.3)) !important; text-shadow: 0 0 2px #000 !important; } .ytp-big-mode .yte-button-tooltip { line-height: 22px !important; - font: 20px !important + font: 20px !important; } - -.maximized_chapter { - width: 100% !important; -} - -.maximized_video { - width: 100vw !important; - height: 100vh !important; - left: 0 !important; - top: 0 !important; - object-fit: contain !important; - background: black !important; -} - -.maximized_video_container { - position: fixed !important; - top: 0 !important; - left: 0 !important; - width: 100vw !important; - height: 100vh !important; - z-index: 2020 !important; -} - -.maximized_controls { - width: 97vw !important; - right: 12px !important; -} - -.yte-maximize-player-button { - opacity: 0.9; - display: inline-block; - width: 48px; - padding: 0 2px; - -webkit-transition: opacity 0.1s cubic-bezier(0.4, 0, 1, 1); - -o-transition: opacity 0.1s cubic-bezier(0.4, 0, 1, 1); - transition: opacity 0.1s cubic-bezier(0.4, 0, 1, 1); - overflow: hidden; -} - -.ytp-chapter-container { - flex: 1 !important; -} - -.ytp-right-controls { - display: flex !important; -} \ No newline at end of file diff --git a/src/features/maximizePlayerButton/index.css b/src/features/maximizePlayerButton/index.css new file mode 100644 index 000000000..5d803b6d3 --- /dev/null +++ b/src/features/maximizePlayerButton/index.css @@ -0,0 +1,21 @@ +.yte-maximized-video { + width: 100vw !important; + height: 100vh !important; + left: 0 !important; + top: 0 !important; + object-fit: contain !important; + background: black !important; +} + +.yte-maximized-video-container { + position: fixed !important; + top: 0 !important; + left: 0 !important; + width: 100vw !important; + height: 100vh !important; + z-index: 2020 !important; +} + +.yte-maximized-width { + width: calc(99vw - 13px) !important; +} diff --git a/src/features/maximizePlayerButton/index.ts b/src/features/maximizePlayerButton/index.ts index 35fe956fe..381afc2ad 100644 --- a/src/features/maximizePlayerButton/index.ts +++ b/src/features/maximizePlayerButton/index.ts @@ -1,14 +1,13 @@ +import "./index.css"; import type { AddButtonFunction, RemoveButtonFunction } from "@/src/features"; -import type { Nullable, YouTubePlayerDiv } from "@/src/types"; import { addFeatureButton, removeFeatureButton } from "@/src/features/buttonPlacement"; -import { getFeatureButton, modifyIconForLightTheme, updateFeatureButtonIcon, updateFeatureButtonTitle } from "@/src/features/buttonPlacement/utils"; +import { getFeatureButton, updateFeatureButtonTitle } from "@/src/features/buttonPlacement/utils"; import { getFeatureIcon } from "@/src/icons"; import eventManager from "@/src/utils/EventManager"; import { createTooltip, waitForSpecificMessage } from "@/src/utils/utilities"; -import { maximizePlayer, setupVideoPlayerTimeUpdate, updateProgressBarPositions } from "./utils"; -// TODO: fix the "default/theatre" view button and pip button not making the player minimize to the previous state. +import { maximizePlayer, minimizePlayer } from "./utils"; export const addMaximizePlayerButton: AddButtonFunction = async () => { // Wait for the "options" message from the content script const { @@ -21,52 +20,6 @@ export const addMaximizePlayerButton: AddButtonFunction = async () => { } = await waitForSpecificMessage("options", "request_data", "content"); // If the maximize player button option is disabled, return if (!enableMaximizePlayerButton) return; - // Add a click event listener to the maximize button - function maximizePlayerButtonClickListener(checked?: boolean) { - const button = getFeatureButton("maximizePlayerButton"); - if (!button) return; - const featureName = "maximizePlayerButton"; - const { remove } = createTooltip({ - direction: maximizePlayerButtonPlacement === "below_player" ? "down" : "up", - element: button, - featureName, - id: `yte-feature-${featureName}-tooltip` - }); - if (checked !== undefined) { - if (checked) remove(); - updateFeatureButtonTitle( - "maximizePlayerButton", - window.i18nextInstance.t(`pages.content.features.maximizePlayerButton.button.toggle.${checked ? "on" : "off"}`) - ); - } - maximizePlayer(); - updateProgressBarPositions(); - setupVideoPlayerTimeUpdate(); - } - - const pipElement: Nullable = document.querySelector("button.ytp-pip-button"); - const sizeElement: Nullable = document.querySelector("button.ytp-size-button"); - const miniPlayerElement: Nullable = document.querySelector("button.ytp-miniplayer-button"); - async function otherElementClickListener() { - // Get the video element - const videoElement = document.querySelector("video.video-stream.html5-main-video"); - // If video element is not available, return - if (!videoElement) return; - const videoContainer = document.querySelector("#movie_player"); - if (!videoContainer) return; - if (videoContainer.classList.contains("maximized_video_container") && videoElement.classList.contains("maximized_video")) { - const maximizePlayerButton = getFeatureButton("maximizePlayerButton"); - if (!maximizePlayerButton) return; - maximizePlayer(); - maximizePlayerButton.ariaChecked = "false"; - const button = getFeatureButton("maximizePlayerButton"); - const icon = getFeatureIcon("maximizePlayerButton", "below_player"); - if (button && button instanceof HTMLButtonElement) { - if (typeof icon === "object" && "off" in icon && "on" in icon) updateFeatureButtonIcon(button, await modifyIconForLightTheme(icon.off, true)); - updateFeatureButtonTitle("maximizePlayerButton", window.i18nextInstance.t("pages.content.features.maximizePlayerButton.button.toggle.off")); - } - } - } await addFeatureButton( "maximizePlayerButton", maximizePlayerButtonPlacement, @@ -74,114 +27,30 @@ export const addMaximizePlayerButton: AddButtonFunction = async () => { window.i18nextInstance.t("pages.content.features.maximizePlayerButton.button.label") : window.i18nextInstance.t("pages.content.features.maximizePlayerButton.button.toggle.off"), getFeatureIcon("maximizePlayerButton", maximizePlayerButtonPlacement), - maximizePlayerButtonClickListener, + (checked) => { + if (checked === undefined) return; + const button = getFeatureButton("maximizePlayerButton"); + if (!button) return; + const featureName = "maximizePlayerButton"; + const { remove } = createTooltip({ + direction: maximizePlayerButtonPlacement === "below_player" ? "down" : "up", + element: button, + featureName, + id: `yte-feature-${featureName}-tooltip` + }); + updateFeatureButtonTitle( + "maximizePlayerButton", + window.i18nextInstance.t(`pages.content.features.maximizePlayerButton.button.toggle.${checked ? "on" : "off"}`) + ); + if (checked) { + remove(); + maximizePlayer(); + } else { + minimizePlayer(); + } + }, true ); - function ytpLeftButtonMouseEnterListener(event: MouseEvent) { - const ytTooltip = document.querySelector("#movie_player > div.ytp-tooltip"); - if (!ytTooltip) return; - // Get the video element - const videoElement = document.querySelector("video.video-stream.html5-main-video"); - // If video element is not available, return - if (!videoElement) return; - const videoContainer = document.querySelector("#movie_player"); - if (!videoContainer) return; - const controlsElement = document.querySelector("div.ytp-chrome-bottom"); - if (!controlsElement) return; - - if ( - videoContainer.classList.contains("maximized_video_container") && - videoElement.classList.contains("maximized_video") && - controlsElement.classList.contains("maximized_controls") - ) { - const buttonRect = (event.target as HTMLButtonElement).getBoundingClientRect(); - const tooltipRect = ytTooltip.getBoundingClientRect(); - ytTooltip.style.top = `${buttonRect.top - tooltipRect.height - 14}px`; - ytTooltip.style.zIndex = "2021"; - } - } - function ytpRightButtonMouseEnterListener(event: MouseEvent) { - const ytTooltip = document.querySelector("#movie_player > div.ytp-tooltip"); - if (!ytTooltip) return; - // Get the video element - const videoElement = document.querySelector("video.video-stream.html5-main-video"); - // If video element is not available, return - if (!videoElement) return; - const videoContainer = document.querySelector("#movie_player"); - if (!videoContainer) return; - const controlsElement = document.querySelector("div.ytp-chrome-bottom"); - if (!controlsElement) return; - - if ( - videoContainer.classList.contains("maximized_video_container") && - videoElement.classList.contains("maximized_video") && - controlsElement.classList.contains("maximized_controls") - ) { - const buttonRect = (event.target as HTMLButtonElement).getBoundingClientRect(); - const tooltipRect = ytTooltip.getBoundingClientRect(); - ytTooltip.style.left = `${buttonRect.left - 48}px`; - ytTooltip.style.top = `${buttonRect.top - tooltipRect.height - 14}px`; - ytTooltip.style.zIndex = "2021"; - } - } - function seekBarMouseEnterListener(event: MouseEvent) { - // TODO: get the seek preview to be in the correct place when the video is maximized from default view - const ytTooltip = document.querySelector("#movie_player > div.ytp-tooltip"); - if (!ytTooltip) return; - // Get the video element - const videoElement = document.querySelector("video.video-stream.html5-main-video"); - // If video element is not available, return - if (!videoElement) return; - const videoContainer = document.querySelector("#movie_player"); - if (!videoContainer) return; - const controlsElement = document.querySelector("div.ytp-chrome-bottom"); - if (!controlsElement) return; - - if ( - videoContainer.classList.contains("maximized_video_container") && - videoElement.classList.contains("maximized_video") && - controlsElement.classList.contains("maximized_controls") - ) { - const buttonRect = (event.target as HTMLButtonElement).getBoundingClientRect(); - const tooltipRect = ytTooltip.getBoundingClientRect(); - ytTooltip.style.top = `${buttonRect.top - tooltipRect.height - 14}px`; - ytTooltip.style.zIndex = "2021"; - } - } - - if (pipElement) { - eventManager.addEventListener(pipElement, "click", otherElementClickListener, "maximizePlayerButton"); - } - if (sizeElement) { - eventManager.addEventListener(sizeElement, "click", otherElementClickListener, "maximizePlayerButton"); - } - if (miniPlayerElement) { - eventManager.addEventListener(miniPlayerElement, "click", otherElementClickListener, "maximizePlayerButton"); - } - const typLeftButtons = [ - ...document.querySelectorAll("div.ytp-chrome-controls > div.ytp-left-controls > :not(.yte-maximized-player-button)") - ]; - const volumePanel = document.querySelector("div.ytp-chrome-controls > div.ytp-left-controls > span > div"); - const seekBarContainer = document.querySelector("div.ytp-chrome-bottom > div.ytp-progress-bar"); - if (!seekBarContainer) return; - if (volumePanel) typLeftButtons.push(volumePanel); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore TODO: figure out the proper type for this - eventManager.addEventListener(seekBarContainer, "mouseenter", seekBarMouseEnterListener, "maximizePlayerButton"); - - const typRightButtons = document.querySelectorAll( - "div.ytp-chrome-controls > div.ytp-right-controls > :not(.yte-maximized-player-button)" - ); - typLeftButtons.forEach((button) => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore TODO: figure out the proper type for this - eventManager.addEventListener(button, "mouseenter", ytpLeftButtonMouseEnterListener, "maximizePlayerButton"); - }); - typRightButtons.forEach((button) => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore TODO: figure out the proper type for this - eventManager.addEventListener(button, "mouseenter", ytpRightButtonMouseEnterListener, "maximizePlayerButton"); - }); }; export const removeMaximizePlayerButton: RemoveButtonFunction = async (placement) => { await removeFeatureButton("maximizePlayerButton", placement); diff --git a/src/features/maximizePlayerButton/utils.ts b/src/features/maximizePlayerButton/utils.ts index 7b229cda7..5a4bc4659 100644 --- a/src/features/maximizePlayerButton/utils.ts +++ b/src/features/maximizePlayerButton/utils.ts @@ -1,123 +1,122 @@ import type { YouTubePlayerDiv } from "@/src/types"; +import { getFeatureButton, modifyIconForLightTheme, updateFeatureButtonIcon, updateFeatureButtonTitle } from "@/src/features/buttonPlacement/utils"; +import { getFeatureIcon } from "@/src/icons"; import eventManager from "@/src/utils/EventManager"; +import { type ModifyElementAction, modifyElementsClassList } from "@/src/utils/utilities"; -let wasInTheatreMode = false; -let setToTheatreMode = false; +const theaterModeButtonPathD = + "M21.20 3.01L21 3H3L2.79 3.01C2.30 3.06 1.84 3.29 1.51 3.65C1.18 4.02 .99 4.50 1 5V19L1.01 19.20C1.05 19.66 1.26 20.08 1.58 20.41C1.91 20.73 2.33 20.94 2.79 20.99L3 21H21L21.20 20.98C21.66 20.94 22.08 20.73 22.41 20.41C22.73 20.08 22.94 19.66 22.99 19.20L23 19V5C23.00 4.50 22.81 4.02 22.48 3.65C22.15 3.29 21.69 3.06 21.20 3.01ZM3 15V5H21V15H3ZM7.87 6.72L7.79 6.79L4.58 10L7.79 13.20C7.88 13.30 7.99 13.37 8.11 13.43C8.23 13.48 8.37 13.51 8.50 13.51C8.63 13.51 8.76 13.48 8.89 13.43C9.01 13.38 9.12 13.31 9.21 13.21C9.31 13.12 9.38 13.01 9.43 12.89C9.48 12.76 9.51 12.63 9.51 12.50C9.51 12.37 9.48 12.23 9.43 12.11C9.37 11.99 9.30 11.88 9.20 11.79L7.41 10L9.20 8.20L9.27 8.13C9.42 7.93 9.50 7.69 9.48 7.45C9.47 7.20 9.36 6.97 9.19 6.80C9.02 6.63 8.79 6.52 8.54 6.51C8.30 6.49 8.06 6.57 7.87 6.72ZM14.79 6.79C14.60 6.98 14.50 7.23 14.50 7.5C14.50 7.76 14.60 8.01 14.79 8.20L16.58 10L14.79 11.79L14.72 11.86C14.57 12.06 14.49 12.30 14.50 12.54C14.51 12.79 14.62 13.02 14.79 13.20C14.97 13.37 15.20 13.48 15.45 13.49C15.69 13.50 15.93 13.42 16.13 13.27L16.20 13.20L19.41 10L16.20 6.79C16.01 6.60 15.76 6.50 15.5 6.50C15.23 6.50 14.98 6.60 14.79 6.79ZM3 19V17H21V19H3Z"; + +let isProgrammaticClick = false; +let listenersInitialized = false; export function maximizePlayer() { - // Get the video element - const videoElement = document.querySelector("video.video-stream.html5-main-video"); - // If video element is not available, return - if (!videoElement) return; - const videoContainer = document.querySelector("#movie_player"); - if (!videoContainer) return; - const controlsElement = document.querySelector("div.ytp-chrome-bottom"); - if (!controlsElement) return; - const sizeElement = document.querySelector("button.ytp-button.ytp-size-button"); + const videoPlayer = document.querySelector("video.html5-main-video"); + if (!videoPlayer) return; + const chromeBottom = document.querySelector("div.ytp-chrome-bottom"); + if (!chromeBottom) return; + const leftControls = chromeBottom.querySelector("div.ytp-left-controls"); + const rightControls = chromeBottom.querySelector("div.ytp-right-controls"); + if (!leftControls || !rightControls) return; + const pipElement = document.querySelector("button.ytp-pip-button"); + const miniPlayerElement = document.querySelector("button.ytp-miniplayer-button"); + const sizeElement = document.querySelector("button.ytp-size-button"); if (!sizeElement) return; - const featureMenu = document.querySelector("#yte-feature-menu"); - if (!featureMenu) return; - const { - childNodes: [svgElement] - } = sizeElement; - if (!svgElement || !(svgElement instanceof SVGElement)) return; - const theaterModeVariables = { - ariaLabel: "Theater mode keyboard shortcut t", - dataTitleNoTooltip: "Theater mode", - pathD: "m 28,11 0,14 -20,0 0,-14 z m -18,2 16,0 0,10 -16,0 0,-10 z", - title: "Theater mode (t)" - }; - // const defaultModeVariables = { - // ariaLabel: "Default view keyboard shortcut t", - // dataTitleNoTooltip: "Default view", - // pathD: "m 26,13 0,10 -16,0 0,-10 z m -14,2 12,0 0,6 -12,0 0,-6 z", - // title: "Default view (t)" - // }; - const { - childNodes: [, svgPath] - } = svgElement; - if (!svgPath || !(svgPath instanceof SVGPathElement)) return; - if (svgPath.getAttribute("d") === theaterModeVariables.pathD) wasInTheatreMode = true; - else wasInTheatreMode = false; - if (wasInTheatreMode) setToTheatreMode = false; - else setToTheatreMode = true; - // TODO: finish this code to make the maximize player button work properly. (implement ytp-scrubber-container adjustment) if all else fails revert to using the theatre mode button to get the tooltips in the correct place - console.log(`setToTheatreMode && wasInTheatreMode: ${setToTheatreMode && wasInTheatreMode}`); - console.log(`setToTheatreMode && !wasInTheatreMode: ${setToTheatreMode && !wasInTheatreMode}`); - console.log(`!setToTheatreMode && wasInTheatreMode: ${!setToTheatreMode && wasInTheatreMode}`); - console.log(`!setToTheatreMode && !wasInTheatreMode: ${!setToTheatreMode && !wasInTheatreMode}`); - if ( - videoContainer.classList.contains("maximized_video_container") && - videoElement.classList.contains("maximized_video") && - controlsElement.classList.contains("maximized_controls") - ) { - // sizeElement.click(); - // if (setToTheatreMode && wasInTheatreMode) { - // const { dataTitleNoTooltip, title, ariaLabel, pathD } = defaultModeVariables; - // svgPath.setAttributeNS(null, "d", pathD); - // sizeElement.setAttributeNS(null, "aria-label", ariaLabel); - // sizeElement.dataset.titleNoTooltip = dataTitleNoTooltip; - // sizeElement.title = title; - // } else if (setToTheatreMode && !wasInTheatreMode) { - // const { dataTitleNoTooltip, title, ariaLabel, pathD } = theaterModeVariables; - // svgPath.setAttributeNS(null, "d", pathD); - // sizeElement.setAttributeNS(null, "aria-label", ariaLabel); - // sizeElement.dataset.titleNoTooltip = dataTitleNoTooltip; - // sizeElement.title = title; - // } - document.body.style.overflow = ""; - videoElement.classList.remove("maximized_video"); - videoContainer.classList.remove("maximized_video_container"); - controlsElement.classList.remove("maximized_controls"); - featureMenu.style.bottom = ""; - } else { - // sizeElement.click(); - - // if (!setToTheatreMode && wasInTheatreMode) { - // const { dataTitleNoTooltip, title, ariaLabel, pathD } = defaultModeVariables; - // svgPath.setAttributeNS(null, "d", pathD); - // sizeElement.setAttributeNS(null, "aria-label", ariaLabel); - // sizeElement.dataset.titleNoTooltip = dataTitleNoTooltip; - // sizeElement.title = title; - // } else if (setToTheatreMode && !wasInTheatreMode) { - // const { dataTitleNoTooltip, title, ariaLabel, pathD } = theaterModeVariables; - // svgPath.setAttributeNS(null, "d", pathD); - // sizeElement.setAttributeNS(null, "aria-label", ariaLabel); - // sizeElement.dataset.titleNoTooltip = dataTitleNoTooltip; - // sizeElement.title = title; - // } - document.body.style.overflow = "hidden"; - videoElement.classList.add("maximized_video"); - videoContainer.classList.add("maximized_video_container"); - controlsElement.classList.add("maximized_controls"); - featureMenu.style.bottom = "-14px"; + const inTheaterMode = document.querySelector(`button.ytp-size-button svg path[d='${theaterModeButtonPathD}']`) === null; + document.body.setAttribute("yte-size-button-state", inTheaterMode ? "theater" : "default"); + if (!inTheaterMode && sizeElement) clickAndRestore(sizeElement); + adjustPlayer("add"); + if (!listenersInitialized) { + listenersInitialized = true; + [pipElement, sizeElement, miniPlayerElement].forEach((element) => { + if (!element) return; + eventManager.addEventListener( + element, + "click", + async () => { + if (isProgrammaticClick) return; + minimizePlayer(); + const maximizePlayerButton = getFeatureButton("maximizePlayerButton"); + if (!maximizePlayerButton) return; + maximizePlayerButton.ariaChecked = "false"; + const button = getFeatureButton("maximizePlayerButton"); + const icon = getFeatureIcon("maximizePlayerButton", "player_controls_left"); + if (button && button instanceof HTMLButtonElement) { + if (typeof icon === "object" && "off" in icon && "on" in icon) + updateFeatureButtonIcon(button, await modifyIconForLightTheme(icon.off, true)); + updateFeatureButtonTitle( + "maximizePlayerButton", + window.i18nextInstance.t("pages.content.features.maximizePlayerButton.button.toggle.off") + ); + } + }, + "maximizePlayerButton" + ); + }); } } -export function setupVideoPlayerTimeUpdate() { - const videoElement = document.querySelector("video.video-stream.html5-main-video"); - if (!videoElement) return; - const videoPlayerTimeUpdateListener = () => { - updateProgressBarPositions(); - }; - eventManager.addEventListener(videoElement, "timeupdate", videoPlayerTimeUpdateListener, "maximizePlayerButton"); + +export function minimizePlayer() { + const lastState = document.body.getAttribute("yte-size-button-state"); + const sizeElement = document.querySelector("button.ytp-size-button"); + if (lastState === "default" && sizeElement) clickAndRestore(sizeElement); + document.body.removeAttribute("yte-size-button-state"); + adjustPlayer("remove"); } -// TODO: get played progress bar to be accurate when maximized from default view -// TODO: Add event listener that updates scrubber position when maximize button is clicked -export function updateProgressBarPositions() { - const seekBar = document.querySelector("div.ytp-progress-bar"); - const scrubber = document.querySelector("div.ytp-scrubber-container"); - const hoverProgress = document.querySelector("div.ytp-hover-progress"); - if (!seekBar) return; - if (!scrubber) return; - if (!hoverProgress) return; - const elapsedTime = parseInt(seekBar?.ariaValueNow ?? "0") ?? 0; - const duration = parseInt(seekBar?.ariaValueMax ?? "0") ?? 0; - const seekBarWidth = seekBar?.clientWidth ?? 0; - const scrubberPosition = parseFloat(Math.min((elapsedTime / duration) * seekBarWidth, seekBarWidth).toFixed(3)); - // TODO: get this working when video is playing - scrubber.style.transform = `translateX(${scrubberPosition}px)`; - // TODO: get all progress bar lists updated when video is playing - hoverProgress.style.left = `${scrubberPosition}px`; +function adjustPlayer(action: ModifyElementAction) { + switch (action) { + case "add": + document.body.style.overflow = "hidden"; + document.body.setAttribute("yte-maximized", ""); + break; + case "remove": + document.body.style.overflow = ""; + document.body.removeAttribute("yte-maximized"); + break; + } + + modifyElementsClassList(action, [ + { + className: "yte-maximized-video", + element: document.querySelector("video.video-stream.html5-main-video") + }, + { + className: "yte-maximized-video-container", + element: document.querySelector("#movie_player") + }, + { + className: "yte-maximized-width", + element: document.querySelector("div.ytp-chrome-bottom") + }, + { + className: "yte-maximized-width", + element: document.querySelector(".ytp-chapter-hover-container") + } + ]); +} + +function clickAndRestore(sizeElement: HTMLButtonElement) { + const original = { + ariaLabel: sizeElement.getAttribute("aria-label") ?? "", + d: sizeElement.querySelector("svg path")?.getAttribute("d") ?? "", + titleNoTooltip: sizeElement.getAttribute("data-title-no-tooltip") ?? "", + tooltipTitle: sizeElement.getAttribute("data-tooltip-title") ?? "" + }; + isProgrammaticClick = true; + sizeElement.click(); + setTimeout(() => { + const newButton = document.querySelector("button.ytp-size-button"); + if (!newButton) { + isProgrammaticClick = false; + return; + } + const path = newButton.querySelector("svg path"); + if (path) path.setAttribute("d", original.d); + newButton.setAttribute("aria-label", original.ariaLabel); + newButton.setAttribute("data-title-no-tooltip", original.titleNoTooltip); + newButton.setAttribute("data-tooltip-title", original.tooltipTitle); + isProgrammaticClick = false; + }, 50); } diff --git a/src/pages/embedded/index.ts b/src/pages/embedded/index.ts index f78124556..325e15fa5 100644 --- a/src/pages/embedded/index.ts +++ b/src/pages/embedded/index.ts @@ -43,7 +43,7 @@ import { disableHideShorts, enableHideShorts } from "@/src/features/hideShorts"; import { disableHideTranslateComment, enableHideTranslateComment } from "@/src/features/hideTranslateComment"; import { addLoopButton, removeLoopButton } from "@/src/features/loopButton"; import { addMaximizePlayerButton, removeMaximizePlayerButton } from "@/src/features/maximizePlayerButton"; -import { maximizePlayer } from "@/src/features/maximizePlayerButton/utils"; +import { minimizePlayer } from "@/src/features/maximizePlayerButton/utils"; import { openTranscriptButton } from "@/src/features/openTranscriptButton"; import { removeOpenTranscriptButton } from "@/src/features/openTranscriptButton/utils"; import { disableOpenYouTubeSettingsOnHover, enableOpenYouTubeSettingsOnHover } from "@/src/features/openYouTubeSettingsOnHover"; @@ -783,17 +783,7 @@ const initialize = function () { await addMaximizePlayerButton(); } else { await removeMaximizePlayerButton(); - const maximizePlayerButton = document.querySelector("video.html5-main-video"); - if (!maximizePlayerButton) return; - // Get the video element - const videoElement = document.querySelector("video.html5-main-video"); - // If video element is not available, return - if (!videoElement) return; - const videoContainer = document.querySelector("video.html5-main-video"); - if (!videoContainer) return; - if (videoContainer.classList.contains("maximized_video_container") && videoElement.classList.contains("maximized_video")) { - maximizePlayer(); - } + minimizePlayer(); } break; } From 89d6270482bcc5e6e4a63e21e62da1355a60c491 Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Thu, 23 Oct 2025 01:18:49 -0400 Subject: [PATCH 61/70] chore: format --- src/features/buttonPlacement/index.css | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/features/buttonPlacement/index.css b/src/features/buttonPlacement/index.css index e377a211b..a232df415 100644 --- a/src/features/buttonPlacement/index.css +++ b/src/features/buttonPlacement/index.css @@ -4,14 +4,14 @@ border-radius: 28px; -webkit-backdrop-filter: var(--yt-frosted-glass-backdrop-filter-override, blur(16px)) !important; backdrop-filter: var(--yt-frosted-glass-backdrop-filter-override, blur(16px)); - background: var(--yt-spec-overlay-background-medium-light, rgba(0, 0, 0, .3)) !important; + background: var(--yt-spec-overlay-background-medium-light, rgba(0, 0, 0, 0.3)) !important; text-shadow: 0 0 2px #000; padding: 0; position: relative; } .ytp-delhi-modern.ytp-big-mode .yte-button-player-controls-left { - margin-top: calc((var(--yt-delhi-big-mode-bottom-controls-height, 96px) - var(--yt-delhi-big-mode-pill-height, 56px))/2) !important; + margin-top: calc((var(--yt-delhi-big-mode-bottom-controls-height, 96px) - var(--yt-delhi-big-mode-pill-height, 56px)) / 2) !important; height: var(--yt-delhi-big-mode-pill-height, 56px) !important; width: 56px !important; } @@ -23,4 +23,4 @@ z-index: 0; height: 48px; width: 48px; -} \ No newline at end of file +} From 9492c08077dfd2321fba49122ffc19c47771f2ac Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Thu, 23 Oct 2025 02:20:52 -0400 Subject: [PATCH 62/70] fix(hide end screen cards): Hide 'show/hide' button and inconsistent hiding behavior #1006 --- src/features/hideEndScreenCards/index.ts | 35 ++++++++++++++++-- src/pages/embedded/index.ts | 45 ++++++++---------------- 2 files changed, 47 insertions(+), 33 deletions(-) diff --git a/src/features/hideEndScreenCards/index.ts b/src/features/hideEndScreenCards/index.ts index c5b79d167..46aab99cb 100644 --- a/src/features/hideEndScreenCards/index.ts +++ b/src/features/hideEndScreenCards/index.ts @@ -2,12 +2,13 @@ import type { AddButtonFunction, RemoveButtonFunction } from "@/src/features"; import type { ButtonPlacement, YouTubePlayerDiv } from "@/src/types"; import { addFeatureButton, removeFeatureButton } from "@/src/features/buttonPlacement"; -import { updateFeatureButtonTitle } from "@/src/features/buttonPlacement/utils"; -import { getFeatureIcon } from "@/src/icons"; +import { getFeatureButton, updateFeatureButtonIcon, updateFeatureButtonTitle } from "@/src/features/buttonPlacement/utils"; +import { getFeatureMenuItem } from "@/src/features/featureMenu/utils"; +import { getFeatureIcon, type ToggleIcon } from "@/src/icons"; import eventManager from "@/src/utils/EventManager"; -import { isWatchPage, modifyElementsClassList, waitForAllElements, waitForElement, waitForSpecificMessage } from "@/src/utils/utilities"; import "./index.css"; +import { isWatchPage, modifyElementsClassList, waitForAllElements, waitForElement, waitForSpecificMessage } from "@/src/utils/utilities"; export async function disableHideEndScreenCards() { if (!isWatchPage()) return; await waitForAllElements(["div#player", "div#player-container"]); @@ -86,6 +87,12 @@ function hideEndScreenCards() { element })) ); + modifyElementsClassList("add", [ + { + className: "yte-hide-end-screen-cards", + element: document.querySelector(".ytp-ce-hide-button-container") + } + ]); } function showEndScreenCards() { modifyElementsClassList( @@ -95,4 +102,26 @@ function showEndScreenCards() { element })) ); + modifyElementsClassList("remove", [ + { + className: "yte-hide-end-screen-cards", + element: document.querySelector(".ytp-ce-hide-button-container") + } + ]); } +export const updateHideEndScreenCardsButtonState = (hideEndScreenCardsPlacement: ButtonPlacement, icon: ToggleIcon, checked: boolean) => { + if (hideEndScreenCardsPlacement === "feature_menu") { + const hideEndScreenCardsMenuItem = getFeatureMenuItem("hideEndScreenCardsButton"); + if (!hideEndScreenCardsMenuItem) return; + hideEndScreenCardsMenuItem.ariaChecked = checked ? "false" : "true"; + } else { + const hideEndScreenCardsButton = getFeatureButton("hideEndScreenCardsButton"); + if (!hideEndScreenCardsButton || !(hideEndScreenCardsButton instanceof HTMLButtonElement)) return; + updateFeatureButtonIcon(hideEndScreenCardsButton, icon[checked ? "on" : "off"]); + updateFeatureButtonTitle( + "hideEndScreenCardsButton", + window.i18nextInstance.t(`pages.content.features.hideEndScreenCardsButton.button.toggle.${checked ? "on" : "off"}`) + ); + hideEndScreenCardsButton.ariaChecked = checked ? "true" : "false"; + } +}; diff --git a/src/pages/embedded/index.ts b/src/pages/embedded/index.ts index 325e15fa5..528541c65 100644 --- a/src/pages/embedded/index.ts +++ b/src/pages/embedded/index.ts @@ -8,7 +8,7 @@ import { import { disableAutomaticallyEnableClosedCaptions, enableAutomaticallyEnableClosedCaptions } from "@/src/features/automaticallyEnableClosedCaptions"; import { enableAutomaticTheaterMode } from "@/src/features/automaticTheaterMode"; import { featuresInControls } from "@/src/features/buttonPlacement"; -import { getFeatureButton, updateButtonsIconColor, updateFeatureButtonIcon, updateFeatureButtonTitle } from "@/src/features/buttonPlacement/utils"; +import { getFeatureButton, updateButtonsIconColor, updateFeatureButtonTitle } from "@/src/features/buttonPlacement/utils"; import { addCopyTimestampUrlButton, removeCopyTimestampUrlButton } from "@/src/features/copyTimestampUrlButton"; import { disableCustomCSS, enableCustomCSS } from "@/src/features/customCSS"; import { customCSSExists, updateCustomCSS } from "@/src/features/customCSS/utils"; @@ -24,7 +24,8 @@ import { disableHideEndScreenCards, enableHideEndScreenCards, isEndScreenCardsHidden, - removeHideEndScreenCardsButton + removeHideEndScreenCardsButton, + updateHideEndScreenCardsButtonState } from "@/src/features/hideEndScreenCards"; import { disableHideLiveStreamChat, enableHideLiveStreamChat } from "@/src/features/hideLiveStreamChat"; import { @@ -78,7 +79,7 @@ import volumeBoost, { removeVolumeBoostButton } from "@/src/features/volumeBoost"; import { i18nService } from "@/src/i18n"; -import { getFeatureIcon, type ToggleFeatures, toggleFeatures, type ToggleIcon } from "@/src/icons"; +import { getFeatureIcon, type ToggleFeatures, toggleFeatures } from "@/src/icons"; import { type AllButtonNames, type ButtonPlacement, @@ -237,14 +238,6 @@ const enableFeatures = async () => { } } } - // Features that add buttons should be put below and be ordered in the order those buttons should appear - await addHideEndScreenCardsButton(); - await addScreenshotButton(); - await openTranscriptButton(); - await addMaximizePlayerButton(); - await addLoopButton(); - await addCopyTimestampUrlButton(); - await volumeBoost(); await Promise.all([ promptUserToResumeVideo(() => void setupVideoHistory()), setupPlaybackSpeedChangeListener(), @@ -267,6 +260,14 @@ const enableFeatures = async () => { enableDefaultToOriginalAudioTrack(), enableRestoreFullscreenScrolling() ]); + // Features that add buttons should be put below and be ordered in the order those buttons should appear + await addHideEndScreenCardsButton(); + await addScreenshotButton(); + await openTranscriptButton(); + await addMaximizePlayerButton(); + await addLoopButton(); + await addCopyTimestampUrlButton(); + await volumeBoost(); } finally { isEnablingFeatures = false; } @@ -568,31 +569,15 @@ const initialize = function () { const { data: { hideEndScreenCardsButtonPlacement: hideEndScreenCardsPlacement, hideEndScreenCardsEnabled } } = message; - const updateHideEndScreenCardsButtonState = (icon: ToggleIcon, checked: boolean) => { - if (hideEndScreenCardsPlacement === "feature_menu") { - const hideEndScreenCardsMenuItem = getFeatureMenuItem("hideEndScreenCardsButton"); - if (!hideEndScreenCardsMenuItem) return; - hideEndScreenCardsMenuItem.ariaChecked = checked ? "false" : "true"; - } else { - const hideEndScreenCardsButton = getFeatureButton("hideEndScreenCardsButton"); - if (!hideEndScreenCardsButton || !(hideEndScreenCardsButton instanceof HTMLButtonElement)) return; - updateFeatureButtonIcon(hideEndScreenCardsButton, icon[checked ? "on" : "off"]); - updateFeatureButtonTitle( - "hideEndScreenCardsButton", - i18nextInstance.t(`pages.content.features.hideEndScreenCardsButton.button.toggle.${checked ? "on" : "off"}`) - ); - hideEndScreenCardsButton.ariaChecked = checked ? "true" : "false"; - } - }; - const endScreenCardsHidden = isEndScreenCardsHidden(); + const endScreenCardsHidden = await isEndScreenCardsHidden(); const hideEndScreenCardsIcon = getFeatureIcon("hideEndScreenCardsButton", "below_player"); if (hideEndScreenCardsIcon instanceof SVGSVGElement) return; if (hideEndScreenCardsEnabled && !endScreenCardsHidden) { await enableHideEndScreenCards(); - updateHideEndScreenCardsButtonState(hideEndScreenCardsIcon, false); + updateHideEndScreenCardsButtonState(hideEndScreenCardsPlacement, hideEndScreenCardsIcon, false); } else if (!hideEndScreenCardsEnabled && endScreenCardsHidden) { await disableHideEndScreenCards(); - updateHideEndScreenCardsButtonState(hideEndScreenCardsIcon, true); + updateHideEndScreenCardsButtonState(hideEndScreenCardsPlacement, hideEndScreenCardsIcon, true); } break; } From 05093b6f00d13bfa52f103278a2daa3fc00805e8 Mon Sep 17 00:00:00 2001 From: Dave Nicolson Date: Thu, 23 Oct 2025 18:15:13 +0200 Subject: [PATCH 63/70] Adjust heading selector to prevent YouTube changes --- src/features/saveToWatchLaterButton/index.ts | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/features/saveToWatchLaterButton/index.ts b/src/features/saveToWatchLaterButton/index.ts index 65a872dfb..279e8ee24 100644 --- a/src/features/saveToWatchLaterButton/index.ts +++ b/src/features/saveToWatchLaterButton/index.ts @@ -83,11 +83,10 @@ export async function enableSaveToWatchLaterButton() { } }); - const buttons = video.querySelector("button-view-model"); - if (buttons) { - const title = video.querySelector(".yt-lockup-metadata-view-model__title") as HTMLElement; - const paddingRight = parseInt(getComputedStyle(title).paddingRight, 10); - title.style.paddingRight = `${paddingRight + 40}px`; + const heading = video.querySelector("h3") as HTMLElement; + const buttons = video.querySelector("button-view-model") as HTMLElement; + if (heading && buttons) { + heading.style.paddingRight = "40px"; const buttonClasses = Array.from(buttons.children[0].classList).join(" "); saveButton.className += " " + buttonClasses; buttons.prepend(saveButton); @@ -114,8 +113,7 @@ export async function enableSaveToWatchLaterButton() { } function removeSaveToWatchLaterButton(button: HTMLElement) { - const title = button.closest("yt-lockup-view-model")!.querySelector(".yt-lockup-metadata-view-model__title") as HTMLElement; - const paddingRight = parseInt(getComputedStyle(title).paddingRight, 10); - title.style.paddingRight = `${paddingRight - 40}px`; + const heading = button.closest("yt-lockup-view-model")!.querySelector("h3") as HTMLElement; + heading.style.paddingRight = "0"; button.style.display = "none"; } From cc2b903340f0669ef5401706cb37d0806e9d3c19 Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Thu, 23 Oct 2025 14:51:49 -0400 Subject: [PATCH 64/70] feat: automatically maximize player #163 --- public/locales/en-US.json | 4 ++++ public/locales/en-US.json.d.ts | 4 ++++ src/components/Settings/Settings.tsx | 8 ++++++++ src/features/automaticallyMaximizePlayer/index.ts | 15 +++++++++++++++ src/features/maximizePlayerButton/index.ts | 6 ++++-- src/pages/content/index.ts | 5 +++++ src/pages/embedded/index.ts | 12 +++++++++++- src/types/index.ts | 2 ++ src/utils/constants.ts | 2 ++ 9 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 src/features/automaticallyMaximizePlayer/index.ts diff --git a/public/locales/en-US.json b/public/locales/en-US.json index 9621fc8db..1849f134f 100644 --- a/public/locales/en-US.json +++ b/public/locales/en-US.json @@ -293,6 +293,10 @@ "label": "Automatically enable closed captions", "title": "Automatically enables closed captions when you load a video" }, + "automaticallyMaximizePlayer": { + "label": "Automatically maximize player", + "title": "Automatically maximizes the player when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" diff --git a/public/locales/en-US.json.d.ts b/public/locales/en-US.json.d.ts index d0407f81e..62dfc1410 100644 --- a/public/locales/en-US.json.d.ts +++ b/public/locales/en-US.json.d.ts @@ -199,6 +199,10 @@ interface EnUS { label: "Automatically enable closed captions"; title: "Automatically enables closed captions when you load a video"; }; + automaticallyMaximizePlayer: { + label: "Automatically maximize player"; + title: "Automatically maximizes the player when you load a video"; + }; automaticTheaterMode: { label: "Automatic theater mode"; title: "Automatically enables theater mode when you load a video"; diff --git a/src/components/Settings/Settings.tsx b/src/components/Settings/Settings.tsx index f7d8234cb..57fc74e54 100644 --- a/src/components/Settings/Settings.tsx +++ b/src/components/Settings/Settings.tsx @@ -570,6 +570,14 @@ export default function Settings() { title={t("settings.sections.miscellaneous.features.maximizePlayerButton.title")} type="checkbox" /> + { } = await waitForSpecificMessage("options", "request_data", "content"); // If the maximize player button option is disabled, return if (!enableMaximizePlayerButton) return; + const isPlayerMaximized = document.body.getAttribute("yte-maximized") === ""; await addFeatureButton( "maximizePlayerButton", maximizePlayerButtonPlacement, maximizePlayerButtonPlacement === "feature_menu" ? window.i18nextInstance.t("pages.content.features.maximizePlayerButton.button.label") - : window.i18nextInstance.t("pages.content.features.maximizePlayerButton.button.toggle.off"), + : window.i18nextInstance.t(`pages.content.features.maximizePlayerButton.button.toggle.${isPlayerMaximized ? "on" : "off"}`), getFeatureIcon("maximizePlayerButton", maximizePlayerButtonPlacement), (checked) => { if (checked === undefined) return; @@ -49,7 +50,8 @@ export const addMaximizePlayerButton: AddButtonFunction = async () => { minimizePlayer(); } }, - true + true, + isPlayerMaximized ); }; export const removeMaximizePlayerButton: RemoveButtonFunction = async (placement) => { diff --git a/src/pages/content/index.ts b/src/pages/content/index.ts index 5aa6cd135..152eaef43 100644 --- a/src/pages/content/index.ts +++ b/src/pages/content/index.ts @@ -285,6 +285,11 @@ const storageChangeHandler = async (changes: StorageChanges, areaName: string) = automaticallyEnableClosedCaptionsEnabled: newValue }); }, + enable_automatically_maximize_player: (__oldValue, newValue) => { + sendExtensionOnlyMessage("automaticallyMaximizePlayerChange", { + automaticallyMaximizePlayerEnabled: newValue + }); + }, enable_copy_timestamp_url_button: (__oldValue, newValue) => { sendExtensionOnlyMessage("copyTimestampUrlButtonChange", { copyTimestampUrlButtonEnabled: newValue diff --git a/src/pages/embedded/index.ts b/src/pages/embedded/index.ts index 528541c65..80d021a06 100644 --- a/src/pages/embedded/index.ts +++ b/src/pages/embedded/index.ts @@ -6,6 +6,7 @@ import { enableAutomaticallyDisableClosedCaptions } from "@/src/features/automaticallyDisableClosedCaptions"; import { disableAutomaticallyEnableClosedCaptions, enableAutomaticallyEnableClosedCaptions } from "@/src/features/automaticallyEnableClosedCaptions"; +import { disableAutomaticallyMaximizePlayer, enableAutomaticallyMaximizePlayer } from "@/src/features/automaticallyMaximizePlayer"; import { enableAutomaticTheaterMode } from "@/src/features/automaticTheaterMode"; import { featuresInControls } from "@/src/features/buttonPlacement"; import { getFeatureButton, updateButtonsIconColor, updateFeatureButtonTitle } from "@/src/features/buttonPlacement/utils"; @@ -258,7 +259,8 @@ const enableFeatures = async () => { enableAutomaticallyEnableClosedCaptions(), enableAutomaticallyDisableAmbientMode(), enableDefaultToOriginalAudioTrack(), - enableRestoreFullscreenScrolling() + enableRestoreFullscreenScrolling(), + enableAutomaticallyMaximizePlayer() ]); // Features that add buttons should be put below and be ordered in the order those buttons should appear await addHideEndScreenCardsButton(); @@ -362,6 +364,14 @@ const initialize = function () { } break; } + case "automaticallyMaximizePlayerChange": { + const { + data: { automaticallyMaximizePlayerEnabled } + } = message; + if (automaticallyMaximizePlayerEnabled) await enableAutomaticallyMaximizePlayer(); + else disableAutomaticallyMaximizePlayer(); + break; + } case "automaticTheaterModeChange": { // Get the player element const playerContainer = diff --git a/src/types/index.ts b/src/types/index.ts index 9d25468f5..21e5c2232 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -239,6 +239,7 @@ export type configuration = { enable_automatically_disable_ambient_mode: boolean; enable_automatically_disable_closed_captions: boolean; enable_automatically_enable_closed_captions: boolean; + enable_automatically_maximize_player: boolean; enable_automatically_set_quality: boolean; enable_copy_timestamp_url_button: boolean; enable_custom_css: boolean; @@ -376,6 +377,7 @@ export type ExtensionSendOnlyMessageMappings = { "automaticallyEnableClosedCaptionsChange", { automaticallyEnableClosedCaptionsEnabled: boolean } >; + automaticallyMaximizePlayerChange: DataResponseMessage<"automaticallyMaximizePlayerChange", { automaticallyMaximizePlayerEnabled: boolean }>; automaticTheaterModeChange: DataResponseMessage<"automaticTheaterModeChange", { automaticTheaterModeEnabled: boolean }>; buttonPlacementChange: DataResponseMessage<"buttonPlacementChange", ButtonPlacementChange>; copyTimestampUrlButtonChange: DataResponseMessage<"copyTimestampUrlButtonChange", { copyTimestampUrlButtonEnabled: boolean }>; diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 0397162b6..a990d71ac 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -55,6 +55,7 @@ export const defaultConfiguration = { enable_automatically_disable_ambient_mode: false, enable_automatically_disable_closed_captions: false, enable_automatically_enable_closed_captions: false, + enable_automatically_maximize_player: false, enable_automatically_set_quality: false, enable_copy_timestamp_url_button: false, enable_custom_css: false, @@ -158,6 +159,7 @@ export const configurationImportSchema: TypeToPartialZodSchema< enable_automatically_disable_ambient_mode: z.boolean().optional(), enable_automatically_disable_closed_captions: z.boolean().optional(), enable_automatically_enable_closed_captions: z.boolean().optional(), + enable_automatically_maximize_player: z.boolean().optional(), enable_automatically_set_quality: z.boolean().optional(), enable_copy_timestamp_url_button: z.boolean().optional(), enable_custom_css: z.boolean().optional(), From f486b8890f137f8b278db9d979fb4f0f618d9df8 Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Thu, 23 Oct 2025 15:43:39 -0400 Subject: [PATCH 65/70] chore: fix formatting I missed when merging --- public/locales/en-US.json | 14 ++++++++------ public/locales/en-US.json.d.ts | 1 + 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/public/locales/en-US.json b/public/locales/en-US.json index e2e706f8b..91e77451f 100644 --- a/public/locales/en-US.json +++ b/public/locales/en-US.json @@ -308,6 +308,7 @@ "enablePlaylistManagementButtons": { "label": "Enable playlist management buttons", "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, "enableSaveToWatchLaterButton": { "label": "Enable save to Watch Later button", "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" @@ -500,15 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "Remove video", - "removingVideo": "Removing video…", + "failedToMarkAsUnwatched": "Failed to mark video as unwatched", + "failedToRemoveVideo": "Failed to remove video", "markAsUnwatched": "Mark as unwatched", "markingAsUnwatched": "Marking as unwatched…", - "failedToRemoveVideo": "Failed to remove video", - "failedToMarkAsUnwatched": "Failed to mark video as unwatched" + "removeVideo": "Remove video", + "removingVideo": "Removing video…" + }, "saveToWatchLaterButton": { - "save": "Save to Watch Later", - "error": "Failed to add video to Watch Later" + "error": "Failed to add video to Watch Later", + "save": "Save to Watch Later" }, "screenshotButton": { "enable": { diff --git a/public/locales/en-US.json.d.ts b/public/locales/en-US.json.d.ts index ddf908519..ebe62f72c 100644 --- a/public/locales/en-US.json.d.ts +++ b/public/locales/en-US.json.d.ts @@ -218,6 +218,7 @@ interface EnUS { enablePlaylistManagementButtons: { label: "Enable playlist management buttons"; title: "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched"; + }; enableSaveToWatchLaterButton: { label: "Enable save to Watch Later button"; title: "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist"; From bdb9e7211cd851ab34b3ecc7d2fa9e2a0043f519 Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Thu, 23 Oct 2025 16:23:35 -0400 Subject: [PATCH 66/70] chore: update dependencies --- package-lock.json | 7946 ++++++++++++++++++--------------------------- package.json | 96 +- 2 files changed, 3135 insertions(+), 4907 deletions(-) diff --git a/package-lock.json b/package-lock.json index 74fcec9f8..8f7ff4606 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,3781 +10,844 @@ "license": "MIT", "dependencies": { "@formkit/auto-animate": "^0.9.0", - "@monaco-editor/react": "^4.6.0", - "@tanstack/react-query": "^5.18.0", - "dotenv": "^17.2.1", - "globals": "^16.2.0", - "i18next": "^25.3.4", - "monaco-editor": "^0.53.0", - "react": "^19.1.1", + "@monaco-editor/react": "^4.7.0", + "@tanstack/react-query": "^5.90.5", + "dotenv": "^17.2.3", + "globals": "^16.4.0", + "i18next": "^25.6.0", + "monaco-editor": "^0.54.0", + "react": "^19.2.0", "react-colorful": "^5.6.1", - "react-dom": "^19.1.1", - "react-icons": "^5.0.1", + "react-dom": "^19.2.0", + "react-icons": "^5.5.0", "safe-units": "^2.0.1", - "tailwindcss-multi": "^0.4.0", - "vite-plugin-css-injected-by-js": "^3.3.0", + "tailwindcss-multi": "^0.4.6", + "vite-plugin-css-injected-by-js": "^3.5.2", "webextension-polyfill": "^0.12.0", "youtubei.js": "^16.0.1" }, "devDependencies": { - "@eslint/compat": "^1.2.0", - "@eslint/js": "^9.12.0", + "@eslint/compat": "^1.4.0", + "@eslint/js": "^9.38.0", "@semantic-release/changelog": "^6.0.3", - "@semantic-release/exec": "^7.0.3", + "@semantic-release/exec": "^7.1.0", "@semantic-release/git": "^10.0.1", "@thedutchcoder/postcss-rem-to-px": "^0.0.2", - "@total-typescript/ts-reset": "^0.6.0", - "@types/archiver": "^6.0.1", - "@types/chrome": "^0.1.4", - "@types/node": "^24.0.13", - "@types/react": "^19.0.1", - "@types/react-dom": "^19.0.2", - "@types/webextension-polyfill": "^0.12.1", - "@types/youtube-player": "^5.5.10", - "@vitejs/plugin-react-swc": "^4.0.0", + "@total-typescript/ts-reset": "^0.6.1", + "@types/archiver": "^6.0.3", + "@types/chrome": "^0.1.24", + "@types/node": "^24.9.1", + "@types/react": "^19.2.2", + "@types/react-dom": "^19.2.2", + "@types/webextension-polyfill": "^0.12.4", + "@types/youtube-player": "^5.5.11", + "@vitejs/plugin-react-swc": "^4.1.0", "archiver": "^7.0.1", - "autoprefixer": "^10.4.16", - "clsx": "^2.0.0", - "concurrently": "^9.1.0", - "eslint": "^9.12.0", - "eslint-config-prettier": "^10.1.5", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jsx-a11y": "^6.8.0", - "eslint-plugin-no-secrets": "^2.1.1", - "eslint-plugin-perfectionist": "^4.1.2", - "eslint-plugin-prettier": "^5.2.1", - "eslint-plugin-promise": "^7.1.0", - "eslint-plugin-react": "^7.33.2", + "autoprefixer": "^10.4.21", + "clsx": "^2.1.1", + "concurrently": "^9.2.1", + "eslint": "^9.38.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsx-a11y": "^6.10.2", + "eslint-plugin-no-secrets": "^2.2.1", + "eslint-plugin-perfectionist": "^4.15.1", + "eslint-plugin-prettier": "^5.5.4", + "eslint-plugin-promise": "^7.2.1", + "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^7.0.0", - "eslint-plugin-tailwindcss": "^3.13.0", - "fs-extra": "^11.1.1", + "eslint-plugin-tailwindcss": "^3.18.2", + "fs-extra": "^11.3.2", "get-installed-browsers": "^0.1.7", - "nodemon": "^3.0.1", - "npm": "^11.3.0", - "postcss": "^8.4.31", - "prettier": "^3.0.3", + "nodemon": "^3.1.10", + "npm": "^11.6.2", + "postcss": "^8.5.6", + "prettier": "^3.6.2", "semantic-release": "^25.0.1", - "tailwind-merge": "^3.2.0", - "tailwindcss": "^3.4.17", + "tailwind-merge": "^3.3.1", + "tailwindcss": "^3.4.18", "ts-json-as-const": "^1.0.7", - "ts-node": "^10.9.1", + "ts-node": "^10.9.2", "typescript": "5.9", - "typescript-eslint": "^8.8.1", - "vite": "^7.0.4", - "zod": "^4.0.17", + "typescript-eslint": "^8.46.2", + "vite": "^7.1.12", + "zod": "^4.1.12", "zod-error": "^2.0.0" }, "optionalDependencies": { - "@rollup/rollup-linux-x64-gnu": "^4.14.3" + "@rollup/rollup-linux-x64-gnu": "^4.52.5" } }, - "../YouTube.js": { - "name": "youtubei.js", - "version": "16.0.1", - "funding": [ - "https://github.com/sponsors/LuanRT" - ], + "node_modules/@actions/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.11.1.tgz", + "integrity": "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==", + "dev": true, "license": "MIT", "dependencies": { - "@bufbuild/protobuf": "^2.0.0", - "meriyah": "^6.1.4" - }, - "devDependencies": { - "@eslint/js": "^9.37.0", - "@types/estree": "^1.0.6", - "@types/glob": "^8.1.0", - "@types/node": "^24.0.14", - "@typescript-eslint/eslint-plugin": "^8.46.0", - "@typescript-eslint/parser": "^8.46.0", - "cpy-cli": "^6.0.0", - "esbuild": "^0.25.6", - "eslint": "^9.37.0", - "globals": "^16.4.0", - "replace": "^1.2.2", - "rimraf": "^6.0.1", - "ts-patch": "^3.0.2", - "ts-proto": "^2.2.0", - "typedoc": "^0.28.14", - "typedoc-plugin-markdown": "^4.9.0", - "typescript": "^5.9.3", - "typescript-eslint": "^8.46.0", - "vitest": "^3.2.4" - } - }, - "../YouTube.js/node_modules/@bufbuild/protobuf": { - "version": "2.0.0", - "license": "(Apache-2.0 AND BSD-3-Clause)" + "@actions/exec": "^1.1.1", + "@actions/http-client": "^2.0.1" + } }, - "../YouTube.js/node_modules/@esbuild/darwin-arm64": { - "version": "0.25.10", - "cpu": [ - "arm64" - ], + "node_modules/@actions/exec": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz", + "integrity": "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@actions/io": "^1.0.1" } }, - "../YouTube.js/node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", + "node_modules/@actions/http-client": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.3.tgz", + "integrity": "sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA==", "dev": true, "license": "MIT", "dependencies": { - "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" + "tunnel": "^0.0.6", + "undici": "^5.25.4" } }, - "../YouTube.js/node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", + "node_modules/@actions/io": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.3.tgz", + "integrity": "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==", "dev": true, - "license": "Apache-2.0", + "license": "MIT" + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "../YouTube.js/node_modules/@eslint-community/regexpp": { - "version": "4.12.1", + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "../YouTube.js/node_modules/@eslint/config-array": { - "version": "0.21.0", + "node_modules/@babel/compat-data": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.6", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, + "license": "MIT", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=6.9.0" } }, - "../YouTube.js/node_modules/@eslint/config-helpers": { - "version": "0.4.0", + "node_modules/@babel/core": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "peer": true, "dependencies": { - "@eslint/core": "^0.16.0" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "../YouTube.js/node_modules/@eslint/core": { - "version": "0.16.0", + "node_modules/@babel/generator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.15" + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=6.9.0" } }, - "../YouTube.js/node_modules/@eslint/eslintrc": { - "version": "3.3.1", + "node_modules/@babel/helper-compilation-targets": { + "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": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "@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" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=6.9.0" } }, - "../YouTube.js/node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "14.0.0", + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.9.0" } }, - "../YouTube.js/node_modules/@eslint/js": { - "version": "9.37.0", + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dev": true, "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, - "funding": { - "url": "https://eslint.org/donate" + "engines": { + "node": ">=6.9.0" } }, - "../YouTube.js/node_modules/@eslint/object-schema": { - "version": "2.1.6", + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "../YouTube.js/node_modules/@eslint/plugin-kit": { - "version": "0.4.0", + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.16.0", - "levn": "^0.4.1" - }, + "license": "MIT", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=6.9.0" } }, - "../YouTube.js/node_modules/@gerrit0/mini-shiki": { - "version": "3.13.1", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, "license": "MIT", - "dependencies": { - "@shikijs/engine-oniguruma": "^3.13.0", - "@shikijs/langs": "^3.13.0", - "@shikijs/themes": "^3.13.0", - "@shikijs/types": "^3.13.0", - "@shikijs/vscode-textmate": "^10.0.2" + "engines": { + "node": ">=6.9.0" } }, - "../YouTube.js/node_modules/@humanfs/core": { - "version": "0.19.1", + "node_modules/@babel/helper-validator-option": { + "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": "Apache-2.0", + "license": "MIT", "engines": { - "node": ">=18.18.0" + "node": ">=6.9.0" } }, - "../YouTube.js/node_modules/@humanfs/node": { - "version": "0.16.7", + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" }, "engines": { - "node": ">=18.18.0" + "node": ">=6.9.0" } }, - "../YouTube.js/node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" } }, - "../YouTube.js/node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "dev": true, - "license": "Apache-2.0", + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node": ">=6.9.0" } }, - "../YouTube.js/node_modules/@isaacs/cliui": { - "version": "8.0.2", + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { - "node": ">=12" + "node": ">=6.9.0" } }, - "../YouTube.js/node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", + "node_modules/@babel/traverse": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "engines": { + "node": ">=6.9.0" } }, - "../YouTube.js/node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": ">=6.9.0" } }, - "../YouTube.js/node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "dev": true, - "license": "MIT" + "node_modules/@bufbuild/protobuf": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.10.0.tgz", + "integrity": "sha512-fdRs9PSrBF7QUntpZpq6BTw58fhgGJojgg39m9oFOJGZT+nip9b0so5cYY1oWl5pvemDLr0cPPsH46vwThEbpQ==", + "license": "(Apache-2.0 AND BSD-3-Clause)" }, - "../YouTube.js/node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, + "optional": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.1.90" } }, - "../YouTube.js/node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "../YouTube.js/node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "../YouTube.js/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.4", + "node_modules/@dfoverdx/tocamelcase": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@dfoverdx/tocamelcase/-/tocamelcase-1.0.7.tgz", + "integrity": "sha512-QDlMJqwcE4eVCvxxQXp8nh7Nw9m5VQHPCAiyTD+W86Tl89VGhVJRb//RJRZKpn5A/Bq3EQNYDYlepurQ805MOQ==", "dev": true, - "license": "MIT" + "license": "ISC" }, - "../YouTube.js/node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.11.tgz", + "integrity": "sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==", + "cpu": [ + "ppc64" + ], "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">= 8" + "node": ">=18" } }, - "../YouTube.js/node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, + "node_modules/@esbuild/android-arm": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.11.tgz", + "integrity": "sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==", + "cpu": [ + "arm" + ], "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">= 8" + "node": ">=18" } }, - "../YouTube.js/node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.11.tgz", + "integrity": "sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">= 8" + "node": ">=18" } }, - "../YouTube.js/node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "dev": true, + "node_modules/@esbuild/android-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.11.tgz", + "integrity": "sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==", + "cpu": [ + "x64" + ], "license": "MIT", "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=14" + "node": ">=18" } }, - "../YouTube.js/node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.45.1", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.11.tgz", + "integrity": "sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==", "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ "darwin" - ] - }, - "../YouTube.js/node_modules/@shikijs/engine-oniguruma": { - "version": "3.13.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.13.0", - "@shikijs/vscode-textmate": "^10.0.2" - } - }, - "../YouTube.js/node_modules/@shikijs/langs": { - "version": "3.13.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.13.0" - } - }, - "../YouTube.js/node_modules/@shikijs/themes": { - "version": "3.13.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.13.0" - } - }, - "../YouTube.js/node_modules/@shikijs/types": { - "version": "3.13.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" - } - }, - "../YouTube.js/node_modules/@shikijs/vscode-textmate": { - "version": "10.0.2", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "dev": true, - "license": "MIT", + ], "engines": { "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/@types/chai": { - "version": "5.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/deep-eql": "*" - } - }, - "../YouTube.js/node_modules/@types/deep-eql": { - "version": "4.0.2", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/@types/estree": { - "version": "1.0.8", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/@types/glob": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimatch": "^5.1.2", - "@types/node": "*" - } - }, - "../YouTube.js/node_modules/@types/hast": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" } }, - "../YouTube.js/node_modules/@types/json-schema": { - "version": "7.0.15", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/@types/minimatch": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/@types/node": { - "version": "24.7.2", - "dev": true, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.11.tgz", + "integrity": "sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "undici-types": "~7.14.0" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" } }, - "../YouTube.js/node_modules/@types/unist": { - "version": "3.0.3", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.46.0", - "dev": true, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.11.tgz", + "integrity": "sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.46.0", - "@typescript-eslint/type-utils": "8.46.0", - "@typescript-eslint/utils": "8.46.0", - "@typescript-eslint/visitor-keys": "8.46.0", - "graphemer": "^1.4.0", - "ignore": "^7.0.0", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.46.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" + "node": ">=18" } }, - "../YouTube.js/node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "dev": true, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.11.tgz", + "integrity": "sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==", + "cpu": [ + "x64" + ], "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">= 4" + "node": ">=18" } }, - "../YouTube.js/node_modules/@typescript-eslint/parser": { - "version": "8.46.0", - "dev": true, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.11.tgz", + "integrity": "sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==", + "cpu": [ + "arm" + ], "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.46.0", - "@typescript-eslint/types": "8.46.0", - "@typescript-eslint/typescript-estree": "8.46.0", - "@typescript-eslint/visitor-keys": "8.46.0", - "debug": "^4.3.4" - }, + "optional": true, + "os": [ + "linux" + ], "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 <6.0.0" + "node": ">=18" } }, - "../YouTube.js/node_modules/@typescript-eslint/project-service": { - "version": "8.46.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.46.0", - "@typescript-eslint/types": "^8.46.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 <6.0.0" - } - }, - "../YouTube.js/node_modules/@typescript-eslint/scope-manager": { - "version": "8.46.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.46.0", - "@typescript-eslint/visitor-keys": "8.46.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "../YouTube.js/node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.46.0", - "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 <6.0.0" - } - }, - "../YouTube.js/node_modules/@typescript-eslint/type-utils": { - "version": "8.46.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.46.0", - "@typescript-eslint/typescript-estree": "8.46.0", - "@typescript-eslint/utils": "8.46.0", - "debug": "^4.3.4", - "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": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "../YouTube.js/node_modules/@typescript-eslint/types": { - "version": "8.46.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "../YouTube.js/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.46.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.46.0", - "@typescript-eslint/tsconfig-utils": "8.46.0", - "@typescript-eslint/types": "8.46.0", - "@typescript-eslint/visitor-keys": "8.46.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 <6.0.0" - } - }, - "../YouTube.js/node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "../YouTube.js/node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "../YouTube.js/node_modules/@typescript-eslint/utils": { - "version": "8.46.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.46.0", - "@typescript-eslint/types": "8.46.0", - "@typescript-eslint/typescript-estree": "8.46.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 <6.0.0" - } - }, - "../YouTube.js/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.46.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.46.0", - "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" - } - }, - "../YouTube.js/node_modules/@vitest/expect": { - "version": "3.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/chai": "^5.2.2", - "@vitest/spy": "3.2.4", - "@vitest/utils": "3.2.4", - "chai": "^5.2.0", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "../YouTube.js/node_modules/@vitest/mocker": { - "version": "3.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/spy": "3.2.4", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.17" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, - "../YouTube.js/node_modules/@vitest/pretty-format": { - "version": "3.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "../YouTube.js/node_modules/@vitest/runner": { - "version": "3.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/utils": "3.2.4", - "pathe": "^2.0.3", - "strip-literal": "^3.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "../YouTube.js/node_modules/@vitest/snapshot": { - "version": "3.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "3.2.4", - "magic-string": "^0.30.17", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "../YouTube.js/node_modules/@vitest/spy": { - "version": "3.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyspy": "^4.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "../YouTube.js/node_modules/@vitest/utils": { - "version": "3.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "3.2.4", - "loupe": "^3.1.4", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "../YouTube.js/node_modules/acorn": { - "version": "8.15.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "../YouTube.js/node_modules/acorn-jsx": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "../YouTube.js/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "../YouTube.js/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../YouTube.js/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../YouTube.js/node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0" - }, - "../YouTube.js/node_modules/assertion-error": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "../YouTube.js/node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "../YouTube.js/node_modules/braces": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "../YouTube.js/node_modules/cac": { - "version": "6.7.14", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../YouTube.js/node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../YouTube.js/node_modules/camelcase": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../YouTube.js/node_modules/case-anything": { - "version": "2.1.13", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "../YouTube.js/node_modules/chai": { - "version": "5.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "assertion-error": "^2.0.1", - "check-error": "^2.1.1", - "deep-eql": "^5.0.1", - "loupe": "^3.1.0", - "pathval": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "../YouTube.js/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../YouTube.js/node_modules/check-error": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - } - }, - "../YouTube.js/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../YouTube.js/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/copy-file": { - "version": "11.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.11", - "p-event": "^6.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/cpy": { - "version": "12.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "copy-file": "^11.1.0", - "globby": "^14.1.0", - "junk": "^4.0.1", - "micromatch": "^4.0.8", - "p-filter": "^4.1.0", - "p-map": "^7.0.3" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/cpy-cli": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cpy": "^12.0.0", - "meow": "^13.2.0" - }, - "bin": { - "cpy": "cli.js" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/cross-spawn": { - "version": "7.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "../YouTube.js/node_modules/debug": { - "version": "4.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "../YouTube.js/node_modules/deep-eql": { - "version": "5.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../YouTube.js/node_modules/deep-is": { - "version": "0.1.4", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/detect-libc": { - "version": "1.0.3", - "dev": true, - "license": "Apache-2.0", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "../YouTube.js/node_modules/dprint-node": { - "version": "1.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-libc": "^1.0.3" - } - }, - "../YouTube.js/node_modules/eastasianwidth": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/entities": { - "version": "4.5.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "../YouTube.js/node_modules/es-module-lexer": { - "version": "1.7.0", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/esbuild": { - "version": "0.25.10", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.10", - "@esbuild/android-arm": "0.25.10", - "@esbuild/android-arm64": "0.25.10", - "@esbuild/android-x64": "0.25.10", - "@esbuild/darwin-arm64": "0.25.10", - "@esbuild/darwin-x64": "0.25.10", - "@esbuild/freebsd-arm64": "0.25.10", - "@esbuild/freebsd-x64": "0.25.10", - "@esbuild/linux-arm": "0.25.10", - "@esbuild/linux-arm64": "0.25.10", - "@esbuild/linux-ia32": "0.25.10", - "@esbuild/linux-loong64": "0.25.10", - "@esbuild/linux-mips64el": "0.25.10", - "@esbuild/linux-ppc64": "0.25.10", - "@esbuild/linux-riscv64": "0.25.10", - "@esbuild/linux-s390x": "0.25.10", - "@esbuild/linux-x64": "0.25.10", - "@esbuild/netbsd-arm64": "0.25.10", - "@esbuild/netbsd-x64": "0.25.10", - "@esbuild/openbsd-arm64": "0.25.10", - "@esbuild/openbsd-x64": "0.25.10", - "@esbuild/openharmony-arm64": "0.25.10", - "@esbuild/sunos-x64": "0.25.10", - "@esbuild/win32-arm64": "0.25.10", - "@esbuild/win32-ia32": "0.25.10", - "@esbuild/win32-x64": "0.25.10" - } - }, - "../YouTube.js/node_modules/escape-string-regexp": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/eslint": { - "version": "9.37.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.4.0", - "@eslint/core": "^0.16.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.37.0", - "@eslint/plugin-kit": "^0.4.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.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", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "../YouTube.js/node_modules/eslint-scope": { - "version": "8.4.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "../YouTube.js/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "../YouTube.js/node_modules/espree": { - "version": "10.4.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "../YouTube.js/node_modules/esquery": { - "version": "1.6.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "../YouTube.js/node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "../YouTube.js/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "../YouTube.js/node_modules/estree-walker": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "../YouTube.js/node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "../YouTube.js/node_modules/expect-type": { - "version": "1.2.2", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" - } - }, - "../YouTube.js/node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/fast-glob": { - "version": "3.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "../YouTube.js/node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "../YouTube.js/node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/fast-levenshtein": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/fastq": { - "version": "1.17.1", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "../YouTube.js/node_modules/file-entry-cache": { - "version": "8.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "../YouTube.js/node_modules/fill-range": { - "version": "7.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "../YouTube.js/node_modules/find-up": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/flat-cache": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "../YouTube.js/node_modules/flatted": { - "version": "3.3.1", - "dev": true, - "license": "ISC" - }, - "../YouTube.js/node_modules/foreground-child": { - "version": "3.3.0", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "../YouTube.js/node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "../YouTube.js/node_modules/fsevents": { - "version": "2.3.3", - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "../YouTube.js/node_modules/function-bind": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../YouTube.js/node_modules/get-caller-file": { - "version": "2.0.5", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "../YouTube.js/node_modules/glob-parent": { - "version": "6.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "../YouTube.js/node_modules/global-prefix": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "^4.1.3", - "kind-of": "^6.0.3", - "which": "^4.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "../YouTube.js/node_modules/global-prefix/node_modules/isexe": { - "version": "3.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "../YouTube.js/node_modules/global-prefix/node_modules/which": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "../YouTube.js/node_modules/globals": { - "version": "16.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/globby": { - "version": "14.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.3", - "ignore": "^7.0.3", - "path-type": "^6.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.3.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/globby/node_modules/ignore": { - "version": "7.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "../YouTube.js/node_modules/graceful-fs": { - "version": "4.2.11", - "dev": true, - "license": "ISC" - }, - "../YouTube.js/node_modules/graphemer": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../YouTube.js/node_modules/hasown": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "../YouTube.js/node_modules/ignore": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "../YouTube.js/node_modules/import-fresh": { - "version": "3.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "../YouTube.js/node_modules/ini": { - "version": "4.1.3", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "../YouTube.js/node_modules/is-core-module": { - "version": "2.13.1", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../YouTube.js/node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../YouTube.js/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../YouTube.js/node_modules/is-glob": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "../YouTube.js/node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "../YouTube.js/node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "../YouTube.js/node_modules/jackspeak": { - "version": "4.0.1", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "../YouTube.js/node_modules/js-yaml": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "../YouTube.js/node_modules/json-buffer": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/junk": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/keyv": { - "version": "4.5.4", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "../YouTube.js/node_modules/kind-of": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../YouTube.js/node_modules/levn": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "../YouTube.js/node_modules/linkify-it": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "uc.micro": "^2.0.0" - } - }, - "../YouTube.js/node_modules/locate-path": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/lodash.merge": { - "version": "4.6.2", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/loupe": { - "version": "3.1.4", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/lunr": { - "version": "2.3.9", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/magic-string": { - "version": "0.30.17", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, - "../YouTube.js/node_modules/markdown-it": { - "version": "14.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.0", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" - }, - "bin": { - "markdown-it": "bin/markdown-it.mjs" - } - }, - "../YouTube.js/node_modules/mdurl": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/meow": { - "version": "13.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "../YouTube.js/node_modules/meriyah": { - "version": "6.1.4", - "license": "ISC", - "engines": { - "node": ">=18.0.0" - } - }, - "../YouTube.js/node_modules/micromatch": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "../YouTube.js/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "../YouTube.js/node_modules/minimist": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../YouTube.js/node_modules/minipass": { - "version": "7.1.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "../YouTube.js/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/nanoid": { - "version": "3.3.11", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "../YouTube.js/node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/optionator": { - "version": "0.9.4", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "../YouTube.js/node_modules/p-event": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "p-timeout": "^6.1.2" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/p-filter": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-map": "^7.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/p-map": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/p-timeout": { - "version": "6.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/p-try": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../YouTube.js/node_modules/package-json-from-dist": { - "version": "1.0.0", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "../YouTube.js/node_modules/parent-module": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "../YouTube.js/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../YouTube.js/node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../YouTube.js/node_modules/path-parse": { - "version": "1.0.7", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/path-scurry": { - "version": "2.0.0", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "../YouTube.js/node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.0.1", - "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "../YouTube.js/node_modules/path-type": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/pathe": { - "version": "2.0.3", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/pathval": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.16" - } - }, - "../YouTube.js/node_modules/picocolors": { - "version": "1.1.1", - "dev": true, - "license": "ISC" - }, - "../YouTube.js/node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "../YouTube.js/node_modules/postcss": { - "version": "8.5.6", - "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" - } - }, - "../YouTube.js/node_modules/prelude-ls": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "../YouTube.js/node_modules/punycode": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../YouTube.js/node_modules/punycode.js": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../YouTube.js/node_modules/queue-microtask": { - "version": "1.2.3", - "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" - }, - "../YouTube.js/node_modules/replace": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "2.4.2", - "minimatch": "3.0.5", - "yargs": "^15.3.1" - }, - "bin": { - "replace": "bin/replace.js", - "search": "bin/search.js" - }, - "engines": { - "node": ">= 6" - } - }, - "../YouTube.js/node_modules/replace/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "../YouTube.js/node_modules/replace/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "../YouTube.js/node_modules/replace/node_modules/cliui": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "../YouTube.js/node_modules/replace/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "../YouTube.js/node_modules/replace/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/replace/node_modules/decamelize": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../YouTube.js/node_modules/replace/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "../YouTube.js/node_modules/replace/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../YouTube.js/node_modules/replace/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "../YouTube.js/node_modules/replace/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "../YouTube.js/node_modules/replace/node_modules/minimatch": { - "version": "3.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "../YouTube.js/node_modules/replace/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/replace/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "../YouTube.js/node_modules/replace/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "../YouTube.js/node_modules/replace/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../YouTube.js/node_modules/replace/node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../YouTube.js/node_modules/replace/node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../YouTube.js/node_modules/replace/node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/replace/node_modules/y18n": { - "version": "4.0.3", - "dev": true, - "license": "ISC" - }, - "../YouTube.js/node_modules/replace/node_modules/yargs": { - "version": "15.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "../YouTube.js/node_modules/replace/node_modules/yargs-parser": { - "version": "18.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "../YouTube.js/node_modules/require-directory": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../YouTube.js/node_modules/require-main-filename": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "../YouTube.js/node_modules/resolve-from": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "../YouTube.js/node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "../YouTube.js/node_modules/rimraf": { - "version": "6.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^11.0.0", - "package-json-from-dist": "^1.0.0" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "../YouTube.js/node_modules/rimraf/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "../YouTube.js/node_modules/rimraf/node_modules/glob": { - "version": "11.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^4.0.1", - "minimatch": "^10.0.0", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "../YouTube.js/node_modules/rimraf/node_modules/minimatch": { - "version": "10.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "../YouTube.js/node_modules/rollup": { - "version": "4.45.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.45.1", - "@rollup/rollup-android-arm64": "4.45.1", - "@rollup/rollup-darwin-arm64": "4.45.1", - "@rollup/rollup-darwin-x64": "4.45.1", - "@rollup/rollup-freebsd-arm64": "4.45.1", - "@rollup/rollup-freebsd-x64": "4.45.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.45.1", - "@rollup/rollup-linux-arm-musleabihf": "4.45.1", - "@rollup/rollup-linux-arm64-gnu": "4.45.1", - "@rollup/rollup-linux-arm64-musl": "4.45.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.45.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1", - "@rollup/rollup-linux-riscv64-gnu": "4.45.1", - "@rollup/rollup-linux-riscv64-musl": "4.45.1", - "@rollup/rollup-linux-s390x-gnu": "4.45.1", - "@rollup/rollup-linux-x64-gnu": "4.45.1", - "@rollup/rollup-linux-x64-musl": "4.45.1", - "@rollup/rollup-win32-arm64-msvc": "4.45.1", - "@rollup/rollup-win32-ia32-msvc": "4.45.1", - "@rollup/rollup-win32-x64-msvc": "4.45.1", - "fsevents": "~2.3.2" - } - }, - "../YouTube.js/node_modules/run-parallel": { - "version": "1.2.0", - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "../YouTube.js/node_modules/semver": { - "version": "7.7.3", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "../YouTube.js/node_modules/set-blocking": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "../YouTube.js/node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../YouTube.js/node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../YouTube.js/node_modules/siginfo": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "../YouTube.js/node_modules/slash": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/source-map-js": { - "version": "1.2.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "../YouTube.js/node_modules/stackback": { - "version": "0.0.2", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/std-env": { - "version": "3.9.0", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "../YouTube.js/node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "../YouTube.js/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "../YouTube.js/node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "../YouTube.js/node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/strip-literal": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^9.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "../YouTube.js/node_modules/strip-literal/node_modules/js-tokens": { - "version": "9.0.1", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../YouTube.js/node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../YouTube.js/node_modules/tinybench": { - "version": "2.9.0", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/tinyexec": { - "version": "0.3.2", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/tinyglobby": { - "version": "0.2.15", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "../YouTube.js/node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "../YouTube.js/node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "../YouTube.js/node_modules/tinypool": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.0.0 || >=20.0.0" - } - }, - "../YouTube.js/node_modules/tinyrainbow": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "../YouTube.js/node_modules/tinyspy": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "../YouTube.js/node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "../YouTube.js/node_modules/ts-api-utils": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, - "../YouTube.js/node_modules/ts-patch": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "global-prefix": "^4.0.0", - "minimist": "^1.2.8", - "resolve": "^1.22.2", - "semver": "^7.6.3", - "strip-ansi": "^6.0.1" - }, - "bin": { - "ts-patch": "bin/ts-patch.js", - "tspc": "bin/tspc.js" - } - }, - "../YouTube.js/node_modules/ts-patch/node_modules/resolve": { - "version": "1.22.8", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../YouTube.js/node_modules/ts-poet": { - "version": "6.12.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "dprint-node": "^1.0.8" - } - }, - "../YouTube.js/node_modules/ts-proto": { - "version": "2.7.7", - "dev": true, - "license": "ISC", - "dependencies": { - "@bufbuild/protobuf": "^2.0.0", - "case-anything": "^2.1.13", - "ts-poet": "^6.12.0", - "ts-proto-descriptors": "2.0.0" - }, - "bin": { - "protoc-gen-ts_proto": "protoc-gen-ts_proto" - } - }, - "../YouTube.js/node_modules/ts-proto-descriptors": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@bufbuild/protobuf": "^2.0.0" - } - }, - "../YouTube.js/node_modules/type-check": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "../YouTube.js/node_modules/typedoc": { - "version": "0.28.14", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@gerrit0/mini-shiki": "^3.12.0", - "lunr": "^2.3.9", - "markdown-it": "^14.1.0", - "minimatch": "^9.0.5", - "yaml": "^2.8.1" - }, - "bin": { - "typedoc": "bin/typedoc" - }, - "engines": { - "node": ">= 18", - "pnpm": ">= 10" - }, - "peerDependencies": { - "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x" - } - }, - "../YouTube.js/node_modules/typedoc-plugin-markdown": { - "version": "4.9.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "typedoc": "0.28.x" - } - }, - "../YouTube.js/node_modules/typedoc/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "../YouTube.js/node_modules/typedoc/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "../YouTube.js/node_modules/typescript": { - "version": "5.9.3", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "../YouTube.js/node_modules/typescript-eslint": { - "version": "8.46.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "8.46.0", - "@typescript-eslint/parser": "8.46.0", - "@typescript-eslint/typescript-estree": "8.46.0", - "@typescript-eslint/utils": "8.46.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 <6.0.0" - } - }, - "../YouTube.js/node_modules/uc.micro": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/undici-types": { - "version": "7.14.0", - "dev": true, - "license": "MIT" - }, - "../YouTube.js/node_modules/unicorn-magic": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../YouTube.js/node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "../YouTube.js/node_modules/vite": { - "version": "7.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.25.0", - "fdir": "^6.5.0", - "picomatch": "^4.0.3", - "postcss": "^8.5.6", - "rollup": "^4.43.0", - "tinyglobby": "^0.2.15" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "lightningcss": "^1.21.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "../YouTube.js/node_modules/vite-node": { - "version": "3.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.4.1", - "es-module-lexer": "^1.7.0", - "pathe": "^2.0.3", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "../YouTube.js/node_modules/vite/node_modules/fdir": { - "version": "6.5.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "../YouTube.js/node_modules/vite/node_modules/picomatch": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "../YouTube.js/node_modules/vitest": { - "version": "3.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/chai": "^5.2.2", - "@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", - "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.14", - "tinypool": "^1.1.1", - "tinyrainbow": "^2.0.0", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", - "vite-node": "3.2.4", - "why-is-node-running": "^2.3.0" - }, - "bin": { - "vitest": "vitest.mjs" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@types/debug": "^4.1.12", - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.2.4", - "@vitest/ui": "3.2.4", - "happy-dom": "*", - "jsdom": "*" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@types/debug": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@vitest/browser": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - } - } - }, - "../YouTube.js/node_modules/vitest/node_modules/picomatch": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "../YouTube.js/node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "../YouTube.js/node_modules/which-module": { - "version": "2.0.1", - "dev": true, - "license": "ISC" - }, - "../YouTube.js/node_modules/why-is-node-running": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" - }, - "bin": { - "why-is-node-running": "cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "../YouTube.js/node_modules/word-wrap": { - "version": "1.2.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../YouTube.js/node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "../YouTube.js/node_modules/yaml": { - "version": "2.8.1", - "dev": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - } - }, - "../YouTube.js/node_modules/yocto-queue": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@actions/core": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.11.1.tgz", - "integrity": "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@actions/exec": "^1.1.1", - "@actions/http-client": "^2.0.1" - } - }, - "node_modules/@actions/exec": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz", - "integrity": "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@actions/io": "^1.0.1" - } - }, - "node_modules/@actions/http-client": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.3.tgz", - "integrity": "sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tunnel": "^0.0.6", - "undici": "^5.25.4" - } - }, - "node_modules/@actions/io": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.3.tgz", - "integrity": "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.28.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.28.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.4", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.4", - "@babel/types": "^7.28.4", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.28.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.3", - "@babel/types": "^7.28.2", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "dev": true, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.11.tgz", + "integrity": "sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "@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" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "dev": true, - "license": "ISC" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } }, - "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "dev": true, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.11.tgz", + "integrity": "sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==", + "cpu": [ + "ia32" + ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "dev": true, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.11.tgz", + "integrity": "sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==", + "cpu": [ + "loong64" + ], "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "dev": true, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.11.tgz", + "integrity": "sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==", + "cpu": [ + "mips64el" + ], "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node": ">=18" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "dev": true, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.11.tgz", + "integrity": "sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==", + "cpu": [ + "ppc64" + ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "dev": true, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.11.tgz", + "integrity": "sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==", + "cpu": [ + "riscv64" + ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "dev": true, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.11.tgz", + "integrity": "sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==", + "cpu": [ + "s390x" + ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "node_modules/@babel/helpers": { - "version": "7.28.4", - "dev": true, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.11.tgz", + "integrity": "sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "node_modules/@babel/parser": { - "version": "7.28.4", - "dev": true, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.11.tgz", + "integrity": "sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.4" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=6.0.0" + "node": ">=18" } }, - "node_modules/@babel/runtime": { - "version": "7.28.3", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.11.tgz", + "integrity": "sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==", + "cpu": [ + "x64" + ], "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "node_modules/@babel/template": { - "version": "7.27.2", - "dev": true, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.11.tgz", + "integrity": "sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" - }, + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "node_modules/@babel/traverse": { - "version": "7.28.4", - "dev": true, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.11.tgz", + "integrity": "sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.4", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4", - "debug": "^4.3.1" - }, + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "node_modules/@babel/types": { - "version": "7.28.4", - "dev": true, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.11.tgz", + "integrity": "sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, + "optional": true, + "os": [ + "openharmony" + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "dev": true, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.11.tgz", + "integrity": "sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==", + "cpu": [ + "x64" + ], "license": "MIT", "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=0.1.90" + "node": ">=18" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "dev": true, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.11.tgz", + "integrity": "sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.11.tgz", + "integrity": "sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==", + "cpu": [ + "ia32" + ], "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@dfoverdx/tocamelcase": { - "version": "1.0.7", - "dev": true, - "license": "ISC" + "node_modules/@esbuild/win32-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.11.tgz", + "integrity": "sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", "dev": true, "license": "MIT", "dependencies": { @@ -3800,8 +863,23 @@ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { @@ -3810,6 +888,8 @@ }, "node_modules/@eslint/compat": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.4.0.tgz", + "integrity": "sha512-DEzm5dKeDBPm3r08Ixli/0cmxr8LkRdwxMRUIJBlSCpAwSrvFEJpVBzV+66JhDxiaqKxnRzCXhtiMiczF7Hglg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3820,30 +900,21 @@ }, "peerDependencies": { "eslint": "^8.40 || 9" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/compat/node_modules/@eslint/core": { - "version": "0.16.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, "node_modules/@eslint/config-array": { - "version": "0.21.0", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.6", + "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.2" }, @@ -3851,36 +922,23 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/config-array/node_modules/brace-expansion": { - "version": "1.1.12", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/config-array/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@eslint/config-helpers": { - "version": "0.3.1", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.1.tgz", + "integrity": "sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==", "dev": true, "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/core": { - "version": "0.15.2", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3892,6 +950,8 @@ }, "node_modules/@eslint/eslintrc": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3912,17 +972,10 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", "engines": { @@ -3932,19 +985,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@eslint/js": { - "version": "9.37.0", + "version": "9.38.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.38.0.tgz", + "integrity": "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==", "dev": true, "license": "MIT", "engines": { @@ -3955,7 +999,9 @@ } }, "node_modules/@eslint/object-schema": { - "version": "2.1.6", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3963,11 +1009,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.5", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", + "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.15.2", + "@eslint/core": "^0.16.0", "levn": "^0.4.1" }, "engines": { @@ -3986,10 +1034,14 @@ }, "node_modules/@formkit/auto-animate": { "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@formkit/auto-animate/-/auto-animate-0.9.0.tgz", + "integrity": "sha512-VhP4zEAacXS3dfTpJpJ88QdLqMTcabMg0jwpOSxZ/VzfQVfl3GkZSCZThhGC5uhq/TxPHPzW0dzr4H9Bb1OgKA==", "license": "MIT" }, "node_modules/@humanfs/core": { "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3997,31 +1049,23 @@ } }, "node_modules/@humanfs/node": { - "version": "0.16.6", + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", "dev": true, "license": "Apache-2.0", "dependencies": { "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" + "@humanwhocodes/retry": "^0.4.0" }, "engines": { "node": ">=18.18.0" } }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4034,6 +1078,8 @@ }, "node_modules/@humanwhocodes/retry": { "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4046,6 +1092,8 @@ }, "node_modules/@isaacs/cliui": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "license": "ISC", "dependencies": { @@ -4060,34 +1108,11 @@ "node": ">=12" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", - "devOptional": true, + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", @@ -4096,6 +1121,8 @@ }, "node_modules/@jridgewell/remapping": { "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4105,30 +1132,26 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "devOptional": true, + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", - "devOptional": true, + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", - "devOptional": true, + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -4136,7 +1159,9 @@ } }, "node_modules/@monaco-editor/loader": { - "version": "1.5.0", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.6.1.tgz", + "integrity": "sha512-w3tEnj9HYEC73wtjdpR089AqkUPskFRcdkxsiSFt3SoUc3OHpmu+leP94CXBm4mHfefmhsdfI0ZQu6qJ0wgtPg==", "license": "MIT", "dependencies": { "state-local": "^1.0.6" @@ -4144,6 +1169,8 @@ }, "node_modules/@monaco-editor/react": { "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@monaco-editor/react/-/react-4.7.0.tgz", + "integrity": "sha512-cyzXQCtO47ydzxpQtCGSQGOC8Gk3ZUeBXFAxD+CWXYFo5OqZyZUonFl0DwUlTyAfRHntBfw2p3w4s9R6oe1eCA==", "license": "MIT", "dependencies": { "@monaco-editor/loader": "^1.5.0" @@ -4156,6 +1183,8 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "dependencies": { @@ -4168,6 +1197,8 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { @@ -4176,6 +1207,8 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { @@ -4202,6 +1235,7 @@ "integrity": "sha512-t54CUOsFMappY1Jbzb7fetWeO0n6K0k/4+/ZpkS+3Joz8I4VcvY9OiEBFRYISqaI2fq5sCiPtAjRDOzVYG8m+Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.2", @@ -4252,13 +1286,13 @@ "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-13.2.0.tgz", - "integrity": "sha512-YuAlyjR8o5QoRSOvMHxSJzPtogkNMgeMv2mpccrvdUGeC3MKyfi/hS+KiFwyH/iRKIKyx+eIMsDjbt3p9r2GYA==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-13.2.1.tgz", + "integrity": "sha512-Tj4PkZyIL6eBMYcG/76QGsedF0+dWVeLhYprTmuFVVxzDW7PQh23tM0TP0z+1MvSkxB29YFZwnUX+cXfTiSdyw==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^15.0.0" + "@octokit/types": "^15.0.1" }, "engines": { "node": ">= 20" @@ -4333,9 +1367,9 @@ } }, "node_modules/@octokit/types": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-15.0.0.tgz", - "integrity": "sha512-8o6yDfmoGJUIeR9OfYU0/TUJTnMPG2r68+1yEdUeG2Fdqpj8Qetg0ziKIgcBm0RW/j29H41WP37CYCEhp6GoHQ==", + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-15.0.1.tgz", + "integrity": "sha512-sdiirM93IYJ9ODDCBgmRPIboLbSkpLa5i+WLuXH8b8Atg+YMLAyLvDDhNWLV4OYd08tlvYfVm/dw88cqHWtw1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -4344,6 +1378,8 @@ }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "license": "MIT", "optional": true, @@ -4352,7 +1388,9 @@ } }, "node_modules/@pkgr/core": { - "version": "0.2.7", + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", "dev": true, "license": "MIT", "engines": { @@ -4415,9 +1453,9 @@ "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.45.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.0.tgz", - "integrity": "sha512-2o/FgACbji4tW1dzXOqAV15Eu7DdgbKsF2QKcxfG4xbh5iwU7yr5RRP5/U+0asQliSYv5M4o7BevlGIoSL0LXg==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz", + "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==", "cpu": [ "arm" ], @@ -4428,9 +1466,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.45.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.0.tgz", - "integrity": "sha512-PSZ0SvMOjEAxwZeTx32eI/j5xSYtDCRxGu5k9zvzoY77xUNssZM+WV6HYBLROpY5CkXsbQjvz40fBb7WPwDqtQ==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz", + "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==", "cpu": [ "arm64" ], @@ -4441,7 +1479,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.45.0", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz", + "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==", "cpu": [ "arm64" ], @@ -4452,9 +1492,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.45.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.0.tgz", - "integrity": "sha512-Pr2o0lvTwsiG4HCr43Zy9xXrHspyMvsvEw4FwKYqhli4FuLE5FjcZzuQ4cfPe0iUFCvSQG6lACI0xj74FDZKRA==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz", + "integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==", "cpu": [ "x64" ], @@ -4465,9 +1505,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.45.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.0.tgz", - "integrity": "sha512-lYE8LkE5h4a/+6VnnLiL14zWMPnx6wNbDG23GcYFpRW1V9hYWHAw9lBZ6ZUIrOaoK7NliF1sdwYGiVmziUF4vA==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz", + "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==", "cpu": [ "arm64" ], @@ -4478,9 +1518,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.45.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.0.tgz", - "integrity": "sha512-PVQWZK9sbzpvqC9Q0GlehNNSVHR+4m7+wET+7FgSnKG3ci5nAMgGmr9mGBXzAuE5SvguCKJ6mHL6vq1JaJ/gvw==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz", + "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==", "cpu": [ "x64" ], @@ -4491,9 +1531,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.45.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.0.tgz", - "integrity": "sha512-hLrmRl53prCcD+YXTfNvXd776HTxNh8wPAMllusQ+amcQmtgo3V5i/nkhPN6FakW+QVLoUUr2AsbtIRPFU3xIA==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz", + "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==", "cpu": [ "arm" ], @@ -4504,9 +1544,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.45.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.0.tgz", - "integrity": "sha512-XBKGSYcrkdiRRjl+8XvrUR3AosXU0NvF7VuqMsm7s5nRy+nt58ZMB19Jdp1RdqewLcaYnpk8zeVs/4MlLZEJxw==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz", + "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==", "cpu": [ "arm" ], @@ -4517,9 +1557,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.45.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.0.tgz", - "integrity": "sha512-fRvZZPUiBz7NztBE/2QnCS5AtqLVhXmUOPj9IHlfGEXkapgImf4W9+FSkL8cWqoAjozyUzqFmSc4zh2ooaeF6g==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz", + "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==", "cpu": [ "arm64" ], @@ -4530,9 +1570,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.45.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.0.tgz", - "integrity": "sha512-Btv2WRZOcUGi8XU80XwIvzTg4U6+l6D0V6sZTrZx214nrwxw5nAi8hysaXj/mctyClWgesyuxbeLylCBNauimg==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz", + "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==", "cpu": [ "arm64" ], @@ -4542,10 +1582,10 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.45.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.0.tgz", - "integrity": "sha512-Li0emNnwtUZdLwHjQPBxn4VWztcrw/h7mgLyHiEI5Z0MhpeFGlzaiBHpSNVOMB/xucjXTTcO+dhv469Djr16KA==", + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz", + "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==", "cpu": [ "loong64" ], @@ -4555,10 +1595,10 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.45.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.0.tgz", - "integrity": "sha512-sB8+pfkYx2kvpDCfd63d5ScYT0Fz1LO6jIb2zLZvmK9ob2D8DeVqrmBDE0iDK8KlBVmsTNzrjr3G1xV4eUZhSw==", + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz", + "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==", "cpu": [ "ppc64" ], @@ -4569,9 +1609,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.45.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.0.tgz", - "integrity": "sha512-5GQ6PFhh7E6jQm70p1aW05G2cap5zMOvO0se5JMecHeAdj5ZhWEHbJ4hiKpfi1nnnEdTauDXxPgXae/mqjow9w==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz", + "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==", "cpu": [ "riscv64" ], @@ -4582,9 +1622,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.45.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.0.tgz", - "integrity": "sha512-N/euLsBd1rekWcuduakTo/dJw6U6sBP3eUq+RXM9RNfPuWTvG2w/WObDkIvJ2KChy6oxZmOSC08Ak2OJA0UiAA==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz", + "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==", "cpu": [ "riscv64" ], @@ -4595,9 +1635,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.45.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.0.tgz", - "integrity": "sha512-2l9sA7d7QdikL0xQwNMO3xURBUNEWyHVHfAsHsUdq+E/pgLTUcCE+gih5PCdmyHmfTDeXUWVhqL0WZzg0nua3g==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz", + "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==", "cpu": [ "s390x" ], @@ -4621,9 +1661,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.45.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.0.tgz", - "integrity": "sha512-7ayfgvtmmWgKWBkCGg5+xTQ0r5V1owVm67zTrsEY1008L5ro7mCyGYORomARt/OquB9KY7LpxVBZes+oSniAAQ==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz", + "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==", "cpu": [ "x64" ], @@ -4633,10 +1673,23 @@ "linux" ] }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz", + "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.45.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.0.tgz", - "integrity": "sha512-B+IJgcBnE2bm93jEW5kHisqvPITs4ddLOROAcOc/diBgrEiQJJ6Qcjby75rFSmH5eMGrqJryUgJDhrfj942apQ==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz", + "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==", "cpu": [ "arm64" ], @@ -4647,9 +1700,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.45.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.0.tgz", - "integrity": "sha512-+CXwwG66g0/FpWOnP/v1HnrGVSOygK/osUbu3wPRy8ECXjoYKjRAyfxYpDQOfghC5qPJYLPH0oN4MCOjwgdMug==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz", + "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==", "cpu": [ "ia32" ], @@ -4659,10 +1712,23 @@ "win32" ] }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz", + "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.45.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.0.tgz", - "integrity": "sha512-SRf1cytG7wqcHVLrBc9VtPK4pU5wxiB/lNIkNmW2ApKXIg+RpqwHfsaEK+e7eH4A1BpI6BX/aBWXxZCIrJg3uA==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz", + "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==", "cpu": [ "x64" ], @@ -4674,16 +1740,22 @@ }, "node_modules/@rtsao/scc": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", "dev": true, "license": "MIT" }, "node_modules/@sec-ant/readable-stream": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", "dev": true, "license": "MIT" }, "node_modules/@semantic-release/changelog": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", + "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", "dev": true, "license": "MIT", "dependencies": { @@ -4724,6 +1796,8 @@ }, "node_modules/@semantic-release/error": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", + "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", "dev": true, "license": "MIT", "engines": { @@ -4732,6 +1806,8 @@ }, "node_modules/@semantic-release/exec": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@semantic-release/exec/-/exec-7.1.0.tgz", + "integrity": "sha512-4ycZ2atgEUutspPZ2hxO6z8JoQt4+y/kkHvfZ1cZxgl9WKJId1xPj+UadwInj+gMn2Gsv+fLnbrZ4s+6tK2TFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4751,165 +1827,112 @@ }, "node_modules/@semantic-release/exec/node_modules/@semantic-release/error": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", + "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", "dev": true, "license": "MIT", "engines": { "node": ">=18" } }, - "node_modules/@semantic-release/exec/node_modules/execa": { - "version": "9.5.2", + "node_modules/@semantic-release/git": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", + "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", "dev": true, "license": "MIT", "dependencies": { - "@sindresorhus/merge-streams": "^4.0.0", - "cross-spawn": "^7.0.3", - "figures": "^6.1.0", - "get-stream": "^9.0.0", - "human-signals": "^8.0.0", - "is-plain-obj": "^4.1.0", - "is-stream": "^4.0.1", - "npm-run-path": "^6.0.0", - "pretty-ms": "^9.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^4.0.0", - "yoctocolors": "^2.0.0" + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", + "debug": "^4.0.0", + "dir-glob": "^3.0.0", + "execa": "^5.0.0", + "lodash": "^4.17.4", + "micromatch": "^4.0.0", + "p-reduce": "^2.0.0" }, "engines": { - "node": "^18.19.0 || >=20.5.0" + "node": ">=14.17" }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "peerDependencies": { + "semantic-release": ">=18.0.0" } }, - "node_modules/@semantic-release/exec/node_modules/get-stream": { - "version": "9.0.1", + "node_modules/@semantic-release/git/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "license": "MIT", "dependencies": { - "@sec-ant/readable-stream": "^0.4.1", - "is-stream": "^4.0.1" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/exec/node_modules/human-signals": { - "version": "8.0.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@semantic-release/exec/node_modules/is-stream": { - "version": "4.0.1", + "node_modules/@semantic-release/git/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/exec/node_modules/npm-run-path": { - "version": "6.0.0", + "node_modules/@semantic-release/git/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^4.0.0", - "unicorn-magic": "^0.3.0" - }, + "license": "Apache-2.0", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.17.0" } }, - "node_modules/@semantic-release/exec/node_modules/parse-json": { - "version": "8.1.0", + "node_modules/@semantic-release/git/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "index-to-position": "^0.1.2", - "type-fest": "^4.7.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/exec/node_modules/path-key": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/exec/node_modules/signal-exit": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@semantic-release/exec/node_modules/strip-final-newline": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@semantic-release/exec/node_modules/unicorn-magic": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" + "path-key": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/@semantic-release/git": { - "version": "10.0.1", + "node_modules/@semantic-release/git/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@semantic-release/git/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "license": "MIT", - "dependencies": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "debug": "^4.0.0", - "dir-glob": "^3.0.0", - "execa": "^5.0.0", - "lodash": "^4.17.4", - "micromatch": "^4.0.0", - "p-reduce": "^2.0.0" - }, "engines": { - "node": ">=14.17" - }, - "peerDependencies": { - "semantic-release": ">=18.0.0" + "node": ">=6" } }, "node_modules/@semantic-release/github": { @@ -5098,96 +2121,89 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/npm/node_modules/execa": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.0.tgz", - "integrity": "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==", + "node_modules/@semantic-release/npm/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^4.0.0", - "cross-spawn": "^7.0.6", - "figures": "^6.1.0", - "get-stream": "^9.0.0", - "human-signals": "^8.0.1", - "is-plain-obj": "^4.1.0", - "is-stream": "^4.0.1", - "npm-run-path": "^6.0.0", - "pretty-ms": "^9.2.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^4.0.0", - "yoctocolors": "^2.1.1" - }, "engines": { - "node": "^18.19.0 || >=20.5.0" + "node": ">=12" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/npm/node_modules/get-stream": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", - "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "node_modules/@semantic-release/npm/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, - "license": "MIT", - "dependencies": { - "@sec-ant/readable-stream": "^0.4.1", - "is-stream": "^4.0.1" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/@semantic-release/npm/node_modules/human-signals": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", - "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "node_modules/@semantic-release/release-notes-generator": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-14.1.0.tgz", + "integrity": "sha512-CcyDRk7xq+ON/20YNR+1I/jP7BYKICr1uKd1HHpROSnnTdGqOTburi4jcRiTYz0cpfhxSloQO3cGhnoot7IEkA==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "conventional-changelog-angular": "^8.0.0", + "conventional-changelog-writer": "^8.0.0", + "conventional-commits-filter": "^5.0.0", + "conventional-commits-parser": "^6.0.0", + "debug": "^4.0.0", + "get-stream": "^7.0.0", + "import-from-esm": "^2.0.0", + "into-stream": "^7.0.0", + "lodash-es": "^4.17.21", + "read-package-up": "^11.0.0" + }, "engines": { - "node": ">=18.18.0" + "node": ">=20.8.1" + }, + "peerDependencies": { + "semantic-release": ">=20.1.0" } }, - "node_modules/@semantic-release/npm/node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "node_modules/@semantic-release/release-notes-generator/node_modules/get-stream": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz", + "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/npm/node_modules/is-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", - "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/@semantic-release/npm/node_modules/npm-run-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", - "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", "dev": true, "license": "MIT", - "dependencies": { - "path-key": "^4.0.0", - "unicorn-magic": "^0.3.0" - }, "engines": { "node": ">=18" }, @@ -5195,167 +2211,210 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/npm/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "node_modules/@swc/core": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.13.5.tgz", + "integrity": "sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ==", "dev": true, - "license": "MIT", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.24" + }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.13.5", + "@swc/core-darwin-x64": "1.13.5", + "@swc/core-linux-arm-gnueabihf": "1.13.5", + "@swc/core-linux-arm64-gnu": "1.13.5", + "@swc/core-linux-arm64-musl": "1.13.5", + "@swc/core-linux-x64-gnu": "1.13.5", + "@swc/core-linux-x64-musl": "1.13.5", + "@swc/core-win32-arm64-msvc": "1.13.5", + "@swc/core-win32-ia32-msvc": "1.13.5", + "@swc/core-win32-x64-msvc": "1.13.5" + }, + "peerDependencies": { + "@swc/helpers": ">=0.5.17" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } } }, - "node_modules/@semantic-release/npm/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/@swc/core-darwin-arm64": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.5.tgz", + "integrity": "sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "ISC", + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=10" } }, - "node_modules/@semantic-release/npm/node_modules/strip-final-newline": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", - "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "node_modules/@swc/core-darwin-x64": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.13.5.tgz", + "integrity": "sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/@semantic-release/npm/node_modules/unicorn-magic": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.5.tgz", + "integrity": "sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ==", + "cpu": [ + "arm" + ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/@semantic-release/release-notes-generator": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-14.1.0.tgz", - "integrity": "sha512-CcyDRk7xq+ON/20YNR+1I/jP7BYKICr1uKd1HHpROSnnTdGqOTburi4jcRiTYz0cpfhxSloQO3cGhnoot7IEkA==", + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.5.tgz", + "integrity": "sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "conventional-changelog-angular": "^8.0.0", - "conventional-changelog-writer": "^8.0.0", - "conventional-commits-filter": "^5.0.0", - "conventional-commits-parser": "^6.0.0", - "debug": "^4.0.0", - "get-stream": "^7.0.0", - "import-from-esm": "^2.0.0", - "into-stream": "^7.0.0", - "lodash-es": "^4.17.21", - "read-package-up": "^11.0.0" - }, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=20.8.1" - }, - "peerDependencies": { - "semantic-release": ">=20.1.0" + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.5.tgz", + "integrity": "sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" } }, - "node_modules/@semantic-release/release-notes-generator/node_modules/get-stream": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz", - "integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==", + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.5.tgz", + "integrity": "sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.5.tgz", + "integrity": "sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/@sindresorhus/merge-streams": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", - "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.5.tgz", + "integrity": "sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/@swc/core": { + "node_modules/@swc/core-win32-ia32-msvc": { "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.5.tgz", + "integrity": "sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw==", + "cpu": [ + "ia32" + ], "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.24" - }, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/swc" - }, - "optionalDependencies": { - "@swc/core-darwin-arm64": "1.13.5", - "@swc/core-darwin-x64": "1.13.5", - "@swc/core-linux-arm-gnueabihf": "1.13.5", - "@swc/core-linux-arm64-gnu": "1.13.5", - "@swc/core-linux-arm64-musl": "1.13.5", - "@swc/core-linux-x64-gnu": "1.13.5", - "@swc/core-linux-x64-musl": "1.13.5", - "@swc/core-win32-arm64-msvc": "1.13.5", - "@swc/core-win32-ia32-msvc": "1.13.5", - "@swc/core-win32-x64-msvc": "1.13.5" - }, - "peerDependencies": { - "@swc/helpers": ">=0.5.17" - }, - "peerDependenciesMeta": { - "@swc/helpers": { - "optional": true - } } }, - "node_modules/@swc/core-darwin-arm64": { + "node_modules/@swc/core-win32-x64-msvc": { "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.5.tgz", + "integrity": "sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q==", "cpu": [ - "arm64" + "x64" ], "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ - "darwin" + "win32" ], "engines": { "node": ">=10" @@ -5363,11 +2422,15 @@ }, "node_modules/@swc/counter": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", "dev": true, "license": "Apache-2.0" }, "node_modules/@swc/types": { - "version": "0.1.24", + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz", + "integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -5375,7 +2438,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.87.1", + "version": "5.90.5", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.5.tgz", + "integrity": "sha512-wLamYp7FaDq6ZnNehypKI5fNvxHPfTYylE0m/ZpuuzJfJqhR5Pxg9gvGBHZx4n7J+V5Rg5mZxHHTlv25Zt5u+w==", "license": "MIT", "funding": { "type": "github", @@ -5383,10 +2448,12 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.87.1", + "version": "5.90.5", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.5.tgz", + "integrity": "sha512-pN+8UWpxZkEJ/Rnnj2v2Sxpx1WFlaa9L6a4UO89p6tTQbeo+m0MS8oYDjbggrR8QcTyjKoYWKS3xJQGr3ExT8Q==", "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.87.1" + "@tanstack/query-core": "5.90.5" }, "funding": { "type": "github", @@ -5398,6 +2465,8 @@ }, "node_modules/@thedutchcoder/postcss-rem-to-px": { "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@thedutchcoder/postcss-rem-to-px/-/postcss-rem-to-px-0.0.2.tgz", + "integrity": "sha512-M2T3bJSTgLtZF8+KDYDtSDAFGuTlaxYfitpjkmNswnfJ8AjbQ/g7NC+bqgAAViYWFV9I3tdrQuQ3Bu8j7GrjwA==", "dev": true, "license": "MIT", "engines": { @@ -5409,31 +2478,43 @@ }, "node_modules/@total-typescript/ts-reset": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@total-typescript/ts-reset/-/ts-reset-0.6.1.tgz", + "integrity": "sha512-cka47fVSo6lfQDIATYqb/vO1nvFfbPw7uWLayIXIhGETj0wcOOlrlkobOMDNQOFr9QOafegUPq13V2+6vtD7yg==", "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node10": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true, "license": "MIT" }, "node_modules/@types/archiver": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-6.0.3.tgz", + "integrity": "sha512-a6wUll6k3zX6qs5KlxIggs1P1JcYJaTCx2gnlr+f0S1yd2DoaEwoIK10HmBaLnZwWneBz+JBm0dwcZu0zECBcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5442,6 +2523,8 @@ }, "node_modules/@types/chrome": { "version": "0.1.24", + "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.1.24.tgz", + "integrity": "sha512-9iO9HL2bMeGS4C8m6gNFWUyuPE5HEUFk+rGh+7oriUjg+ata4Fc9PoVlu8xvGm7yoo3AmS3J6fAjoFj61NL2rw==", "dev": true, "license": "MIT", "dependencies": { @@ -5449,23 +2532,16 @@ "@types/har-format": "*" } }, - "node_modules/@types/eslint": { - "version": "8.56.10", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "license": "MIT" }, "node_modules/@types/filesystem": { "version": "0.0.36", + "resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.36.tgz", + "integrity": "sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==", "dev": true, "license": "MIT", "dependencies": { @@ -5474,87 +2550,107 @@ }, "node_modules/@types/filewriter": { "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.33.tgz", + "integrity": "sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==", "dev": true, "license": "MIT" }, "node_modules/@types/har-format": { - "version": "1.2.15", + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.16.tgz", + "integrity": "sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==", "dev": true, "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, "node_modules/@types/json5": { "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { - "version": "24.5.2", + "version": "24.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.1.tgz", + "integrity": "sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==", "devOptional": true, "license": "MIT", + "peer": true, "dependencies": { - "undici-types": "~7.12.0" + "undici-types": "~7.16.0" } }, "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, "license": "MIT" }, "node_modules/@types/react": { - "version": "19.1.15", + "version": "19.2.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz", + "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "19.1.9", + "version": "19.2.2", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.2.tgz", + "integrity": "sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==", "dev": true, "license": "MIT", "peerDependencies": { - "@types/react": "^19.0.0" + "@types/react": "^19.2.0" } }, "node_modules/@types/readdir-glob": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@types/readdir-glob/-/readdir-glob-1.1.5.tgz", + "integrity": "sha512-raiuEPUYqXu+nvtY2Pe8s8FEmZ3x5yAH4VkLdihcPdalvsHltomrRC9BzuStrJ9yk06470hS0Crw0f1pXqD+Hg==", "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/trusted-types": { - "version": "1.0.6", - "license": "MIT" - }, "node_modules/@types/webextension-polyfill": { - "version": "0.12.3", + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/@types/webextension-polyfill/-/webextension-polyfill-0.12.4.tgz", + "integrity": "sha512-wK8YdSI0pDiaehSLDIvtvonYmLwUUivg4Z6JCJO8rkyssMAG82cFJgwPK/V7NO61mJBLg/tXeoXQL8AFzpXZmQ==", "dev": true, "license": "MIT" }, "node_modules/@types/youtube-player": { "version": "5.5.11", + "resolved": "https://registry.npmjs.org/@types/youtube-player/-/youtube-player-5.5.11.tgz", + "integrity": "sha512-pM41CDBqJqBmTeJWnF7NOGz82IQoYOhqzMYXv5vKCXBqGiYSLldxMtpCk6KAEtADTy49S45AriYaCaZyeUX38Q==", "dev": true, "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.1.tgz", - "integrity": "sha512-rUsLh8PXmBjdiPY+Emjz9NX2yHvhS11v0SR6xNJkm5GM1MO9ea/1GoDKlHHZGrOJclL/cZ2i/vRUYVtjRhrHVQ==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.2.tgz", + "integrity": "sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.46.1", - "@typescript-eslint/type-utils": "8.46.1", - "@typescript-eslint/utils": "8.46.1", - "@typescript-eslint/visitor-keys": "8.46.1", + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/type-utils": "8.46.2", + "@typescript-eslint/utils": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -5568,13 +2664,15 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.46.1", + "@typescript-eslint/parser": "^8.46.2", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.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": { @@ -5582,16 +2680,17 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.1.tgz", - "integrity": "sha512-6JSSaBZmsKvEkbRUkf7Zj7dru/8ZCrJxAqArcLaVMee5907JdtEbKGsZ7zNiIm/UAkpGUkaSMZEXShnN2D1HZA==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.2.tgz", + "integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.46.1", - "@typescript-eslint/types": "8.46.1", - "@typescript-eslint/typescript-estree": "8.46.1", - "@typescript-eslint/visitor-keys": "8.46.1", + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", "debug": "^4.3.4" }, "engines": { @@ -5607,14 +2706,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.1.tgz", - "integrity": "sha512-FOIaFVMHzRskXr5J4Jp8lFVV0gz5ngv3RHmn+E4HYxSJ3DgDzU7fVI1/M7Ijh1zf6S7HIoaIOtln1H5y8V+9Zg==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.2.tgz", + "integrity": "sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.46.1", - "@typescript-eslint/types": "^8.46.1", + "@typescript-eslint/tsconfig-utils": "^8.46.2", + "@typescript-eslint/types": "^8.46.2", "debug": "^4.3.4" }, "engines": { @@ -5629,14 +2728,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.1.tgz", - "integrity": "sha512-weL9Gg3/5F0pVQKiF8eOXFZp8emqWzZsOJuWRUNtHT+UNV2xSJegmpCNQHy37aEQIbToTq7RHKhWvOsmbM680A==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.2.tgz", + "integrity": "sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.1", - "@typescript-eslint/visitor-keys": "8.46.1" + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5647,9 +2746,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.1.tgz", - "integrity": "sha512-X88+J/CwFvlJB+mK09VFqx5FE4H5cXD+H/Bdza2aEWkSb8hnWIQorNcscRl4IEo1Cz9VI/+/r/jnGWkbWPx54g==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.2.tgz", + "integrity": "sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==", "dev": true, "license": "MIT", "engines": { @@ -5664,15 +2763,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.1.tgz", - "integrity": "sha512-+BlmiHIiqufBxkVnOtFwjah/vrkF4MtKKvpXrKSPLCkCtAp8H01/VV43sfqA98Od7nJpDcFnkwgyfQbOG0AMvw==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.2.tgz", + "integrity": "sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.1", - "@typescript-eslint/typescript-estree": "8.46.1", - "@typescript-eslint/utils": "8.46.1", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2", + "@typescript-eslint/utils": "8.46.2", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -5689,9 +2788,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.1.tgz", - "integrity": "sha512-C+soprGBHwWBdkDpbaRC4paGBrkIXxVlNohadL5o0kfhsXqOC6GYH2S/Obmig+I0HTDl8wMaRySwrfrXVP8/pQ==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.2.tgz", + "integrity": "sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==", "dev": true, "license": "MIT", "engines": { @@ -5703,16 +2802,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.1.tgz", - "integrity": "sha512-uIifjT4s8cQKFQ8ZBXXyoUODtRoAd7F7+G8MKmtzj17+1UbdzFl52AzRyZRyKqPHhgzvXunnSckVu36flGy8cg==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.2.tgz", + "integrity": "sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.46.1", - "@typescript-eslint/tsconfig-utils": "8.46.1", - "@typescript-eslint/types": "8.46.1", - "@typescript-eslint/visitor-keys": "8.46.1", + "@typescript-eslint/project-service": "8.46.2", + "@typescript-eslint/tsconfig-utils": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -5731,17 +2830,56 @@ "typescript": ">=4.8.4 <6.0.0" } }, + "node_modules/@typescript-eslint/typescript-estree/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/typescript-estree/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/typescript-estree/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/utils": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.1.tgz", - "integrity": "sha512-vkYUy6LdZS7q1v/Gxb2Zs7zziuXN0wxqsetJdeZdRe/f5dwJFglmuvZBfTUivCtjH725C1jWCDfpadadD95EDQ==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.2.tgz", + "integrity": "sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.46.1", - "@typescript-eslint/types": "8.46.1", - "@typescript-eslint/typescript-estree": "8.46.1" + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5756,13 +2894,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.1.tgz", - "integrity": "sha512-ptkmIf2iDkNUjdeu2bQqhFPV1m6qTnFFjg7PPDjxKWaMaP0Z6I9l30Jr3g5QqbZGdw8YdYvLp+XnqnWWZOg/NA==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.2.tgz", + "integrity": "sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.1", + "@typescript-eslint/types": "8.46.2", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -5773,17 +2911,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "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/@vitejs/plugin-react-swc": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-4.1.0.tgz", @@ -5801,13 +2928,10 @@ "vite": "^4 || ^5 || ^6 || ^7" } }, - "node_modules/abbrev": { - "version": "1.1.1", - "dev": true, - "license": "ISC" - }, "node_modules/abort-controller": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dev": true, "license": "MIT", "dependencies": { @@ -5819,8 +2943,11 @@ }, "node_modules/acorn": { "version": "8.15.0", - "devOptional": true, + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -5830,6 +2957,8 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -5837,9 +2966,14 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.2", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, "engines": { "node": ">=0.4.0" } @@ -5856,6 +2990,8 @@ }, "node_modules/aggregate-error": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "license": "MIT", "dependencies": { @@ -5868,6 +3004,8 @@ }, "node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { @@ -5882,7 +3020,9 @@ } }, "node_modules/ansi-escapes": { - "version": "7.0.0", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz", + "integrity": "sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==", "dev": true, "license": "MIT", "dependencies": { @@ -5896,15 +3036,22 @@ } }, "node_modules/ansi-regex": { - "version": "5.0.1", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "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, "license": "MIT", "dependencies": { @@ -5919,11 +3066,15 @@ }, "node_modules/any-promise": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true, "license": "MIT" }, "node_modules/anymatch": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "license": "ISC", "dependencies": { @@ -5936,6 +3087,8 @@ }, "node_modules/archiver": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", + "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5953,6 +3106,8 @@ }, "node_modules/archiver-utils": { "version": "5.0.2", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", + "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", "dev": true, "license": "MIT", "dependencies": { @@ -5970,21 +3125,29 @@ }, "node_modules/arg": { "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "dev": true, "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/argv-formatter": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", + "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==", "dev": true, "license": "MIT" }, "node_modules/aria-query": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -5993,6 +3156,8 @@ }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", "dependencies": { @@ -6015,6 +3180,8 @@ }, "node_modules/array-includes": { "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": { @@ -6036,6 +3203,8 @@ }, "node_modules/array.prototype.findlast": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6055,6 +3224,8 @@ }, "node_modules/array.prototype.findlastindex": { "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": { @@ -6075,6 +3246,8 @@ }, "node_modules/array.prototype.flat": { "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": { @@ -6092,6 +3265,8 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "license": "MIT", "dependencies": { @@ -6109,6 +3284,8 @@ }, "node_modules/array.prototype.tosorted": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "license": "MIT", "dependencies": { @@ -6124,6 +3301,8 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6144,16 +3323,22 @@ }, "node_modules/ast-types-flow": { "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true, "license": "MIT" }, "node_modules/async": { - "version": "3.2.5", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "dev": true, "license": "MIT" }, "node_modules/async-function": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, "license": "MIT", "engines": { @@ -6162,6 +3347,8 @@ }, "node_modules/autoprefixer": { "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", "dev": true, "funding": [ { @@ -6198,6 +3385,8 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6211,7 +3400,9 @@ } }, "node_modules/axe-core": { - "version": "4.10.0", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.0.tgz", + "integrity": "sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==", "dev": true, "license": "MPL-2.0", "engines": { @@ -6220,6 +3411,8 @@ }, "node_modules/axobject-query": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -6227,23 +3420,46 @@ } }, "node_modules/b4a": { - "version": "1.6.6", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", + "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", "dev": true, - "license": "Apache-2.0" + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } }, "node_modules/balanced-match": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, "node_modules/bare-events": { - "version": "2.2.2", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.1.tgz", + "integrity": "sha512-oxSAxTS1hRfnyit2CL5QpAOS5ixfBjj6ex3yTNvXyY/kE719jQ/IjuESJBK2w5v4wwQRAHGseVJXx9QBYOtFGQ==", "dev": true, "license": "Apache-2.0", - "optional": true + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } }, "node_modules/base64-js": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, "funding": [ { @@ -6261,6 +3477,16 @@ ], "license": "MIT" }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.20", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.20.tgz", + "integrity": "sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, "node_modules/before-after-hook": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz", @@ -6270,6 +3496,8 @@ }, "node_modules/binary-extensions": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "license": "MIT", "engines": { @@ -6287,15 +3515,20 @@ "license": "MIT" }, "node_modules/brace-expansion": { - "version": "2.0.1", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/braces": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", "dependencies": { @@ -6306,7 +3539,9 @@ } }, "node_modules/browserslist": { - "version": "4.25.0", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", + "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", "dev": true, "funding": [ { @@ -6323,11 +3558,13 @@ } ], "license": "MIT", + "peer": true, "dependencies": { - "caniuse-lite": "^1.0.30001718", - "electron-to-chromium": "^1.5.160", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" + "baseline-browser-mapping": "^2.8.19", + "caniuse-lite": "^1.0.30001751", + "electron-to-chromium": "^1.5.238", + "node-releases": "^2.0.26", + "update-browserslist-db": "^1.1.4" }, "bin": { "browserslist": "cli.js" @@ -6338,6 +3575,8 @@ }, "node_modules/buffer": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { @@ -6361,20 +3600,18 @@ }, "node_modules/buffer-crc32": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", + "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", "dev": true, "license": "MIT", "engines": { "node": ">=8.0.0" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/call-bind": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", "dependencies": { @@ -6392,6 +3629,8 @@ }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6404,6 +3643,8 @@ }, "node_modules/call-bound": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, "license": "MIT", "dependencies": { @@ -6419,6 +3660,8 @@ }, "node_modules/callsites": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", "engines": { @@ -6427,6 +3670,8 @@ }, "node_modules/camelcase-css": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", "dev": true, "license": "MIT", "engines": { @@ -6434,7 +3679,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001721", + "version": "1.0.30001751", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz", + "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==", "dev": true, "funding": [ { @@ -6454,6 +3701,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -6469,6 +3718,8 @@ }, "node_modules/chalk/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, "license": "MIT", "dependencies": { @@ -6480,6 +3731,8 @@ }, "node_modules/char-regex": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, "license": "MIT", "engines": { @@ -6488,6 +3741,8 @@ }, "node_modules/chokidar": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -6511,6 +3766,8 @@ }, "node_modules/chokidar/node_modules/glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -6522,6 +3779,8 @@ }, "node_modules/clean-stack": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, "license": "MIT", "engines": { @@ -6530,6 +3789,8 @@ }, "node_modules/cli-highlight": { "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", "dev": true, "license": "ISC", "dependencies": { @@ -6548,8 +3809,20 @@ "npm": ">=5.0.0" } }, + "node_modules/cli-highlight/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/cli-highlight/node_modules/cliui": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "license": "ISC", "dependencies": { @@ -6560,11 +3833,15 @@ }, "node_modules/cli-highlight/node_modules/emoji-regex": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/cli-highlight/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -6576,8 +3853,23 @@ "node": ">=8" } }, + "node_modules/cli-highlight/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cli-highlight/node_modules/wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6594,6 +3886,8 @@ }, "node_modules/cli-highlight/node_modules/yargs": { "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "license": "MIT", "dependencies": { @@ -6611,6 +3905,8 @@ }, "node_modules/cli-highlight/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, "license": "ISC", "engines": { @@ -6619,6 +3915,8 @@ }, "node_modules/cli-table3": { "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6631,13 +3929,27 @@ "@colors/colors": "1.5.0" } }, + "node_modules/cli-table3/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/cli-table3/node_modules/emoji-regex": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/cli-table3/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -6649,8 +3961,23 @@ "node": ">=8" } }, + "node_modules/cli-table3/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cliui": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "license": "ISC", "dependencies": { @@ -6662,19 +3989,46 @@ "node": ">=12" } }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/cliui/node_modules/emoji-regex": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" @@ -6682,6 +4036,8 @@ }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6698,6 +4054,8 @@ }, "node_modules/clsx": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "dev": true, "license": "MIT", "engines": { @@ -6706,6 +4064,8 @@ }, "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, "license": "MIT", "dependencies": { @@ -6717,11 +4077,15 @@ }, "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, "license": "MIT" }, "node_modules/commander": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true, "license": "MIT", "engines": { @@ -6741,6 +4105,8 @@ }, "node_modules/compress-commons": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", + "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==", "dev": true, "license": "MIT", "dependencies": { @@ -6756,21 +4122,24 @@ }, "node_modules/concat-map": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, "license": "MIT" }, "node_modules/concurrently": { - "version": "9.2.0", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz", + "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.2", - "lodash": "^4.17.21", - "rxjs": "^7.8.1", - "shell-quote": "^1.8.1", - "supports-color": "^8.1.1", - "tree-kill": "^1.2.2", - "yargs": "^17.7.2" + "chalk": "4.1.2", + "rxjs": "7.8.2", + "shell-quote": "1.8.3", + "supports-color": "8.1.1", + "tree-kill": "1.2.2", + "yargs": "17.7.2" }, "bin": { "conc": "dist/bin/concurrently.js", @@ -6795,9 +4164,9 @@ } }, "node_modules/conventional-changelog-angular": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.0.0.tgz", - "integrity": "sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.1.0.tgz", + "integrity": "sha512-GGf2Nipn1RUCAktxuVauVr1e3r8QrLP/B0lEUsFktmGqc3ddbQkhoJZHJctVU829U1c6mTSWftrVOCHaL85Q3w==", "dev": true, "license": "ISC", "dependencies": { @@ -6826,6 +4195,19 @@ "node": ">=18" } }, + "node_modules/conventional-changelog-writer/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/conventional-commits-filter": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-5.0.0.tgz", @@ -6837,9 +4219,9 @@ } }, "node_modules/conventional-commits-parser": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.2.0.tgz", - "integrity": "sha512-uLnoLeIW4XaoFtH37qEcg/SXMJmKF4vi7V0H2rnPueg+VEtFGA/asSCNTcq4M/GQ6QmlzchAEtOoDTtKqWeHag==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.2.1.tgz", + "integrity": "sha512-20pyHgnO40rvfI0NGF/xiEoFMkXDtkF8FwHvk5BokoFoCuTQRI8vrNCNFWUOfuolKJMm1tPCHc8GgYEtr1XRNA==", "dev": true, "license": "MIT", "dependencies": { @@ -6854,6 +4236,8 @@ }, "node_modules/convert-hrtime": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-5.0.0.tgz", + "integrity": "sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==", "dev": true, "license": "MIT", "engines": { @@ -6865,16 +4249,22 @@ }, "node_modules/convert-source-map": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, "license": "MIT" }, "node_modules/core-util-is": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true, "license": "MIT" }, "node_modules/cosmiconfig": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "license": "MIT", "dependencies": { @@ -6898,8 +4288,29 @@ } } }, + "node_modules/cosmiconfig/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, + "license": "MIT", + "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/crc-32": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -6911,6 +4322,8 @@ }, "node_modules/crc32-stream": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", + "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", "dev": true, "license": "MIT", "dependencies": { @@ -6923,11 +4336,15 @@ }, "node_modules/create-require": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true, "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { @@ -6970,6 +4387,8 @@ }, "node_modules/cssesc": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, "license": "MIT", "bin": { @@ -6981,16 +4400,22 @@ }, "node_modules/csstype": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "dev": true, "license": "MIT" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/data-view-buffer": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7007,6 +4432,8 @@ }, "node_modules/data-view-byte-length": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7023,6 +4450,8 @@ }, "node_modules/data-view-byte-offset": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7038,11 +4467,13 @@ } }, "node_modules/debug": { - "version": "4.3.4", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -7065,11 +4496,15 @@ }, "node_modules/deep-is": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, "license": "MIT" }, "node_modules/define-data-property": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", "dependencies": { @@ -7086,6 +4521,8 @@ }, "node_modules/define-properties": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "license": "MIT", "dependencies": { @@ -7102,11 +4539,15 @@ }, "node_modules/didyoumean": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "dev": true, "license": "Apache-2.0" }, "node_modules/diff": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -7115,6 +4556,8 @@ }, "node_modules/dir-glob": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "license": "MIT", "dependencies": { @@ -7126,9 +4569,30 @@ }, "node_modules/dlv": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "dev": true, "license": "MIT" }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dompurify": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.7.tgz", + "integrity": "sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==", + "license": "(MPL-2.0 OR Apache-2.0)" + }, "node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -7144,6 +4608,8 @@ }, "node_modules/dotenv": { "version": "17.2.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", + "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -7154,6 +4620,8 @@ }, "node_modules/dunder-proto": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, "license": "MIT", "dependencies": { @@ -7167,6 +4635,8 @@ }, "node_modules/duplexer2": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -7175,11 +4645,15 @@ }, "node_modules/duplexer2/node_modules/isarray": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, "license": "MIT" }, "node_modules/duplexer2/node_modules/readable-stream": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", "dependencies": { @@ -7194,11 +4668,15 @@ }, "node_modules/duplexer2/node_modules/safe-buffer": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "license": "MIT" }, "node_modules/duplexer2/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", "dependencies": { @@ -7207,21 +4685,29 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true, "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.165", + "version": "1.5.239", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.239.tgz", + "integrity": "sha512-1y5w0Zsq39MSPmEjHjbizvhYoTaulVtivpxkp5q5kaPmQtsK6/2nvAzGRxNMS9DoYySp9PkW0MAQDwU1m764mg==", "dev": true, "license": "ISC" }, "node_modules/emoji-regex": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, "license": "MIT" }, "node_modules/emojilib": { "version": "2.4.0", + "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", + "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", "dev": true, "license": "MIT" }, @@ -7241,6 +4727,8 @@ }, "node_modules/env-ci/node_modules/execa": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, "license": "MIT", "dependencies": { @@ -7263,6 +4751,8 @@ }, "node_modules/env-ci/node_modules/get-stream": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, "license": "MIT", "engines": { @@ -7274,6 +4764,8 @@ }, "node_modules/env-ci/node_modules/human-signals": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -7282,6 +4774,8 @@ }, "node_modules/env-ci/node_modules/is-stream": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, "license": "MIT", "engines": { @@ -7293,6 +4787,8 @@ }, "node_modules/env-ci/node_modules/mimic-fn": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, "license": "MIT", "engines": { @@ -7304,6 +4800,8 @@ }, "node_modules/env-ci/node_modules/npm-run-path": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7318,6 +4816,8 @@ }, "node_modules/env-ci/node_modules/onetime": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7332,6 +4832,8 @@ }, "node_modules/env-ci/node_modules/path-key": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, "license": "MIT", "engines": { @@ -7341,19 +4843,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/env-ci/node_modules/signal-exit": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/env-ci/node_modules/strip-final-newline": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, "license": "MIT", "engines": { @@ -7365,6 +4858,8 @@ }, "node_modules/env-paths": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "license": "MIT", "engines": { @@ -7373,6 +4868,8 @@ }, "node_modules/environment": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", "dev": true, "license": "MIT", "engines": { @@ -7383,7 +4880,9 @@ } }, "node_modules/error-ex": { - "version": "1.3.2", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7392,6 +4891,8 @@ }, "node_modules/es-abstract": { "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": { @@ -7459,6 +4960,8 @@ }, "node_modules/es-define-property": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "license": "MIT", "engines": { @@ -7467,6 +4970,8 @@ }, "node_modules/es-errors": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, "license": "MIT", "engines": { @@ -7475,6 +4980,8 @@ }, "node_modules/es-iterator-helpers": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", "dev": true, "license": "MIT", "dependencies": { @@ -7501,6 +5008,8 @@ }, "node_modules/es-object-atoms": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dev": true, "license": "MIT", "dependencies": { @@ -7512,6 +5021,8 @@ }, "node_modules/es-set-tostringtag": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, "license": "MIT", "dependencies": { @@ -7526,6 +5037,8 @@ }, "node_modules/es-shim-unscopables": { "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": { @@ -7537,6 +5050,8 @@ }, "node_modules/es-to-primitive": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "license": "MIT", "dependencies": { @@ -7552,7 +5067,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.2", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.11.tgz", + "integrity": "sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -7562,35 +5079,38 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.2", - "@esbuild/android-arm": "0.25.2", - "@esbuild/android-arm64": "0.25.2", - "@esbuild/android-x64": "0.25.2", - "@esbuild/darwin-arm64": "0.25.2", - "@esbuild/darwin-x64": "0.25.2", - "@esbuild/freebsd-arm64": "0.25.2", - "@esbuild/freebsd-x64": "0.25.2", - "@esbuild/linux-arm": "0.25.2", - "@esbuild/linux-arm64": "0.25.2", - "@esbuild/linux-ia32": "0.25.2", - "@esbuild/linux-loong64": "0.25.2", - "@esbuild/linux-mips64el": "0.25.2", - "@esbuild/linux-ppc64": "0.25.2", - "@esbuild/linux-riscv64": "0.25.2", - "@esbuild/linux-s390x": "0.25.2", - "@esbuild/linux-x64": "0.25.2", - "@esbuild/netbsd-arm64": "0.25.2", - "@esbuild/netbsd-x64": "0.25.2", - "@esbuild/openbsd-arm64": "0.25.2", - "@esbuild/openbsd-x64": "0.25.2", - "@esbuild/sunos-x64": "0.25.2", - "@esbuild/win32-arm64": "0.25.2", - "@esbuild/win32-ia32": "0.25.2", - "@esbuild/win32-x64": "0.25.2" + "@esbuild/aix-ppc64": "0.25.11", + "@esbuild/android-arm": "0.25.11", + "@esbuild/android-arm64": "0.25.11", + "@esbuild/android-x64": "0.25.11", + "@esbuild/darwin-arm64": "0.25.11", + "@esbuild/darwin-x64": "0.25.11", + "@esbuild/freebsd-arm64": "0.25.11", + "@esbuild/freebsd-x64": "0.25.11", + "@esbuild/linux-arm": "0.25.11", + "@esbuild/linux-arm64": "0.25.11", + "@esbuild/linux-ia32": "0.25.11", + "@esbuild/linux-loong64": "0.25.11", + "@esbuild/linux-mips64el": "0.25.11", + "@esbuild/linux-ppc64": "0.25.11", + "@esbuild/linux-riscv64": "0.25.11", + "@esbuild/linux-s390x": "0.25.11", + "@esbuild/linux-x64": "0.25.11", + "@esbuild/netbsd-arm64": "0.25.11", + "@esbuild/netbsd-x64": "0.25.11", + "@esbuild/openbsd-arm64": "0.25.11", + "@esbuild/openbsd-x64": "0.25.11", + "@esbuild/openharmony-arm64": "0.25.11", + "@esbuild/sunos-x64": "0.25.11", + "@esbuild/win32-arm64": "0.25.11", + "@esbuild/win32-ia32": "0.25.11", + "@esbuild/win32-x64": "0.25.11" } }, "node_modules/escalade": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "license": "MIT", "engines": { @@ -7599,6 +5119,8 @@ }, "node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", "engines": { @@ -7609,23 +5131,25 @@ } }, "node_modules/eslint": { - "version": "9.36.0", + "version": "9.38.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.38.0.tgz", + "integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.1", - "@eslint/core": "^0.15.2", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.1", + "@eslint/core": "^0.16.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.36.0", - "@eslint/plugin-kit": "^0.3.5", + "@eslint/js": "9.38.0", + "@eslint/plugin-kit": "^0.4.0", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", @@ -7669,8 +5193,11 @@ }, "node_modules/eslint-config-prettier": { "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", + "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -7683,6 +5210,8 @@ }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "license": "MIT", "dependencies": { @@ -7693,6 +5222,8 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7701,6 +5232,8 @@ }, "node_modules/eslint-module-utils": { "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": { @@ -7717,6 +5250,8 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7725,6 +5260,8 @@ }, "node_modules/eslint-plugin-import": { "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": { @@ -7755,55 +5292,20 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7830,28 +5332,10 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/eslint-plugin-no-secrets": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-secrets/-/eslint-plugin-no-secrets-2.2.1.tgz", + "integrity": "sha512-/7BduEiFeINJ7mlc8iRmqp0sDw2a2lAFahig/RGppn7qf1dKhldXopUuv4M92kc4PX90dcxfKwKtYrW159cuhA==", "dev": true, "license": "MIT", "engines": { @@ -7864,6 +5348,8 @@ }, "node_modules/eslint-plugin-perfectionist": { "version": "4.15.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-4.15.1.tgz", + "integrity": "sha512-MHF0cBoOG0XyBf7G0EAFCuJJu4I18wy0zAoT1OHfx2o6EOx1EFTIzr2HGeuZa1kDcusoX0xJ9V7oZmaeFd773Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7880,6 +5366,8 @@ }, "node_modules/eslint-plugin-prettier": { "version": "5.5.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz", + "integrity": "sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==", "dev": true, "license": "MIT", "dependencies": { @@ -7909,6 +5397,8 @@ }, "node_modules/eslint-plugin-promise": { "version": "7.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-7.2.1.tgz", + "integrity": "sha512-SWKjd+EuvWkYaS+uN2csvj0KoP43YTu7+phKQ5v+xw6+A0gutVX2yqCeCkC3uLCJFiPfR2dD8Es5L7yUsmvEaA==", "dev": true, "license": "ISC", "dependencies": { @@ -7926,6 +5416,8 @@ }, "node_modules/eslint-plugin-react": { "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", "dev": true, "license": "MIT", "dependencies": { @@ -7957,6 +5449,8 @@ }, "node_modules/eslint-plugin-react-hooks": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.0.tgz", + "integrity": "sha512-fNXaOwvKwq2+pXiRpXc825Vd63+KM4DLL40Rtlycb8m7fYpp6efrTp1sa6ZbP/Ap58K2bEKFXRmhURE+CJAQWw==", "dev": true, "license": "MIT", "dependencies": { @@ -7973,39 +5467,10 @@ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, - "node_modules/eslint-plugin-react/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "license": "MIT", "dependencies": { @@ -8020,16 +5485,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/eslint-plugin-tailwindcss": { "version": "3.18.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-tailwindcss/-/eslint-plugin-tailwindcss-3.18.2.tgz", + "integrity": "sha512-QbkMLDC/OkkjFQ1iz/5jkMdHfiMu/uwujUHLAJK5iwNHD8RTxVTlsUezE0toTZ6VhybNBsk+gYGPDq2agfeRNA==", "dev": true, "license": "MIT", "dependencies": { @@ -8045,6 +5504,8 @@ }, "node_modules/eslint-scope": { "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": { @@ -8059,38 +5520,9 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/@eslint/js": { - "version": "9.36.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - } - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/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": { @@ -8100,19 +5532,10 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/espree": { "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": { @@ -8127,19 +5550,10 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "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/esquery": { - "version": "1.5.0", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8151,6 +5565,8 @@ }, "node_modules/esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -8162,6 +5578,8 @@ }, "node_modules/estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -8170,6 +5588,8 @@ }, "node_modules/esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -8178,6 +5598,8 @@ }, "node_modules/event-target-shim": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "dev": true, "license": "MIT", "engines": { @@ -8186,34 +5608,64 @@ }, "node_modules/events": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, "license": "MIT", "engines": { "node": ">=0.8.x" } }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, "node_modules/execa": { - "version": "5.1.1", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.0.tgz", + "integrity": "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==", "dev": true, "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" }, "engines": { - "node": ">=10" + "node": "^18.19.0 || >=20.5.0" }, "funding": { "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/execa/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/fast-content-type-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz", @@ -8233,21 +5685,29 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true, "license": "Apache-2.0" }, "node_modules/fast-fifo": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", "dev": true, "license": "MIT" }, "node_modules/fast-glob": { - "version": "3.3.2", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { @@ -8255,7 +5715,7 @@ "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -8263,6 +5723,8 @@ }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -8274,16 +5736,22 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, "license": "MIT" }, "node_modules/fastq": { - "version": "1.17.1", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, "license": "ISC", "dependencies": { @@ -8292,6 +5760,8 @@ }, "node_modules/figures": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", "dev": true, "license": "MIT", "dependencies": { @@ -8306,6 +5776,8 @@ }, "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": { @@ -8317,6 +5789,8 @@ }, "node_modules/fill-range": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", "dependencies": { @@ -8328,6 +5802,8 @@ }, "node_modules/find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -8342,7 +5818,9 @@ } }, "node_modules/find-up-simple": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", + "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", "dev": true, "license": "MIT", "engines": { @@ -8354,6 +5832,8 @@ }, "node_modules/find-versions": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-6.0.0.tgz", + "integrity": "sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA==", "dev": true, "license": "MIT", "dependencies": { @@ -8369,6 +5849,8 @@ }, "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": { @@ -8380,12 +5862,16 @@ } }, "node_modules/flatted": { - "version": "3.3.1", + "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, "license": "ISC" }, "node_modules/for-each": { "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": { @@ -8399,11 +5885,13 @@ } }, "node_modules/foreground-child": { - "version": "3.1.1", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.0", + "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" }, "engines": { @@ -8413,19 +5901,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/fraction.js": { "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true, "license": "MIT", "engines": { @@ -8489,6 +5968,8 @@ }, "node_modules/fs-extra": { "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", "dev": true, "license": "MIT", "dependencies": { @@ -8502,6 +5983,9 @@ }, "node_modules/fsevents": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, "license": "MIT", "optional": true, "os": [ @@ -8513,6 +5997,8 @@ }, "node_modules/function-bind": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, "license": "MIT", "funding": { @@ -8520,7 +6006,9 @@ } }, "node_modules/function-timeout": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/function-timeout/-/function-timeout-1.0.2.tgz", + "integrity": "sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==", "dev": true, "license": "MIT", "engines": { @@ -8532,6 +6020,8 @@ }, "node_modules/function.prototype.name": { "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -8551,14 +6041,28 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "license": "MIT", "engines": { @@ -8567,6 +6071,8 @@ }, "node_modules/get-caller-file": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "license": "ISC", "engines": { @@ -8588,10 +6094,14 @@ }, "node_modules/get-installed-browsers": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/get-installed-browsers/-/get-installed-browsers-0.1.7.tgz", + "integrity": "sha512-gxGDcxaOpA9QNk/REyILnXJVmYS9Se33HTfFN7u03Pxpkn9R/ogsYIFRwyzvc5fCoZ548RAzGk4YSF0xLM4BUw==", "dev": true }, "node_modules/get-intrinsic": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8615,11 +6125,15 @@ }, "node_modules/get-own-enumerable-property-symbols": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", "dev": true, "license": "ISC" }, "node_modules/get-proto": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, "license": "MIT", "dependencies": { @@ -8631,11 +6145,30 @@ } }, "node_modules/get-stream": { - "version": "6.0.1", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", "dev": true, "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, "engines": { - "node": ">=10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -8643,6 +6176,8 @@ }, "node_modules/get-symbol-description": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { @@ -8658,7 +6193,9 @@ } }, "node_modules/git-log-parser": { - "version": "1.2.0", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.1.tgz", + "integrity": "sha512-PI+sPDvHXNPl5WNOErAK05s3j0lgwUzMN6o8cyQrDaKfT3qd7TmNJKeXX+SknI5I0QhG5fVPAEwSY4tRGDtYoQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8667,40 +6204,34 @@ "split2": "~1.0.0", "stream-combiner2": "~1.1.1", "through2": "~2.0.0", - "traverse": "~0.6.6" - } - }, - "node_modules/git-log-parser/node_modules/split2": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "through2": "~2.0.0" + "traverse": "0.6.8" } }, "node_modules/glob": { - "version": "10.3.12", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.10.2" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", "dependencies": { @@ -8710,8 +6241,36 @@ "node": ">=10.13.0" } }, + "node_modules/glob/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/glob/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/globals": { "version": "16.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", + "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", "license": "MIT", "engines": { "node": ">=18" @@ -8722,6 +6281,8 @@ }, "node_modules/globalthis": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8737,6 +6298,8 @@ }, "node_modules/gopd": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", "engines": { @@ -8748,11 +6311,15 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, "license": "MIT" }, @@ -8780,6 +6347,8 @@ }, "node_modules/has-bigints": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", "engines": { @@ -8791,6 +6360,8 @@ }, "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, "license": "MIT", "engines": { @@ -8799,6 +6370,8 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { @@ -8810,6 +6383,8 @@ }, "node_modules/has-proto": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8824,6 +6399,8 @@ }, "node_modules/has-symbols": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, "license": "MIT", "engines": { @@ -8835,6 +6412,8 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", "dependencies": { @@ -8849,6 +6428,8 @@ }, "node_modules/hasown": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8860,11 +6441,15 @@ }, "node_modules/hermes-estree": { "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", "dev": true, "license": "MIT" }, "node_modules/hermes-parser": { "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", "dev": true, "license": "MIT", "dependencies": { @@ -8873,6 +6458,8 @@ }, "node_modules/highlight.js": { "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -8881,6 +6468,8 @@ }, "node_modules/hook-std": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-4.0.0.tgz", + "integrity": "sha512-IHI4bEVOt3vRUDJ+bFA9VUJlo7SzvFARPNLw75pqSmAOP2HmTWfFJtPvLBrDrlgjEYXY9zs7SFdHPQaJShkSCQ==", "dev": true, "license": "MIT", "engines": { @@ -8891,14 +6480,26 @@ } }, "node_modules/hosted-git-info": { - "version": "7.0.1", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", + "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", "dev": true, "license": "ISC", "dependencies": { - "lru-cache": "^10.0.1" + "lru-cache": "^11.1.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" } }, "node_modules/http-proxy-agent": { @@ -8930,15 +6531,19 @@ } }, "node_modules/human-signals": { - "version": "2.1.0", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", "dev": true, "license": "Apache-2.0", "engines": { - "node": ">=10.17.0" + "node": ">=18.18.0" } }, "node_modules/i18next": { - "version": "25.5.2", + "version": "25.6.0", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.6.0.tgz", + "integrity": "sha512-tTn8fLrwBYtnclpL5aPXK/tAYBLWVvoHM1zdfXoRNLcI+RvtMsoZRV98ePlaW3khHYKuNh/Q65W/+NVFUeIwVw==", "funding": [ { "type": "individual", @@ -8968,6 +6573,8 @@ }, "node_modules/ieee754": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, "funding": [ { @@ -8986,7 +6593,9 @@ "license": "BSD-3-Clause" }, "node_modules/ignore": { - "version": "5.3.1", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -8995,11 +6604,15 @@ }, "node_modules/ignore-by-default": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", "dev": true, "license": "ISC" }, "node_modules/import-fresh": { - "version": "3.3.0", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9028,7 +6641,9 @@ } }, "node_modules/import-meta-resolve": { - "version": "4.1.0", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", "dev": true, "license": "MIT", "funding": { @@ -9038,6 +6653,8 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", "engines": { @@ -9046,6 +6663,8 @@ }, "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, "license": "MIT", "engines": { @@ -9053,7 +6672,9 @@ } }, "node_modules/index-to-position": { - "version": "0.1.2", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", + "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", "dev": true, "license": "MIT", "engines": { @@ -9065,6 +6686,8 @@ }, "node_modules/inherits": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, "license": "ISC" }, @@ -9077,6 +6700,8 @@ }, "node_modules/internal-slot": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { @@ -9107,6 +6732,8 @@ }, "node_modules/is-array-buffer": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { @@ -9123,11 +6750,15 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true, "license": "MIT" }, "node_modules/is-async-function": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9146,6 +6777,8 @@ }, "node_modules/is-bigint": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9160,6 +6793,8 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "license": "MIT", "dependencies": { @@ -9170,11 +6805,13 @@ } }, "node_modules/is-boolean-object": { - "version": "1.2.1", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", + "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" }, "engines": { @@ -9186,6 +6823,8 @@ }, "node_modules/is-callable": { "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "license": "MIT", "engines": { @@ -9197,6 +6836,8 @@ }, "node_modules/is-core-module": { "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "license": "MIT", "dependencies": { @@ -9211,6 +6852,8 @@ }, "node_modules/is-data-view": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { @@ -9227,6 +6870,8 @@ }, "node_modules/is-date-object": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { @@ -9242,6 +6887,8 @@ }, "node_modules/is-extglob": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "license": "MIT", "engines": { @@ -9250,6 +6897,8 @@ }, "node_modules/is-finalizationregistry": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { @@ -9264,6 +6913,8 @@ }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { @@ -9271,12 +6922,15 @@ } }, "node_modules/is-generator-function": { - "version": "1.1.0", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" }, @@ -9289,6 +6943,8 @@ }, "node_modules/is-glob": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", "dependencies": { @@ -9300,6 +6956,8 @@ }, "node_modules/is-map": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", "engines": { @@ -9311,6 +6969,8 @@ }, "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": { @@ -9322,6 +6982,8 @@ }, "node_modules/is-number": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", "engines": { @@ -9330,6 +6992,8 @@ }, "node_modules/is-number-object": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { @@ -9355,6 +7019,8 @@ }, "node_modules/is-plain-obj": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, "license": "MIT", "engines": { @@ -9366,6 +7032,8 @@ }, "node_modules/is-regex": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", "dependencies": { @@ -9383,6 +7051,8 @@ }, "node_modules/is-regexp": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-3.1.0.tgz", + "integrity": "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==", "dev": true, "license": "MIT", "engines": { @@ -9394,6 +7064,8 @@ }, "node_modules/is-set": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "license": "MIT", "engines": { @@ -9405,6 +7077,8 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "dependencies": { @@ -9419,6 +7093,8 @@ }, "node_modules/is-stream": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "license": "MIT", "engines": { @@ -9430,6 +7106,8 @@ }, "node_modules/is-string": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { @@ -9445,6 +7123,8 @@ }, "node_modules/is-symbol": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { @@ -9461,6 +7141,8 @@ }, "node_modules/is-typed-array": { "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9474,7 +7156,9 @@ } }, "node_modules/is-unicode-supported": { - "version": "2.0.0", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", "dev": true, "license": "MIT", "engines": { @@ -9486,6 +7170,8 @@ }, "node_modules/is-weakmap": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "license": "MIT", "engines": { @@ -9497,6 +7183,8 @@ }, "node_modules/is-weakref": { "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": { @@ -9511,6 +7199,8 @@ }, "node_modules/is-weakset": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9526,11 +7216,15 @@ }, "node_modules/isarray": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, "node_modules/isbinaryfile": { "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true, "license": "MIT", "engines": { @@ -9542,6 +7236,8 @@ }, "node_modules/isexe": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, "license": "ISC" }, @@ -9564,6 +7260,8 @@ }, "node_modules/iterator.prototype": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", "dev": true, "license": "MIT", "dependencies": { @@ -9579,15 +7277,14 @@ } }, "node_modules/jackspeak": { - "version": "2.3.6", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=14" - }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -9597,6 +7294,8 @@ }, "node_modules/java-properties": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", + "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", "dev": true, "license": "MIT", "engines": { @@ -9604,20 +7303,27 @@ } }, "node_modules/jiti": { - "version": "1.21.6", + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", "devOptional": true, "license": "MIT", + "peer": true, "bin": { "jiti": "bin/jiti.js" } }, "node_modules/js-tokens": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "license": "MIT", "dependencies": { @@ -9629,6 +7335,8 @@ }, "node_modules/jsesc": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", "bin": { @@ -9640,31 +7348,43 @@ }, "node_modules/json-buffer": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, "license": "MIT" }, "node_modules/json-parse-better-errors": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true, "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "license": "MIT", "bin": { @@ -9675,7 +7395,9 @@ } }, "node_modules/jsonfile": { - "version": "6.1.0", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, "license": "MIT", "dependencies": { @@ -9687,6 +7409,8 @@ }, "node_modules/jsx-ast-utils": { "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9701,6 +7425,8 @@ }, "node_modules/keyv": { "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { @@ -9708,12 +7434,16 @@ } }, "node_modules/language-subtag-registry": { - "version": "0.3.22", + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", "dev": true, "license": "CC0-1.0" }, "node_modules/language-tags": { "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, "license": "MIT", "dependencies": { @@ -9725,6 +7455,8 @@ }, "node_modules/lazystream": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, "license": "MIT", "dependencies": { @@ -9736,11 +7468,15 @@ }, "node_modules/lazystream/node_modules/isarray": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, "license": "MIT" }, "node_modules/lazystream/node_modules/readable-stream": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", "dependencies": { @@ -9755,11 +7491,15 @@ }, "node_modules/lazystream/node_modules/safe-buffer": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "license": "MIT" }, "node_modules/lazystream/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", "dependencies": { @@ -9768,6 +7508,8 @@ }, "node_modules/levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9780,6 +7522,8 @@ }, "node_modules/lilconfig": { "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": { @@ -9791,11 +7535,15 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true, "license": "MIT" }, "node_modules/load-json-file": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, "license": "MIT", "dependencies": { @@ -9810,6 +7558,8 @@ }, "node_modules/load-json-file/node_modules/parse-json": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "license": "MIT", "dependencies": { @@ -9822,6 +7572,8 @@ }, "node_modules/locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -9836,11 +7588,15 @@ }, "node_modules/lodash": { "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true, "license": "MIT" }, "node_modules/lodash-es": { "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", "dev": true, "license": "MIT" }, @@ -9874,6 +7630,8 @@ }, "node_modules/lodash.merge": { "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, "license": "MIT" }, @@ -9886,6 +7644,8 @@ }, "node_modules/loose-envify": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9896,22 +7656,29 @@ } }, "node_modules/lru-cache": { - "version": "10.2.0", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "license": "ISC", - "engines": { - "node": "14 || >=16.14" + "dependencies": { + "yallist": "^3.0.2" } }, "node_modules/make-error": { "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true, "license": "ISC" }, "node_modules/marked": { "version": "15.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", "dev": true, "license": "MIT", + "peer": true, "bin": { "marked": "bin/marked.js" }, @@ -9921,6 +7688,8 @@ }, "node_modules/marked-terminal": { "version": "7.3.0", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-7.3.0.tgz", + "integrity": "sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==", "dev": true, "license": "MIT", "dependencies": { @@ -9939,19 +7708,10 @@ "marked": ">=1 <16" } }, - "node_modules/marked-terminal/node_modules/ansi-regex": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, "node_modules/marked-terminal/node_modules/chalk": { - "version": "5.4.1", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, "license": "MIT", "engines": { @@ -9963,6 +7723,8 @@ }, "node_modules/math-intrinsics": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, "license": "MIT", "engines": { @@ -9984,19 +7746,34 @@ }, "node_modules/merge-stream": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { "node": ">= 8" } }, + "node_modules/meriyah": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/meriyah/-/meriyah-6.1.4.tgz", + "integrity": "sha512-Sz8FzjzI0kN13GK/6MVEsVzMZEPvOhnmmI1lU5+/1cGOiK3QUahntrNNtdVeihrO7t9JpoH75iMNXg6R6uWflQ==", + "license": "ISC", + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/micromatch": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -10025,6 +7802,8 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "license": "MIT", "engines": { @@ -10032,21 +7811,22 @@ } }, "node_modules/minimatch": { - "version": "9.0.5", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "*" } }, "node_modules/minimist": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "license": "MIT", "funding": { @@ -10054,7 +7834,9 @@ } }, "node_modules/minipass": { - "version": "7.0.4", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, "license": "ISC", "engines": { @@ -10062,19 +7844,39 @@ } }, "node_modules/monaco-editor": { - "version": "0.53.0", + "version": "0.54.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.54.0.tgz", + "integrity": "sha512-hx45SEUoLatgWxHKCmlLJH81xBo0uXP4sRkESUpmDQevfi+e7K1VuiSprK6UpQ8u4zOcKNiH0pMvHvlMWA/4cw==", "license": "MIT", + "peer": true, "dependencies": { - "@types/trusted-types": "^1.0.6" + "dompurify": "3.1.7", + "marked": "14.0.0" + } + }, + "node_modules/monaco-editor/node_modules/marked": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz", + "integrity": "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" } }, "node_modules/ms": { - "version": "2.1.2", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, "node_modules/mz": { "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10085,6 +7887,8 @@ }, "node_modules/nanoid": { "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", @@ -10101,11 +7905,15 @@ }, "node_modules/natural-compare": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, "license": "MIT" }, "node_modules/natural-orderby": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-5.0.0.tgz", + "integrity": "sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==", "dev": true, "license": "MIT", "engines": { @@ -10128,6 +7936,8 @@ }, "node_modules/node-emoji": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", + "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", "dev": true, "license": "MIT", "dependencies": { @@ -10141,12 +7951,16 @@ } }, "node_modules/node-releases": { - "version": "2.0.19", + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.26.tgz", + "integrity": "sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==", "dev": true, "license": "MIT" }, "node_modules/nodemon": { "version": "3.1.10", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.10.tgz", + "integrity": "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==", "dev": true, "license": "MIT", "dependencies": { @@ -10172,36 +7986,33 @@ "url": "https://opencollective.com/nodemon" } }, - "node_modules/nodemon/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/nodemon/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/nodemon/node_modules/minimatch": { - "version": "3.1.2", + "node_modules/nodemon/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "*" + "node": ">=10" } }, "node_modules/nodemon/node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "license": "MIT", "dependencies": { @@ -10211,24 +8022,14 @@ "node": ">=4" } }, - "node_modules/nopt": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, "node_modules/normalize-package-data": { - "version": "6.0.0", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^7.0.0", - "is-core-module": "^2.8.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" }, @@ -10236,8 +8037,43 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/normalize-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "license": "MIT", "engines": { @@ -10246,6 +8082,8 @@ }, "node_modules/normalize-range": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true, "license": "MIT", "engines": { @@ -10417,18 +8255,37 @@ "npx": "bin/npx-cli.js" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm/node_modules/@isaacs/balanced-match": { @@ -12653,6 +10510,7 @@ "dev": true, "inBundle": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -12887,6 +10745,8 @@ }, "node_modules/object-assign": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, "license": "MIT", "engines": { @@ -12895,6 +10755,8 @@ }, "node_modules/object-hash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "dev": true, "license": "MIT", "engines": { @@ -12903,6 +10765,8 @@ }, "node_modules/object-inspect": { "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": { @@ -12914,6 +10778,8 @@ }, "node_modules/object-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", "engines": { @@ -12922,6 +10788,8 @@ }, "node_modules/object.assign": { "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "license": "MIT", "dependencies": { @@ -12941,6 +10809,8 @@ }, "node_modules/object.entries": { "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", "dev": true, "license": "MIT", "dependencies": { @@ -12955,6 +10825,8 @@ }, "node_modules/object.fromentries": { "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12972,6 +10844,8 @@ }, "node_modules/object.groupby": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12985,6 +10859,8 @@ }, "node_modules/object.values": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "license": "MIT", "dependencies": { @@ -13002,6 +10878,8 @@ }, "node_modules/onetime": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "license": "MIT", "dependencies": { @@ -13015,16 +10893,18 @@ } }, "node_modules/optionator": { - "version": "0.9.3", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -13032,6 +10912,8 @@ }, "node_modules/own-keys": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "dev": true, "license": "MIT", "dependencies": { @@ -13048,6 +10930,8 @@ }, "node_modules/p-each-series": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", + "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", "dev": true, "license": "MIT", "engines": { @@ -13085,6 +10969,8 @@ }, "node_modules/p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13099,6 +10985,8 @@ }, "node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -13126,6 +11014,8 @@ }, "node_modules/p-reduce": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", "dev": true, "license": "MIT", "engines": { @@ -13134,14 +11024,25 @@ }, "node_modules/p-try": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, "node_modules/parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { @@ -13152,17 +11053,18 @@ } }, "node_modules/parse-json": { - "version": "5.2.0", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", "dev": true, "license": "MIT", "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" + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -13170,6 +11072,8 @@ }, "node_modules/parse-ms": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", "dev": true, "license": "MIT", "engines": { @@ -13181,11 +11085,15 @@ }, "node_modules/parse5": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", "dev": true, "license": "MIT" }, "node_modules/parse5-htmlparser2-tree-adapter": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dev": true, "license": "MIT", "dependencies": { @@ -13194,11 +11102,15 @@ }, "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true, "license": "MIT" }, "node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -13207,6 +11119,8 @@ }, "node_modules/path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", "engines": { @@ -13215,11 +11129,15 @@ }, "node_modules/path-parse": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true, "license": "MIT" }, "node_modules/path-scurry": { - "version": "1.10.2", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -13227,14 +11145,23 @@ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, "node_modules/path-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "license": "MIT", "engines": { @@ -13243,10 +11170,14 @@ }, "node_modules/picocolors": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { @@ -13258,6 +11189,8 @@ }, "node_modules/pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "license": "MIT", "engines": { @@ -13266,6 +11199,8 @@ }, "node_modules/pirates": { "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, "license": "MIT", "engines": { @@ -13274,6 +11209,8 @@ }, "node_modules/pkg-conf": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", "dev": true, "license": "MIT", "dependencies": { @@ -13286,6 +11223,8 @@ }, "node_modules/pkg-conf/node_modules/find-up": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13297,6 +11236,8 @@ }, "node_modules/pkg-conf/node_modules/locate-path": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, "license": "MIT", "dependencies": { @@ -13309,6 +11250,8 @@ }, "node_modules/pkg-conf/node_modules/p-limit": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "license": "MIT", "dependencies": { @@ -13320,6 +11263,8 @@ }, "node_modules/pkg-conf/node_modules/p-locate": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, "license": "MIT", "dependencies": { @@ -13331,6 +11276,8 @@ }, "node_modules/pkg-conf/node_modules/path-exists": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, "license": "MIT", "engines": { @@ -13338,7 +11285,9 @@ } }, "node_modules/possible-typed-array-names": { - "version": "1.0.0", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, "license": "MIT", "engines": { @@ -13347,6 +11296,8 @@ }, "node_modules/postcss": { "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "funding": [ { "type": "opencollective", @@ -13362,6 +11313,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -13373,6 +11325,8 @@ }, "node_modules/postcss-import": { "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", "dev": true, "license": "MIT", "dependencies": { @@ -13389,6 +11343,8 @@ }, "node_modules/postcss-js": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", "dev": true, "funding": [ { @@ -13412,7 +11368,9 @@ } }, "node_modules/postcss-load-config": { - "version": "4.0.2", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", "dev": true, "funding": [ { @@ -13426,27 +11384,36 @@ ], "license": "MIT", "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" + "lilconfig": "^3.1.1" }, "engines": { - "node": ">= 14" + "node": ">= 18" }, "peerDependencies": { + "jiti": ">=1.21.0", "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { + "jiti": { + "optional": true + }, "postcss": { "optional": true }, - "ts-node": { + "tsx": { + "optional": true + }, + "yaml": { "optional": true } } }, "node_modules/postcss-nested": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", "dev": true, "funding": [ { @@ -13471,6 +11438,8 @@ }, "node_modules/postcss-selector-parser": { "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, "license": "MIT", "dependencies": { @@ -13483,11 +11452,15 @@ }, "node_modules/postcss-value-parser": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true, "license": "MIT" }, "node_modules/prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", "engines": { @@ -13496,8 +11469,11 @@ }, "node_modules/prettier": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -13510,6 +11486,8 @@ }, "node_modules/prettier-linter-helpers": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, "license": "MIT", "dependencies": { @@ -13520,7 +11498,9 @@ } }, "node_modules/pretty-ms": { - "version": "9.2.0", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", + "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13535,6 +11515,8 @@ }, "node_modules/process": { "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, "license": "MIT", "engines": { @@ -13543,11 +11525,15 @@ }, "node_modules/process-nextick-args": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true, "license": "MIT" }, "node_modules/prop-types": { "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, "license": "MIT", "dependencies": { @@ -13565,11 +11551,15 @@ }, "node_modules/pstree.remy": { "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", "dev": true, "license": "MIT" }, "node_modules/punycode": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", "engines": { @@ -13578,6 +11568,8 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -13595,11 +11587,6 @@ ], "license": "MIT" }, - "node_modules/queue-tick": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -13627,14 +11614,19 @@ } }, "node_modules/react": { - "version": "19.1.1", + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", + "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/react-colorful": { "version": "5.6.1", + "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", + "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", "license": "MIT", "peerDependencies": { "react": ">=16.8.0", @@ -13642,17 +11634,22 @@ } }, "node_modules/react-dom": { - "version": "19.1.1", + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", + "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", "license": "MIT", + "peer": true, "dependencies": { - "scheduler": "^0.26.0" + "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.1.1" + "react": "^19.2.0" } }, "node_modules/react-icons": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz", + "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==", "license": "MIT", "peerDependencies": { "react": "*" @@ -13660,11 +11657,15 @@ }, "node_modules/react-is": { "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true, "license": "MIT" }, "node_modules/read-cache": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dev": true, "license": "MIT", "dependencies": { @@ -13673,6 +11674,8 @@ }, "node_modules/read-cache/node_modules/pify": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "license": "MIT", "engines": { @@ -13681,6 +11684,8 @@ }, "node_modules/read-package-up": { "version": "11.0.0", + "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz", + "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13697,6 +11702,8 @@ }, "node_modules/read-pkg": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", + "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", "dev": true, "license": "MIT", "dependencies": { @@ -13713,15 +11720,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-pkg/node_modules/parse-json": { - "version": "8.1.0", + "node_modules/read-pkg/node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", "dev": true, "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.22.13", - "index-to-position": "^0.1.2", - "type-fest": "^4.7.1" - }, "engines": { "node": ">=18" }, @@ -13730,7 +11734,9 @@ } }, "node_modules/readable-stream": { - "version": "4.5.2", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "dev": true, "license": "MIT", "dependencies": { @@ -13746,14 +11752,28 @@ }, "node_modules/readdir-glob": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", "dev": true, "license": "Apache-2.0", "dependencies": { "minimatch": "^5.1.0" } }, + "node_modules/readdir-glob/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/readdir-glob/node_modules/minimatch": { "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "license": "ISC", "dependencies": { @@ -13765,6 +11785,8 @@ }, "node_modules/readdirp": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "license": "MIT", "dependencies": { @@ -13776,6 +11798,8 @@ }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, "license": "MIT", "dependencies": { @@ -13797,6 +11821,8 @@ }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, "license": "MIT", "dependencies": { @@ -13829,6 +11855,8 @@ }, "node_modules/require-directory": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "license": "MIT", "engines": { @@ -13836,23 +11864,30 @@ } }, "node_modules/resolve": { - "version": "1.22.8", + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "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, "license": "MIT", "engines": { @@ -13860,7 +11895,9 @@ } }, "node_modules/reusify": { - "version": "1.0.4", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", "engines": { @@ -13869,7 +11906,9 @@ } }, "node_modules/rollup": { - "version": "4.45.0", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz", + "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", "license": "MIT", "dependencies": { "@types/estree": "1.0.8" @@ -13882,44 +11921,35 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.45.0", - "@rollup/rollup-android-arm64": "4.45.0", - "@rollup/rollup-darwin-arm64": "4.45.0", - "@rollup/rollup-darwin-x64": "4.45.0", - "@rollup/rollup-freebsd-arm64": "4.45.0", - "@rollup/rollup-freebsd-x64": "4.45.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.45.0", - "@rollup/rollup-linux-arm-musleabihf": "4.45.0", - "@rollup/rollup-linux-arm64-gnu": "4.45.0", - "@rollup/rollup-linux-arm64-musl": "4.45.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.45.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.45.0", - "@rollup/rollup-linux-riscv64-gnu": "4.45.0", - "@rollup/rollup-linux-riscv64-musl": "4.45.0", - "@rollup/rollup-linux-s390x-gnu": "4.45.0", - "@rollup/rollup-linux-x64-gnu": "4.45.0", - "@rollup/rollup-linux-x64-musl": "4.45.0", - "@rollup/rollup-win32-arm64-msvc": "4.45.0", - "@rollup/rollup-win32-ia32-msvc": "4.45.0", - "@rollup/rollup-win32-x64-msvc": "4.45.0", + "@rollup/rollup-android-arm-eabi": "4.52.5", + "@rollup/rollup-android-arm64": "4.52.5", + "@rollup/rollup-darwin-arm64": "4.52.5", + "@rollup/rollup-darwin-x64": "4.52.5", + "@rollup/rollup-freebsd-arm64": "4.52.5", + "@rollup/rollup-freebsd-x64": "4.52.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.5", + "@rollup/rollup-linux-arm-musleabihf": "4.52.5", + "@rollup/rollup-linux-arm64-gnu": "4.52.5", + "@rollup/rollup-linux-arm64-musl": "4.52.5", + "@rollup/rollup-linux-loong64-gnu": "4.52.5", + "@rollup/rollup-linux-ppc64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-musl": "4.52.5", + "@rollup/rollup-linux-s390x-gnu": "4.52.5", + "@rollup/rollup-linux-x64-gnu": "4.52.5", + "@rollup/rollup-linux-x64-musl": "4.52.5", + "@rollup/rollup-openharmony-arm64": "4.52.5", + "@rollup/rollup-win32-arm64-msvc": "4.52.5", + "@rollup/rollup-win32-ia32-msvc": "4.52.5", + "@rollup/rollup-win32-x64-gnu": "4.52.5", + "@rollup/rollup-win32-x64-msvc": "4.52.5", "fsevents": "~2.3.2" } }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.45.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.0.tgz", - "integrity": "sha512-XZdD3fEEQcwG2KrJDdEQu7NrHonPxxaV0/w2HpvINBdcqebz1aL+0vM2WFJq4DeiAVT6F5SUQas65HY5JDqoPw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, "node_modules/run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -13941,7 +11971,9 @@ } }, "node_modules/rxjs": { - "version": "7.8.1", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -13950,6 +11982,8 @@ }, "node_modules/safe-array-concat": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -13968,6 +12002,8 @@ }, "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": [ { @@ -13987,6 +12023,8 @@ }, "node_modules/safe-push-apply": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, "license": "MIT", "dependencies": { @@ -14002,6 +12040,8 @@ }, "node_modules/safe-regex-test": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "license": "MIT", "dependencies": { @@ -14018,10 +12058,14 @@ }, "node_modules/safe-units": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/safe-units/-/safe-units-2.0.1.tgz", + "integrity": "sha512-vwQl9r9J8O5Aj2RLW2H9qIMszs6MFHuNlD1S86E+AsOFjqZWlD76+sfwMcBT0DIpfTVtgm7Q1huM+iI3o20DYw==", "license": "MIT" }, "node_modules/scheduler": { - "version": "0.26.0", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "license": "MIT" }, "node_modules/semantic-release": { @@ -14030,6 +12074,7 @@ "integrity": "sha512-0OCYLm0AfVilNGukM+w0C4aptITfuW1Mhvmz8LQliLeYbPOTFRCIJzoltWWx/F5zVFe6np9eNatBUHdAvMFeZg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@semantic-release/commit-analyzer": "^13.0.1", "@semantic-release/error": "^4.0.0", @@ -14070,6 +12115,8 @@ }, "node_modules/semantic-release/node_modules/@semantic-release/error": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz", + "integrity": "sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==", "dev": true, "license": "MIT", "engines": { @@ -14078,6 +12125,8 @@ }, "node_modules/semantic-release/node_modules/aggregate-error": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz", + "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", "dev": true, "license": "MIT", "dependencies": { @@ -14091,19 +12140,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, "node_modules/semantic-release/node_modules/ansi-styles": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", @@ -14118,7 +12154,9 @@ } }, "node_modules/semantic-release/node_modules/clean-stack": { - "version": "5.2.0", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.3.0.tgz", + "integrity": "sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==", "dev": true, "license": "MIT", "dependencies": { @@ -14155,6 +12193,8 @@ }, "node_modules/semantic-release/node_modules/escape-string-regexp": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "license": "MIT", "engines": { @@ -14164,69 +12204,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/execa": { - "version": "9.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^4.0.0", - "cross-spawn": "^7.0.3", - "figures": "^6.1.0", - "get-stream": "^9.0.0", - "human-signals": "^7.0.0", - "is-plain-obj": "^4.1.0", - "is-stream": "^4.0.1", - "npm-run-path": "^5.2.0", - "pretty-ms": "^9.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^4.0.0", - "yoctocolors": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/semantic-release/node_modules/execa/node_modules/get-stream": { - "version": "9.0.1", + "node_modules/semantic-release/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", - "dependencies": { - "@sec-ant/readable-stream": "^0.4.1", - "is-stream": "^4.0.1" - }, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/hosted-git-info": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", - "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^11.1.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/semantic-release/node_modules/human-signals": { - "version": "7.0.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, "node_modules/semantic-release/node_modules/indent-string": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, "license": "MIT", "engines": { @@ -14236,54 +12230,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/is-stream": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/lru-cache": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", - "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/semantic-release/node_modules/npm-run-path": { - "version": "5.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/semantic-release/node_modules/p-reduce": { "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semantic-release/node_modules/path-key": { - "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", + "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", "dev": true, "license": "MIT", "engines": { @@ -14295,21 +12245,25 @@ }, "node_modules/semantic-release/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, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/semantic-release/node_modules/signal-exit": { - "version": "4.1.0", + "node_modules/semantic-release/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", - "engines": { - "node": ">=14" + "bin": { + "semver": "bin/semver.js" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=10" } }, "node_modules/semantic-release/node_modules/string-width": { @@ -14330,33 +12284,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/semantic-release/node_modules/strip-final-newline": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/semantic-release/node_modules/wrap-ansi": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", @@ -14404,35 +12331,49 @@ } }, "node_modules/semver": { - "version": "7.6.0", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" } }, "node_modules/semver-diff": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-5.0.0.tgz", + "integrity": "sha512-0HbGtOm+S7T6NGQ/pxJSJipJvc4DK3FcRVMRkhsIwJDJ4Jcz5DQC1cPPzB5GhzyHjwttW878HaWQq46CkL3cqg==", + "deprecated": "Deprecated as the semver package now supports this built-in.", "dev": true, "license": "MIT", "dependencies": { "semver": "^7.3.5" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/semver-regex": { "version": "4.0.5", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", + "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", "dev": true, "license": "MIT", "engines": { @@ -14442,19 +12383,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/set-function-length": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "license": "MIT", "dependencies": { @@ -14471,6 +12403,8 @@ }, "node_modules/set-function-name": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14485,6 +12419,8 @@ }, "node_modules/set-proto": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "dev": true, "license": "MIT", "dependencies": { @@ -14498,6 +12434,8 @@ }, "node_modules/shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "license": "MIT", "dependencies": { @@ -14509,6 +12447,8 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "license": "MIT", "engines": { @@ -14516,15 +12456,22 @@ } }, "node_modules/shell-quote": { - "version": "1.8.1", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/side-channel": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, "license": "MIT", "dependencies": { @@ -14543,6 +12490,8 @@ }, "node_modules/side-channel-list": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, "license": "MIT", "dependencies": { @@ -14558,6 +12507,8 @@ }, "node_modules/side-channel-map": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, "license": "MIT", "dependencies": { @@ -14575,6 +12526,8 @@ }, "node_modules/side-channel-weakmap": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, "license": "MIT", "dependencies": { @@ -14592,12 +12545,22 @@ } }, "node_modules/signal-exit": { - "version": "3.0.7", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/signale": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", + "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", "dev": true, "license": "MIT", "dependencies": { @@ -14611,6 +12574,8 @@ }, "node_modules/signale/node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "license": "MIT", "dependencies": { @@ -14622,6 +12587,8 @@ }, "node_modules/signale/node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14635,6 +12602,8 @@ }, "node_modules/signale/node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "license": "MIT", "dependencies": { @@ -14643,11 +12612,15 @@ }, "node_modules/signale/node_modules/color-name": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true, "license": "MIT" }, "node_modules/signale/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", "engines": { @@ -14656,6 +12629,8 @@ }, "node_modules/signale/node_modules/figures": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", "dev": true, "license": "MIT", "dependencies": { @@ -14667,6 +12642,8 @@ }, "node_modules/signale/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "license": "MIT", "engines": { @@ -14675,6 +12652,8 @@ }, "node_modules/signale/node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "license": "MIT", "dependencies": { @@ -14686,6 +12665,8 @@ }, "node_modules/simple-update-notifier": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", "dev": true, "license": "MIT", "dependencies": { @@ -14695,8 +12676,23 @@ "node": ">=10" } }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/skin-tone": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", + "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", "dev": true, "license": "MIT", "dependencies": { @@ -14708,7 +12704,9 @@ }, "node_modules/source-map": { "version": "0.6.1", - "devOptional": true, + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -14716,28 +12714,24 @@ }, "node_modules/source-map-js": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "node_modules/spawn-error-forwarder": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", + "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==", "dev": true, "license": "MIT" }, "node_modules/spdx-correct": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -14747,11 +12741,15 @@ }, "node_modules/spdx-exceptions": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -14760,16 +12758,32 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.17", + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", "dev": true, "license": "CC0-1.0" }, + "node_modules/split2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", + "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", + "dev": true, + "license": "ISC", + "dependencies": { + "through2": "~2.0.0" + } + }, "node_modules/state-local": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/state-local/-/state-local-1.0.7.tgz", + "integrity": "sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==", "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": { @@ -14782,6 +12796,8 @@ }, "node_modules/stream-combiner2": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", "dev": true, "license": "MIT", "dependencies": { @@ -14791,11 +12807,15 @@ }, "node_modules/stream-combiner2/node_modules/isarray": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, "license": "MIT" }, "node_modules/stream-combiner2/node_modules/readable-stream": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", "dependencies": { @@ -14810,11 +12830,15 @@ }, "node_modules/stream-combiner2/node_modules/safe-buffer": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "license": "MIT" }, "node_modules/stream-combiner2/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", "dependencies": { @@ -14822,19 +12846,21 @@ } }, "node_modules/streamx": { - "version": "2.16.1", + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", + "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", "dev": true, "license": "MIT", "dependencies": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" } }, "node_modules/string_decoder": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "license": "MIT", "dependencies": { @@ -14843,6 +12869,8 @@ }, "node_modules/string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { @@ -14860,6 +12888,8 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -14871,38 +12901,40 @@ "node": ">=8" } }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, - "node_modules/string-width/node_modules/ansi-regex": { + "node_modules/string-width-cjs/node_modules/strip-ansi": { "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=8" } }, "node_modules/string.prototype.includes": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", "dev": true, "license": "MIT", "dependencies": { @@ -14916,6 +12948,8 @@ }, "node_modules/string.prototype.matchall": { "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "dev": true, "license": "MIT", "dependencies": { @@ -14942,6 +12976,8 @@ }, "node_modules/string.prototype.repeat": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", "dev": true, "license": "MIT", "dependencies": { @@ -14951,6 +12987,8 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "license": "MIT", "dependencies": { @@ -14971,6 +13009,8 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14988,6 +13028,8 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", "dependencies": { @@ -15004,6 +13046,8 @@ }, "node_modules/stringify-object": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-4.0.1.tgz", + "integrity": "sha512-qpV1FBpN0R1gDAhCHIU71SYGZb35Te+gOQbQ6lYRmVJT7pF1NB8mkHeEJvyYNiHXw+fB4KIbeIjQl1rgiIijiA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -15017,6 +13061,8 @@ }, "node_modules/stringify-object/node_modules/is-obj": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-3.0.0.tgz", + "integrity": "sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==", "dev": true, "license": "MIT", "engines": { @@ -15027,19 +13073,26 @@ } }, "node_modules/strip-ansi": { - "version": "6.0.1", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { @@ -15049,8 +13102,20 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { @@ -15058,15 +13123,22 @@ } }, "node_modules/strip-final-newline": { - "version": "2.0.0", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/strip-json-comments": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", "engines": { @@ -15078,6 +13150,8 @@ }, "node_modules/sucrase": { "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", "dev": true, "license": "MIT", "dependencies": { @@ -15099,6 +13173,8 @@ }, "node_modules/super-regex": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-1.0.0.tgz", + "integrity": "sha512-CY8u7DtbvucKuquCmOFEKhr9Besln7n9uN8eFbwcoGYWXOMW07u2o8njWaiXt11ylS3qoGF55pILjRmPlbodyg==", "dev": true, "license": "MIT", "dependencies": { @@ -15114,6 +13190,8 @@ }, "node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -15128,6 +13206,8 @@ }, "node_modules/supports-hyperlinks": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", + "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", "dev": true, "license": "MIT", "dependencies": { @@ -15143,6 +13223,8 @@ }, "node_modules/supports-hyperlinks/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, "license": "MIT", "dependencies": { @@ -15154,6 +13236,8 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "license": "MIT", "engines": { @@ -15164,11 +13248,13 @@ } }, "node_modules/synckit": { - "version": "0.11.8", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", + "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", "dev": true, "license": "MIT", "dependencies": { - "@pkgr/core": "^0.2.4" + "@pkgr/core": "^0.2.9" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -15179,6 +13265,8 @@ }, "node_modules/tailwind-merge": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.3.1.tgz", + "integrity": "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==", "dev": true, "license": "MIT", "funding": { @@ -15187,9 +13275,12 @@ } }, "node_modules/tailwindcss": { - "version": "3.4.17", + "version": "3.4.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.18.tgz", + "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -15199,7 +13290,7 @@ "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.21.6", + "jiti": "^1.21.7", "lilconfig": "^3.1.3", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", @@ -15208,7 +13299,7 @@ "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.2", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", "postcss-nested": "^6.2.0", "postcss-selector-parser": "^6.1.2", "resolve": "^1.22.8", @@ -15224,24 +13315,32 @@ }, "node_modules/tailwindcss-multi": { "version": "0.4.6", + "resolved": "https://registry.npmjs.org/tailwindcss-multi/-/tailwindcss-multi-0.4.6.tgz", + "integrity": "sha512-Bn9yLrMkeYFrJjRYuuTfqT9ibm6U2qnTwlIKYchWyGX3qgL+1+NN4JgiHJG1qrR4QQeU28eCl8sMSBobdzijvQ==", "license": "MIT", "dependencies": { "@types/node": "^20.4.1" } }, "node_modules/tailwindcss-multi/node_modules/@types/node": { - "version": "20.14.14", + "version": "20.19.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.23.tgz", + "integrity": "sha512-yIdlVVVHXpmqRhtyovZAcSy0MiPcYWGkoO4CGe/+jpP0hmNuihm4XhHbADpK++MsiLHP5MVlv+bcgdF99kSiFQ==", "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.21.0" } }, "node_modules/tailwindcss-multi/node_modules/undici-types": { - "version": "5.26.5", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "license": "MIT" }, "node_modules/tar-stream": { "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15305,32 +13404,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/terser": { - "version": "5.30.4", - "license": "BSD-2-Clause", - "optional": true, - "peer": true, + "node_modules/text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" + "b4a": "^1.6.4" } }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/thenify": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dev": true, "license": "MIT", "dependencies": { @@ -15339,6 +13426,8 @@ }, "node_modules/thenify-all": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "dev": true, "license": "MIT", "dependencies": { @@ -15350,6 +13439,8 @@ }, "node_modules/through2": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15359,11 +13450,15 @@ }, "node_modules/through2/node_modules/isarray": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, "license": "MIT" }, "node_modules/through2/node_modules/readable-stream": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", "dependencies": { @@ -15378,11 +13473,15 @@ }, "node_modules/through2/node_modules/safe-buffer": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "license": "MIT" }, "node_modules/through2/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", "dependencies": { @@ -15391,6 +13490,8 @@ }, "node_modules/time-span": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz", + "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", "dev": true, "license": "MIT", "dependencies": { @@ -15405,6 +13506,8 @@ }, "node_modules/tinyglobby": { "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "license": "MIT", "dependencies": { "fdir": "^6.5.0", @@ -15419,6 +13522,8 @@ }, "node_modules/tinyglobby/node_modules/fdir": { "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "license": "MIT", "engines": { "node": ">=12.0.0" @@ -15434,7 +13539,10 @@ }, "node_modules/tinyglobby/node_modules/picomatch": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -15444,6 +13552,8 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15454,25 +13564,21 @@ } }, "node_modules/touch": { - "version": "3.1.0", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", "dev": true, "license": "ISC", - "dependencies": { - "nopt": "~1.0.10" - }, "bin": { "nodetouch": "bin/nodetouch.js" } }, "node_modules/traverse": { - "version": "0.6.9", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.8.tgz", + "integrity": "sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==", "dev": true, "license": "MIT", - "dependencies": { - "gopd": "^1.0.1", - "typedarray.prototype.slice": "^1.0.3", - "which-typed-array": "^1.1.15" - }, "engines": { "node": ">= 0.4" }, @@ -15482,6 +13588,8 @@ }, "node_modules/tree-kill": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true, "license": "MIT", "bin": { @@ -15490,6 +13598,8 @@ }, "node_modules/ts-api-utils": { "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": { @@ -15501,11 +13611,15 @@ }, "node_modules/ts-interface-checker": { "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "dev": true, "license": "Apache-2.0" }, "node_modules/ts-json-as-const": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/ts-json-as-const/-/ts-json-as-const-1.0.7.tgz", + "integrity": "sha512-UMM24g4uBevqBuEqeMUNm2yBEd6VrpJt2hhGWSpmr3nGuhQYwYcLpmxUjsAh5qxJbafF+ICrHvOvHn16zh9Ojg==", "dev": true, "license": "ISC", "dependencies": { @@ -15523,6 +13637,8 @@ }, "node_modules/ts-node": { "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15565,11 +13681,15 @@ }, "node_modules/ts-node/node_modules/arg": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true, "license": "MIT" }, "node_modules/tsconfig-paths": { "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "license": "MIT", "dependencies": { @@ -15581,6 +13701,8 @@ }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "license": "MIT", "dependencies": { @@ -15592,6 +13714,8 @@ }, "node_modules/tslib": { "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, "license": "0BSD" }, @@ -15607,6 +13731,8 @@ }, "node_modules/type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { @@ -15617,7 +13743,9 @@ } }, "node_modules/type-fest": { - "version": "4.34.1", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -15629,6 +13757,8 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", "dependencies": { @@ -15642,6 +13772,8 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "license": "MIT", "dependencies": { @@ -15660,6 +13792,8 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15680,6 +13814,8 @@ }, "node_modules/typed-array-length": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "license": "MIT", "dependencies": { @@ -15697,29 +13833,13 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typedarray.prototype.slice": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-errors": "^1.3.0", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-offset": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/typescript": { - "version": "5.9.2", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -15729,16 +13849,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.46.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.46.1.tgz", - "integrity": "sha512-VHgijW803JafdSsDO8I761r3SHrgk4T00IdyQ+/UsthtgPRsBWQLqoSxOolxTpxRKi1kGXK0bSz4CoAc9ObqJA==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.46.2.tgz", + "integrity": "sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.46.1", - "@typescript-eslint/parser": "8.46.1", - "@typescript-eslint/typescript-estree": "8.46.1", - "@typescript-eslint/utils": "8.46.1" + "@typescript-eslint/eslint-plugin": "8.46.2", + "@typescript-eslint/parser": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2", + "@typescript-eslint/utils": "8.46.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -15768,6 +13888,8 @@ }, "node_modules/unbox-primitive": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { @@ -15785,6 +13907,8 @@ }, "node_modules/undefsafe": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true, "license": "MIT" }, @@ -15802,12 +13926,16 @@ } }, "node_modules/undici-types": { - "version": "7.12.0", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "devOptional": true, "license": "MIT" }, "node_modules/unicode-emoji-modifier-base": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", + "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", "dev": true, "license": "MIT", "engines": { @@ -15815,7 +13943,9 @@ } }, "node_modules/unicorn-magic": { - "version": "0.1.0", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", "dev": true, "license": "MIT", "engines": { @@ -15850,6 +13980,8 @@ }, "node_modules/universalify": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", "engines": { @@ -15857,7 +13989,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.3", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", "dev": true, "funding": [ { @@ -15887,6 +14021,8 @@ }, "node_modules/uri-js": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -15905,16 +14041,22 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true, "license": "MIT" }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true, "license": "MIT" }, "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", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -15923,8 +14065,11 @@ } }, "node_modules/vite": { - "version": "7.1.9", + "version": "7.1.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.12.tgz", + "integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==", "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -15996,6 +14141,8 @@ }, "node_modules/vite-plugin-css-injected-by-js": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/vite-plugin-css-injected-by-js/-/vite-plugin-css-injected-by-js-3.5.2.tgz", + "integrity": "sha512-2MpU/Y+SCZyWUB6ua3HbJCrgnF0KACAsmzOQt1UvRVJCGF6S8xdA3ZUhWcWdM9ivG4I5az8PnQmwwrkC2CAQrQ==", "license": "MIT", "peerDependencies": { "vite": ">2.0.0-0" @@ -16003,6 +14150,8 @@ }, "node_modules/vite/node_modules/fdir": { "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "license": "MIT", "engines": { "node": ">=12.0.0" @@ -16018,7 +14167,10 @@ }, "node_modules/vite/node_modules/picomatch": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -16028,10 +14180,14 @@ }, "node_modules/webextension-polyfill": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.12.0.tgz", + "integrity": "sha512-97TBmpoWJEE+3nFBQ4VocyCdLKfw54rFaJ6EVQYLBCXqCIpLSZkwGgASpv4oPt9gdKCJ80RJlcmNzNn008Ag6Q==", "license": "MPL-2.0" }, "node_modules/which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "license": "ISC", "dependencies": { @@ -16046,6 +14202,8 @@ }, "node_modules/which-boxed-primitive": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "license": "MIT", "dependencies": { @@ -16064,6 +14222,8 @@ }, "node_modules/which-builtin-type": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -16090,6 +14250,8 @@ }, "node_modules/which-collection": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "license": "MIT", "dependencies": { @@ -16107,6 +14269,8 @@ }, "node_modules/which-typed-array": { "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": { @@ -16125,6 +14289,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -16134,6 +14308,8 @@ }, "node_modules/wrap-ansi": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16151,6 +14327,8 @@ "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { @@ -16165,13 +14343,27 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -16183,19 +14375,23 @@ "node": ">=8" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "ansi-regex": "^5.0.1" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "engines": { + "node": ">=8" } }, "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { @@ -16205,22 +14401,10 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/xtend": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, "license": "MIT", "engines": { @@ -16229,6 +14413,8 @@ }, "node_modules/y18n": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "license": "ISC", "engines": { @@ -16236,23 +14422,16 @@ } }, "node_modules/yallist": { - "version": "4.0.0", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "license": "ISC" }, - "node_modules/yaml": { - "version": "2.7.1", - "devOptional": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/yargs": { "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "license": "MIT", "dependencies": { @@ -16270,19 +14449,35 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "license": "ISC", "engines": { "node": ">=12" } }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/yargs/node_modules/emoji-regex": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/yargs/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -16294,8 +14489,23 @@ "node": ">=8" } }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/yn": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, "license": "MIT", "engines": { @@ -16304,6 +14514,8 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { @@ -16314,7 +14526,9 @@ } }, "node_modules/yoctocolors": { - "version": "2.1.1", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", "dev": true, "license": "MIT", "engines": { @@ -16325,11 +14539,22 @@ } }, "node_modules/youtubei.js": { - "resolved": "../YouTube.js", - "link": true + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/youtubei.js/-/youtubei.js-16.0.1.tgz", + "integrity": "sha512-3802bCAGkBc2/G5WUTc0l/bO5mPYJbQAHL04d9hE9PnrDHoBUT8MN721Yqt4RCNncAXdHcfee9VdJy3Fhq1r5g==", + "funding": [ + "https://github.com/sponsors/LuanRT" + ], + "license": "MIT", + "dependencies": { + "@bufbuild/protobuf": "^2.0.0", + "meriyah": "^6.1.4" + } }, "node_modules/zip-stream": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", + "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==", "dev": true, "license": "MIT", "dependencies": { @@ -16347,6 +14572,7 @@ "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -16363,6 +14589,8 @@ }, "node_modules/zod-validation-error": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index a1e674a3c..93534618d 100644 --- a/package.json +++ b/package.json @@ -20,72 +20,72 @@ }, "type": "module", "optionalDependencies": { - "@rollup/rollup-linux-x64-gnu": "^4.14.3" + "@rollup/rollup-linux-x64-gnu": "^4.52.5" }, "dependencies": { "@formkit/auto-animate": "^0.9.0", - "@monaco-editor/react": "^4.6.0", - "@tanstack/react-query": "^5.18.0", - "dotenv": "^17.2.1", - "globals": "^16.2.0", - "i18next": "^25.3.4", - "monaco-editor": "^0.53.0", - "react": "^19.1.1", + "@monaco-editor/react": "^4.7.0", + "@tanstack/react-query": "^5.90.5", + "dotenv": "^17.2.3", + "globals": "^16.4.0", + "i18next": "^25.6.0", + "monaco-editor": "^0.54.0", + "react": "^19.2.0", "react-colorful": "^5.6.1", - "react-dom": "^19.1.1", - "react-icons": "^5.0.1", + "react-dom": "^19.2.0", + "react-icons": "^5.5.0", "safe-units": "^2.0.1", - "tailwindcss-multi": "^0.4.0", - "vite-plugin-css-injected-by-js": "^3.3.0", + "tailwindcss-multi": "^0.4.6", + "vite-plugin-css-injected-by-js": "^3.5.2", "webextension-polyfill": "^0.12.0", "youtubei.js": "^16.0.1" }, "devDependencies": { - "@eslint/compat": "^1.2.0", - "@eslint/js": "^9.12.0", + "@eslint/compat": "^1.4.0", + "@eslint/js": "^9.38.0", "@semantic-release/changelog": "^6.0.3", - "@semantic-release/exec": "^7.0.3", + "@semantic-release/exec": "^7.1.0", "@semantic-release/git": "^10.0.1", "@thedutchcoder/postcss-rem-to-px": "^0.0.2", - "@total-typescript/ts-reset": "^0.6.0", - "@types/archiver": "^6.0.1", - "@types/chrome": "^0.1.4", - "@types/node": "^24.0.13", - "@types/react": "^19.0.1", - "@types/react-dom": "^19.0.2", - "@types/webextension-polyfill": "^0.12.1", - "@types/youtube-player": "^5.5.10", - "@vitejs/plugin-react-swc": "^4.0.0", + "@total-typescript/ts-reset": "^0.6.1", + "@types/archiver": "^6.0.3", + "@types/chrome": "^0.1.24", + "@types/node": "^24.9.1", + "@types/react": "^19.2.2", + "@types/react-dom": "^19.2.2", + "@types/webextension-polyfill": "^0.12.4", + "@types/youtube-player": "^5.5.11", + "@vitejs/plugin-react-swc": "^4.1.0", "archiver": "^7.0.1", - "autoprefixer": "^10.4.16", - "clsx": "^2.0.0", - "concurrently": "^9.1.0", - "eslint": "^9.12.0", - "eslint-config-prettier": "^10.1.5", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jsx-a11y": "^6.8.0", - "eslint-plugin-no-secrets": "^2.1.1", - "eslint-plugin-perfectionist": "^4.1.2", - "eslint-plugin-prettier": "^5.2.1", - "eslint-plugin-promise": "^7.1.0", - "eslint-plugin-react": "^7.33.2", + "autoprefixer": "^10.4.21", + "clsx": "^2.1.1", + "concurrently": "^9.2.1", + "eslint": "^9.38.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsx-a11y": "^6.10.2", + "eslint-plugin-no-secrets": "^2.2.1", + "eslint-plugin-perfectionist": "^4.15.1", + "eslint-plugin-prettier": "^5.5.4", + "eslint-plugin-promise": "^7.2.1", + "eslint-plugin-react": "^7.37.5", "eslint-plugin-react-hooks": "^7.0.0", - "eslint-plugin-tailwindcss": "^3.13.0", - "fs-extra": "^11.1.1", + "eslint-plugin-tailwindcss": "^3.18.2", + "fs-extra": "^11.3.2", "get-installed-browsers": "^0.1.7", - "nodemon": "^3.0.1", - "npm": "^11.3.0", - "postcss": "^8.4.31", - "prettier": "^3.0.3", + "nodemon": "^3.1.10", + "npm": "^11.6.2", + "postcss": "^8.5.6", + "prettier": "^3.6.2", "semantic-release": "^25.0.1", - "tailwind-merge": "^3.2.0", - "tailwindcss": "^3.4.17", + "tailwind-merge": "^3.3.1", + "tailwindcss": "^4.1.16", "ts-json-as-const": "^1.0.7", - "ts-node": "^10.9.1", + "ts-node": "^10.9.2", "typescript": "5.9", - "typescript-eslint": "^8.8.1", - "vite": "^7.0.4", - "zod": "^4.0.17", + "typescript-eslint": "^8.46.2", + "vite": "^7.1.12", + "zod": "^4.1.12", "zod-error": "^2.0.0" } } From 5f6ceca1e0265ba4d78f251a11cda4d2216ec24c Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Thu, 23 Oct 2025 16:36:09 -0400 Subject: [PATCH 67/70] chore: revert tailwindcss version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 93534618d..d272de352 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "prettier": "^3.6.2", "semantic-release": "^25.0.1", "tailwind-merge": "^3.3.1", - "tailwindcss": "^4.1.16", + "tailwindcss": "^3.4.18", "ts-json-as-const": "^1.0.7", "ts-node": "^10.9.2", "typescript": "5.9", From c0f8a2d3af2ecaeb8516a75597520daa4a29551c Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Thu, 23 Oct 2025 16:49:23 -0400 Subject: [PATCH 68/70] chore: format --- .../playlistManagementButtons/index.css | 32 +++++++++---------- src/features/saveToWatchLaterButton/index.css | 14 ++++---- src/pages/options/index.css | 4 +-- src/pages/popup/index.css | 4 +-- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/features/playlistManagementButtons/index.css b/src/features/playlistManagementButtons/index.css index 56b809294..e97f837fc 100644 --- a/src/features/playlistManagementButtons/index.css +++ b/src/features/playlistManagementButtons/index.css @@ -1,29 +1,29 @@ .yte-remove-button, .yte-reset-button { - background: none; - border-radius: 50%; - border: none; - cursor: pointer; - margin-right: 18px; - padding: 12px; - vertical-align: top; + background: none; + border-radius: 50%; + border: none; + cursor: pointer; + margin-right: 18px; + padding: 12px; + vertical-align: top; } .yte-remove-button:hover, .yte-reset-button:hover { - background: black; - transition: background 0.2s; + background: black; + transition: background 0.2s; } @keyframes yte-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } } .yte-spinning { - animation: yte-spin 2s linear infinite; + animation: yte-spin 2s linear infinite; } diff --git a/src/features/saveToWatchLaterButton/index.css b/src/features/saveToWatchLaterButton/index.css index 0c1d2d534..5378b0586 100644 --- a/src/features/saveToWatchLaterButton/index.css +++ b/src/features/saveToWatchLaterButton/index.css @@ -1,12 +1,12 @@ @keyframes yte-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } } .yte-spinning { - animation: yte-spin 2s linear infinite; + animation: yte-spin 2s linear infinite; } diff --git a/src/pages/options/index.css b/src/pages/options/index.css index 6640fa2b6..e1c8dc7f5 100644 --- a/src/pages/options/index.css +++ b/src/pages/options/index.css @@ -1,6 +1,6 @@ html > body { - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", - sans-serif; + font-family: + -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; overflow-y: scroll; diff --git a/src/pages/popup/index.css b/src/pages/popup/index.css index 3ad7d57b5..8b5b05db2 100644 --- a/src/pages/popup/index.css +++ b/src/pages/popup/index.css @@ -1,8 +1,8 @@ body { width: fit-content; margin: 12px; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", - sans-serif; + font-family: + -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; min-width: 400px; From 52f614dda7eb1ba361b95f8223756cd897b6798b Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Thu, 23 Oct 2025 16:51:09 -0400 Subject: [PATCH 69/70] translations: update --- public/locales/ca-ES.json | 28 ++++-- public/locales/cs-CZ.json | 28 ++++-- public/locales/de-DE.json | 28 ++++-- public/locales/en-GB.json | 18 +++- public/locales/es-ES.json | 28 ++++-- public/locales/fa-IR.json | 28 ++++-- public/locales/fr-FR.json | 28 ++++-- public/locales/he-IL.json | 28 ++++-- public/locales/hi-IN.json | 28 ++++-- public/locales/it-IT.json | 34 ++++--- public/locales/ja-JP.json | 28 ++++-- public/locales/ko-KR.json | 28 ++++-- public/locales/nl-NL.json | 28 ++++-- public/locales/pl-PL.json | 190 ++++++++++++++++++++------------------ public/locales/pt-BR.json | 28 ++++-- public/locales/ru-RU.json | 28 ++++-- public/locales/sv-SE.json | 28 ++++-- public/locales/tr-TR.json | 34 ++++--- public/locales/uk-UA.json | 28 ++++-- public/locales/vi-VN.json | 28 ++++-- public/locales/zh-CN.json | 26 ++++-- public/locales/zh-TW.json | 28 ++++-- 22 files changed, 521 insertions(+), 257 deletions(-) diff --git a/public/locales/ca-ES.json b/public/locales/ca-ES.json index 18c3439bd..ca875782a 100644 --- a/public/locales/ca-ES.json +++ b/public/locales/ca-ES.json @@ -293,6 +293,10 @@ "label": "Automatically enable closed captions", "title": "Automatically enables closed captions when you load a video" }, + "automaticallyMaximizePlayer": { + "label": "Automatically maximize player", + "title": "Automatically maximizes the player when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" @@ -302,8 +306,12 @@ "title": "Always default to the original audio track" }, "enablePlaylistManagementButtons": { - "label": "Habilita botons de gestió de llistes", - "title": "Afegeix botons als elements de la llista per eliminar vídeos o marcar-los com a ignorats" + "label": "Enable playlist management buttons", + "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, + "enableSaveToWatchLaterButton": { + "label": "Enable save to Watch Later button", + "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", @@ -493,12 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "Eliminar vídeo", - "removingVideo": "Eliminant vídeo…", - "failedToRemoveVideo": "No s'ha pogut eliminar el vídeo", - "markAsUnwatched": "Marca com a no vist", - "markingAsUnwatched": "Marcant com a no vist…", - "failedToMarkAsUnwatched": "No s'ha pogut marcar com a no vist" + "failedToMarkAsUnwatched": "Failed to mark video as unwatched", + "failedToRemoveVideo": "Failed to remove video", + "markAsUnwatched": "Mark as unwatched", + "markingAsUnwatched": "Marking as unwatched…", + "removeVideo": "Remove video", + "removingVideo": "Removing video…" + }, + "saveToWatchLaterButton": { + "error": "Failed to add video to Watch Later", + "save": "Save to Watch Later" }, "screenshotButton": { "enable": { diff --git a/public/locales/cs-CZ.json b/public/locales/cs-CZ.json index 7b18620bb..423d85f79 100644 --- a/public/locales/cs-CZ.json +++ b/public/locales/cs-CZ.json @@ -293,6 +293,10 @@ "label": "Automatically enable closed captions", "title": "Automatically enables closed captions when you load a video" }, + "automaticallyMaximizePlayer": { + "label": "Automatically maximize player", + "title": "Automatically maximizes the player when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" @@ -302,8 +306,12 @@ "title": "Always default to the original audio track" }, "enablePlaylistManagementButtons": { - "label": "Povolit tlačítka správy playlistu", - "title": "Přidá tlačítka k položkám playlistu pro odebrání videí nebo jejich označení jako nezhlédnutá" + "label": "Enable playlist management buttons", + "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, + "enableSaveToWatchLaterButton": { + "label": "Enable save to Watch Later button", + "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", @@ -493,12 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "Odstranit video", - "removingVideo": "Odstraňování videa…", - "failedToRemoveVideo": "Nepodařilo se odstranit video", - "markAsUnwatched": "Označit jako neshlédnuté", - "markingAsUnwatched": "Označování jako neshlédnuté…", - "failedToMarkAsUnwatched": "Nepodařilo se označit jako neshlédnuté" + "failedToMarkAsUnwatched": "Failed to mark video as unwatched", + "failedToRemoveVideo": "Failed to remove video", + "markAsUnwatched": "Mark as unwatched", + "markingAsUnwatched": "Marking as unwatched…", + "removeVideo": "Remove video", + "removingVideo": "Removing video…" + }, + "saveToWatchLaterButton": { + "error": "Failed to add video to Watch Later", + "save": "Save to Watch Later" }, "screenshotButton": { "enable": { diff --git a/public/locales/de-DE.json b/public/locales/de-DE.json index 0a7419d34..15e4631c9 100644 --- a/public/locales/de-DE.json +++ b/public/locales/de-DE.json @@ -293,6 +293,10 @@ "label": "Automatically enable closed captions", "title": "Automatically enables closed captions when you load a video" }, + "automaticallyMaximizePlayer": { + "label": "Automatically maximize player", + "title": "Automatically maximizes the player when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" @@ -302,8 +306,12 @@ "title": "Always default to the original audio track" }, "enablePlaylistManagementButtons": { - "label": "Playlist-Verwaltungsschaltflächen aktivieren", - "title": "Fügt Schaltflächen zu Playlist-Elementen hinzu, um Videos aus der Playlist zu entfernen oder als ungesehen zu markieren" + "label": "Enable playlist management buttons", + "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, + "enableSaveToWatchLaterButton": { + "label": "Enable save to Watch Later button", + "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", @@ -493,12 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "Video entfernen", - "removingVideo": "Video wird entfernt…", - "failedToRemoveVideo": "Video konnte nicht entfernt werden", - "markAsUnwatched": "Als ungesehen markieren", - "markingAsUnwatched": "Wird als ungesehen markiert…", - "failedToMarkAsUnwatched": "Konnte nicht als ungesehen markiert werden" + "failedToMarkAsUnwatched": "Failed to mark video as unwatched", + "failedToRemoveVideo": "Failed to remove video", + "markAsUnwatched": "Mark as unwatched", + "markingAsUnwatched": "Marking as unwatched…", + "removeVideo": "Remove video", + "removingVideo": "Removing video…" + }, + "saveToWatchLaterButton": { + "error": "Failed to add video to Watch Later", + "save": "Save to Watch Later" }, "screenshotButton": { "enable": { diff --git a/public/locales/en-GB.json b/public/locales/en-GB.json index 7b6951b47..fa34371c7 100644 --- a/public/locales/en-GB.json +++ b/public/locales/en-GB.json @@ -293,6 +293,10 @@ "label": "Automatically enable closed captions", "title": "Automatically enables closed captions when you load a video" }, + "automaticallyMaximizePlayer": { + "label": "Automatically maximize player", + "title": "Automatically maximizes the player when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" @@ -305,6 +309,10 @@ "label": "Enable playlist management buttons", "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" }, + "enableSaveToWatchLaterButton": { + "label": "Enable save to Watch Later button", + "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" + }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", "title": "Hides the artificial intelligence summary below videos" @@ -493,12 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "Remove video", - "removingVideo": "Removing video…", + "failedToMarkAsUnwatched": "Failed to mark video as unwatched", "failedToRemoveVideo": "Failed to remove video", "markAsUnwatched": "Mark as unwatched", "markingAsUnwatched": "Marking as unwatched…", - "failedToMarkAsUnwatched": "Failed to mark as unwatched" + "removeVideo": "Remove video", + "removingVideo": "Removing video…" + }, + "saveToWatchLaterButton": { + "error": "Failed to add video to Watch Later", + "save": "Save to Watch Later" }, "screenshotButton": { "enable": { diff --git a/public/locales/es-ES.json b/public/locales/es-ES.json index 80222a181..3c69fdf31 100644 --- a/public/locales/es-ES.json +++ b/public/locales/es-ES.json @@ -293,6 +293,10 @@ "label": "Automatically enable closed captions", "title": "Automatically enables closed captions when you load a video" }, + "automaticallyMaximizePlayer": { + "label": "Automatically maximize player", + "title": "Automatically maximizes the player when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" @@ -302,8 +306,12 @@ "title": "Always default to the original audio track" }, "enablePlaylistManagementButtons": { - "label": "Habilitar botones de gestión de la lista de reproducción", - "title": "Añade botones a los elementos de la lista de reproducción para eliminar vídeos de la lista o marcarlos como no vistos" + "label": "Enable playlist management buttons", + "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, + "enableSaveToWatchLaterButton": { + "label": "Enable save to Watch Later button", + "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", @@ -493,12 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "Eliminar vídeo", - "removingVideo": "Eliminando vídeo…", - "failedToRemoveVideo": "No se pudo eliminar el vídeo", - "markAsUnwatched": "Marcar como no visto", - "markingAsUnwatched": "Marcando como no visto…", - "failedToMarkAsUnwatched": "No se pudo marcar como no visto" + "failedToMarkAsUnwatched": "Failed to mark video as unwatched", + "failedToRemoveVideo": "Failed to remove video", + "markAsUnwatched": "Mark as unwatched", + "markingAsUnwatched": "Marking as unwatched…", + "removeVideo": "Remove video", + "removingVideo": "Removing video…" + }, + "saveToWatchLaterButton": { + "error": "Failed to add video to Watch Later", + "save": "Save to Watch Later" }, "screenshotButton": { "enable": { diff --git a/public/locales/fa-IR.json b/public/locales/fa-IR.json index 7a6fe3424..bc96a6fdf 100644 --- a/public/locales/fa-IR.json +++ b/public/locales/fa-IR.json @@ -293,6 +293,10 @@ "label": "Automatically enable closed captions", "title": "Automatically enables closed captions when you load a video" }, + "automaticallyMaximizePlayer": { + "label": "Automatically maximize player", + "title": "Automatically maximizes the player when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" @@ -302,8 +306,12 @@ "title": "Always default to the original audio track" }, "enablePlaylistManagementButtons": { - "label": "فعال کردن دکمه‌های مدیریت لیست پخش", - "title": "دکمه‌هایی به مواردِ لیست پخش اضافه می‌کند برای حذف ویدیوها یا علامت‌گذاری آن‌ها به‌عنوان دیده‌نشده" + "label": "Enable playlist management buttons", + "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, + "enableSaveToWatchLaterButton": { + "label": "Enable save to Watch Later button", + "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", @@ -493,12 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "حذف ویدیو", - "removingVideo": "در حال حذف ویدیو…", - "failedToRemoveVideo": "حذف ویدیو ناموفق بود", - "markAsUnwatched": "علامت‌گذاری به‌عنوان دیده‌نشده", - "markingAsUnwatched": "در حال علامت‌گذاری به‌عنوان دیده‌نشده…", - "failedToMarkAsUnwatched": "علامت‌گذاری به‌عنوان دیده‌نشده ناموفق بود" + "failedToMarkAsUnwatched": "Failed to mark video as unwatched", + "failedToRemoveVideo": "Failed to remove video", + "markAsUnwatched": "Mark as unwatched", + "markingAsUnwatched": "Marking as unwatched…", + "removeVideo": "Remove video", + "removingVideo": "Removing video…" + }, + "saveToWatchLaterButton": { + "error": "Failed to add video to Watch Later", + "save": "Save to Watch Later" }, "screenshotButton": { "enable": { diff --git a/public/locales/fr-FR.json b/public/locales/fr-FR.json index 758b336d9..4e0b4e37f 100644 --- a/public/locales/fr-FR.json +++ b/public/locales/fr-FR.json @@ -293,6 +293,10 @@ "label": "Automatically enable closed captions", "title": "Automatically enables closed captions when you load a video" }, + "automaticallyMaximizePlayer": { + "label": "Automatically maximize player", + "title": "Automatically maximizes the player when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" @@ -302,8 +306,12 @@ "title": "Always default to the original audio track" }, "enablePlaylistManagementButtons": { - "label": "Activer les boutons de gestion de playlist", - "title": "Ajoute des boutons aux éléments de playlist pour supprimer des vidéos de la playlist ou les marquer comme non vues" + "label": "Enable playlist management buttons", + "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, + "enableSaveToWatchLaterButton": { + "label": "Enable save to Watch Later button", + "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", @@ -493,12 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "Supprimer la vidéo", - "removingVideo": "Suppression de la vidéo…", - "failedToRemoveVideo": "Échec de la suppression de la vidéo", - "markAsUnwatched": "Marquer comme non vue", - "markingAsUnwatched": "Marquage comme non vue…", - "failedToMarkAsUnwatched": "Échec du marquage comme non vue" + "failedToMarkAsUnwatched": "Failed to mark video as unwatched", + "failedToRemoveVideo": "Failed to remove video", + "markAsUnwatched": "Mark as unwatched", + "markingAsUnwatched": "Marking as unwatched…", + "removeVideo": "Remove video", + "removingVideo": "Removing video…" + }, + "saveToWatchLaterButton": { + "error": "Failed to add video to Watch Later", + "save": "Save to Watch Later" }, "screenshotButton": { "enable": { diff --git a/public/locales/he-IL.json b/public/locales/he-IL.json index 6a0cdf330..15560c0ce 100644 --- a/public/locales/he-IL.json +++ b/public/locales/he-IL.json @@ -293,6 +293,10 @@ "label": "Automatically enable closed captions", "title": "Automatically enables closed captions when you load a video" }, + "automaticallyMaximizePlayer": { + "label": "Automatically maximize player", + "title": "Automatically maximizes the player when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" @@ -302,8 +306,12 @@ "title": "Always default to the original audio track" }, "enablePlaylistManagementButtons": { - "label": "הפעל כפתורי ניהול רשימות השמעה", - "title": "מוסיף כפתורים לפריטי רשימת השמעה להסרת סרטונים או לסימונם כ'לא נצפה'" + "label": "Enable playlist management buttons", + "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, + "enableSaveToWatchLaterButton": { + "label": "Enable save to Watch Later button", + "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", @@ -493,12 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "הסר וידאו", - "removingVideo": "מסיר וידאו…", - "failedToRemoveVideo": "נכשל בהסרת הווידאו", - "markAsUnwatched": "סמן כלא נצפה", - "markingAsUnwatched": "מסמן כלא נצפה…", - "failedToMarkAsUnwatched": "נכשל בסימון כלא נצפה" + "failedToMarkAsUnwatched": "Failed to mark video as unwatched", + "failedToRemoveVideo": "Failed to remove video", + "markAsUnwatched": "Mark as unwatched", + "markingAsUnwatched": "Marking as unwatched…", + "removeVideo": "Remove video", + "removingVideo": "Removing video…" + }, + "saveToWatchLaterButton": { + "error": "Failed to add video to Watch Later", + "save": "Save to Watch Later" }, "screenshotButton": { "enable": { diff --git a/public/locales/hi-IN.json b/public/locales/hi-IN.json index 4ec735a22..0cc1794fd 100644 --- a/public/locales/hi-IN.json +++ b/public/locales/hi-IN.json @@ -293,6 +293,10 @@ "label": "Automatically enable closed captions", "title": "Automatically enables closed captions when you load a video" }, + "automaticallyMaximizePlayer": { + "label": "Automatically maximize player", + "title": "Automatically maximizes the player when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" @@ -302,8 +306,12 @@ "title": "Always default to the original audio track" }, "enablePlaylistManagementButtons": { - "label": "प्लेलिस्ट प्रबंधन बटन सक्षम करें", - "title": "प्लेलिस्ट आइटम में ऐसे बटन जोड़ता है जिनसे वीडियो को प्लेलिस्ट से हटाया जा सके या उन्हें 'न देखा हुआ' के रूप में चिह्नित किया जा सके"x + "label": "Enable playlist management buttons", + "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, + "enableSaveToWatchLaterButton": { + "label": "Enable save to Watch Later button", + "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", @@ -493,12 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "वीडियो हटाएं", - "removingVideo": "वीडियो हटाया जा रहा है…", - "failedToRemoveVideo": "वीडियो हटाने में विफल", - "markAsUnwatched": "अनदेखा के रूप में चिह्नित करें", - "markingAsUnwatched": "अनदेखा के रूप में चिह्नित किया जा रहा है…", - "failedToMarkAsUnwatched": "अनदेखा के रूप में चिह्नित करने में विफल" + "failedToMarkAsUnwatched": "Failed to mark video as unwatched", + "failedToRemoveVideo": "Failed to remove video", + "markAsUnwatched": "Mark as unwatched", + "markingAsUnwatched": "Marking as unwatched…", + "removeVideo": "Remove video", + "removingVideo": "Removing video…" + }, + "saveToWatchLaterButton": { + "error": "Failed to add video to Watch Later", + "save": "Save to Watch Later" }, "screenshotButton": { "enable": { diff --git a/public/locales/it-IT.json b/public/locales/it-IT.json index 7ef31ac58..ba28dc3db 100644 --- a/public/locales/it-IT.json +++ b/public/locales/it-IT.json @@ -102,7 +102,7 @@ "options": { "notifications": { "error": { - "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", + "optionConflict": "Questa opzione non può essere abilitata mentre '{{OPTION}}' è abilitato.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "Il tasto per modificare la velocità della rotellina del mouse non può essere lo stesso che modifica il volume con la rotellina del mouse.", @@ -290,8 +290,12 @@ "title": "Disabilita automaticamente le didascalie chiuse quando si carica un video" }, "automaticallyEnableClosedCaptions": { - "label": "Automatically enable closed captions", - "title": "Automatically enables closed captions when you load a video" + "label": "Abilita automaticamente le didascalie chiuse", + "title": "Abilita automaticamente le didascalie chiuse quando si carica un video" + }, + "automaticallyMaximizePlayer": { + "label": "Massimizza automaticamente il riproduttore", + "title": "Massimizza automaticamente il riproduttore quando carichi un video" }, "copyTimestampUrlButton": { "label": "Pulsante \"Copia URL video con temporizzazione\"", @@ -302,8 +306,12 @@ "title": "Traccia audio originale sempre predefinita" }, "enablePlaylistManagementButtons": { - "label": "Abilita pulsanti gestione playlist", - "title": "Aggiunge pulsanti agli elementi della playlist per rimuovere video dalla playlist o contrassegnarli come non visti" + "label": "Abilita i pulsanti di gestione della lista riproduzioni", + "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, + "enableSaveToWatchLaterButton": { + "label": "Enable save to Watch Later button", + "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" }, "hideArtificialIntelligenceSummary": { "label": "Nascondi riepilogo IA", @@ -493,12 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "Rimuovi video", - "removingVideo": "Rimozione del video in corso…", - "failedToRemoveVideo": "Impossibile rimuovere il video", - "markAsUnwatched": "Segna come non visto", - "markingAsUnwatched": "Contrassegno come non visto in corso…", - "failedToMarkAsUnwatched": "Impossibile contrassegnare come non visto" + "failedToMarkAsUnwatched": "Failed to mark video as unwatched", + "failedToRemoveVideo": "Failed to remove video", + "markAsUnwatched": "Mark as unwatched", + "markingAsUnwatched": "Marking as unwatched…", + "removeVideo": "Remove video", + "removingVideo": "Removing video…" + }, + "saveToWatchLaterButton": { + "error": "Failed to add video to Watch Later", + "save": "Save to Watch Later" }, "screenshotButton": { "enable": { diff --git a/public/locales/ja-JP.json b/public/locales/ja-JP.json index 5cc914d3d..06fbdca11 100644 --- a/public/locales/ja-JP.json +++ b/public/locales/ja-JP.json @@ -293,6 +293,10 @@ "label": "Automatically enable closed captions", "title": "Automatically enables closed captions when you load a video" }, + "automaticallyMaximizePlayer": { + "label": "Automatically maximize player", + "title": "Automatically maximizes the player when you load a video" + }, "copyTimestampUrlButton": { "label": "タイムスタンプ付きの動画URLをコピーのボタン", "title": "タイムスタンプ付きの動画URLをコピーする (?t=123)" @@ -302,8 +306,12 @@ "title": "Always default to the original audio track" }, "enablePlaylistManagementButtons": { - "label": "プレイリスト管理ボタンを有効にする", - "title": "プレイリストの各項目に、動画をプレイリストから削除したり未視聴としてマークしたりできるボタンを追加します" + "label": "Enable playlist management buttons", + "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, + "enableSaveToWatchLaterButton": { + "label": "Enable save to Watch Later button", + "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", @@ -493,12 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "動画を削除する", - "removingVideo": "動画を削除中…", - "failedToRemoveVideo": "動画を削除できませんでした", - "markAsUnwatched": "未視聴としてマークする", - "markingAsUnwatched": "未視聴としてマーク中…", - "failedToMarkAsUnwatched": "未視聴としてマークできませんでした" + "failedToMarkAsUnwatched": "Failed to mark video as unwatched", + "failedToRemoveVideo": "Failed to remove video", + "markAsUnwatched": "Mark as unwatched", + "markingAsUnwatched": "Marking as unwatched…", + "removeVideo": "Remove video", + "removingVideo": "Removing video…" + }, + "saveToWatchLaterButton": { + "error": "Failed to add video to Watch Later", + "save": "Save to Watch Later" }, "screenshotButton": { "enable": { diff --git a/public/locales/ko-KR.json b/public/locales/ko-KR.json index d53ef8e3f..993bc2339 100644 --- a/public/locales/ko-KR.json +++ b/public/locales/ko-KR.json @@ -293,6 +293,10 @@ "label": "Automatically enable closed captions", "title": "Automatically enables closed captions when you load a video" }, + "automaticallyMaximizePlayer": { + "label": "Automatically maximize player", + "title": "Automatically maximizes the player when you load a video" + }, "copyTimestampUrlButton": { "label": "현재 시간 주소 복사 버튼", "title": "현재 시간 주소 복사 (?t=123)" @@ -302,8 +306,12 @@ "title": "Always default to the original audio track" }, "enablePlaylistManagementButtons": { - "label": "재생목록 관리 버튼", - "title": "재생목록 항목에 버튼을 추가하여 재생목록에서 동영상을 제거하거나 시청하지 않음으로 표시할 수 있습니다" + "label": "Enable playlist management buttons", + "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, + "enableSaveToWatchLaterButton": { + "label": "Enable save to Watch Later button", + "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", @@ -493,12 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "동영상 제거", - "removingVideo": "동영상을 제거하는 중…", - "failedToRemoveVideo": "동영상을 제거하지 못했습니다", - "markAsUnwatched": "시청하지 않음으로 표시", - "markingAsUnwatched": "시청하지 않음으로 표시 중…", - "failedToMarkAsUnwatched": "시청하지 않음으로 표시하지 못했습니다" + "failedToMarkAsUnwatched": "Failed to mark video as unwatched", + "failedToRemoveVideo": "Failed to remove video", + "markAsUnwatched": "Mark as unwatched", + "markingAsUnwatched": "Marking as unwatched…", + "removeVideo": "Remove video", + "removingVideo": "Removing video…" + }, + "saveToWatchLaterButton": { + "error": "Failed to add video to Watch Later", + "save": "Save to Watch Later" }, "screenshotButton": { "enable": { diff --git a/public/locales/nl-NL.json b/public/locales/nl-NL.json index fc65b4677..2ae87956f 100644 --- a/public/locales/nl-NL.json +++ b/public/locales/nl-NL.json @@ -293,6 +293,10 @@ "label": "Automatically enable closed captions", "title": "Automatically enables closed captions when you load a video" }, + "automaticallyMaximizePlayer": { + "label": "Automatically maximize player", + "title": "Automatically maximizes the player when you load a video" + }, "copyTimestampUrlButton": { "label": "Kopieer video URL met tijdstempel knop", "title": "Kopieer video URL met tijdstempel (?t=123)" @@ -302,8 +306,12 @@ "title": "Always default to the original audio track" }, "enablePlaylistManagementButtons": { - "label": "Afspeellijstbeheerknoppen inschakelen", - "title": "Voegt knoppen toe aan afspeellijstitems om video's uit de afspeellijst te verwijderen of als onbe­ke­ken te markeren" + "label": "Enable playlist management buttons", + "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, + "enableSaveToWatchLaterButton": { + "label": "Enable save to Watch Later button", + "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", @@ -493,12 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "Video verwijderen", - "removingVideo": "Video wordt verwijderd…", - "failedToRemoveVideo": "Video verwijderen mislukt", - "markAsUnwatched": "Markeren als niet bekeken", - "markingAsUnwatched": "Markeren als niet bekeken…", - "failedToMarkAsUnwatched": "Markeren als niet bekeken mislukt" + "failedToMarkAsUnwatched": "Failed to mark video as unwatched", + "failedToRemoveVideo": "Failed to remove video", + "markAsUnwatched": "Mark as unwatched", + "markingAsUnwatched": "Marking as unwatched…", + "removeVideo": "Remove video", + "removingVideo": "Removing video…" + }, + "saveToWatchLaterButton": { + "error": "Failed to add video to Watch Later", + "save": "Save to Watch Later" }, "screenshotButton": { "enable": { diff --git a/public/locales/pl-PL.json b/public/locales/pl-PL.json index 38d4b1ccb..2b06d77de 100644 --- a/public/locales/pl-PL.json +++ b/public/locales/pl-PL.json @@ -111,10 +111,10 @@ } }, "info": { - "reset": "All options have been reset to their default values.\nYou can now save the changes by clicking the \"Confirm\" button or discard them by closing this page or ignore this notification." + "reset": "Wszystkie opcje zostały przywrócone do domyślnych wartości. Możesz teraz zapisać zmiany, klikając przycisk \"Potwierdź\" bądź odrzucić, je zamykając tę stronę lub ignorując to powiadomienie." }, "success": { - "saved": "Options saved." + "saved": "Zapisano opcje." } } } @@ -122,12 +122,12 @@ "settings": { "clearData": { "allDataDeleted": "All data has been deleted.", - "confirmAlert": "This will delete all extension data related to options. Continue?" + "confirmAlert": "Usunie to wszystkie dane rozszerzenia związane z opcjami. Kontynuować?" }, "optionDisabled": { "either": { "label": "Enable {{OPTIONS}} to configure this option", - "separator": " or " + "separator": " albo " }, "plural": { "label": "Enable {{OPTIONS}} to configure this option", @@ -136,10 +136,10 @@ "singular": "Enable '{{OPTION}}' to configure this option", "specificOption": { "featureMenu": "Configure at least one button to be placed in the feature menu to configure this option.", - "screenshotButtonFileFormat": "Set screenshot save type to 'File' to configure this option" + "screenshotButtonFileFormat": "Aby skonfigurować tę opcję, ustaw typ zapisu zrzutu ekranu na „Plik”" } }, - "scrollForMoreSettings": "Scroll for more settings", + "scrollForMoreSettings": "Przewiń, aby zobaczyć więcej ustawień", "sections": { "automaticQuality": { "enable": { @@ -150,26 +150,26 @@ "select": { "label": "Quality fallback strategy", "options": { - "higher": "Higher", - "lower": "Lower" + "higher": "Wyżej", + "lower": "Niżej" }, "title": "The strategy to use when the selected quality is not available" } }, "select": { - "label": "Player quality", + "label": "Jakość odtwarzacza", "title": "The quality to set the video to" }, - "title": "Automatic quality settings" + "title": "Opcje automatycznej jakości" }, "bottomButtons": { "clear": { "title": "Clears all data this extension has stored on your machine", - "value": "Clear Data" + "value": "Wyczyść dane" }, "confirm": { "title": "Confirm setting reset", - "value": "Confirm" + "value": "Potwierdź" }, "openTab": { "title": "Open extension settings in a new tab" @@ -182,22 +182,22 @@ "buttonPlacement": { "select": { "buttonNames": { - "copyTimestampUrlButton": "Copy video URL with timestamp button", - "decreasePlaybackSpeedButton": "Decrease Speed button", + "copyTimestampUrlButton": "Kopiuj adres URL bieżącego momentu", + "decreasePlaybackSpeedButton": "Przycisk Zmniejszania Prędkości Odtwarzania", "forwardButton": "Fast Forward button", "hideEndScreenCardsButton": "Hide end screen cards button", - "increasePlaybackSpeedButton": "Increase Speed button", - "loopButton": "Loop button", + "increasePlaybackSpeedButton": "Przycisk Zwiększania Prędkości Odtwarzania", + "loopButton": "Przycisk Zapętlania", "maximizePlayerButton": "Maximize button", "openTranscriptButton": "Open Transcript button", "rewindButton": "Rewind button", - "screenshotButton": "Screenshot button", - "volumeBoostButton": "Volume Boost button" + "screenshotButton": "Przycisk Zrzutu Ekranu", + "volumeBoostButton": "Przycisk Zwiększania Głośności" }, "options": { "below_player": { "placement": "below the player controls", - "value": "Below Player" + "value": "Poniżej Odtwarzacza" }, "feature_menu": { "placement": "in the feature menu", @@ -205,11 +205,11 @@ }, "player_controls_left": { "placement": "on the left side of player controls", - "value": "Left Controls" + "value": "Lewostronne Sterowanie" }, "player_controls_right": { "placement": "on the right side of player controls", - "value": "Right Controls" + "value": "Prawostronne Sterowanie" } }, "title": "Place the {{BUTTON_NAME}} {{PLACEMENT}}" @@ -233,8 +233,8 @@ "select": { "label": "Menu Activation Type", "options": { - "click": "Click", - "hover": "Hover" + "click": "Kliknięcie", + "hover": "Najechanie kursorem" }, "title": "Select the method to activate the feature menu" }, @@ -254,9 +254,9 @@ }, "importExportSettings": { "exportButton": { - "success": "Settings successfully exported", - "title": "Export settings to a JSON file", - "value": "Export Settings" + "success": "Ustawienia zostały pomyślnie wyeksportowane", + "title": "Eksportuj ustawienia do pliku JSON", + "value": "Eksportuj Ustawienia" }, "importButton": { "error": { @@ -264,14 +264,14 @@ "validation": "Error importing settings. Please check the file format.\n{{ERROR_MESSAGE}}" }, "success": "Settings imported successfully", - "title": "Import settings from a JSON file", - "value": "Import Settings" + "title": "Importuj ustawienia z pliku JSON", + "value": "Importuj Ustawienia" } }, "language": { "select": { "label": "Język", - "title": "The language to use for the extension" + "title": "Język rozszerzenia" }, "title": "Język" }, @@ -293,6 +293,10 @@ "label": "Automatically enable closed captions", "title": "Automatically enables closed captions when you load a video" }, + "automaticallyMaximizePlayer": { + "label": "Automatically maximize player", + "title": "Automatically maximizes the player when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" @@ -302,11 +306,15 @@ "title": "Always default to the original audio track" }, "enablePlaylistManagementButtons": { - "label": "Włącz przyciski zarządzania playlistą", - "title": "Dodaje przyciski do elementów playlisty w celu usuwania filmów z playlisty lub oznaczania ich jako nieobejrzane" + "label": "Enable playlist management buttons", + "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, + "enableSaveToWatchLaterButton": { + "label": "Enable save to Watch Later button", + "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" }, "hideArtificialIntelligenceSummary": { - "label": "Hide AI summary", + "label": "Ukryj podsumowanie AI", "title": "Hides the artificial intelligence summary below videos" }, "hideEndScreenCards": { @@ -338,8 +346,8 @@ "title": "Hides the pages scrollbar" }, "hideShorts": { - "label": "Hide shorts", - "title": "Hides all shorts" + "label": "Ukryj szorty", + "title": "Ukrywa wszystkie szorty" }, "hideTranslateComment": { "label": "Hide translate comment button", @@ -358,7 +366,7 @@ "title": "Adds a button to the feature menu to open the transcript of the video you're watching" }, "openYouTubeSettingsOnHover": { - "label": "Open YouTube settings on hover", + "label": "Otwórz ustawienia YouTube po najechaniu kursorem", "title": "Opens the YouTube settings menu when you hover over the settings button" }, "pauseBackgroundPlayers": { @@ -493,12 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "Usuń wideo", - "removingVideo": "Usuwanie wideo…", - "failedToRemoveVideo": "Nie udało się usunąć wideo", - "markAsUnwatched": "Oznacz jako nieobejrzane", - "markingAsUnwatched": "Oznaczanie jako nieobejrzane…", - "failedToMarkAsUnwatched": "Nie udało się oznaczyć jako nieobejrzane" + "failedToMarkAsUnwatched": "Failed to mark video as unwatched", + "failedToRemoveVideo": "Failed to remove video", + "markAsUnwatched": "Mark as unwatched", + "markingAsUnwatched": "Marking as unwatched…", + "removeVideo": "Remove video", + "removingVideo": "Removing video…" + }, + "saveToWatchLaterButton": { + "error": "Failed to add video to Watch Later", + "save": "Save to Watch Later" }, "screenshotButton": { "enable": { @@ -525,15 +537,15 @@ "title": "Adjust the speed change per scroll" }, "enable": { - "label": "Scroll wheel speed control", - "title": "Press a modifier key to enable speed adjustment with the scroll wheel." + "label": "Sterowanie prędkością kółka myszy", + "title": "Naciśnij klawisz modyfikujący, aby włączyć regulację prędkości za pomocą kółka myszy." }, - "optionLabel": "{{KEY}} key", + "optionLabel": "Klawisz {{KEY}}", "select": { - "label": "Modifier key", - "title": "The modifier key to use" + "label": "Klawisz modyfikujący", + "title": "Klawisz modyfikujący, którego należy użyć" }, - "title": "Scroll wheel speed control settings" + "title": "Ustawienia kontroli prędkości kółka myszy" }, "scrollWheelVolumeControl": { "adjustmentSteps": { @@ -541,30 +553,30 @@ "title": "Adjust the volume change per scroll" }, "enable": { - "label": "Scroll wheel volume control", - "title": "Lets you use the scroll wheel to control the volume of the video you're watching" + "label": "Regulacja głośności za pomocą kółka myszy", + "title": "Umożliwia sterowanie głośnością oglądanego filmu za pomocą kółka myszy" }, "holdModifierKey": { "enable": { - "label": "When holding modifier key", - "title": "Press a modifier key to enable volume adjustment with the scroll wheel." + "label": "Podczas przytrzymywania klawisza modyfikującego", + "title": "Naciśnij klawisz modyfikujący, aby włączyć regulację głośności za pomocą kółka myszy." }, - "optionLabel": "{{KEY}} key", + "optionLabel": "Klawisz {{KEY}}", "select": { - "label": "Modifier key", - "title": "The modifier key to use" + "label": "Klawisz modyfikujący", + "title": "Klawisz modyfikujący, którego należy użyć" } }, "holdRightClick": { "enable": { - "label": "When holding right click", - "title": "Hold right click to enable scroll wheel volume control" + "label": "Przytrzymując prawy przycisk myszy", + "title": "Przytrzymaj prawy przycisk myszy, aby włączyć regulację głośności za pomocą kółka myszy" } }, - "title": "Scroll wheel volume control settings" + "title": "Ustawienia regulacji głośności za pomocą kółka myszy" }, "settingSearch": { - "placeholder": "Search for a setting" + "placeholder": "Szukaj ustawienia" }, "videoHistory": { "enable": { @@ -573,42 +585,42 @@ }, "resumeType": { "select": { - "label": "Resume type", + "label": "Typ wznowienia filmu", "options": { - "automatic": "Automatic", - "prompt": "Prompt" + "automatic": "Automatyczne", + "prompt": "Podpowiedź" }, - "title": "Select how you want to resume videos" + "title": "Wybierz sposób wznawiania filmów" } }, "title": "Video history settings" }, "volumeBoost": { "boostAmount": { - "label": "Volume boost amount (dB)", - "title": "The amount to boost the volume by" + "label": "Wartość zwiększenia głośności (dB)", + "title": "O ile należy zwiększyć głośność" }, "enable": { - "label": "Volume boost", - "title": "Enable volume boost" + "label": "Zwiększenie głośności", + "title": "Włącz zwiększenie głośności" }, "mode": { "select": { - "label": "Volume boost mode", + "label": "Tryb zwiększenia głośności", "options": { - "global": "Global", - "perVideo": "Per video" + "global": "Globalne", + "perVideo": "Osobno" }, - "title": "Choose how volume boost is applied. 'Per video' allows enabling boost for each video individually in the feature menu. 'Global' applies boost to all videos when volume boost is enabled." + "title": "Wybierz sposób wzmocnienia głośności. Opcja „Osobno” umożliwia włączenie wzmocnienia dla każdego filmu osobno w menu funkcji. Opcja „Globalne” stosuje wzmocnienie do wszystkich filmów po włączeniu zwiększenia głośności." } }, - "title": "Volume boost settings" + "title": "Ustawienia zwiększenia głośności" }, "youtubeDataApiV3Key": { "getApiKeyLinkText": "You can get one from here", "input": { "label": "Klucz API", - "title": "Enter your Youtube Data API V3 key." + "title": "Wpisz swój klucz API V3." }, "title": "Klucz YouTube API V3" }, @@ -617,43 +629,43 @@ "co-authors": "Współautorzy", "colors": { "colorShadow": { - "label": "Shadow color", - "title": "Color for shadows" + "label": "Kolor cienia", + "title": "Kolor dla cieni" }, "dimmerText": { - "label": "Secondary text color", - "title": "Color for secondary text" + "label": "Kolor tekstu dodatkowego", + "title": "Kolor dla tekstu dodatkowego" }, "hoverBackground": { "label": "Hover background color", "title": "Color for hover background" }, "mainBackground": { - "label": "Main background color", - "title": "Color for main background" + "label": "Kolor głównego tła", + "title": "Kolor dla głównego tła" }, "mainColor": { - "label": "Accent color", - "title": "Color for accent" + "label": "Kolor akcentowy", + "title": "Kolor akcentowy" }, "mainText": { - "label": "Main text color", - "title": "Color for main text" + "label": "Kolor głównego tekstu", + "title": "Kolor dla głównego tekstu" }, "secondBackground": { - "label": "Secondary background color", - "title": "Color for secondary background" + "label": "Kolor dodatkowego tła", + "title": "Kolor tła dodatkowego" } }, "enable": { - "label": "Deep Dark Theme", - "title": "Activate the selected theme for the page" + "label": "Motyw Deep Dark", + "title": "Aktywuj wybrany motyw dla strony" }, "select": { - "label": "Select theme", - "title": "Select a theme to be applied to the page" + "label": "Wybierz motyw", + "title": "Wybierz motyw, który ma zostać zastosowany na stronie" }, - "title": "YouTube Deep Dark Settings" + "title": "Ustawienia motywu YouTube Deep Dark" } } } diff --git a/public/locales/pt-BR.json b/public/locales/pt-BR.json index 4a2623270..0959a48f0 100644 --- a/public/locales/pt-BR.json +++ b/public/locales/pt-BR.json @@ -293,6 +293,10 @@ "label": "Automatically enable closed captions", "title": "Automatically enables closed captions when you load a video" }, + "automaticallyMaximizePlayer": { + "label": "Automatically maximize player", + "title": "Automatically maximizes the player when you load a video" + }, "copyTimestampUrlButton": { "label": "Copiar URL do vídeo com o botão de minutagem", "title": "Copia o URL do vídeo com a minutagem (?t=123)" @@ -302,8 +306,12 @@ "title": "Sempre retornar à faixa de vídeo original" }, "enablePlaylistManagementButtons": { - "label": "Ativar botões de gerenciamento de playlist", - "title": "Adiciona botões aos itens da playlist para remover vídeos da playlist ou marcá-los como não assistidos" + "label": "Enable playlist management buttons", + "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, + "enableSaveToWatchLaterButton": { + "label": "Enable save to Watch Later button", + "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" }, "hideArtificialIntelligenceSummary": { "label": "Ocultar resumo IA", @@ -493,12 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "Remover vídeo", - "removingVideo": "Removendo vídeo…", - "failedToRemoveVideo": "Falha ao remover vídeo", - "markAsUnwatched": "Marcar como não assistido", - "markingAsUnwatched": "Marcando como não assistido…", - "failedToMarkAsUnwatched": "Falha ao marcar como não assistido" + "failedToMarkAsUnwatched": "Failed to mark video as unwatched", + "failedToRemoveVideo": "Failed to remove video", + "markAsUnwatched": "Mark as unwatched", + "markingAsUnwatched": "Marking as unwatched…", + "removeVideo": "Remove video", + "removingVideo": "Removing video…" + }, + "saveToWatchLaterButton": { + "error": "Failed to add video to Watch Later", + "save": "Save to Watch Later" }, "screenshotButton": { "enable": { diff --git a/public/locales/ru-RU.json b/public/locales/ru-RU.json index c6df75f38..11285e195 100644 --- a/public/locales/ru-RU.json +++ b/public/locales/ru-RU.json @@ -293,6 +293,10 @@ "label": "Automatically enable closed captions", "title": "Automatically enables closed captions when you load a video" }, + "automaticallyMaximizePlayer": { + "label": "Automatically maximize player", + "title": "Automatically maximizes the player when you load a video" + }, "copyTimestampUrlButton": { "label": "Кнопка «Копировать URL видео с таймкодом»", "title": "Копирует ссылку видео с меткой времени (?t=123)" @@ -302,8 +306,12 @@ "title": "Всегда выставлять оригинальную аудио дорожку видео по умолчанию" }, "enablePlaylistManagementButtons": { - "label": "Включить кнопки управления плейлистом", - "title": "Добавляет кнопки к элементам плейлиста для удаления видео из плейлиста или отметки их как непросмотренных" + "label": "Enable playlist management buttons", + "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, + "enableSaveToWatchLaterButton": { + "label": "Enable save to Watch Later button", + "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" }, "hideArtificialIntelligenceSummary": { "label": "Прятать краткое содержание от ИИ", @@ -493,12 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "Удалить видео", - "removingVideo": "Удаление видео…", - "failedToRemoveVideo": "Не удалось удалить видео", - "markAsUnwatched": "Отметить как непросмотренное", - "markingAsUnwatched": "Отмечаю как непросмотренное…", - "failedToMarkAsUnwatched": "Не удалось отметить как непросмотренное" + "failedToMarkAsUnwatched": "Failed to mark video as unwatched", + "failedToRemoveVideo": "Failed to remove video", + "markAsUnwatched": "Mark as unwatched", + "markingAsUnwatched": "Marking as unwatched…", + "removeVideo": "Remove video", + "removingVideo": "Removing video…" + }, + "saveToWatchLaterButton": { + "error": "Failed to add video to Watch Later", + "save": "Save to Watch Later" }, "screenshotButton": { "enable": { diff --git a/public/locales/sv-SE.json b/public/locales/sv-SE.json index 438fd1534..757eeaef1 100644 --- a/public/locales/sv-SE.json +++ b/public/locales/sv-SE.json @@ -293,6 +293,10 @@ "label": "Automatically enable closed captions", "title": "Automatically enables closed captions when you load a video" }, + "automaticallyMaximizePlayer": { + "label": "Automatically maximize player", + "title": "Automatically maximizes the player when you load a video" + }, "copyTimestampUrlButton": { "label": "Kopiera videons webbadress med tidsstämpelknappen", "title": "Kopiera videons webbadress med tidsstämpel (?t=123)" @@ -302,8 +306,12 @@ "title": "Använd alltid originalljudspåret som standard" }, "enablePlaylistManagementButtons": { - "label": "Aktivera spellisthanteringsknappar", - "title": "Lägger till knappar i objekt i spellistan för att ta bort videor från spellistan eller markera dem som osedda" + "label": "Enable playlist management buttons", + "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, + "enableSaveToWatchLaterButton": { + "label": "Enable save to Watch Later button", + "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" }, "hideArtificialIntelligenceSummary": { "label": "Dölj AI-sammanfattning", @@ -493,12 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "Ta bort video", - "removingVideo": "Tar bort video…", - "failedToRemoveVideo": "Kunde inte ta bort video", - "markAsUnwatched": "Markera som osedd", - "markingAsUnwatched": "Markerar som osedd…", - "failedToMarkAsUnwatched": "Kunde inte markera som osedd" + "failedToMarkAsUnwatched": "Failed to mark video as unwatched", + "failedToRemoveVideo": "Failed to remove video", + "markAsUnwatched": "Mark as unwatched", + "markingAsUnwatched": "Marking as unwatched…", + "removeVideo": "Remove video", + "removingVideo": "Removing video…" + }, + "saveToWatchLaterButton": { + "error": "Failed to add video to Watch Later", + "save": "Save to Watch Later" }, "screenshotButton": { "enable": { diff --git a/public/locales/tr-TR.json b/public/locales/tr-TR.json index faea016b1..3df350579 100644 --- a/public/locales/tr-TR.json +++ b/public/locales/tr-TR.json @@ -102,7 +102,7 @@ "options": { "notifications": { "error": { - "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", + "optionConflict": "'{{OPTION}}' etkinken bu seçenek etkinleştirilemez.", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "Kaydırma tekerleği hız kontrolü için kullanılan değiştirici tuş, kaydırma tekerleği ses kontrolü için kullanılan değiştirici tuşla aynı olamaz.", @@ -290,8 +290,12 @@ "title": "Bir video yüklendiğinde kapalı altyazıları otomatik olarak devre dışı bırakır" }, "automaticallyEnableClosedCaptions": { - "label": "Automatically enable closed captions", - "title": "Automatically enables closed captions when you load a video" + "label": "Kapalı altyazıları otomatik olarak etkinleştir", + "title": "Bir videoyu yüklediğinizde altyazıları otomatik olarak etkinleştirir" + }, + "automaticallyMaximizePlayer": { + "label": "Automatically maximize player", + "title": "Automatically maximizes the player when you load a video" }, "copyTimestampUrlButton": { "label": "Video URL'sini zaman damgası düğmesiyle kopyala", @@ -302,8 +306,12 @@ "title": "Her zaman varsayılan olarak orijinal ses parçasına dön" }, "enablePlaylistManagementButtons": { - "label": "Çalma listesi yönetim düğmelerini etkinleştir", - "title": "Çalma listesi öğelerine videoları çalma listesinden kaldırmak veya izlenmemiş olarak işaretlemek için düğmeler ekler" + "label": "Enable playlist management buttons", + "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, + "enableSaveToWatchLaterButton": { + "label": "Enable save to Watch Later button", + "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" }, "hideArtificialIntelligenceSummary": { "label": "AI özetini gizle", @@ -493,12 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "Videoyu kaldır", - "removingVideo": "Video kaldırılıyor…", - "failedToRemoveVideo": "Video kaldırılamadı", - "markAsUnwatched": "İzlenmedi olarak işaretle", - "markingAsUnwatched": "İzlenmedi olarak işaretleniyor…", - "failedToMarkAsUnwatched": "İzlenmedi olarak işaretlenemedi" + "failedToMarkAsUnwatched": "Failed to mark video as unwatched", + "failedToRemoveVideo": "Failed to remove video", + "markAsUnwatched": "Mark as unwatched", + "markingAsUnwatched": "Marking as unwatched…", + "removeVideo": "Remove video", + "removingVideo": "Removing video…" + }, + "saveToWatchLaterButton": { + "error": "Failed to add video to Watch Later", + "save": "Save to Watch Later" }, "screenshotButton": { "enable": { diff --git a/public/locales/uk-UA.json b/public/locales/uk-UA.json index e68246b79..a6ff51e46 100644 --- a/public/locales/uk-UA.json +++ b/public/locales/uk-UA.json @@ -293,6 +293,10 @@ "label": "Automatically enable closed captions", "title": "Automatically enables closed captions when you load a video" }, + "automaticallyMaximizePlayer": { + "label": "Automatically maximize player", + "title": "Automatically maximizes the player when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" @@ -302,8 +306,12 @@ "title": "Always default to the original audio track" }, "enablePlaylistManagementButtons": { - "label": "Увімкнути кнопки керування плейлистом", - "title": "Додає кнопки до елементів плейлиста для видалення відео з плейлиста або позначення їх як непереглянутих" + "label": "Enable playlist management buttons", + "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, + "enableSaveToWatchLaterButton": { + "label": "Enable save to Watch Later button", + "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", @@ -493,12 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "Видалити відео", - "removingVideo": "Видалення відео…", - "failedToRemoveVideo": "Не вдалося видалити відео", - "markAsUnwatched": "Позначити як не переглянуте", - "markingAsUnwatched": "Позначення як не переглянуте…", - "failedToMarkAsUnwatched": "Не вдалося позначити як не переглянуте" + "failedToMarkAsUnwatched": "Failed to mark video as unwatched", + "failedToRemoveVideo": "Failed to remove video", + "markAsUnwatched": "Mark as unwatched", + "markingAsUnwatched": "Marking as unwatched…", + "removeVideo": "Remove video", + "removingVideo": "Removing video…" + }, + "saveToWatchLaterButton": { + "error": "Failed to add video to Watch Later", + "save": "Save to Watch Later" }, "screenshotButton": { "enable": { diff --git a/public/locales/vi-VN.json b/public/locales/vi-VN.json index 49e8ab60d..91e77451f 100644 --- a/public/locales/vi-VN.json +++ b/public/locales/vi-VN.json @@ -293,6 +293,10 @@ "label": "Automatically enable closed captions", "title": "Automatically enables closed captions when you load a video" }, + "automaticallyMaximizePlayer": { + "label": "Automatically maximize player", + "title": "Automatically maximizes the player when you load a video" + }, "copyTimestampUrlButton": { "label": "Copy video URL with timestamp button", "title": "Copies video URL with timestamp (?t=123)" @@ -302,8 +306,12 @@ "title": "Always default to the original audio track" }, "enablePlaylistManagementButtons": { - "label": "Bật nút quản lý danh sách phát", - "title": "Thêm nút vào các mục danh sách phát để xóa video khỏi danh sách phát hoặc đánh dấu chúng là chưa xem" + "label": "Enable playlist management buttons", + "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, + "enableSaveToWatchLaterButton": { + "label": "Enable save to Watch Later button", + "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", @@ -493,12 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "Xóa video", - "removingVideo": "Đang xóa video…", - "failedToRemoveVideo": "Không thể xóa video", - "markAsUnwatched": "Đánh dấu là chưa xem", - "markingAsUnwatched": "Đang đánh dấu là chưa xem…", - "failedToMarkAsUnwatched": "Không thể đánh dấu là chưa xem" + "failedToMarkAsUnwatched": "Failed to mark video as unwatched", + "failedToRemoveVideo": "Failed to remove video", + "markAsUnwatched": "Mark as unwatched", + "markingAsUnwatched": "Marking as unwatched…", + "removeVideo": "Remove video", + "removingVideo": "Removing video…" + }, + "saveToWatchLaterButton": { + "error": "Failed to add video to Watch Later", + "save": "Save to Watch Later" }, "screenshotButton": { "enable": { diff --git a/public/locales/zh-CN.json b/public/locales/zh-CN.json index e0fff7453..a64487013 100644 --- a/public/locales/zh-CN.json +++ b/public/locales/zh-CN.json @@ -102,7 +102,7 @@ "options": { "notifications": { "error": { - "optionConflict": "This option cannot be enabled while '{{OPTION}}' is enabled.", + "optionConflict": "当 '{{OPTION}}' 启用时,该选项无法启用。", "scrollWheelHoldModifierKey": { "sameKey": { "speedControl": "滚轮控制播放速度键位与控制音量冲突。", @@ -290,8 +290,12 @@ "title": "载入视频时自动禁用隐藏式字幕" }, "automaticallyEnableClosedCaptions": { - "label": "Automatically enable closed captions", - "title": "Automatically enables closed captions when you load a video" + "label": "自动启用隐藏式字幕", + "title": "载入视频时自动启用隐藏式字幕" + }, + "automaticallyMaximizePlayer": { + "label": "自动最大化播放器", + "title": "当视频打开时,自动最大化播放器" }, "copyTimestampUrlButton": { "label": "复制带有时间戳的视频 URL 按钮", @@ -303,7 +307,11 @@ }, "enablePlaylistManagementButtons": { "label": "启用播放列表管理按钮", - "title": "为播放列表项添加按钮,用于从播放列表中删除视频或将其标记为未观看" + "title": "添加播放列表项目按钮从播放列表中删除视频或将其标记为未观看视频" + }, + "enableSaveToWatchLaterButton": { + "label": "启用保存到稍后观看按钮", + "title": "在主页和订阅视频中添加一个按钮,将视频保存到“稍后观看”播放列表" }, "hideArtificialIntelligenceSummary": { "label": "隐藏 AI 摘要", @@ -493,12 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "移除视频", - "removingVideo": "正在移除视频…", + "failedToMarkAsUnwatched": "将视频标记为未观看失败", "failedToRemoveVideo": "移除视频失败", "markAsUnwatched": "标记为未观看", "markingAsUnwatched": "正在标记为未观看…", - "failedToMarkAsUnwatched": "标记为未观看失败" + "removeVideo": "删除视频", + "removingVideo": "正在移除视频…" + }, + "saveToWatchLaterButton": { + "error": "将视频添加到稍后观看失败", + "save": "保存至稍后观看" }, "screenshotButton": { "enable": { diff --git a/public/locales/zh-TW.json b/public/locales/zh-TW.json index 9d6fbb4ed..ea18eb2eb 100644 --- a/public/locales/zh-TW.json +++ b/public/locales/zh-TW.json @@ -293,6 +293,10 @@ "label": "Automatically enable closed captions", "title": "Automatically enables closed captions when you load a video" }, + "automaticallyMaximizePlayer": { + "label": "Automatically maximize player", + "title": "Automatically maximizes the player when you load a video" + }, "copyTimestampUrlButton": { "label": "複製目前播放時間的影片網址按鈕", "title": "複製目前播放時間的影片網址 (?t=123)" @@ -302,8 +306,12 @@ "title": "Always default to the original audio track" }, "enablePlaylistManagementButtons": { - "label": "啟用播放清單管理按鈕", - "title": "為播放清單項目添加按鈕,用於從播放清單中刪除影片或將其標記為未觀看" + "label": "Enable playlist management buttons", + "title": "Adds buttons to playlist items to remove videos from the playlist or mark them as unwatched" + }, + "enableSaveToWatchLaterButton": { + "label": "Enable save to Watch Later button", + "title": "Adds a button to Home and Subscriptions videos to save the video to the 'Watch Later' playlist" }, "hideArtificialIntelligenceSummary": { "label": "Hide AI summary", @@ -493,12 +501,16 @@ } }, "playlistManagementButtons": { - "removeVideo": "移除影片", - "removingVideo": "正在移除影片…", - "failedToRemoveVideo": "移除影片失敗", - "markAsUnwatched": "標記為未觀看", - "markingAsUnwatched": "正在標記為未觀看…", - "failedToMarkAsUnwatched": "標記為未觀看失敗" + "failedToMarkAsUnwatched": "Failed to mark video as unwatched", + "failedToRemoveVideo": "Failed to remove video", + "markAsUnwatched": "Mark as unwatched", + "markingAsUnwatched": "Marking as unwatched…", + "removeVideo": "Remove video", + "removingVideo": "Removing video…" + }, + "saveToWatchLaterButton": { + "error": "Failed to add video to Watch Later", + "save": "Save to Watch Later" }, "screenshotButton": { "enable": { From 058515adaddf16070673f745d24a70653345b246 Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Thu, 23 Oct 2025 17:07:22 -0400 Subject: [PATCH 70/70] chore: update node version in workflow --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d3ba72f22..6ff151fd4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,7 +21,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 24 - name: Cache dependencies uses: actions/cache@v4