From 6c51a913c7a466c83862bc346183612bf310bd2e Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Sun, 28 Jan 2024 19:09:02 -0500 Subject: [PATCH 01/15] update translations --- public/locales/fr-FR.json | 2 +- public/locales/ja-JP.json | 42 +++++------ public/locales/pt-BR.json | 42 +++++------ public/locales/ru-RU.json | 44 ++++++------ public/locales/tr-TR.json | 60 ++++++++-------- public/locales/zh-CN.json | 146 +++++++++++++++++++------------------- public/locales/zh-TW.json | 42 +++++------ 7 files changed, 189 insertions(+), 189 deletions(-) diff --git a/public/locales/fr-FR.json b/public/locales/fr-FR.json index 75c3765e..b8b35282 100644 --- a/public/locales/fr-FR.json +++ b/public/locales/fr-FR.json @@ -132,7 +132,7 @@ "editor": { "collapse": "Collapse Editor", "expand": "Expand Editor", - "noProblems": "No problems found." + "noProblems": "Aucun problème détecté." }, "enable": { "label": "Enable custom CSS", diff --git a/public/locales/ja-JP.json b/public/locales/ja-JP.json index 32be3f6f..49d00b28 100644 --- a/public/locales/ja-JP.json +++ b/public/locales/ja-JP.json @@ -14,15 +14,15 @@ "loopButton": { "label": "ループ", "toggle": { - "off": "Loop off", - "on": "Loop on" + "off": "ループオフ", + "on": "ループオン" } }, "maximizePlayerButton": { "label": "最大表示", "toggle": { - "off": "Maximize off", - "on": "Maximize on" + "off": "最大表示オフ", + "on": "最大表示オン" } }, "openTranscriptButton": { @@ -41,8 +41,8 @@ "volumeBoostButton": { "label": "音量ブースト", "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" + "off": "音量ブーストオフ", + "on": "音量ブーストオン" } } } @@ -100,33 +100,33 @@ "buttonPlacement": { "select": { "buttonNames": { - "loopButton": "Loop button", - "maximizePlayerButton": "Maximize button", - "openTranscriptButton": "Open Transcript button", - "screenshotButton": "Screenshot button", - "volumeBoostButton": "Volume Boost button" + "loopButton": "ループボタン", + "maximizePlayerButton": "最大表示ボタン", + "openTranscriptButton": "文字起こしを見せるボタン", + "screenshotButton": "スクリーンショットボタン", + "volumeBoostButton": "音量ブーストボタン" }, "options": { "below_player": { - "placement": "below the player controls", - "value": "Below Player" + "placement": "プレイヤーコントローラーの下", + "value": "プレイヤーの下" }, "feature_menu": { - "placement": "in the feature menu", - "value": "Feature Menu" + "placement": "フィーチャー・メニューの中", + "value": "フィーチャー・メニュー" }, "player_controls_left": { - "placement": "on the left side of player controls", - "value": "Left Controls" + "placement": "プレイヤーコントローラーの左側", + "value": "左のコントロール" }, "player_controls_right": { - "placement": "on the right side of player controls", - "value": "Right Controls" + "placement": "プレイヤーコントローラーの右側", + "value": "右のコントロール" } }, - "title": "Place the {{BUTTON_NAME}} {{PLACEMENT}}" + "title": "{{PLACEMENT}}に{{BUTTON_NAME}}を置き方する" }, - "title": "Button Placement Settings" + "title": "ボタン置き方設定" }, "customCSS": { "editor": { diff --git a/public/locales/pt-BR.json b/public/locales/pt-BR.json index 8405f3ca..b7de151a 100644 --- a/public/locales/pt-BR.json +++ b/public/locales/pt-BR.json @@ -14,15 +14,15 @@ "loopButton": { "label": "Repetir", "toggle": { - "off": "Loop off", - "on": "Loop on" + "off": "Repetição inativa", + "on": "Repetição ativa" } }, "maximizePlayerButton": { "label": "Maximizar", "toggle": { - "off": "Maximize off", - "on": "Maximize on" + "off": "Maximização inativa", + "on": "Maximização ativa" } }, "openTranscriptButton": { @@ -41,8 +41,8 @@ "volumeBoostButton": { "label": "Impulsionador de volume", "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" + "off": "Impulso de Volume inativo", + "on": "Impulso de Volume ativo" } } } @@ -100,33 +100,33 @@ "buttonPlacement": { "select": { "buttonNames": { - "loopButton": "Loop button", - "maximizePlayerButton": "Maximize button", - "openTranscriptButton": "Open Transcript button", - "screenshotButton": "Screenshot button", - "volumeBoostButton": "Volume Boost button" + "loopButton": "Botão de Repetir", + "maximizePlayerButton": "Botão de Maximizar", + "openTranscriptButton": "Abrir botão de transcrição", + "screenshotButton": "Botão de captura de tela", + "volumeBoostButton": "Botão de Impulso de Volume" }, "options": { "below_player": { - "placement": "below the player controls", - "value": "Below Player" + "placement": "abaixo dos controles do reprodutor", + "value": "Abaixo do reprodutor" }, "feature_menu": { - "placement": "in the feature menu", - "value": "Feature Menu" + "placement": "no menu de recursos", + "value": "Menu de recursos" }, "player_controls_left": { - "placement": "on the left side of player controls", - "value": "Left Controls" + "placement": "no lado esquerdo dos controles do reprodutor", + "value": "Controle Esquerdo" }, "player_controls_right": { - "placement": "on the right side of player controls", - "value": "Right Controls" + "placement": "no lado direito dos controles do reprodutor", + "value": "Controle Direito" } }, - "title": "Place the {{BUTTON_NAME}} {{PLACEMENT}}" + "title": "Coloque o {{BUTTON_NAME}} {{PLACEMENT}}" }, - "title": "Button Placement Settings" + "title": "Configurações de posicionamento de botão" }, "customCSS": { "editor": { diff --git a/public/locales/ru-RU.json b/public/locales/ru-RU.json index bc4057b2..3f799cab 100644 --- a/public/locales/ru-RU.json +++ b/public/locales/ru-RU.json @@ -14,15 +14,15 @@ "loopButton": { "label": "Зациклить", "toggle": { - "off": "Loop off", - "on": "Loop on" + "off": "Зацикливание выключено", + "on": "Зацикливание включено" } }, "maximizePlayerButton": { "label": "Развернуть", "toggle": { - "off": "Maximize off", - "on": "Maximize on" + "off": "Проигрыватель свернут", + "on": "Проигрыватель развернут" } }, "openTranscriptButton": { @@ -41,8 +41,8 @@ "volumeBoostButton": { "label": "Усиление громкости", "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" + "off": "Увеличение громкости выключено", + "on": "Увеличение громкости включено" } } } @@ -93,40 +93,40 @@ "value": "Подтвердить" }, "reset": { - "title": "Сбрасывает все настройки до значений по умолчанию. Нажмите \"Подтвердить\", чтобы сохранить изменения", + "title": "Сбрасывает все параметры до значений по умолчанию. Нажмите \"Подтвердить\", чтобы сохранить изменения", "value": "Сброс" } }, "buttonPlacement": { "select": { "buttonNames": { - "loopButton": "Loop button", - "maximizePlayerButton": "Maximize button", - "openTranscriptButton": "Open Transcript button", - "screenshotButton": "Screenshot button", - "volumeBoostButton": "Volume Boost button" + "loopButton": "Кнопка «Зациклить»", + "maximizePlayerButton": "Кнопка «Развернуть»", + "openTranscriptButton": "Кнопка «Открыть стенограмму»", + "screenshotButton": "Кнопка «Скриншот»", + "volumeBoostButton": "Кнопка «Усиление громкости»" }, "options": { "below_player": { - "placement": "below the player controls", - "value": "Below Player" + "placement": "под проигрывателем", + "value": "Под проигрывателем" }, "feature_menu": { - "placement": "in the feature menu", - "value": "Feature Menu" + "placement": "в меню функций", + "value": "Меню функций" }, "player_controls_left": { - "placement": "on the left side of player controls", - "value": "Left Controls" + "placement": "с левой стороны панели управления", + "value": "Слева" }, "player_controls_right": { - "placement": "on the right side of player controls", - "value": "Right Controls" + "placement": "с правой стороны панели управления", + "value": "Справа" } }, - "title": "Place the {{BUTTON_NAME}} {{PLACEMENT}}" + "title": "Поместить {{BUTTON_NAME}} {{PLACEMENT}}" }, - "title": "Button Placement Settings" + "title": "Настройки размещения кнопок" }, "customCSS": { "editor": { diff --git a/public/locales/tr-TR.json b/public/locales/tr-TR.json index c2ff0719..9915e7ab 100644 --- a/public/locales/tr-TR.json +++ b/public/locales/tr-TR.json @@ -14,15 +14,15 @@ "loopButton": { "label": "Döngü", "toggle": { - "off": "Loop off", - "on": "Loop on" + "off": "Döngü kapalı", + "on": "Düngü açık" } }, "maximizePlayerButton": { "label": "Ekranı Kapla", "toggle": { - "off": "Maximize off", - "on": "Maximize on" + "off": "Tam ekran kapalı", + "on": "Tam ekran açık" } }, "openTranscriptButton": { @@ -41,8 +41,8 @@ "volumeBoostButton": { "label": "Ses Güçlendirmesi", "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" + "off": "Ses güçlendirmesi kapalı", + "on": "Ses güçlendirmesi açık" } } } @@ -100,45 +100,45 @@ "buttonPlacement": { "select": { "buttonNames": { - "loopButton": "Loop button", - "maximizePlayerButton": "Maximize button", + "loopButton": "Döngü düğmesi", + "maximizePlayerButton": "Tam ekran düğmesi", "openTranscriptButton": "Open Transcript button", - "screenshotButton": "Screenshot button", - "volumeBoostButton": "Volume Boost button" + "screenshotButton": "Ekran görüntüsü düğmesi", + "volumeBoostButton": "Ses güçlendirme düğmesi" }, "options": { "below_player": { - "placement": "below the player controls", - "value": "Below Player" + "placement": "oynatıcı kontrollerinin altında", + "value": "Oynatıcının altında" }, "feature_menu": { - "placement": "in the feature menu", - "value": "Feature Menu" + "placement": "özellik menüsünde", + "value": "Özellik Menüsü" }, "player_controls_left": { - "placement": "on the left side of player controls", - "value": "Left Controls" + "placement": "oynatıcı kontrollerinin sol tarafında", + "value": "Sol Kontroller" }, "player_controls_right": { - "placement": "on the right side of player controls", - "value": "Right Controls" + "placement": "oynatıcı kontrollerinin sağ tarafında", + "value": "Sağ Kontroller" } }, "title": "Place the {{BUTTON_NAME}} {{PLACEMENT}}" }, - "title": "Button Placement Settings" + "title": "Düğme Yerleşim Ayarları" }, "customCSS": { "editor": { - "collapse": "Collapse Editor", - "expand": "Expand Editor", - "noProblems": "No problems found." + "collapse": "Düzenleyiciyi Daralt", + "expand": "Düzenleyiciyi Genişlet", + "noProblems": "Hiç bir sorun bulunamadı." }, "enable": { - "label": "Enable custom CSS", + "label": "Özel CSS'yi etkinleştir", "title": "Enables custom CSS to be applied to the page" }, - "title": "Custom CSS Settings" + "title": "Özel CSS Ayarları" }, "featureMenu": { "openType": { @@ -212,7 +212,7 @@ }, "videoHistory": { "label": "Video geçmişini etkinleştir", - "title": "Keeps track of where you left off on videos you were watching and asks if you want to resume when that video loads again" + "title": "İzlediğiniz videolarda nerede kaldığınızı takip eder ve video tekrar yüklendiğinde devam etmek isteyip istemediğinizi sorar" } }, "title": "Çeşitli ayarlar" @@ -261,7 +261,7 @@ "options": { "line": "Satır", "no_display": "Ekran yok", - "round": "Round", + "round": "Tur", "text": "Metin" }, "title": "Select the type of On-Screen Display" @@ -303,7 +303,7 @@ "title": "Adjust the speed change per scroll" }, "enable": { - "label": "Scroll wheel speed control", + "label": "Kaydırma tekerleği hız kontrolü", "title": "Press a modifier key to enable speed adjustment with the scroll wheel." }, "optionLabel": "{{KEY}} anahtarı", @@ -319,7 +319,7 @@ "title": "Adjust the volume change per scroll" }, "enable": { - "label": "Scroll wheel volume control", + "label": "Kaydırma tekerleği ile ses kontrolü", "title": "Lets you use the scroll wheel to control the volume of the video you're watching" }, "holdModifierKey": { @@ -336,10 +336,10 @@ "holdRightClick": { "enable": { "label": "Etkinleştirmek için sağ tuşa basılı tutun", - "title": "Hold right click to enable scroll wheel volume control" + "title": "Kaydırma tekerleği ile ses kontrolünü etkinleştirmek için farenin sağ düğmesine basılı tutun" } }, - "title": "Scroll wheel volume control settings" + "title": "Kaydırma tekerleği ile ses seviyesi kontrolü ayarları" }, "volumeBoost": { "boostAmount": { diff --git a/public/locales/zh-CN.json b/public/locales/zh-CN.json index 0fd6b7c0..4e17a4de 100644 --- a/public/locales/zh-CN.json +++ b/public/locales/zh-CN.json @@ -1,6 +1,6 @@ { "langCode": "zh-CN", - "langName": "English (US)", + "langName": "中文 (简体)", "messages": { "resumingVideo": "恢复视频播放时刻于 {{VIDEO_TIME}}", "settingVolume": "设置音量增强至 {{VOLUME_BOOST_AMOUNT}}" @@ -12,28 +12,28 @@ "label": "功能单" }, "loopButton": { - "label": "Loop", + "label": "循环播放", "toggle": { - "off": "Loop off", - "on": "Loop on" + "off": "取消循环", + "on": "启用循环" } }, "maximizePlayerButton": { "label": "化最大", "toggle": { - "off": "Maximize off", - "on": "Maximize on" + "off": "最大化关闭", + "on": "最大化开启" } }, "openTranscriptButton": { "label": "打开转写文稿" }, "screenshotButton": { - "copiedToClipboard": "Screenshot copied to clipboard", - "label": "Screenshot" + "copiedToClipboard": "截图已复制到剪贴板", + "label": "截图" }, "videoHistory": { - "resumeButton": "Resume", + "resumeButton": "继续播放", "resumePrompt": { "close": "关" } @@ -41,8 +41,8 @@ "volumeBoostButton": { "label": "音量增强", "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" + "off": "关闭音量增强", + "on": "开启音量增强" } } } @@ -58,75 +58,75 @@ } }, "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": "所有选项已重置为默认值。\n现在您可以通过单击“确认”按钮保存更改,或通过关闭此页面或忽略此通知放弃更改。" }, "success": { - "saved": "Options saved." + "saved": "选项已保存。" } } } }, "settings": { "clearData": { - "allDataDeleted": "All data has been deleted.", - "confirmAlert": "This will delete all extension data related to options. Continue?" + "allDataDeleted": "所有数据已删除。", + "confirmAlert": "这将删除所有与选项相关的扩展数据。是否继续?" }, "sections": { "automaticQuality": { "enable": { - "label": "Automatic quality adjustment", - "title": "Automatically adjusts the video quality to the selected level." + "label": "自动质量调整", + "title": "自动调整视频质量到所选等级。" }, "select": { - "label": "Player quality", + "label": "播放质量", "title": "将视频质量设为" }, - "title": "Automatic quality settings" + "title": "自动画质设置" }, "bottomButtons": { "clear": { - "title": "Clears all data this extension has stored on your machine", - "value": "Clear Data" + "title": "清除此扩展存储在您机器上的所有数据", + "value": "清除数据" }, "confirm": { - "title": "Confirm setting reset", - "value": "Confirm" + "title": "确认重置设置", + "value": "确认" }, "reset": { - "title": "Resets all settings to their defaults, Click the confirm button to save the changes", + "title": "重置所有设置为默认设置,点击确认按钮以保存更改", "value": "重新开始" } }, "buttonPlacement": { "select": { "buttonNames": { - "loopButton": "Loop button", - "maximizePlayerButton": "Maximize button", - "openTranscriptButton": "Open Transcript button", - "screenshotButton": "Screenshot button", - "volumeBoostButton": "Volume Boost button" + "loopButton": "循环按钮", + "maximizePlayerButton": "最大化按钮", + "openTranscriptButton": "转写文稿按钮", + "screenshotButton": "屏幕截图按钮", + "volumeBoostButton": "音量增强按钮" }, "options": { "below_player": { - "placement": "below the player controls", - "value": "Below Player" + "placement": "位于播放器控制按键下方", + "value": "位于播放器下方" }, "feature_menu": { - "placement": "in the feature menu", - "value": "Feature Menu" + "placement": "位于功能菜单内", + "value": "功能菜单" }, "player_controls_left": { - "placement": "on the left side of player controls", - "value": "Left Controls" + "placement": "位于播放器控制按键左侧", + "value": "控件居左" }, "player_controls_right": { - "placement": "on the right side of player controls", - "value": "Right Controls" + "placement": "位于播放器控制按键右侧", + "value": "控件居右" } }, - "title": "Place the {{BUTTON_NAME}} {{PLACEMENT}}" + "title": "把 {{BUTTON_NAME}} 按钮放在 {{PLACEMENT}}" }, - "title": "Button Placement Settings" + "title": "按钮位置设置" }, "customCSS": { "editor": { @@ -155,26 +155,26 @@ }, "importExportSettings": { "exportButton": { - "success": "Settings successfully exported", - "title": "Export settings to a JSON file", - "value": "Export Settings" + "success": "导出配置成功", + "title": "导出设置到 JSON 文件", + "value": "导出设置" }, "importButton": { "error": { - "unknown": "Error importing settings. Please check the file format.\nAn unknown error occurred.", + "unknown": "导入设置时出错。请检查文件格式。\n发生未知错误。", "validation": "导入设置出错。请检查文件格式。\n{{ERROR_MESSAGE}}" }, - "success": "Settings imported successfully", - "title": "Import settings from a JSON file", - "value": "Import Settings" + "success": "设置导入成功", + "title": "从 JSON 文件导入设置", + "value": "导入设置" } }, "language": { "select": { - "label": "Language", + "label": "语言", "title": "用于扩展的语言" }, - "title": "Language" + "title": "语言" }, "miscellaneous": { "features": { @@ -184,14 +184,14 @@ }, "hideScrollbar": { "label": "启用隐藏滚动条", - "title": "Hides the pages scrollbar" + "title": "隐藏页面滚动条" }, "loopButton": { - "label": "Loop button", + "label": "循环按钮", "title": "在功能菜单中添加一个按钮来循环你正在观看的视频" }, "maximizePlayerButton": { - "label": "Maximize player button", + "label": "最大化播放器按钮", "title": "在功能菜单中添加一个按钮来最大化播放器" }, "openTranscriptButton": { @@ -203,19 +203,19 @@ "title": "当您悬停在设置按钮上时打开 YouTube 设置菜单" }, "remainingTime": { - "label": "Remaining time", - "title": "Shows the remaining time of the video you're watching" + "label": "剩余时间", + "title": "显示您观看的视频的剩余时间" }, "rememberLastVolume": { - "label": "Remember last volume", + "label": "记住最后一个音量", "title": "记住最后一个视频的音量并在打开新视频时设置" }, "videoHistory": { - "label": "Video history", - "title": "Keeps track of where you left off on videos you were watching and asks if you want to resume when that video loads again" + "label": "视频历史记录", + "title": "保持跟踪您在视频上离开的位置,并询问您是否想要在视频重新加载时恢复" } }, - "title": "Miscellaneous settings" + "title": "其他设置" }, "onScreenDisplaySettings": { "color": { @@ -269,33 +269,33 @@ }, "playbackSpeed": { "enable": { - "label": "Forced playback speed", - "title": "Sets the video speed to what you choose below" + "label": "强制播放速度", + "title": "将视频速度设置为您在下面选择的内容" }, "select": { - "label": "Player speed", + "label": "播放速度", "title": "将视频播放速度设为" }, "title": "播放速度设置" }, "screenshotButton": { "enable": { - "label": "Screenshot button", - "title": "Adds a button to the player to take a screenshot of the video" + "label": "屏幕截图按钮", + "title": "向播放器添加一个按钮以拍摄视频的截图" }, "saveAs": { - "clipboard": "Clipboard", - "file": "File" + "clipboard": "剪贴板", + "file": "文件" }, "selectFormat": { - "label": "Screenshot format", - "title": "The format to save the screenshot in" + "label": "截图格式", + "title": "保存屏幕截图的格式" }, "selectSaveAs": { - "label": "Screenshot save type", - "title": "The screenshot save type" + "label": "屏幕截图保存类型", + "title": "屏幕截图保存类型" }, - "title": "Screenshot settings" + "title": "屏幕截图选项" }, "scrollWheelSpeedControl": { "adjustmentSteps": { @@ -319,8 +319,8 @@ "title": "调整每轮滚动的音量变化" }, "enable": { - "label": "Scroll wheel volume control", - "title": "Lets you use the scroll wheel to control the volume of the video you're watching" + "label": "滚轮控制音量", + "title": "让您使用滚轮来控制您正在观看的视频音量" }, "holdModifierKey": { "enable": { @@ -339,7 +339,7 @@ "title": "按住右键以启用滚轮音量控制" } }, - "title": "Scroll wheel volume control settings" + "title": "滚轮控制音量设置" }, "volumeBoost": { "boostAmount": { @@ -347,7 +347,7 @@ "title": "音量提升量(分贝)" }, "enable": { - "label": "Volume boost", + "label": "音量增强", "title": "启用音量增强" }, "mode": { diff --git a/public/locales/zh-TW.json b/public/locales/zh-TW.json index 99f775d3..16ea32b4 100644 --- a/public/locales/zh-TW.json +++ b/public/locales/zh-TW.json @@ -14,15 +14,15 @@ "loopButton": { "label": "循環播放", "toggle": { - "off": "Loop off", - "on": "Loop on" + "off": "關閉循環播放", + "on": "啟用循環播放" } }, "maximizePlayerButton": { "label": "最大化", "toggle": { - "off": "Maximize off", - "on": "Maximize on" + "off": "關閉最大化", + "on": "啟用最大化" } }, "openTranscriptButton": { @@ -41,8 +41,8 @@ "volumeBoostButton": { "label": "音量增強", "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" + "off": "關閉音量增強", + "on": "啟用音量增強" } } } @@ -100,33 +100,33 @@ "buttonPlacement": { "select": { "buttonNames": { - "loopButton": "Loop button", - "maximizePlayerButton": "Maximize button", - "openTranscriptButton": "Open Transcript button", - "screenshotButton": "Screenshot button", - "volumeBoostButton": "Volume Boost button" + "loopButton": "循環播放按鈕", + "maximizePlayerButton": "最大化按鈕", + "openTranscriptButton": "開啟文字記錄按鈕", + "screenshotButton": "螢幕截圖按鈕", + "volumeBoostButton": "音量增強按鈕" }, "options": { "below_player": { - "placement": "below the player controls", - "value": "Below Player" + "placement": "於播放器底下", + "value": "播放器底下" }, "feature_menu": { - "placement": "in the feature menu", - "value": "Feature Menu" + "placement": "於功能選單", + "value": "功能選單" }, "player_controls_left": { - "placement": "on the left side of player controls", - "value": "Left Controls" + "placement": "於播放器左邊", + "value": "播放器左邊" }, "player_controls_right": { - "placement": "on the right side of player controls", - "value": "Right Controls" + "placement": "於播放器右邊", + "value": "播放器右邊" } }, - "title": "Place the {{BUTTON_NAME}} {{PLACEMENT}}" + "title": "將{{BUTTON_NAME}}放{{PLACEMENT}}" }, - "title": "Button Placement Settings" + "title": "按鈕位置設定" }, "customCSS": { "editor": { From 16da25c7f54f78ac5b80995265bee8f11ace0ad2 Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Mon, 29 Jan 2024 18:42:00 -0500 Subject: [PATCH 02/15] feat: video history resume type (automatic, prompt) --- public/locales/ca-ES.json | 21 ++++++-- public/locales/cs-CZ.json | 21 ++++++-- public/locales/de-DE.json | 21 ++++++-- public/locales/en-US.json | 21 ++++++-- public/locales/en-US.json.d.ts | 18 +++++-- public/locales/es-ES.json | 71 ++++++++++++++++------------ public/locales/fa-IR.json | 21 ++++++-- public/locales/fr-FR.json | 21 ++++++-- public/locales/he-IL.json | 21 ++++++-- public/locales/hi-IN.json | 21 ++++++-- public/locales/it-IT.json | 21 ++++++-- public/locales/ja-JP.json | 21 ++++++-- public/locales/pl-PL.json | 21 ++++++-- public/locales/pt-BR.json | 21 ++++++-- public/locales/ru-RU.json | 21 ++++++-- public/locales/tr-TR.json | 21 ++++++-- public/locales/zh-CN.json | 21 ++++++-- public/locales/zh-TW.json | 21 ++++++-- src/components/Settings/Settings.tsx | 40 ++++++++++++---- src/features/videoHistory/index.ts | 6 ++- src/types/index.ts | 3 ++ src/utils/constants.ts | 3 ++ 22 files changed, 370 insertions(+), 107 deletions(-) diff --git a/public/locales/ca-ES.json b/public/locales/ca-ES.json index 715cf5ca..69a645e3 100644 --- a/public/locales/ca-ES.json +++ b/public/locales/ca-ES.json @@ -209,10 +209,6 @@ "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" - }, - "videoHistory": { - "label": "Video history", - "title": "Keeps track of where you left off on videos you were watching and asks if you want to resume when that video loads again" } }, "title": "Miscellaneous settings" @@ -341,6 +337,23 @@ }, "title": "Scroll wheel volume control settings" }, + "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)", diff --git a/public/locales/cs-CZ.json b/public/locales/cs-CZ.json index 794df85f..3c22ec67 100644 --- a/public/locales/cs-CZ.json +++ b/public/locales/cs-CZ.json @@ -209,10 +209,6 @@ "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" - }, - "videoHistory": { - "label": "Video history", - "title": "Keeps track of where you left off on videos you were watching and asks if you want to resume when that video loads again" } }, "title": "Miscellaneous settings" @@ -341,6 +337,23 @@ }, "title": "Scroll wheel volume control settings" }, + "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)", diff --git a/public/locales/de-DE.json b/public/locales/de-DE.json index 2b242c0b..afec6dc7 100644 --- a/public/locales/de-DE.json +++ b/public/locales/de-DE.json @@ -209,10 +209,6 @@ "rememberLastVolume": { "label": "Letzte Lautstärke merken", "title": "Speichere die Lautstärke des letzten Videos, das du gesehen hast und setze es beim Öffnen eines neuen Videos" - }, - "videoHistory": { - "label": "Videoverlauf", - "title": "Merkt sich den Zeitpunkt pausieren des Videos. Fragt beim erneut laden, ob man Vortfahren möchte." } }, "title": "Weitere Einstellungen" @@ -341,6 +337,23 @@ }, "title": "Lautstärke durch Mausrad ändern" }, + "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)", diff --git a/public/locales/en-US.json b/public/locales/en-US.json index 5ef01e7d..b0c773c9 100644 --- a/public/locales/en-US.json +++ b/public/locales/en-US.json @@ -209,10 +209,6 @@ "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" - }, - "videoHistory": { - "label": "Video history", - "title": "Keeps track of where you left off on videos you were watching and asks if you want to resume when that video loads again" } }, "title": "Miscellaneous settings" @@ -341,6 +337,23 @@ }, "title": "Scroll wheel volume control settings" }, + "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)", diff --git a/public/locales/en-US.json.d.ts b/public/locales/en-US.json.d.ts index 34f8dd91..222e091e 100644 --- a/public/locales/en-US.json.d.ts +++ b/public/locales/en-US.json.d.ts @@ -154,10 +154,6 @@ interface EnUS { label: "Remember last volume"; title: "Remembers the volume of the last video you were watching and sets it when you open a new video"; }; - videoHistory: { - label: "Video history"; - title: "Keeps track of where you left off on videos you were watching and asks if you want to resume when that video loads again"; - }; }; title: "Miscellaneous settings"; }; @@ -256,6 +252,20 @@ interface EnUS { }; title: "Scroll wheel volume control settings"; }; + 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" }; diff --git a/public/locales/es-ES.json b/public/locales/es-ES.json index f6e36b03..6e32f895 100644 --- a/public/locales/es-ES.json +++ b/public/locales/es-ES.json @@ -14,8 +14,8 @@ "loopButton": { "label": "Bucle", "toggle": { - "off": "Loop off", - "on": "Loop on" + "off": "Desactivar repetición", + "on": "Activar repetición" } }, "maximizePlayerButton": { @@ -100,50 +100,50 @@ "buttonPlacement": { "select": { "buttonNames": { - "loopButton": "Loop button", - "maximizePlayerButton": "Maximize button", - "openTranscriptButton": "Open Transcript button", - "screenshotButton": "Screenshot button", - "volumeBoostButton": "Volume Boost button" + "loopButton": "Botón de repetición", + "maximizePlayerButton": "Maximizar botón", + "openTranscriptButton": "Abrir botón de transcripción", + "screenshotButton": "Botón de captura de pantalla", + "volumeBoostButton": "Botón Aumento de Volumen" }, "options": { "below_player": { - "placement": "below the player controls", - "value": "Below Player" + "placement": "debajo de los controles del reproductor", + "value": "Debajo del reproductor" }, "feature_menu": { "placement": "in the feature menu", - "value": "Feature Menu" + "value": "Menú de funciones" }, "player_controls_left": { - "placement": "on the left side of player controls", - "value": "Left Controls" + "placement": "a la izquierda de los controles del reproductor", + "value": "Controles a la izquierda" }, "player_controls_right": { - "placement": "on the right side of player controls", - "value": "Right Controls" + "placement": "a la derecha de los controles del reproductor", + "value": "Controles a la derecha" } }, - "title": "Place the {{BUTTON_NAME}} {{PLACEMENT}}" + "title": "Coloca el {{BUTTON_NAME}} a la {{PLACEMENT}}" }, - "title": "Button Placement Settings" + "title": "Ajustes de posición de los botones" }, "customCSS": { "editor": { - "collapse": "Collapse Editor", - "expand": "Expand Editor", - "noProblems": "No problems found." + "collapse": "Colapsar editor", + "expand": "Expandir editor", + "noProblems": "No se encontraron problemas." }, "enable": { - "label": "Enable custom CSS", - "title": "Enables custom CSS to be applied to the page" + "label": "Habilitar CSS personalizado", + "title": "Permite aplicar CSS personalizado a la página" }, - "title": "Custom CSS Settings" + "title": "Ajustes de CSS personalizados" }, "featureMenu": { "openType": { "select": { - "label": "Menu Activation Type", + "label": "Tipo de activación del menú", "options": { "click": "Click", "hover": "Pasar el cursor por encima" @@ -209,10 +209,6 @@ "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" - }, - "videoHistory": { - "label": "Historial de vídeo", - "title": "Recuerda el progreso de los videos y te pregunta si quieres reanudarlo donde lo dejaste cuando vuelves a reproducirlo" } }, "title": "Ajustes varios" @@ -259,10 +255,10 @@ "type": { "label": "Tipo", "options": { - "line": "Line", + "line": "Línea", "no_display": "No mostrar", "round": "Round", - "text": "Text" + "text": "Texto" }, "title": "Select the type of On-Screen Display" } @@ -341,6 +337,23 @@ }, "title": "Ajustes de control de volumen con la rueda del ratón" }, + "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)", diff --git a/public/locales/fa-IR.json b/public/locales/fa-IR.json index 4634e190..6d412759 100644 --- a/public/locales/fa-IR.json +++ b/public/locales/fa-IR.json @@ -209,10 +209,6 @@ "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" - }, - "videoHistory": { - "label": "Video history", - "title": "Keeps track of where you left off on videos you were watching and asks if you want to resume when that video loads again" } }, "title": "Miscellaneous settings" @@ -341,6 +337,23 @@ }, "title": "Scroll wheel volume control settings" }, + "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)", diff --git a/public/locales/fr-FR.json b/public/locales/fr-FR.json index b8b35282..7b4e2e24 100644 --- a/public/locales/fr-FR.json +++ b/public/locales/fr-FR.json @@ -209,10 +209,6 @@ "rememberLastVolume": { "label": "Sauvegarder le volume précédent", "title": "Se souvenir du volume de la dernière vidéo que vous regardiez et définissez-le lorsque vous ouvrez une nouvelle vidéo" - }, - "videoHistory": { - "label": "Historique des vidéos", - "title": "Garde la trace de l'endroit où vous vous êtes arrêté sur les vidéos que vous regardiez et demander si vous voulez reprendre lorsque cette vidéo se charge à nouveau" } }, "title": "Autre paramètres" @@ -341,6 +337,23 @@ }, "title": "Réglages du contrôle du volume par la molette de défilement" }, + "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": "Gain du volume (dB)", diff --git a/public/locales/he-IL.json b/public/locales/he-IL.json index 732fc000..ce46bf0e 100644 --- a/public/locales/he-IL.json +++ b/public/locales/he-IL.json @@ -209,10 +209,6 @@ "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" - }, - "videoHistory": { - "label": "Video history", - "title": "Keeps track of where you left off on videos you were watching and asks if you want to resume when that video loads again" } }, "title": "Miscellaneous settings" @@ -341,6 +337,23 @@ }, "title": "Scroll wheel volume control settings" }, + "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)", diff --git a/public/locales/hi-IN.json b/public/locales/hi-IN.json index d41c34c3..a450823f 100644 --- a/public/locales/hi-IN.json +++ b/public/locales/hi-IN.json @@ -209,10 +209,6 @@ "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" - }, - "videoHistory": { - "label": "Video history", - "title": "Keeps track of where you left off on videos you were watching and asks if you want to resume when that video loads again" } }, "title": "Miscellaneous settings" @@ -341,6 +337,23 @@ }, "title": "Scroll wheel volume control settings" }, + "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)", diff --git a/public/locales/it-IT.json b/public/locales/it-IT.json index e6f3ccd7..12130c69 100644 --- a/public/locales/it-IT.json +++ b/public/locales/it-IT.json @@ -209,10 +209,6 @@ "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" - }, - "videoHistory": { - "label": "Video history", - "title": "Keeps track of where you left off on videos you were watching and asks if you want to resume when that video loads again" } }, "title": "Miscellaneous settings" @@ -341,6 +337,23 @@ }, "title": "Scroll wheel volume control settings" }, + "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)", diff --git a/public/locales/ja-JP.json b/public/locales/ja-JP.json index 49d00b28..af842019 100644 --- a/public/locales/ja-JP.json +++ b/public/locales/ja-JP.json @@ -209,10 +209,6 @@ "rememberLastVolume": { "label": "前音量を覚える", "title": "新ビデオの音量を前動画の音量に変化する。" - }, - "videoHistory": { - "label": "動画歴史", - "title": "視聴中のビデオで中断した場所を追跡し、その動画が再び読み込まれたときに再開するかどうかを尋ねます" } }, "title": "他の設定" @@ -341,6 +337,23 @@ }, "title": "スクロールホイール音量制御設定" }, + "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": "音量ブーストの量(dB)", diff --git a/public/locales/pl-PL.json b/public/locales/pl-PL.json index 1aeefd79..411e4f3b 100644 --- a/public/locales/pl-PL.json +++ b/public/locales/pl-PL.json @@ -209,10 +209,6 @@ "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" - }, - "videoHistory": { - "label": "Video history", - "title": "Keeps track of where you left off on videos you were watching and asks if you want to resume when that video loads again" } }, "title": "Miscellaneous settings" @@ -341,6 +337,23 @@ }, "title": "Scroll wheel volume control settings" }, + "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)", diff --git a/public/locales/pt-BR.json b/public/locales/pt-BR.json index b7de151a..b0586e8c 100644 --- a/public/locales/pt-BR.json +++ b/public/locales/pt-BR.json @@ -209,10 +209,6 @@ "rememberLastVolume": { "label": "Lembrar o último volume", "title": "Lembra o volume do último vídeo que você estava assistindo e o coloca quando você abrir um novo vídeo" - }, - "videoHistory": { - "label": "Histórico de vídeos", - "title": "Mantém o controle de onde você parou nos vídeos que você estava assistindo e pergunta se você deseja retomar quando aquele vídeo é carregado novamente" } }, "title": "Configurações diversas" @@ -341,6 +337,23 @@ }, "title": "Configurações de controle do volume por roda do mouse" }, + "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": "Quantidade de impulsão de volume (dB)", diff --git a/public/locales/ru-RU.json b/public/locales/ru-RU.json index 3f799cab..2844c16f 100644 --- a/public/locales/ru-RU.json +++ b/public/locales/ru-RU.json @@ -209,10 +209,6 @@ "rememberLastVolume": { "label": "Запомнить уровень громкости", "title": "Запоминает громкость последнего видео, которое вы смотрели и устанавливает это значение при открытии нового видео" - }, - "videoHistory": { - "label": "Включить историю видео", - "title": "Отслеживает то, на каком моменте просмотра видео вы остановились и спрашивает, если вы хотите продолжить с этого момента когда это видео загружается снова" } }, "title": "Прочие параметры" @@ -341,6 +337,23 @@ }, "title": "Настройки управления громкостью с помощью колеса прокрутки" }, + "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": "Значение увеличения громкости (дБ)", diff --git a/public/locales/tr-TR.json b/public/locales/tr-TR.json index 9915e7ab..730ab0f8 100644 --- a/public/locales/tr-TR.json +++ b/public/locales/tr-TR.json @@ -209,10 +209,6 @@ "rememberLastVolume": { "label": "Son ses hacmini hatırla", "title": "Remembers the volume of the last video you were watching and sets it when you open a new video" - }, - "videoHistory": { - "label": "Video geçmişini etkinleştir", - "title": "İzlediğiniz videolarda nerede kaldığınızı takip eder ve video tekrar yüklendiğinde devam etmek isteyip istemediğinizi sorar" } }, "title": "Çeşitli ayarlar" @@ -341,6 +337,23 @@ }, "title": "Kaydırma tekerleği ile ses seviyesi kontrolü ayarları" }, + "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)", diff --git a/public/locales/zh-CN.json b/public/locales/zh-CN.json index 4e17a4de..94fb93d4 100644 --- a/public/locales/zh-CN.json +++ b/public/locales/zh-CN.json @@ -209,10 +209,6 @@ "rememberLastVolume": { "label": "记住最后一个音量", "title": "记住最后一个视频的音量并在打开新视频时设置" - }, - "videoHistory": { - "label": "视频历史记录", - "title": "保持跟踪您在视频上离开的位置,并询问您是否想要在视频重新加载时恢复" } }, "title": "其他设置" @@ -341,6 +337,23 @@ }, "title": "滚轮控制音量设置" }, + "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": "音量提升量(分贝)", diff --git a/public/locales/zh-TW.json b/public/locales/zh-TW.json index 16ea32b4..dbae13c1 100644 --- a/public/locales/zh-TW.json +++ b/public/locales/zh-TW.json @@ -209,10 +209,6 @@ "rememberLastVolume": { "label": "記住上次播放音量", "title": "記住上次的播放音量,設定到新播放的影片上" - }, - "videoHistory": { - "label": "觀看記錄", - "title": "記錄上次影片的播放時間,載入影片時詢問是否從該時間繼續播放" } }, "title": "其他設定" @@ -341,6 +337,23 @@ }, "title": "滾輪音量控制設定" }, + "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": "音量增強度 (分貝)", diff --git a/src/components/Settings/Settings.tsx b/src/components/Settings/Settings.tsx index 8fc6835c..30dd3072 100644 --- a/src/components/Settings/Settings.tsx +++ b/src/components/Settings/Settings.tsx @@ -1,4 +1,4 @@ -import type { ButtonPlacement, ModifierKey, Path, VolumeBoostMode, configuration, configurationKeys } from "@/src/types"; +import type { ButtonPlacement, ModifierKey, Path, VideoHistoryResumeType, VolumeBoostMode, configuration, configurationKeys } from "@/src/types"; import type EnUS from "public/locales/en-US.json"; import type { ChangeEvent, ChangeEventHandler } from "react"; @@ -385,6 +385,16 @@ export default function Settings() { label: string; value: ButtonPlacement; }[] as SelectOption[]; + const videoHistoryResumeTypeOptions: SelectOption[] = [ + { + label: t("settings.sections.videoHistory.resumeType.select.options.automatic"), + value: "automatic" + }, + { + label: t("settings.sections.videoHistory.resumeType.select.options.prompt"), + value: "prompt" + } + ] as { label: string; value: VideoHistoryResumeType }[] as SelectOption[]; const settingsImportChange: ChangeEventHandler = (event): void => { void (async () => { const { target } = event; @@ -534,14 +544,6 @@ export default function Settings() { title={t("settings.sections.miscellaneous.features.maximizePlayerButton.title")} type="checkbox" /> - + + + + + void) { const optionsData = await waitForSpecificMessage("options", "request_data", "content"); const { data: { - options: { enable_video_history: enableVideoHistory } + options: { enable_video_history: enableVideoHistory, video_history_resume_type } } } = optionsData; if (!enableVideoHistory) return; @@ -82,6 +82,10 @@ export async function promptUserToResumeVideo(cb: () => void) { data: { video_history_entry } } = videoHistoryOneData; if (video_history_entry && video_history_entry.status === "watching" && video_history_entry.timestamp > 0) { + if (video_history_resume_type === "automatic") { + void playerContainer.seekTo(video_history_entry.timestamp, true); + return cb(); + } createResumePrompt(video_history_entry, playerContainer, cb); } else { cb(); diff --git a/src/types/index.ts b/src/types/index.ts index e5a7fbfe..19471277 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -61,6 +61,8 @@ export const featuresThatHaveButtons = Object.keys({ export type ButtonPlacementConfiguration = { [Key in FeaturesThatHaveButtons]: ButtonPlacement; }; +export const videoHistoryResumeType = ["automatic", "prompt"] as const; +export type VideoHistoryResumeType = (typeof videoHistoryResumeType)[number]; export type configuration = { button_placements: ButtonPlacementConfiguration; custom_css_code: string; @@ -98,6 +100,7 @@ export type configuration = { scroll_wheel_speed_control_modifier_key: ModifierKey; scroll_wheel_volume_control_modifier_key: ModifierKey; speed_adjustment_steps: number; + video_history_resume_type: VideoHistoryResumeType; volume_adjustment_steps: number; volume_boost_amount: number; volume_boost_mode: VolumeBoostMode; diff --git a/src/utils/constants.ts b/src/utils/constants.ts index be2d1541..2ee4015e 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -13,6 +13,7 @@ import { onScreenDisplayType, screenshotFormat, screenshotType, + videoHistoryResumeType, volumeBoostMode, youtubePlayerQualityLevel } from "../types"; @@ -64,6 +65,7 @@ export const defaultConfiguration = { scroll_wheel_speed_control_modifier_key: "altKey", scroll_wheel_volume_control_modifier_key: "ctrlKey", speed_adjustment_steps: 0.25, + video_history_resume_type: "prompt", volume_adjustment_steps: 5, volume_boost_amount: 1, volume_boost_mode: "global" @@ -124,6 +126,7 @@ export const configurationImportSchema: TypeToPartialZodSchema< scroll_wheel_speed_control_modifier_key: z.enum(modifierKey).optional(), scroll_wheel_volume_control_modifier_key: z.enum(modifierKey).optional(), speed_adjustment_steps: z.number().min(0.05).max(1.0).step(0.05).optional(), + video_history_resume_type: z.enum(videoHistoryResumeType).optional(), volume_adjustment_steps: z.number().min(1).max(100).optional(), volume_boost_amount: z.number().optional(), volume_boost_mode: z.enum(volumeBoostMode).optional() From 1089be5fef0058e5c11cb2c1cd095d0145790238 Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Mon, 29 Jan 2024 20:05:29 -0500 Subject: [PATCH 03/15] refactor: re-design resume prompt --- src/features/videoHistory/index.ts | 83 ++++++++---------------------- 1 file changed, 21 insertions(+), 62 deletions(-) diff --git a/src/features/videoHistory/index.ts b/src/features/videoHistory/index.ts index bd279eeb..0e9b807e 100644 --- a/src/features/videoHistory/index.ts +++ b/src/features/videoHistory/index.ts @@ -97,24 +97,24 @@ let animationFrameId: null | number = null; let start: null | number = null; function createResumePrompt(videoHistoryEntry: VideoHistoryEntry, playerContainer: YouTubePlayerDiv, cb: () => void) { const progressBarId = "resume-prompt-progress-bar"; - const overlayId = "resume-prompt-overlay"; const closeButtonId = "resume-prompt-close-button"; - const resumeButtonId = "resume-prompt-button"; const promptId = "resume-prompt"; - const progressBarDuration = 15; + const progressBarDuration = Infinity; const prompt = createStyledElement({ elementId: promptId, elementType: "div", styles: { - backgroundColor: "#181a1b", + backgroundColor: "rgba(28, 28, 28, 0.9)", borderRadius: "5px", - bottom: "10px", boxShadow: "0px 0px 10px rgba(0, 0, 0, 0.2)", - left: "10px", + cursor: "pointer", + left: "50%", padding: "12px", paddingBottom: "17px", - position: "fixed", + position: "absolute", + top: "50%", + transform: "translate(-50%, -50%)", transition: "all 0.5s ease-in-out", zIndex: "25000" } @@ -123,7 +123,7 @@ function createResumePrompt(videoHistoryEntry: VideoHistoryEntry, playerContaine elementId: progressBarId, elementType: "div", styles: { - backgroundColor: "#007acc", + backgroundColor: "#ff0000", borderBottomLeftRadius: "5px", borderBottomRightRadius: "5px", bottom: "0", @@ -136,21 +136,6 @@ function createResumePrompt(videoHistoryEntry: VideoHistoryEntry, playerContaine } }); - const overlay = createStyledElement({ - elementId: overlayId, - elementType: "div", - styles: { - backgroundColor: "rgba(0, 0, 0, 0.75)", - cursor: "pointer", - height: "100%", - left: "0", - position: "fixed", - top: "0", - width: "100%", - zIndex: "2500" - } - }); - const closeButton = createStyledElement({ elementId: closeButtonId, elementType: "button", @@ -169,27 +154,10 @@ function createResumePrompt(videoHistoryEntry: VideoHistoryEntry, playerContaine }); closeButton.textContent = "ₓ"; - const resumeButton = createStyledElement({ - elementId: resumeButtonId, - elementType: "button", - styles: { - backgroundColor: "hsl(213, 80%, 50%)", - border: "transparent", - borderRadius: "5px", - boxShadow: "0px 0px 5px rgba(0, 0, 0, 0.2)", - color: "white", - cursor: "pointer", - padding: "5px", - textAlign: "center", - transition: "all 0.5s ease-in-out", - verticalAlign: "middle" - } - }); - resumeButton.textContent = window.i18nextInstance.t("pages.content.features.videoHistory.resumeButton"); + prompt.textContent = window.i18nextInstance.t("pages.content.features.videoHistory.resumeButton"); function startCountdown() { if (prompt) prompt.style.display = "block"; - if (overlay) overlay.style.display = "block"; if (animationFrameId) { cancelAnimationFrame(animationFrameId); animationFrameId = null; @@ -211,7 +179,6 @@ function createResumePrompt(videoHistoryEntry: VideoHistoryEntry, playerContaine function hidePrompt() { if (animationFrameId) cancelAnimationFrame(animationFrameId); prompt.style.display = "none"; - overlay.style.display = "none"; cb(); } @@ -226,38 +193,30 @@ function createResumePrompt(videoHistoryEntry: VideoHistoryEntry, playerContaine prompt.appendChild(progressBar); } - if (!elementExists(overlayId)) { - document.body.appendChild(overlay); - } - if (!elementExists(closeButtonId)) { - const { listener: resumePromptCloseButtonMouseOverListener } = createTooltip({ - element: closeButton, - featureName: "videoHistory", - id: "yte-feature-videoHistory-tooltip", - text: window.i18nextInstance.t("pages.content.features.videoHistory.resumePrompt.close") - }); - eventManager.addEventListener(closeButton, "mouseover", resumePromptCloseButtonMouseOverListener, "videoHistory"); prompt.appendChild(closeButton); } + const { listener: resumePromptCloseButtonMouseOverListener } = createTooltip({ + element: closeButton, + featureName: "videoHistory", + id: "yte-feature-videoHistory-tooltip", + text: window.i18nextInstance.t("pages.content.features.videoHistory.resumePrompt.close") + }); + eventManager.removeEventListener(closeButton, "mouseover", "videoHistory"); + eventManager.addEventListener(closeButton, "mouseover", resumePromptCloseButtonMouseOverListener, "videoHistory"); startCountdown(); - if (elementExists(resumeButtonId)) { - eventManager.removeEventListener(resumeButton, "click", "videoHistory"); - } - const closeListener = () => { hidePrompt(); }; - - eventManager.addEventListener(resumeButton, "click", resumeButtonClickListener, "videoHistory"); - eventManager.addEventListener(overlay, "click", closeListener, "videoHistory"); + eventManager.removeEventListener(prompt, "click", "videoHistory"); + eventManager.addEventListener(prompt, "click", resumeButtonClickListener, "videoHistory"); + eventManager.removeEventListener(closeButton, "click", "videoHistory"); eventManager.addEventListener(closeButton, "click", closeListener, "videoHistory"); // Display the prompt if (!elementExists(promptId)) { - document.body.appendChild(prompt); - prompt.appendChild(resumeButton); + playerContainer.appendChild(prompt); } } From 9449a4c421ad777dacc5c4998092f95cc7a27740 Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Mon, 29 Jan 2024 20:06:14 -0500 Subject: [PATCH 04/15] Update progressBarDuration in createResumePrompt function --- src/features/videoHistory/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/videoHistory/index.ts b/src/features/videoHistory/index.ts index 0e9b807e..6044472e 100644 --- a/src/features/videoHistory/index.ts +++ b/src/features/videoHistory/index.ts @@ -99,7 +99,7 @@ function createResumePrompt(videoHistoryEntry: VideoHistoryEntry, playerContaine const progressBarId = "resume-prompt-progress-bar"; const closeButtonId = "resume-prompt-close-button"; const promptId = "resume-prompt"; - const progressBarDuration = Infinity; + const progressBarDuration = 15; const prompt = createStyledElement({ elementId: promptId, From 8fbf8c9adbcfc415a1d676f66a4b46017279bc9e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Jan 2024 01:30:43 +0000 Subject: [PATCH 05/15] build(deps-dev): bump tailwindcss from 3.4.0 to 3.4.1 Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss) from 3.4.0 to 3.4.1. - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/master/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/compare/v3.4.0...v3.4.1) --- updated-dependencies: - dependency-name: tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] (cherry picked from commit 65fbe665137e6dcfe53a0ac3f581066d0648a093) --- package-lock.json | 10 +++++----- yarn.lock | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index c4d75986..d4de7243 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "youtube-enhancer", - "version": "1.20.1", + "version": "1.21.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "youtube-enhancer", - "version": "1.20.1", + "version": "1.21.2", "license": "MIT", "dependencies": { "@formkit/auto-animate": "^0.8.1", @@ -11748,9 +11748,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.0.tgz", - "integrity": "sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", "dev": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", diff --git a/yarn.lock b/yarn.lock index acbdf684..995c5706 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5574,9 +5574,9 @@ tailwind-merge@^2.0.0: "@babel/runtime" "^7.23.5" tailwindcss@^3.3.5: - version "3.4.0" - resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.0.tgz" - integrity sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA== + version "3.4.1" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.1.tgz#f512ca5d1dd4c9503c7d3d28a968f1ad8f5c839d" + integrity sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA== dependencies: "@alloc/quick-lru" "^5.2.0" arg "^5.0.2" From 328d8771500a3755c62a4ce4b9fad794a57cf28d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Jan 2024 01:30:13 +0000 Subject: [PATCH 06/15] build(deps-dev): bump @types/chrome from 0.0.254 to 0.0.259 Bumps [@types/chrome](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/chrome) from 0.0.254 to 0.0.259. - [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-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] (cherry picked from commit f8c0e45a7e2523ce748f0a3a46f02904506d261c) --- package-lock.json | 8 ++++---- package.json | 2 +- yarn.lock | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index d4de7243..c1ad8d20 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "@thedutchcoder/postcss-rem-to-px": "^0.0.2", "@total-typescript/ts-reset": "^0.5.1", "@types/archiver": "^6.0.1", - "@types/chrome": "^0.0.254", + "@types/chrome": "^0.0.259", "@types/node": "^20.9.0", "@types/react": "^18.2.37", "@types/react-dom": "^18.2.15", @@ -1973,9 +1973,9 @@ } }, "node_modules/@types/chrome": { - "version": "0.0.254", - "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.254.tgz", - "integrity": "sha512-svkOGKwA+6ZZuk9xtrYun8MYpNY/9hD17rgZ19v3KunhsK1ZOKaMESw12/1AXLh1u3UPA8jQIRi2370DXv9wgw==", + "version": "0.0.259", + "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.259.tgz", + "integrity": "sha512-WP1HsLqKgoUwR/4dYiTfmOSUG5B05+xrPLbqboO15nuaUC+aBYxwB9ixVyLPYY9D+vocJK9rzH5g1lpqVrJqhg==", "dev": true, "dependencies": { "@types/filesystem": "*", diff --git a/package.json b/package.json index 5879d41e..f49be2a8 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "@thedutchcoder/postcss-rem-to-px": "^0.0.2", "@total-typescript/ts-reset": "^0.5.1", "@types/archiver": "^6.0.1", - "@types/chrome": "^0.0.254", + "@types/chrome": "^0.0.259", "@types/node": "^20.9.0", "@types/react": "^18.2.37", "@types/react-dom": "^18.2.15", diff --git a/yarn.lock b/yarn.lock index 995c5706..b530d77a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -961,10 +961,10 @@ dependencies: "@types/readdir-glob" "*" -"@types/chrome@^0.0.254": - version "0.0.254" - resolved "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.254.tgz" - integrity sha512-svkOGKwA+6ZZuk9xtrYun8MYpNY/9hD17rgZ19v3KunhsK1ZOKaMESw12/1AXLh1u3UPA8jQIRi2370DXv9wgw== +"@types/chrome@^0.0.259": + version "0.0.259" + resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.259.tgz#5e55941b3f4067d088c0ad81c094733128db0f0a" + integrity sha512-WP1HsLqKgoUwR/4dYiTfmOSUG5B05+xrPLbqboO15nuaUC+aBYxwB9ixVyLPYY9D+vocJK9rzH5g1lpqVrJqhg== dependencies: "@types/filesystem" "*" "@types/har-format" "*" From da0f4e4672bc6c6b441207a270c2927f277bb32f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Jan 2024 01:29:52 +0000 Subject: [PATCH 07/15] build(deps-dev): bump @types/react from 18.2.47 to 18.2.48 Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 18.2.47 to 18.2.48. - [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-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] (cherry picked from commit 06ac1a18b6efb4cfd6d0b1762043d7c6c90061df) --- package-lock.json | 6 +++--- yarn.lock | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index c1ad8d20..30db828e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2042,9 +2042,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.2.47", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.47.tgz", - "integrity": "sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ==", + "version": "18.2.48", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz", + "integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==", "dev": true, "dependencies": { "@types/prop-types": "*", diff --git a/yarn.lock b/yarn.lock index b530d77a..0549759b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1026,9 +1026,9 @@ "@types/react" "*" "@types/react@*", "@types/react@^18.2.37": - version "18.2.47" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.47.tgz#85074b27ab563df01fbc3f68dc64bf7050b0af40" - integrity sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ== + version "18.2.48" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.48.tgz#11df5664642d0bd879c1f58bc1d37205b064e8f1" + integrity sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" From f4e69cfe94ff2994abad001d4a49baed3c2a17f3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Jan 2024 01:29:30 +0000 Subject: [PATCH 08/15] build(deps-dev): bump autoprefixer from 10.4.16 to 10.4.17 Bumps [autoprefixer](https://github.com/postcss/autoprefixer) from 10.4.16 to 10.4.17. - [Release notes](https://github.com/postcss/autoprefixer/releases) - [Changelog](https://github.com/postcss/autoprefixer/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/autoprefixer/compare/10.4.16...10.4.17) --- updated-dependencies: - dependency-name: autoprefixer dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] (cherry picked from commit c0d3448b6a416d498c52e7c35452e7ad2d690ff4) --- package-lock.json | 42 ++++++++++++++++++------------------ yarn.lock | 54 +++++++++++++++++++++++------------------------ 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/package-lock.json b/package-lock.json index 30db828e..a6356e3c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2767,9 +2767,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.16", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", - "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "version": "10.4.17", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz", + "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", "dev": true, "funding": [ { @@ -2786,9 +2786,9 @@ } ], "dependencies": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001538", - "fraction.js": "^4.3.6", + "browserslist": "^4.22.2", + "caniuse-lite": "^1.0.30001578", + "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -2889,9 +2889,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "version": "4.22.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", + "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", "dev": true, "funding": [ { @@ -2908,9 +2908,9 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", + "caniuse-lite": "^1.0.30001580", + "electron-to-chromium": "^1.4.648", + "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, "bin": { @@ -2962,9 +2962,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001561", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz", - "integrity": "sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==", + "version": "1.0.30001581", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz", + "integrity": "sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==", "dev": true, "funding": [ { @@ -3602,9 +3602,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.581", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.581.tgz", - "integrity": "sha512-6uhqWBIapTJUxgPTCHH9sqdbxIMPt7oXl0VcAL1kOtlU6aECdcMncCrX5Z7sHQ/invtrC9jUQUef7+HhO8vVFw==", + "version": "1.4.648", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.648.tgz", + "integrity": "sha512-EmFMarXeqJp9cUKu/QEciEApn0S/xRcpZWuAm32U7NgoZCimjsilKXHRO9saeEW55eHZagIDg6XTUOv32w9pjg==", "dev": true }, "node_modules/emoji-regex": { @@ -6275,9 +6275,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, "node_modules/nodemon": { diff --git a/yarn.lock b/yarn.lock index 0549759b..f90b6a7a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1466,13 +1466,13 @@ asynciterator.prototype@^1.0.0: has-symbols "^1.0.3" autoprefixer@^10.4.16: - version "10.4.16" - resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz" - integrity sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ== + version "10.4.17" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.17.tgz#35cd5695cbbe82f536a50fa025d561b01fdec8be" + integrity sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg== dependencies: - browserslist "^4.21.10" - caniuse-lite "^1.0.30001538" - fraction.js "^4.3.6" + browserslist "^4.22.2" + caniuse-lite "^1.0.30001578" + fraction.js "^4.3.7" normalize-range "^0.1.2" picocolors "^1.0.0" postcss-value-parser "^4.2.0" @@ -1556,14 +1556,14 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.21.10: - version "4.22.1" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz" - integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== +browserslist@^4.22.2: + version "4.22.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.3.tgz#299d11b7e947a6b843981392721169e27d60c5a6" + integrity sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A== dependencies: - caniuse-lite "^1.0.30001541" - electron-to-chromium "^1.4.535" - node-releases "^2.0.13" + caniuse-lite "^1.0.30001580" + electron-to-chromium "^1.4.648" + node-releases "^2.0.14" update-browserslist-db "^1.0.13" buffer-crc32@^0.2.1: @@ -1623,10 +1623,10 @@ camelcase-css@^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== -caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001541: - version "1.0.30001561" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz" - integrity sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw== +caniuse-lite@^1.0.30001578, caniuse-lite@^1.0.30001580: + version "1.0.30001581" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz#0dfd4db9e94edbdca67d57348ebc070dece279f4" + integrity sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ== cardinal@^2.1.1: version "2.1.1" @@ -2087,10 +2087,10 @@ eastasianwidth@^0.2.0: resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -electron-to-chromium@^1.4.535: - version "1.4.581" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.581.tgz" - integrity sha512-6uhqWBIapTJUxgPTCHH9sqdbxIMPt7oXl0VcAL1kOtlU6aECdcMncCrX5Z7sHQ/invtrC9jUQUef7+HhO8vVFw== +electron-to-chromium@^1.4.648: + version "1.4.648" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.648.tgz#c7b46c9010752c37bb4322739d6d2dd82354fbe4" + integrity sha512-EmFMarXeqJp9cUKu/QEciEApn0S/xRcpZWuAm32U7NgoZCimjsilKXHRO9saeEW55eHZagIDg6XTUOv32w9pjg== emoji-regex@^8.0.0: version "8.0.0" @@ -2677,9 +2677,9 @@ foreground-child@^3.1.0: cross-spawn "^7.0.0" signal-exit "^4.0.1" -fraction.js@^4.3.6: +fraction.js@^4.3.7: version "4.3.7" - resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== from2@^2.3.0: @@ -4097,10 +4097,10 @@ node-gyp@^10.0.0, node-gyp@^10.0.1: tar "^6.1.2" which "^4.0.0" -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== nodemon@^3.0.1: version "3.0.2" From e0219ce46f4bdc3585192cec8fdc86da0c33e5a4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Jan 2024 01:29:03 +0000 Subject: [PATCH 09/15] build(deps-dev): bump eslint-plugin-prettier from 5.1.2 to 5.1.3 Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.1.2 to 5.1.3. - [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases) - [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/master/CHANGELOG.md) - [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.1.2...v5.1.3) --- updated-dependencies: - dependency-name: eslint-plugin-prettier dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] (cherry picked from commit 1861aed925f209c5c24d1b4e367521f978225035) --- package-lock.json | 6 +++--- yarn.lock | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index a6356e3c..e692bf9a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4231,9 +4231,9 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.2.tgz", - "integrity": "sha512-dhlpWc9vOwohcWmClFcA+HjlvUpuyynYs0Rf+L/P6/0iQE6vlHW9l5bkfzN62/Stm9fbq8ku46qzde76T1xlSg==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0", diff --git a/yarn.lock b/yarn.lock index f90b6a7a..99c2ea84 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2359,9 +2359,9 @@ eslint-plugin-perfectionist@^2.3.0: natural-compare-lite "^1.4.0" eslint-plugin-prettier@^5.0.1: - version "5.1.2" - resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.2.tgz" - integrity sha512-dhlpWc9vOwohcWmClFcA+HjlvUpuyynYs0Rf+L/P6/0iQE6vlHW9l5bkfzN62/Stm9fbq8ku46qzde76T1xlSg== + version "5.1.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz#17cfade9e732cef32b5f5be53bd4e07afd8e67e1" + integrity sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw== dependencies: prettier-linter-helpers "^1.0.0" synckit "^0.8.6" From 63bc96bc273fab32cae534074439f6e2d7c1126c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Jan 2024 01:54:15 +0000 Subject: [PATCH 10/15] build(deps-dev): bump vite from 5.0.11 to 5.0.12 Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.0.11 to 5.0.12. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v5.0.12/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v5.0.12/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- package-lock.json | 12 ++++++------ package.json | 2 +- yarn.lock | 8 ++++---- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index c4d75986..735367ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "youtube-enhancer", - "version": "1.20.1", + "version": "1.21.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "youtube-enhancer", - "version": "1.20.1", + "version": "1.21.2", "license": "MIT", "dependencies": { "@formkit/auto-animate": "^0.8.1", @@ -61,7 +61,7 @@ "ts-json-as-const": "^1.0.7", "ts-node": "^10.9.1", "typescript": "^5.2.2", - "vite": "^5.0.11", + "vite": "^5.0.12", "zod": "^3.22.4", "zod-error": "^1.5.0" } @@ -12310,9 +12310,9 @@ } }, "node_modules/vite": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.11.tgz", - "integrity": "sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz", + "integrity": "sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==", "dependencies": { "esbuild": "^0.19.3", "postcss": "^8.4.32", diff --git a/package.json b/package.json index 5879d41e..1c2fa2fc 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "ts-json-as-const": "^1.0.7", "ts-node": "^10.9.1", "typescript": "^5.2.2", - "vite": "^5.0.11", + "vite": "^5.0.12", "zod": "^3.22.4", "zod-error": "^1.5.0" } diff --git a/yarn.lock b/yarn.lock index acbdf684..88030b3d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5958,10 +5958,10 @@ vite-plugin-css-injected-by-js@^3.3.0: resolved "https://registry.yarnpkg.com/vite-plugin-css-injected-by-js/-/vite-plugin-css-injected-by-js-3.3.1.tgz#26b41f108c5554ee728359bdec01c68c93a48547" integrity sha512-PjM/X45DR3/V1K1fTRs8HtZHEQ55kIfdrn+dzaqNBFrOYO073SeSNCxp4j7gSYhV9NffVHaEnOL4myoko0ePAg== -vite@^5.0.11: - version "5.0.11" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.0.11.tgz#31562e41e004cb68e1d51f5d2c641ab313b289e4" - integrity sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA== +vite@^5.0.12: + version "5.0.12" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.0.12.tgz#8a2ffd4da36c132aec4adafe05d7adde38333c47" + integrity sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w== dependencies: esbuild "^0.19.3" postcss "^8.4.32" From 78e34bb67f338bb3fe027b78334e7d4c2129b16b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Jan 2024 01:56:49 +0000 Subject: [PATCH 11/15] build(deps-dev): bump vite from 5.0.11 to 5.0.12 Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.0.11 to 5.0.12. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v5.0.12/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v5.0.12/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- package-lock.json | 12 ++++++------ package.json | 2 +- yarn.lock | 8 ++++---- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index c4d75986..735367ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "youtube-enhancer", - "version": "1.20.1", + "version": "1.21.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "youtube-enhancer", - "version": "1.20.1", + "version": "1.21.2", "license": "MIT", "dependencies": { "@formkit/auto-animate": "^0.8.1", @@ -61,7 +61,7 @@ "ts-json-as-const": "^1.0.7", "ts-node": "^10.9.1", "typescript": "^5.2.2", - "vite": "^5.0.11", + "vite": "^5.0.12", "zod": "^3.22.4", "zod-error": "^1.5.0" } @@ -12310,9 +12310,9 @@ } }, "node_modules/vite": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.11.tgz", - "integrity": "sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz", + "integrity": "sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==", "dependencies": { "esbuild": "^0.19.3", "postcss": "^8.4.32", diff --git a/package.json b/package.json index 5879d41e..1c2fa2fc 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "ts-json-as-const": "^1.0.7", "ts-node": "^10.9.1", "typescript": "^5.2.2", - "vite": "^5.0.11", + "vite": "^5.0.12", "zod": "^3.22.4", "zod-error": "^1.5.0" } diff --git a/yarn.lock b/yarn.lock index acbdf684..88030b3d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5958,10 +5958,10 @@ vite-plugin-css-injected-by-js@^3.3.0: resolved "https://registry.yarnpkg.com/vite-plugin-css-injected-by-js/-/vite-plugin-css-injected-by-js-3.3.1.tgz#26b41f108c5554ee728359bdec01c68c93a48547" integrity sha512-PjM/X45DR3/V1K1fTRs8HtZHEQ55kIfdrn+dzaqNBFrOYO073SeSNCxp4j7gSYhV9NffVHaEnOL4myoko0ePAg== -vite@^5.0.11: - version "5.0.11" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.0.11.tgz#31562e41e004cb68e1d51f5d2c641ab313b289e4" - integrity sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA== +vite@^5.0.12: + version "5.0.12" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.0.12.tgz#8a2ffd4da36c132aec4adafe05d7adde38333c47" + integrity sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w== dependencies: esbuild "^0.19.3" postcss "^8.4.32" From f45c0d972d2baca89a641c91e4c7055a9047a4f0 Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Tue, 30 Jan 2024 13:12:51 -0500 Subject: [PATCH 12/15] fix: youtube settings closing when clicking the quality, speed item --- src/features/openYouTubeSettingsOnHover/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/features/openYouTubeSettingsOnHover/index.ts b/src/features/openYouTubeSettingsOnHover/index.ts index a9dec586..ff031088 100644 --- a/src/features/openYouTubeSettingsOnHover/index.ts +++ b/src/features/openYouTubeSettingsOnHover/index.ts @@ -29,14 +29,15 @@ export async function enableOpenYouTubeSettingsOnHover() { if (settingsMenu.style.display !== "none") return; settingsButton.click(); }; - const hideSettings = () => { + const hideSettings = (event: Event) => { if (settingsMenu.style.display === "none") return; + if (event.target && (event.target as HTMLDivElement).classList.contains("ytp-popup-animating")) return; settingsButton.click(); }; const settingsButtonMouseLeaveListener = (event: Event) => { if (event.target === settingsButton) return; if (settingsMenu.contains(event.target as Node | null)) return; - hideSettings(); + hideSettings(event); }; eventManager.addEventListener(settingsButton, "mouseenter", showSettings, "openYouTubeSettingsOnHover"); eventManager.addEventListener(settingsButton, "mouseleave", settingsButtonMouseLeaveListener, "openYouTubeSettingsOnHover"); From 44ff597b9b732f4ebba5819552020205a14d364c Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Tue, 30 Jan 2024 13:28:46 -0500 Subject: [PATCH 13/15] translations: Update Japanese and Chinese Traditional --- public/locales/ja-JP.json | 14 +++++++------- public/locales/zh-TW.json | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/public/locales/ja-JP.json b/public/locales/ja-JP.json index af842019..dcfa7223 100644 --- a/public/locales/ja-JP.json +++ b/public/locales/ja-JP.json @@ -339,20 +339,20 @@ }, "videoHistory": { "enable": { - "label": "Track watched videos", - "title": "Keeps track of where you left off on videos you were watching and enables resuming playback" + "label": "視聴した動画に追跡をつける", + "title": "再生を再開できるように、視聴中の動画で中断した場所を追跡します" }, "resumeType": { "select": { - "label": "Resume type", + "label": "レジューム型", "options": { - "automatic": "Automatic", - "prompt": "Prompt" + "automatic": "自動", + "prompt": "入力要求" }, - "title": "Select how you want to resume videos" + "title": "動画をレジュームするの方法を選択します" } }, - "title": "Video history settings" + "title": "動画履歴設定" }, "volumeBoost": { "boostAmount": { diff --git a/public/locales/zh-TW.json b/public/locales/zh-TW.json index dbae13c1..83dfeb94 100644 --- a/public/locales/zh-TW.json +++ b/public/locales/zh-TW.json @@ -339,20 +339,20 @@ }, "videoHistory": { "enable": { - "label": "Track watched videos", - "title": "Keeps track of where you left off on videos you were watching and enables resuming playback" + "label": "記住已觀看的影片", + "title": "記住己觀看影片的播放位置及啟用繼續播放" }, "resumeType": { "select": { - "label": "Resume type", + "label": "繼續播放方式", "options": { - "automatic": "Automatic", - "prompt": "Prompt" + "automatic": "自動", + "prompt": "提示" }, - "title": "Select how you want to resume videos" + "title": "選擇如何繼續播放" } }, - "title": "Video history settings" + "title": "觀看記錄設定" }, "volumeBoost": { "boostAmount": { From 53a30b82e15d119fcd4043a807a9ed1206bf505c Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Tue, 30 Jan 2024 15:08:29 -0500 Subject: [PATCH 14/15] fix: close button resuming video, modify styles --- src/features/videoHistory/index.ts | 32 +++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/features/videoHistory/index.ts b/src/features/videoHistory/index.ts index 6044472e..fd06fd91 100644 --- a/src/features/videoHistory/index.ts +++ b/src/features/videoHistory/index.ts @@ -98,6 +98,7 @@ let start: null | number = null; function createResumePrompt(videoHistoryEntry: VideoHistoryEntry, playerContainer: YouTubePlayerDiv, cb: () => void) { const progressBarId = "resume-prompt-progress-bar"; const closeButtonId = "resume-prompt-close-button"; + const resumeButtonId = "resume-prompt-button"; const promptId = "resume-prompt"; const progressBarDuration = 15; @@ -108,10 +109,7 @@ function createResumePrompt(videoHistoryEntry: VideoHistoryEntry, playerContaine backgroundColor: "rgba(28, 28, 28, 0.9)", borderRadius: "5px", boxShadow: "0px 0px 10px rgba(0, 0, 0, 0.2)", - cursor: "pointer", left: "50%", - padding: "12px", - paddingBottom: "17px", position: "absolute", top: "50%", transform: "translate(-50%, -50%)", @@ -148,13 +146,28 @@ function createResumePrompt(videoHistoryEntry: VideoHistoryEntry, playerContaine lineHeight: "1px", padding: "5px", position: "absolute", - right: "-2px", - top: "2px" + right: "0px", + top: "0px" } }); closeButton.textContent = "ₓ"; - - prompt.textContent = window.i18nextInstance.t("pages.content.features.videoHistory.resumeButton"); + const resumeButton = createStyledElement({ + elementId: resumeButtonId, + elementType: "button", + styles: { + backgroundColor: "rgb(15, 15, 15)", + border: "transparent", + borderRadius: "5px", + boxShadow: "0px 0px 5px rgba(0, 0, 0, 0.2)", + color: "white", + cursor: "pointer", + padding: "10px 12px", + textAlign: "center", + transition: "all 0.5s ease-in-out", + verticalAlign: "middle" + } + }); + resumeButton.textContent = window.i18nextInstance.t("pages.content.features.videoHistory.resumeButton"); function startCountdown() { if (prompt) prompt.style.display = "block"; @@ -210,13 +223,14 @@ function createResumePrompt(videoHistoryEntry: VideoHistoryEntry, playerContaine const closeListener = () => { hidePrompt(); }; - eventManager.removeEventListener(prompt, "click", "videoHistory"); - eventManager.addEventListener(prompt, "click", resumeButtonClickListener, "videoHistory"); + eventManager.removeEventListener(resumeButton, "click", "videoHistory"); + eventManager.addEventListener(resumeButton, "click", resumeButtonClickListener, "videoHistory"); eventManager.removeEventListener(closeButton, "click", "videoHistory"); eventManager.addEventListener(closeButton, "click", closeListener, "videoHistory"); // Display the prompt if (!elementExists(promptId)) { + prompt.appendChild(resumeButton); playerContainer.appendChild(prompt); } } From 7f670d928f938ef562949e8286e5580622463a4f Mon Sep 17 00:00:00 2001 From: VampireChicken12 Date: Thu, 1 Feb 2024 20:44:38 -0500 Subject: [PATCH 15/15] fix: settings saving repeatedly --- package-lock.json | 25 + package.json | 7 +- src/components/Settings/Settings.tsx | 177 +++---- src/pages/options/Options.tsx | 14 +- src/pages/popup/Popup.tsx | 14 +- src/utils/utilities.ts | 14 +- yarn.lock | 704 ++++++++++++--------------- 7 files changed, 441 insertions(+), 514 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7674b58a..3d3d6ba9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "@formkit/auto-animate": "^0.8.1", "@monaco-editor/react": "^4.6.0", + "@tanstack/react-query": "^5.18.0", "dotenv": "^16.3.1", "i18next": "^23.7.3", "monaco-editor": "^0.45.0", @@ -1921,6 +1922,30 @@ "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", "dev": true }, + "node_modules/@tanstack/query-core": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.18.0.tgz", + "integrity": "sha512-8c6nxeAnGHxIDZIyDmHdmgFt4D+LprAQaJmjsnM4szcIjsWOyFlzxdqQUuQ/XuQRvUgqYaqlJTtDADlSS7pTPQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.18.0.tgz", + "integrity": "sha512-7FKxNfxxKEL7n3ADpwp81Fy4FX85hNkYVzQQVQsF0JAPl93c3d1gmNZMIbEtOqgYfom1/ontGh3FiZGYj3xyWA==", + "dependencies": { + "@tanstack/query-core": "5.18.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, "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", diff --git a/package.json b/package.json index c52632a0..9ae235c2 100644 --- a/package.json +++ b/package.json @@ -21,13 +21,14 @@ "type": "module", "dependencies": { "@formkit/auto-animate": "^0.8.1", + "@monaco-editor/react": "^4.6.0", + "@tanstack/react-query": "^5.18.0", "dotenv": "^16.3.1", "i18next": "^23.7.3", + "monaco-editor": "^0.45.0", "react": "^18.2.0", "react-dom": "^18.2.0", "vite-plugin-css-injected-by-js": "^3.3.0", - "@monaco-editor/react": "^4.6.0", - "monaco-editor": "^0.45.0", "webextension-polyfill": "^0.10.0" }, "devDependencies": { @@ -76,4 +77,4 @@ "zod": "^3.22.4", "zod-error": "^1.5.0" } -} \ No newline at end of file +} diff --git a/src/components/Settings/Settings.tsx b/src/components/Settings/Settings.tsx index 30dd3072..5b9c56a6 100644 --- a/src/components/Settings/Settings.tsx +++ b/src/components/Settings/Settings.tsx @@ -8,7 +8,8 @@ import { useNotifications } from "@/hooks"; import { availableLocales, type i18nInstanceType, i18nService, localeDirection, localePercentages } from "@/src/i18n"; import { featuresThatHaveButtons, youtubePlayerSpeedRate } from "@/src/types"; import { configurationImportSchema, defaultConfiguration as defaultSettings } from "@/src/utils/constants"; -import { cn, getPathValue, parseStoredValue, settingsAreDefault } from "@/src/utils/utilities"; +import { cn, getPathValue, parseStoredValue } from "@/src/utils/utilities"; +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { Suspense, createContext, useContext, useEffect, useRef, useState } from "react"; import { generateErrorMessage } from "zod-error"; @@ -83,73 +84,62 @@ function LanguageOptions({ ); } -export default function Settings() { - const [settings, setSettings] = useState(undefined); - const [i18nInstance, setI18nInstance] = useState(null); - const [firstLoad, setFirstLoad] = useState(true); - const settingsImportRef = useRef(null); - const { addNotification, notifications, removeNotification } = useNotifications(); - useEffect(() => { - const fetchSettings = () => { - chrome.storage.local.get((settings) => { +function getSettings(): Promise { + return new Promise((resolve, reject) => { + chrome.storage.local.get((settings) => { + try { const storedSettings: Partial = ( Object.keys(settings) .filter((key) => typeof key === "string") .filter((key) => Object.keys(defaultSettings).includes(key as unknown as string)) as configurationKeys[] ).reduce((acc, key) => Object.assign(acc, { [key]: parseStoredValue(settings[key] as string) }), {}); const castedSettings = storedSettings as configuration; - setSettings({ ...castedSettings }); - }); - }; - - fetchSettings(); - }, []); - useEffect(() => { - if (!firstLoad && settings && !settingsAreDefault(defaultSettings, settings)) { - saveOptions(); + resolve(castedSettings); + } catch (error) { + reject(error); + } + }); + }); +} +async function fetchSettings() { + try { + const settings = await getSettings(); + return settings; + } catch (error) { + console.error("Failed to get settings:", error); + throw new Error("Failed to fetch settings"); // + } +} +async function setSettings(settings: configuration) { + for (const key of Object.keys(settings)) { + if (typeof settings[key] !== "string") { + localStorage.setItem(key, JSON.stringify(settings[key])); + await chrome.storage.local.set({ [key]: JSON.stringify(settings[key]) }); + } else { + localStorage.setItem(key, settings[key] as string); + await chrome.storage.local.set({ [key]: settings[key] as string }); } - }, [settings]); - useEffect(() => { - const handleStorageChange = (changes: { [key: string]: chrome.storage.StorageChange }, areaName: string) => { - if (areaName !== "local") return; - const castedChanges = changes as { - [K in keyof configuration]: { - newValue: configuration[K] | undefined; - oldValue: configuration[K] | undefined; - }; - }; - Object.keys(castedChanges).forEach((key) => { - const { - [key]: { newValue, oldValue } - } = changes; - const parsedNewValue = parseStoredValue(newValue as string); - const parsedOldValue = parseStoredValue(oldValue as string); - if (parsedNewValue === parsedOldValue) return; - if ( - parsedOldValue !== null && - parsedNewValue !== null && - typeof parsedOldValue === "object" && - typeof parsedNewValue === "object" && - JSON.stringify(parsedNewValue) === JSON.stringify(parsedOldValue) - ) - return; - setSettings((prevSettings) => { - if (prevSettings) { - return { ...prevSettings, [key]: parsedNewValue as configuration[typeof key] }; - } - return undefined; - }); + } +} +export default function Settings() { + const queryClient = useQueryClient(); + const { data: settings } = useQuery({ + queryFn: fetchSettings, + queryKey: ["settings"] + }); + const settingsMutate = useMutation({ + mutationFn: setSettings, + onSuccess: async () => { + await queryClient.invalidateQueries({ + queryKey: ["settings"] }); - }; + addNotification("success", "pages.options.notifications.success.saved"); + } + }); + const [i18nInstance, setI18nInstance] = useState(null); + const settingsImportRef = useRef(null); + const { addNotification, notifications, removeNotification } = useNotifications(); - chrome.storage.onChanged.addListener(handleStorageChange); - chrome.runtime.onSuspend.addListener(() => { - chrome.storage.onChanged.removeListener(handleStorageChange); - }); - return () => { - chrome.storage.onChanged.removeListener(handleStorageChange); - }; - }, []); useEffect(() => { if (settings && settings["language"]) { void (async () => { @@ -165,58 +155,39 @@ export default function Settings() { const setCheckboxOption = (key: Path) => ({ currentTarget: { checked } }: ChangeEvent) => { - setFirstLoad(false); - setSettings((options) => (options ? { ...options, [key]: checked } : undefined)); + settingsMutate.mutate({ ...settings, [key]: checked }); }; const setValueOption = (key: Path) => ({ currentTarget: { value } }: ChangeEvent) => { - setFirstLoad(false); - setSettings((state) => { - if (!state) { - return undefined; - } - - const updatedState = { ...state }; - const keys = key.split(".") as Array; - let parentValue: any = updatedState; + settingsMutate.mutate( + ((state) => { + const updatedState = { ...state }; + const keys = key.split(".") as Array; + let parentValue: any = updatedState; - for (const currentKey of keys.slice(0, -1)) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - ({ [currentKey]: parentValue } = parentValue); - } + for (const currentKey of keys.slice(0, -1)) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + ({ [currentKey]: parentValue } = parentValue); + } - const propertyName = keys.at(keys.length - 1); - if (!propertyName) return updatedState; - if (typeof parentValue === "object" && parentValue !== null) { - // If the path represents a nested property, update the nested property - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - parentValue[propertyName] = value; - } else { - // If the path represents a top-level property, update it directly - // @ts-expect-error not sure how to type this - updatedState[propertyName] = value; - } + const propertyName = keys.at(keys.length - 1); + if (!propertyName) return updatedState; + if (typeof parentValue === "object" && parentValue !== null) { + // If the path represents a nested property, update the nested property + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + parentValue[propertyName] = value; + } else { + // If the path represents a top-level property, update it directly + // @ts-expect-error not sure how to type this + updatedState[propertyName] = value; + } - return updatedState; - }); + return updatedState; + })(settings) + ); }; const getSelectedOption = >(key: K) => getPathValue(settings, key); - function saveOptions() { - if (settings) { - for (const key of Object.keys(settings)) { - if (typeof settings[key] !== "string") { - localStorage.setItem(key, JSON.stringify(settings[key])); - void chrome.storage.local.set({ [key]: JSON.stringify(settings[key]) }); - } else { - localStorage.setItem(key, settings[key] as string); - void chrome.storage.local.set({ [key]: settings[key] as string }); - } - } - - addNotification("success", "pages.options.notifications.success.saved"); - } - } function resetOptions() { addNotification("info", "pages.options.notifications.info.reset", "reset_settings"); } @@ -418,7 +389,7 @@ export default function Settings() { } else { const castSettings = { ...defaultConfiguration, ...(importedSettings as configuration) }; // Set the imported settings in your state. - setSettings(castSettings); + settingsMutate.mutate(castSettings); for (const key of Object.keys(castSettings)) { if (typeof castSettings[key] !== "string") { localStorage.setItem(key, JSON.stringify(castSettings[key])); diff --git a/src/pages/options/Options.tsx b/src/pages/options/Options.tsx index c2608f3c..b1eb7d3a 100644 --- a/src/pages/options/Options.tsx +++ b/src/pages/options/Options.tsx @@ -1,11 +1,23 @@ import Settings from "@/src/components/Settings/Settings"; import { NotificationsProvider } from "@/src/hooks/useNotifications/provider"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import React from "react"; export default function Options(): JSX.Element { + const client = new QueryClient({ + defaultOptions: { + queries: { + refetchInterval: 75, + refetchOnWindowFocus: true, + staleTime: 250 + } + } + }); return ( - + + + ); } diff --git a/src/pages/popup/Popup.tsx b/src/pages/popup/Popup.tsx index 407715bc..529a8e9d 100644 --- a/src/pages/popup/Popup.tsx +++ b/src/pages/popup/Popup.tsx @@ -1,10 +1,22 @@ import Settings from "@/src/components/Settings/Settings"; import { NotificationsProvider } from "@/src/hooks/useNotifications/provider"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; export default function Options(): JSX.Element { + const client = new QueryClient({ + defaultOptions: { + queries: { + refetchInterval: 75, + refetchOnWindowFocus: true, + staleTime: 250 + } + } + }); return ( - + + + ); } diff --git a/src/utils/utilities.ts b/src/utils/utilities.ts index 9a865e86..8a3ed1cc 100644 --- a/src/utils/utilities.ts +++ b/src/utils/utilities.ts @@ -13,8 +13,7 @@ import type { PathValue, Selector, SendDataMessage, - YoutubePlayerQualityLevel, - configuration + YoutubePlayerQualityLevel } from "../types"; import type { SVGElementAttributes } from "./SVGElementAttributes"; @@ -400,17 +399,6 @@ export function waitForAllElements(selectors: Selector[]): Promise { }); }); } -export function settingsAreDefault(defaultSettings: Partial, currentSettings: Partial): boolean { - // Get the keys of the default and current settings - const defaultKeys = Object.keys(defaultSettings); - const currentKeys = Object.keys(currentSettings); - // Calculate the intersection of keys between default and current settings - const commonKeys = defaultKeys.filter((key) => currentKeys.includes(key)); - // Check that the values of the common keys are the same - const settingsTheSame = commonKeys.filter((key) => isStrictEqual(defaultSettings[key])(currentSettings[key])); - // Check if the number of keys that match is the same as the total number of keys - return isStrictEqual(settingsTheSame.length)(commonKeys.length); -} export function formatDateForFileName(date: Date): string { const dateFormatOptions: Intl.DateTimeFormatOptions = { day: "2-digit", diff --git a/yarn.lock b/yarn.lock index c1c4d671..8d94748b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -58,119 +58,19 @@ resolved "https://registry.npmjs.org/@dfoverdx/tocamelcase/-/tocamelcase-1.0.7.tgz" integrity sha512-QDlMJqwcE4eVCvxxQXp8nh7Nw9m5VQHPCAiyTD+W86Tl89VGhVJRb//RJRZKpn5A/Bq3EQNYDYlepurQ805MOQ== -"@esbuild/aix-ppc64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz#2acd20be6d4f0458bc8c784103495ff24f13b1d3" - integrity sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g== - -"@esbuild/android-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz#b45d000017385c9051a4f03e17078abb935be220" - integrity sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q== - -"@esbuild/android-arm@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.11.tgz#f46f55414e1c3614ac682b29977792131238164c" - integrity sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw== - -"@esbuild/android-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.11.tgz#bfc01e91740b82011ef503c48f548950824922b2" - integrity sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg== - -"@esbuild/darwin-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz#533fb7f5a08c37121d82c66198263dcc1bed29bf" - integrity sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ== - -"@esbuild/darwin-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz#62f3819eff7e4ddc656b7c6815a31cf9a1e7d98e" - integrity sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g== - -"@esbuild/freebsd-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz#d478b4195aa3ca44160272dab85ef8baf4175b4a" - integrity sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA== - -"@esbuild/freebsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz#7bdcc1917409178257ca6a1a27fe06e797ec18a2" - integrity sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw== - -"@esbuild/linux-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz#58ad4ff11685fcc735d7ff4ca759ab18fcfe4545" - integrity sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg== - -"@esbuild/linux-arm@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz#ce82246d873b5534d34de1e5c1b33026f35e60e3" - integrity sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q== - -"@esbuild/linux-ia32@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz#cbae1f313209affc74b80f4390c4c35c6ab83fa4" - integrity sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA== - -"@esbuild/linux-loong64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz#5f32aead1c3ec8f4cccdb7ed08b166224d4e9121" - integrity sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg== - -"@esbuild/linux-mips64el@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz#38eecf1cbb8c36a616261de858b3c10d03419af9" - integrity sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg== - -"@esbuild/linux-ppc64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz#9c5725a94e6ec15b93195e5a6afb821628afd912" - integrity sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA== - -"@esbuild/linux-riscv64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz#2dc4486d474a2a62bbe5870522a9a600e2acb916" - integrity sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ== - -"@esbuild/linux-s390x@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz#4ad8567df48f7dd4c71ec5b1753b6f37561a65a8" - integrity sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q== - -"@esbuild/linux-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz#b7390c4d5184f203ebe7ddaedf073df82a658766" - integrity sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA== - -"@esbuild/netbsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz#d633c09492a1721377f3bccedb2d821b911e813d" - integrity sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ== - -"@esbuild/openbsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz#17388c76e2f01125bf831a68c03a7ffccb65d1a2" - integrity sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw== - "@esbuild/sunos-x64@0.19.11": version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz#e320636f00bb9f4fdf3a80e548cb743370d41767" + resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz" integrity sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ== -"@esbuild/win32-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz#c778b45a496e90b6fc373e2a2bb072f1441fe0ee" - integrity sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ== - "@esbuild/win32-ia32@0.19.11": version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz#481a65fee2e5cce74ec44823e6b09ecedcc5194c" + resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz" integrity sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg== "@esbuild/win32-x64@0.19.11": version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz#a5d300008960bb39677c46bf16f53ec70d8dee04" + resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz" integrity sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw== "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": @@ -255,7 +155,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@3.1.0": version "3.1.0" resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== @@ -265,23 +165,15 @@ resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/sourcemap-codec@1.4.14": - version "1.4.14" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.15" resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== "@jridgewell/trace-mapping@^0.3.9": version "0.3.18" @@ -291,6 +183,14 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@monaco-editor/loader@^1.4.0": version "1.4.0" resolved "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.4.0.tgz" @@ -313,7 +213,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -499,7 +399,7 @@ resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz" integrity sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA== -"@octokit/core@^5.0.0": +"@octokit/core@^5.0.0", "@octokit/core@>=5": version "5.0.0" resolved "https://registry.npmjs.org/@octokit/core/-/core-5.0.0.tgz" integrity sha512-YbAtMWIrbZ9FCXbLwT9wWB8TyLjq9mxpKdgB3dUNxQcIVTf9hJ70gRPwAcqGZdY6WdJPZ0I7jLaaNDCiloGN2A== @@ -617,69 +517,9 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" -"@rollup/rollup-android-arm-eabi@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.5.tgz#b752b6c88a14ccfcbdf3f48c577ccc3a7f0e66b9" - integrity sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA== - -"@rollup/rollup-android-arm64@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.5.tgz#33757c3a448b9ef77b6f6292d8b0ec45c87e9c1a" - integrity sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg== - -"@rollup/rollup-darwin-arm64@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.5.tgz#5234ba62665a3f443143bc8bcea9df2cc58f55fb" - integrity sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w== - -"@rollup/rollup-darwin-x64@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.5.tgz#981256c054d3247b83313724938d606798a919d1" - integrity sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA== - -"@rollup/rollup-linux-arm-gnueabihf@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.5.tgz#120678a5a2b3a283a548dbb4d337f9187a793560" - integrity sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g== - -"@rollup/rollup-linux-arm64-gnu@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.5.tgz#c99d857e2372ece544b6f60b85058ad259f64114" - integrity sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA== - -"@rollup/rollup-linux-arm64-musl@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.5.tgz#3064060f568a5718c2a06858cd6e6d24f2ff8632" - integrity sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ== - -"@rollup/rollup-linux-riscv64-gnu@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.5.tgz#987d30b5d2b992fff07d055015991a57ff55fbad" - integrity sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA== - -"@rollup/rollup-linux-x64-gnu@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz#85946ee4d068bd12197aeeec2c6f679c94978a49" - integrity sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA== - -"@rollup/rollup-linux-x64-musl@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.5.tgz#fe0b20f9749a60eb1df43d20effa96c756ddcbd4" - integrity sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg== - -"@rollup/rollup-win32-arm64-msvc@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.5.tgz#422661ef0e16699a234465d15b2c1089ef963b2a" - integrity sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ== - -"@rollup/rollup-win32-ia32-msvc@4.9.5": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.5.tgz#7b73a145891c202fbcc08759248983667a035d85" - integrity sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA== - "@rollup/rollup-win32-x64-msvc@4.9.5": version "4.9.5" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.5.tgz#10491ccf4f63c814d4149e0316541476ea603602" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.5.tgz" integrity sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ== "@semantic-release/changelog@^6.0.3": @@ -811,18 +651,14 @@ integrity sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A== "@sigstore/sign@^2.1.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-2.2.0.tgz#4918207d8356877ab42d85d360d5729e9b3ec65a" - integrity sha512-AAbmnEHDQv6CSfrWA5wXslGtzLPtAtHZleKOgxdQYvx/s76Fk6T6ZVt7w2IGV9j1UrFeBocTTQxaXG2oRrDhYA== + version "2.1.0" dependencies: "@sigstore/bundle" "^2.1.0" "@sigstore/protobuf-specs" "^0.2.1" make-fetch-happen "^13.0.0" "@sigstore/tuf@^2.1.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-2.2.0.tgz#ef636239687e41af3f2ce10667ab88f5ca6165b3" - integrity sha512-KKATZ5orWfqd9ZG6MN8PtCIx4eevWSuGRKQvofnWXRpyMyUEpmrzg5M5BrCpjM+NfZ0RbNGOh5tCz/P2uoRqOA== + version "2.1.0" dependencies: "@sigstore/protobuf-specs" "^0.2.1" tuf-js "^2.1.0" @@ -832,57 +668,12 @@ resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-3.1.2.tgz" integrity sha512-JiX9vxoKMmu8Y3Zr2RVathBL1Cdu4Nt4MuNWemt1Nc06A0RAin9c5FArkhGsyMBWfCu4zj+9b+GxtjAnE4qqLQ== -"@swc/core-darwin-arm64@1.3.96": - version "1.3.96" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.96.tgz#7c1c4245ce3f160a5b36a48ed071e3061a839e1d" - integrity sha512-8hzgXYVd85hfPh6mJ9yrG26rhgzCmcLO0h1TIl8U31hwmTbfZLzRitFQ/kqMJNbIBCwmNH1RU2QcJnL3d7f69A== - -"@swc/core-darwin-x64@1.3.96": - version "1.3.96" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.96.tgz#4720ff897ca3f22fe77d0be688968161480c80f0" - integrity sha512-mFp9GFfuPg+43vlAdQZl0WZpZSE8sEzqL7sr/7Reul5McUHP0BaLsEzwjvD035ESfkY8GBZdLpMinblIbFNljQ== - -"@swc/core-linux-arm-gnueabihf@1.3.96": - version "1.3.96" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.96.tgz#2c238ae00b13918ac058b132a31dc57dbcf94e39" - integrity sha512-8UEKkYJP4c8YzYIY/LlbSo8z5Obj4hqcv/fUTHiEePiGsOddgGf7AWjh56u7IoN/0uEmEro59nc1ChFXqXSGyg== - -"@swc/core-linux-arm64-gnu@1.3.96": - version "1.3.96" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.96.tgz#be2e84506b9761b561fb9a341e587f8594a8e55d" - integrity sha512-c/IiJ0s1y3Ymm2BTpyC/xr6gOvoqAVETrivVXHq68xgNms95luSpbYQ28rqaZC8bQC8M5zdXpSc0T8DJu8RJGw== - -"@swc/core-linux-arm64-musl@1.3.96": - version "1.3.96" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.96.tgz#22c9ce17bd923ae358760e668ca33c90210c2ae5" - integrity sha512-i5/UTUwmJLri7zhtF6SAo/4QDQJDH2fhYJaBIUhrICmIkRO/ltURmpejqxsM/ye9Jqv5zG7VszMC0v/GYn/7BQ== - -"@swc/core-linux-x64-gnu@1.3.96": - version "1.3.96" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.96.tgz#c17c072e338341c0ac3507a31ab2a36d16d79c98" - integrity sha512-USdaZu8lTIkm4Yf9cogct/j5eqtdZqTgcTib4I+NloUW0E/hySou3eSyp3V2UAA1qyuC72ld1otXuyKBna0YKQ== - -"@swc/core-linux-x64-musl@1.3.96": - version "1.3.96" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.96.tgz#eb74594a48b4e9cabdce7f5525b3b946f8d6dd16" - integrity sha512-QYErutd+G2SNaCinUVobfL7jWWjGTI0QEoQ6hqTp7PxCJS/dmKmj3C5ZkvxRYcq7XcZt7ovrYCTwPTHzt6lZBg== - -"@swc/core-win32-arm64-msvc@1.3.96": - version "1.3.96" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.96.tgz#6f7c0d20d80534b0676dc6761904288c16e93857" - integrity sha512-hjGvvAduA3Un2cZ9iNP4xvTXOO4jL3G9iakhFsgVhpkU73SGmK7+LN8ZVBEu4oq2SUcHO6caWvnZ881cxGuSpg== - -"@swc/core-win32-ia32-msvc@1.3.96": - version "1.3.96" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.96.tgz#47bb24ef2e4c81407a6786649246983cc69e7854" - integrity sha512-Far2hVFiwr+7VPCM2GxSmbh3ikTpM3pDombE+d69hkedvYHYZxtTF+2LTKl/sXtpbUnsoq7yV/32c9R/xaaWfw== - "@swc/core-win32-x64-msvc@1.3.96": version "1.3.96" resolved "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.96.tgz" integrity sha512-4VbSAniIu0ikLf5mBX81FsljnfqjoVGleEkCQv4+zRlyZtO3FHoDPkeLVoy6WRlj7tyrRcfUJ4mDdPkbfTO14g== -"@swc/core@^1.3.96": +"@swc/core@^1.3.96", "@swc/core@>=1.2.50": version "1.3.96" resolved "https://registry.npmjs.org/@swc/core/-/core-1.3.96.tgz" integrity sha512-zwE3TLgoZwJfQygdv2SdCK9mRLYluwDOM53I+dT6Z5ZvrgVENmY3txvWDvduzkV+/8IuvrRbVezMpxcojadRdQ== @@ -911,6 +702,18 @@ resolved "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz" integrity sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw== +"@tanstack/query-core@5.18.0": + version "5.18.0" + resolved "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.18.0.tgz" + integrity sha512-8c6nxeAnGHxIDZIyDmHdmgFt4D+LprAQaJmjsnM4szcIjsWOyFlzxdqQUuQ/XuQRvUgqYaqlJTtDADlSS7pTPQ== + +"@tanstack/react-query@^5.18.0": + version "5.18.0" + resolved "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.18.0.tgz" + integrity sha512-7FKxNfxxKEL7n3ADpwp81Fy4FX85hNkYVzQQVQsF0JAPl93c3d1gmNZMIbEtOqgYfom1/ontGh3FiZGYj3xyWA== + dependencies: + "@tanstack/query-core" "5.18.0" + "@thedutchcoder/postcss-rem-to-px@^0.0.2": version "0.0.2" resolved "https://registry.npmjs.org/@thedutchcoder/postcss-rem-to-px/-/postcss-rem-to-px-0.0.2.tgz" @@ -963,7 +766,7 @@ "@types/chrome@^0.0.259": version "0.0.259" - resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.259.tgz#5e55941b3f4067d088c0ad81c094733128db0f0a" + resolved "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.259.tgz" integrity sha512-WP1HsLqKgoUwR/4dYiTfmOSUG5B05+xrPLbqboO15nuaUC+aBYxwB9ixVyLPYY9D+vocJK9rzH5g1lpqVrJqhg== dependencies: "@types/filesystem" "*" @@ -971,7 +774,7 @@ "@types/estree@1.0.5": version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz" integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== "@types/filesystem@*": @@ -1001,9 +804,9 @@ resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/node@*", "@types/node@^20.9.0": +"@types/node@*", "@types/node@^18.0.0 || >=20.0.0", "@types/node@^20.9.0": version "20.11.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.5.tgz#be10c622ca7fcaa3cf226cf80166abc31389d86e" + resolved "https://registry.npmjs.org/@types/node/-/node-20.11.5.tgz" integrity sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w== dependencies: undici-types "~5.26.4" @@ -1020,14 +823,14 @@ "@types/react-dom@^18.2.15": version "18.2.18" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.18.tgz#16946e6cd43971256d874bc3d0a72074bb8571dd" + resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.18.tgz" integrity sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw== dependencies: "@types/react" "*" "@types/react@*", "@types/react@^18.2.37": version "18.2.48" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.48.tgz#11df5664642d0bd879c1f58bc1d37205b064e8f1" + resolved "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz" integrity sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w== dependencies: "@types/prop-types" "*" @@ -1063,7 +866,7 @@ "@typescript-eslint/eslint-plugin@^6.10.0": version "6.18.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.18.1.tgz#0df881a47da1c1a9774f39495f5f7052f86b72e0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.18.1.tgz" integrity sha512-nISDRYnnIpk7VCFrGcu1rnZfM1Dh9LRHnfgdkjcbi/l7g16VYRri3TjXi9Ir4lOZSw5N/gnV/3H7jIPQ8Q4daA== dependencies: "@eslint-community/regexpp" "^4.5.1" @@ -1078,9 +881,9 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/parser@^6.10.0": +"@typescript-eslint/parser@^6.0.0 || ^6.0.0-alpha", "@typescript-eslint/parser@^6.10.0": version "6.18.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.18.1.tgz#3c3987e186b38c77b30b6bfa5edf7c98ae2ec9d3" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.18.1.tgz" integrity sha512-zct/MdJnVaRRNy9e84XnVtRv9Vf91/qqe+hZJtKanjojud4wAVy/7lXxJmMyX6X6J+xc6c//YEWvpeif8cAhWA== dependencies: "@typescript-eslint/scope-manager" "6.18.1" @@ -1091,7 +894,7 @@ "@typescript-eslint/scope-manager@6.18.1": version "6.18.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.18.1.tgz#28c31c60f6e5827996aa3560a538693cb4bd3848" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.18.1.tgz" integrity sha512-BgdBwXPFmZzaZUuw6wKiHKIovms97a7eTImjkXCZE04TGHysG+0hDQPmygyvgtkoB/aOQwSM/nWv3LzrOIQOBw== dependencies: "@typescript-eslint/types" "6.18.1" @@ -1099,7 +902,7 @@ "@typescript-eslint/type-utils@6.18.1": version "6.18.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.18.1.tgz#115cf535f8b39db8301677199ce51151e2daee96" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.18.1.tgz" integrity sha512-wyOSKhuzHeU/5pcRDP2G2Ndci+4g653V43gXTpt4nbyoIOAASkGDA9JIAgbQCdCkcr1MvpSYWzxTz0olCn8+/Q== dependencies: "@typescript-eslint/typescript-estree" "6.18.1" @@ -1109,12 +912,12 @@ "@typescript-eslint/types@6.18.1": version "6.18.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.18.1.tgz#91617d8080bcd99ac355d9157079970d1d49fefc" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.18.1.tgz" integrity sha512-4TuMAe+tc5oA7wwfqMtB0Y5OrREPF1GeJBAjqwgZh1lEMH5PJQgWgHGfYufVB51LtjD+peZylmeyxUXPfENLCw== "@typescript-eslint/typescript-estree@6.18.1": version "6.18.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.18.1.tgz#a12b6440175b4cbc9d09ab3c4966c6b245215ab4" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.18.1.tgz" integrity sha512-fv9B94UAhywPRhUeeV/v+3SBDvcPiLxRZJw/xZeeGgRLQZ6rLMG+8krrJUyIf6s1ecWTzlsbp0rlw7n9sjufHA== dependencies: "@typescript-eslint/types" "6.18.1" @@ -1126,9 +929,9 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@6.18.1", "@typescript-eslint/utils@^6.13.0": +"@typescript-eslint/utils@^6.13.0", "@typescript-eslint/utils@6.18.1": version "6.18.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.18.1.tgz#3451cfe2e56babb6ac657e10b6703393d4b82955" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.18.1.tgz" integrity sha512-zZmTuVZvD1wpoceHvoQpOiewmWu3uP9FuTWo8vqpy2ffsmfCE8mklRPi+vmnIYAIk9t/4kOThri2QCDgor+OpQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" @@ -1141,7 +944,7 @@ "@typescript-eslint/visitor-keys@6.18.1": version "6.18.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.18.1.tgz#704d789bda2565a15475e7d22f145b8fe77443f4" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.18.1.tgz" integrity sha512-/kvt0C5lRqGoCfsbmm7/CwMqoSkY3zzHLIjdhHZQW3VFrnz7ATecOHR7nb7V+xn4286MBxfnQfQhAmCI0u+bJA== dependencies: "@typescript-eslint/types" "6.18.1" @@ -1159,24 +962,16 @@ dependencies: "@swc/core" "^1.3.96" -JSONStream@^1.3.5: - version "1.3.5" - resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" +abbrev@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz" + integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== abbrev@1: version "1.1.1" resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abbrev@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz" - integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== - abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" @@ -1194,7 +989,7 @@ acorn-walk@^8.1.1: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^8.4.1, acorn@^8.9.0: +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.4.1, acorn@^8.9.0: version "8.11.2" resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz" integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== @@ -1214,7 +1009,15 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -aggregate-error@^4.0.0, aggregate-error@^4.0.1: +aggregate-error@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz" + integrity sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w== + dependencies: + clean-stack "^4.0.0" + indent-string "^5.0.0" + +aggregate-error@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz" integrity sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w== @@ -1273,8 +1076,6 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.3.0: ansi-styles@^6.1.0: version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== ansicolors@~0.3.2: version "0.3.2" @@ -1467,7 +1268,7 @@ asynciterator.prototype@^1.0.0: autoprefixer@^10.4.16: version "10.4.17" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.17.tgz#35cd5695cbbe82f536a50fa025d561b01fdec8be" + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz" integrity sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg== dependencies: browserslist "^4.22.2" @@ -1524,7 +1325,12 @@ bin-links@^4.0.1: read-cmd-shim "^4.0.0" write-file-atomic "^5.0.0" -binary-extensions@^2.0.0, binary-extensions@^2.2.0: +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +binary-extensions@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== @@ -1556,9 +1362,9 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.22.2: +browserslist@^4.22.2, "browserslist@>= 4.21.0": version "4.22.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.3.tgz#299d11b7e947a6b843981392721169e27d60c5a6" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz" integrity sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A== dependencies: caniuse-lite "^1.0.30001580" @@ -1625,7 +1431,7 @@ camelcase-css@^2.0.1: caniuse-lite@^1.0.30001578, caniuse-lite@^1.0.30001580: version "1.0.30001581" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz#0dfd4db9e94edbdca67d57348ebc070dece279f4" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz" integrity sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ== cardinal@^2.1.1: @@ -1636,7 +1442,16 @@ cardinal@^2.1.1: ansicolors "~0.3.2" redeyed "~2.1.0" -chalk@^2.3.2, chalk@^2.4.2: +chalk@^2.3.2: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^2.4.2: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1769,16 +1584,16 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@~1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + color-support@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" @@ -1882,8 +1697,8 @@ conventional-commits-parser@^5.0.0: resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz" integrity sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA== dependencies: - JSONStream "^1.3.5" is-text-path "^2.0.0" + JSONStream "^1.3.5" meow "^12.0.1" split2 "^4.0.0" @@ -1894,7 +1709,7 @@ core-util-is@~1.0.0: cosmiconfig@^9.0.0: version "9.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz" integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== dependencies: env-paths "^2.2.1" @@ -1920,7 +1735,16 @@ create-require@^1.1.0: resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.0: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1958,13 +1782,6 @@ date-fns@^2.30.0: dependencies: "@babel/runtime" "^7.21.0" -debug@4, debug@^4, debug@^4.0.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - debug@^3.2.7: version "3.2.7" resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" @@ -1972,6 +1789,13 @@ debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4, debug@^4.0.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" @@ -2089,7 +1913,7 @@ eastasianwidth@^0.2.0: electron-to-chromium@^1.4.648: version "1.4.648" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.648.tgz#c7b46c9010752c37bb4322739d6d2dd82354fbe4" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.648.tgz" integrity sha512-EmFMarXeqJp9cUKu/QEciEApn0S/xRcpZWuAm32U7NgoZCimjsilKXHRO9saeEW55eHZagIDg6XTUOv32w9pjg== emoji-regex@^8.0.0: @@ -2116,13 +1940,18 @@ encoding@^0.1.13: env-ci@^11.0.0: version "11.0.0" - resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-11.0.0.tgz#0cbc2c55feb071a3651aaa9fa181a817e696595f" + resolved "https://registry.npmjs.org/env-ci/-/env-ci-11.0.0.tgz" integrity sha512-apikxMgkipkgTvMdRT9MNqWx5VLOci79F4VBd7Op/7OPjjoanjdAvn6fglMCCEf/1bAh8eOiuEVCUs4V3qP3nQ== dependencies: execa "^8.0.0" java-properties "^1.0.2" -env-paths@^2.2.0, env-paths@^2.2.1: +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +env-paths@^2.2.1: version "2.2.1" resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== @@ -2231,7 +2060,7 @@ es-to-primitive@^1.2.1: esbuild@^0.19.3: version "0.19.11" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.11.tgz#4a02dca031e768b5556606e1b468fe72e3325d96" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz" integrity sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA== optionalDependencies: "@esbuild/aix-ppc64" "0.19.11" @@ -2263,11 +2092,6 @@ escalade@^3.1.1: resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-string-regexp@5.0.0: - 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== - escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" @@ -2278,7 +2102,12 @@ escape-string-regexp@^4.0.0: resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-prettier@^9.0.0: +escape-string-regexp@5.0.0: + 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== + +eslint-config-prettier@*, eslint-config-prettier@^9.0.0: version "9.1.0" resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz" integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== @@ -2360,7 +2189,7 @@ eslint-plugin-perfectionist@^2.3.0: eslint-plugin-prettier@^5.0.1: version "5.1.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz#17cfade9e732cef32b5f5be53bd4e07afd8e67e1" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz" integrity sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw== dependencies: prettier-linter-helpers "^1.0.0" @@ -2419,7 +2248,7 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@^8.53.0: +"eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", eslint@^8.53.0, eslint@>=3.0.0, eslint@>=7.0.0, eslint@>=8.0.0: version "8.56.0" resolved "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz" integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== @@ -2679,7 +2508,7 @@ foreground-child@^3.1.0: fraction.js@^4.3.7: version "4.3.7" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" + resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== from2@^2.3.0: @@ -2701,8 +2530,6 @@ fs-extra@^11.0.0, fs-extra@^11.1.1: fs-minipass@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" @@ -2718,11 +2545,6 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - function-bind@^1.1.1, function-bind@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" @@ -2817,7 +2639,7 @@ git-log-parser@^1.2.0: through2 "~2.0.0" traverse "~0.6.6" -glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -2831,17 +2653,12 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob@7.1.6: - version "7.1.6" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" + is-glob "^4.0.1" glob@^10.2.2, glob@^10.3.10: version "10.3.10" @@ -2877,6 +2694,18 @@ glob@^8.0.0: minimatch "^5.0.1" once "^1.3.0" +glob@7.1.6: + version "7.1.6" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + globals@^13.19.0: version "13.24.0" resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" @@ -2921,16 +2750,21 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -graceful-fs@4.2.10: - version "4.2.10" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + 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== -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.6: +graceful-fs@^4.2.11, graceful-fs@^4.2.6: 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== +graceful-fs@4.2.10: + version "4.2.10" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + graphemer@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" @@ -3041,8 +2875,6 @@ https-proxy-agent@^7.0.0: https-proxy-agent@^7.0.1: version "7.0.2" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz#e2645b846b90e96c6e6f347fb5b2e41f1590b09b" - integrity sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA== dependencies: agent-base "^7.0.2" debug "4" @@ -3142,7 +2974,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: +inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@2: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -3454,8 +3286,6 @@ isexe@^2.0.0: isexe@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" - integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== issue-parser@^6.0.0: version "6.0.0" @@ -3566,11 +3396,24 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonparse@^1.2.0, jsonparse@^1.3.1: +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +jsonparse@^1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== +JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: version "3.3.5" resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz" @@ -3868,9 +3711,14 @@ marked-terminal@^6.0.0: marked@^11.0.0: version "11.1.1" - resolved "https://registry.yarnpkg.com/marked/-/marked-11.1.1.tgz#e1b2407241f744fb1935fac224680874d9aff7a3" + resolved "https://registry.npmjs.org/marked/-/marked-11.1.1.tgz" integrity sha512-EgxRjgK9axsQuUa/oKMx5DEY8oXpKJfk61rT5iY3aRlgU6QJtUcxU5OAymdhCvWvhYcd9FKmO5eQoX8m9VGJXg== +"marked@>=1 <10": + version "9.1.6" + resolved "https://registry.npmjs.org/marked/-/marked-9.1.6.tgz" + integrity sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q== + meow@^12.0.1: version "12.1.1" resolved "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz" @@ -3909,13 +3757,6 @@ mimic-fn@^4.0.0: resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== -minimatch@9.0.3, minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3: - version "9.0.3" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" @@ -3923,13 +3764,34 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimatch@^5.0.1, minimatch@^5.1.0: +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^5.1.0: version "5.1.6" resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" +minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3: + version "9.0.3" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +minimatch@9.0.3: + version "9.0.3" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: version "1.2.8" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" @@ -3984,21 +3846,17 @@ minipass-sized@^1.0.3: minipass@^3.0.0: version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.0.4: version "7.0.4" resolved "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz" integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== +minipass@^5.0.0: + version "5.0.0" + minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" @@ -4012,12 +3870,12 @@ mkdirp@^1.0.3: resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -monaco-editor@^0.45.0: +monaco-editor@^0.45.0, "monaco-editor@>= 0.21.0 < 1", "monaco-editor@>= 0.25.0 < 1": version "0.45.0" resolved "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.45.0.tgz" integrity sha512-mjv1G1ZzfEE3k9HZN0dQ2olMdwIfaeAAjFiwNprLfYNRSz7ctv9XuCT7gPtBGrMUeV1/iZzYKj17Khu1hxoHOA== -ms@2.1.2, ms@^2.1.1: +ms@^2.1.1, ms@2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== @@ -4099,7 +3957,7 @@ node-gyp@^10.0.0, node-gyp@^10.0.1: node-releases@^2.0.14: version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz" integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== nodemon@^3.0.1: @@ -4692,7 +4550,15 @@ postcss-nested@^6.0.1: dependencies: postcss-selector-parser "^6.0.11" -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11: +postcss-selector-parser@^6.0.10: + version "6.0.13" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz" + integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-selector-parser@^6.0.11: version "6.0.13" resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz" integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== @@ -4705,9 +4571,9 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.4.23, postcss@^8.4.31, postcss@^8.4.32, postcss@^8.4.4: +postcss@^8.0.0, postcss@^8.1.0, postcss@^8.2.14, postcss@^8.3.0, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.31, postcss@^8.4.32, postcss@^8.4.4, postcss@>=8.0.9: version "8.4.33" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.33.tgz#1378e859c9f69bf6f638b990a0212f43e2aaa742" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz" integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg== dependencies: nanoid "^3.3.7" @@ -4726,7 +4592,7 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^3.0.3: +prettier@^3.0.3, prettier@>=3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz" integrity sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw== @@ -4825,7 +4691,7 @@ rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-dom@^18.2.0: +"react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", react-dom@^18.2.0: version "18.2.0" resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== @@ -4838,7 +4704,7 @@ react-is@^16.13.1: resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react@^18.2.0: +"react@^16.8.0 || ^17.0.0 || ^18.0.0", react@^18.0.0, react@^18.2.0: version "18.2.0" resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== @@ -4914,7 +4780,16 @@ readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@^3.4.0: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -5040,7 +4915,7 @@ rimraf@^3.0.2: rollup@^4.2.0: version "4.9.5" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.9.5.tgz#62999462c90f4c8b5d7c38fc7161e63b29101b05" + resolved "https://registry.npmjs.org/rollup/-/rollup-4.9.5.tgz" integrity sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ== dependencies: "@types/estree" "1.0.5" @@ -5115,9 +4990,9 @@ scheduler@^0.23.0: dependencies: loose-envify "^1.1.0" -semantic-release@^23.0.0: +semantic-release@^23.0.0, semantic-release@>=18.0.0, semantic-release@>=20.1.0: version "23.0.0" - resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-23.0.0.tgz#ecb3685116f5ff284824e7c377cf9a3ce80c5428" + resolved "https://registry.npmjs.org/semantic-release/-/semantic-release-23.0.0.tgz" integrity sha512-Jz7jEWO2igTtske112gC4PPE2whCMVrsgxUPG3/SZI7VE357suIUZFlJd1Yu0g2I6RPc2HxNEfUg7KhmDTjwqg== dependencies: "@semantic-release/commit-analyzer" "^11.0.0" @@ -5229,7 +5104,10 @@ signal-exit@^3.0.3: resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.0.1, signal-exit@^4.1.0: +signal-exit@^4.0.1: + version "4.0.2" + +signal-exit@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== @@ -5284,8 +5162,6 @@ smart-buffer@^4.2.0: socks-proxy-agent@^8.0.1: version "8.0.2" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz#5acbd7be7baf18c46a3f293a840109a430a640ad" - integrity sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g== dependencies: agent-base "^7.0.2" debug "^4.3.4" @@ -5385,7 +5261,21 @@ streamx@^2.15.0: fast-fifo "^1.1.0" queue-tick "^1.0.1" -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +string_decoder@^1.1.1, string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +string_decoder@^1.3.0: + 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== + dependencies: + safe-buffer "~5.2.0" + +"string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -5394,10 +5284,24 @@ streamx@^2.15.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^5.0.1, string-width@^5.1.2: +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1: + version "5.1.2" + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string-width@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: eastasianwidth "^0.2.0" emoji-regex "^9.2.2" @@ -5444,20 +5348,6 @@ string.prototype.trimstart@^1.0.7: define-properties "^1.2.0" es-abstract "^1.22.1" -string_decoder@^1.1.1, string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -string_decoder@^1.3.0: - 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== - dependencies: - safe-buffer "~5.2.0" - stringify-object@^4.0.0: version "4.0.1" resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-4.0.1.tgz" @@ -5467,7 +5357,14 @@ stringify-object@^4.0.0: is-obj "^3.0.0" is-regexp "^3.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -5519,7 +5416,14 @@ sucrase@^3.32.0: pirates "^4.0.1" ts-interface-checker "^0.1.9" -supports-color@^5.3.0, supports-color@^5.5.0: +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^5.5.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -5573,9 +5477,9 @@ tailwind-merge@^2.0.0: dependencies: "@babel/runtime" "^7.23.5" -tailwindcss@^3.3.5: +tailwindcss@^3.3.2, tailwindcss@^3.3.5: version "3.4.1" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.1.tgz#f512ca5d1dd4c9503c7d3d28a968f1ad8f5c839d" + resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz" integrity sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA== dependencies: "@alloc/quick-lru" "^5.2.0" @@ -5642,7 +5546,12 @@ text-extensions@^2.0.0: resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz" integrity sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g== -text-table@^0.2.0, text-table@~0.2.0: +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +text-table@~0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== @@ -5661,6 +5570,11 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" +"through@>=2.2.7 <3": + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + through2@~2.0.0: version "2.0.5" resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" @@ -5669,11 +5583,6 @@ through2@~2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -"through@>=2.2.7 <3": - version "2.3.8" - resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - tiny-relative-date@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz" @@ -5728,7 +5637,7 @@ ts-json-as-const@^1.0.7: json5 "^2.2.0" stringify-object "^4.0.0" -ts-node@^10.9.1: +ts-node@^10.9.1, ts-node@>=9.0.0: version "10.9.2" resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz" integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== @@ -5842,9 +5751,9 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typescript@^5.2.2: +typescript@^5.2.2, typescript@>=2.7, typescript@>=3, typescript@>=4.2.0, typescript@>=4.9.5: version "5.3.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz" integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== uglify-js@^3.1.4: @@ -5955,12 +5864,12 @@ validate-npm-package-name@^5.0.0: vite-plugin-css-injected-by-js@^3.3.0: version "3.3.1" - resolved "https://registry.yarnpkg.com/vite-plugin-css-injected-by-js/-/vite-plugin-css-injected-by-js-3.3.1.tgz#26b41f108c5554ee728359bdec01c68c93a48547" + resolved "https://registry.npmjs.org/vite-plugin-css-injected-by-js/-/vite-plugin-css-injected-by-js-3.3.1.tgz" integrity sha512-PjM/X45DR3/V1K1fTRs8HtZHEQ55kIfdrn+dzaqNBFrOYO073SeSNCxp4j7gSYhV9NffVHaEnOL4myoko0ePAg== -vite@^5.0.12: +"vite@^4 || ^5", vite@^5.0.12, vite@>2.0.0-0: version "5.0.12" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.0.12.tgz#8a2ffd4da36c132aec4adafe05d7adde38333c47" + resolved "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz" integrity sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w== dependencies: esbuild "^0.19.3" @@ -6062,7 +5971,16 @@ wordwrap@^1.0.0: resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==