diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..6411586 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,27 @@ +name: Tests + +on: + push: + branches: + - main + pull_request: {} + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 24 + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Run tests + run: npm test diff --git a/.gitignore b/.gitignore index b9ed5c4..e00a59a 100644 --- a/.gitignore +++ b/.gitignore @@ -133,4 +133,7 @@ dist .yarn/unplugged .yarn/build-state.yml .yarn/install-state.gz -.pnp.* \ No newline at end of file +.pnp.* +**/docs +**/.worktrees +**/.superpowers \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..94b10e4 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,69 @@ +# Repository Guidelines + +## Project Structure & Module Organization + +- Core browser extension manifest lives in `manifest.json`; popup markup is in `popup.html` and pulls styles from `resources/styles/popup.css` plus icons/images in `resources/icons` and `resources/images`. + +- All runtime logic is TypeScript modules in `src/`. + +- Localized strings sit in `_locales//messages.json`; keep keys consistent across languages and match `__MSG_*__` tokens in markup and scripts. + +## Build, Test, and Development Commands + +- `npm ci` (or `npm install`): installs dev dependencies; there is no bundler or transpile step. + +- `npm build`: runs build using vite with custom script (`tools/buildExtension.mjs`) + +- `lint:locales`: validates length of strings and lines count for some buttons + +- `npm test`: runs unit tests using vitest + +- Packaging: zip `dist/` for store uploads after build; avoid including `node_modules/`. + +## Do not patch symptoms + +- When fixing bugs, do not add quick workarounds whose only purpose is to make the current case pass. + +- Treat such changes as a temporary stub, not a real solution. + +- Your goal is to find and fix the actual root cause of the error. Before changing code, investigate why the failure happens, where the incorrect assumption is, and what part of the system is responsible. + +Avoid fixes like: + +- swallowing errors without understanding them + +- adding special cases just to satisfy one scenario + +- forcing values into a valid shape without knowing why they are invalid + +- retrying, ignoring, or bypassing failing logic + +- making the code “just work” while leaving the underlying issue unresolved + +A correct fix should explain and address the real cause of the bug, not merely hide its effects. + +## Avoid redundant validation layers + +- Normalize and validate external input once at the boundary where it enters the system, then pass the resolved value through internal functions. + +- Do not call the same fallback/validation helper repeatedly through nested helper chains unless the value can be modified or become invalid between calls. + +## Coding Style & Naming Conventions + +- Use 2-space indentation, semicolons, and `const`/`let` over `var`; prefer arrow functions and early returns to mirror existing files. + +- File names are camel case (`drawSpectrum.ts` style); functions and variables use `camelCase`. Keep DOM ids/classes in `kebab-case` as seen in `popup.html`. + +- Favor double quotes in TS/JS/JSON to stay consistent with current code and locale files. + +## Testing Guidelines + +- No automated test suite yet; run manual checks after changes: reload the unpacked extension, open the popup, tweak bands, toggle mute/reset, and confirm spectrum drawing updates without console errors. + +- Verify localization by switching the browser language and checking visible strings against `_locales` entries; default locale is `en`. + +- When touching audio logic, test across multiple tabs and sites to confirm content scripts register via `background.js` and settings persist in `chrome.storage`. + +## Localization + +- When adding UI text, create English copy first at the end of `_locales/en/messages.json`, then mirror keys across other locales and translate values; avoid hardcoded strings in markup or scripts. diff --git a/PRIVACY.md b/PRIVACY.md index 9d7e735..9e9e444 100644 --- a/PRIVACY.md +++ b/PRIVACY.md @@ -12,9 +12,6 @@ All user settings are stored locally in your browser. No data is stored on exter ## Cookies We may use cookies to enhance user experience, store preferences, and improve functionality. You can disable cookies in your browser settings. -## Analytics -We use Google Analytics to analyze usage trends and improve our services. - ## Security We take strong security measures to protect user data from unauthorized access and ensure data integrity. diff --git a/README.md b/README.md index 35adab6..858d6e1 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,13 @@ You can help translate EQ Toolkit on [Weblate](https://hosted.weblate.org/projec [![Translation status](https://hosted.weblate.org/widget/eq-toolkit-chrome-extension/svg-badge.svg)](https://hosted.weblate.org/engage/eq-toolkit-chrome-extension/) +## Development +1. Install dependencies with `npm ci`. +2. Build the extension with `npm run build`. +3. Load `dist/` as an unpacked extension from your browser extensions page. + +Run `npm run typecheck` and `npm test` before packaging changes. + ## Support The extention are provided for free. If you like the project, I would appreciate your [support](https://www.donationalerts.com/r/maitrog). diff --git a/_locales/bn/messages.json b/_locales/bn/messages.json index 9c40f6f..0e55ba0 100644 --- a/_locales/bn/messages.json +++ b/_locales/bn/messages.json @@ -3,7 +3,7 @@ "message": "EQ Toolkit - অডিও ইকুয়ালাইজার" }, "extDescription": { - "message": "EQ Toolkit অডিও নিয়ন্ত্রণের জন্য একটি বিনামূল্যের ও ওপেন-সোর্স এক্সটেনশন।" + "message": "যেকোনো ট্যাবের অডিও ইকুয়ালাইজার ও ভলিউম বুস্টার: বেস বাড়ান, সাউন্ড টিউন করুন, প্রিসেট সেভ করুন।" }, "gain_slider_label": { "message": "পরিবর্ধন:" @@ -23,21 +23,24 @@ "save_preset_button_label": { "message": "প্রিসেট সংরক্ষণ করুন" }, - "enter_preset_name": { - "message": "নাম লিখুন" - }, "settings_title": { "message": "সেটিংস" }, "presets_settings_title": { "message": "প্রিসেট" }, + "hide_default_presets_label": { + "message": "ডিফল্ট প্রিসেট লুকান" + }, "community_settings_title": { "message": "কমিউনিটি" }, "help_with_translation_label": { "message": "অনুবাদে সাহায্য করুন:" }, + "translators_label": { + "message": "অনুবাদকরা:" + }, "source_code_label": { "message": "সোর্স কোড:" }, @@ -48,7 +51,7 @@ "message": "প্রিসেট রপ্তানি করুন" }, "enable_spectrum_setting_option": { - "message": "স্পেকট্রাম ভিজুয়ালাইজেশন সক্রিয় করুন, পৃষ্ঠা পুনরায় লোড করতে হবে (উচ্চ CPU ব্যবহার)" + "message": "স্পেকট্রাম ভিজুয়ালাইজেশন সক্রিয় করুন" }, "points_count_setting_option": { "message": "EQ পয়েন্টের সংখ্যা" @@ -78,7 +81,7 @@ "message": "ইকুয়ালাইজার ইতিমধ্যে একটি উইন্ডোতে খোলা আছে" }, "support_me": { - "message": "আমাকে সমর্থন করুন" + "message": "আমাকে সমর্থন করুন:" }, "settings_button_tooltip": { "message": "সেটিংস" @@ -142,5 +145,68 @@ }, "shortcut_duplicate_error": { "message": "এই শর্টকাটটি ইতিমধ্যে অন্য কমান্ডে ব্যবহৃত হচ্ছে।" + }, + "global_controls_title": { + "message": "সামগ্রিক নিয়ন্ত্রণ" + }, + "preset_controls_title": { + "message": "প্রিসেট নিয়ন্ত্রণ" + }, + "save": { + "message": "সংরক্ষণ করুন" + }, + "save_preset_modal_title": { + "message": "প্রিসেট সংরক্ষণ করুন" + }, + "preset_name_label": { + "message": "প্রিসেটের নাম" + }, + "preset_name_empty_error": { + "message": "প্রিসেটের নাম লিখুন।" + }, + "preset_name_reserved_error": { + "message": "এই নামটি একটি অন্তর্নির্মিত প্রিসেটের জন্য সংরক্ষিত।" + }, + "preset_name_duplicate_error": { + "message": "এই নামে একটি প্রিসেট ইতিমধ্যে বিদ্যমান।" + }, + "guide_back": { + "message": "পিছনে" + }, + "guide_next": { + "message": "পরবর্তী" + }, + "guide_skip": { + "message": "এড়িয়ে যান" + }, + "guide_finish": { + "message": "শেষ করুন" + }, + "guide_theme_dark": { + "message": "গাঢ়" + }, + "guide_theme_light": { + "message": "হালকা" + }, + "guide_shortcuts_hint": { + "message": "সেটিংসে এই শর্টকাটগুলো পরিবর্তন করতে পারেন।" + }, + "guide_canvas_hint": { + "message": "ইকুয়ালাইজার সাজাতে পয়েন্ট টানুন। সেটিংসে পয়েন্টের সংখ্যা পরিবর্তন করুন।" + }, + "guide_volume_hint": { + "message": "সামগ্রিক ভলিউম সামঞ্জস্য করতে এই স্লাইডার ব্যবহার করুন।" + }, + "guide_presets_hint": { + "message": "এখানে বর্তমান সেটআপ সংরক্ষণ করুন বা একটি প্রিসেট প্রয়োগ করুন।" + }, + "donation_reminder_title": { + "message": "ডেভেলপারকে সহায়তা করুন" + }, + "donation_reminder_message": { + "message": "এই এক্সটেনশনটি আপনার কাজে লাগলে, এর উন্নয়নে সহায়তা করতে পারেন।" + }, + "donation_reminder_link": { + "message": "উন্নয়নে সহায়তা করুন" } -} \ No newline at end of file +} diff --git a/_locales/de/messages.json b/_locales/de/messages.json index db1dd4b..aabcd08 100644 --- a/_locales/de/messages.json +++ b/_locales/de/messages.json @@ -3,7 +3,7 @@ "message": "EQ Toolkit - Audio-Equalizer" }, "extDescription": { - "message": "EQ Toolkit ist eine kostenlose Open-Source-Erweiterung zur Audiosteuerung." + "message": "Audio-Equalizer und Lautstärke-Booster für jeden Tab: Bass verstärken, Sound anpassen, Presets speichern." }, "gain_slider_label": { "message": "Verstärkung:" @@ -23,21 +23,24 @@ "save_preset_button_label": { "message": "Preset speichern" }, - "enter_preset_name": { - "message": "Name eingeben" - }, "settings_title": { "message": "Einstellungen" }, "presets_settings_title": { "message": "Voreinstellungen" }, + "hide_default_presets_label": { + "message": "Standard-Presets ausblenden" + }, "community_settings_title": { "message": "Community" }, "help_with_translation_label": { "message": "Bei der Übersetzung helfen:" }, + "translators_label": { + "message": "Übersetzer:" + }, "source_code_label": { "message": "Quellcode:" }, @@ -48,7 +51,7 @@ "message": "Voreinstellungen exportieren" }, "enable_spectrum_setting_option": { - "message": "Spektrumvisualisierung aktivieren, Seite muss neu geladen werden (hohe CPU-Last)" + "message": "Spektrumvisualisierung aktivieren" }, "points_count_setting_option": { "message": "Anzahl der EQ-Punkte" @@ -78,7 +81,7 @@ "message": "Der Equalizer ist bereits in einem Fenster geöffnet" }, "support_me": { - "message": "Unterstütze mich" + "message": "Unterstütze mich:" }, "settings_button_tooltip": { "message": "Einstellungen" @@ -142,5 +145,68 @@ }, "shortcut_duplicate_error": { "message": "Dieses Tastenkürzel wird bereits von einem anderen Befehl verwendet." + }, + "global_controls_title": { + "message": "Globale Steuerelemente" + }, + "preset_controls_title": { + "message": "Voreinstellungen" + }, + "save": { + "message": "Speichern" + }, + "save_preset_modal_title": { + "message": "Voreinstellung speichern" + }, + "preset_name_label": { + "message": "Name der Voreinstellung" + }, + "preset_name_empty_error": { + "message": "Geben Sie einen Namen für die Voreinstellung ein." + }, + "preset_name_reserved_error": { + "message": "Dieser Name ist für eine integrierte Voreinstellung reserviert." + }, + "preset_name_duplicate_error": { + "message": "Eine Voreinstellung mit diesem Namen existiert bereits." + }, + "guide_back": { + "message": "Zurück" + }, + "guide_next": { + "message": "Weiter" + }, + "guide_skip": { + "message": "Überspringen" + }, + "guide_finish": { + "message": "Fertig" + }, + "guide_theme_dark": { + "message": "Dunkel" + }, + "guide_theme_light": { + "message": "Hell" + }, + "guide_shortcuts_hint": { + "message": "Du kannst diese Tastenkürzel in den Einstellungen ändern." + }, + "guide_canvas_hint": { + "message": "Ziehe die Punkte, um den Equalizer einzustellen. Die Anzahl kannst du in den Einstellungen ändern." + }, + "guide_volume_hint": { + "message": "Mit diesem Regler passt du die Gesamtlautstärke an." + }, + "guide_presets_hint": { + "message": "Hier kannst du die aktuelle Einstellung speichern oder ein Preset anwenden." + }, + "donation_reminder_title": { + "message": "Unterstütze den Entwickler" + }, + "donation_reminder_message": { + "message": "Wenn dir diese Erweiterung hilft, kannst du ihre Entwicklung unterstützen." + }, + "donation_reminder_link": { + "message": "Entwicklung unterstützen" } -} \ No newline at end of file +} diff --git a/_locales/en/messages.json b/_locales/en/messages.json index c65264d..e81e5b8 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -3,7 +3,7 @@ "message": "EQ Toolkit - Audio equalizer" }, "extDescription": { - "message": "EQ Toolkit is a free and open-source extension that provides audio control." + "message": "Audio equalizer and volume booster for any tab: boost bass, tune sound, save presets, mute tabs, use shortcuts and auto-start." }, "gain_slider_label": { "message": "Gain:" @@ -23,21 +23,24 @@ "save_preset_button_label": { "message": "Save preset" }, - "enter_preset_name": { - "message": "Enter name" - }, "settings_title": { "message": "Settings" }, "presets_settings_title": { "message": "Presets" }, + "hide_default_presets_label": { + "message": "Hide default presets" + }, "community_settings_title": { "message": "Community" }, "help_with_translation_label": { "message": "Help with translation:" }, + "translators_label": { + "message": "Translators:" + }, "source_code_label": { "message": "Source code:" }, @@ -48,7 +51,7 @@ "message": "Export" }, "enable_spectrum_setting_option": { - "message": "Enable spectrum visualisation, need to restart page (high CPU load)" + "message": "Enable spectrum visualisation" }, "points_count_setting_option": { "message": "Number of EQ points" @@ -78,7 +81,7 @@ "message": "Equalizer is already open in a window" }, "support_me": { - "message": "Support me" + "message": "Support me:" }, "settings_button_tooltip": { "message": "Settings" @@ -142,5 +145,68 @@ }, "shortcut_duplicate_error": { "message": "This shortcut is already used by another command." + }, + "global_controls_title": { + "message": "Global Controls" + }, + "preset_controls_title": { + "message": "Preset Controls" + }, + "save": { + "message": "Save" + }, + "save_preset_modal_title": { + "message": "Save preset" + }, + "preset_name_label": { + "message": "Preset name" + }, + "preset_name_empty_error": { + "message": "Enter a preset name." + }, + "preset_name_reserved_error": { + "message": "This name is reserved for a built-in preset." + }, + "preset_name_duplicate_error": { + "message": "A preset with this name already exists." + }, + "guide_back": { + "message": "Back" + }, + "guide_next": { + "message": "Next" + }, + "guide_skip": { + "message": "Skip" + }, + "guide_finish": { + "message": "Finish" + }, + "guide_theme_dark": { + "message": "Dark" + }, + "guide_theme_light": { + "message": "Light" + }, + "guide_shortcuts_hint": { + "message": "You can change these shortcuts in Settings." + }, + "guide_canvas_hint": { + "message": "Drag points to shape the equalizer. Change the number of points in Settings." + }, + "guide_volume_hint": { + "message": "Use this slider to adjust the overall volume." + }, + "guide_presets_hint": { + "message": "Save the current setup or apply a preset here." + }, + "donation_reminder_title": { + "message": "Support the developer" + }, + "donation_reminder_message": { + "message": "If this extension is useful to you, you can support its development." + }, + "donation_reminder_link": { + "message": "Support development" } -} \ No newline at end of file +} diff --git a/_locales/es/messages.json b/_locales/es/messages.json index 16384ff..80d02d7 100644 --- a/_locales/es/messages.json +++ b/_locales/es/messages.json @@ -3,7 +3,7 @@ "message": "EQ Toolkit - Ecualizador de audio" }, "extDescription": { - "message": "EQ Toolkit es una extensión gratuita y de código abierto para controlar el audio." + "message": "Ecualizador de audio y amplificador de volumen para cualquier pestaña: potencia graves, ajusta sonido y guarda presets." }, "gain_slider_label": { "message": "Amplificación:" @@ -23,21 +23,24 @@ "save_preset_button_label": { "message": "Guardar preset" }, - "enter_preset_name": { - "message": "Ingrese nombre" - }, "settings_title": { "message": "Configuración" }, "presets_settings_title": { "message": "Preajustes" }, + "hide_default_presets_label": { + "message": "Ocultar preajustes predeterminados" + }, "community_settings_title": { "message": "Comunidad" }, "help_with_translation_label": { "message": "Ayuda con la traducción:" }, + "translators_label": { + "message": "Traductores:" + }, "source_code_label": { "message": "Código fuente:" }, @@ -48,7 +51,7 @@ "message": "Exportar preajustes" }, "enable_spectrum_setting_option": { - "message": "Activar la visualización del espectro; es necesario recargar la página (alto uso de CPU)" + "message": "Activar la visualización del espectro" }, "points_count_setting_option": { "message": "Número de puntos de EQ" @@ -78,7 +81,7 @@ "message": "El ecualizador ya está abierto en una ventana" }, "support_me": { - "message": "Apóyame" + "message": "Apóyame:" }, "settings_button_tooltip": { "message": "Configuración" @@ -142,5 +145,68 @@ }, "shortcut_duplicate_error": { "message": "Este atajo ya lo usa otro comando." + }, + "global_controls_title": { + "message": "Controles globales" + }, + "preset_controls_title": { + "message": "Controles de preajustes" + }, + "save": { + "message": "Guardar" + }, + "save_preset_modal_title": { + "message": "Guardar preajuste" + }, + "preset_name_label": { + "message": "Nombre del preajuste" + }, + "preset_name_empty_error": { + "message": "Introduce un nombre para el preajuste." + }, + "preset_name_reserved_error": { + "message": "Este nombre está reservado para un preajuste integrado." + }, + "preset_name_duplicate_error": { + "message": "Ya existe un preajuste con este nombre." + }, + "guide_back": { + "message": "Atrás" + }, + "guide_next": { + "message": "Siguiente" + }, + "guide_skip": { + "message": "Omitir" + }, + "guide_finish": { + "message": "Finalizar" + }, + "guide_theme_dark": { + "message": "Oscuro" + }, + "guide_theme_light": { + "message": "Claro" + }, + "guide_shortcuts_hint": { + "message": "Puedes cambiar estos atajos en Ajustes." + }, + "guide_canvas_hint": { + "message": "Arrastra los puntos para ajustar el ecualizador. Cambia su cantidad en Ajustes." + }, + "guide_volume_hint": { + "message": "Usa este control para ajustar el volumen general." + }, + "guide_presets_hint": { + "message": "Aquí puedes guardar la configuración actual o aplicar un preajuste." + }, + "donation_reminder_title": { + "message": "Apoya al desarrollador" + }, + "donation_reminder_message": { + "message": "Si esta extensión te resulta útil, puedes apoyar su desarrollo." + }, + "donation_reminder_link": { + "message": "Apoyar el desarrollo" } -} \ No newline at end of file +} diff --git a/_locales/fr/messages.json b/_locales/fr/messages.json index bd7e979..e608f95 100644 --- a/_locales/fr/messages.json +++ b/_locales/fr/messages.json @@ -3,7 +3,7 @@ "message": "EQ Toolkit - Égaliseur audio" }, "extDescription": { - "message": "EQ Toolkit est une extension gratuite et open source pour contrôler l’audio." + "message": "Égaliseur audio et amplificateur de volume pour tout onglet : boostez les basses, réglez le son et sauvez vos presets." }, "gain_slider_label": { "message": "Amplification:" @@ -21,10 +21,7 @@ "message": "Aucun" }, "save_preset_button_label": { - "message": "Enregistrer le préréglage" - }, - "enter_preset_name": { - "message": "Entrez le nom" + "message": "Enregistrer" }, "settings_title": { "message": "Paramètres" @@ -32,12 +29,18 @@ "presets_settings_title": { "message": "Préréglages" }, + "hide_default_presets_label": { + "message": "Masquer les préréglages par défaut" + }, "community_settings_title": { "message": "Communauté" }, "help_with_translation_label": { "message": "Aider à la traduction :" }, + "translators_label": { + "message": "Traducteurs :" + }, "source_code_label": { "message": "Code source :" }, @@ -48,7 +51,7 @@ "message": "Exporter des préréglages" }, "enable_spectrum_setting_option": { - "message": "Activer la visualisation du spectre; il faut recharger la page (utilisation élevée du CPU)" + "message": "Activer la visualisation du spectre" }, "points_count_setting_option": { "message": "Nombre de points d'EQ" @@ -78,7 +81,7 @@ "message": "L'égaliseur est déjà ouvert dans une fenêtre" }, "support_me": { - "message": "Soutenez-moi" + "message": "Soutenez-moi:" }, "settings_button_tooltip": { "message": "Paramètres" @@ -142,5 +145,68 @@ }, "shortcut_duplicate_error": { "message": "Ce raccourci est déjà utilisé par une autre commande." + }, + "global_controls_title": { + "message": "Commandes globales" + }, + "preset_controls_title": { + "message": "Commandes des préréglages" + }, + "save": { + "message": "Enregistrer" + }, + "save_preset_modal_title": { + "message": "Enregistrer le préréglage" + }, + "preset_name_label": { + "message": "Nom du préréglage" + }, + "preset_name_empty_error": { + "message": "Saisissez un nom de préréglage." + }, + "preset_name_reserved_error": { + "message": "Ce nom est réservé à un préréglage intégré." + }, + "preset_name_duplicate_error": { + "message": "Un préréglage portant ce nom existe déjà." + }, + "guide_back": { + "message": "Retour" + }, + "guide_next": { + "message": "Suivant" + }, + "guide_skip": { + "message": "Ignorer" + }, + "guide_finish": { + "message": "Terminer" + }, + "guide_theme_dark": { + "message": "Sombre" + }, + "guide_theme_light": { + "message": "Clair" + }, + "guide_shortcuts_hint": { + "message": "Vous pouvez modifier ces raccourcis dans les paramètres." + }, + "guide_canvas_hint": { + "message": "Faites glisser les points pour régler l’égaliseur. Modifiez leur nombre dans les paramètres." + }, + "guide_volume_hint": { + "message": "Utilisez ce curseur pour régler le volume général." + }, + "guide_presets_hint": { + "message": "Enregistrez le réglage actuel ou appliquez un préréglage ici." + }, + "donation_reminder_title": { + "message": "Soutenez le développeur" + }, + "donation_reminder_message": { + "message": "Si cette extension vous est utile, vous pouvez soutenir son développement." + }, + "donation_reminder_link": { + "message": "Soutenir le développement" } -} \ No newline at end of file +} diff --git a/_locales/hi/messages.json b/_locales/hi/messages.json index 384b5f0..51e3339 100644 --- a/_locales/hi/messages.json +++ b/_locales/hi/messages.json @@ -3,7 +3,7 @@ "message": "EQ Toolkit - ऑडियो इक्वलाइज़र" }, "extDescription": { - "message": "EQ Toolkit ऑडियो नियंत्रण प्रदान करने वाला एक मुफ़्त और ओपन-सोर्स एक्सटेंशन है।" + "message": "किसी भी टैब के लिए ऑडियो इक्वलाइज़र और वॉल्यूम बूस्टर: बास बढ़ाएँ, ध्वनि ट्यून करें, प्रीसेट सहेजें।" }, "gain_slider_label": { "message": "विस्तारण:" @@ -23,21 +23,24 @@ "save_preset_button_label": { "message": "प्रसेट सहेजें" }, - "enter_preset_name": { - "message": "नाम दर्ज करें" - }, "settings_title": { "message": "सेटिंग्स" }, "presets_settings_title": { "message": "प्रीसेट" }, + "hide_default_presets_label": { + "message": "डिफ़ॉल्ट प्रीसेट छिपाएं" + }, "community_settings_title": { "message": "समुदाय" }, "help_with_translation_label": { "message": "अनुवाद में मदद करें:" }, + "translators_label": { + "message": "अनुवादक:" + }, "source_code_label": { "message": "सोर्स कोड:" }, @@ -48,7 +51,7 @@ "message": "प्रीसेट निर्यात करें" }, "enable_spectrum_setting_option": { - "message": "स्पेक्ट्रम दृश्यांकन सक्षम करें, पेज को फिर से लोड करना होगा (उच्च CPU लोड)" + "message": "स्पेक्ट्रम दृश्यांकन सक्षम करें" }, "points_count_setting_option": { "message": "EQ बिंदुओं की संख्या" @@ -78,7 +81,7 @@ "message": "इक्वलाइज़र पहले से ही एक विंडो में खुला है" }, "support_me": { - "message": "मेरा समर्थन करें" + "message": "मेरा समर्थन करें:" }, "settings_button_tooltip": { "message": "सेटिंग्स" @@ -142,5 +145,68 @@ }, "shortcut_duplicate_error": { "message": "यह शॉर्टकट पहले से ही किसी अन्य कमांड द्वारा उपयोग किया जा रहा है।" + }, + "global_controls_title": { + "message": "वैश्विक नियंत्रण" + }, + "preset_controls_title": { + "message": "प्रीसेट नियंत्रण" + }, + "save": { + "message": "सहेजें" + }, + "save_preset_modal_title": { + "message": "प्रीसेट सहेजें" + }, + "preset_name_label": { + "message": "प्रीसेट का नाम" + }, + "preset_name_empty_error": { + "message": "प्रीसेट का नाम दर्ज करें।" + }, + "preset_name_reserved_error": { + "message": "यह नाम अंतर्निहित प्रीसेट के लिए आरक्षित है।" + }, + "preset_name_duplicate_error": { + "message": "इस नाम का प्रीसेट पहले से मौजूद है।" + }, + "guide_back": { + "message": "पीछे" + }, + "guide_next": { + "message": "अगला" + }, + "guide_skip": { + "message": "छोड़ें" + }, + "guide_finish": { + "message": "समाप्त करें" + }, + "guide_theme_dark": { + "message": "गहरा" + }, + "guide_theme_light": { + "message": "हल्का" + }, + "guide_shortcuts_hint": { + "message": "आप इन शॉर्टकट को सेटिंग्स में बदल सकते हैं।" + }, + "guide_canvas_hint": { + "message": "इक्वलाइज़र सेट करने के लिए बिंदुओं को खींचें। सेटिंग्स में बिंदुओं की संख्या बदलें।" + }, + "guide_volume_hint": { + "message": "कुल वॉल्यूम बदलने के लिए इस स्लाइडर का उपयोग करें।" + }, + "guide_presets_hint": { + "message": "यहाँ मौजूदा सेटअप सहेजें या कोई प्रीसेट लागू करें।" + }, + "donation_reminder_title": { + "message": "डेवलपर का समर्थन करें" + }, + "donation_reminder_message": { + "message": "यदि यह एक्सटेंशन आपके लिए उपयोगी है, तो आप इसके विकास में सहयोग कर सकते हैं।" + }, + "donation_reminder_link": { + "message": "विकास में सहयोग करें" } -} \ No newline at end of file +} diff --git a/_locales/id/messages.json b/_locales/id/messages.json index 80947b3..e1eca03 100644 --- a/_locales/id/messages.json +++ b/_locales/id/messages.json @@ -3,7 +3,7 @@ "message": "EQ Toolkit - Equalizer audio" }, "extDescription": { - "message": "EQ Toolkit adalah ekstensi gratis dan sumber terbuka untuk mengontrol audio." + "message": "Equalizer audio dan penguat volume untuk tab apa pun: boost bass, atur suara, simpan preset, mute tab." }, "gain_slider_label": { "message": "Amplifikasi:" @@ -23,21 +23,24 @@ "save_preset_button_label": { "message": "Simpan preset" }, - "enter_preset_name": { - "message": "Masukkan nama" - }, "settings_title": { "message": "Pengaturan" }, "presets_settings_title": { "message": "Preset" }, + "hide_default_presets_label": { + "message": "Sembunyikan preset bawaan" + }, "community_settings_title": { "message": "Komunitas" }, "help_with_translation_label": { "message": "Bantu terjemahan:" }, + "translators_label": { + "message": "Penerjemah:" + }, "source_code_label": { "message": "Kode sumber:" }, @@ -48,7 +51,7 @@ "message": "Ekspor preset" }, "enable_spectrum_setting_option": { - "message": "Aktifkan visualisasi spektrum, perlu memuat ulang halaman (beban CPU tinggi)" + "message": "Aktifkan visualisasi spektrum" }, "points_count_setting_option": { "message": "Jumlah titik EQ" @@ -78,7 +81,7 @@ "message": "Equalizer sudah terbuka di jendela" }, "support_me": { - "message": "Dukung saya" + "message": "Dukung saya:" }, "settings_button_tooltip": { "message": "Pengaturan" @@ -142,5 +145,68 @@ }, "shortcut_duplicate_error": { "message": "Pintasan ini sudah digunakan oleh perintah lain." + }, + "global_controls_title": { + "message": "Kontrol global" + }, + "preset_controls_title": { + "message": "Kontrol preset" + }, + "save": { + "message": "Simpan" + }, + "save_preset_modal_title": { + "message": "Simpan preset" + }, + "preset_name_label": { + "message": "Nama preset" + }, + "preset_name_empty_error": { + "message": "Masukkan nama preset." + }, + "preset_name_reserved_error": { + "message": "Nama ini disediakan untuk preset bawaan." + }, + "preset_name_duplicate_error": { + "message": "Preset dengan nama ini sudah ada." + }, + "guide_back": { + "message": "Kembali" + }, + "guide_next": { + "message": "Berikutnya" + }, + "guide_skip": { + "message": "Lewati" + }, + "guide_finish": { + "message": "Selesai" + }, + "guide_theme_dark": { + "message": "Gelap" + }, + "guide_theme_light": { + "message": "Terang" + }, + "guide_shortcuts_hint": { + "message": "Anda dapat mengubah pintasan ini di Pengaturan." + }, + "guide_canvas_hint": { + "message": "Seret titik untuk mengatur equalizer. Ubah jumlah titik di Pengaturan." + }, + "guide_volume_hint": { + "message": "Gunakan penggeser ini untuk menyesuaikan volume keseluruhan." + }, + "guide_presets_hint": { + "message": "Simpan pengaturan saat ini atau terapkan preset di sini." + }, + "donation_reminder_title": { + "message": "Dukung pengembang" + }, + "donation_reminder_message": { + "message": "Jika ekstensi ini berguna, Anda dapat mendukung pengembangannya." + }, + "donation_reminder_link": { + "message": "Dukung pengembangan" } -} \ No newline at end of file +} diff --git a/_locales/it/messages.json b/_locales/it/messages.json index 1c02633..db5bdcf 100644 --- a/_locales/it/messages.json +++ b/_locales/it/messages.json @@ -3,7 +3,7 @@ "message": "EQ Toolkit - Equalizzatore audio" }, "extDescription": { - "message": "EQ Toolkit è un'estensione gratuita e open source per controllare l'audio." + "message": "Equalizzatore audio e booster volume per ogni scheda: potenzia i bassi, regola il suono e salva preset." }, "gain_slider_label": { "message": "Amplificazione:" @@ -23,21 +23,24 @@ "save_preset_button_label": { "message": "Salva preset" }, - "enter_preset_name": { - "message": "Inserisci nome" - }, "settings_title": { "message": "Impostazioni" }, "presets_settings_title": { "message": "Presets" }, + "hide_default_presets_label": { + "message": "Nascondi preset predefiniti" + }, "community_settings_title": { "message": "Community" }, "help_with_translation_label": { "message": "Aiuta con la traduzione:" }, + "translators_label": { + "message": "Traduttori:" + }, "source_code_label": { "message": "Codice sorgente:" }, @@ -48,7 +51,7 @@ "message": "Esporta preset" }, "enable_spectrum_setting_option": { - "message": "Abilita la visualizzazione dello spettro, è necessario ricaricare la pagina (carico CPU elevato)" + "message": "Abilita la visualizzazione dello spettro" }, "points_count_setting_option": { "message": "Numero di punti EQ" @@ -78,7 +81,7 @@ "message": "L'equalizzatore è già aperto in una finestra" }, "support_me": { - "message": "Sostienimi" + "message": "Sostienimi:" }, "settings_button_tooltip": { "message": "Impostazioni" @@ -142,5 +145,68 @@ }, "shortcut_duplicate_error": { "message": "Questa scorciatoia è già usata da un altro comando." + }, + "global_controls_title": { + "message": "Controlli globali" + }, + "preset_controls_title": { + "message": "Controlli delle preimpostazioni" + }, + "save": { + "message": "Salva" + }, + "save_preset_modal_title": { + "message": "Salva preimpostazione" + }, + "preset_name_label": { + "message": "Nome preimpostazione" + }, + "preset_name_empty_error": { + "message": "Inserisci un nome per la preimpostazione." + }, + "preset_name_reserved_error": { + "message": "Questo nome è riservato a una preimpostazione integrata." + }, + "preset_name_duplicate_error": { + "message": "Esiste già una preimpostazione con questo nome." + }, + "guide_back": { + "message": "Indietro" + }, + "guide_next": { + "message": "Avanti" + }, + "guide_skip": { + "message": "Salta" + }, + "guide_finish": { + "message": "Fine" + }, + "guide_theme_dark": { + "message": "Scuro" + }, + "guide_theme_light": { + "message": "Chiaro" + }, + "guide_shortcuts_hint": { + "message": "Puoi modificare queste scorciatoie nelle Impostazioni." + }, + "guide_canvas_hint": { + "message": "Trascina i punti per regolare l’equalizzatore. Modificane il numero nelle Impostazioni." + }, + "guide_volume_hint": { + "message": "Usa questo cursore per regolare il volume generale." + }, + "guide_presets_hint": { + "message": "Salva la configurazione corrente o applica un preset qui." + }, + "donation_reminder_title": { + "message": "Sostieni lo sviluppatore" + }, + "donation_reminder_message": { + "message": "Se questa estensione ti è utile, puoi sostenerne lo sviluppo." + }, + "donation_reminder_link": { + "message": "Sostieni lo sviluppo" } -} \ No newline at end of file +} diff --git a/_locales/ja/messages.json b/_locales/ja/messages.json index 6ca60e1..225b701 100644 --- a/_locales/ja/messages.json +++ b/_locales/ja/messages.json @@ -3,7 +3,7 @@ "message": "EQ Toolkit - オーディオイコライザー" }, "extDescription": { - "message": "EQ Toolkit は、音声をコントロールできる無料のオープンソース拡張機能です。" + "message": "任意のタブで使える音声イコライザーと音量ブースター。低音強化、音質調整、プリセット保存、ミュート、ショートカットに対応。" }, "gain_slider_label": { "message": "増幅" @@ -23,21 +23,24 @@ "save_preset_button_label": { "message": "設定を保存" }, - "enter_preset_name": { - "message": "名前を入力" - }, "settings_title": { "message": "設定" }, "presets_settings_title": { "message": "プリセット" }, + "hide_default_presets_label": { + "message": "デフォルトプリセットを非表示" + }, "community_settings_title": { "message": "コミュニティ" }, "help_with_translation_label": { "message": "翻訳に協力:" }, + "translators_label": { + "message": "翻訳者:" + }, "source_code_label": { "message": "ソースコード:" }, @@ -48,7 +51,7 @@ "message": "プリセットをエクスポート" }, "enable_spectrum_setting_option": { - "message": "スペクトラム可視化を有効にする(ページの再読み込みが必要・CPU負荷が高い)" + "message": "スペクトラム可視化を有効にする" }, "points_count_setting_option": { "message": "EQポイント数" @@ -78,7 +81,7 @@ "message": "イコライザーはすでにウィンドウで開いています" }, "support_me": { - "message": "私を支援する" + "message": "私を支援する:" }, "settings_button_tooltip": { "message": "設定" @@ -142,5 +145,68 @@ }, "shortcut_duplicate_error": { "message": "このショートカットは別のコマンドですでに使用されています。" + }, + "global_controls_title": { + "message": "グローバルコントロール" + }, + "preset_controls_title": { + "message": "プリセットコントロール" + }, + "save": { + "message": "保存" + }, + "save_preset_modal_title": { + "message": "プリセットを保存" + }, + "preset_name_label": { + "message": "プリセット名" + }, + "preset_name_empty_error": { + "message": "プリセット名を入力してください。" + }, + "preset_name_reserved_error": { + "message": "この名前は組み込みプリセット用に予約されています。" + }, + "preset_name_duplicate_error": { + "message": "この名前のプリセットは既に存在します。" + }, + "guide_back": { + "message": "戻る" + }, + "guide_next": { + "message": "次へ" + }, + "guide_skip": { + "message": "スキップ" + }, + "guide_finish": { + "message": "完了" + }, + "guide_theme_dark": { + "message": "ダーク" + }, + "guide_theme_light": { + "message": "ライト" + }, + "guide_shortcuts_hint": { + "message": "これらのショートカットは設定で変更できます。" + }, + "guide_canvas_hint": { + "message": "ポイントをドラッグしてイコライザーを調整します。ポイント数は設定で変更できます。" + }, + "guide_volume_hint": { + "message": "このスライダーで全体の音量を調整します。" + }, + "guide_presets_hint": { + "message": "ここで現在の設定を保存するか、プリセットを適用できます。" + }, + "donation_reminder_title": { + "message": "開発者を支援" + }, + "donation_reminder_message": { + "message": "この拡張機能が役立っている場合は、開発を支援できます。" + }, + "donation_reminder_link": { + "message": "開発を支援" } -} \ No newline at end of file +} diff --git a/_locales/ko/messages.json b/_locales/ko/messages.json index 1874585..da74f3b 100644 --- a/_locales/ko/messages.json +++ b/_locales/ko/messages.json @@ -3,7 +3,7 @@ "message": "EQ Toolkit - 오디오 이퀄라이저" }, "extDescription": { - "message": "EQ Toolkit은 오디오 제어 기능을 제공하는 무료 오픈 소스 확장 프로그램입니다." + "message": "모든 탭용 오디오 이퀄라이저와 볼륨 부스터: 베이스 강화, 사운드 조정, 프리셋 저장, 탭 음소거." }, "gain_slider_label": { "message": "확대:" @@ -23,21 +23,24 @@ "save_preset_button_label": { "message": "프리셋 저장" }, - "enter_preset_name": { - "message": "이름 입력" - }, "settings_title": { "message": "설정" }, "presets_settings_title": { "message": "프리셋" }, + "hide_default_presets_label": { + "message": "기본 프리셋 숨기기" + }, "community_settings_title": { "message": "커뮤니티" }, "help_with_translation_label": { "message": "번역 돕기:" }, + "translators_label": { + "message": "번역가:" + }, "source_code_label": { "message": "소스 코드:" }, @@ -48,7 +51,7 @@ "message": "프리셋 내보내기" }, "enable_spectrum_setting_option": { - "message": "스펙트럼 시각화 활성화, 페이지를 다시 로드해야 함(높은 CPU 부하)" + "message": "스펙트럼 시각화 활성화" }, "points_count_setting_option": { "message": "EQ 포인트 수" @@ -78,7 +81,7 @@ "message": "이퀄라이저가 이미 창에서 열려 있습니다" }, "support_me": { - "message": "나를 후원하기" + "message": "나를 후원하기:" }, "settings_button_tooltip": { "message": "설정" @@ -142,5 +145,68 @@ }, "shortcut_duplicate_error": { "message": "이 단축키는 이미 다른 명령에서 사용 중입니다." + }, + "global_controls_title": { + "message": "전역 컨트롤" + }, + "preset_controls_title": { + "message": "프리셋 컨트롤" + }, + "save": { + "message": "저장" + }, + "save_preset_modal_title": { + "message": "프리셋 저장" + }, + "preset_name_label": { + "message": "프리셋 이름" + }, + "preset_name_empty_error": { + "message": "프리셋 이름을 입력하세요." + }, + "preset_name_reserved_error": { + "message": "이 이름은 기본 제공 프리셋용으로 예약되어 있습니다." + }, + "preset_name_duplicate_error": { + "message": "이 이름의 프리셋이 이미 있습니다." + }, + "guide_back": { + "message": "뒤로" + }, + "guide_next": { + "message": "다음" + }, + "guide_skip": { + "message": "건너뛰기" + }, + "guide_finish": { + "message": "완료" + }, + "guide_theme_dark": { + "message": "어둡게" + }, + "guide_theme_light": { + "message": "밝게" + }, + "guide_shortcuts_hint": { + "message": "이 단축키는 설정에서 변경할 수 있습니다." + }, + "guide_canvas_hint": { + "message": "포인트를 드래그해 이퀄라이저를 조정하세요. 포인트 수는 설정에서 변경할 수 있습니다." + }, + "guide_volume_hint": { + "message": "이 슬라이더로 전체 볼륨을 조절하세요." + }, + "guide_presets_hint": { + "message": "여기에서 현재 설정을 저장하거나 프리셋을 적용하세요." + }, + "donation_reminder_title": { + "message": "개발자 후원" + }, + "donation_reminder_message": { + "message": "이 확장 프로그램이 유용하다면 개발을 후원해 주세요." + }, + "donation_reminder_link": { + "message": "개발 후원" } -} \ No newline at end of file +} diff --git a/_locales/lo/messages.json b/_locales/lo/messages.json index 7a558e7..51116c2 100644 --- a/_locales/lo/messages.json +++ b/_locales/lo/messages.json @@ -1,6 +1,9 @@ { + "extName": { + "message": "EQ Toolkit - ຕົວປັບສຽງ" + }, "extDescription": { - "message": "EQ Toolkit ແມ່ນສ່ວນຂະຫຍາຍຟຣີ ແລະ ເປັນໂອເພນຊອດ (Open-source) ທີ່ໃຫ້ບໍລິການຄວບຄຸມສຽງ." + "message": "ຕົວປັບສຽງ ແລະ ຕົວເພີ່ມລະດັບສຽງສຳລັບແຖບໃດກໍໄດ້: ເພີ່ມສຽງເບດ, ປັບສຽງ, ບັນທຶກຄ່າທີ່ຕັ້ງໄວ້ລ່ວງໜ້າ, ປິດສຽງແຖບ, ໃຊ້ທາງລັດ ແລະ ເລີ່ມຕົ້ນອັດຕະໂນມັດ." }, "gain_slider_label": { "message": "ອັດຕາຂະຫຍາຍ (Gain):" @@ -20,21 +23,24 @@ "save_preset_button_label": { "message": "ບັນທຶກຄ່າທີ່ຕັ້ງໄວ້" }, - "enter_preset_name": { - "message": "ປ້ອນຊື່" - }, "settings_title": { "message": "ການຕັ້ງຄ່າ" }, "presets_settings_title": { "message": "ຄ່າທີ່ຕັ້ງໄວ້" }, + "hide_default_presets_label": { + "message": "ເຊື່ອງຄ່າທີ່ຕັ້ງໄວ້ເລີ່ມຕົ້ນ" + }, "community_settings_title": { "message": "ຊຸມຊົນ" }, "help_with_translation_label": { "message": "ຊ່ວຍແປພາສາ:" }, + "translators_label": { + "message": "ຜູ້ແປ:" + }, "source_code_label": { "message": "ຊອດໂຄດ (Source code):" }, @@ -45,7 +51,7 @@ "message": "ສົ່ງອອກ" }, "enable_spectrum_setting_option": { - "message": "ເປີດໃຊ້ການສະແດງພາບສະເປັກຕຣຳ (Spectrum), ຕ້ອງໂຫຼດໜ້າເວັບຄືນໃໝ່ (ໃຊ້ CPU ສູງ)" + "message": "ເປີດໃຊ້ການສະແດງພາບສະເປັກຕຣຳ (Spectrum)" }, "points_count_setting_option": { "message": "ຈຳນວນຈຸດ EQ" @@ -140,7 +146,67 @@ "shortcut_duplicate_error": { "message": "ປຸ່ມລັດນີ້ຖືກໃຊ້ໂດຍຄຳສັ່ງອື່ນແລ້ວ." }, - "extName": { - "message": "EQ Toolkit - ຕົວປັບສຽງ" + "global_controls_title": { + "message": "ການຄວບຄຸມທົ່ວໄປ" + }, + "preset_controls_title": { + "message": "ການຄວບຄຸມຄ່າທີ່ຕັ້ງໄວ້" + }, + "save": { + "message": "ບັນທຶກ" + }, + "save_preset_modal_title": { + "message": "ບັນທຶກຄ່າທີ່ຕັ້ງໄວ້" + }, + "preset_name_label": { + "message": "ຊື່ຄ່າທີ່ຕັ້ງໄວ້" + }, + "preset_name_empty_error": { + "message": "ປ້ອນຊື່ຄ່າທີ່ຕັ້ງໄວ້." + }, + "preset_name_reserved_error": { + "message": "ຊື່ນີ້ສະຫງວນໄວ້ສຳລັບຄ່າທີ່ຕັ້ງໄວ້ໃນຕົວ." + }, + "preset_name_duplicate_error": { + "message": "ມີຄ່າທີ່ຕັ້ງໄວ້ຊື່ນີ້ແລ້ວ." + }, + "guide_back": { + "message": "ກັບຄືນ" + }, + "guide_next": { + "message": "ຕໍ່ໄປ" + }, + "guide_skip": { + "message": "ຂ້າມ" + }, + "guide_finish": { + "message": "ສຳເລັດ" + }, + "guide_theme_dark": { + "message": "ມືດ" + }, + "guide_theme_light": { + "message": "ສະຫວ່າງ" + }, + "guide_shortcuts_hint": { + "message": "ທ່ານສາມາດປ່ຽນປຸ່ມລັດເຫຼົ່ານີ້ໄດ້ໃນການຕັ້ງຄ່າ." + }, + "guide_canvas_hint": { + "message": "ລາກຈຸດເພື່ອປັບແຕ່ງອີຄວອໄລເຊີ. ປ່ຽນຈຳນວນຈຸດໄດ້ໃນການຕັ້ງຄ່າ." + }, + "guide_volume_hint": { + "message": "ໃຊ້ແຖບເລື່ອນນີ້ເພື່ອປັບລະດັບສຽງໂດຍລວມ." + }, + "guide_presets_hint": { + "message": "ບັນທຶກການຕັ້ງຄ່າປັດຈຸບັນ ຫຼື ນຳໃຊ້ຄ່າທີ່ຕັ້ງໄວ້ຢູ່ບ່ອນນີ້." + }, + "donation_reminder_title": { + "message": "ສະໜັບສະໜູນນັກພັດທະນາ" + }, + "donation_reminder_message": { + "message": "ຖ້າສ່ວນຂະຫຍາຍນີ້ມີປະໂຫຍດຕໍ່ທ່ານ ທ່ານສາມາດສະໜັບສະໜູນການພັດທະນາໄດ້." + }, + "donation_reminder_link": { + "message": "ສະໜັບສະໜູນການພັດທະນາ" } } diff --git a/_locales/nl/messages.json b/_locales/nl/messages.json index d78c395..1057ab8 100644 --- a/_locales/nl/messages.json +++ b/_locales/nl/messages.json @@ -3,7 +3,7 @@ "message": "EQ Toolkit - Audio-equalizer" }, "extDescription": { - "message": "EQ Toolkit is een gratis open-source-extensie voor audiobediening." + "message": "Audio-equalizer en volumebooster voor elk tabblad: boost bass, stem geluid af, sla presets op en demp tabs." }, "gain_slider_label": { "message": "Versterking:" @@ -23,21 +23,24 @@ "save_preset_button_label": { "message": "Preset opslaan" }, - "enter_preset_name": { - "message": "Voer naam in" - }, "settings_title": { "message": "Instellingen" }, "presets_settings_title": { "message": "Voorinstellingen" }, + "hide_default_presets_label": { + "message": "Standaardpresets verbergen" + }, "community_settings_title": { "message": "Community" }, "help_with_translation_label": { "message": "Help met vertalen:" }, + "translators_label": { + "message": "Vertalers:" + }, "source_code_label": { "message": "Broncode:" }, @@ -48,7 +51,7 @@ "message": "Voorinstellingen exporteren" }, "enable_spectrum_setting_option": { - "message": "Spectrumvisualisatie inschakelen; pagina opnieuw laden vereist (hoge CPU-belasting)" + "message": "Spectrumvisualisatie inschakelen" }, "points_count_setting_option": { "message": "Aantal EQ-punten" @@ -78,7 +81,7 @@ "message": "De equalizer is al geopend in een venster" }, "support_me": { - "message": "Steun mij" + "message": "Steun mij:" }, "settings_button_tooltip": { "message": "Instellingen" @@ -142,5 +145,68 @@ }, "shortcut_duplicate_error": { "message": "Deze sneltoets wordt al door een andere opdracht gebruikt." + }, + "global_controls_title": { + "message": "Algemene bediening" + }, + "preset_controls_title": { + "message": "Voorinstellingsbediening" + }, + "save": { + "message": "Opslaan" + }, + "save_preset_modal_title": { + "message": "Voorinstelling opslaan" + }, + "preset_name_label": { + "message": "Naam voorinstelling" + }, + "preset_name_empty_error": { + "message": "Voer een naam voor de voorinstelling in." + }, + "preset_name_reserved_error": { + "message": "Deze naam is gereserveerd voor een ingebouwde voorinstelling." + }, + "preset_name_duplicate_error": { + "message": "Er bestaat al een voorinstelling met deze naam." + }, + "guide_back": { + "message": "Terug" + }, + "guide_next": { + "message": "Volgende" + }, + "guide_skip": { + "message": "Overslaan" + }, + "guide_finish": { + "message": "Voltooien" + }, + "guide_theme_dark": { + "message": "Donker" + }, + "guide_theme_light": { + "message": "Licht" + }, + "guide_shortcuts_hint": { + "message": "Je kunt deze sneltoetsen wijzigen in Instellingen." + }, + "guide_canvas_hint": { + "message": "Sleep de punten om de equalizer in te stellen. Wijzig het aantal punten in Instellingen." + }, + "guide_volume_hint": { + "message": "Gebruik deze schuifregelaar om het algemene volume aan te passen." + }, + "guide_presets_hint": { + "message": "Sla hier de huidige instelling op of pas een preset toe." + }, + "donation_reminder_title": { + "message": "Steun de ontwikkelaar" + }, + "donation_reminder_message": { + "message": "Als deze extensie nuttig voor je is, kun je de ontwikkeling steunen." + }, + "donation_reminder_link": { + "message": "Steun de ontwikkeling" } } diff --git a/_locales/pt_PT/messages.json b/_locales/pt_PT/messages.json index 91c2b1f..df81902 100644 --- a/_locales/pt_PT/messages.json +++ b/_locales/pt_PT/messages.json @@ -3,7 +3,7 @@ "message": "EQ Toolkit - Equalizador de áudio" }, "extDescription": { - "message": "O EQ Toolkit é uma extensão gratuita e de código aberto que fornece controlo de áudio." + "message": "Equalizador de áudio e amplificador de volume para qualquer separador: aumente graves, ajuste som e guarde predefinições." }, "gain_slider_label": { "message": "Amplificação:" @@ -21,10 +21,7 @@ "message": "Nenhum" }, "save_preset_button_label": { - "message": "Guardar predefinição" - }, - "enter_preset_name": { - "message": "Insira o nome" + "message": "Guardar" }, "settings_title": { "message": "Definições" @@ -32,12 +29,18 @@ "presets_settings_title": { "message": "Predefinições" }, + "hide_default_presets_label": { + "message": "Ocultar predefinições padrão" + }, "community_settings_title": { "message": "Comunidade" }, "help_with_translation_label": { "message": "Ajude na tradução:" }, + "translators_label": { + "message": "Tradutores:" + }, "source_code_label": { "message": "Código-fonte:" }, @@ -48,7 +51,7 @@ "message": "Exportar" }, "enable_spectrum_setting_option": { - "message": "Ativar a visualização do espectro, é necessário recarregar a página (elevada carga de CPU)" + "message": "Ativar a visualização do espectro" }, "points_count_setting_option": { "message": "Número de pontos de EQ" @@ -78,7 +81,7 @@ "message": "O equalizador já está aberto numa janela" }, "support_me": { - "message": "Apoie-me" + "message": "Apoie-me:" }, "settings_button_tooltip": { "message": "Definições" @@ -142,5 +145,68 @@ }, "shortcut_duplicate_error": { "message": "Este atalho já está a ser utilizado por outro comando." + }, + "global_controls_title": { + "message": "Controlos globais" + }, + "preset_controls_title": { + "message": "Controlos de predefinições" + }, + "save": { + "message": "Guardar" + }, + "save_preset_modal_title": { + "message": "Guardar predefinição" + }, + "preset_name_label": { + "message": "Nome da predefinição" + }, + "preset_name_empty_error": { + "message": "Introduza um nome para a predefinição." + }, + "preset_name_reserved_error": { + "message": "Este nome está reservado para uma predefinição incorporada." + }, + "preset_name_duplicate_error": { + "message": "Já existe uma predefinição com este nome." + }, + "guide_back": { + "message": "Voltar" + }, + "guide_next": { + "message": "Seguinte" + }, + "guide_skip": { + "message": "Ignorar" + }, + "guide_finish": { + "message": "Concluir" + }, + "guide_theme_dark": { + "message": "Escuro" + }, + "guide_theme_light": { + "message": "Claro" + }, + "guide_shortcuts_hint": { + "message": "Pode alterar estes atalhos nas Definições." + }, + "guide_canvas_hint": { + "message": "Arraste os pontos para ajustar o equalizador. Altere o número de pontos nas Definições." + }, + "guide_volume_hint": { + "message": "Utilize este controlo para ajustar o volume geral." + }, + "guide_presets_hint": { + "message": "Guarde a configuração atual ou aplique uma predefinição aqui." + }, + "donation_reminder_title": { + "message": "Apoie o programador" + }, + "donation_reminder_message": { + "message": "Se esta extensão lhe for útil, pode apoiar o seu desenvolvimento." + }, + "donation_reminder_link": { + "message": "Apoiar o desenvolvimento" } } diff --git a/_locales/ru/messages.json b/_locales/ru/messages.json index f83946c..c4e785c 100644 --- a/_locales/ru/messages.json +++ b/_locales/ru/messages.json @@ -3,7 +3,7 @@ "message": "EQ Toolkit - Аудио эквалайзер" }, "extDescription": { - "message": "EQ Toolkit — бесплатное расширение с открытым исходным кодом для управления звуком." + "message": "Эквалайзер и усилитель громкости для любой вкладки: бас буст, управление звуком, пресеты, отключение звука, хоткеи и автозапуск." }, "gain_slider_label": { "message": "Усиление:" @@ -23,21 +23,24 @@ "save_preset_button_label": { "message": "Сохранить пресет" }, - "enter_preset_name": { - "message": "Введите название" - }, "settings_title": { "message": "Настройки" }, "presets_settings_title": { "message": "Пресеты" }, + "hide_default_presets_label": { + "message": "Скрыть стандартные пресеты" + }, "community_settings_title": { "message": "Сообщество" }, "help_with_translation_label": { "message": "Помочь с переводом:" }, + "translators_label": { + "message": "Переводчики:" + }, "source_code_label": { "message": "Исходный код:" }, @@ -48,7 +51,7 @@ "message": "Экспорт" }, "enable_spectrum_setting_option": { - "message": "Включить отображение АЧХ, требуется перезагрузка страницы (high CPU load)" + "message": "Включить отображение АЧХ" }, "points_count_setting_option": { "message": "Количество точек эквалайзера" @@ -78,7 +81,7 @@ "message": "Эквалайзер уже открыт в оконном режиме" }, "support_me": { - "message": "Поддержать" + "message": "Поддержать меня:" }, "settings_button_tooltip": { "message": "Настройки" @@ -142,5 +145,68 @@ }, "shortcut_duplicate_error": { "message": "Это сочетание уже используется другой командой." + }, + "global_controls_title": { + "message": "Общие настройки" + }, + "preset_controls_title": { + "message": "Управление пресетами" + }, + "save": { + "message": "Сохранить" + }, + "save_preset_modal_title": { + "message": "Сохранить пресет" + }, + "preset_name_label": { + "message": "Название пресета" + }, + "preset_name_empty_error": { + "message": "Введите название пресета." + }, + "preset_name_reserved_error": { + "message": "Это название зарезервировано для встроенного пресета." + }, + "preset_name_duplicate_error": { + "message": "Пресет с таким названием уже существует." + }, + "guide_back": { + "message": "Назад" + }, + "guide_next": { + "message": "Далее" + }, + "guide_skip": { + "message": "Пропустить" + }, + "guide_finish": { + "message": "Завершить" + }, + "guide_theme_dark": { + "message": "Тёмная" + }, + "guide_theme_light": { + "message": "Светлая" + }, + "guide_shortcuts_hint": { + "message": "Эти сочетания можно изменить в настройках." + }, + "guide_canvas_hint": { + "message": "Перетаскивайте точки для настройки эквалайзера. Их количество можно изменить в настройках." + }, + "guide_volume_hint": { + "message": "Используйте этот слайдер для регулировки общей громкости." + }, + "guide_presets_hint": { + "message": "Здесь можно сохранить текущую настройку или применить пресет." + }, + "donation_reminder_title": { + "message": "Поддержите разработчика" + }, + "donation_reminder_message": { + "message": "Если расширение вам полезно, вы можете поддержать его развитие." + }, + "donation_reminder_link": { + "message": "Поддержать разработку" } } diff --git a/_locales/ta/messages.json b/_locales/ta/messages.json index e245280..54632bd 100644 --- a/_locales/ta/messages.json +++ b/_locales/ta/messages.json @@ -1,6 +1,6 @@ { "extDescription": { - "message": "சம கருவித்தொகுப்பு என்பது ஒலி கட்டுப்பாட்டை வழங்கும் கட்டற்ற மற்றும் திறந்த மூல நீட்டிப்பாகும்." + "message": "எந்த தாவலுக்கும் ஆடியோ ஈக்வலைசர் மற்றும் ஒலி பூஸ்டர்: பேஸ் உயர்த்து, ஒலி அமை, முன்னமைவுகளை சேமி." }, "gain_slider_label": { "message": "பெருக்கம்:" @@ -18,10 +18,7 @@ "message": "ஒன்றுமில்" }, "save_preset_button_label": { - "message": "அமைவைச் சேமி" - }, - "enter_preset_name": { - "message": "பெயரை உள்ளிடவும்" + "message": "சேமி" }, "settings_title": { "message": "அமைப்புகள்" @@ -29,12 +26,18 @@ "presets_settings_title": { "message": "முன்னமைவுகள்" }, + "hide_default_presets_label": { + "message": "இயல்புநிலை முன்னமைவுகளை மறை" + }, "community_settings_title": { "message": "சமூகம்" }, "help_with_translation_label": { "message": "மொழிபெயர்ப்பு உதவி:" }, + "translators_label": { + "message": "மொழிபெயர்ப்பாளர்கள்:" + }, "source_code_label": { "message": "மூல குறியீடு:" }, @@ -45,7 +48,7 @@ "message": "ஏற்றுமதி" }, "enable_spectrum_setting_option": { - "message": "வானவில் காட்சிப்படுத்தலை இயக்கு, பக்கத்தை மறுதொடக்கம் செய்ய வேண்டும் (அதிக சிபியு சுமை)" + "message": "வானவில் காட்சிப்படுத்தலை இயக்கு" }, "points_count_setting_option": { "message": "சமனாக்கி புள்ளிகளின் எண்ணிக்கை" @@ -75,7 +78,7 @@ "message": "சமனாக்கி ஏற்கனவே ஒரு சாளரத்தில் திறக்கப்பட்டுள்ளது" }, "support_me": { - "message": "என்னை ஆதரிக்கவும்" + "message": "என்னை ஆதரிக்கவும்:" }, "settings_button_tooltip": { "message": "அமைப்புகள்" @@ -142,5 +145,68 @@ }, "extName": { "message": "EQ Toolkit - ஆடியோ சமநிலைப்படுத்தி" + }, + "global_controls_title": { + "message": "உலகளாவிய கட்டுப்பாடுகள்" + }, + "preset_controls_title": { + "message": "முன்னமைவுக் கட்டுப்பாடுகள்" + }, + "save": { + "message": "சேமி" + }, + "save_preset_modal_title": { + "message": "முன்னமைவைச் சேமி" + }, + "preset_name_label": { + "message": "முன்னமைவின் பெயர்" + }, + "preset_name_empty_error": { + "message": "முன்னமைவின் பெயரை உள்ளிடவும்." + }, + "preset_name_reserved_error": { + "message": "இந்தப் பெயர் உள்ளமைந்த முன்னமைவுக்காக ஒதுக்கப்பட்டுள்ளது." + }, + "preset_name_duplicate_error": { + "message": "இந்தப் பெயரில் ஒரு முன்னமைவு ஏற்கனவே உள்ளது." + }, + "guide_back": { + "message": "பின்செல்" + }, + "guide_next": { + "message": "அடுத்து" + }, + "guide_skip": { + "message": "தவிர்" + }, + "guide_finish": { + "message": "முடி" + }, + "guide_theme_dark": { + "message": "இருண்ட" + }, + "guide_theme_light": { + "message": "வெளிர்" + }, + "guide_shortcuts_hint": { + "message": "இந்தக் குறுக்குவழிகளை அமைப்புகளில் மாற்றலாம்." + }, + "guide_canvas_hint": { + "message": "சமப்படுத்தியை அமைக்க புள்ளிகளை இழுக்கவும். புள்ளிகளின் எண்ணிக்கையை அமைப்புகளில் மாற்றலாம்." + }, + "guide_volume_hint": { + "message": "மொத்த ஒலியளவை மாற்ற இந்த நகர்த்தியைப் பயன்படுத்தவும்." + }, + "guide_presets_hint": { + "message": "தற்போதைய அமைப்பைச் சேமிக்கவும் அல்லது முன்அமைவைப் பயன்படுத்தவும்." + }, + "donation_reminder_title": { + "message": "உருவாக்குநரை ஆதரிக்கவும்" + }, + "donation_reminder_message": { + "message": "இந்த நீட்சி உங்களுக்குப் பயனுள்ளதாக இருந்தால், அதன் உருவாக்கத்தை ஆதரிக்கலாம்." + }, + "donation_reminder_link": { + "message": "உருவாக்கத்தை ஆதரிக்கவும்" } } diff --git a/_locales/th/messages.json b/_locales/th/messages.json index dc603fc..2f673d9 100644 --- a/_locales/th/messages.json +++ b/_locales/th/messages.json @@ -3,7 +3,7 @@ "message": "EQ Toolkit - ตัวปรับสมดุลเสียง" }, "extDescription": { - "message": "EQ Toolkit เป็นส่วนขยายฟรีและโอเพนซอร์สสำหรับควบคุมเสียง" + "message": "อีควอไลเซอร์และตัวเพิ่มเสียงสำหรับทุกแท็บ: เพิ่มเบส ปรับเสียง บันทึกพรีเซ็ต ปิดเสียงแท็บ" }, "gain_slider_label": { "message": "การขยายเสียง:" @@ -23,21 +23,24 @@ "save_preset_button_label": { "message": "บันทึกพรีเซ็ต" }, - "enter_preset_name": { - "message": "ใส่ชื่อ" - }, "settings_title": { "message": "การตั้งค่า" }, "presets_settings_title": { "message": "พรีเซ็ต" }, + "hide_default_presets_label": { + "message": "ซ่อนพรีเซ็ตเริ่มต้น" + }, "community_settings_title": { "message": "ชุมชน" }, "help_with_translation_label": { "message": "ช่วยแปล:" }, + "translators_label": { + "message": "ผู้แปล:" + }, "source_code_label": { "message": "ซอร์สโค้ด:" }, @@ -48,7 +51,7 @@ "message": "ส่งออกพรีเซ็ต" }, "enable_spectrum_setting_option": { - "message": "เปิดใช้งานการแสดงผลสเปกตรัม ต้องโหลดหน้าใหม่ (ใช้ CPU สูง)" + "message": "เปิดใช้งานการแสดงผลสเปกตรัม" }, "points_count_setting_option": { "message": "จำนวนจุด EQ" @@ -78,7 +81,7 @@ "message": "อีควอไลเซอร์เปิดอยู่ในหน้าต่างแล้ว" }, "support_me": { - "message": "สนับสนุนฉัน" + "message": "สนับสนุนฉัน:" }, "settings_button_tooltip": { "message": "การตั้งค่า" @@ -142,5 +145,68 @@ }, "shortcut_duplicate_error": { "message": "ปุ่มลัดนี้ถูกใช้โดยคำสั่งอื่นแล้ว" + }, + "global_controls_title": { + "message": "การควบคุมส่วนกลาง" + }, + "preset_controls_title": { + "message": "การควบคุมค่าที่ตั้งไว้" + }, + "save": { + "message": "บันทึก" + }, + "save_preset_modal_title": { + "message": "บันทึกค่าที่ตั้งไว้" + }, + "preset_name_label": { + "message": "ชื่อค่าที่ตั้งไว้" + }, + "preset_name_empty_error": { + "message": "ป้อนชื่อค่าที่ตั้งไว้" + }, + "preset_name_reserved_error": { + "message": "ชื่อนี้สงวนไว้สำหรับค่าที่ตั้งไว้ในตัว" + }, + "preset_name_duplicate_error": { + "message": "มีค่าที่ตั้งไว้ชื่อนี้อยู่แล้ว" + }, + "guide_back": { + "message": "ย้อนกลับ" + }, + "guide_next": { + "message": "ถัดไป" + }, + "guide_skip": { + "message": "ข้าม" + }, + "guide_finish": { + "message": "เสร็จสิ้น" + }, + "guide_theme_dark": { + "message": "มืด" + }, + "guide_theme_light": { + "message": "สว่าง" + }, + "guide_shortcuts_hint": { + "message": "คุณเปลี่ยนปุ่มลัดเหล่านี้ได้ในการตั้งค่า" + }, + "guide_canvas_hint": { + "message": "ลากจุดเพื่อปรับอีควอไลเซอร์ และเปลี่ยนจำนวนจุดได้ในการตั้งค่า" + }, + "guide_volume_hint": { + "message": "ใช้แถบเลื่อนนี้เพื่อปรับระดับเสียงโดยรวม" + }, + "guide_presets_hint": { + "message": "บันทึกการตั้งค่าปัจจุบันหรือใช้ค่าที่ตั้งไว้ล่วงหน้าได้ที่นี่" + }, + "donation_reminder_title": { + "message": "สนับสนุนนักพัฒนา" + }, + "donation_reminder_message": { + "message": "หากส่วนขยายนี้มีประโยชน์ คุณสามารถสนับสนุนการพัฒนาได้" + }, + "donation_reminder_link": { + "message": "สนับสนุนการพัฒนา" } -} \ No newline at end of file +} diff --git a/_locales/tr/messages.json b/_locales/tr/messages.json index 8cc8f37..6af602c 100644 --- a/_locales/tr/messages.json +++ b/_locales/tr/messages.json @@ -3,7 +3,7 @@ "message": "EQ Toolkit - Ses eşitleyici" }, "extDescription": { - "message": "EQ Toolkit, ses kontrolü sağlayan ücretsiz ve açık kaynaklı bir uzantıdır." + "message": "Her sekme için ses ekolayzırı ve ses yükseltici: bası güçlendir, sesi ayarla, preset kaydet, sekmeleri sustur." }, "gain_slider_label": { "message": "Amplifikasyon:" @@ -23,21 +23,24 @@ "save_preset_button_label": { "message": "Ön ayarı kaydet" }, - "enter_preset_name": { - "message": "Ad girin" - }, "settings_title": { "message": "Ayarlar" }, "presets_settings_title": { "message": "Ön ayarlar" }, + "hide_default_presets_label": { + "message": "Varsayılan ön ayarları gizle" + }, "community_settings_title": { "message": "Topluluk" }, "help_with_translation_label": { "message": "Çeviriye yardım edin:" }, + "translators_label": { + "message": "Çevirmenler:" + }, "source_code_label": { "message": "Kaynak kodu:" }, @@ -48,7 +51,7 @@ "message": "Ön ayarları dışa aktar" }, "enable_spectrum_setting_option": { - "message": "Spektrum görselleştirmesini etkinleştir; sayfayı yeniden yüklemek gerekir (yüksek CPU kullanımı)" + "message": "Spektrum görselleştirmesini etkinleştir" }, "points_count_setting_option": { "message": "EQ nokta sayısı" @@ -78,7 +81,7 @@ "message": "Ekolayzer zaten bir pencerede açık" }, "support_me": { - "message": "Beni destekle" + "message": "Beni destekle:" }, "settings_button_tooltip": { "message": "Ayarlar" @@ -142,5 +145,68 @@ }, "shortcut_duplicate_error": { "message": "Bu kısayol zaten başka bir komut tarafından kullanılıyor." + }, + "global_controls_title": { + "message": "Genel kontroller" + }, + "preset_controls_title": { + "message": "Ön ayar kontrolleri" + }, + "save": { + "message": "Kaydet" + }, + "save_preset_modal_title": { + "message": "Ön ayarı kaydet" + }, + "preset_name_label": { + "message": "Ön ayar adı" + }, + "preset_name_empty_error": { + "message": "Bir ön ayar adı girin." + }, + "preset_name_reserved_error": { + "message": "Bu ad yerleşik bir ön ayar için ayrılmıştır." + }, + "preset_name_duplicate_error": { + "message": "Bu ada sahip bir ön ayar zaten var." + }, + "guide_back": { + "message": "Geri" + }, + "guide_next": { + "message": "İleri" + }, + "guide_skip": { + "message": "Atla" + }, + "guide_finish": { + "message": "Bitir" + }, + "guide_theme_dark": { + "message": "Koyu" + }, + "guide_theme_light": { + "message": "Açık" + }, + "guide_shortcuts_hint": { + "message": "Bu kısayolları Ayarlar bölümünde değiştirebilirsiniz." + }, + "guide_canvas_hint": { + "message": "Ekolayzırı ayarlamak için noktaları sürükleyin. Nokta sayısını Ayarlar bölümünde değiştirin." + }, + "guide_volume_hint": { + "message": "Genel ses düzeyini ayarlamak için bu kaydırıcıyı kullanın." + }, + "guide_presets_hint": { + "message": "Geçerli ayarı kaydedin veya burada bir ön ayar uygulayın." + }, + "donation_reminder_title": { + "message": "Geliştiriciyi destekleyin" + }, + "donation_reminder_message": { + "message": "Bu uzantı işinize yarıyorsa geliştirilmesini destekleyebilirsiniz." + }, + "donation_reminder_link": { + "message": "Geliştirmeyi destekle" } } diff --git a/_locales/vi/messages.json b/_locales/vi/messages.json index bb75b47..feaf3ad 100644 --- a/_locales/vi/messages.json +++ b/_locales/vi/messages.json @@ -3,7 +3,7 @@ "message": "EQ Toolkit - Bộ cân bằng âm thanh" }, "extDescription": { - "message": "EQ Toolkit là tiện ích mở rộng miễn phí và mã nguồn mở để điều khiển âm thanh." + "message": "Bộ cân bằng âm thanh và tăng âm lượng cho mọi thẻ: tăng bass, chỉnh âm, lưu preset, tắt tiếng thẻ." }, "gain_slider_label": { "message": "Khuếch đại:" @@ -23,21 +23,24 @@ "save_preset_button_label": { "message": "Lưu thiết lập trước" }, - "enter_preset_name": { - "message": "Nhập tên" - }, "settings_title": { "message": "Cài đặt" }, "presets_settings_title": { "message": "Cấu hình sẵn" }, + "hide_default_presets_label": { + "message": "Ẩn cấu hình sẵn mặc định" + }, "community_settings_title": { "message": "Cộng đồng" }, "help_with_translation_label": { "message": "Hỗ trợ dịch thuật:" }, + "translators_label": { + "message": "Người dịch:" + }, "source_code_label": { "message": "Mã nguồn:" }, @@ -48,7 +51,7 @@ "message": "Xuất preset" }, "enable_spectrum_setting_option": { - "message": "Bật hiển thị phổ, cần tải lại trang (tốn CPU cao)" + "message": "Bật hiển thị phổ" }, "points_count_setting_option": { "message": "Số điểm EQ" @@ -78,7 +81,7 @@ "message": "Bộ cân bằng đã được mở trong một cửa sổ" }, "support_me": { - "message": "Hỗ trợ tôi" + "message": "Hỗ trợ tôi:" }, "settings_button_tooltip": { "message": "Cài đặt" @@ -142,5 +145,68 @@ }, "shortcut_duplicate_error": { "message": "Phím tắt này đã được lệnh khác sử dụng." + }, + "global_controls_title": { + "message": "Điều khiển chung" + }, + "preset_controls_title": { + "message": "Điều khiển cài đặt sẵn" + }, + "save": { + "message": "Lưu" + }, + "save_preset_modal_title": { + "message": "Lưu cài đặt sẵn" + }, + "preset_name_label": { + "message": "Tên cài đặt sẵn" + }, + "preset_name_empty_error": { + "message": "Nhập tên cài đặt sẵn." + }, + "preset_name_reserved_error": { + "message": "Tên này được dành riêng cho cài đặt sẵn tích hợp." + }, + "preset_name_duplicate_error": { + "message": "Đã có cài đặt sẵn với tên này." + }, + "guide_back": { + "message": "Quay lại" + }, + "guide_next": { + "message": "Tiếp theo" + }, + "guide_skip": { + "message": "Bỏ qua" + }, + "guide_finish": { + "message": "Hoàn tất" + }, + "guide_theme_dark": { + "message": "Tối" + }, + "guide_theme_light": { + "message": "Sáng" + }, + "guide_shortcuts_hint": { + "message": "Bạn có thể đổi các phím tắt này trong phần Cài đặt." + }, + "guide_canvas_hint": { + "message": "Kéo các điểm để chỉnh bộ cân bằng. Đổi số lượng điểm trong phần Cài đặt." + }, + "guide_volume_hint": { + "message": "Dùng thanh trượt này để chỉnh âm lượng tổng thể." + }, + "guide_presets_hint": { + "message": "Lưu thiết lập hiện tại hoặc áp dụng một cấu hình đặt trước tại đây." + }, + "donation_reminder_title": { + "message": "Ủng hộ nhà phát triển" + }, + "donation_reminder_message": { + "message": "Nếu tiện ích này hữu ích, bạn có thể ủng hộ việc phát triển." + }, + "donation_reminder_link": { + "message": "Ủng hộ phát triển" } -} \ No newline at end of file +} diff --git a/_locales/zh_CN/messages.json b/_locales/zh_CN/messages.json index 9fcbdb9..5e68606 100644 --- a/_locales/zh_CN/messages.json +++ b/_locales/zh_CN/messages.json @@ -3,7 +3,7 @@ "message": "EQ Toolkit - 音频均衡器" }, "extDescription": { - "message": "EQ Toolkit 是一个免费开源的音频控制扩展程序。" + "message": "适用于任意标签页的音频均衡器和音量增强器:增强低音、调音、保存预设、静音标签页、使用快捷键和自动启动。" }, "gain_slider_label": { "message": "放大" @@ -23,21 +23,24 @@ "save_preset_button_label": { "message": "保存预设" }, - "enter_preset_name": { - "message": "输入名称" - }, "settings_title": { "message": "设置" }, "presets_settings_title": { "message": "预设" }, + "hide_default_presets_label": { + "message": "隐藏默认预设" + }, "community_settings_title": { "message": "社区" }, "help_with_translation_label": { "message": "帮助翻译:" }, + "translators_label": { + "message": "译者:" + }, "source_code_label": { "message": "源代码:" }, @@ -48,7 +51,7 @@ "message": "导出预设" }, "enable_spectrum_setting_option": { - "message": "启用频谱可视化,需要重新加载页面(CPU 负载较高)" + "message": "启用频谱可视化" }, "points_count_setting_option": { "message": "EQ点数" @@ -78,7 +81,7 @@ "message": "均衡器已在窗口中打开" }, "support_me": { - "message": "支持我" + "message": "支持我:" }, "settings_button_tooltip": { "message": "设置" @@ -142,5 +145,42 @@ }, "shortcut_duplicate_error": { "message": "此快捷键已被另一个命令使用。" - } -} \ No newline at end of file + }, + "global_controls_title": { + "message": "全局控制" + }, + "preset_controls_title": { + "message": "预设控制" + }, + "save": { + "message": "保存" + }, + "save_preset_modal_title": { + "message": "保存预设" + }, + "preset_name_label": { + "message": "预设名称" + }, + "preset_name_empty_error": { + "message": "请输入预设名称。" + }, + "preset_name_reserved_error": { + "message": "此名称为内置预设保留。" + }, + "preset_name_duplicate_error": { + "message": "已存在同名预设。" + }, + "guide_back": { "message": "返回" }, + "guide_next": { "message": "下一步" }, + "guide_skip": { "message": "跳过" }, + "guide_finish": { "message": "完成" }, + "guide_theme_dark": { "message": "深色" }, + "guide_theme_light": { "message": "浅色" }, + "guide_shortcuts_hint": { "message": "你可以在设置中更改这些快捷键。" }, + "guide_canvas_hint": { "message": "拖动控制点以调节均衡器。可在设置中更改控制点数量。" }, + "guide_volume_hint": { "message": "使用此滑块调节整体音量。" }, + "guide_presets_hint": { "message": "在这里保存当前设置或应用预设。" }, + "donation_reminder_title": { "message": "支持开发者" }, + "donation_reminder_message": { "message": "如果这个扩展对您有帮助,您可以支持它的开发。" }, + "donation_reminder_link": { "message": "支持开发" } +} diff --git a/manifest.json b/manifest.json index 270ff43..128f2fa 100644 --- a/manifest.json +++ b/manifest.json @@ -3,7 +3,7 @@ "name": "__MSG_extName__", "description": "__MSG_extDescription__", "author": "maitrog", - "version": "1.8.0", + "version": "2.0.0", "permissions": [ "storage", "scripting", @@ -28,4 +28,4 @@ "service_worker": "scripts/background.js" }, "default_locale": "en" -} \ No newline at end of file +} diff --git a/package-lock.json b/package-lock.json index 2355a78..a8440d8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,529 @@ "chrome-types": "^0.1.349" }, "devDependencies": { - "bestzip": "^2.2.1" + "@types/node": "^26.1.0", + "bestzip": "^2.2.1", + "typescript": "^6.0.3", + "vite": "^8.1.3", + "vitest": "^4.1.9" + } + }, + "node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", + "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.138.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.138.0.tgz", + "integrity": "sha512-1a7ZKmrRTCoN1XMZ4L0PyyqrMnrNlLyPuOkdSX2MZg7IiIGRUyurNhAm73ptDOraoBcIordsIGKNPKUzy3ZmfA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.4.tgz", + "integrity": "sha512-EZLpf/8y7GXkkra90ML47kzik/GMP3EMcE9bPyHmRfxLC6z9+aW5A8poCsoxjrT5GfEcNAAvWwUHjvP1pUQkfw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.4.tgz", + "integrity": "sha512-aUi+HBvmYb7j8krl1+qJgkG8C17fO79gk3c+jPw4S8glRFc1DTija9S3EyaTSQUm5GJXYKDAsugBEhFHH2vYiQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.4.tgz", + "integrity": "sha512-F7hHC3gwY11+vByKPRWqwGbeXWVgKmL+pTGCinaEhdihzBV2aQ0fvZOch9cXYUOKuKKq429HeYXOqQLc7wFCEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.4.tgz", + "integrity": "sha512-sI5yw+7s92SK6odiEhD5lKCBlWcpjHS5qyqpVQbZAJ0fIzEUXrmbl3DH2ybR3PZogulNJF+COLtmA8hUfvkCCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.4.tgz", + "integrity": "sha512-mCi0OKgEieFircrtVYmQAFGszRtMnZ6fpZAXrxanXAu7lqZcsK1E1RAaZNG0uKAnxox3B1f4EyQNnoyMfN1vAA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.4.tgz", + "integrity": "sha512-B9Ial3Kv5sh0SHnB1g/QWcUQCEvCF6QKGAl4zXypYj65mVI+B4AhFBwPtSN7pDrJeIx8Z7zdy4ntx+wQABom7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.4.tgz", + "integrity": "sha512-lZVym0PuHE1KZ22gmFTC15lAkrg9iTszR617oYRB/iPY1A56ywoJzVKOJBKaot5RiikCObmur6pogpse3gRcng==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.4.tgz", + "integrity": "sha512-t2DNiLJWNTbnEHyUzTumldML6ET4/g16467LZoDDJ3tSxGvguL5/NyC2lCsNKuyRycg9XeDQF5SSv+TNOhQEXg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.4.tgz", + "integrity": "sha512-0WIRnL1Uw4BvTZRLQt+PVgo6ZKTJadlC2btP+/EOXv2f/DWbY0rEgl+y834mIVwP1FkTlWVTrGGJXf12lru7EQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.4.tgz", + "integrity": "sha512-JWtGshGfX+oENAKonoNkqEJX+7hC8yfhi9GUyPX1VX4mdh1y5r+ZiJLR5XzAB0aoP6s/PcILsGjKq8O0mm24bw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.4.tgz", + "integrity": "sha512-rT6yQcxUuXs4CnbofqwHRRV0iem349rLMYpTjkgQGLjrY4ado/eDzwPZPTCgTOlF6Nkp8NEv70yLMTn6qkWxsQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.4.tgz", + "integrity": "sha512-KXMGoboq5cyaCQjDA4GLuRiOwBQ0EyFnJoVViLeZ45/3rFItRODEr+NdsBcVpll40hhNArlm/speWGRvj08LzA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.4.tgz", + "integrity": "sha512-5K83rb36oJiY7BCyE9zLZtGcPV4g5wvq+xwdO0XPIwDVZI8cyB/AUjkNXGb92/rnmezEkjMOpgY61rtwjQtFwg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.4.tgz", + "integrity": "sha512-PnWBtw3TV5KOg69HQQDR0mnQuyCmSGR2pAB4DC1rPF808fgKeTUMj2EOEyKATpgiuxuR5APQmiDO7PDgEjTFSA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.4.tgz", + "integrity": "sha512-M1lpniBePobTfsa7Ks9a199e1akxsXn+GYBUKsEzv3YFzOm1HJAMNwKI3qr0Zq+mxwx9gOZoTdP1yXRYsZUocQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.0.tgz", + "integrity": "sha512-O0A1G3xPGy4w7AgQdAQYUlQ+BKk2Oovw8eRpofyp5KdBZULnbe+WqaOVNrm705SHphCiG4XHsACrSmPu1f+Kgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~8.3.0" + } + }, + "node_modules/@vitest/expect": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.9.tgz", + "integrity": "sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.9", + "@vitest/utils": "4.1.9", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.9.tgz", + "integrity": "sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.9", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.9.tgz", + "integrity": "sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.9.tgz", + "integrity": "sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.9", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.9.tgz", + "integrity": "sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.9", + "@vitest/utils": "4.1.9", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.9.tgz", + "integrity": "sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.9.tgz", + "integrity": "sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.9", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, "node_modules/ansi-regex": { @@ -104,6 +626,16 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, "node_modules/async": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", @@ -209,6 +741,16 @@ "node": "*" } }, + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/chrome-types": { "version": "0.1.349", "resolved": "https://registry.npmjs.org/chrome-types/-/chrome-types-0.1.349.tgz", @@ -264,6 +806,13 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -295,6 +844,16 @@ "node": ">= 10" } }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -310,6 +869,13 @@ "once": "^1.4.0" } }, + "node_modules/es-module-lexer": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.0.tgz", + "integrity": "sha512-KLdwQm2NvGLDkQDCGvmiQrhkd0JbMzXthwQAUgWjQuQdBLFa3eiBP5arXZyA+f8x+x7OXgud6bq2rxjGtHV2tw==", + "dev": true, + "license": "MIT" + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -319,6 +885,44 @@ "node": ">=6" } }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -331,6 +935,21 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -467,6 +1086,279 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", @@ -497,6 +1389,16 @@ "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", "dev": true }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -509,6 +1411,25 @@ "node": "*" } }, + "node_modules/nanoid": { + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -518,6 +1439,20 @@ "node": ">=0.10.0" } }, + "node_modules/obug": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.3.tgz", + "integrity": "sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -536,6 +1471,62 @@ "node": ">=0.10.0" } }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz", + "integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -595,6 +1586,40 @@ "node": ">=0.10.0" } }, + "node_modules/rolldown": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.4.tgz", + "integrity": "sha512-IjZYiLxZwpnhwhdBH2ugdTGVSdhCQUmLxLoqyjiL0JxYjyRst+5a0P3xfrTxJ5F638j4Mvvw5FAX5XE6eHpXbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.138.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.1.4", + "@rolldown/binding-darwin-arm64": "1.1.4", + "@rolldown/binding-darwin-x64": "1.1.4", + "@rolldown/binding-freebsd-x64": "1.1.4", + "@rolldown/binding-linux-arm-gnueabihf": "1.1.4", + "@rolldown/binding-linux-arm64-gnu": "1.1.4", + "@rolldown/binding-linux-arm64-musl": "1.1.4", + "@rolldown/binding-linux-ppc64-gnu": "1.1.4", + "@rolldown/binding-linux-s390x-gnu": "1.1.4", + "@rolldown/binding-linux-x64-gnu": "1.1.4", + "@rolldown/binding-linux-x64-musl": "1.1.4", + "@rolldown/binding-openharmony-arm64": "1.1.4", + "@rolldown/binding-wasm32-wasi": "1.1.4", + "@rolldown/binding-win32-arm64-msvc": "1.1.4", + "@rolldown/binding-win32-x64-msvc": "1.1.4" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -615,6 +1640,37 @@ } ] }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz", + "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==", + "dev": true, + "license": "MIT" + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -662,16 +1718,257 @@ "inherits": "^2.0.3", "readable-stream": "^3.1.1" }, - "engines": { - "node": ">=6" + "engines": { + "node": ">=6" + } + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", + "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/vite": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.3.tgz", + "integrity": "sha512-Ds+gBRbj0lwRO2Y5hwnUBdxSwlAve9LeRyU4sNnAr0ewW0gWF0n5bgXgUzbgZ49MV9BVUAQUFYVcDUcilUExMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.16", + "rolldown": "~1.1.3", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.3.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.9.tgz", + "integrity": "sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.1.9", + "@vitest/mocker": "4.1.9", + "@vitest/pretty-format": "4.1.9", + "@vitest/runner": "4.1.9", + "@vitest/snapshot": "4.1.9", + "@vitest/spy": "4.1.9", + "@vitest/utils": "4.1.9", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.9", + "@vitest/browser-preview": "4.1.9", + "@vitest/browser-webdriverio": "4.1.9", + "@vitest/coverage-istanbul": "4.1.9", + "@vitest/coverage-v8": "4.1.9", + "@vitest/ui": "4.1.9", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/coverage-istanbul": { + "optional": true + }, + "@vitest/coverage-v8": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -687,6 +1984,23 @@ "node": ">= 8" } }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -783,6 +2097,295 @@ } }, "dependencies": { + "@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "dev": true, + "optional": true, + "requires": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "dev": true, + "optional": true, + "requires": { + "tslib": "^2.4.0" + } + }, + "@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "dev": true, + "optional": true, + "requires": { + "tslib": "^2.4.0" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true + }, + "@napi-rs/wasm-runtime": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", + "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==", + "dev": true, + "optional": true, + "requires": { + "@tybys/wasm-util": "^0.10.3" + } + }, + "@oxc-project/types": { + "version": "0.138.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.138.0.tgz", + "integrity": "sha512-1a7ZKmrRTCoN1XMZ4L0PyyqrMnrNlLyPuOkdSX2MZg7IiIGRUyurNhAm73ptDOraoBcIordsIGKNPKUzy3ZmfA==", + "dev": true + }, + "@rolldown/binding-android-arm64": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.4.tgz", + "integrity": "sha512-EZLpf/8y7GXkkra90ML47kzik/GMP3EMcE9bPyHmRfxLC6z9+aW5A8poCsoxjrT5GfEcNAAvWwUHjvP1pUQkfw==", + "dev": true, + "optional": true + }, + "@rolldown/binding-darwin-arm64": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.4.tgz", + "integrity": "sha512-aUi+HBvmYb7j8krl1+qJgkG8C17fO79gk3c+jPw4S8glRFc1DTija9S3EyaTSQUm5GJXYKDAsugBEhFHH2vYiQ==", + "dev": true, + "optional": true + }, + "@rolldown/binding-darwin-x64": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.4.tgz", + "integrity": "sha512-F7hHC3gwY11+vByKPRWqwGbeXWVgKmL+pTGCinaEhdihzBV2aQ0fvZOch9cXYUOKuKKq429HeYXOqQLc7wFCEg==", + "dev": true, + "optional": true + }, + "@rolldown/binding-freebsd-x64": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.4.tgz", + "integrity": "sha512-sI5yw+7s92SK6odiEhD5lKCBlWcpjHS5qyqpVQbZAJ0fIzEUXrmbl3DH2ybR3PZogulNJF+COLtmA8hUfvkCCQ==", + "dev": true, + "optional": true + }, + "@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.4.tgz", + "integrity": "sha512-mCi0OKgEieFircrtVYmQAFGszRtMnZ6fpZAXrxanXAu7lqZcsK1E1RAaZNG0uKAnxox3B1f4EyQNnoyMfN1vAA==", + "dev": true, + "optional": true + }, + "@rolldown/binding-linux-arm64-gnu": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.4.tgz", + "integrity": "sha512-B9Ial3Kv5sh0SHnB1g/QWcUQCEvCF6QKGAl4zXypYj65mVI+B4AhFBwPtSN7pDrJeIx8Z7zdy4ntx+wQABom7w==", + "dev": true, + "optional": true + }, + "@rolldown/binding-linux-arm64-musl": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.4.tgz", + "integrity": "sha512-lZVym0PuHE1KZ22gmFTC15lAkrg9iTszR617oYRB/iPY1A56ywoJzVKOJBKaot5RiikCObmur6pogpse3gRcng==", + "dev": true, + "optional": true + }, + "@rolldown/binding-linux-ppc64-gnu": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.4.tgz", + "integrity": "sha512-t2DNiLJWNTbnEHyUzTumldML6ET4/g16467LZoDDJ3tSxGvguL5/NyC2lCsNKuyRycg9XeDQF5SSv+TNOhQEXg==", + "dev": true, + "optional": true + }, + "@rolldown/binding-linux-s390x-gnu": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.4.tgz", + "integrity": "sha512-0WIRnL1Uw4BvTZRLQt+PVgo6ZKTJadlC2btP+/EOXv2f/DWbY0rEgl+y834mIVwP1FkTlWVTrGGJXf12lru7EQ==", + "dev": true, + "optional": true + }, + "@rolldown/binding-linux-x64-gnu": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.4.tgz", + "integrity": "sha512-JWtGshGfX+oENAKonoNkqEJX+7hC8yfhi9GUyPX1VX4mdh1y5r+ZiJLR5XzAB0aoP6s/PcILsGjKq8O0mm24bw==", + "dev": true, + "optional": true + }, + "@rolldown/binding-linux-x64-musl": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.4.tgz", + "integrity": "sha512-rT6yQcxUuXs4CnbofqwHRRV0iem349rLMYpTjkgQGLjrY4ado/eDzwPZPTCgTOlF6Nkp8NEv70yLMTn6qkWxsQ==", + "dev": true, + "optional": true + }, + "@rolldown/binding-openharmony-arm64": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.4.tgz", + "integrity": "sha512-KXMGoboq5cyaCQjDA4GLuRiOwBQ0EyFnJoVViLeZ45/3rFItRODEr+NdsBcVpll40hhNArlm/speWGRvj08LzA==", + "dev": true, + "optional": true + }, + "@rolldown/binding-wasm32-wasi": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.4.tgz", + "integrity": "sha512-5K83rb36oJiY7BCyE9zLZtGcPV4g5wvq+xwdO0XPIwDVZI8cyB/AUjkNXGb92/rnmezEkjMOpgY61rtwjQtFwg==", + "dev": true, + "optional": true, + "requires": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" + } + }, + "@rolldown/binding-win32-arm64-msvc": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.4.tgz", + "integrity": "sha512-PnWBtw3TV5KOg69HQQDR0mnQuyCmSGR2pAB4DC1rPF808fgKeTUMj2EOEyKATpgiuxuR5APQmiDO7PDgEjTFSA==", + "dev": true, + "optional": true + }, + "@rolldown/binding-win32-x64-msvc": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.4.tgz", + "integrity": "sha512-M1lpniBePobTfsa7Ks9a199e1akxsXn+GYBUKsEzv3YFzOm1HJAMNwKI3qr0Zq+mxwx9gOZoTdP1yXRYsZUocQ==", + "dev": true, + "optional": true + }, + "@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true + }, + "@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true + }, + "@tybys/wasm-util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "dev": true, + "optional": true, + "requires": { + "tslib": "^2.4.0" + } + }, + "@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "requires": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true + }, + "@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true + }, + "@types/node": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.0.tgz", + "integrity": "sha512-O0A1G3xPGy4w7AgQdAQYUlQ+BKk2Oovw8eRpofyp5KdBZULnbe+WqaOVNrm705SHphCiG4XHsACrSmPu1f+Kgw==", + "dev": true, + "requires": { + "undici-types": "~8.3.0" + } + }, + "@vitest/expect": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.9.tgz", + "integrity": "sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==", + "dev": true, + "requires": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.9", + "@vitest/utils": "4.1.9", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" + } + }, + "@vitest/mocker": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.9.tgz", + "integrity": "sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==", + "dev": true, + "requires": { + "@vitest/spy": "4.1.9", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + } + }, + "@vitest/pretty-format": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.9.tgz", + "integrity": "sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==", + "dev": true, + "requires": { + "tinyrainbow": "^3.1.0" + } + }, + "@vitest/runner": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.9.tgz", + "integrity": "sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==", + "dev": true, + "requires": { + "@vitest/utils": "4.1.9", + "pathe": "^2.0.3" + } + }, + "@vitest/snapshot": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.9.tgz", + "integrity": "sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==", + "dev": true, + "requires": { + "@vitest/pretty-format": "4.1.9", + "@vitest/utils": "4.1.9", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + } + }, + "@vitest/spy": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.9.tgz", + "integrity": "sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==", + "dev": true + }, + "@vitest/utils": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.9.tgz", + "integrity": "sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==", + "dev": true, + "requires": { + "@vitest/pretty-format": "4.1.9", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + } + }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -863,6 +2466,12 @@ } } }, + "assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true + }, "async": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", @@ -931,6 +2540,12 @@ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true }, + "chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true + }, "chrome-types": { "version": "0.1.349", "resolved": "https://registry.npmjs.org/chrome-types/-/chrome-types-0.1.349.tgz", @@ -980,6 +2595,12 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -1002,6 +2623,12 @@ "readable-stream": "^3.4.0" } }, + "detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -1017,12 +2644,40 @@ "once": "^1.4.0" } }, + "es-module-lexer": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.0.tgz", + "integrity": "sha512-KLdwQm2NvGLDkQDCGvmiQrhkd0JbMzXthwQAUgWjQuQdBLFa3eiBP5arXZyA+f8x+x7OXgud6bq2rxjGtHV2tw==", + "dev": true + }, "escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true }, + "estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0" + } + }, + "expect-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", + "dev": true + }, + "fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "requires": {} + }, "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -1035,6 +2690,13 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -1142,6 +2804,103 @@ } } }, + "lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "requires": { + "detect-libc": "^2.0.3", + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "dev": true, + "optional": true + }, + "lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "dev": true, + "optional": true + }, + "lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "dev": true, + "optional": true + }, + "lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "dev": true, + "optional": true + }, + "lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "dev": true, + "optional": true + }, + "lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "dev": true, + "optional": true + }, + "lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "dev": true, + "optional": true + }, + "lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "dev": true, + "optional": true + }, + "lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "dev": true, + "optional": true + }, + "lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "dev": true, + "optional": true + }, + "lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "dev": true, + "optional": true + }, "lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", @@ -1172,6 +2931,15 @@ "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", "dev": true }, + "magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -1181,12 +2949,24 @@ "brace-expansion": "^1.1.7" } }, + "nanoid": { + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", + "dev": true + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "obug": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.3.tgz", + "integrity": "sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==", + "dev": true + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1202,6 +2982,35 @@ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true }, + "pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true + }, + "picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true + }, + "postcss": { + "version": "8.5.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz", + "integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==", + "dev": true, + "requires": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + } + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -1254,12 +3063,61 @@ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, + "rolldown": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.4.tgz", + "integrity": "sha512-IjZYiLxZwpnhwhdBH2ugdTGVSdhCQUmLxLoqyjiL0JxYjyRst+5a0P3xfrTxJ5F638j4Mvvw5FAX5XE6eHpXbA==", + "dev": true, + "requires": { + "@oxc-project/types": "=0.138.0", + "@rolldown/binding-android-arm64": "1.1.4", + "@rolldown/binding-darwin-arm64": "1.1.4", + "@rolldown/binding-darwin-x64": "1.1.4", + "@rolldown/binding-freebsd-x64": "1.1.4", + "@rolldown/binding-linux-arm-gnueabihf": "1.1.4", + "@rolldown/binding-linux-arm64-gnu": "1.1.4", + "@rolldown/binding-linux-arm64-musl": "1.1.4", + "@rolldown/binding-linux-ppc64-gnu": "1.1.4", + "@rolldown/binding-linux-s390x-gnu": "1.1.4", + "@rolldown/binding-linux-x64-gnu": "1.1.4", + "@rolldown/binding-linux-x64-musl": "1.1.4", + "@rolldown/binding-openharmony-arm64": "1.1.4", + "@rolldown/binding-wasm32-wasi": "1.1.4", + "@rolldown/binding-win32-arm64-msvc": "1.1.4", + "@rolldown/binding-win32-x64-msvc": "1.1.4", + "@rolldown/pluginutils": "^1.0.0" + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true }, + "siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, + "source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true + }, + "stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "std-env": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz", + "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==", + "dev": true + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -1302,12 +3160,101 @@ "readable-stream": "^3.1.1" } }, + "tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true + }, + "tinyexec": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", + "dev": true + }, + "tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "requires": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + } + }, + "tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", + "dev": true + }, + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "optional": true + }, + "typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "dev": true + }, + "undici-types": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", + "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", + "dev": true + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "vite": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.3.tgz", + "integrity": "sha512-Ds+gBRbj0lwRO2Y5hwnUBdxSwlAve9LeRyU4sNnAr0ewW0gWF0n5bgXgUzbgZ49MV9BVUAQUFYVcDUcilUExMA==", + "dev": true, + "requires": { + "fsevents": "~2.3.3", + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.16", + "rolldown": "~1.1.3", + "tinyglobby": "^0.2.17" + } + }, + "vitest": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.9.tgz", + "integrity": "sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==", + "dev": true, + "requires": { + "@vitest/expect": "4.1.9", + "@vitest/mocker": "4.1.9", + "@vitest/pretty-format": "4.1.9", + "@vitest/runner": "4.1.9", + "@vitest/snapshot": "4.1.9", + "@vitest/spy": "4.1.9", + "@vitest/utils": "4.1.9", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -1317,6 +3264,16 @@ "isexe": "^2.0.0" } }, + "why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "requires": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + } + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/package.json b/package.json index 7fd776e..24e24af 100644 --- a/package.json +++ b/package.json @@ -4,10 +4,17 @@ }, "scripts": { "lint:locales": "node tools/validateLocalizationLengths.js", - "prezip": "@powershell if (-not (Test-Path -Path \"./build/Release\")) {New-Item -ItemType Directory -Path \"./build/Release\"}", - "zip": "bestzip ./build/Release/eq-toolkit_v1.8.0_unpackeged.zip resources/** scripts/** _locales/** manifest.json popup.html" + "typecheck": "tsc --noEmit", + "test": "vitest run", + "build": "node tools/buildExtension.mjs", + "prezip": "npm run build && node -e \"require('node:fs').mkdirSync('build/Release',{recursive:true})\"", + "zip": "bestzip ./build/Release/eq-toolkit_v2.0.0_unpacked.zip dist/**" }, "devDependencies": { - "bestzip": "^2.2.1" + "@types/node": "^26.1.0", + "bestzip": "^2.2.1", + "typescript": "^6.0.3", + "vite": "^8.1.3", + "vitest": "^4.1.9" } -} \ No newline at end of file +} diff --git a/popup.html b/popup.html index 3d31b5d..7f0f650 100644 --- a/popup.html +++ b/popup.html @@ -11,54 +11,58 @@
- EQ Toolkit - - - - - - Support me - +
+ EQ Toolkit + + + +
+
+ + +
-
+
-
-
- - -
- -24 - -12 - 0 - 12 - 24 +
+
+

Global Controls

+
+
+
+ + 0.0 dB +
+ +
+
-
- - -
-
- @@ -171,6 +194,20 @@

Add to autostart whitelist

+ + -