diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000..60334c65 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,24 @@ +{ + "parser": "@typescript-eslint/parser", + "extends": [ + "plugin:react/recommended" + ], + "parserOptions": { + "ecmaFeatures": { + "jsx": true // Allows for the parsing of JSX + } + }, + "rules": { + "react/prop-types": "off", + "@typescript-eslint/no-empty-interface": 0, + "no-unreachable": "warn", + "no-unused-vars": "warn", + "react/react-in-jsx-scope": "off", + "semi": ["error", "always"] + }, + "settings": { + "react": { + "version": "detect" + } + } +} diff --git a/.gitignore b/.gitignore index e7b75066..3619fecf 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,36 @@ weights/ error.log *.exe *.ipynb + + +# Added by WebUI migration +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +.vscode +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +.venv + +# Customize +test-x86_64-pc-windows-msvc.spec +/build \ No newline at end of file diff --git a/data.js b/data.js new file mode 100644 index 00000000..152ab9e4 --- /dev/null +++ b/data.js @@ -0,0 +1,86 @@ +export const language_list = [{'language': 'Afrikaans', 'country': 'South Africa'}, {'language': 'Albanian', 'country': 'Albania'}, {'language': 'Amharic', 'country': 'Ethiopia'}, {'language': 'Arabic', 'country': 'Algeria'}, {'language': 'Arabic', 'country': 'Bahrain'}, {'language': 'Arabic', 'country': 'Egypt'}, {'language': 'Arabic', 'country': 'Israel'}, {'language': 'Arabic', 'country': 'Iraq'}, {'language': 'Arabic', 'country': 'Jordan'}, {'language': 'Arabic', 'country': 'Kuwait'}, {'language': 'Arabic', 'country': 'Lebanon'}, {'language': 'Arabic', 'country': 'Mauritania'}, {'language': 'Arabic', 'country': 'Morocco'}, {'language': 'Arabic', 'country': 'Oman'}, {'language': 'Arabic', 'country': 'Qatar'}, {'language': 'Arabic', 'country': 'Saudi Arabia'}, {'language': 'Arabic', 'country': 'Palestine'}, {'language': 'Arabic', 'country': 'Syria'}, {'language': 'Arabic', 'country': 'Tunisia'}, {'language': 'Arabic', 'country': 'United Arab Emirates'}, {'language': 'Arabic', 'country': 'Yemen'}, {'language': 'Armenian', 'country': 'Armenia'}, {'language': 'Azerbaijani', 'country': 'Azerbaijan'}, {'language': 'Basque', 'country': 'Spain'}, {'language': 'Bengali', 'country': 'Bangladesh'}, {'language': 'Bengali', 'country': 'India'}, {'language': 'Bosnian', 'country': 'Bosnia and Herzegovina'}, {'language': 'Bulgarian', 'country': 'Bulgaria'}, {'language': 'Catalan', 'country': 'Spain'}, {'language': 'Chinese Simplified', 'country': 'China'}, {'language': 'Chinese Simplified', 'country': 'Hong Kong'}, {'language': 'Chinese Traditional', 'country': 'Taiwan'}, {'language': 'Chinese Traditional', 'country': 'Hong Kong'}, {'language': 'Croatian', 'country': 'Croatia'}, {'language': 'Czech', 'country': 'Czech Republic'}, {'language': 'Danish', 'country': 'Denmark'}, {'language': 'Dutch', 'country': 'Belgium'}, {'language': 'Dutch', 'country': 'Netherlands'}, {'language': 'English', 'country': 'Australia'}, {'language': 'English', 'country': 'Canada'}, {'language': 'English', 'country': 'Ghana'}, {'language': 'English', 'country': 'Hong Kong'}, {'language': 'English', 'country': 'India'}, {'language': 'English', 'country': 'Ireland'}, {'language': 'English', 'country': 'Kenya'}, {'language': 'English', 'country': 'New Zealand'}, {'language': 'English', 'country': 'Nigeria'}, {'language': 'English', 'country': 'Philippines'}, {'language': 'English', 'country': 'Singapore'}, {'language': 'English', 'country': 'South Africa'}, {'language': 'English', 'country': 'Tanzania'}, {'language': 'English', 'country': 'United Kingdom'}, {'language': 'English', 'country': 'United States'}, {'language': 'Estonian', 'country': 'Estonia'}, {'language': 'Filipino', 'country': 'Philippines'}, {'language': 'Finnish', 'country': 'Finland'}, {'language': 'French', 'country': 'Belgium'}, {'language': 'French', 'country': 'Canada'}, {'language': 'French', 'country': 'France'}, {'language': 'French', 'country': 'Switzerland'}, {'language': 'Galician', 'country': 'Spain'}, {'language': 'Georgian', 'country': 'Georgia'}, {'language': 'German', 'country': 'Austria'}, {'language': 'German', 'country': 'Germany'}, {'language': 'German', 'country': 'Switzerland'}, {'language': 'Greek', 'country': 'Greece'}, {'language': 'Gujarati', 'country': 'India'}, {'language': 'Hebrew', 'country': 'Israel'}, {'language': 'Hindi', 'country': 'India'}, {'language': 'Hungarian', 'country': 'Hungary'}, {'language': 'Icelandic', 'country': 'Iceland'}, {'language': 'Indonesian', 'country': 'Indonesia'}, {'language': 'Italian', 'country': 'Italy'}, {'language': 'Italian', 'country': 'Switzerland'}, {'language': 'Japanese', 'country': 'Japan'}, {'language': 'Kannada', 'country': 'India'}, {'language': 'Kazakh', 'country': 'Kazakhstan'}, {'language': 'Khmer', 'country': 'Cambodia'}, {'language': 'Korean', 'country': 'South Korea'}, {'language': 'Lao', 'country': 'Laos'}, {'language': 'Latvian', 'country': 'Latvia'}, {'language': 'Lithuanian', 'country': 'Lithuania'}, {'language': 'Macedonian', 'country': 'North Macedonia'}, {'language': 'Malay', 'country': 'Malaysia'}, {'language': 'Malayalam', 'country': 'India'}, {'language': 'Mongolian', 'country': 'Mongolia'}, {'language': 'Nepali', 'country': 'Nepal'}, {'language': 'Norwegian', 'country': 'Norway'}, {'language': 'Persian', 'country': 'Iran'}, {'language': 'Polish', 'country': 'Poland'}, {'language': 'Portuguese', 'country': 'Brazil'}, {'language': 'Portuguese', 'country': 'Portugal'}, {'language': 'Romanian', 'country': 'Romania'}, {'language': 'Russian', 'country': 'Russia'}, {'language': 'Serbian', 'country': 'Serbia'}, {'language': 'Sinhala', 'country': 'Sri Lanka'}, {'language': 'Slovak', 'country': 'Slovakia'}, {'language': 'Slovenian', 'country': 'Slovenia'}, {'language': 'Spanish', 'country': 'Argentina'}, {'language': 'Spanish', 'country': 'Bolivia'}, {'language': 'Spanish', 'country': 'Chile'}, {'language': 'Spanish', 'country': 'Colombia'}, {'language': 'Spanish', 'country': 'Costa Rica'}, {'language': 'Spanish', 'country': 'Dominican Republic'}, {'language': 'Spanish', 'country': 'Ecuador'}, {'language': 'Spanish', 'country': 'El Salvador'}, {'language': 'Spanish', 'country': 'Guatemala'}, {'language': 'Spanish', 'country': 'Honduras'}, {'language': 'Spanish', 'country': 'Mexico'}, {'language': 'Spanish', 'country': 'Nicaragua'}, {'language': 'Spanish', 'country': 'Panama'}, {'language': 'Spanish', 'country': 'Paraguay'}, {'language': 'Spanish', 'country': 'Peru'}, {'language': 'Spanish', 'country': 'Puerto Rico'}, {'language': 'Spanish', 'country': 'Spain'}, {'language': 'Spanish', 'country': 'United States'}, {'language': 'Spanish', 'country': 'Uruguay'}, {'language': 'Spanish', 'country': 'Venezuela'}, {'language': 'Sundanese', 'country': 'Indonesia'}, {'language': 'Swahili', 'country': 'Kenya'}, {'language': 'Swahili', 'country': 'Tanzania'}, {'language': 'Swedish', 'country': 'Sweden'}, {'language': 'Tamil', 'country': 'India'}, {'language': 'Tamil', 'country': 'malaysia'}, {'language': 'Tamil', 'country': 'Singapore'}, {'language': 'Tamil', 'country': 'Sri Lanka'}, {'language': 'Telugu', 'country': 'India'}, {'language': 'Thai', 'country': 'Thailand'}, {'language': 'Turkish', 'country': 'Turkey'}, {'language': 'Ukrainian', 'country': 'Ukraine'}, {'language': 'Urdu', 'country': 'India'}, {'language': 'Urdu', 'country': 'Pakistan'}, {'language': 'Uzbek', 'country': 'Uzbekistan'}, {'language': 'Vietnamese', 'country': 'Vietnam'}]; + +export const translator_list = [ + { translator_key: "DeepL", translator_name: "DeepL", is_available: true }, + { translator_key: "DeepL_API", translator_name: `DeepL\nAPI`, is_available: false }, + { translator_key: "Google", translator_name: "Google", is_available: true }, + { translator_key: "Bing", translator_name: "Bing", is_available: true }, + { translator_key: "Papago", translator_name: "Papago", is_available: true }, + { translator_key: "CTranslate2", translator_name: `Internal\n(Default)`, is_available: true }, +]; + + +export const generateTestData = (num) => { + const testDataArray = []; + const messagesJa = [ + "今日はとてもいい天気ですね。", + "次の会議は何時に始まりますか?", + "新しいプロジェクトについて話しましょう。", + "お疲れ様です。今日は早く帰れますか?", + "この書類にサインをお願いします。", + "次の休暇はどこに行きますか?", + "先週のレポートを見ましたか?", + "この問題をどうやって解決しますか?", + "週末は何をする予定ですか?", + "新しいアイデアを聞かせてください。", + "こんにちは、調子はどうですか?", + "おはようございます、今日の予定は何ですか?", + "こんばんは、今日は楽しかったですか?", + "ありがとう、助かりました。", + "さようなら、また会いましょう。", + "はい、分かりました。", + "いいえ、ちょっと難しいです。", + "すみません、もう一度言ってください。", + "お願いします、手伝ってください。", + "お疲れ様です、今日も頑張りましょう。", + ]; + const messagesEn = [ + "The weather is very nice today.", + "What time does the next meeting start?", + "Let's talk about the new project.", + "Good job today. Can you leave early today?", + "Please sign this document.", + "Where are you going for the next vacation?", + "Did you see last week's report?", + "How do we solve this problem?", + "What are your plans for the weekend?", + "Tell me about your new idea.", + "Hello, how are you?", + "Good morning, what are your plans for today?", + "Good evening, did you have a good day?", + "Thank you, that was helpful.", + "Goodbye, see you again.", + "Yes, understood.", + "No, it's a bit difficult.", + "Sorry, could you say that again?", + "Please, help me out.", + "Good job today, let's do our best again tomorrow.", + ]; + const statuses = ["sent", "received"]; + + for (let i = 0; i < num; i++) { + const uuid = crypto.randomUUID(); + const date = new Date().toLocaleTimeString( + "ja-JP", + { hour12: false, hour: "2-digit", minute: "2-digit" } + ); + const messageIndex = Math.floor(Math.random() * messagesJa.length); + const status = statuses[Math.floor(Math.random() * statuses.length)]; + + const testData = { + id: uuid, + category: status, + status: status, + created_at: date, + messages: { + original: messagesJa[messageIndex], + translated: [ + messagesEn[messageIndex], + ], + }, + }; + testDataArray.push(testData); + } + + return testDataArray; +}; \ No newline at end of file diff --git a/img/VRCT_now_downloading.png b/img/VRCT_now_downloading.png deleted file mode 100644 index 8e372d87..00000000 Binary files a/img/VRCT_now_downloading.png and /dev/null differ diff --git a/img/VRCT_starting_up.png b/img/VRCT_starting_up.png deleted file mode 100644 index 9feac583..00000000 Binary files a/img/VRCT_starting_up.png and /dev/null differ diff --git a/img/about_vrct/arrow_left.png b/img/about_vrct/arrow_left.png deleted file mode 100644 index a1c4b35e..00000000 Binary files a/img/about_vrct/arrow_left.png and /dev/null differ diff --git a/img/about_vrct/arrow_right.png b/img/about_vrct/arrow_right.png deleted file mode 100644 index 69e005ba..00000000 Binary files a/img/about_vrct/arrow_right.png and /dev/null differ diff --git a/img/about_vrct/contributors_github_icon.png b/img/about_vrct/contributors_github_icon.png deleted file mode 100644 index 1c6e0727..00000000 Binary files a/img/about_vrct/contributors_github_icon.png and /dev/null differ diff --git a/img/about_vrct/contributors_x_icon.png b/img/about_vrct/contributors_x_icon.png deleted file mode 100644 index c17fb57d..00000000 Binary files a/img/about_vrct/contributors_x_icon.png and /dev/null differ diff --git a/img/about_vrct/dev_github_icon.png b/img/about_vrct/dev_github_icon.png deleted file mode 100644 index 8cbaaff7..00000000 Binary files a/img/about_vrct/dev_github_icon.png and /dev/null differ diff --git a/img/about_vrct/dev_misya.png b/img/about_vrct/dev_misya.png deleted file mode 100644 index 60317fff..00000000 Binary files a/img/about_vrct/dev_misya.png and /dev/null differ diff --git a/img/about_vrct/dev_shiina.png b/img/about_vrct/dev_shiina.png deleted file mode 100644 index 63b5785e..00000000 Binary files a/img/about_vrct/dev_shiina.png and /dev/null differ diff --git a/img/about_vrct/dev_x_icon.png b/img/about_vrct/dev_x_icon.png deleted file mode 100644 index dfd6d109..00000000 Binary files a/img/about_vrct/dev_x_icon.png and /dev/null differ diff --git a/img/about_vrct/poster_showcase_pagination_button.png b/img/about_vrct/poster_showcase_pagination_button.png deleted file mode 100644 index bbfee311..00000000 Binary files a/img/about_vrct/poster_showcase_pagination_button.png and /dev/null differ diff --git a/img/about_vrct/poster_showcase_pagination_button_chato.png b/img/about_vrct/poster_showcase_pagination_button_chato.png deleted file mode 100644 index a4df1d52..00000000 Binary files a/img/about_vrct/poster_showcase_pagination_button_chato.png and /dev/null differ diff --git a/img/about_vrct/poster_tell_us_message_en.png b/img/about_vrct/poster_tell_us_message_en.png deleted file mode 100644 index 1078b42f..00000000 Binary files a/img/about_vrct/poster_tell_us_message_en.png and /dev/null differ diff --git a/img/about_vrct/poster_tell_us_message_ja.png b/img/about_vrct/poster_tell_us_message_ja.png deleted file mode 100644 index 8e2b096d..00000000 Binary files a/img/about_vrct/poster_tell_us_message_ja.png and /dev/null differ diff --git a/img/about_vrct/special_thanks_members.png b/img/about_vrct/special_thanks_members.png deleted file mode 100644 index e3847657..00000000 Binary files a/img/about_vrct/special_thanks_members.png and /dev/null differ diff --git a/img/about_vrct/special_thanks_message_and_you.png b/img/about_vrct/special_thanks_message_and_you.png deleted file mode 100644 index f006ff15..00000000 Binary files a/img/about_vrct/special_thanks_message_and_you.png and /dev/null differ diff --git a/img/about_vrct/special_thanks_tell_us_message_en.png b/img/about_vrct/special_thanks_tell_us_message_en.png deleted file mode 100644 index c213e5bc..00000000 Binary files a/img/about_vrct/special_thanks_tell_us_message_en.png and /dev/null differ diff --git a/img/about_vrct/special_thanks_tell_us_message_ja.png b/img/about_vrct/special_thanks_tell_us_message_ja.png deleted file mode 100644 index f3274966..00000000 Binary files a/img/about_vrct/special_thanks_tell_us_message_ja.png and /dev/null differ diff --git a/img/arrow_left_black.png b/img/arrow_left_black.png deleted file mode 100644 index 5e3f8dfb..00000000 Binary files a/img/arrow_left_black.png and /dev/null differ diff --git a/img/arrow_left_disabled.png b/img/arrow_left_disabled.png deleted file mode 100644 index 5b5f3afa..00000000 Binary files a/img/arrow_left_disabled.png and /dev/null differ diff --git a/img/arrow_left_white.png b/img/arrow_left_white.png deleted file mode 100644 index 463d8a74..00000000 Binary files a/img/arrow_left_white.png and /dev/null differ diff --git a/img/cancel_icon.png b/img/cancel_icon.png deleted file mode 100644 index aa6c386e..00000000 Binary files a/img/cancel_icon.png and /dev/null differ diff --git a/img/chato_delivering.png b/img/chato_delivering.png deleted file mode 100644 index d38f1447..00000000 Binary files a/img/chato_delivering.png and /dev/null differ diff --git a/img/chato_unpackaging.png b/img/chato_unpackaging.png deleted file mode 100644 index 52eb66dc..00000000 Binary files a/img/chato_unpackaging.png and /dev/null differ diff --git a/img/configuration_icon_black.png b/img/configuration_icon_black.png deleted file mode 100644 index c97dfefe..00000000 Binary files a/img/configuration_icon_black.png and /dev/null differ diff --git a/img/configuration_icon_disabled.png b/img/configuration_icon_disabled.png deleted file mode 100644 index 03a4a217..00000000 Binary files a/img/configuration_icon_disabled.png and /dev/null differ diff --git a/img/configuration_icon_white.png b/img/configuration_icon_white.png deleted file mode 100644 index ee6e050e..00000000 Binary files a/img/configuration_icon_white.png and /dev/null differ diff --git a/img/downloading_unpackaging_d.png b/img/downloading_unpackaging_d.png deleted file mode 100644 index 5c3c7031..00000000 Binary files a/img/downloading_unpackaging_d.png and /dev/null differ diff --git a/img/downloading_unpackaging_u.png b/img/downloading_unpackaging_u.png deleted file mode 100644 index 684433d5..00000000 Binary files a/img/downloading_unpackaging_u.png and /dev/null differ diff --git a/img/folder_open_icon_black.png b/img/folder_open_icon_black.png deleted file mode 100644 index 988184b3..00000000 Binary files a/img/folder_open_icon_black.png and /dev/null differ diff --git a/img/folder_open_icon_white.png b/img/folder_open_icon_white.png deleted file mode 100644 index 3de75dfe..00000000 Binary files a/img/folder_open_icon_white.png and /dev/null differ diff --git a/img/foreground_icon_black.png b/img/foreground_icon_black.png deleted file mode 100644 index ff3594c2..00000000 Binary files a/img/foreground_icon_black.png and /dev/null differ diff --git a/img/foreground_icon_disabled.png b/img/foreground_icon_disabled.png deleted file mode 100644 index 91778b7b..00000000 Binary files a/img/foreground_icon_disabled.png and /dev/null differ diff --git a/img/foreground_icon_white.png b/img/foreground_icon_white.png deleted file mode 100644 index 50370ad1..00000000 Binary files a/img/foreground_icon_white.png and /dev/null differ diff --git a/img/headphones_icon_black.png b/img/headphones_icon_black.png deleted file mode 100644 index 2cb97ec2..00000000 Binary files a/img/headphones_icon_black.png and /dev/null differ diff --git a/img/headphones_icon_disabled.png b/img/headphones_icon_disabled.png deleted file mode 100644 index f81f812e..00000000 Binary files a/img/headphones_icon_disabled.png and /dev/null differ diff --git a/img/headphones_icon_white.png b/img/headphones_icon_white.png deleted file mode 100644 index 54f7359d..00000000 Binary files a/img/headphones_icon_white.png and /dev/null differ diff --git a/img/help_icon_black.png b/img/help_icon_black.png deleted file mode 100644 index 156ca026..00000000 Binary files a/img/help_icon_black.png and /dev/null differ diff --git a/img/help_icon_white.png b/img/help_icon_white.png deleted file mode 100644 index ee5cb936..00000000 Binary files a/img/help_icon_white.png and /dev/null differ diff --git a/img/link_icon_black.png b/img/link_icon_black.png deleted file mode 100644 index e4790914..00000000 Binary files a/img/link_icon_black.png and /dev/null differ diff --git a/img/link_icon_white.png b/img/link_icon_white.png deleted file mode 100644 index 58a56d45..00000000 Binary files a/img/link_icon_white.png and /dev/null differ diff --git a/img/mic_icon_black.png b/img/mic_icon_black.png deleted file mode 100644 index 1210b069..00000000 Binary files a/img/mic_icon_black.png and /dev/null differ diff --git a/img/mic_icon_disabled.png b/img/mic_icon_disabled.png deleted file mode 100644 index 542d2824..00000000 Binary files a/img/mic_icon_disabled.png and /dev/null differ diff --git a/img/mic_icon_white.png b/img/mic_icon_white.png deleted file mode 100644 index e1837463..00000000 Binary files a/img/mic_icon_white.png and /dev/null differ diff --git a/img/narrow_arrow_down_black.png b/img/narrow_arrow_down_black.png deleted file mode 100644 index e53829e5..00000000 Binary files a/img/narrow_arrow_down_black.png and /dev/null differ diff --git a/img/narrow_arrow_down_white.png b/img/narrow_arrow_down_white.png deleted file mode 100644 index 309560c8..00000000 Binary files a/img/narrow_arrow_down_white.png and /dev/null differ diff --git a/img/overlay_br_sakura.png b/img/overlay_br_sakura.png deleted file mode 100644 index 61e8ccd7..00000000 Binary files a/img/overlay_br_sakura.png and /dev/null differ diff --git a/img/overlay_tl_sakura.png b/img/overlay_tl_sakura.png deleted file mode 100644 index d6211f41..00000000 Binary files a/img/overlay_tl_sakura.png and /dev/null differ diff --git a/img/redo_icon_black.png b/img/redo_icon_black.png deleted file mode 100644 index 989581a3..00000000 Binary files a/img/redo_icon_black.png and /dev/null differ diff --git a/img/redo_icon_white.png b/img/redo_icon_white.png deleted file mode 100644 index 2a27e302..00000000 Binary files a/img/redo_icon_white.png and /dev/null differ diff --git a/img/refresh_icon.png b/img/refresh_icon.png deleted file mode 100644 index 408bc2a6..00000000 Binary files a/img/refresh_icon.png and /dev/null differ diff --git a/img/refresh_update_icon.png b/img/refresh_update_icon.png deleted file mode 100644 index c5acad15..00000000 Binary files a/img/refresh_update_icon.png and /dev/null differ diff --git a/img/send_message_icon_black.png b/img/send_message_icon_black.png deleted file mode 100644 index e4240e56..00000000 Binary files a/img/send_message_icon_black.png and /dev/null differ diff --git a/img/send_message_icon_white.png b/img/send_message_icon_white.png deleted file mode 100644 index cdead72b..00000000 Binary files a/img/send_message_icon_white.png and /dev/null differ diff --git a/img/swap_icon_black.png b/img/swap_icon_black.png deleted file mode 100644 index eec6f830..00000000 Binary files a/img/swap_icon_black.png and /dev/null differ diff --git a/img/swap_icon_white.png b/img/swap_icon_white.png deleted file mode 100644 index 8fa1cf53..00000000 Binary files a/img/swap_icon_white.png and /dev/null differ diff --git a/img/translation_icon_black.png b/img/translation_icon_black.png deleted file mode 100644 index 3e184a72..00000000 Binary files a/img/translation_icon_black.png and /dev/null differ diff --git a/img/translation_icon_disabled.png b/img/translation_icon_disabled.png deleted file mode 100644 index 533feb81..00000000 Binary files a/img/translation_icon_disabled.png and /dev/null differ diff --git a/img/translation_icon_white.png b/img/translation_icon_white.png deleted file mode 100644 index 706b0bbc..00000000 Binary files a/img/translation_icon_white.png and /dev/null differ diff --git a/img/unpackage_icon.png b/img/unpackage_icon.png deleted file mode 100644 index 8fd8e7d2..00000000 Binary files a/img/unpackage_icon.png and /dev/null differ diff --git a/img/vrchat_chatbox_trasnlator_transcription.png b/img/vrchat_chatbox_trasnlator_transcription.png deleted file mode 100644 index 9f2e401e..00000000 Binary files a/img/vrchat_chatbox_trasnlator_transcription.png and /dev/null differ diff --git a/img/vrct_logo_for_light_mode.png b/img/vrct_logo_for_light_mode.png deleted file mode 100644 index ad2b0b95..00000000 Binary files a/img/vrct_logo_for_light_mode.png and /dev/null differ diff --git a/img/vrct_logo_mark_black.ico b/img/vrct_logo_mark_black.ico deleted file mode 100644 index 7b711af3..00000000 Binary files a/img/vrct_logo_mark_black.ico and /dev/null differ diff --git a/img/vrct_logo_mark_black.png b/img/vrct_logo_mark_black.png deleted file mode 100644 index 4e4fce17..00000000 Binary files a/img/vrct_logo_mark_black.png and /dev/null differ diff --git a/img/vrct_logo_mark_black_icon.png b/img/vrct_logo_mark_black_icon.png deleted file mode 100644 index 1d73b8a8..00000000 Binary files a/img/vrct_logo_mark_black_icon.png and /dev/null differ diff --git a/img/vrct_update_process.png b/img/vrct_update_process.png deleted file mode 100644 index 27a77150..00000000 Binary files a/img/vrct_update_process.png and /dev/null differ diff --git a/img/xsoverlay2.png b/img/xsoverlay2.png deleted file mode 100644 index 20b4021a..00000000 Binary files a/img/xsoverlay2.png and /dev/null differ diff --git a/index.html b/index.html new file mode 100644 index 00000000..4c5cbd7a --- /dev/null +++ b/index.html @@ -0,0 +1,14 @@ + + + + + + + Tauri + React + + + +
+ + + diff --git a/locales/config.js b/locales/config.js new file mode 100644 index 00000000..aca15b8a --- /dev/null +++ b/locales/config.js @@ -0,0 +1,29 @@ +import i18n from "i18next"; +import { initReactI18next } from "react-i18next"; + +import translation_en from "./en.json"; +import translation_ja from "./ja.json"; +import translation_ko from "./ko.json"; +import translation_zh_Hant from "./zh-Hant.json"; + + +const resources = { + en: { translation: translation_en }, + ja: { translation: translation_ja }, + ko: { translation: translation_ko }, + zh_Hant: { translation: translation_zh_Hant }, +}; + +i18n + .use(initReactI18next) // passes i18n down to react-i18next + .init({ + resources, + lng: "en", + fallbackLng: "en", + debug: true, + interpolation: { + escapeValue: false // react already safes from xss + } + }); + +export default i18n; diff --git a/locales/en.json b/locales/en.json new file mode 100644 index 00000000..3676aa50 --- /dev/null +++ b/locales/en.json @@ -0,0 +1,283 @@ +{ + "main_window": { + "translation": "Translation", + "transcription_send": "Voice2Chatbox", + "transcription_receive": "Speaker2Log", + "foreground": "Foreground", + "language_settings": "Language Settings", + "your_language": "Your Language", + "translate_each_other_label": "Translate Each Other", + "swap_button_label": "Swap Languages", + "target_language": "Target Language", + "translator": "Translator", + "translator_ctranslate2": "Internal (Default)", + "textbox_tab_all": "All", + "textbox_tab_sent": "Sent", + "textbox_tab_received": "Received", + "textbox_tab_system": "System", + "textbox_system_message": { + "enabled_easter_egg": "Whoa! You caught us! There is something...like...easter-egg-ish function has enabled! It'll affect to Overlay(VR) for now;).", + "enabled_translation": "Translation feature is turned on.", + "disabled_translation": "Translation feature is turned off.", + "enabled_voice2chatbox": "Transcription from the microphone has started.", + "disabled_voice2chatbox": "Transcription from the microphone has been stopped.", + "enabled_speaker2log": "Transcription from the speaker has started.", + "disabled_speaker2log": "Transcription from the speaker has been stopped.", + "enabled_foreground": "The screen is fixed in the foreground.", + "disabled_foreground": "The foreground fixation has been released.", + "auth_key_success": "Auth key update completed.", + "auth_key_error": "Auth Key is incorrect or Usage limit reached.", + "no_mic_device_detected_error": "No mic device detected.", + "no_speaker_device_detected_error": "No speaker device detected.", + "translation_engine_limit_error": "It has automatically changed the translation engine. Access has been temporarily restricted due to an excessive number of requests to the translation engine. If you want to use the same translation engine, please wait for a while, restart VRCT, and try again.", + "detected_by_word_filter": "The word %{detected_message} has not been sent due to detection by the word filter.", + "selected_your_language": "\"Your Language\" has set to %{your_language}.", + "selected_target_language": "\"Target Language\" has set to %{target_language}.", + "switched_language_preset_tab": "Switched to Language Preset Tab No.%{tab_no}.\"", + "latest_language_setting": "Currently, \"Your Language\" is set to %{your_language}, and \"Target Language\" is set to %{target_language}.", + "opened_web_page_booth": "Opened Booth page in your web browser.", + "opened_web_page_vrct_documents": "Opened VRCT Documents page in your web browser.\nFor any issues, requests, or inquiries, please feel free to contact us through the links at the bottom of the documents page, the \"Contact Form,\" or via X (formerly Twitter)!" + }, + "update_available": "New version is here!", + "state_text_enabled": "Enabled", + "state_text_disabled": "Disabled", + "cover_message": "The functionality is temporarily disabled until the settings window is closed.", + "close_settings_window": "Close the settings window", + "confirmation_message": { + "update_software": "Download the new version and automatically restart the app.\nIt'll take a while. Do it now?", + "deny_update_software": "Do it later", + "accept_update_software": "Update and Restart", + "updating": "Now updating...", + "detected_over_ui_size": "Current UI Size: %{current_ui_size}\nVRCT's window size may be larger than your display size.\n* Depending on your display size, you may need to adjust it multiple times.", + "deny_adjust_ui_size": "Keep it at this size", + "accept_adjust_ui_size": "Set it smaller and restart" + } + }, + "selectable_language_window": { + "title_your_language": "Select Your Language", + "title_target_language": "Select Target Language", + "go_back_button": "Go Back" + }, + "overlay_settings": { + "restore_default_settings": "Restore Default Settings", + "opacity": "Opacity", + "ui_scaling": "UI Scaling", + "x_position": "X-axis (left-right)", + "y_position": "Y-axis (up-down)", + "z_position": "Z-axis (front-back)", + "x_rotation": "X-axis rotation", + "y_rotation": "Y-axis rotation", + "z_rotation": "Z-axis rotation", + "display_duration": "Display duration", + "fadeout_duration": "Fadeout duration" + }, + "config_window": { + "config_title": "Settings", + "compact_mode": "Compact Mode", + "version": "version %{version}", + "restart_message": "Apply changes with a restart.", + "common_error_message": { + "invalid_value": "Invalid value." + }, + "side_menu_labels": { + "appearance": "Appearance", + "translation": "Translation", + "transcription": "Transcription", + "transcription_mic": "Mic", + "transcription_speaker": "Speaker", + "transcription_internal_model": "Transcription Model", + "vr": "VR", + "others": "Others", + "others_send_message_formats": "Message Formats (Send)", + "others_received_message_formats": "Message Formats (XSOverlay & Speaker2Chatbox)", + "others_speaker2chatbox": "Speaker2Chatbox", + "advanced_settings": "Advanced Settings", + "about_vrct": "About VRCT" + }, + "transparency": { + "label": "Transparency", + "desc": "Change the main window's transparency." + }, + "appearance_theme": { + "label": "Theme", + "desc": "Change the color theme." + }, + "ui_size": { + "label": "UI Size" + }, + "textbox_ui_size": { + "label": "Text Box Font Size", + "desc": "You can adjust the font size used in the logs relative to the UI size." + }, + "message_box_ratio": { + "label": "Message Box Size", + "desc": "You can change the size of the input message box. It is in ratio to the text box.\n*No exact calculations." + }, + "font_family": { + "label": "Font Family" + }, + "ui_language": { + "label": "UI Language" + }, + "to_restore_main_window_geometry": { + "label": "Remember The Main Window Position", + "desc": "Restore the position and size of the previous window upon startup." + }, + "use_translation_feature": { + "label": "Use Translation Feature", + "desc": "You can't use the translation feature while this is turned off. Instead, the VRCT startup becomes a little faster. This is for users who don't need the translation feature and only use VRCT as a chatbox and transcription tool." + }, + "ctranslate2_weight_type": { + "label": "Select Internal Translation Model", + "desc": "You can choose the translation model to use for the internal translation engine.", + "small": "Basic model (%{capacity})", + "large": "High accuracy model (%{capacity})" + }, + "deepl_auth_key": { + "label": "DeepL Auth Key", + "desc": "Please select %{translator} on the main screen with DeepL_API when using. ※Some languages may not be supported.", + "open_auth_key_webpage": "Open DeepL Account Webpage", + "auth_key_success": "Auth key update completed.", + "auth_key_error": "Auth Key is incorrect or Usage limit reached." + }, + "mic_host": { + "label": "Mic Host/Driver" + }, + "mic_device": { + "label": "Mic Device" + }, + "mic_dynamic_energy_threshold": { + "label_for_automatic": "Mic Energy Threshold (Current Setting: Automatic)", + "desc_for_automatic": "Automatically determine microphone input sensitivity.", + "label_for_manual": "Mic Energy Threshold (Current Setting: Manual)", + "desc_for_manual": "Manually determine the microphone input sensitivity using the slider. Press the microphone icon to input your voice and adjust the sensitivity while monitoring the volume.", + "error_message": "You can set it with a value between 0 to %{max}." + }, + "mic_record_timeout": { + "label": "Mic Record Timeout", + "desc": "Detects silence and, when the specified number of seconds has passed, considers the mic input to have ended. (Second(s))", + "error_message": "It cannot be greater than '%{mic_phrase_timeout_label}' with a value of 0 or more." + }, + "mic_phrase_timeout": { + "label": "Mic Phrase Timeout", + "desc": "Transcription processing is performed at intervals of the specified number of seconds.", + "error_message": "It cannot be set lower than '%{mic_record_timeout_label}' with a value of 0 or more." + }, + "mic_max_phrase": { + "label": "Mic Max Words", + "desc": "It is the lower limit for the number of transcribed words, and only when this number is exceeded will the transcription results be displayed logs and send to VRChat.", + "error_message": "You can set a number equal to or greater than 0." + }, + "mic_word_filter": { + "label": "Mic Word Filter", + "desc": "If a registered word is detected, the text will not be sent. To add multiple words at once, separate them with a \",\" (comma). \n*Duplicate words will not be registered.", + "add_button_label": "Add", + "count_desc": "Current registered word count: %{count}" + }, + "speaker_device": { + "label": "Speaker Device" + }, + "speaker_dynamic_energy_threshold": { + "label_for_automatic": "Speaker Energy Threshold (Current Setting: Automatic)", + "desc_for_automatic": "Automatically determine speaker input sensitivity.", + "label_for_manual": "Speaker Energy Threshold (Current Setting: Manual)", + "desc_for_manual": "Manually determine the speaker input sensitivity using the slider. Press the headphones icon to listen to the audio and adjust the sensitivity while monitoring the volume.", + "error_message": "You can set it with a value between 0 to %{max}.", + "no_device_error_message": "No speaker device detected." + }, + "speaker_record_timeout": { + "label": "Speaker Record Timeout", + "desc": "Detects silence and, when the specified number of seconds has passed, considers the speaker input to have ended. (Second(s))", + "error_message": "It cannot be greater than '%{speaker_phrase_timeout_label}' with a value of 0 or more." + }, + "speaker_phrase_timeout": { + "label": "Speaker Phrase Timeout", + "desc": "Transcription processing is performed at intervals of the specified number of seconds.", + "error_message": "It cannot be set lower than '%{speaker_record_timeout_label}' with a value of 0 or more." + }, + "speaker_max_phrase": { + "label": "Speaker Max Words", + "desc": "It is the lower limit for the number of transcribed words, and only when this number is exceeded will the transcription results be displayed logs.", + "error_message": "You can set a number equal to or greater than 0." + }, + "use_whisper_feature": { + "label": "Use Whisper Model As Transcription", + "desc": "In some languages, the accuracy of speech recognition may improve. During speech recognition usage, CPU usage increases, so please consider your PC specs before using this feature." + }, + "whisper_weight_type": { + "label": "Select Whisper Model", + "desc": "Generally, models with larger capacity tend to have higher accuracy, but this also results in longer transcription times and increased CPU usage. Please refer to the documentation for explanations of each model.\n※Larger models, especially those exceeding medium size, can be challenging to run even depending on the CPU's performance.", + "model_template": "%{model_name} model (%{capacity})", + "recommended_model_template": "%{model_name} model (%{capacity}) (Recommended)" + }, + "enable_overlay_small_log": { + "label": "Enable Overlay", + "open_overlay_settings": "Open Overlay Customized Settings" + }, + "auto_clear_the_message_box": { + "label": "Auto Clear The Message Box" + }, + "send_only_translated_messages": { + "label": "Send Only Translated Messages" + }, + "send_message_button_type": { + "label": "Send Message Button", + "hide": "Hide (Use enter key to send)", + "show": "Show", + "show_and_disable_enter_key": "Show and disable to send when pressed enter key" + }, + "notice_xsoverlay": { + "label": "Notification XSOverlay", + "desc": "Notify received messages by using XSOverlay's notification feature." + }, + "auto_export_message_logs": { + "label": "Auto Export Message Logs", + "desc": "Automatically export the conversation messages as a text file." + }, + "vrc_mic_mute_sync": { + "label": "VRC Mic Mute Sync", + "desc": "VRCT will not send the message to VRChat while VRChat's mic is muted.\n*There is a bit latency and Push-To-Talk is not supported." + }, + "send_message_to_vrc": { + "label": "Send Message To VRChat", + "desc": "There is a way to use it without sending messages to VRChat, but it is not supported. Enable this feature when you intend to send a message to VRChat." + }, + "send_message_format": { + "label": "Message Format", + "desc": "You can change the decoration of the message you want to send.\n[message] will be replaced with the message.", + "example_text": "This is an example sentence. Fonts, line breaks, etc. may differ from the actual display.", + "error_message": "Cannot use the term '[message]'." + }, + "send_message_format_with_t": { + "label": "Message Format (with Translation)", + "desc": "You can change the decoration of the message you want to send.\n[message] will be replaced with the message, and [translation] will be replaced with the translated message.", + "example_text": "This is an example sentence. Fonts, line breaks, etc. may differ from the actual display.", + "error_message": "Cannot use the terms '[message]' and '[translation]'." + }, + "received_message_format": { + "label": "Format of Received Messages", + "desc": "Used for XSOverlay notification receiving feature.\n[message] will be replaced with the message. \n※It will be used in Speaker2Chatbox too.", + "example_text": "This is an example sentence. Actual display may vary, including font and line breaks.", + "error_message": "Cannot use the term '[message]'." + }, + "received_message_format_with_t": { + "label": "Format of Received Messages (with Translation)", + "desc": "Used for XSOverlay notification receiving feature.\n[message] will be replaced with the message, and [translation] will be replaced with the translated message.\n※It will be used in Speaker2Chatbox too.", + "example_text": "This is an example sentence. Actual display may vary, including font and line breaks.", + "error_message": "Cannot use the terms '[message]' and '[translation]'." + }, + "send_received_message_to_vrc": { + "label": "Send Received Message To VRChat", + "desc": "Send the message you received from the speaker's sound to VRChat's chatbox. However, this feature is intended for users who genuinely need it. Please consult with the developer." + }, + "osc_ip_address": { + "label": "OSC IP Address" + }, + "osc_port": { + "label": "OSC Port" + }, + "open_config_filepath": { + "label": "Open Config File" + } + } +} \ No newline at end of file diff --git a/locales/en.yml b/locales/en.yml deleted file mode 100644 index 9c5d47a6..00000000 --- a/locales/en.yml +++ /dev/null @@ -1,300 +0,0 @@ -main_window: - translation: Translation - transcription_send: Voice2Chatbox - transcription_receive: Speaker2Log - foreground: Foreground - - language_settings: Language Settings - your_language: Your Language - translate_each_other_label: Translate Each Other - swap_button_label: Swap Languages - target_language: Target Language - translator: Translator - translator_ctranslate2: Internal (Default) - - textbox_tab_all: All - textbox_tab_sent: Sent - textbox_tab_received: Received - textbox_tab_system: System - - textbox_system_message: - enabled_easter_egg: Whoa! You caught us! There is something...like...easter-egg-ish function has enabled! It'll affect to Overlay(VR) for now;). - enabled_translation: Translation feature is turned on. - disabled_translation: Translation feature is turned off. - enabled_voice2chatbox: Transcription from the microphone has started. - disabled_voice2chatbox: Transcription from the microphone has been stopped. - enabled_speaker2log: Transcription from the speaker has started. - disabled_speaker2log: Transcription from the speaker has been stopped. - enabled_foreground: The screen is fixed in the foreground. - disabled_foreground: The foreground fixation has been released. - - auth_key_success: Auth key update completed. - auth_key_error: Auth Key is incorrect or Usage limit reached. - - no_mic_device_detected_error: No mic device detected. - no_speaker_device_detected_error: No speaker device detected. - translation_engine_limit_error: It has automatically changed the translation engine. Access has been temporarily restricted due to an excessive number of requests to the translation engine. If you want to use the same translation engine, please wait for a while, restart VRCT, and try again. - - detected_by_word_filter: The word %{detected_message} has not been sent due to detection by the word filter. - - selected_your_language: "\"Your Language\" has set to %{your_language}." - selected_target_language: "\"Target Language\" has set to %{target_language}." - switched_language_preset_tab: Switched to Language Preset Tab No.%{tab_no}." - latest_language_setting: "Currently, \"Your Language\" is set to %{your_language}, and \"Target Language\" is set to %{target_language}." - - opened_web_page_booth: Opened Booth page in your web browser. - opened_web_page_vrct_documents: "Opened VRCT Documents page in your web browser.\nFor any issues, requests, or inquiries, please feel free to contact us through the links at the bottom of the documents page, the \"Contact Form,\" or via X (formerly Twitter)!" - - update_available: New version is here! - state_text_enabled: Enabled - state_text_disabled: Disabled - - cover_message: The functionality is temporarily disabled until the settings window is closed. - - confirmation_message: - update_software: "Download the new version and automatically restart the app.\nIt'll take a while. Do it now?" - deny_update_software: Do it later - accept_update_software: Update and Restart - updating: Now updating... - - detected_over_ui_size: "Current UI Size: %{current_ui_size}\nVRCT's window size may be larger than your display size.\n* Depending on your display size, you may need to adjust it multiple times." - deny_adjust_ui_size: "Keep it at this size" - accept_adjust_ui_size: "Set it smaller and restart" - - -selectable_language_window: - title_your_language: Select Your Language - title_target_language: Select Target Language - go_back_button: Go Back - - -overlay_settings: - restore_default_settings: Restore Default Settings - opacity: Opacity - ui_scaling: UI Scaling - x_position: X-axis (left-right) - y_position: Y-axis (up-down) - z_position: Z-axis (front-back) - x_rotation: X-axis rotation - y_rotation: Y-axis rotation - z_rotation: Z-axis rotation - display_duration: Display duration - fadeout_duration: Fadeout duration - - -config_window: - config_title: Settings - compact_mode: Compact Mode - version: version %{version} - restart_message: Apply changes with a restart. - common_error_message: - invalid_value: Invalid value. - - side_menu_labels: - appearance: Appearance - translation: Translation - transcription: Transcription - transcription_mic: Mic - transcription_speaker: Speaker - transcription_internal_model: Transcription Model - vr: VR - others: Others - others_send_message_formats: Message Formats (Send) - others_received_message_formats: Message Formats (XSOverlay & Speaker2Chatbox) - others_speaker2chatbox: Speaker2Chatbox - advanced_settings: Advanced Settings - - - transparency: - label: Transparency - desc: Change the main window's transparency. - - appearance_theme: - label: Theme - desc: Change the color theme. - - ui_size: - label: UI Size - - textbox_ui_size: - label: Text Box Font Size - desc: You can adjust the font size used in the logs relative to the UI size. - - message_box_ratio: - label: Message Box Size - desc: "You can change the size of the input message box. It is in ratio to the text box.\n*No exact calculations." - - font_family: - label: Font Family - - ui_language: - label: UI Language - - to_restore_main_window_geometry: - label: Remember The Main Window Position - desc: Restore the position and size of the previous window upon startup. - - use_translation_feature: - label: Use Translation Feature - desc: You can't use the translation feature while this is turned off. Instead, the VRCT startup becomes a little faster. This is for users who don't need the translation feature and only use VRCT as a chatbox and transcription tool. - - ctranslate2_weight_type: - label: Select Internal Translation Model - desc: You can choose the translation model to use for the internal translation engine. - small: "Basic model (%{capacity})" - large: "High accuracy model (%{capacity})" - - deepl_auth_key: - label: DeepL Auth Key - desc: Please select %{translator} on the main screen with DeepL_API when using. ※Some languages may not be supported. - open_auth_key_webpage: Open DeepL Account Webpage - auth_key_success: Auth key update completed. - auth_key_error: Auth Key is incorrect or Usage limit reached. - - mic_host: - label: Mic Host/Driver - - mic_device: - label: Mic Device - - mic_dynamic_energy_threshold: - label_for_automatic: "Mic Energy Threshold (Current Setting: Automatic)" - desc_for_automatic: "Automatically determine microphone input sensitivity." - label_for_manual: "Mic Energy Threshold (Current Setting: Manual)" - desc_for_manual: "Manually determine the microphone input sensitivity using the slider. Press the microphone icon to input your voice and adjust the sensitivity while monitoring the volume." - error_message: You can set it with a value between 0 to %{max}. - - mic_record_timeout: - label: Mic Record Timeout - desc: Detects silence and, when the specified number of seconds has passed, considers the mic input to have ended. (Second(s)) - error_message: It cannot be greater than '%{mic_phrase_timeout_label}' with a value of 0 or more. - - mic_phrase_timeout: - label: Mic Phrase Timeout - desc: Transcription processing is performed at intervals of the specified number of seconds. - error_message: It cannot be set lower than '%{mic_record_timeout_label}' with a value of 0 or more. - - mic_max_phrase: - label: Mic Max Words - desc: It is the lower limit for the number of transcribed words, and only when this number is exceeded will the transcription results be displayed logs and send to VRChat. - error_message: You can set a number equal to or greater than 0. - - mic_word_filter: - label: Mic Word Filter - desc: "If a registered word is detected, the text will not be sent. To add multiple words at once, separate them with a \",\" (comma). \n*Duplicate words will not be registered." - add_button_label: Add - count_desc: "Current registered word count: %{count}" - - - speaker_device: - label: Speaker Device - - speaker_dynamic_energy_threshold: - label_for_automatic: "Speaker Energy Threshold (Current Setting: Automatic)" - desc_for_automatic: "Automatically determine speaker input sensitivity." - label_for_manual: "Speaker Energy Threshold (Current Setting: Manual)" - desc_for_manual: "Manually determine the speaker input sensitivity using the slider. Press the headphones icon to listen to the audio and adjust the sensitivity while monitoring the volume." - error_message: You can set it with a value between 0 to %{max}. - no_device_error_message: No speaker device detected. - - speaker_record_timeout: - label: Speaker Record Timeout - desc: Detects silence and, when the specified number of seconds has passed, considers the speaker input to have ended. (Second(s)) - error_message: It cannot be greater than '%{speaker_phrase_timeout_label}' with a value of 0 or more. - - speaker_phrase_timeout: - label: Speaker Phrase Timeout - desc: Transcription processing is performed at intervals of the specified number of seconds. - error_message: It cannot be set lower than '%{speaker_record_timeout_label}' with a value of 0 or more. - - speaker_max_phrase: - label: Speaker Max Words - desc: It is the lower limit for the number of transcribed words, and only when this number is exceeded will the transcription results be displayed logs. - error_message: You can set a number equal to or greater than 0. - - use_whisper_feature: - label: Use Whisper Model As Transcription - desc: In some languages, the accuracy of speech recognition may improve. During speech recognition usage, CPU usage increases, so please consider your PC specs before using this feature. - - whisper_weight_type: - label: Select Whisper Model - desc: "Generally, models with larger capacity tend to have higher accuracy, but this also results in longer transcription times and increased CPU usage. Please refer to the documentation for explanations of each model.\n※Larger models, especially those exceeding medium size, can be challenging to run even depending on the CPU's performance." - model_template: "%{model_name} model (%{capacity})" - recommended_model_template: "%{model_name} model (%{capacity}) (Recommended)" - - - enable_overlay_small_log: - label: Enable Overlay - # desc: - open_overlay_settings: Open Overlay Customized Settings - - auto_clear_the_message_box: - label: Auto Clear The Message Box - - send_only_translated_messages: - label: Send Only Translated Messages - - send_message_button_type: - label: Send Message Button - hide: Hide (Use enter key to send) - show: Show - show_and_disable_enter_key: Show and disable to send when pressed enter key - - notice_xsoverlay: - label: Notification XSOverlay - desc: Notify received messages by using XSOverlay's notification feature. - - auto_export_message_logs: - label: Auto Export Message Logs - desc: Automatically export the conversation messages as a text file. - - vrc_mic_mute_sync: - label: VRC Mic Mute Sync - desc: "VRCT will not send the message to VRChat while VRChat's mic is muted.\n*There is a bit latency and Push-To-Talk is not supported." - - send_message_to_vrc: - label: Send Message To VRChat - desc: There is a way to use it without sending messages to VRChat, but it is not supported. Enable this feature when you intend to send a message to VRChat. - - - send_message_format: - label: Message Format - desc: "You can change the decoration of the message you want to send.\n[message] will be replaced with the message." - example_text: This is an example sentence. Fonts, line breaks, etc. may differ from the actual display. - error_message: "Cannot use the term '[message]'." - - send_message_format_with_t: - label: Message Format (with Translation) - desc: "You can change the decoration of the message you want to send.\n[message] will be replaced with the message, and [translation] will be replaced with the translated message." - example_text: This is an example sentence. Fonts, line breaks, etc. may differ from the actual display. - error_message: "Cannot use the terms '[message]' and '[translation]'." - - received_message_format: - label: Format of Received Messages - desc: "Used for XSOverlay notification receiving feature.\n[message] will be replaced with the message. \n※It will be used in Speaker2Chatbox too." - example_text: This is an example sentence. Actual display may vary, including font and line breaks. - error_message: "Cannot use the term '[message]'." - - received_message_format_with_t: - label: Format of Received Messages (with Translation) - desc: "Used for XSOverlay notification receiving feature.\n[message] will be replaced with the message, and [translation] will be replaced with the translated message.\n※It will be used in Speaker2Chatbox too." - example_text: This is an example sentence. Actual display may vary, including font and line breaks. - error_message: "Cannot use the terms '[message]' and '[translation]'." - - - # Note: Speaker2Chatbox localization is fine only in English. Do not translate it into other languages. - # Speaker2Chatbox - send_received_message_to_vrc: - label: Send Received Message To VRChat - desc: Send the message you received from the speaker's sound to VRChat's chatbox. However, this feature is intended for users who genuinely need it. Please consult with the developer. - # Speaker2Chatbox - - - osc_ip_address: - label: OSC IP Address - - osc_port: - label: OSC Port - - open_config_filepath: - label: Open Config File \ No newline at end of file diff --git a/locales/ja.json b/locales/ja.json new file mode 100644 index 00000000..d74b7413 --- /dev/null +++ b/locales/ja.json @@ -0,0 +1,274 @@ +{ + "main_window": { + "translation": "翻訳", + "transcription_send": "音声認識(マイク)", + "transcription_receive": "音声認識(スピーカー)", + "foreground": "最前面表示", + "language_settings": "言語設定", + "your_language": "あなたの言語", + "translate_each_other_label": "双方向に翻訳", + "swap_button_label": "言語を入れ替え", + "target_language": "相手の言語", + "translator": "翻訳エンジン", + "translator_ctranslate2": "オフライン翻訳 (Default)", + "textbox_tab_all": "全て", + "textbox_tab_sent": "送信", + "textbox_tab_received": "受信", + "textbox_tab_system": "システム", + "textbox_system_message": { + "enabled_translation": "翻訳機能をONにしました。", + "disabled_translation": "翻訳機能をOFFしました。", + "enabled_voice2chatbox": "マイクからの音声入力、文字起こしを開始します。", + "disabled_voice2chatbox": "マイクからの音声入力、文字起こしを終了しました。", + "enabled_speaker2log": "スピーカーからの音声聞き取り、文字起こしを開始します。", + "disabled_speaker2log": "スピーカーからの音声聞き取り、文字起こしを終了しました。", + "enabled_foreground": "画面を常に最前面へ固定します。", + "disabled_foreground": "最前面への固定を解除しました。", + "auth_key_success": "認証キーの更新が完了しました。", + "auth_key_error": "認証キーが間違っているか、API使用制限が上限に達しています。", + "no_mic_device_detected_error": "マイクデバイスが検出されませんでした。", + "no_speaker_device_detected_error": "スピーカーデバイスが検出されませんでした。", + "translation_engine_limit_error": "翻訳エンジンを自動的に変更しました。対象翻訳エンジンへのリクエストが多すぎるため、一時的にアクセスが制限されています。同じ翻訳エンジンを使用したい場合はしばらく待ってから、VRCTの再起動をしてもう一度試してみてください。", + "detected_by_word_filter": "ワードフィルターに登録されている単語 %{detected_message} が検出されたため送信しませんでした。", + "selected_your_language": "「あなたの言語」 を %{your_language} に設定しました。", + "selected_target_language": "「相手の言語」 を %{target_language} に設定しました。", + "switched_language_preset_tab": "言語プリセット番号 %{tab_no} に切り替わりました。", + "latest_language_setting": "現在「あなたの言語」は %{your_language}、「相手の言語」は %{target_language} に設定されています。", + "opened_web_page_booth": "お使いのブラウザで、Boothのページを開きました。", + "opened_web_page_vrct_documents": "お使いのブラウザで、VRCTのドキュメントを開きました。使用方法などはそちらに記載されています。\n不具合、ご要望、その他お問い合わせはドキュメント最下部にあるLinks、「お問合せフォーム」もしくはX (元Twitter) にて気軽にご連絡ください!" + }, + "update_available": "新しいバージョンが出ました!", + "state_text_enabled": "有効", + "state_text_disabled": "無効", + "cover_message": "設定画面が閉じられるまで、一時的に機能を停止しています。", + "confirmation_message": { + "update_software": "新しいバージョンをダウンロードしてアプリを再起動します。\n少し時間がかかります。今すぐ行いますか?", + "deny_update_software": "後でする", + "accept_update_software": "アップデートして再起動", + "updating": "アップデート中...", + "detected_over_ui_size": "現在のUI サイズ: %{current_ui_size}\nVRCTのウィンドウサイズが、お使いのディスプレイサイズより大きい可能性があります。\n※ディスプレイサイズによっては、何度か再設定が必要な場合があります。", + "deny_adjust_ui_size": "このサイズのままで良い", + "accept_adjust_ui_size": "小さく設定して再起動" + } + }, + "selectable_language_window": { + "title_your_language": "あなたの言語", + "title_target_language": "相手の言語", + "go_back_button": "戻る" + }, + "overlay_settings": { + "restore_default_settings": "初期値に戻す", + "opacity": "透明度", + "ui_scaling": "サイズ", + "x_position": "X軸(左右)", + "y_position": "Y軸(上下)", + "z_position": "Z軸(前後)", + "x_rotation": "X軸の回転", + "y_rotation": "Y軸の回転", + "z_rotation": "Z軸の回転", + "display_duration": "表示時間", + "fadeout_duration": "フェードアウト時間" + }, + "config_window": { + "config_title": "設定", + "compact_mode": "コンパクトモード", + "version": "バージョン %{version}", + "restart_message": "再起動して変更を適用する。", + "common_error_message": { + "invalid_value": "無効な値です。" + }, + "side_menu_labels": { + "appearance": "デザイン", + "translation": "翻訳", + "transcription": "音声認識", + "transcription_mic": "マイク", + "transcription_speaker": "スピーカー", + "transcription_internal_model": "音声認識モデル", + "others": "その他", + "others_send_message_formats": "メッセージフォーマット (送信)", + "others_received_message_formats": "メッセージフォーマット (XSOverlay & Speaker2Chatbox)", + "advanced_settings": "高度な設定" + }, + "transparency": { + "label": "透明度", + "desc": "メイン画面の透明度を変更できます。" + }, + "appearance_theme": { + "label": "外観テーマ", + "desc": "カラーテーマを変更できます。" + }, + "ui_size": { + "label": "UIサイズ" + }, + "textbox_ui_size": { + "label": "テキストボックス フォントサイズ", + "desc": "ログに表示されるフォントのサイズを、UIサイズを基準にして倍率を変えられます。" + }, + "message_box_ratio": { + "label": "メッセージ入力欄のサイズ", + "desc": "メッセージ入力欄のサイズを変更できます。テキストボックスとの比率となっています。\n※厳密な計算はしていません。" + }, + "font_family": { + "label": "使用フォント" + }, + "ui_language": { + "label": "UIの言語 / UI Language" + }, + "to_restore_main_window_geometry": { + "label": "メイン画面の位置を記憶する", + "desc": "起動時、前回の画面の位置とサイズを復元します。" + }, + "use_translation_feature": { + "label": "翻訳機能を使用する", + "desc": "オフにしている間は、翻訳機能を使わない代わり、VRCTの起動が少し速くなります。\n翻訳機能を必要とせず、VRCTをチャット送信と文字起こしツールとしてのみ使用するユーザー用です。" + }, + "ctranslate2_weight_type": { + "label": "オフライン翻訳のタイプ", + "desc": "翻訳エンジン(オフライン翻訳)で翻訳する際に、使用する翻訳モデルを選択できます。", + "small": "通常モデル (%{capacity})", + "large": "高精度モデル (%{capacity})" + }, + "deepl_auth_key": { + "label": "DeepL 認証キー", + "desc": "使用の際は、メイン画面にある %{translator} をDeepL_APIに変更してください。\n※対応していない言語もあります。", + "open_auth_key_webpage": "DeepLアカウントページを開く", + "auth_key_success": "認証キーの更新が完了しました。", + "auth_key_error": "認証キーが間違っているか、API使用制限が上限に達しています。" + }, + "mic_host": { + "label": "マイク(ホスト/ドライバー)" + }, + "mic_device": { + "label": "マイク (デバイス)" + }, + "mic_dynamic_energy_threshold": { + "label_for_automatic": "マイク入力感度の調整 (現在の設定: 自動)", + "desc_for_automatic": "マイクの入力感度を自動的に調節する。", + "label_for_manual": "マイク入力感度の調整 (現在の設定: 手動)", + "desc_for_manual": "スライダーを調整して入力感度を手動で決められます。マイクのアイコンを押すと、実際に声を入力し、音量を確認しながら調節できます。", + "error_message": "0 から %{max} までの数値で設定できます。" + }, + "mic_record_timeout": { + "label": "入力が終了したとみなす無音時間", + "desc": "無音を検出し、設定された秒数経過すると、音声入力が終了したとみなします。", + "error_message": "0 以上で 「%{mic_phrase_timeout_label}」より大きくすることはできません。" + }, + "mic_phrase_timeout": { + "label": "一度に文字起こしする時間の長さ", + "desc": "設定された秒数ごとに文字起こし処理が行われます。", + "error_message": "0 以上で 「%{mic_record_timeout_label}」より小さくすることはできません。" + }, + "mic_max_phrase": { + "label": "送信するまでに保持する単語数", + "desc": "文字起こしされた単語数の下限値で、この数値を超えた場合のみ結果をVRChatへ送信し、ログに表示します。", + "error_message": "0以上の数値を設定できます。" + }, + "mic_word_filter": { + "label": "ワードフィルター", + "desc": "登録された単語を検出すると、その文章は送信されません。\n「,」カンマで区切ると、まとめて複数の単語を追加できます。\n※重複した単語は登録されません。", + "add_button_label": "追加", + "count_desc": "現在登録されている単語数: %{count}" + }, + "speaker_device": { + "label": "スピーカー (デバイス)" + }, + "speaker_dynamic_energy_threshold": { + "label_for_automatic": "スピーカー入力感度の調整 (現在の設定: 自動)", + "desc_for_automatic": "スピーカーの入力感度を自動的に調節する。", + "label_for_manual": "スピーカー入力感度の調整 (現在の設定: 手動)", + "desc_for_manual": "スライダーを調整して入力感度を手動で決められます。ヘッドフォンのアイコンを押すと、実際に音声を聞き取り、音量を確認しながら調節できます。", + "error_message": "0 から %{max} までの数値で設定できます。", + "no_device_error_message": "スピーカーデバイスが検出されませんでした。" + }, + "speaker_record_timeout": { + "label": "入力が終了したとみなす無音時間", + "desc": "無音を検出し、設定された秒数経過すると、音声入力が終了したとみなします。", + "error_message": "0 以上で 「%{speaker_phrase_timeout_label}」より大きくすることはできません。" + }, + "speaker_phrase_timeout": { + "label": "一度に文字起こしする時間の長さ", + "desc": "設定された秒数ごとに文字起こし処理が行われます。", + "error_message": "0 以上で 「%{speaker_record_timeout_label}」より小さくすることはできません。" + }, + "speaker_max_phrase": { + "label": "ログとして表示するまでに保持する単語数", + "desc": "文字起こしされた単語数の下限値で、この数値を超えた場合のみ結果をログに表示します。", + "error_message": "0以上の数値を設定できます。" + }, + "use_whisper_feature": { + "label": "音声認識にWhisperモデルを使用する", + "desc": "一部の言語では、音声認識の精度が向上するかもしれません。音声認識使用中、CPUの使用率が上がるので、お使いのPCスペックと相談してこの機能を使用してください。" + }, + "whisper_weight_type": { + "label": "Whisperモデルのタイプ", + "desc": "基本的に、容量が多いモデルほど精度は高いですが、文字起こしまでの時間が伸び、CPU使用率も増加します。各モデルの説明はドキュメントをご覧ください。\n※特にmediumより容量の大きいモデルは、CPUの性能によっては使用すらも困難です。", + "model_template": "%{model_name} モデル (%{capacity})", + "recommended_model_template": "%{model_name} モデル (%{capacity}) (推奨)" + }, + "enable_overlay_small_log": { + "label": "Overlay機能を有効", + "open_overlay_settings": "Overlay詳細設定を開く" + }, + "auto_clear_the_message_box": { + "label": "送信後はチャットボックスを空にする" + }, + "send_only_translated_messages": { + "label": "翻訳後のメッセージのみ送信する" + }, + "send_message_button_type": { + "label": "メッセージ送信ボタン", + "hide": "非表示 (エンターキーを使って送信)", + "show": "表示", + "show_and_disable_enter_key": "表示し、エンターキーでの送信を無効" + }, + "notice_xsoverlay": { + "label": "XSOverlayでの通知受け取り機能を有効", + "desc": "文字起こし (受信) されたメッセージをXSOverlayの機能を使って通知として受け取れます。" + }, + "auto_export_message_logs": { + "label": "会話ログを自動的に保存する", + "desc": "テキストファイルとしてログがlogsフォルダ内に保存されます。" + }, + "vrc_mic_mute_sync": { + "label": "VRCマイクミュート同期", + "desc": "VRChatのマイクがミュートされている間は、メッセージをVRChatに送信しません。\n※若干の遅延はあります。また、Push-To-Talkは非対応です。" + }, + "send_message_to_vrc": { + "label": "VRChatにメッセージを送信する", + "desc": "サポート対象外ですが、VRChatにメッセージを送信せずに使う方法があります。送信したい場合、この機能を有効にする事を忘れないでください。" + }, + "send_message_format": { + "label": "送信するメッセージのフォーマット", + "desc": "VRChatで相手に実際に見えるフォーマットを変更できます。\n[message]がメッセージに置換されます。", + "example_text": "これは例文です。フォントや改行箇所など、実際の表示とは異なる場合があります。", + "error_message": "[message]という文字は使えません。" + }, + "send_message_format_with_t": { + "label": "送信するメッセージのフォーマット(翻訳付き)", + "desc": "VRChatで相手に実際に見えるフォーマットを変更できます。\n[message]がメッセージに置換され、[translation]が翻訳されたメッセージに置換されます。", + "example_text": "これは例文です。フォントや改行箇所など、実際の表示とは異なる場合があります。", + "error_message": "[message]と[translation]という文字は使えません。" + }, + "received_message_format": { + "label": "受信するメッセージのフォーマット", + "desc": "XSOverlay通知受け取り機能で使用されます。\n[message]がメッセージに置換されます。\n※Speaker2Chatboxでの送信機能にも使われます。", + "example_text": "これは例文です。フォントや改行箇所など、実際の表示とは異なる場合があります。", + "error_message": "[message]という文字は使えません。" + }, + "received_message_format_with_t": { + "label": "受信するメッセージのフォーマット(翻訳付き)", + "desc": "XSOverlay通知受け取り機能で使用されます。\n[message]がメッセージに置換され、[translation]が翻訳されたメッセージに置換されます。\n※Speaker2Chatboxでの送信機能にも使われます。", + "example_text": "これは例文です。フォントや改行箇所など、実際の表示とは異なる場合があります。", + "error_message": "[message]と[translation]という文字は使えません。" + }, + "osc_ip_address": { + "label": "OSC IP Address" + }, + "osc_port": { + "label": "OSC Port" + }, + "open_config_filepath": { + "label": "設定ファイルを開く" + } + } +} \ No newline at end of file diff --git a/locales/ja.yml b/locales/ja.yml deleted file mode 100644 index 93eb8757..00000000 --- a/locales/ja.yml +++ /dev/null @@ -1,292 +0,0 @@ -main_window: - translation: 翻訳 - transcription_send: 音声認識(マイク) - transcription_receive: 音声認識(スピーカー) - foreground: 最前面表示 - - language_settings: 言語設定 - your_language: あなたの言語 - translate_each_other_label: 双方向に翻訳 - swap_button_label: 言語を入れ替え - target_language: 相手の言語 - translator: 翻訳エンジン - translator_ctranslate2: オフライン翻訳 (Default) - - textbox_tab_all: 全て - textbox_tab_sent: 送信 - textbox_tab_received: 受信 - textbox_tab_system: システム - - textbox_system_message: - enabled_translation: 翻訳機能をONにしました。 - disabled_translation: 翻訳機能をOFFしました。 - enabled_voice2chatbox: マイクからの音声入力、文字起こしを開始します。 - disabled_voice2chatbox: マイクからの音声入力、文字起こしを終了しました。 - enabled_speaker2log: スピーカーからの音声聞き取り、文字起こしを開始します。 - disabled_speaker2log: スピーカーからの音声聞き取り、文字起こしを終了しました。 - enabled_foreground: 画面を常に最前面へ固定します。 - disabled_foreground: 最前面への固定を解除しました。 - - auth_key_success: 認証キーの更新が完了しました。 - auth_key_error: 認証キーが間違っているか、API使用制限が上限に達しています。 - - no_mic_device_detected_error: マイクデバイスが検出されませんでした。 - no_speaker_device_detected_error: スピーカーデバイスが検出されませんでした。 - translation_engine_limit_error: 翻訳エンジンを自動的に変更しました。対象翻訳エンジンへのリクエストが多すぎるため、一時的にアクセスが制限されています。同じ翻訳エンジンを使用したい場合はしばらく待ってから、VRCTの再起動をしてもう一度試してみてください。 - - detected_by_word_filter: ワードフィルターに登録されている単語 %{detected_message} が検出されたため送信しませんでした。 - - selected_your_language: 「あなたの言語」 を %{your_language} に設定しました。 - selected_target_language: 「相手の言語」 を %{target_language} に設定しました。 - switched_language_preset_tab: 言語プリセット番号 %{tab_no} に切り替わりました。 - latest_language_setting: 現在「あなたの言語」は %{your_language}、「相手の言語」は %{target_language} に設定されています。 - - opened_web_page_booth: お使いのブラウザで、Boothのページを開きました。 - opened_web_page_vrct_documents: "お使いのブラウザで、VRCTのドキュメントを開きました。使用方法などはそちらに記載されています。\n不具合、ご要望、その他お問い合わせはドキュメント最下部にあるLinks、「お問合せフォーム」もしくはX (元Twitter) にて気軽にご連絡ください!" - - update_available: 新しいバージョンが出ました! - state_text_enabled: 有効 - state_text_disabled: 無効 - - cover_message: 設定画面が閉じられるまで、一時的に機能を停止しています。 - - confirmation_message: - update_software: "新しいバージョンをダウンロードしてアプリを再起動します。\n少し時間がかかります。今すぐ行いますか?" - deny_update_software: 後でする - accept_update_software: アップデートして再起動 - updating: アップデート中... - - detected_over_ui_size: "現在のUI サイズ: %{current_ui_size}\nVRCTのウィンドウサイズが、お使いのディスプレイサイズより大きい可能性があります。\n※ディスプレイサイズによっては、何度か再設定が必要な場合があります。" - deny_adjust_ui_size: このサイズのままで良い - accept_adjust_ui_size: 小さく設定して再起動 - - -selectable_language_window: - title_your_language: あなたの言語 - title_target_language: 相手の言語 - go_back_button: 戻る - - -overlay_settings: - restore_default_settings: 初期値に戻す - opacity: 透明度 - ui_scaling: サイズ - x_position: X軸(左右) - y_position: Y軸(上下) - z_position: Z軸(前後) - x_rotation: X軸の回転 - y_rotation: Y軸の回転 - z_rotation: Z軸の回転 - display_duration: 表示時間 - fadeout_duration: フェードアウト時間 - - -config_window: - config_title: 設定 - compact_mode: コンパクトモード - version: バージョン %{version} - restart_message: 再起動して変更を適用する。 - common_error_message: - invalid_value: 無効な値です。 - - side_menu_labels: - appearance: デザイン - translation: 翻訳 - transcription: 音声認識 - transcription_mic: マイク - transcription_speaker: スピーカー - transcription_internal_model: 音声認識モデル - others: その他 - others_send_message_formats: メッセージフォーマット (送信) - others_received_message_formats: メッセージフォーマット (XSOverlay & Speaker2Chatbox) - advanced_settings: 高度な設定 - - - transparency: - label: 透明度 - desc: メイン画面の透明度を変更できます。 - - appearance_theme: - label: 外観テーマ - desc: カラーテーマを変更できます。 - - ui_size: - label: UIサイズ - - textbox_ui_size: - label: テキストボックス フォントサイズ - desc: ログに表示されるフォントのサイズを、UIサイズを基準にして倍率を変えられます。 - - message_box_ratio: - label: メッセージ入力欄のサイズ - desc: "メッセージ入力欄のサイズを変更できます。テキストボックスとの比率となっています。\n※厳密な計算はしていません。" - - font_family: - label: 使用フォント - - ui_language: - label: UIの言語 / UI Language - - to_restore_main_window_geometry: - label: メイン画面の位置を記憶する - desc: 起動時、前回の画面の位置とサイズを復元します。 - - use_translation_feature: - label: 翻訳機能を使用する - desc: "オフにしている間は、翻訳機能を使わない代わり、VRCTの起動が少し速くなります。\n翻訳機能を必要とせず、VRCTをチャット送信と文字起こしツールとしてのみ使用するユーザー用です。" - - ctranslate2_weight_type: - label: オフライン翻訳のタイプ - desc: 翻訳エンジン(オフライン翻訳)で翻訳する際に、使用する翻訳モデルを選択できます。 - small: "通常モデル (%{capacity})" - large: "高精度モデル (%{capacity})" - - deepl_auth_key: - label: DeepL 認証キー - desc: "使用の際は、メイン画面にある %{translator} をDeepL_APIに変更してください。\n※対応していない言語もあります。" - open_auth_key_webpage: DeepLアカウントページを開く - auth_key_success: 認証キーの更新が完了しました。 - auth_key_error: 認証キーが間違っているか、API使用制限が上限に達しています。 - - mic_host: - label: マイク(ホスト/ドライバー) - - mic_device: - label: マイク (デバイス) - - mic_dynamic_energy_threshold: - label_for_automatic: "マイク入力感度の調整 (現在の設定: 自動)" - desc_for_automatic: マイクの入力感度を自動的に調節する。 - label_for_manual: "マイク入力感度の調整 (現在の設定: 手動)" - desc_for_manual: スライダーを調整して入力感度を手動で決められます。マイクのアイコンを押すと、実際に声を入力し、音量を確認しながら調節できます。 - error_message: 0 から %{max} までの数値で設定できます。 - - mic_record_timeout: - label: 入力が終了したとみなす無音時間 - desc: 無音を検出し、設定された秒数経過すると、音声入力が終了したとみなします。 - error_message: 0 以上で 「%{mic_phrase_timeout_label}」より大きくすることはできません。 - - mic_phrase_timeout: - label: 一度に文字起こしする時間の長さ - desc: 設定された秒数ごとに文字起こし処理が行われます。 - error_message: 0 以上で 「%{mic_record_timeout_label}」より小さくすることはできません。 - - mic_max_phrase: - label: 送信するまでに保持する単語数 - desc: 文字起こしされた単語数の下限値で、この数値を超えた場合のみ結果をVRChatへ送信し、ログに表示します。 - error_message: 0以上の数値を設定できます。 - - mic_word_filter: - label: ワードフィルター - desc: "登録された単語を検出すると、その文章は送信されません。\n「,」カンマで区切ると、まとめて複数の単語を追加できます。\n※重複した単語は登録されません。" - add_button_label: 追加 - count_desc: "現在登録されている単語数: %{count}" - - - speaker_device: - label: スピーカー (デバイス) - - speaker_dynamic_energy_threshold: - label_for_automatic: "スピーカー入力感度の調整 (現在の設定: 自動)" - desc_for_automatic: スピーカーの入力感度を自動的に調節する。 - label_for_manual: "スピーカー入力感度の調整 (現在の設定: 手動)" - desc_for_manual: スライダーを調整して入力感度を手動で決められます。ヘッドフォンのアイコンを押すと、実際に音声を聞き取り、音量を確認しながら調節できます。 - error_message: 0 から %{max} までの数値で設定できます。 - no_device_error_message: スピーカーデバイスが検出されませんでした。 - - speaker_record_timeout: - label: 入力が終了したとみなす無音時間 - desc: 無音を検出し、設定された秒数経過すると、音声入力が終了したとみなします。 - error_message: 0 以上で 「%{speaker_phrase_timeout_label}」より大きくすることはできません。 - - speaker_phrase_timeout: - label: 一度に文字起こしする時間の長さ - desc: 設定された秒数ごとに文字起こし処理が行われます。 - error_message: 0 以上で 「%{speaker_record_timeout_label}」より小さくすることはできません。 - - speaker_max_phrase: - label: ログとして表示するまでに保持する単語数 - desc: 文字起こしされた単語数の下限値で、この数値を超えた場合のみ結果をログに表示します。 - error_message: 0以上の数値を設定できます。 - - use_whisper_feature: - label: 音声認識にWhisperモデルを使用する - desc: 一部の言語では、音声認識の精度が向上するかもしれません。音声認識使用中、CPUの使用率が上がるので、お使いのPCスペックと相談してこの機能を使用してください。 - - whisper_weight_type: - label: Whisperモデルのタイプ - desc: "基本的に、容量が多いモデルほど精度は高いですが、文字起こしまでの時間が伸び、CPU使用率も増加します。各モデルの説明はドキュメントをご覧ください。\n※特にmediumより容量の大きいモデルは、CPUの性能によっては使用すらも困難です。" - model_template: "%{model_name} モデル (%{capacity})" - recommended_model_template: "%{model_name} モデル (%{capacity}) (推奨)" - - - enable_overlay_small_log: - label: Overlay機能を有効 - # desc: - open_overlay_settings: Overlay詳細設定を開く - - - - auto_clear_the_message_box: - label: 送信後はチャットボックスを空にする - - send_only_translated_messages: - label: 翻訳後のメッセージのみ送信する - - send_message_button_type: - label: メッセージ送信ボタン - hide: 非表示 (エンターキーを使って送信) - show: 表示 - show_and_disable_enter_key: 表示し、エンターキーでの送信を無効 - - notice_xsoverlay: - label: XSOverlayでの通知受け取り機能を有効 - desc: 文字起こし (受信) されたメッセージをXSOverlayの機能を使って通知として受け取れます。 - - auto_export_message_logs: - label: 会話ログを自動的に保存する - desc: テキストファイルとしてログがlogsフォルダ内に保存されます。 - - vrc_mic_mute_sync: - label: VRCマイクミュート同期 - desc: "VRChatのマイクがミュートされている間は、メッセージをVRChatに送信しません。\n※若干の遅延はあります。また、Push-To-Talkは非対応です。" - - - send_message_to_vrc: - label: VRChatにメッセージを送信する - desc: "サポート対象外ですが、VRChatにメッセージを送信せずに使う方法があります。送信したい場合、この機能を有効にする事を忘れないでください。" - - - send_message_format: - label: 送信するメッセージのフォーマット - desc: "VRChatで相手に実際に見えるフォーマットを変更できます。\n[message]がメッセージに置換されます。" - example_text: これは例文です。フォントや改行箇所など、実際の表示とは異なる場合があります。 - error_message: "[message]という文字は使えません。" - - send_message_format_with_t: - label: 送信するメッセージのフォーマット(翻訳付き) - desc: "VRChatで相手に実際に見えるフォーマットを変更できます。\n[message]がメッセージに置換され、[translation]が翻訳されたメッセージに置換されます。" - example_text: これは例文です。フォントや改行箇所など、実際の表示とは異なる場合があります。 - error_message: "[message]と[translation]という文字は使えません。" - - received_message_format: - label: 受信するメッセージのフォーマット - desc: "XSOverlay通知受け取り機能で使用されます。\n[message]がメッセージに置換されます。\n※Speaker2Chatboxでの送信機能にも使われます。" - example_text: これは例文です。フォントや改行箇所など、実際の表示とは異なる場合があります。 - error_message: "[message]という文字は使えません。" - - received_message_format_with_t: - label: 受信するメッセージのフォーマット(翻訳付き) - desc: "XSOverlay通知受け取り機能で使用されます。\n[message]がメッセージに置換され、[translation]が翻訳されたメッセージに置換されます。\n※Speaker2Chatboxでの送信機能にも使われます。" - example_text: これは例文です。フォントや改行箇所など、実際の表示とは異なる場合があります。 - error_message: "[message]と[translation]という文字は使えません。" - - - osc_ip_address: - label: OSC IP Address - - osc_port: - label: OSC Port - - open_config_filepath: - label: 設定ファイルを開く \ No newline at end of file diff --git a/locales/ko.json b/locales/ko.json new file mode 100644 index 00000000..3329c8d1 --- /dev/null +++ b/locales/ko.json @@ -0,0 +1,252 @@ +{ + "main_window": { + "translation": "번역", + "transcription_send": "음성인식 (마이크)", + "transcription_receive": "음성인식 (스피커)", + "foreground": "항상 위로", + "language_settings": "언어 설정", + "your_language": "당신의 언어", + "translate_each_other_label": "양방향으로 번역", + "swap_button_label": "언어 교체", + "target_language": "상대방의 언어", + "translator": "번역 엔진", + "translator_ctranslate2": "오프라인 번역 (기본값)", + "textbox_tab_all": "전체", + "textbox_tab_sent": "전송", + "textbox_tab_received": "수신", + "textbox_tab_system": "시스템", + "textbox_system_message": { + "enabled_translation": "번역 기능을 시작합니다.", + "disabled_translation": "번역 기능이 중지되었습니다.", + "enabled_voice2chatbox": "마이크에서의 음성인식을 시작합니다.", + "disabled_voice2chatbox": "마이크에서의 음성인식이 중지되었습니다.", + "enabled_speaker2log": "스피커에서의 음성인식을 시작합니다.", + "disabled_speaker2log": "스피커에서의 음성인식이 중지되었습니다.", + "enabled_foreground": "화면을 항상 위로 고정합니다.", + "disabled_foreground": "화면 고정이 해제되었습니다.", + "auth_key_success": "인증키 갱신이 완료되었습니다.", + "auth_key_error": "인증 키가 잘못되었거나 API 사용 제한이 상한선에 도달했습니다.", + "no_mic_device_detected_error": "마이크 디바이스를 찾지 못했습니다.", + "no_speaker_device_detected_error": "스피커 디바이스를 찾지 못했습니다.", + "translation_engine_limit_error": "번역 엔진을 자동으로 변경했습니다. 대상 번역 엔진에 대한 요청이 너무 많아 일시적으로 접근이 제한되었습니다. 해당 번역 엔진을 사용하려면 잠시 기다린 후 VRCT를 재시작하여 다시 시도해 보시기 바랍니다", + "detected_by_word_filter": "단어 필터에 등록된 단어 %{detected_message}(이)가 감지되어 전송하지 않았습니다.", + "selected_your_language": "'당신의 언어'가 %{your_language}(으)로 설정되었습니다.", + "selected_target_language": "'상대방의 언어'가 %{target_language}(으)로 설정되었습니다.", + "switched_language_preset_tab": "언어 프리셋 번호 %{tab_no}로 전환되었습니다.", + "latest_language_setting": "현재 '당신의 언어'는 %{your_language}, '상대방의 언어'는 %{target_language}(으)로 설정되어 있습니다.", + "opened_web_page_booth": "브라우저에서 Booth 페이지를 열었습니다.", + "opened_web_page_vrct_documents": "웹 브라우저에서 VRCT 문서 페이지가 열렸습니다.\n문제, 요청 또는 문의 사항이 있는 경우 문서 페이지 하단의 링크, '문의 양식' 또는 X(구 트위터)를 통해 언제든지 문의해 주세요!" + }, + "update_available": "새로운 버전이 나왔습니다!", + "cover_message": "설정 화면이 닫힐 때까지 일시적으로 기능을 정지하고 있습니다.", + "confirmation_message": { + "update_software": "새 버전을 다운로드하고 재시작합니다. \n 조금 시간이 걸립니다. 지금 시작할까요?", + "deny_update_software": "나중에 하기", + "accept_update_software": "업데이트 및 재시작", + "updating": "업데이트 중...", + "detected_over_ui_size": "현재 UI 크기: %{current_ui_size}\nVRCT의 창 크기가 사용자의 디스플레이 크기보다 클 수 있습니다. \n* 디스플레이 크기에 따라 여러 번 재설정해야 할 수도 있습니다.", + "deny_adjust_ui_size": "지금 상태를 유지", + "accept_adjust_ui_size": "작게 줄이고 재시작" + } + }, + "selectable_language_window": { + "title_your_language": "당신의 언어", + "title_target_language": "상대방의 언어", + "go_back_button": "돌아가기" + }, + "config_window": { + "config_title": "설정", + "compact_mode": "컴팩트 모드", + "version": "버전 %{version}", + "restart_message": "재시작하여 변경 사항을 적용합니다.", + "common_error_message": { + "invalid_value": "유효하지 않은 값입니다." + }, + "side_menu_labels": { + "appearance": "모양", + "translation": "번역", + "transcription": "음성인식", + "transcription_mic": "마이크", + "transcription_speaker": "스피커", + "transcription_internal_model": "내부 엔진", + "others": "기타", + "others_send_message_formats": "메시지 형식 (전송)", + "others_received_message_formats": "메시지 형식 (수신)", + "others_speaker2chatbox": "스피커->챗박스", + "advanced_settings": "고급 설정" + }, + "transparency": { + "label": "투명도", + "desc": "메인 화면의 투명도를 변경합니다." + }, + "appearance_theme": { + "label": "테마", + "desc": "색상 테마를 변경합니다." + }, + "ui_size": { + "label": "UI 크기" + }, + "textbox_ui_size": { + "label": "텍스트 박스 글자 크기", + "desc": "로그에 표시되는 글자 크기의 배율을 UI 크기에 따라 변경합니다." + }, + "message_box_ratio": { + "label": "메시지 입력란 크기", + "desc": "메시지 입력란의 크기를 변경합니다. 텍스트 박스와의 비율로 설정되어 있습니다. \n* 정확한 계산은 하지 않았습니다." + }, + "font_family": { + "label": "폰트" + }, + "ui_language": { + "label": "UI 언어 / UI Language" + }, + "to_restore_main_window_geometry": { + "label": "메인 화면 위치 기억", + "desc": "시작 시 이전 화면의 위치와 크기를 복원합니다." + }, + "use_translation_feature": { + "label": "번역 기능 사용", + "desc": "번역 기능이 꺼져 있는 동안에는 번역을 하지 않는 대신 VRCT가 조금 더 빠르게 실행됩니다. \n 번역 기능이 필요하지 않고 VRCT를 채팅 전송 및 음성 인식 도구로만 사용하는 사용자를 위한 기능입니다." + }, + "ctranslate2_weight_type": { + "label": "번역 모델", + "desc": "오프라인 번역 시의 번역 모델을 변경합니다.", + "small": "일반 모델 (%{capacity})", + "large": "정밀 모델 (%{capacity})" + }, + "deepl_auth_key": { + "label": "DeepL 인증키", + "desc": "사용시 메인화면에 있는 %{translator}를 DeepL_API로 변경해 주세요.\n지원하지 않는 언어도 있습니다.", + "open_auth_key_webpage": "DeepL 계정 페이지 열기", + "auth_key_success": "인증키 갱신이 완료되었습니다.", + "auth_key_error": "인증키가 잘못되었거나 API 사용 제한이 상한에 도달했습니다." + }, + "mic_host": { + "label": "마이크 호스트/드라이버" + }, + "mic_device": { + "label": "마이크 장치" + }, + "mic_dynamic_energy_threshold": { + "label_for_automatic": "음성 입력 최소 볼륨 (현재 설정: 자동)", + "desc_for_automatic": "마이크의 입력 감도를 자동으로 조절합니다.", + "label_for_manual": "음성 입력 최소 볼륨 (현재 설정: 수동)", + "desc_for_manual": "슬라이더를 움직여 입력 감도를 수동으로 조절합니다. 마이크 아이콘을 누르면 실제 음성의 볼륨을 확인하며 감도를 조절할 수 있습니다.", + "error_message": "0에서 %{max}까지의 숫자로만 설정할 수 있습니다." + }, + "mic_record_timeout": { + "label": "최대 무음 시간", + "desc": "무음을 감지하고 설정된 시간(초)만큼의 시간이 지나면 음성 입력이 종료된 것으로 판단합니다.", + "error_message": "0 이상에서 '%{mic_phrase_timeout_label}'보다 클 수 없습니다." + }, + "mic_phrase_timeout": { + "label": "최대 인식 시간", + "desc": "설정된 초 단위로 음성인식 처리가 이루어집니다.", + "error_message": "0 이상에서 '%{mic_record_timeout_label}'보다 작을 수 없습니다." + }, + "mic_max_phrase": { + "label": "최대 입력 절(phrases) 수", + "desc": "인식된 단어 수의 하한값으로, 이 수치를 초과하는 경우에만 결과를 VRChat으로 전송하고 로그에 표시합니다.", + "error_message": "0 이상의 숫자만 설정할 수 있습니다." + }, + "mic_word_filter": { + "label": "단어 필터", + "desc": "등록된 단어가 감지되면 해당 문장은 전송되지 않습니다. \n ',' 쉼표로 구분하면 여러 단어를 추가할 수 있습니다. \n* 중복된 단어는 등록되지 않습니다.", + "add_button_label": "추가", + "count_desc": "현재 등록되어 있는 단어 수: %{count}" + }, + "speaker_device": { + "label": "스피커 장치" + }, + "speaker_dynamic_energy_threshold": { + "label_for_automatic": "음성 입력 최소 볼륨 (현재 설정: 자동)", + "desc_for_automatic": "스피커의 입력 감도를 자동으로 조절합니다.", + "label_for_manual": "음성 입력 최소 볼륨 (현재 설정: 수동)", + "desc_for_manual": "슬라이더를 움직여 입력 감도를 수동으로 조절합니다. 헤드폰 아이콘을 누르면 실제 음성의 볼륨을 확인하며 감도를 조절할 수 있습니다.", + "error_message": "0에서 %{max}까지의 숫자로만 설정할 수 있습니다.", + "no_device_error_message": "스피커 디바이스를 찾지 못했습니다." + }, + "speaker_record_timeout": { + "label": "최대 무음 시간", + "desc": "무음을 감지하고 설정된 시간(초)만큼의 시간이 지나면 음성 입력이 종료된 것으로 판단합니다.", + "error_message": "0 이상에서 '%{speaker_phrase_timeout_label}'보다 클 수 없습니다." + }, + "speaker_phrase_timeout": { + "label": "최대 인식 시간", + "desc": "설정된 초 단위로 음성인식 처리가 이루어집니다.", + "error_message": "0 이상에서 '%{speaker_record_timeout_label}'보다 작을 수 없습니다." + }, + "speaker_max_phrase": { + "label": "최대 입력 절(phrases) 수", + "desc": "식된 단어 수의 하한값으로, 이 수치를 초과하는 경우에만 결과를 로그에 표시합니다.", + "error_message": "0 이상의 숫자만 설정할 수 있습니다." + }, + "use_whisper_feature": { + "label": "음성 인식에 Whisper 모델을 사용", + "desc": "일부 언어에서는 음성 인식의 정확도가 향상될 수 있어요. 음성 인식 중 CPU 사용률이 올라가기 때문에 사용하시는 PC의 사양을 고려하여 이 기능을 사용해주세요." + }, + "whisper_weight_type": { + "label": "Whisper 모델 타입", + "desc": "기본적으로 용량이 많은 모델일수록 정밀도는 높지만, 음성 인식의 시간이 늘어나며 CPU 사용률도 늘어나요.각 모델의 설명은 문서를 참조해주세요.\n※특히 medium보다 용량이 큰 모델은 CPU의 성능에 따라서는 사용조차 어려울 수 있어요. ", + "model_template": "%{model_name} 모델 (%{capacity})", + "recommended_model_template": "%{model_name} 모델 (%{capacity}) (권장)" + }, + "auto_clear_the_message_box": { + "label": "챗박스 자동 삭제" + }, + "send_only_translated_messages": { + "label": "번역된 메시지만 전송" + }, + "send_message_button_type": { + "label": "메시지 전송 버튼", + "hide": "숨김 (Enter 키를 사용하여 전송)", + "show": "표시", + "show_and_disable_enter_key": "표시 (Enter 키 전송 비활성화)" + }, + "notice_xsoverlay": { + "label": "XSOverlay에서 알림 수신 기능 활성화", + "desc": "수신된 메시지를 XSOverlay의 기능을 통해 알림으로 받아볼 수 있습니다." + }, + "auto_export_message_logs": { + "label": "대화 로그 자동 저장", + "desc": "logs 폴더에 텍스트 파일로 로그가 저장됩니다." + }, + "send_message_to_vrc": { + "label": "VRChat에 메시지 전송", + "desc": "VRChat에 메시지를 보내지 않고 사용할 수 있는 방법이 있지만 지원되지 않습니다. VRChat에 메시지를 보내려면 이 기능을 활성화하세요." + }, + "send_message_format": { + "label": "메시지 형식", + "desc": "메시지가 실제로 보이는 형식을 변경합니다. \n[message]가 메시지로 대체됩니다.", + "example_text": "이것은 예문입니다. 폰트, 줄바꿈 등 실제 표시와 다를 수 있습니다.", + "error_message": "[message]라는 문자는 사용할 수 없습니다." + }, + "send_message_format_with_t": { + "label": "메시지 형식 (번역 포함)", + "desc": "메시지가 실제로 보이는 형식을 변경합니다. \n[message]는 메시지로, [translation]은 번역된 메시지로 대체됩니다.\nXSOverlay의 알림에서도 사용됩니다.", + "example_text": "예문입니다. 글꼴, 줄 바꿈 등이 실제 표시와 다를 수 있습니다.", + "error_message": "[message]와 [translation]이라는 문자는 사용할 수 없습니다." + }, + "received_message_format": { + "label": "메시지 형식", + "desc": "메시지가 실제로 보이는 형식을 변경합니다. \n[message]가 메시지로 대체됩니다.", + "example_text": "이것은 예문입니다. 폰트, 줄바꿈 등 실제 표시와 다를 수 있습니다.", + "error_message": "[message]라는 문자는 사용할 수 없습니다." + }, + "received_message_format_with_t": { + "label": "메시지 형식 (번역 포함)", + "desc": "메시지가 실제로 보이는 형식을 변경합니다. \n[message]는 메시지로, [translation]은 번역된 메시지로 대체됩니다.\nXSOverlay의 알림에서도 사용됩니다.", + "example_text": "이것은 예문입니다. 폰트, 줄바꿈 등 실제 표시와 다를 수 있습니다.", + "error_message": "[message]와 [translation]이라는 문자는 사용할 수 없습니다." + }, + "osc_ip_address": { + "label": "OSC IP 주소" + }, + "osc_port": { + "label": "OSC 포트" + }, + "open_config_filepath": { + "label": "설정 파일 열기" + } + } +} \ No newline at end of file diff --git a/locales/ko.yml b/locales/ko.yml deleted file mode 100644 index ed8f8ddf..00000000 --- a/locales/ko.yml +++ /dev/null @@ -1,264 +0,0 @@ -main_window: - translation: 번역 - transcription_send: 음성인식 (마이크) - transcription_receive: 음성인식 (스피커) - foreground: 항상 위로 - - language_settings: 언어 설정 - your_language: 당신의 언어 - translate_each_other_label: 양방향으로 번역 - swap_button_label: 언어 교체 - target_language: 상대방의 언어 - translator: 번역 엔진 - translator_ctranslate2: 오프라인 번역 (기본값) - - textbox_tab_all: 전체 - textbox_tab_sent: 전송 - textbox_tab_received: 수신 - textbox_tab_system: 시스템 - - textbox_system_message: - enabled_translation: 번역 기능을 시작합니다. - disabled_translation: 번역 기능이 중지되었습니다. - enabled_voice2chatbox: 마이크에서의 음성인식을 시작합니다. - disabled_voice2chatbox: 마이크에서의 음성인식이 중지되었습니다. - enabled_speaker2log: 스피커에서의 음성인식을 시작합니다. - disabled_speaker2log: 스피커에서의 음성인식이 중지되었습니다. - enabled_foreground: 화면을 항상 위로 고정합니다. - disabled_foreground: 화면 고정이 해제되었습니다. - - auth_key_success: 인증키 갱신이 완료되었습니다. - auth_key_error: 인증 키가 잘못되었거나 API 사용 제한이 상한선에 도달했습니다. - - no_mic_device_detected_error: 마이크 디바이스를 찾지 못했습니다. - no_speaker_device_detected_error: 스피커 디바이스를 찾지 못했습니다. - translation_engine_limit_error: 번역 엔진을 자동으로 변경했습니다. 대상 번역 엔진에 대한 요청이 너무 많아 일시적으로 접근이 제한되었습니다. 해당 번역 엔진을 사용하려면 잠시 기다린 후 VRCT를 재시작하여 다시 시도해 보시기 바랍니다 - - detected_by_word_filter: 단어 필터에 등록된 단어 %{detected_message}(이)가 감지되어 전송하지 않았습니다. - - selected_your_language: "'당신의 언어'가 %{your_language}(으)로 설정되었습니다." - selected_target_language: "'상대방의 언어'가 %{target_language}(으)로 설정되었습니다." - switched_language_preset_tab: 언어 프리셋 번호 %{tab_no}로 전환되었습니다. - latest_language_setting: "현재 '당신의 언어'는 %{your_language}, '상대방의 언어'는 %{target_language}(으)로 설정되어 있습니다." - - opened_web_page_booth: 브라우저에서 Booth 페이지를 열었습니다. - opened_web_page_vrct_documents: "웹 브라우저에서 VRCT 문서 페이지가 열렸습니다.\n문제, 요청 또는 문의 사항이 있는 경우 문서 페이지 하단의 링크, '문의 양식' 또는 X(구 트위터)를 통해 언제든지 문의해 주세요!" - - update_available: 새로운 버전이 나왔습니다! - - cover_message: 설정 화면이 닫힐 때까지 일시적으로 기능을 정지하고 있습니다. - - confirmation_message: - update_software: "새 버전을 다운로드하고 재시작합니다. \n 조금 시간이 걸립니다. 지금 시작할까요?" - deny_update_software: 나중에 하기 - accept_update_software: 업데이트 및 재시작 - updating: 업데이트 중... - - detected_over_ui_size: "현재 UI 크기: %{current_ui_size}\nVRCT의 창 크기가 사용자의 디스플레이 크기보다 클 수 있습니다. \n* 디스플레이 크기에 따라 여러 번 재설정해야 할 수도 있습니다." - deny_adjust_ui_size: "지금 상태를 유지" - accept_adjust_ui_size: "작게 줄이고 재시작" - - -selectable_language_window: - title_your_language: 당신의 언어 - title_target_language: 상대방의 언어 - go_back_button: 돌아가기 - - -config_window: - config_title: 설정 - compact_mode: 컴팩트 모드 - version: 버전 %{version} - restart_message: 재시작하여 변경 사항을 적용합니다. - common_error_message: - invalid_value: 유효하지 않은 값입니다. - - side_menu_labels: - appearance: 모양 - translation: 번역 - transcription: 음성인식 - transcription_mic: 마이크 - transcription_speaker: 스피커 - transcription_internal_model: 내부 엔진 - others: 기타 - others_send_message_formats: 메시지 형식 (전송) - others_received_message_formats: 메시지 형식 (수신) - others_speaker2chatbox: 스피커->챗박스 - advanced_settings: 고급 설정 - - - transparency: - label: 투명도 - desc: 메인 화면의 투명도를 변경합니다. - - appearance_theme: - label: 테마 - desc: 색상 테마를 변경합니다. - - ui_size: - label: UI 크기 - - textbox_ui_size: - label: 텍스트 박스 글자 크기 - desc: 로그에 표시되는 글자 크기의 배율을 UI 크기에 따라 변경합니다. - - message_box_ratio: - label: 메시지 입력란 크기 - desc: "메시지 입력란의 크기를 변경합니다. 텍스트 박스와의 비율로 설정되어 있습니다. \n* 정확한 계산은 하지 않았습니다." - - font_family: - label: 폰트 - - ui_language: - label: UI 언어 / UI Language - - to_restore_main_window_geometry: - label: 메인 화면 위치 기억 - desc: 시작 시 이전 화면의 위치와 크기를 복원합니다. - - use_translation_feature: - label: 번역 기능 사용 - desc: "번역 기능이 꺼져 있는 동안에는 번역을 하지 않는 대신 VRCT가 조금 더 빠르게 실행됩니다. \n 번역 기능이 필요하지 않고 VRCT를 채팅 전송 및 음성 인식 도구로만 사용하는 사용자를 위한 기능입니다." - - ctranslate2_weight_type: - label: 번역 모델 - desc: "오프라인 번역 시의 번역 모델을 변경합니다." - small: "일반 모델 (%{capacity})" - large: "정밀 모델 (%{capacity})" - - deepl_auth_key: - label: DeepL 인증키 - desc: "사용시 메인화면에 있는 %{translator}를 DeepL_API로 변경해 주세요.\n지원하지 않는 언어도 있습니다." - open_auth_key_webpage: DeepL 계정 페이지 열기 - auth_key_success: 인증키 갱신이 완료되었습니다. - auth_key_error: 인증키가 잘못되었거나 API 사용 제한이 상한에 도달했습니다. - - mic_host: - label: 마이크 호스트/드라이버 - - mic_device: - label: 마이크 장치 - - mic_dynamic_energy_threshold: - label_for_automatic: "음성 입력 최소 볼륨 (현재 설정: 자동)" - desc_for_automatic: "마이크의 입력 감도를 자동으로 조절합니다." - label_for_manual: "음성 입력 최소 볼륨 (현재 설정: 수동)" - desc_for_manual: "슬라이더를 움직여 입력 감도를 수동으로 조절합니다. 마이크 아이콘을 누르면 실제 음성의 볼륨을 확인하며 감도를 조절할 수 있습니다." - error_message: 0에서 %{max}까지의 숫자로만 설정할 수 있습니다. - - mic_record_timeout: - label: 최대 무음 시간 - desc: 무음을 감지하고 설정된 시간(초)만큼의 시간이 지나면 음성 입력이 종료된 것으로 판단합니다. - error_message: 0 이상에서 '%{mic_phrase_timeout_label}'보다 클 수 없습니다. - - mic_phrase_timeout: - label: 최대 인식 시간 - desc: 설정된 초 단위로 음성인식 처리가 이루어집니다. - error_message: 0 이상에서 '%{mic_record_timeout_label}'보다 작을 수 없습니다. - - mic_max_phrase: - label: 최대 입력 절(phrases) 수 - desc: 인식된 단어 수의 하한값으로, 이 수치를 초과하는 경우에만 결과를 VRChat으로 전송하고 로그에 표시합니다. - error_message: 0 이상의 숫자만 설정할 수 있습니다. - - mic_word_filter: - label: 단어 필터 - desc: "등록된 단어가 감지되면 해당 문장은 전송되지 않습니다. \n ',' 쉼표로 구분하면 여러 단어를 추가할 수 있습니다. \n* 중복된 단어는 등록되지 않습니다." - add_button_label: 추가 - count_desc: "현재 등록되어 있는 단어 수: %{count}" - - - speaker_device: - label: 스피커 장치 - - speaker_dynamic_energy_threshold: - label_for_automatic: "음성 입력 최소 볼륨 (현재 설정: 자동)" - desc_for_automatic: "스피커의 입력 감도를 자동으로 조절합니다." - label_for_manual: "음성 입력 최소 볼륨 (현재 설정: 수동)" - desc_for_manual: "슬라이더를 움직여 입력 감도를 수동으로 조절합니다. 헤드폰 아이콘을 누르면 실제 음성의 볼륨을 확인하며 감도를 조절할 수 있습니다." - error_message: 0에서 %{max}까지의 숫자로만 설정할 수 있습니다. - no_device_error_message: 스피커 디바이스를 찾지 못했습니다. - - speaker_record_timeout: - label: 최대 무음 시간 - desc: 무음을 감지하고 설정된 시간(초)만큼의 시간이 지나면 음성 입력이 종료된 것으로 판단합니다. - error_message: 0 이상에서 '%{speaker_phrase_timeout_label}'보다 클 수 없습니다. - - speaker_phrase_timeout: - label: 최대 인식 시간 - desc: 설정된 초 단위로 음성인식 처리가 이루어집니다. - error_message: 0 이상에서 '%{speaker_record_timeout_label}'보다 작을 수 없습니다. - - speaker_max_phrase: - label: 최대 입력 절(phrases) 수 - desc: 식된 단어 수의 하한값으로, 이 수치를 초과하는 경우에만 결과를 로그에 표시합니다. - error_message: 0 이상의 숫자만 설정할 수 있습니다. - - use_whisper_feature: - label: 음성 인식에 Whisper 모델을 사용 - desc: 일부 언어에서는 음성 인식의 정확도가 향상될 수 있어요. 음성 인식 중 CPU 사용률이 올라가기 때문에 사용하시는 PC의 사양을 고려하여 이 기능을 사용해주세요. - - whisper_weight_type: - label: Whisper 모델 타입 - desc: "기본적으로 용량이 많은 모델일수록 정밀도는 높지만, 음성 인식의 시간이 늘어나며 CPU 사용률도 늘어나요.각 모델의 설명은 문서를 참조해주세요.\n※특히 medium보다 용량이 큰 모델은 CPU의 성능에 따라서는 사용조차 어려울 수 있어요. " - model_template: "%{model_name} 모델 (%{capacity})" - recommended_model_template: "%{model_name} 모델 (%{capacity}) (권장)" - - auto_clear_the_message_box: - label: 챗박스 자동 삭제 - - send_only_translated_messages: - label: 번역된 메시지만 전송 - - send_message_button_type: - label: 메시지 전송 버튼 - hide: 숨김 (Enter 키를 사용하여 전송) - show: 표시 - show_and_disable_enter_key: 표시 (Enter 키 전송 비활성화) - - notice_xsoverlay: - label: XSOverlay에서 알림 수신 기능 활성화 - desc: 수신된 메시지를 XSOverlay의 기능을 통해 알림으로 받아볼 수 있습니다. - - auto_export_message_logs: - label: 대화 로그 자동 저장 - desc: logs 폴더에 텍스트 파일로 로그가 저장됩니다. - - send_message_to_vrc: - label: VRChat에 메시지 전송 - desc: "VRChat에 메시지를 보내지 않고 사용할 수 있는 방법이 있지만 지원되지 않습니다. VRChat에 메시지를 보내려면 이 기능을 활성화하세요." - - - send_message_format: - label: 메시지 형식 - desc: "메시지가 실제로 보이는 형식을 변경합니다. \n[message]가 메시지로 대체됩니다." - example_text: 이것은 예문입니다. 폰트, 줄바꿈 등 실제 표시와 다를 수 있습니다. - error_message: "[message]라는 문자는 사용할 수 없습니다." - - send_message_format_with_t: - label: 메시지 형식 (번역 포함) - desc: "메시지가 실제로 보이는 형식을 변경합니다. \n[message]는 메시지로, [translation]은 번역된 메시지로 대체됩니다.\nXSOverlay의 알림에서도 사용됩니다." - example_text: 예문입니다. 글꼴, 줄 바꿈 등이 실제 표시와 다를 수 있습니다. - error_message: "[message]와 [translation]이라는 문자는 사용할 수 없습니다." - - received_message_format: - label: 메시지 형식 - desc: "메시지가 실제로 보이는 형식을 변경합니다. \n[message]가 메시지로 대체됩니다." - example_text: 이것은 예문입니다. 폰트, 줄바꿈 등 실제 표시와 다를 수 있습니다. - error_message: "[message]라는 문자는 사용할 수 없습니다." - - received_message_format_with_t: - label: 메시지 형식 (번역 포함) - desc: "메시지가 실제로 보이는 형식을 변경합니다. \n[message]는 메시지로, [translation]은 번역된 메시지로 대체됩니다.\nXSOverlay의 알림에서도 사용됩니다." - example_text: 이것은 예문입니다. 폰트, 줄바꿈 등 실제 표시와 다를 수 있습니다. - error_message: "[message]와 [translation]이라는 문자는 사용할 수 없습니다." - - - osc_ip_address: - label: OSC IP 주소 - - osc_port: - label: OSC 포트 - - open_config_filepath: - label: 설정 파일 열기 \ No newline at end of file diff --git a/locales/zh-Hant.json b/locales/zh-Hant.json new file mode 100644 index 00000000..80bcac5c --- /dev/null +++ b/locales/zh-Hant.json @@ -0,0 +1,277 @@ +{ + "main_window": { + "translation": "翻譯", + "transcription_send": "麥克風轉文字", + "transcription_receive": "喇叭轉文字", + "foreground": "最上層顯示", + "language_settings": "語言設定", + "your_language": "你的語言", + "translate_each_other_label": "互相翻譯", + "swap_button_label": "交換語言", + "target_language": "目標語言", + "translator": "翻譯器", + "translator_ctranslate2": "離線翻譯(預設)", + "textbox_tab_all": "全部", + "textbox_tab_sent": "已發送", + "textbox_tab_received": "已接收", + "textbox_tab_system": "系統", + "textbox_system_message": { + "enabled_easter_egg": "你找到了彩蛋!看看你的 VR Overlay 有沒有什麼變化?", + "enabled_translation": "翻譯功能已啟用。", + "disabled_translation": "翻譯功能已停用。", + "enabled_voice2chatbox": "麥克風轉文字已啟用。", + "disabled_voice2chatbox": "麥克風轉文字已停用。", + "enabled_speaker2log": "喇叭轉文字已啟用。", + "disabled_speaker2log": "喇叭轉文字已停用。", + "enabled_foreground": "最上層顯示已啟用。", + "disabled_foreground": "最上層顯示已停用。", + "auth_key_success": "授權金鑰更新完成。", + "auth_key_error": "授權金鑰錯誤或已達使用上限。", + "no_mic_device_detected_error": "未偵測到麥克風。", + "no_speaker_device_detected_error": "未偵測到喇叭。", + "translation_engine_limit_error": "翻譯引擎已自動變更。由於請求太頻繁,已被這個翻譯引擎暫時受限。如果你想使用相同的翻譯引擎,請稍等片刻,重新啟動 VRCT 並重試。", + "detected_by_word_filter": "由於詞語過濾器的偵測,「%{detected_message}」未被發送。", + "selected_your_language": "「你的語言」已設為 %{your_language}。", + "selected_target_language": "「目標語言」已設為 %{target_language}。", + "switched_language_preset_tab": "已切換到第 %{tab_no} 個語言設定。", + "latest_language_setting": "目前「你的語言」設為 %{your_language},「目標語言」設為 %{target_language}。", + "opened_web_page_booth": "已在瀏覽器中打開 Booth 頁面。", + "opened_web_page_vrct_documents": "已在瀏覽器中打開VRCT文件頁面。\n如有任何問題、請求或查詢,請通過文件頁面底部的連結、「聯絡表單」或 X (Twitter) 聯絡我們!" + }, + "update_available": "有新版本可供使用!", + "state_text_enabled": "啟用", + "state_text_disabled": "停用", + "cover_message": "VRCT 功能在設定視窗關閉前暫時停用。", + "confirmation_message": { + "update_software": "下載新版本並自動更新 VRCT。\n會花一些時間,現在更新嗎?", + "deny_update_software": "稍後再說", + "accept_update_software": "更新", + "updating": "正在更新...", + "detected_over_ui_size": "介面大小:%{current_ui_size}\nVRCT 的視窗大小可能超過你的螢幕大小。", + "deny_adjust_ui_size": "保持目前大小", + "accept_adjust_ui_size": "縮小介面並重新啟動" + } + }, + "selectable_language_window": { + "title_your_language": "選擇你的語言", + "title_target_language": "選擇目標語言", + "go_back_button": "返回" + }, + "overlay_settings": { + "restore_default_settings": "恢復預設設定", + "opacity": "透明度", + "ui_scaling": "介面縮放", + "x_position": "X軸(左右)", + "y_position": "Y軸(上下)", + "z_position": "Z軸(前後)", + "x_rotation": "X軸旋轉", + "y_rotation": "Y軸旋轉", + "z_rotation": "Z軸旋轉", + "display_duration": "顯示持續時間", + "fadeout_duration": "淡出持續時間" + }, + "config_window": { + "config_title": "設定", + "compact_mode": "精簡模式", + "version": "版本 %{version}", + "restart_message": "重新啟動以應用變更。", + "common_error_message": { + "invalid_value": "無效值。" + }, + "side_menu_labels": { + "appearance": "外觀", + "translation": "翻譯", + "transcription": "轉錄", + "transcription_mic": "麥克風", + "transcription_speaker": "喇叭", + "transcription_internal_model": "轉錄模型", + "vr": "VR", + "others": "其他", + "others_send_message_formats": "訊息格式(發送)", + "others_received_message_formats": "訊息格式(XSOverlay & 喇叭轉文字)", + "others_speaker2chatbox": "喇叭轉文字", + "advanced_settings": "進階設定" + }, + "transparency": { + "label": "透明度", + "desc": "變更主視窗的透明度。" + }, + "appearance_theme": { + "label": "主題", + "desc": "變更配色主題。" + }, + "ui_size": { + "label": "介面大小" + }, + "textbox_ui_size": { + "label": "訊息框字體大小", + "desc": "你可以根據介面大小調整記錄中使用的字體大小。" + }, + "message_box_ratio": { + "label": "訊息框大小", + "desc": "你可以依介面比例縮放輸入訊息框。\n*可能不準確。" + }, + "font_family": { + "label": "字型" + }, + "ui_language": { + "label": "介面語言" + }, + "to_restore_main_window_geometry": { + "label": "記住主視窗位置", + "desc": "啟動時恢復上次視窗的位置和大小。" + }, + "use_translation_feature": { + "label": "使用翻譯功能", + "desc": "當此功能關閉時,無法使用翻譯功能。但 VRCT 會啟動得更快。適合不需要翻譯功能、只使用VRCT作為聊天框和轉錄工具的使用者。" + }, + "ctranslate2_weight_type": { + "label": "選擇離線翻譯模型", + "desc": "你可以選擇用於離線翻譯引擎的翻譯模型。", + "small": "基本模型(%{capacity})", + "large": "高準確率模型(%{capacity})" + }, + "deepl_auth_key": { + "label": "DeepL 授權金鑰", + "desc": "使用 DeepL API 時請在主螢幕選擇 %{translator}。※可能不支援某些語言。", + "open_auth_key_webpage": "打開 DeepL 帳號頁面", + "auth_key_success": "授權金鑰更新完成。", + "auth_key_error": "授權金鑰錯誤或已達使用上限。" + }, + "mic_host": { + "label": "麥克風 Host/Driver" + }, + "mic_device": { + "label": "麥克風裝置" + }, + "mic_dynamic_energy_threshold": { + "label_for_automatic": "麥克風能量閾值(當前設置:自動)", + "desc_for_automatic": "自動判定麥克風輸入靈敏度。", + "label_for_manual": "麥克風能量閾值(當前設置:手動)", + "desc_for_manual": "使用滑桿調整麥克風輸入靈敏度,你可以按下麥克風圖示來測試。", + "error_message": "可以設置 0 到 %{max} 之間的值。" + }, + "mic_record_timeout": { + "label": "麥克風音訊 - 判定結束時間", + "desc": "麥克風未收到音訊後,結束一段話的判定時間(秒)。", + "error_message": "不能大於「%{mic_phrase_timeout_label}」,應為 0 或更高。" + }, + "mic_phrase_timeout": { + "label": "麥克風音訊 - 紀錄間隔時間", + "desc": "每隔多久要紀錄一次音訊。", + "error_message": "不能小於「%{mic_record_timeout_label}」,應為 0 或更高。" + }, + "mic_max_phrase": { + "label": "麥克風音訊 - 最大單詞數量", + "desc": "只有在單詞超過此數量時,才會記錄結果並發送到 VRChat。", + "error_message": "可以設置為 0 或更高的數值。" + }, + "mic_word_filter": { + "label": "麥克風單詞過濾器", + "desc": "如果偵測到清單內的單詞,則不會發送訊息。要一次新增多個詞語,請用「,」(半形逗號)分隔。\n*重複詞語會被忽略。", + "add_button_label": "新增", + "count_desc": "當前註冊詞語數量:%{count}" + }, + "speaker_device": { + "label": "喇叭裝置" + }, + "speaker_dynamic_energy_threshold": { + "label_for_automatic": "喇叭能量閾值(當前設置:自動)", + "desc_for_automatic": "自動確定喇叭輸入靈敏度。", + "label_for_manual": "喇叭能量閾值(當前設置:手動)", + "desc_for_manual": "使用滑桿調整喇叭輸入靈敏度,你可以按下喇叭圖示來測試。", + "error_message": "可以設置 0 到 %{max} 之間的值。", + "no_device_error_message": "未偵測到喇叭裝置。" + }, + "speaker_record_timeout": { + "label": "喇叭音訊 - 判定結束時間", + "desc": "偵測到靜音並在指定秒數後認為喇叭輸入已結束。(秒)", + "error_message": "不能大於「%{speaker_phrase_timeout_label}」,應為 0 或更高。" + }, + "speaker_phrase_timeout": { + "label": "喇叭音訊 - 紀錄間隔時間", + "desc": "以指定秒數間隔進行轉錄處理。", + "error_message": "不能小於「%{speaker_record_timeout_label}」,應為 0 或更高。" + }, + "speaker_max_phrase": { + "label": "喇叭音訊 - 最大單詞數量", + "desc": "只有在單詞超過此數量時,才會記錄結果並發送到 VRChat。", + "error_message": "可以設置 0 或更高的數值。" + }, + "use_whisper_feature": { + "label": "使用 Whisper 模型進行轉錄", + "desc": "在某些語言中,語音識別的準確性可能會提高。使用語音識別時,CPU使用率會增加,請根據你的PC規格考慮是否使用此功能。" + }, + "whisper_weight_type": { + "label": "選擇 Whisper 模型", + "desc": "一般來說,容量較大的模型往往具有更高的準確性,但這也導致轉錄時間較長和CPU使用率增加。請參考文檔了解各模型的說明。\n※特別是超過中等大小的模型,根據CPU性能可能難以運行。", + "model_template": "%{model_name}模型(%{capacity})", + "recommended_model_template": "%{model_name}模型(%{capacity})(推薦)" + }, + "enable_overlay_small_log": { + "label": "啟用 Overlay", + "open_overlay_settings": "打開 Overlay 自定義設定" + }, + "auto_clear_the_message_box": { + "label": "自動清除 Chatbox" + }, + "send_only_translated_messages": { + "label": "僅發送翻譯訊息" + }, + "send_message_button_type": { + "label": "發送訊息按鈕", + "hide": "隱藏(使用 Enter 鍵發送)", + "show": "顯示", + "show_and_disable_enter_key": "顯示並停用 Enter 鍵發送" + }, + "notice_xsoverlay": { + "label": "XSOverlay 通知", + "desc": "從 XSOverlay 的通知功能接收訊息。" + }, + "auto_export_message_logs": { + "label": "自動匯出訊息記錄", + "desc": "自動將對話訊息匯出為文字文件。" + }, + "vrc_mic_mute_sync": { + "label": "VRC 麥克風靜音同步", + "desc": "當 VRChat 的麥克風靜音時,VRCT 將不會向 VRChat 發送訊息。\n*存在一些延遲且不支援按鍵發話 (PTT)。" + }, + "send_message_to_vrc": { + "label": "發送訊息到 VRChat", + "desc": "當你打算向 VRChat 發送訊息時啟用此功能。" + }, + "send_message_format": { + "label": "發送的訊息格式", + "desc": "你可以設定要發送的訊息格式。\n[message] 將被替換為訊息。", + "example_text": "這是一個範例。字體、換行等可能與實際顯示不同。", + "error_message": "不能使用 [message] 。" + }, + "send_message_format_with_t": { + "label": "發送的訊息格式(帶翻譯)", + "desc": "你可以設定要發送的訊息格式。\n[message] 將被替換為訊息,並且 [translation] 將被替換為翻譯訊息。", + "example_text": "這是一個範例。字體、換行等可能與實際顯示不同。", + "error_message": "不能使用 [message] 和 [translation] 。" + }, + "received_message_format": { + "label": "接收的訊息格式", + "desc": "用於 XSOverlay 的通知接收功能。\n[message] 將被替換為訊息。\n※它也將用於喇叭轉文字功能。", + "example_text": "這是一個範例。字體、換行等可能與實際顯示不同。", + "error_message": "不能使用 [message] 。" + }, + "received_message_format_with_t": { + "label": "接收的訊息格式(附翻譯)", + "desc": "用於 XSOverlay 的通知接收功能。\n[message] 將被替換為訊息,並且 [translation] 將被替換為翻譯訊息。\n※它也將用於喇叭轉文字功能。", + "example_text": "這是一個範例。字體、換行等可能與實際顯示不同。", + "error_message": "不能使用 [message] 和 [translation] 。" + }, + "osc_ip_address": { + "label": "OSC IP 位址" + }, + "osc_port": { + "label": "OSC 端口" + }, + "open_config_filepath": { + "label": "打開設定文件" + } + } +} \ No newline at end of file diff --git a/locales/zh-Hant.yml b/locales/zh-Hant.yml deleted file mode 100644 index df58c089..00000000 --- a/locales/zh-Hant.yml +++ /dev/null @@ -1,283 +0,0 @@ -main_window: - translation: 翻譯 - transcription_send: 麥克風轉文字 - transcription_receive: 喇叭轉文字 - foreground: 最上層顯示 - - language_settings: 語言設定 - your_language: 你的語言 - translate_each_other_label: 互相翻譯 - swap_button_label: 交換語言 - target_language: 目標語言 - translator: 翻譯器 - translator_ctranslate2: 離線翻譯(預設) - - textbox_tab_all: 全部 - textbox_tab_sent: 已發送 - textbox_tab_received: 已接收 - textbox_tab_system: 系統 - - textbox_system_message: - enabled_easter_egg: 你找到了彩蛋!看看你的 VR Overlay 有沒有什麼變化? - enabled_translation: 翻譯功能已啟用。 - disabled_translation: 翻譯功能已停用。 - enabled_voice2chatbox: 麥克風轉文字已啟用。 - disabled_voice2chatbox: 麥克風轉文字已停用。 - enabled_speaker2log: 喇叭轉文字已啟用。 - disabled_speaker2log: 喇叭轉文字已停用。 - enabled_foreground: 最上層顯示已啟用。 - disabled_foreground: 最上層顯示已停用。 - - auth_key_success: 授權金鑰更新完成。 - auth_key_error: 授權金鑰錯誤或已達使用上限。 - - no_mic_device_detected_error: 未偵測到麥克風。 - no_speaker_device_detected_error: 未偵測到喇叭。 - translation_engine_limit_error: 翻譯引擎已自動變更。由於請求太頻繁,已被這個翻譯引擎暫時受限。如果你想使用相同的翻譯引擎,請稍等片刻,重新啟動 VRCT 並重試。 - - detected_by_word_filter: 由於詞語過濾器的偵測,「%{detected_message}」未被發送。 - - selected_your_language: "「你的語言」已設為 %{your_language}。" - selected_target_language: "「目標語言」已設為 %{target_language}。" - switched_language_preset_tab: 已切換到第 %{tab_no} 個語言設定。 - latest_language_setting: "目前「你的語言」設為 %{your_language},「目標語言」設為 %{target_language}。" - - opened_web_page_booth: 已在瀏覽器中打開 Booth 頁面。 - opened_web_page_vrct_documents: "已在瀏覽器中打開VRCT文件頁面。\n如有任何問題、請求或查詢,請通過文件頁面底部的連結、「聯絡表單」或 X (Twitter) 聯絡我們!" - - update_available: 有新版本可供使用! - state_text_enabled: 啟用 - state_text_disabled: 停用 - - cover_message: VRCT 功能在設定視窗關閉前暫時停用。 - - confirmation_message: - update_software: "下載新版本並自動更新 VRCT。\n會花一些時間,現在更新嗎?" - deny_update_software: 稍後再說 - accept_update_software: 更新 - updating: 正在更新... - - detected_over_ui_size: "介面大小:%{current_ui_size}\nVRCT 的視窗大小可能超過你的螢幕大小。" - deny_adjust_ui_size: "保持目前大小" - accept_adjust_ui_size: "縮小介面並重新啟動" - -selectable_language_window: - title_your_language: 選擇你的語言 - title_target_language: 選擇目標語言 - go_back_button: 返回 - -overlay_settings: - restore_default_settings: 恢復預設設定 - opacity: 透明度 - ui_scaling: 介面縮放 - x_position: X軸(左右) - y_position: Y軸(上下) - z_position: Z軸(前後) - x_rotation: X軸旋轉 - y_rotation: Y軸旋轉 - z_rotation: Z軸旋轉 - display_duration: 顯示持續時間 - fadeout_duration: 淡出持續時間 - -config_window: - config_title: 設定 - compact_mode: 精簡模式 - version: 版本 %{version} - restart_message: 重新啟動以應用變更。 - common_error_message: - invalid_value: 無效值。 - - side_menu_labels: - appearance: 外觀 - translation: 翻譯 - transcription: 轉錄 - transcription_mic: 麥克風 - transcription_speaker: 喇叭 - transcription_internal_model: 轉錄模型 - vr: VR - others: 其他 - others_send_message_formats: 訊息格式(發送) - others_received_message_formats: 訊息格式(XSOverlay & 喇叭轉文字) - others_speaker2chatbox: 喇叭轉文字 - advanced_settings: 進階設定 - - transparency: - label: 透明度 - desc: 變更主視窗的透明度。 - - appearance_theme: - label: 主題 - desc: 變更配色主題。 - - ui_size: - label: 介面大小 - - textbox_ui_size: - label: 訊息框字體大小 - desc: 你可以根據介面大小調整記錄中使用的字體大小。 - - message_box_ratio: - label: 訊息框大小 - desc: "你可以依介面比例縮放輸入訊息框。\n*可能不準確。" - - font_family: - label: 字型 - - ui_language: - label: 介面語言 - - to_restore_main_window_geometry: - label: 記住主視窗位置 - desc: 啟動時恢復上次視窗的位置和大小。 - - use_translation_feature: - label: 使用翻譯功能 - desc: 當此功能關閉時,無法使用翻譯功能。但 VRCT 會啟動得更快。適合不需要翻譯功能、只使用VRCT作為聊天框和轉錄工具的使用者。 - - ctranslate2_weight_type: - label: 選擇離線翻譯模型 - desc: 你可以選擇用於離線翻譯引擎的翻譯模型。 - small: "基本模型(%{capacity})" - large: "高準確率模型(%{capacity})" - - deepl_auth_key: - label: DeepL 授權金鑰 - desc: 使用 DeepL API 時請在主螢幕選擇 %{translator}。※可能不支援某些語言。 - open_auth_key_webpage: 打開 DeepL 帳號頁面 - auth_key_success: 授權金鑰更新完成。 - auth_key_error: 授權金鑰錯誤或已達使用上限。 - - mic_host: - label: 麥克風 Host/Driver - - mic_device: - label: 麥克風裝置 - - mic_dynamic_energy_threshold: - label_for_automatic: "麥克風能量閾值(當前設置:自動)" - desc_for_automatic: "自動判定麥克風輸入靈敏度。" - label_for_manual: "麥克風能量閾值(當前設置:手動)" - desc_for_manual: "使用滑桿調整麥克風輸入靈敏度,你可以按下麥克風圖示來測試。" - error_message: 可以設置 0 到 %{max} 之間的值。 - - mic_record_timeout: - label: 麥克風音訊 - 判定結束時間 - desc: 麥克風未收到音訊後,結束一段話的判定時間(秒)。 - error_message: 不能大於「%{mic_phrase_timeout_label}」,應為 0 或更高。 - - mic_phrase_timeout: - label: 麥克風音訊 - 紀錄間隔時間 - desc: 每隔多久要紀錄一次音訊。 - error_message: 不能小於「%{mic_record_timeout_label}」,應為 0 或更高。 - - mic_max_phrase: - label: 麥克風音訊 - 最大單詞數量 - desc: 只有在單詞超過此數量時,才會記錄結果並發送到 VRChat。 - error_message: 可以設置為 0 或更高的數值。 - - mic_word_filter: - label: 麥克風單詞過濾器 - desc: "如果偵測到清單內的單詞,則不會發送訊息。要一次新增多個詞語,請用「,」(半形逗號)分隔。\n*重複詞語會被忽略。" - add_button_label: 新增 - count_desc: "當前註冊詞語數量:%{count}" - - speaker_device: - label: 喇叭裝置 - - speaker_dynamic_energy_threshold: - label_for_automatic: "喇叭能量閾值(當前設置:自動)" - desc_for_automatic: "自動確定喇叭輸入靈敏度。" - label_for_manual: "喇叭能量閾值(當前設置:手動)" - desc_for_manual: "使用滑桿調整喇叭輸入靈敏度,你可以按下喇叭圖示來測試。" - error_message: 可以設置 0 到 %{max} 之間的值。 - no_device_error_message: 未偵測到喇叭裝置。 - - speaker_record_timeout: - label: 喇叭音訊 - 判定結束時間 - desc: 偵測到靜音並在指定秒數後認為喇叭輸入已結束。(秒) - error_message: 不能大於「%{speaker_phrase_timeout_label}」,應為 0 或更高。 - - speaker_phrase_timeout: - label: 喇叭音訊 - 紀錄間隔時間 - desc: 以指定秒數間隔進行轉錄處理。 - error_message: 不能小於「%{speaker_record_timeout_label}」,應為 0 或更高。 - - speaker_max_phrase: - label: 喇叭音訊 - 最大單詞數量 - desc: 只有在單詞超過此數量時,才會記錄結果並發送到 VRChat。 - error_message: 可以設置 0 或更高的數值。 - - use_whisper_feature: - label: 使用 Whisper 模型進行轉錄 - desc: 在某些語言中,語音識別的準確性可能會提高。使用語音識別時,CPU使用率會增加,請根據你的PC規格考慮是否使用此功能。 - - whisper_weight_type: - label: 選擇 Whisper 模型 - desc: "一般來說,容量較大的模型往往具有更高的準確性,但這也導致轉錄時間較長和CPU使用率增加。請參考文檔了解各模型的說明。\n※特別是超過中等大小的模型,根據CPU性能可能難以運行。" - model_template: "%{model_name}模型(%{capacity})" - recommended_model_template: "%{model_name}模型(%{capacity})(推薦)" - - enable_overlay_small_log: - label: 啟用 Overlay - open_overlay_settings: 打開 Overlay 自定義設定 - - auto_clear_the_message_box: - label: 自動清除 Chatbox - - send_only_translated_messages: - label: 僅發送翻譯訊息 - - send_message_button_type: - label: 發送訊息按鈕 - hide: 隱藏(使用 Enter 鍵發送) - show: 顯示 - show_and_disable_enter_key: 顯示並停用 Enter 鍵發送 - - notice_xsoverlay: - label: XSOverlay 通知 - desc: 從 XSOverlay 的通知功能接收訊息。 - - auto_export_message_logs: - label: 自動匯出訊息記錄 - desc: 自動將對話訊息匯出為文字文件。 - - vrc_mic_mute_sync: - label: VRC 麥克風靜音同步 - desc: "當 VRChat 的麥克風靜音時,VRCT 將不會向 VRChat 發送訊息。\n*存在一些延遲且不支援按鍵發話 (PTT)。" - - send_message_to_vrc: - label: 發送訊息到 VRChat - desc: 當你打算向 VRChat 發送訊息時啟用此功能。 - - send_message_format: - label: 發送的訊息格式 - desc: "你可以設定要發送的訊息格式。\n[message] 將被替換為訊息。" - example_text: 這是一個範例。字體、換行等可能與實際顯示不同。 - error_message: "不能使用 [message] 。" - - send_message_format_with_t: - label: 發送的訊息格式(帶翻譯) - desc: "你可以設定要發送的訊息格式。\n[message] 將被替換為訊息,並且 [translation] 將被替換為翻譯訊息。" - example_text: 這是一個範例。字體、換行等可能與實際顯示不同。 - error_message: "不能使用 [message] 和 [translation] 。" - - received_message_format: - label: 接收的訊息格式 - desc: "用於 XSOverlay 的通知接收功能。\n[message] 將被替換為訊息。\n※它也將用於喇叭轉文字功能。" - example_text: 這是一個範例。字體、換行等可能與實際顯示不同。 - error_message: "不能使用 [message] 。" - - received_message_format_with_t: - label: 接收的訊息格式(附翻譯) - desc: "用於 XSOverlay 的通知接收功能。\n[message] 將被替換為訊息,並且 [translation] 將被替換為翻譯訊息。\n※它也將用於喇叭轉文字功能。" - example_text: 這是一個範例。字體、換行等可能與實際顯示不同。 - error_message: "不能使用 [message] 和 [translation] 。" - - osc_ip_address: - label: OSC IP 位址 - - osc_port: - label: OSC 端口 - - open_config_filepath: - label: 打開設定文件 \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..5ac4d52c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5380 @@ +{ + "name": "tauri-app", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "tauri-app", + "version": "0.0.0", + "dependencies": { + "@tauri-apps/api": "^1", + "@typescript-eslint/eslint-plugin": "^7.11.0", + "@typescript-eslint/parser": "^7.11.0", + "clsx": "^2.1.1", + "eslint": "^8.57.0", + "eslint-plugin-react": "^7.34.2", + "i18next": "^23.11.5", + "jotai": "^2.8.3", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-i18next": "^14.1.2", + "react-resizable-layout": "^0.7.2" + }, + "devDependencies": { + "@tauri-apps/cli": "^1.5.14", + "@vitejs/plugin-react": "^4.2.1", + "sass": "^1.77.4", + "vite": "^5.0.0", + "vite-plugin-svgr": "^4.2.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", + "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", + "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", + "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", + "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", + "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", + "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", + "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", + "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", + "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", + "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", + "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", + "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", + "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", + "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", + "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", + "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", + "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", + "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", + "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", + "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", + "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", + "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", + "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", + "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", + "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", + "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", + "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", + "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", + "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", + "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", + "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", + "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", + "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", + "dev": true, + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", + "@svgr/babel-plugin-transform-svg-component": "8.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/core": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", + "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^8.1.3", + "snake-case": "^3.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", + "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.21.3", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", + "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "@svgr/hast-util-to-babel-ast": "8.0.0", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@tauri-apps/api": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-1.5.6.tgz", + "integrity": "sha512-LH5ToovAHnDVe5Qa9f/+jW28I6DeMhos8bNDtBOmmnaDpPmJmYLyHdeDblAWWWYc7KKRDg9/66vMuKyq0WIeFA==", + "engines": { + "node": ">= 14.6.0", + "npm": ">= 6.6.0", + "yarn": ">= 1.19.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + } + }, + "node_modules/@tauri-apps/cli": { + "version": "1.5.14", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-1.5.14.tgz", + "integrity": "sha512-JOSMKymlg116UdEXSj69eg5p1OtZnQkUE0qIGbtNDO1sk3X/KgBN6+oHBW0BzPStp/W0AjBgrMWCqjHPwEpOug==", + "dev": true, + "bin": { + "tauri": "tauri.js" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + }, + "optionalDependencies": { + "@tauri-apps/cli-darwin-arm64": "1.5.14", + "@tauri-apps/cli-darwin-x64": "1.5.14", + "@tauri-apps/cli-linux-arm-gnueabihf": "1.5.14", + "@tauri-apps/cli-linux-arm64-gnu": "1.5.14", + "@tauri-apps/cli-linux-arm64-musl": "1.5.14", + "@tauri-apps/cli-linux-x64-gnu": "1.5.14", + "@tauri-apps/cli-linux-x64-musl": "1.5.14", + "@tauri-apps/cli-win32-arm64-msvc": "1.5.14", + "@tauri-apps/cli-win32-ia32-msvc": "1.5.14", + "@tauri-apps/cli-win32-x64-msvc": "1.5.14" + } + }, + "node_modules/@tauri-apps/cli-darwin-arm64": { + "version": "1.5.14", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-1.5.14.tgz", + "integrity": "sha512-lxoSOp3KKSqzHJa7iT32dukPGMlfsTuja1xXSgwR8o/fqzpYJY7FY/3ZxesP8HR66FcK+vtqa//HNqeOQ0mHkA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-darwin-x64": { + "version": "1.5.14", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-1.5.14.tgz", + "integrity": "sha512-EXSwN1n5spfG8FoXuyc90ACtmDJXzaZ1gxyENaq9xEpQoo7j/Q1vb6qXxmr6azKr8zmqY4h08ZFbv3exh93xJg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm-gnueabihf": { + "version": "1.5.14", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-1.5.14.tgz", + "integrity": "sha512-Yb8BH/KYR7Tl+de40sZPfrqbhcU3Jlu+UPIrnXt05sjn48xqIps74Xjz8zzVp0TuHxUp8FmIGtCVhQgsbrsvvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-gnu": { + "version": "1.5.14", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-1.5.14.tgz", + "integrity": "sha512-QrKHP4gRaHiup478rPBZ+BmNd88yze9jMmheoNy9mN1K/aECRmTHO+tWhsxv5moFHZzRhO0QDWxxvTtiaPXaGg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-musl": { + "version": "1.5.14", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.5.14.tgz", + "integrity": "sha512-Hb1C1VMxmUcyGjW/K/INKF87zzzgLEVRmWZZnQd7M1P4uue4xPyIwUELSdX12Z2jREPgmLW4AXPD0m6wsNu7iw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-gnu": { + "version": "1.5.14", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-1.5.14.tgz", + "integrity": "sha512-kD9v/UwPDuhIgq2TJj/s2/7rqk+vmExVV6xHPKI8vVbIvlNAOZqmx3fpxjej1241vhJ/piGd/m6q6YMWGsL0oQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-musl": { + "version": "1.5.14", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-1.5.14.tgz", + "integrity": "sha512-204Drgg9Zx0+THKndqASz4+iPCwqA3gQVF9C0CDIArNXrjPyJjVvW8VP5CHiZYaTNWxlz/ltyxluM6UFWbXNFw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-arm64-msvc": { + "version": "1.5.14", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-1.5.14.tgz", + "integrity": "sha512-sqPSni2MnWNCm+8YZnLdWCclxfSHaYqKuPFSz8q7Tn1G1m/cA9gyPoC1G0esHftY7bu/ZM5lB4kM3I4U0KlLiA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-ia32-msvc": { + "version": "1.5.14", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-1.5.14.tgz", + "integrity": "sha512-8xN8W0zTs8oFsQmvYLxHFeqhzVI7oTaPK1xQMc5gbpFP45jN41c21aCXfjnvzT+h90EfCHUF9EWj2HTEJSb7Iw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-x64-msvc": { + "version": "1.5.14", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-1.5.14.tgz", + "integrity": "sha512-U0slee5tNM2PYECBpPHavLSwkT3szGMZ+qhcikQQbDan84bQdLn/kHWjyXOgLJs4KSve4+KxcrN+AVqj0VyHnw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.14.1.tgz", + "integrity": "sha512-aAJd6bIf2vvQRjUG3ZkNXkmBpN+J7Wd0mfQiiVCJMu9Z5GcZZdcc0j8XwN/BM97Fl7e3SkTXODSk4VehUv7CGw==", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.14.1", + "@typescript-eslint/type-utils": "7.14.1", + "@typescript-eslint/utils": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.14.1.tgz", + "integrity": "sha512-8lKUOebNLcR0D7RvlcloOacTOWzOqemWEWkKSVpMZVF/XVcwjPR+3MD08QzbW9TCGJ+DwIc6zUSGZ9vd8cO1IA==", + "dependencies": { + "@typescript-eslint/scope-manager": "7.14.1", + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/typescript-estree": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.14.1.tgz", + "integrity": "sha512-gPrFSsoYcsffYXTOZ+hT7fyJr95rdVe4kGVX1ps/dJ+DfmlnjFN/GcMxXcVkeHDKqsq6uAcVaQaIi3cFffmAbA==", + "dependencies": { + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.14.1.tgz", + "integrity": "sha512-/MzmgNd3nnbDbOi3LfasXWWe292+iuo+umJ0bCCMCPc1jLO/z2BQmWUUUXvXLbrQey/JgzdF/OV+I5bzEGwJkQ==", + "dependencies": { + "@typescript-eslint/typescript-estree": "7.14.1", + "@typescript-eslint/utils": "7.14.1", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.14.1.tgz", + "integrity": "sha512-mL7zNEOQybo5R3AavY+Am7KLv8BorIv7HCYS5rKoNZKQD9tsfGUpO4KdAn3sSUvTiS4PQkr2+K0KJbxj8H9NDg==", + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.14.1.tgz", + "integrity": "sha512-k5d0VuxViE2ulIO6FbxxSZaxqDVUyMbXcidC8rHvii0I56XZPv8cq+EhMns+d/EVIL41sMXqRbK3D10Oza1bbA==", + "dependencies": { + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.14.1.tgz", + "integrity": "sha512-CMmVVELns3nak3cpJhZosDkm63n+DwBlDX8g0k4QUa9BMnF+lH2lr3d130M1Zt1xxmB3LLk3NV7KQCq86ZBBhQ==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.14.1", + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/typescript-estree": "7.14.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.14.1.tgz", + "integrity": "sha512-Crb+F75U1JAEtBeQGxSKwI60hZmmzaqA3z9sYsVm8X7W5cwLEm5bRe0/uXS6+MR/y8CVpKSR/ontIAIEPFcEkA==", + "dependencies": { + "@typescript-eslint/types": "7.14.1", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", + "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.24.5", + "@babel/plugin-transform-react-jsx-self": "^7.24.5", + "@babel/plugin-transform-react-jsx-source": "^7.24.1", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/acorn": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", + "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.16" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001638", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001638.tgz", + "integrity": "sha512-5SuJUJ7cZnhPpeLHaH0c/HPAnAHZvS6ElWyHK9GSIbVOQABLzowiI2pjmpvZ1WEbkyz46iFd4UXlOHR5SqgfMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "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 + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.812", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.812.tgz", + "integrity": "sha512-7L8fC2Ey/b6SePDFKR2zHAy4mbdp1/38Yk5TsARO66W3hC5KEaeKMMHoxwtuH+jcu2AYLSn9QX04i95t6Fl1Hg==", + "dev": true + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.34.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.3.tgz", + "integrity": "sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA==", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.hasown": "^1.1.4", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "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, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html-parse-stringify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", + "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", + "dependencies": { + "void-elements": "3.1.0" + } + }, + "node_modules/i18next": { + "version": "23.11.5", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.11.5.tgz", + "integrity": "sha512-41pvpVbW9rhZPk5xjCX2TPJi2861LEig/YRhUkY+1FQ2IQPS0bKUDYnEqY8XPPbB48h1uIwLnP9iiEfuSl20CA==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "dependencies": { + "@babel/runtime": "^7.23.2" + } + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz", + "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", + "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jotai": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/jotai/-/jotai-2.8.3.tgz", + "integrity": "sha512-pR4plVvdbzB6zyt7VLLHPMAkcRSKhRIvZKd+qkifQLa3CEziEo1uwZjePj4acTmQrboiISBlYSdCz3gWcr1Nkg==", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=17.0.0", + "react": ">=17.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", + "dependencies": { + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-i18next": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-14.1.2.tgz", + "integrity": "sha512-FSIcJy6oauJbGEXfhUgVeLzvWBhIBIS+/9c6Lj4niwKZyGaGb4V4vUbATXSlsHJDXXB+ociNxqFNiFuV1gmoqg==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "html-parse-stringify": "^3.0.1" + }, + "peerDependencies": { + "i18next": ">= 23.2.3", + "react": ">= 16.8.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-resizable-layout": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/react-resizable-layout/-/react-resizable-layout-0.7.2.tgz", + "integrity": "sha512-GrVzAecB6+osdAx5PPP3G8R9n7A2uDd3NL+PyrHWNRaVBivZmW/o0+yFjQdS5Bo016A2fIP11fAhefsknWN4aw==", + "peerDependencies": { + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", + "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.18.0", + "@rollup/rollup-android-arm64": "4.18.0", + "@rollup/rollup-darwin-arm64": "4.18.0", + "@rollup/rollup-darwin-x64": "4.18.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", + "@rollup/rollup-linux-arm-musleabihf": "4.18.0", + "@rollup/rollup-linux-arm64-gnu": "4.18.0", + "@rollup/rollup-linux-arm64-musl": "4.18.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", + "@rollup/rollup-linux-riscv64-gnu": "4.18.0", + "@rollup/rollup-linux-s390x-gnu": "4.18.0", + "@rollup/rollup-linux-x64-gnu": "4.18.0", + "@rollup/rollup-linux-x64-musl": "4.18.0", + "@rollup/rollup-win32-arm64-msvc": "4.18.0", + "@rollup/rollup-win32-ia32-msvc": "4.18.0", + "@rollup/rollup-win32-x64-msvc": "4.18.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sass": { + "version": "1.77.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", + "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "dev": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", + "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz", + "integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==", + "dev": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.38", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-svgr": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-4.2.0.tgz", + "integrity": "sha512-SC7+FfVtNQk7So0XMjrrtLAbEC8qjFPifyD7+fs/E6aaNdVde6umlVVh0QuwDLdOMu7vp5RiGFsB70nj5yo0XA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.5", + "@svgr/core": "^8.1.0", + "@svgr/plugin-jsx": "^8.1.0" + }, + "peerDependencies": { + "vite": "^2.6.0 || 3 || 4 || 5" + } + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..32eafbb1 --- /dev/null +++ b/package.json @@ -0,0 +1,35 @@ +{ + "name": "tauri-app", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "setup-python": "install.bat", + "build-python": "pyinstaller -F src-python/test.py --distpath src-tauri/bin --clean -n test-x86_64-pc-windows-msvc", + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "tauri": "tauri" + }, + "dependencies": { + "@tauri-apps/api": "^1", + "@typescript-eslint/eslint-plugin": "^7.11.0", + "@typescript-eslint/parser": "^7.11.0", + "clsx": "^2.1.1", + "eslint": "^8.57.0", + "eslint-plugin-react": "^7.34.2", + "i18next": "^23.11.5", + "jotai": "^2.8.3", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-i18next": "^14.1.2", + "react-resizable-layout": "^0.7.2" + }, + "devDependencies": { + "@tauri-apps/cli": "^1.5.14", + "@vitejs/plugin-react": "^4.2.1", + "sass": "^1.77.4", + "vite": "^5.0.0", + "vite-plugin-svgr": "^4.2.0" + } +} diff --git a/requirements.txt b/requirements.txt index 4f4a6213..a392be22 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,12 +1,9 @@ pillow == 10.0.0 PyAudioWPatch == 0.2.12.6 python-osc == 1.8.3 -customtkinter == 5.2.0 deepl == 1.15.0 flashtext == 2.7 pyyaml == 6.0.1 -python-i18n == 0.3.9 -CTkToolTip == 0.8 pyinstaller==6.2.0 transformers[torch]==4.37.2 sentencepiece==0.1.99 diff --git a/src-python/test.py b/src-python/test.py new file mode 100644 index 00000000..9276f4e4 --- /dev/null +++ b/src-python/test.py @@ -0,0 +1,40 @@ +import sys +import json +import time + +def main(): + received_data = sys.stdin.readline().strip() + received_data = json.loads(received_data) + + with open('process.log', 'a') as f: + f.write(f"received_data: {received_data}\n") + + if received_data: + response_data = { + "status": "ok", + "id": received_data["id"], + "data": received_data["data"], + } + response = json.dumps(response_data) + time.sleep(2) + print(response, flush=True) + + + # with open('process.log', 'a') as f: + # f.write(f"Received data: {received_data}\n") + # f.write(f"Response: {response}\n") + + # # 標準出力に結果を出力 + # for i in range(10): + # print(str(i), flush=True) + # time.sleep(1) + +if __name__ == "__main__": + try: + print(json.dumps({"init_key_from_py": "Initialization from Python."}), flush=True) + while True: + main() + except Exception: + import traceback + with open('error.log', 'a') as f: + traceback.print_exc(file=f) \ No newline at end of file diff --git a/src-tauri/.gitignore b/src-tauri/.gitignore new file mode 100644 index 00000000..a52506d9 --- /dev/null +++ b/src-tauri/.gitignore @@ -0,0 +1,11 @@ +# Generated by Cargo +# will have compiled files and executables +/target/ + +# Generated by Tauri +# will have schema files for capabilities auto-completion +/gen/schemas + + +# Customize +/bin \ No newline at end of file diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock new file mode 100644 index 00000000..60f50f38 --- /dev/null +++ b/src-tauri/Cargo.lock @@ -0,0 +1,3765 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "atk" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd" +dependencies = [ + "atk-sys", + "bitflags 1.3.2", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps 6.2.2", +] + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "backtrace" +version = "0.3.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "brotli" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d640d25bc63c50fb1f0b545ffd80207d2e10a4c965530809b40ba3386825c391" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "2.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bstr" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "bytemuck" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" + +[[package]] +name = "cairo-rs" +version = "0.15.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc" +dependencies = [ + "bitflags 1.3.2", + "cairo-sys-rs", + "glib", + "libc", + "thiserror", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8" +dependencies = [ + "glib-sys", + "libc", + "system-deps 6.2.2", +] + +[[package]] +name = "cargo_toml" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "599aa35200ffff8f04c1925aa1acc92fa2e08874379ef42e210a80e527e60838" +dependencies = [ + "serde", + "toml 0.7.8", +] + +[[package]] +name = "cc" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + +[[package]] +name = "cfg-expr" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3431df59f28accaf4cb4eed4a9acc66bea3f3c3753aa6cdc2f024174ef232af7" +dependencies = [ + "smallvec", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.52.5", +] + +[[package]] +name = "cocoa" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation", + "core-foundation", + "core-graphics", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation", + "core-graphics-types", + "libc", + "objc", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core-graphics" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cssparser" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa 0.4.8", + "matches", + "phf 0.8.0", + "proc-macro2", + "quote", + "smallvec", + "syn 1.0.109", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.65", +] + +[[package]] +name = "ctor" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" +dependencies = [ + "quote", + "syn 2.0.65", +] + +[[package]] +name = "darling" +version = "0.20.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.65", +] + +[[package]] +name = "darling_macro" +version = "0.20.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dtoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" + +[[package]] +name = "dtoa-short" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbaceec3c6e4211c79e7b1800fb9680527106beb2f9c51904a3210c03a448c74" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dunce" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" + +[[package]] +name = "embed-resource" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6985554d0688b687c5cb73898a34fbe3ad6c24c58c238a4d91d5e840670ee9d" +dependencies = [ + "cc", + "memchr", + "rustc_version", + "toml 0.8.2", + "vswhom", + "winreg", +] + +[[package]] +name = "embed_plist" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" + +[[package]] +name = "encoding_rs" +version = "0.8.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "fastrand" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" + +[[package]] +name = "fdeflate" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "filetime" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.4.1", + "windows-sys 0.52.0", +] + +[[package]] +name = "flate2" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" +dependencies = [ + "mac", + "new_debug_unreachable", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-core", + "futures-macro", + "futures-task", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "gdk" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.15.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a" +dependencies = [ + "bitflags 1.3.2", + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps 6.2.2", +] + +[[package]] +name = "gdk-sys" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps 6.2.2", +] + +[[package]] +name = "gdkwayland-sys" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cca49a59ad8cfdf36ef7330fe7bdfbe1d34323220cc16a0de2679ee773aee2c2" +dependencies = [ + "gdk-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", + "system-deps 6.2.2", +] + +[[package]] +name = "gdkx11-sys" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4b7f8c7a84b407aa9b143877e267e848ff34106578b64d1e0a24bf550716178" +dependencies = [ + "gdk-sys", + "glib-sys", + "libc", + "system-deps 6.2.2", + "x11", +] + +[[package]] +name = "generator" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" +dependencies = [ + "cc", + "libc", + "log", + "rustversion", + "windows 0.48.0", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "gio" +version = "0.15.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b" +dependencies = [ + "bitflags 1.3.2", + "futures-channel", + "futures-core", + "futures-io", + "gio-sys", + "glib", + "libc", + "once_cell", + "thiserror", +] + +[[package]] +name = "gio-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps 6.2.2", + "winapi", +] + +[[package]] +name = "glib" +version = "0.15.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d" +dependencies = [ + "bitflags 1.3.2", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "once_cell", + "smallvec", + "thiserror", +] + +[[package]] +name = "glib-macros" +version = "0.15.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10c6ae9f6fa26f4fb2ac16b528d138d971ead56141de489f8111e259b9df3c4a" +dependencies = [ + "anyhow", + "heck 0.4.1", + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "glib-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4" +dependencies = [ + "libc", + "system-deps 6.2.2", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "globset" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +dependencies = [ + "aho-corasick", + "bstr", + "log", + "regex-automata 0.4.6", + "regex-syntax 0.8.3", +] + +[[package]] +name = "gobject-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a" +dependencies = [ + "glib-sys", + "libc", + "system-deps 6.2.2", +] + +[[package]] +name = "gtk" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0" +dependencies = [ + "atk", + "bitflags 1.3.2", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "once_cell", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps 6.2.2", +] + +[[package]] +name = "gtk3-macros" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "684c0456c086e8e7e9af73ec5b84e35938df394712054550e81558d21c44ab0d" +dependencies = [ + "anyhow", + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "html5ever" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7" +dependencies = [ + "log", + "mac", + "markup5ever", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa 1.0.11", +] + +[[package]] +name = "http-range" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ico" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae" +dependencies = [ + "byteorder", + "png", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "ignore" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" +dependencies = [ + "crossbeam-deque", + "globset", + "log", + "memchr", + "regex-automata 0.4.6", + "same-file", + "walkdir", + "winapi-util", +] + +[[package]] +name = "image" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "num-traits", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown 0.14.5", + "serde", +] + +[[package]] +name = "infer" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f551f8c3a39f68f986517db0d1759de85881894fdc7db798bd2a9df9cb04b7fc" +dependencies = [ + "cfb", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "javascriptcore-rs" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf053e7843f2812ff03ef5afe34bb9c06ffee120385caad4f6b9967fcd37d41c" +dependencies = [ + "bitflags 1.3.2", + "glib", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "905fbb87419c5cde6e3269537e4ea7d46431f3008c5d057e915ef3f115e7793c" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps 5.0.0", +] + +[[package]] +name = "jni" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "json-patch" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec9ad60d674508f3ca8f380a928cfe7b096bc729c4e2dbfe3852bc45da3ab30b" +dependencies = [ + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "kuchikiki" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e4755b7b995046f510a7520c42b2fed58b77bd94d5a87a8eb43d2fd126da8" +dependencies = [ + "cssparser", + "html5ever", + "indexmap 1.9.3", + "matches", + "selectors", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.5.0", + "libc", +] + +[[package]] +name = "line-wrap" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd1bc4d24ad230d21fb898d1116b1801d7adfc449d42026475862ab48b11e70e" + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" + +[[package]] +name = "loom" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "serde", + "serde_json", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "mac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "markup5ever" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016" +dependencies = [ + "log", + "phf 0.10.1", + "phf_codegen 0.10.0", + "string_cache", + "string_cache_codegen", + "tendril", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "memchr" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "miniz_oxide" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "ndk" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" +dependencies = [ + "bitflags 1.3.2", + "jni-sys", + "ndk-sys", + "num_enum", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "open" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2078c0039e6a54a0c42c28faa984e115fb4c2d5bf2208f77d1961002df8576f8" +dependencies = [ + "pathdiff", + "windows-sys 0.42.0", +] + +[[package]] +name = "os_pipe" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57119c3b893986491ec9aa85056780d3a0f3cf4da7cc09dd3650dbd6c6738fb9" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "pango" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f" +dependencies = [ + "bitflags 1.3.2", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps 6.2.2", +] + +[[package]] +name = "parking_lot" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.5.1", + "smallvec", + "windows-targets 0.52.5", +] + +[[package]] +name = "pathdiff" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "phf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" +dependencies = [ + "phf_macros 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", +] + +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_shared 0.10.0", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros 0.11.2", + "phf_shared 0.11.2", +] + +[[package]] +name = "phf_codegen" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", +] + +[[package]] +name = "phf_codegen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", +] + +[[package]] +name = "phf_generator" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" +dependencies = [ + "phf_shared 0.8.0", + "rand 0.7.3", +] + +[[package]] +name = "phf_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +dependencies = [ + "phf_shared 0.10.0", + "rand 0.8.5", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared 0.11.2", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" +dependencies = [ + "phf_generator 0.8.0", + "phf_shared 0.8.0", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator 0.11.2", + "phf_shared 0.11.2", + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "phf_shared" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "plist" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9d34169e64b3c7a80c8621a48adaf44e0cf62c78a9b25dd9dd35f1881a17cf9" +dependencies = [ + "base64 0.21.7", + "indexmap 2.2.6", + "line-wrap", + "quick-xml", + "serde", + "time", +] + +[[package]] +name = "png" +version = "0.17.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b33eb56c327dec362a9e55b3ad14f9d2f0904fb5a5b03b513ab5465399e9f43" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quick-xml" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", + "rand_pcg", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.15", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_pcg" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "raw-window-handle" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" +dependencies = [ + "bitflags 2.5.0", +] + +[[package]] +name = "redox_users" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +dependencies = [ + "getrandom 0.2.15", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.6", + "regex-syntax 0.8.3", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.3", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +dependencies = [ + "bitflags 2.5.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "selectors" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" +dependencies = [ + "bitflags 1.3.2", + "cssparser", + "derive_more", + "fxhash", + "log", + "matches", + "phf 0.8.0", + "phf_codegen 0.8.0", + "precomputed-hash", + "servo_arc", + "smallvec", + "thin-slice", +] + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +dependencies = [ + "serde", +] + +[[package]] +name = "serde" +version = "1.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "serde_json" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +dependencies = [ + "indexmap 2.2.6", + "itoa 1.0.11", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "serde_spanned" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_with" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ad483d2ab0149d5a5ebcd9972a3852711e0153d863bf5a5d0391d28883c4a20" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.6", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "serialize-to-javascript" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb" +dependencies = [ + "serde", + "serde_json", + "serialize-to-javascript-impl", +] + +[[package]] +name = "serialize-to-javascript-impl" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "servo_arc" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" +dependencies = [ + "nodrop", + "stable_deref_trait", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shared_child" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "soup2" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2b4d76501d8ba387cf0fefbe055c3e0a59891d09f0f995ae4e4b16f6b60f3c0" +dependencies = [ + "bitflags 1.3.2", + "gio", + "glib", + "libc", + "once_cell", + "soup2-sys", +] + +[[package]] +name = "soup2-sys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "009ef427103fcb17f802871647a7fa6c60cbb654b4c4e4c0ac60a31c5f6dc9cf" +dependencies = [ + "bitflags 1.3.2", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps 5.0.0", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "state" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" +dependencies = [ + "loom", +] + +[[package]] +name = "string_cache" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +dependencies = [ + "new_debug_unreachable", + "once_cell", + "parking_lot", + "phf_shared 0.10.0", + "precomputed-hash", + "serde", +] + +[[package]] +name = "string_cache_codegen" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" +dependencies = [ + "phf_generator 0.10.0", + "phf_shared 0.10.0", + "proc-macro2", + "quote", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2863d96a84c6439701d7a38f9de935ec562c8832cc55d1dde0f513b52fad106" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "system-deps" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e" +dependencies = [ + "cfg-expr 0.9.1", + "heck 0.3.3", + "pkg-config", + "toml 0.5.11", + "version-compare 0.0.11", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr 0.15.8", + "heck 0.5.0", + "pkg-config", + "toml 0.8.2", + "version-compare 0.2.0", +] + +[[package]] +name = "tao" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "575c856fc21e551074869dcfaad8f706412bd5b803dfa0fbf6881c4ff4bfafab" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "cc", + "cocoa", + "core-foundation", + "core-graphics", + "crossbeam-channel", + "dispatch", + "gdk", + "gdk-pixbuf", + "gdk-sys", + "gdkwayland-sys", + "gdkx11-sys", + "gio", + "glib", + "glib-sys", + "gtk", + "image", + "instant", + "jni", + "lazy_static", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "objc", + "once_cell", + "parking_lot", + "png", + "raw-window-handle", + "scopeguard", + "serde", + "tao-macros", + "unicode-segmentation", + "uuid", + "windows 0.39.0", + "windows-implement", + "x11-dl", +] + +[[package]] +name = "tao-macros" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec114582505d158b669b136e6851f85840c109819d77c42bb7c0709f727d18c2" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "tar" +version = "0.4.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb797dad5fb5b76fcf519e702f4a589483b5ef06567f160c392832c1f5e44909" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "target-lexicon" +version = "0.12.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" + +[[package]] +name = "tauri" +version = "1.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77567d2b3b74de4588d544147142d02297f3eaa171a25a065252141d8597a516" +dependencies = [ + "anyhow", + "cocoa", + "dirs-next", + "dunce", + "embed_plist", + "encoding_rs", + "flate2", + "futures-util", + "getrandom 0.2.15", + "glib", + "glob", + "gtk", + "heck 0.5.0", + "http", + "ignore", + "objc", + "once_cell", + "open", + "os_pipe", + "percent-encoding", + "rand 0.8.5", + "raw-window-handle", + "regex", + "semver", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "shared_child", + "state", + "tar", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "tempfile", + "thiserror", + "tokio", + "url", + "uuid", + "webkit2gtk", + "webview2-com", + "windows 0.39.0", +] + +[[package]] +name = "tauri-app" +version = "0.0.0" +dependencies = [ + "serde", + "serde_json", + "tauri", + "tauri-build", +] + +[[package]] +name = "tauri-build" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab30cba12974d0f9b09794f61e72cad6da2142d3ceb81e519321bab86ce53312" +dependencies = [ + "anyhow", + "cargo_toml", + "dirs-next", + "heck 0.5.0", + "json-patch", + "semver", + "serde", + "serde_json", + "tauri-utils", + "tauri-winres", + "walkdir", +] + +[[package]] +name = "tauri-codegen" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3a1d90db526a8cdfd54444ad3f34d8d4d58fa5c536463915942393743bd06f8" +dependencies = [ + "base64 0.21.7", + "brotli", + "ico", + "json-patch", + "plist", + "png", + "proc-macro2", + "quote", + "regex", + "semver", + "serde", + "serde_json", + "sha2", + "tauri-utils", + "thiserror", + "time", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-macros" +version = "1.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a582d75414250122e4a597b9dd7d3c910a2c77906648fc2ac9353845ff0feec" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 1.0.109", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-runtime" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd7ffddf36d450791018e63a3ddf54979b9581d9644c584a5fb5611e6b5f20b4" +dependencies = [ + "gtk", + "http", + "http-range", + "rand 0.8.5", + "raw-window-handle", + "serde", + "serde_json", + "tauri-utils", + "thiserror", + "url", + "uuid", + "webview2-com", + "windows 0.39.0", +] + +[[package]] +name = "tauri-runtime-wry" +version = "0.14.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1989b3b4d611f5428b3414a4abae6fa6df30c7eb8ed33250ca90a5f7e5bb3655" +dependencies = [ + "cocoa", + "gtk", + "percent-encoding", + "rand 0.8.5", + "raw-window-handle", + "tauri-runtime", + "tauri-utils", + "uuid", + "webkit2gtk", + "webview2-com", + "windows 0.39.0", + "wry", +] + +[[package]] +name = "tauri-utils" +version = "1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "450b17a7102e5d46d4bdabae0d1590fd27953e704e691fc081f06c06d2253b35" +dependencies = [ + "brotli", + "ctor", + "dunce", + "glob", + "heck 0.5.0", + "html5ever", + "infer", + "json-patch", + "kuchikiki", + "log", + "memchr", + "phf 0.11.2", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "serde_with", + "thiserror", + "url", + "walkdir", + "windows-version", +] + +[[package]] +name = "tauri-winres" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb" +dependencies = [ + "embed-resource", + "toml 0.7.8", +] + +[[package]] +name = "tempfile" +version = "3.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +dependencies = [ + "cfg-if", + "fastrand", + "rustix", + "windows-sys 0.52.0", +] + +[[package]] +name = "tendril" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" +dependencies = [ + "futf", + "mac", + "utf-8", +] + +[[package]] +name = "thin-slice" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" + +[[package]] +name = "thiserror" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa 1.0.11", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +dependencies = [ + "backtrace", + "bytes", + "num_cpus", + "pin-project-lite", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.15", +] + +[[package]] +name = "toml" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.20.2", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.2.6", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.2.6", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "uuid" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +dependencies = [ + "getrandom 0.2.15", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "version-compare" +version = "0.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" + +[[package]] +name = "version-compare" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.65", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "webkit2gtk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8f859735e4a452aeb28c6c56a852967a8a76c8eb1cc32dbf931ad28a13d6370" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup2", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d76ca6ecc47aeba01ec61e480139dda143796abcae6f83bcddf50d6b5b1dcf3" +dependencies = [ + "atk-sys", + "bitflags 1.3.2", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pango-sys", + "pkg-config", + "soup2-sys", + "system-deps 6.2.2", +] + +[[package]] +name = "webview2-com" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4a769c9f1a64a8734bde70caafac2b96cada12cd4aefa49196b3a386b8b4178" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows 0.39.0", + "windows-implement", +] + +[[package]] +name = "webview2-com-macros" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "webview2-com-sys" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aac48ef20ddf657755fdcda8dfed2a7b4fc7e4581acce6fe9b88c3d64f29dee7" +dependencies = [ + "regex", + "serde", + "serde_json", + "thiserror", + "windows 0.39.0", + "windows-bindgen", + "windows-metadata", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a" +dependencies = [ + "windows-implement", + "windows_aarch64_msvc 0.39.0", + "windows_i686_gnu 0.39.0", + "windows_i686_msvc 0.39.0", + "windows_x86_64_gnu 0.39.0", + "windows_x86_64_msvc 0.39.0", +] + +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-bindgen" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68003dbd0e38abc0fb85b939240f4bce37c43a5981d3df37ccbaaa981b47cb41" +dependencies = [ + "windows-metadata", + "windows-tokens", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-implement" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7" +dependencies = [ + "syn 1.0.109", + "windows-tokens", +] + +[[package]] +name = "windows-metadata" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ee5e275231f07c6e240d14f34e1b635bf1faa1c76c57cfd59a5cdb9848e4278" + +[[package]] +name = "windows-sys" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +dependencies = [ + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", +] + +[[package]] +name = "windows-tokens" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597" + +[[package]] +name = "windows-version" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6998aa457c9ba8ff2fb9f13e9d2a930dabcea28f1d0ab94d687d8b3654844515" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" + +[[package]] +name = "windows_i686_gnu" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" + +[[package]] +name = "windows_i686_msvc" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wry" +version = "0.24.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00711278ed357350d44c749c286786ecac644e044e4da410d466212152383b45" +dependencies = [ + "base64 0.13.1", + "block", + "cocoa", + "core-graphics", + "crossbeam-channel", + "dunce", + "gdk", + "gio", + "glib", + "gtk", + "html5ever", + "http", + "kuchikiki", + "libc", + "log", + "objc", + "objc_id", + "once_cell", + "serde", + "serde_json", + "sha2", + "soup2", + "tao", + "thiserror", + "url", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows 0.39.0", + "windows-implement", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "xattr" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" +dependencies = [ + "libc", + "linux-raw-sys", + "rustix", +] diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml new file mode 100644 index 00000000..b1889c5d --- /dev/null +++ b/src-tauri/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "tauri-app" +version = "0.0.0" +description = "A Tauri App" +authors = ["you"] +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[build-dependencies] +tauri-build = { version = "1", features = [] } + +[dependencies] +tauri = { version = "1", features = [ "window-set-always-on-top", "window-create", "window-close", "shell-sidecar", "shell-open", "devtools"] } +serde = { version = "1", features = ["derive"] } +serde_json = "1" + +[features] +# This feature is used for production builds or when a dev server is not specified, DO NOT REMOVE!! +custom-protocol = ["tauri/custom-protocol"] diff --git a/src-tauri/build.rs b/src-tauri/build.rs new file mode 100644 index 00000000..2ba80a8b --- /dev/null +++ b/src-tauri/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/src-tauri/icons/128x128.png b/src-tauri/icons/128x128.png new file mode 100644 index 00000000..6be5e50e Binary files /dev/null and b/src-tauri/icons/128x128.png differ diff --git a/src-tauri/icons/128x128@2x.png b/src-tauri/icons/128x128@2x.png new file mode 100644 index 00000000..e81becee Binary files /dev/null and b/src-tauri/icons/128x128@2x.png differ diff --git a/src-tauri/icons/32x32.png b/src-tauri/icons/32x32.png new file mode 100644 index 00000000..a437dd51 Binary files /dev/null and b/src-tauri/icons/32x32.png differ diff --git a/src-tauri/icons/Square107x107Logo.png b/src-tauri/icons/Square107x107Logo.png new file mode 100644 index 00000000..0ca4f271 Binary files /dev/null and b/src-tauri/icons/Square107x107Logo.png differ diff --git a/src-tauri/icons/Square142x142Logo.png b/src-tauri/icons/Square142x142Logo.png new file mode 100644 index 00000000..b81f8203 Binary files /dev/null and b/src-tauri/icons/Square142x142Logo.png differ diff --git a/src-tauri/icons/Square150x150Logo.png b/src-tauri/icons/Square150x150Logo.png new file mode 100644 index 00000000..624c7bfb Binary files /dev/null and b/src-tauri/icons/Square150x150Logo.png differ diff --git a/src-tauri/icons/Square284x284Logo.png b/src-tauri/icons/Square284x284Logo.png new file mode 100644 index 00000000..c021d2ba Binary files /dev/null and b/src-tauri/icons/Square284x284Logo.png differ diff --git a/src-tauri/icons/Square30x30Logo.png b/src-tauri/icons/Square30x30Logo.png new file mode 100644 index 00000000..62197002 Binary files /dev/null and b/src-tauri/icons/Square30x30Logo.png differ diff --git a/src-tauri/icons/Square310x310Logo.png b/src-tauri/icons/Square310x310Logo.png new file mode 100644 index 00000000..f9bc0483 Binary files /dev/null and b/src-tauri/icons/Square310x310Logo.png differ diff --git a/src-tauri/icons/Square44x44Logo.png b/src-tauri/icons/Square44x44Logo.png new file mode 100644 index 00000000..d5fbfb2a Binary files /dev/null and b/src-tauri/icons/Square44x44Logo.png differ diff --git a/src-tauri/icons/Square71x71Logo.png b/src-tauri/icons/Square71x71Logo.png new file mode 100644 index 00000000..63440d79 Binary files /dev/null and b/src-tauri/icons/Square71x71Logo.png differ diff --git a/src-tauri/icons/Square89x89Logo.png b/src-tauri/icons/Square89x89Logo.png new file mode 100644 index 00000000..f3f705af Binary files /dev/null and b/src-tauri/icons/Square89x89Logo.png differ diff --git a/src-tauri/icons/StoreLogo.png b/src-tauri/icons/StoreLogo.png new file mode 100644 index 00000000..45563882 Binary files /dev/null and b/src-tauri/icons/StoreLogo.png differ diff --git a/src-tauri/icons/icon.icns b/src-tauri/icons/icon.icns new file mode 100644 index 00000000..12a5bcee Binary files /dev/null and b/src-tauri/icons/icon.icns differ diff --git a/src-tauri/icons/icon.ico b/src-tauri/icons/icon.ico new file mode 100644 index 00000000..b3636e4b Binary files /dev/null and b/src-tauri/icons/icon.ico differ diff --git a/src-tauri/icons/icon.png b/src-tauri/icons/icon.png new file mode 100644 index 00000000..e1cd2619 Binary files /dev/null and b/src-tauri/icons/icon.png differ diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs new file mode 100644 index 00000000..7bb53643 --- /dev/null +++ b/src-tauri/src/main.rs @@ -0,0 +1,17 @@ +// Prevents additional console window on Windows in release, DO NOT REMOVE!! +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] + +// use tauri::command; +use tauri::Manager; +fn main() { + tauri::Builder::default() + .setup(|app| { + #[cfg(debug_assertions)] + app.get_window("main").unwrap().open_devtools(); // `main` is the first window from tauri.conf.json without an explicit label + Ok(()) + }) + // .invoke_handler(tauri::generate_handler![greet, run_python_script]) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); + +} diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json new file mode 100644 index 00000000..d2ac4a51 --- /dev/null +++ b/src-tauri/tauri.conf.json @@ -0,0 +1,57 @@ +{ + "build": { + "beforeDevCommand": "npm run build-python && npm run dev", + "beforeBuildCommand": "npm run build-python && npm run build", + "devPath": "http://localhost:1420", + "distDir": "../dist" + }, + "package": { + "productName": "tauri-app", + "version": "0.0.0" + }, + "tauri": { + "allowlist": { + "all": false, + "window": { + "create": true, + "close": true, + "setAlwaysOnTop": true + }, + "shell": { + "all": false, + "open": true, + "sidecar": true, + "scope": [ + { + "name": "bin/test", "sidecar": true,"args": true + } + ] + } + }, + "windows": [ + { + "title": "tauri-app", + "width": 870, + "height": 654 + } + ], + "security": { + "csp": null + }, + "bundle": { + "active": true, + "targets": "all", + "identifier": "com.tauri-test.dev", + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ], + "externalBin": [ + "bin/test" + ] + } + } +} diff --git a/src-ui/assets/about_vrct/contributors_github_icon.png b/src-ui/assets/about_vrct/contributors_github_icon.png new file mode 100644 index 00000000..7742d535 Binary files /dev/null and b/src-ui/assets/about_vrct/contributors_github_icon.png differ diff --git a/img/about_vrct/contributors_members.png b/src-ui/assets/about_vrct/contributors_members.png similarity index 100% rename from img/about_vrct/contributors_members.png rename to src-ui/assets/about_vrct/contributors_members.png diff --git a/img/about_vrct/contributors_section_title.png b/src-ui/assets/about_vrct/contributors_section_title.png similarity index 100% rename from img/about_vrct/contributors_section_title.png rename to src-ui/assets/about_vrct/contributors_section_title.png diff --git a/src-ui/assets/about_vrct/contributors_x_icon.png b/src-ui/assets/about_vrct/contributors_x_icon.png new file mode 100644 index 00000000..26f5f0c4 Binary files /dev/null and b/src-ui/assets/about_vrct/contributors_x_icon.png differ diff --git a/src-ui/assets/about_vrct/dev_github_icon.png b/src-ui/assets/about_vrct/dev_github_icon.png new file mode 100644 index 00000000..f6fcee5c Binary files /dev/null and b/src-ui/assets/about_vrct/dev_github_icon.png differ diff --git a/src-ui/assets/about_vrct/dev_misya.png b/src-ui/assets/about_vrct/dev_misya.png new file mode 100644 index 00000000..8557922f Binary files /dev/null and b/src-ui/assets/about_vrct/dev_misya.png differ diff --git a/img/about_vrct/dev_section_title.png b/src-ui/assets/about_vrct/dev_section_title.png similarity index 100% rename from img/about_vrct/dev_section_title.png rename to src-ui/assets/about_vrct/dev_section_title.png diff --git a/src-ui/assets/about_vrct/dev_shiina.png b/src-ui/assets/about_vrct/dev_shiina.png new file mode 100644 index 00000000..62c40845 Binary files /dev/null and b/src-ui/assets/about_vrct/dev_shiina.png differ diff --git a/src-ui/assets/about_vrct/dev_x_icon.png b/src-ui/assets/about_vrct/dev_x_icon.png new file mode 100644 index 00000000..50534df7 Binary files /dev/null and b/src-ui/assets/about_vrct/dev_x_icon.png differ diff --git a/img/about_vrct/localization_members.png b/src-ui/assets/about_vrct/localization_members.png similarity index 100% rename from img/about_vrct/localization_members.png rename to src-ui/assets/about_vrct/localization_members.png diff --git a/img/about_vrct/localization_title.png b/src-ui/assets/about_vrct/localization_section_title.png similarity index 100% rename from img/about_vrct/localization_title.png rename to src-ui/assets/about_vrct/localization_section_title.png diff --git a/img/about_vrct/poster_showcase_section_title.png b/src-ui/assets/about_vrct/poster_showcase_section_title.png similarity index 100% rename from img/about_vrct/poster_showcase_section_title.png rename to src-ui/assets/about_vrct/poster_showcase_section_title.png diff --git a/img/about_vrct/project_link_booth.png b/src-ui/assets/about_vrct/project_link_booth.png similarity index 100% rename from img/about_vrct/project_link_booth.png rename to src-ui/assets/about_vrct/project_link_booth.png diff --git a/img/about_vrct/project_link_contact_us.png b/src-ui/assets/about_vrct/project_link_contact_us.png similarity index 100% rename from img/about_vrct/project_link_contact_us.png rename to src-ui/assets/about_vrct/project_link_contact_us.png diff --git a/img/about_vrct/project_link_documents.png b/src-ui/assets/about_vrct/project_link_documents.png similarity index 100% rename from img/about_vrct/project_link_documents.png rename to src-ui/assets/about_vrct/project_link_documents.png diff --git a/img/about_vrct/project_link_vrct_github.png b/src-ui/assets/about_vrct/project_link_vrct_github.png similarity index 100% rename from img/about_vrct/project_link_vrct_github.png rename to src-ui/assets/about_vrct/project_link_vrct_github.png diff --git a/img/about_vrct/showcased_worlds/bar_asagao.png b/src-ui/assets/about_vrct/showcased_worlds/bar_asagao.png similarity index 100% rename from img/about_vrct/showcased_worlds/bar_asagao.png rename to src-ui/assets/about_vrct/showcased_worlds/bar_asagao.png diff --git a/img/about_vrct/showcased_worlds/cafe_cian.png b/src-ui/assets/about_vrct/showcased_worlds/cafe_cian.png similarity index 100% rename from img/about_vrct/showcased_worlds/cafe_cian.png rename to src-ui/assets/about_vrct/showcased_worlds/cafe_cian.png diff --git a/img/about_vrct/showcased_worlds/chakachaka_multipurpose_room.png b/src-ui/assets/about_vrct/showcased_worlds/chakachaka_multipurpose_room.png similarity index 100% rename from img/about_vrct/showcased_worlds/chakachaka_multipurpose_room.png rename to src-ui/assets/about_vrct/showcased_worlds/chakachaka_multipurpose_room.png diff --git a/img/about_vrct/showcased_worlds/ehon_no_heikousekai_jimusho.png b/src-ui/assets/about_vrct/showcased_worlds/ehon_no_heikousekai_jimusho.png similarity index 100% rename from img/about_vrct/showcased_worlds/ehon_no_heikousekai_jimusho.png rename to src-ui/assets/about_vrct/showcased_worlds/ehon_no_heikousekai_jimusho.png diff --git a/img/about_vrct/showcased_worlds/ikoiba.png b/src-ui/assets/about_vrct/showcased_worlds/ikoiba.png similarity index 100% rename from img/about_vrct/showcased_worlds/ikoiba.png rename to src-ui/assets/about_vrct/showcased_worlds/ikoiba.png diff --git a/img/about_vrct/showcased_worlds/ippaidou.png b/src-ui/assets/about_vrct/showcased_worlds/ippaidou.png similarity index 100% rename from img/about_vrct/showcased_worlds/ippaidou.png rename to src-ui/assets/about_vrct/showcased_worlds/ippaidou.png diff --git a/img/about_vrct/showcased_worlds/japanese_culture_osenbeito.png b/src-ui/assets/about_vrct/showcased_worlds/japanese_culture_osenbeito.png similarity index 100% rename from img/about_vrct/showcased_worlds/japanese_culture_osenbeito.png rename to src-ui/assets/about_vrct/showcased_worlds/japanese_culture_osenbeito.png diff --git a/img/about_vrct/showcased_worlds/kimodameshi.png b/src-ui/assets/about_vrct/showcased_worlds/kimodameshi.png similarity index 100% rename from img/about_vrct/showcased_worlds/kimodameshi.png rename to src-ui/assets/about_vrct/showcased_worlds/kimodameshi.png diff --git a/img/about_vrct/showcased_worlds/kokekkopiyopiyo.png b/src-ui/assets/about_vrct/showcased_worlds/kokekkopiyopiyo.png similarity index 100% rename from img/about_vrct/showcased_worlds/kokekkopiyopiyo.png rename to src-ui/assets/about_vrct/showcased_worlds/kokekkopiyopiyo.png diff --git a/img/about_vrct/showcased_worlds/kr_jp_exchange.png b/src-ui/assets/about_vrct/showcased_worlds/kr_jp_exchange.png similarity index 100% rename from img/about_vrct/showcased_worlds/kr_jp_exchange.png rename to src-ui/assets/about_vrct/showcased_worlds/kr_jp_exchange.png diff --git a/img/about_vrct/showcased_worlds/kuroinu_work_room.png b/src-ui/assets/about_vrct/showcased_worlds/kuroinu_work_room.png similarity index 100% rename from img/about_vrct/showcased_worlds/kuroinu_work_room.png rename to src-ui/assets/about_vrct/showcased_worlds/kuroinu_work_room.png diff --git a/img/about_vrct/showcased_worlds/language_exchange_tervern.png b/src-ui/assets/about_vrct/showcased_worlds/language_exchange_tervern.png similarity index 100% rename from img/about_vrct/showcased_worlds/language_exchange_tervern.png rename to src-ui/assets/about_vrct/showcased_worlds/language_exchange_tervern.png diff --git a/img/about_vrct/showcased_worlds/mamehinata_dogrun.png b/src-ui/assets/about_vrct/showcased_worlds/mamehinata_dogrun.png similarity index 100% rename from img/about_vrct/showcased_worlds/mamehinata_dogrun.png rename to src-ui/assets/about_vrct/showcased_worlds/mamehinata_dogrun.png diff --git a/img/about_vrct/showcased_worlds/monogatari_meetup.png b/src-ui/assets/about_vrct/showcased_worlds/monogatari_meetup.png similarity index 100% rename from img/about_vrct/showcased_worlds/monogatari_meetup.png rename to src-ui/assets/about_vrct/showcased_worlds/monogatari_meetup.png diff --git a/img/about_vrct/showcased_worlds/nihongokurabu.png b/src-ui/assets/about_vrct/showcased_worlds/nihongokurabu.png similarity index 100% rename from img/about_vrct/showcased_worlds/nihongokurabu.png rename to src-ui/assets/about_vrct/showcased_worlds/nihongokurabu.png diff --git a/img/about_vrct/showcased_worlds/parallel_collar.png b/src-ui/assets/about_vrct/showcased_worlds/parallel_collar.png similarity index 100% rename from img/about_vrct/showcased_worlds/parallel_collar.png rename to src-ui/assets/about_vrct/showcased_worlds/parallel_collar.png diff --git a/img/about_vrct/showcased_worlds/re_yatuha_room.png b/src-ui/assets/about_vrct/showcased_worlds/re_yatuha_room.png similarity index 100% rename from img/about_vrct/showcased_worlds/re_yatuha_room.png rename to src-ui/assets/about_vrct/showcased_worlds/re_yatuha_room.png diff --git a/img/about_vrct/showcased_worlds/silakan_datang_ke_rumahku.png b/src-ui/assets/about_vrct/showcased_worlds/silakan_datang_ke_rumahku.png similarity index 100% rename from img/about_vrct/showcased_worlds/silakan_datang_ke_rumahku.png rename to src-ui/assets/about_vrct/showcased_worlds/silakan_datang_ke_rumahku.png diff --git a/img/about_vrct/showcased_worlds/smokerz_guild_v2.png b/src-ui/assets/about_vrct/showcased_worlds/smokerz_guild_v2.png similarity index 100% rename from img/about_vrct/showcased_worlds/smokerz_guild_v2.png rename to src-ui/assets/about_vrct/showcased_worlds/smokerz_guild_v2.png diff --git a/img/about_vrct/showcased_worlds/stretch_club_starting_from_minus.png b/src-ui/assets/about_vrct/showcased_worlds/stretch_club_starting_from_minus.png similarity index 100% rename from img/about_vrct/showcased_worlds/stretch_club_starting_from_minus.png rename to src-ui/assets/about_vrct/showcased_worlds/stretch_club_starting_from_minus.png diff --git a/img/about_vrct/showcased_worlds/study_japanese_world_japanichijou.png b/src-ui/assets/about_vrct/showcased_worlds/study_japanese_world_japanichijou.png similarity index 100% rename from img/about_vrct/showcased_worlds/study_japanese_world_japanichijou.png rename to src-ui/assets/about_vrct/showcased_worlds/study_japanese_world_japanichijou.png diff --git a/img/about_vrct/showcased_worlds/sushi_guru_annex.png b/src-ui/assets/about_vrct/showcased_worlds/sushi_guru_annex.png similarity index 100% rename from img/about_vrct/showcased_worlds/sushi_guru_annex.png rename to src-ui/assets/about_vrct/showcased_worlds/sushi_guru_annex.png diff --git a/img/about_vrct/showcased_worlds/sushi_stand_guruguru.png b/src-ui/assets/about_vrct/showcased_worlds/sushi_stand_guruguru.png similarity index 100% rename from img/about_vrct/showcased_worlds/sushi_stand_guruguru.png rename to src-ui/assets/about_vrct/showcased_worlds/sushi_stand_guruguru.png diff --git a/img/about_vrct/showcased_worlds/tyuuniti_kouryuukai.png b/src-ui/assets/about_vrct/showcased_worlds/tyuuniti_kouryuukai.png similarity index 100% rename from img/about_vrct/showcased_worlds/tyuuniti_kouryuukai.png rename to src-ui/assets/about_vrct/showcased_worlds/tyuuniti_kouryuukai.png diff --git a/img/about_vrct/showcased_worlds/uj_club.png b/src-ui/assets/about_vrct/showcased_worlds/uj_club.png similarity index 100% rename from img/about_vrct/showcased_worlds/uj_club.png rename to src-ui/assets/about_vrct/showcased_worlds/uj_club.png diff --git a/img/about_vrct/showcased_worlds/usanezumi_shrine2.png b/src-ui/assets/about_vrct/showcased_worlds/usanezumi_shrine2.png similarity index 100% rename from img/about_vrct/showcased_worlds/usanezumi_shrine2.png rename to src-ui/assets/about_vrct/showcased_worlds/usanezumi_shrine2.png diff --git a/img/about_vrct/showcased_worlds/yuttari_eikaiwa.png b/src-ui/assets/about_vrct/showcased_worlds/yuttari_eikaiwa.png similarity index 100% rename from img/about_vrct/showcased_worlds/yuttari_eikaiwa.png rename to src-ui/assets/about_vrct/showcased_worlds/yuttari_eikaiwa.png diff --git a/src-ui/assets/about_vrct/special_thanks_members.png b/src-ui/assets/about_vrct/special_thanks_members.png new file mode 100644 index 00000000..80be4a66 Binary files /dev/null and b/src-ui/assets/about_vrct/special_thanks_members.png differ diff --git a/img/about_vrct/special_thanks_message_en.png b/src-ui/assets/about_vrct/special_thanks_message_en.png similarity index 100% rename from img/about_vrct/special_thanks_message_en.png rename to src-ui/assets/about_vrct/special_thanks_message_en.png diff --git a/img/about_vrct/special_thanks_message_ja.png b/src-ui/assets/about_vrct/special_thanks_message_ja.png similarity index 100% rename from img/about_vrct/special_thanks_message_ja.png rename to src-ui/assets/about_vrct/special_thanks_message_ja.png diff --git a/img/about_vrct/special_thanks_section_title.png b/src-ui/assets/about_vrct/special_thanks_section_title.png similarity index 100% rename from img/about_vrct/special_thanks_section_title.png rename to src-ui/assets/about_vrct/special_thanks_section_title.png diff --git a/img/about_vrct/vrchat_disclaimer.png b/src-ui/assets/about_vrct/vrchat_disclaimer.png similarity index 100% rename from img/about_vrct/vrchat_disclaimer.png rename to src-ui/assets/about_vrct/vrchat_disclaimer.png diff --git a/img/about_vrct/vrct_logo_for_about_vrct.png b/src-ui/assets/about_vrct/vrct_logo_for_about_vrct.png similarity index 100% rename from img/about_vrct/vrct_logo_for_about_vrct.png rename to src-ui/assets/about_vrct/vrct_logo_for_about_vrct.png diff --git a/img/about_vrct/poster_images_authors_en.png b/src-ui/assets/about_vrct/vrct_posters/authors/poster_images_authors_en.png similarity index 100% rename from img/about_vrct/poster_images_authors_en.png rename to src-ui/assets/about_vrct/vrct_posters/authors/poster_images_authors_en.png diff --git a/img/about_vrct/poster_images_authors_ja.png b/src-ui/assets/about_vrct/vrct_posters/authors/poster_images_authors_ja.png similarity index 100% rename from img/about_vrct/poster_images_authors_ja.png rename to src-ui/assets/about_vrct/vrct_posters/authors/poster_images_authors_ja.png diff --git a/img/about_vrct/poster_images_authors_m_en.png b/src-ui/assets/about_vrct/vrct_posters/authors/poster_images_authors_m_en.png similarity index 100% rename from img/about_vrct/poster_images_authors_m_en.png rename to src-ui/assets/about_vrct/vrct_posters/authors/poster_images_authors_m_en.png diff --git a/img/about_vrct/poster_images_authors_m_ja.png b/src-ui/assets/about_vrct/vrct_posters/authors/poster_images_authors_m_ja.png similarity index 100% rename from img/about_vrct/poster_images_authors_m_ja.png rename to src-ui/assets/about_vrct/vrct_posters/authors/poster_images_authors_m_ja.png diff --git a/img/about_vrct/vrct_posters/iya_vrct_manga_en.png b/src-ui/assets/about_vrct/vrct_posters/iya_vrct_manga_en.png similarity index 100% rename from img/about_vrct/vrct_posters/iya_vrct_manga_en.png rename to src-ui/assets/about_vrct/vrct_posters/iya_vrct_manga_en.png diff --git a/img/about_vrct/vrct_posters/iya_vrct_manga_ja.png b/src-ui/assets/about_vrct/vrct_posters/iya_vrct_manga_ja.png similarity index 100% rename from img/about_vrct/vrct_posters/iya_vrct_manga_ja.png rename to src-ui/assets/about_vrct/vrct_posters/iya_vrct_manga_ja.png diff --git a/img/about_vrct/vrct_posters/iya_vrct_manga_ko.png b/src-ui/assets/about_vrct/vrct_posters/iya_vrct_manga_ko.png similarity index 100% rename from img/about_vrct/vrct_posters/iya_vrct_manga_ko.png rename to src-ui/assets/about_vrct/vrct_posters/iya_vrct_manga_ko.png diff --git a/img/about_vrct/vrct_posters/iya_vrct_poster_cn.png b/src-ui/assets/about_vrct/vrct_posters/iya_vrct_poster_cn.png similarity index 100% rename from img/about_vrct/vrct_posters/iya_vrct_poster_cn.png rename to src-ui/assets/about_vrct/vrct_posters/iya_vrct_poster_cn.png diff --git a/img/about_vrct/vrct_posters/iya_vrct_poster_en.png b/src-ui/assets/about_vrct/vrct_posters/iya_vrct_poster_en.png similarity index 100% rename from img/about_vrct/vrct_posters/iya_vrct_poster_en.png rename to src-ui/assets/about_vrct/vrct_posters/iya_vrct_poster_en.png diff --git a/img/about_vrct/vrct_posters/iya_vrct_poster_ja.png b/src-ui/assets/about_vrct/vrct_posters/iya_vrct_poster_ja.png similarity index 100% rename from img/about_vrct/vrct_posters/iya_vrct_poster_ja.png rename to src-ui/assets/about_vrct/vrct_posters/iya_vrct_poster_ja.png diff --git a/img/about_vrct/vrct_posters/iya_vrct_poster_ko.png b/src-ui/assets/about_vrct/vrct_posters/iya_vrct_poster_ko.png similarity index 100% rename from img/about_vrct/vrct_posters/iya_vrct_poster_ko.png rename to src-ui/assets/about_vrct/vrct_posters/iya_vrct_poster_ko.png diff --git a/src-ui/assets/arrow_left.svg b/src-ui/assets/arrow_left.svg new file mode 100644 index 00000000..3c024b0e --- /dev/null +++ b/src-ui/assets/arrow_left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/vrct_logo_mark_white.png b/src-ui/assets/chato_white.png similarity index 100% rename from img/vrct_logo_mark_white.png rename to src-ui/assets/chato_white.png diff --git a/img/vrct_logo_mark_white_square.png b/src-ui/assets/chato_white_square.png similarity index 100% rename from img/vrct_logo_mark_white_square.png rename to src-ui/assets/chato_white_square.png diff --git a/src-ui/assets/configuration.svg b/src-ui/assets/configuration.svg new file mode 100644 index 00000000..30040dd3 --- /dev/null +++ b/src-ui/assets/configuration.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src-ui/assets/foreground.svg b/src-ui/assets/foreground.svg new file mode 100644 index 00000000..fdc2e961 --- /dev/null +++ b/src-ui/assets/foreground.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src-ui/assets/headphones.svg b/src-ui/assets/headphones.svg new file mode 100644 index 00000000..f10c55ce --- /dev/null +++ b/src-ui/assets/headphones.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src-ui/assets/help.svg b/src-ui/assets/help.svg new file mode 100644 index 00000000..2f67b2ae --- /dev/null +++ b/src-ui/assets/help.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src-ui/assets/mic.svg b/src-ui/assets/mic.svg new file mode 100644 index 00000000..cdf9b3bd --- /dev/null +++ b/src-ui/assets/mic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src-ui/assets/narrow_arrow_down.svg b/src-ui/assets/narrow_arrow_down.svg new file mode 100644 index 00000000..c97aef15 --- /dev/null +++ b/src-ui/assets/narrow_arrow_down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src-ui/assets/send_message.svg b/src-ui/assets/send_message.svg new file mode 100644 index 00000000..d1ed3d32 --- /dev/null +++ b/src-ui/assets/send_message.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src-ui/assets/translation.svg b/src-ui/assets/translation.svg new file mode 100644 index 00000000..3038de79 --- /dev/null +++ b/src-ui/assets/translation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/vrct_logo_for_dark_mode.png b/src-ui/assets/vrct_logo_for_dark_mode.png similarity index 100% rename from img/vrct_logo_for_dark_mode.png rename to src-ui/assets/vrct_logo_for_dark_mode.png diff --git a/src-ui/store.js b/src-ui/store.js new file mode 100644 index 00000000..bdd91866 --- /dev/null +++ b/src-ui/store.js @@ -0,0 +1,190 @@ +import { + atom, + useAtomValue, + useSetAtom +} from "jotai"; + +import { translator_list, generateTestData } from "@data"; + +export const store = { + backend_subprocess: null, + config_window: null, + log_box_ref: null, +}; + +const createAtomWithHook = (initialValue, property_names) => { + const atomInstance = atom(initialValue); + + const useHook = () => { + const currentAtom = useAtomValue(atomInstance); + + const setAtom = useSetAtom(atomInstance); + + const updateAtom = (value) => { + setAtom(value); + }; + + const addAtom = (value) => { + setAtom((old_value) => [...old_value, value]); + }; + + return { + [property_names.current]: currentAtom, + [property_names.update]: updateAtom, + [property_names.add]: addAtom, + }; + }; + + return { atomInstance, useHook }; +}; + +import { loadable } from "jotai/utils"; +const createAsyncAtomWithHook = (initialValue, property_names) => { + const atomInstance = atom(initialValue); + const asyncAtom = atom(async (get) => get(atomInstance)); + + const loadableAtom = loadable(asyncAtom); + + const useHook = () => { + const asyncCurrentAtom = useAtomValue(loadableAtom); + // const currentAtom = useAtomValue(atomInstance); + + const setAtom = useSetAtom(atomInstance); + const updateAtom = (value) => { + setAtom(value); + }; + + const asyncSetAtom = useSetAtom(atom(null, async (get, set, payloadAsyncFunc, ...args) => { + set(atomInstance, payloadAsyncFunc(...args)); + })); + const asyncUpdateAtom = async (asyncFunction, ...args) => { + asyncSetAtom(asyncFunction, ...args); + }; + + const addAtom = (value) => { + setAtom((old_value) => [...old_value, value]); + }; + const asyncAddAtom = useSetAtom(atom(null, async (get, set, payloadAsyncFunc, ...args) => { + const ald_value = await get(atomInstance); + set(atomInstance, payloadAsyncFunc([...ald_value, ...args])); + })); + + return { + [property_names.current]: asyncCurrentAtom, + [property_names.update]: updateAtom, + [property_names.async_update]: asyncUpdateAtom, + [property_names.add]: addAtom, + [property_names.async_add]: asyncAddAtom, + }; + }; + + return { atomInstance, useHook }; +}; + +export const { atomInstance: uiLanguage, useHook: useUiLanguage } = createAtomWithHook("en", { + current: "currentUiLanguage", + update: "updateUiLanguage", +}); + + +export const { atomInstance: State_Translation, useHook: useState_Translation } = createAsyncAtomWithHook(false, { + current: "currentState_Translation", + update: "updateState_Translation", + async_update: "asyncUpdateState_Translation", +}); +export const { atomInstance: State_TranscriptionSend, useHook: useState_TranscriptionSend } = createAsyncAtomWithHook(false, { + current: "currentState_TranscriptionSend", + update: "updateState_TranscriptionSend", + async_update: "asyncUpdateState_TranscriptionSend", +}); +export const { atomInstance: State_TranscriptionReceive, useHook: useState_TranscriptionReceive } = createAsyncAtomWithHook(false, { + current: "currentState_TranscriptionReceive", + update: "updateState_TranscriptionReceive", + async_update: "asyncUpdateState_TranscriptionReceive", +}); +export const { atomInstance: State_Foreground, useHook: useState_Foreground } = createAsyncAtomWithHook(false, { + current: "currentState_Foreground", + update: "updateState_Foreground", + async_update: "asyncUpdateState_Foreground", +}); + + + +export const { atomInstance: messageLogs, useHook: useMessageLogs } = createAtomWithHook(generateTestData(20), { + current: "currentMessageLogs", + update: "updateMessageLogs", + add: "addMessageLogs", +}); + +export const { atomInstance: isCompactMode, useHook: useIsCompactMode } = createAtomWithHook(false, { + current: "currentIsCompactMode", + update: "updateIsCompactMode", +}); + +export const { atomInstance: isOpenedLanguageSelector, useHook: useIsOpenedLanguageSelector } = createAtomWithHook( + { your_language: false, target_language: false }, + { + current: "currentIsOpenedLanguageSelector", + update: "updateIsOpenedLanguageSelector", + } +); + +export const { atomInstance: selectedTab, useHook: useSelectedTab } = createAtomWithHook(1, { + current: "currentSelectedTab", + update: "updateSelectedTab", +}); + + +export const { atomInstance: isOpenedConfigWindow, useHook: useIsOpenedConfigWindow } = createAtomWithHook(false, { + current: "currentIsOpenedConfigWindow", + update: "updateIsOpenedConfigWindow", +} ); + +export const { atomInstance: selectedConfigTab, useHook: useSelectedConfigTab } = createAtomWithHook("appearance", { + current: "currentSelectedConfigTab", + update: "updateSelectedConfigTab", +}); + +export const { atomInstance: openedDropdownMenu, useHook: useOpenedDropdownMenu } = createAtomWithHook("", { + current: "currentOpenedDropdownMenu", + update: "updateOpenedDropdownMenu", +}); + + +export const { atomInstance: selectedMicDevice, useHook: useSelectedMicDevice } = createAsyncAtomWithHook("device b", { + current: "currentSelectedMicDevice", + update: "updateSelectedMicDevice", +}); +const test_list = { + a: "Device A", + "device b": "Device B", +}; +export const { atomInstance: micDeviceList, useHook: useMicDeviceList } = createAtomWithHook(test_list, { + current: "currentMicDeviceList", + update: "updateMicDeviceList", +}); + +export const { atomInstance: translatorList, useHook: useTranslatorList } = createAtomWithHook(translator_list, { + current: "currentTranslatorList", + update: "updateTranslatorList", +}); + +export const { atomInstance: selectedTranslator, useHook: useSelectedTranslator } = createAtomWithHook("CTranslate2", { + current: "currentSelectedTranslator", + update: "updateSelectedTranslator", +}); + +export const { atomInstance: openedTranslatorSelector, useHook: useOpenedTranslatorSelector } = createAtomWithHook(false, { + current: "currentOpenedTranslatorSelector", + update: "updateOpenedTranslatorSelector", +}); + +export const { atomInstance: vrctPosterIndex, useHook: useVrctPosterIndex } = createAtomWithHook(0, { + current: "currentVrctPosterIndex", + update: "updateVrctPosterIndex", +}); + +export const { atomInstance: posterShowcaseWorldPageIndex, useHook: usePosterShowcaseWorldPageIndex } = createAtomWithHook(0, { + current: "currentPosterShowcaseWorldPageIndex", + update: "updatePosterShowcaseWorldPageIndex", +}); \ No newline at end of file diff --git a/src-ui/utils/chunkArray.js b/src-ui/utils/chunkArray.js new file mode 100644 index 00000000..ee3d47cb --- /dev/null +++ b/src-ui/utils/chunkArray.js @@ -0,0 +1,7 @@ +export const chunkArray = (array, size) => { + const chunked = []; + for (let i = 0; i < array.length; i += size) { + chunked.push(array.slice(i, i + size)); + } + return chunked; +}; \ No newline at end of file diff --git a/src-ui/utils/logics/scrollToBottom.js b/src-ui/utils/logics/scrollToBottom.js new file mode 100644 index 00000000..a2cb2a48 --- /dev/null +++ b/src-ui/utils/logics/scrollToBottom.js @@ -0,0 +1,27 @@ +export const scrollToBottom = (ref, smooth = false) => { + const element = ref.current; + const scroll_height = element.scrollHeight - element.clientHeight; + + if (smooth) { + const duration = 300; // スクロールにかける時間(ミリ秒) + const start_time = performance.now(); + const scroll_top = element.scrollTop; + + const scroll = (current_time) => { + const elapsed = current_time - start_time; + const progress = Math.min(elapsed / duration, 1); + const ease_in_out_quad = (t) => t < 0.5 + ? 2 * t * t + : -1 + (4 - 2 * t) * t; + element.scrollTop = scroll_top + (scroll_height - scroll_top) * ease_in_out_quad(progress); + + if (progress < 1) { + requestAnimationFrame(scroll); + } + }; + + requestAnimationFrame(scroll); + } else { + element.scrollTop = scroll_height; + } +}; diff --git a/src-ui/utils/logics/useMainFunction.js b/src-ui/utils/logics/useMainFunction.js new file mode 100644 index 00000000..1dbc5325 --- /dev/null +++ b/src-ui/utils/logics/useMainFunction.js @@ -0,0 +1,81 @@ +import { getCurrent } from "@tauri-apps/api/window"; + +import { + useState_Translation, + useState_TranscriptionSend, + useState_TranscriptionReceive, + useState_Foreground, +} from "@store"; + +import { useStdoutToPython } from "./useStdoutToPython"; + +export const useMainFunction = () => { + const { + currentState_Translation, + updateState_Translation, + asyncUpdateState_Translation, + } = useState_Translation(); + const { + currentState_TranscriptionSend, + updateState_TranscriptionSend, + asyncUpdateState_TranscriptionSend, + } = useState_TranscriptionSend(); + const { + currentState_TranscriptionReceive, + updateState_TranscriptionReceive, + asyncUpdateState_TranscriptionReceive, + } = useState_TranscriptionReceive(); + const { + currentState_Foreground, + updateState_Foreground, + } = useState_Foreground(); + + const { asyncStdoutToPython } = useStdoutToPython(); + + const asyncPending = () => new Promise(() => {}); + return { + toggleTranslation: () => { + asyncStdoutToPython({id: "/controller/callback_toggle_translation", data: !currentState_Translation.data}); + asyncUpdateState_Translation(asyncPending); + }, + currentState_Translation: currentState_Translation, + updateState_Translation: (payload) => { + updateState_Translation(payload.data); + }, + + toggleTranscriptionSend: () => { + asyncStdoutToPython({id: "/controller/callback_toggle_transcription_send", data: !currentState_TranscriptionSend.data}); + asyncUpdateState_TranscriptionSend(asyncPending); + }, + currentState_TranscriptionSend: currentState_TranscriptionSend, + updateState_TranscriptionSend: (payload) => { + updateState_TranscriptionSend(payload.data); + }, + + toggleTranscriptionReceive: () => { + asyncStdoutToPython({id: "/controller/callback_toggle_transcription_receive", data: !currentState_TranscriptionReceive.data}); + asyncUpdateState_TranscriptionReceive(asyncPending); + }, + currentState_TranscriptionReceive: currentState_TranscriptionReceive, + updateState_TranscriptionReceive: (payload) => { + updateState_TranscriptionReceive(payload.data); + }, + + toggleForeground: () => { + const main_window = getCurrent(); + const is_foreground_enabled = !currentState_Foreground.data; + main_window.setAlwaysOnTop(is_foreground_enabled); + updateState_Foreground(is_foreground_enabled); + + }, + currentState_Foreground: currentState_Foreground, + }; +}; + +const asyncTestFunction = (...args) => { + return new Promise((resolve) => { + setTimeout(() => { + resolve(...args); + }, 3000); + }); +}; \ No newline at end of file diff --git a/src-ui/utils/logics/useMessage.js b/src-ui/utils/logics/useMessage.js new file mode 100644 index 00000000..79281fd8 --- /dev/null +++ b/src-ui/utils/logics/useMessage.js @@ -0,0 +1,55 @@ +import { + useMessageLogs, +} from "@store"; + +import { useStdoutToPython } from "./useStdoutToPython"; + +export const useMessage = () => { + const { currentMessageLogs, addMessageLogs, updateMessageLogs } = useMessageLogs(); + const { asyncStdoutToPython } = useStdoutToPython(); + + return { + sendMessage: (message) => { + asyncStdoutToPython({id: "send_message", data: message}); + const uuid = crypto.randomUUID(); + const date = new Date().toLocaleTimeString( + "ja-JP", + {hour12: false, hour: "2-digit", minute:"2-digit"}, + ); + + addMessageLogs({ + id: uuid, + category: "sent", + status: "pending", + created_at: date, + messages: { + original: message, + translated: [ + message, + ], + }, + }); + + setTimeout(() => { + const updateItemById = (id) => (prevItems) => { + return prevItems.map(item => { + if (item.id === id) { + item.status = "ok"; + } + return item; + }); + }; + updateMessageLogs(updateItemById(uuid)); + }, 3000); + }, + currentMessageLogs: currentMessageLogs, + }; +}; + +// const asyncTestFunction = (...args) => { +// return new Promise((resolve) => { +// setTimeout(() => { +// resolve(...args); +// }, 3000); +// }); +// }; \ No newline at end of file diff --git a/src-ui/utils/logics/useStartPython.js b/src-ui/utils/logics/useStartPython.js new file mode 100644 index 00000000..5a4399b4 --- /dev/null +++ b/src-ui/utils/logics/useStartPython.js @@ -0,0 +1,53 @@ +import { Command } from "@tauri-apps/api/shell"; +import { store } from "@store"; + +import { useMainFunction } from "./useMainFunction"; + +export const useStartPython = () => { + const { + updateState_Translation, + updateState_TranscriptionSend, + updateState_TranscriptionReceive, + } = useMainFunction(); + + const routes = { + "/controller/callback_toggle_translation": updateState_Translation, + "/controller/callback_toggle_transcription_send": updateState_TranscriptionSend, + "/controller/callback_toggle_transcription_receive": updateState_TranscriptionReceive, + }; + + const receiveRoutes = (parsed_data) => { + if (parsed_data.status === "ok") { + const route = routes[parsed_data.id]; + if (route) { + route({ data: parsed_data.data }); + } else { + console.error(`Invalid path: ${parsed_data.id}`); + } + } else { + console.log("Received data status is not 'ok'.", parsed_data); + } + }; + + + const asyncStartPython = async () => { + const command = Command.sidecar("bin/test"); + command.on("error", error => console.error(`error: "${error}"`)); + command.stdout.on("data", (line) => { + let parsed_data = ""; + try { + parsed_data = JSON.parse(line); + } catch (error) { + console.log(error); + parsed_data = line; + } + console.log("from python:", parsed_data); + receiveRoutes(parsed_data); + }); + command.stderr.on("data", line => console.error("stderr:", line)); + const backend_subprocess = await command.spawn(); + store.backend_subprocess = backend_subprocess; + }; + + return { asyncStartPython }; +}; \ No newline at end of file diff --git a/src-ui/utils/logics/useStdoutToPython.js b/src-ui/utils/logics/useStdoutToPython.js new file mode 100644 index 00000000..a631545d --- /dev/null +++ b/src-ui/utils/logics/useStdoutToPython.js @@ -0,0 +1,17 @@ +import { store } from "@store"; + +export const useStdoutToPython = () => { + const asyncStdoutToPython = async (value) => { + // send to python + const backend_subprocess = store.backend_subprocess; + if (backend_subprocess) { + await backend_subprocess.write(JSON.stringify(value) + "\n").then(() => { + }).catch((err) => { + console.log(err); + }); + } else { + console.error("Backend subprocess is not found.", backend_subprocess); + } + }; + return { asyncStdoutToPython }; +}; \ No newline at end of file diff --git a/src-ui/utils/mixins.scss b/src-ui/utils/mixins.scss new file mode 100644 index 00000000..3532f992 --- /dev/null +++ b/src-ui/utils/mixins.scss @@ -0,0 +1,107 @@ +// デフォルト変数 +$default_loader_size: 2rem !default; +$default_loader_line_width: 0.2rem !default; + +// Loader Mixin +@mixin loader($loader_size: $default_loader_size, $loader_line_width: $default_loader_line_width, $position: right, $position_amount: 0) { + $half_line_width: calc($loader_line_width / 2); + $calc_translate: calc(-50% + #{$half_line_width}); + + position: absolute; + top: calc(50% - #{$half_line_width}); + #{$position}: $position_amount; + transform: translate($calc_translate, $calc_translate); + width: $loader_size; + height: $loader_size; + border-radius: 50%; + display: inline-block; + border-top: $loader_line_width solid var(--dark_400_color); + border-right: $loader_line_width solid transparent; + animation: rotate_animation 0.6s linear infinite; + + &::after { + content: ''; + position: absolute; + width: $loader_size; + height: $loader_size; + border-radius: 50%; + border-bottom: $loader_line_width solid var(--primary_400_color); + border-left: $loader_line_width solid transparent; + } + + // @keyframes + @keyframes rotate_animation { + 0% { + transform: translate($calc_translate, $calc_translate) rotate(0deg); + } + 100% { + transform: translate($calc_translate, $calc_translate) rotate(360deg); + } + } +} + + + +$toggle_background_color_on: var(--primary_400_color); +$toggle_background_color_off: var(--dark_775_color); +$toggle_control_color: var(--dark_400_color); +$toggle_width: 4rem; +$toggle_height: 1.6rem; +$toggle_gutter: 0.1rem; +$toggle_radius: 50%; +$toggle_control_speed: .15s; +$toggle_control_ease: ease-out; + +$toggle_radius: calc($toggle_height / 2); +$toggle_control_size: $toggle_height - calc($toggle_gutter * 2); + +@mixin toggle_control_styles { + display: block; + position: relative; + height: 100%; + width: auto; + padding-left: $toggle_width; + .control { + position: absolute; + top: 0; + left: 0; + height: $toggle_height; + width: $toggle_width; + border-radius: $toggle_radius; + background-color: $toggle_background_color_off; + // transition: background-color $toggle_control_speed $toggle_control_ease; + &:after { + content: ""; + position: absolute; + left: $toggle_gutter; + top: $toggle_gutter; + width: $toggle_control_size; + height: $toggle_control_size; + border-radius: $toggle_radius; + background: $toggle_control_color; + transition: left $toggle_control_speed $toggle_control_ease; + } + &.is_hovered { + background-color: var(--dark_725_color); + } + &.is_mouse_down { + background-color: var(--dark_825_color); + } + &.is_active { + background-color: $toggle_background_color_on; + &.is_hovered { + background-color: var(--primary_350_color); + } + &.is_mouse_down { + background-color: var(--primary_700_color); + } + &:after { + left: $toggle_width - $toggle_control_size - $toggle_gutter; + } + } + } +} + +.toggle_control { + @include toggle_control_styles; +} \ No newline at end of file diff --git a/src-ui/utils/randomIntMinMax.js b/src-ui/utils/randomIntMinMax.js new file mode 100644 index 00000000..f0882ea6 --- /dev/null +++ b/src-ui/utils/randomIntMinMax.js @@ -0,0 +1,9 @@ +export const randomIntMinMax = (min, max) => { + if (min === max) return min; + if (max === undefined) { + max = min; + min = 0; + } + const int = Math.floor(Math.random() * (max - min + 1)) + min; + return int; +}; diff --git a/src-ui/utils/reset.css b/src-ui/utils/reset.css new file mode 100644 index 00000000..c8104a66 --- /dev/null +++ b/src-ui/utils/reset.css @@ -0,0 +1,418 @@ +/*! destyle.css v4.0.1 | MIT License | https://github.com/nicolas-cusan/destyle.css */ + +/* Reset box-model and set borders */ +/* ============================================ */ + +*, +::before, +::after { + box-sizing: border-box; + border-style: solid; + border-width: 0; + min-width: 0; +} + +/* Document */ +/* ============================================ */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + * 3. Remove gray overlay on links for iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ + -webkit-tap-highlight-color: transparent; /* 3*/ +} + +/* Sections */ +/* ============================================ */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + display: block; +} + +/* Vertical rhythm */ +/* ============================================ */ + +p, +table, +blockquote, +address, +pre, +iframe, +form, +figure, +dl { + margin: 0; +} + +/* Headings */ +/* ============================================ */ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; + margin: 0; +} + +/* Lists (enumeration) */ +/* ============================================ */ + +ul, +ol { + margin: 0; + padding: 0; + list-style: none; +} + +/* Lists (definition) */ +/* ============================================ */ + +dt { + font-weight: bold; +} + +dd { + margin-left: 0; +} + +/* Grouping content */ +/* ============================================ */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ + border-top-width: 1px; + margin: 0; + clear: both; + color: inherit; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: inherit; /* 2 */ +} + +address { + font-style: inherit; +} + +/* Text-level semantics */ +/* ============================================ */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; + text-decoration: none; + color: inherit; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: inherit; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Replaced content */ +/* ============================================ */ + +/** + * Prevent vertical alignment issues. + */ + +svg, +img, +embed, +object, +iframe { + vertical-align: bottom; +} + +/* Forms */ +/* ============================================ */ + +/** + * Reset form fields to make them styleable. + * 1. Make form elements stylable across systems iOS especially. + * 2. Inherit text-transform from parent. + */ + +button, +input, +optgroup, +select, +textarea { + -webkit-appearance: none; /* 1 */ + appearance: none; + vertical-align: middle; + color: inherit; + font: inherit; + background: transparent; + padding: 0; + margin: 0; + border-radius: 0; + text-align: inherit; + text-transform: inherit; /* 2 */ + + /* Customize */ + outline: none; +} + +/** + * Correct cursors for clickable elements. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + cursor: pointer; +} + +button:disabled, +[type="button"]:disabled, +[type="reset"]:disabled, +[type="submit"]:disabled { + cursor: default; +} + +/** + * Improve outlines for Firefox and unify style with input elements & buttons. + */ + +:-moz-focusring { + outline: auto; +} + +select:disabled { + opacity: inherit; +} + +/** + * Remove padding + */ + +option { + padding: 0; +} + +/** + * Reset to invisible + */ + +fieldset { + margin: 0; + padding: 0; + min-width: 0; +} + +legend { + padding: 0; +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * Correct the outline style in Safari. + */ + +[type="search"] { + outline-offset: -2px; /* 1 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Fix font inheritance. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/** + * Fix appearance for Firefox + */ +[type="number"] { + appearance: textfield; +} + +/** + * Clickable labels + */ + +label[for] { + cursor: pointer; +} + +/* Interactive */ +/* ============================================ */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* + * Remove outline for editable content. + */ + +[contenteditable]:focus { + outline: auto; +} + +/* Tables */ +/* ============================================ */ + +/** +1. Correct table border color inheritance in all Chrome and Safari. +*/ + +table { + border-color: inherit; /* 1 */ + border-collapse: collapse; +} + +caption { + text-align: left; +} + +td, +th { + vertical-align: top; + padding: 0; +} + +th { + text-align: left; + font-weight: bold; +} \ No newline at end of file diff --git a/src-ui/utils/root.css b/src-ui/utils/root.css new file mode 100644 index 00000000..1cc2a409 --- /dev/null +++ b/src-ui/utils/root.css @@ -0,0 +1,40 @@ +@import "./reset.css"; +@import "./variables.css"; + +:root { + font-size: 62.5%; + color: #F2F2F2; + font-family: "Yu Gothic UI"; +} + +* { + &::-webkit-scrollbar { + width: 0.8rem; + } + &::-webkit-scrollbar-track { + background-color: var(--dark_925_color); + border-radius: 0.4rem; + } + &::-webkit-scrollbar-thumb { + background-color: var(--dark_800_color); + border-radius: 0.4rem; + } +} + +p, img, button { + user-select: none; +} + +html, body { + height: 100%; +} + + +#root { + height: 100%; +} + +/* SVG内のすべての要素にfillを適用 (colorの調整をcssでするため) */ +svg { + fill: currentColor; +} \ No newline at end of file diff --git a/src-ui/utils/useSvg.jsx b/src-ui/utils/useSvg.jsx new file mode 100644 index 00000000..2da6e814 --- /dev/null +++ b/src-ui/utils/useSvg.jsx @@ -0,0 +1,9 @@ +import React from "react"; + +export const useSvg = (svg_component, ...props) => { + const svgWithClass = svg_component + ? React.cloneElement(svg_component, ...props) + : null; + + return svgWithClass; +}; \ No newline at end of file diff --git a/src-ui/utils/useWindow.js b/src-ui/utils/useWindow.js new file mode 100644 index 00000000..797a9b78 --- /dev/null +++ b/src-ui/utils/useWindow.js @@ -0,0 +1,43 @@ +import { WebviewWindow } from "@tauri-apps/api/window"; +import { store, useIsOpenedConfigWindow } from "@store"; +import { getCurrent } from "@tauri-apps/api/window"; + +export const useWindow = () => { + const { updateIsOpenedConfigWindow } = useIsOpenedConfigWindow(); + + const createConfigWindow = async () => { + const main_window = getCurrent(); + if (store.config_window === null) { + const config_window = new WebviewWindow("vrct_config_window",{ + url: "./src-ui/windows/config_window/index.html", + center: true, + width: 1080, + height: 700, + }); + + config_window.once("tauri://created", function () { + store.config_window = config_window; + updateIsOpenedConfigWindow(true); + }); + config_window.once("tauri://error", function (e) { + console.log(e); + }); + + const unlisten_d = config_window.once("tauri://destroyed", (event) => { + store.config_window = null; + updateIsOpenedConfigWindow(false); + unlisten_d(); + }); + + main_window.onCloseRequested((event) => { + config_window.close(); + }); + } + }; + + const closeConfigWindow = () => { + store.config_window.close(); + }; + + return { createConfigWindow, closeConfigWindow }; +}; \ No newline at end of file diff --git a/src-ui/utils/variables.css b/src-ui/utils/variables.css new file mode 100644 index 00000000..1703fa73 --- /dev/null +++ b/src-ui/utils/variables.css @@ -0,0 +1,51 @@ +:root { + --primary_100_color: #b7ded8; + --primary_150_color: #a1d4cc; + --primary_200_color: #8acac0; + --primary_250_color: #76bfb4; + --primary_300_color: #61b4a7; + --primary_350_color: #55ac9e; + --primary_400_color: #48a495; + --primary_450_color: #429c8c; + --primary_500_color: #3b9483; + --primary_600_color: #368777; + --primary_650_color: #347f6f; + --primary_700_color: #317767; + --primary_750_color: #2f6f60; + --primary_800_color: #2c6759; + --primary_900_color: #214b3f; + + --sent_400_color: #6197b4; + --received_300_color: #a861b4; + + --dark_basic_text_color: #f2f2f2; + --dark_100_color: #f5f7fb; + --dark_200_color: #f1f2f6; + --dark_300_color: #e9eaee; + --dark_350_color: #d8d9dd; + --dark_400_color: #c7c8cc; + --dark_450_color: #b8b9bd; + --dark_500_color: #a9aaae; + --dark_600_color: #7f8084; + --dark_650_color: #75767a; + --dark_700_color: #6a6c6f; + --dark_725_color: #636467; + --dark_750_color: #5b5c5f; + --dark_775_color: #535457; + --dark_800_color: #4b4c4f; + --dark_825_color: #434447; + --dark_850_color: #3a3b3e; + --dark_863_color: #36373a; + --dark_875_color: #323336; + --dark_888_color: #2e2f32; + --dark_900_color: #292a2d; + --dark_925_color: #242528; + --dark_950_color: #1f2022; + --dark_975_color: #1a1b1d; + --dark_1000_color: #151517; + + + --main_window_topbar_height: 4.8rem; + --config_window_sidebar_width: 22rem; + --config_window_topbar_height: 5.2rem; +} \ No newline at end of file diff --git a/src-ui/windows/config_window/ConfigWindow.jsx b/src-ui/windows/config_window/ConfigWindow.jsx new file mode 100644 index 00000000..7820ffaf --- /dev/null +++ b/src-ui/windows/config_window/ConfigWindow.jsx @@ -0,0 +1,20 @@ +import "../../../locales/config.js"; +import "@utils/root.css"; + +import styles from "./ConfigWindow.module.scss"; + +import { Topbar } from "./topbar/Topbar"; +import { SidebarSection } from "./sidebar_section/SidebarSection"; +import { SettingSection } from "./setting_section/SettingSection.jsx"; + +export const ConfigWindow = () => { + return ( +
+ +
+ + +
+
+ ); +}; \ No newline at end of file diff --git a/src-ui/windows/config_window/ConfigWindow.module.scss b/src-ui/windows/config_window/ConfigWindow.module.scss new file mode 100644 index 00000000..45c74b22 --- /dev/null +++ b/src-ui/windows/config_window/ConfigWindow.module.scss @@ -0,0 +1,16 @@ +.container { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; + background-color: var(--dark_950_color); + overflow: hidden; +} + +.main_container { + width: 100%; + height: 100%; + display: flex; + padding-top: var(--config_window_topbar_height); +} \ No newline at end of file diff --git a/src-ui/windows/config_window/index.html b/src-ui/windows/config_window/index.html new file mode 100644 index 00000000..348eea1d --- /dev/null +++ b/src-ui/windows/config_window/index.html @@ -0,0 +1,14 @@ + + + + + + + Config Window + + + +
+ + + diff --git a/src-ui/windows/config_window/index.jsx b/src-ui/windows/config_window/index.jsx new file mode 100644 index 00000000..abf09419 --- /dev/null +++ b/src-ui/windows/config_window/index.jsx @@ -0,0 +1,15 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; +// import "../locales/config.js"; +import { ConfigWindow } from "./ConfigWindow"; +// import "./reset.css"; +// import "./root.css"; +// import { useWindow } from "@utils/useWindow"; + + +ReactDOM.createRoot(document.getElementById("root")).render( + + + , +); + diff --git a/src-ui/windows/config_window/setting_section/SettingSection.jsx b/src-ui/windows/config_window/setting_section/SettingSection.jsx new file mode 100644 index 00000000..cfa4c9a2 --- /dev/null +++ b/src-ui/windows/config_window/setting_section/SettingSection.jsx @@ -0,0 +1,12 @@ +import styles from "./SettingSection.module.scss"; +import { SettingBox } from "./setting_box/SettingBox"; + +export const SettingSection = () => { + return ( +
+
+ +
+
+ ); +}; \ No newline at end of file diff --git a/src-ui/windows/config_window/setting_section/SettingSection.module.scss b/src-ui/windows/config_window/setting_section/SettingSection.module.scss new file mode 100644 index 00000000..31ad539b --- /dev/null +++ b/src-ui/windows/config_window/setting_section/SettingSection.module.scss @@ -0,0 +1,10 @@ +.scroll_container { + width: 100%; + margin-left: 4rem; + overflow-y: auto; + overflow-x: hidden; +} + +.container { + margin: 4rem; +} \ No newline at end of file diff --git a/src-ui/windows/config_window/setting_section/setting_box/Appearance/Appearance.jsx b/src-ui/windows/config_window/setting_section/setting_box/Appearance/Appearance.jsx new file mode 100644 index 00000000..d67fa1cc --- /dev/null +++ b/src-ui/windows/config_window/setting_section/setting_box/Appearance/Appearance.jsx @@ -0,0 +1,25 @@ +import { useSettingBox } from "../useSettingBox"; +import { useSelectedMicDevice, useMicDeviceList } from "@store"; +export const Appearance = () => { + const { currentSelectedMicDevice, updateSelectedMicDevice } = useSelectedMicDevice(); + const { currentMicDeviceList } = useMicDeviceList(); + const { DropdownMenuContainer } = useSettingBox(); + + const selectFunction = (selected_data) => { + const asyncFunction = () => { + return new Promise((resolve) => { + setTimeout(() => { + resolve(selected_data.selected_id); + }, 3000); + }); + }; + updateSelectedMicDevice(asyncFunction); + }; + + return ( + <> + + + + ); +}; \ No newline at end of file diff --git a/src-ui/windows/config_window/setting_section/setting_box/SettingBox.jsx b/src-ui/windows/config_window/setting_section/setting_box/SettingBox.jsx new file mode 100644 index 00000000..65e30c0b --- /dev/null +++ b/src-ui/windows/config_window/setting_section/setting_box/SettingBox.jsx @@ -0,0 +1,18 @@ +import styles from "./SettingBox.module.scss"; +import { useSelectedConfigTab } from "@store"; + +import { Appearance } from "./appearance/Appearance"; +import { AboutVrct } from "./about_vrct/AboutVrct"; + +export const SettingBox = () => { + const { currentSelectedConfigTab } = useSelectedConfigTab(); + switch (currentSelectedConfigTab) { + case "appearance": + return ; + case "about_vrct": + return ; + + default: + return null; + } +}; \ No newline at end of file diff --git a/src-ui/windows/config_window/setting_section/setting_box/SettingBox.module.scss b/src-ui/windows/config_window/setting_section/setting_box/SettingBox.module.scss new file mode 100644 index 00000000..e69de29b diff --git a/src-ui/windows/config_window/setting_section/setting_box/about_vrct/AboutVrct.jsx b/src-ui/windows/config_window/setting_section/setting_box/about_vrct/AboutVrct.jsx new file mode 100644 index 00000000..d47d6396 --- /dev/null +++ b/src-ui/windows/config_window/setting_section/setting_box/about_vrct/AboutVrct.jsx @@ -0,0 +1,135 @@ +import styles from "./AboutVrct.module.scss"; +import dev_section_title from "@images/about_vrct/dev_section_title.png"; +import dev_misya from "@images/about_vrct/dev_misya.png"; +import dev_shiina from "@images/about_vrct/dev_shiina.png"; +import vrct_logo_for_about_vrct from "@images/about_vrct/vrct_logo_for_about_vrct.png"; +import contributors_section_title from "@images/about_vrct/contributors_section_title.png"; +import contributors_members from "@images/about_vrct/contributors_members.png"; +import localization_section_title from "@images/about_vrct/localization_section_title.png"; +import localization_members from "@images/about_vrct/localization_members.png"; + +import special_thanks_section_title from "@images/about_vrct/special_thanks_section_title.png"; +import special_thanks_members from "@images/about_vrct/special_thanks_members.png"; +import special_thanks_message_en from "@images/about_vrct/special_thanks_message_en.png"; +import special_thanks_message_ja from "@images/about_vrct/special_thanks_message_ja.png"; + +import poster_showcase_section_title from "@images/about_vrct/poster_showcase_section_title.png"; + +import vrchat_disclaimer from "@images/about_vrct/vrchat_disclaimer.png"; + +import clsx from "clsx"; +import { useTranslation } from "react-i18next"; +import { useUiLanguage } from "@store"; +import { PosterShowcaseContents } from "./poster_showcase_contents/PosterShowcaseContents"; + +export const AboutVrct = () => { + const { t } = useTranslation(); + const { currentUiLanguage } = useUiLanguage(); + return ( +
+
+ +
+
+ + + +
+
+ + +
+
+
+ +
+ +
+ + + + +
+
+ +
+ +
+ + + + + + + +
+
+ +
+ + +
+ +
+ + + { + currentUiLanguage === "ja" + ? + : + } +
+ + +
+ + +
+ +
+ +
+ + +
+ ); +}; + +import dev_x_icon from "@images/about_vrct/dev_x_icon.png"; +import dev_github_icon from "@images/about_vrct/dev_github_icon.png"; +import contributors_x_icon from "@images/about_vrct/contributors_x_icon.png"; +import contributors_github_icon from "@images/about_vrct/contributors_github_icon.png"; + +import project_link_booth from "@images/about_vrct/project_link_booth.png"; +import project_link_documents from "@images/about_vrct/project_link_documents.png"; +import project_link_vrct_github from "@images/about_vrct/project_link_vrct_github.png"; +import project_link_contact_us from "@images/about_vrct/project_link_contact_us.png"; + +const about_vrct_links = { + dev_misya_x: { img: dev_x_icon, href: "https://twitter.com/misya_ai" }, + dev_misya_github: { img: dev_github_icon, href: "https://github.com/misyaguziya" }, + dev_shiina_x: { img: dev_x_icon, href: "https://twitter.com/Shiina_12siy" }, + + project_link_booth: { img: project_link_booth, href: "https://misyaguziya.booth.pm/items/5155325" }, + project_link_documents: { img: project_link_documents, href: "https://mzsoftware.notion.site/VRCT-Documents-be79b7a165f64442ad8f326d86c22246" }, + project_link_vrct_github: { img: project_link_vrct_github, href: "https://github.com/misyaguziya/VRCT" }, + project_link_contact_us: { img: project_link_contact_us, href: "https://docs.google.com/forms/d/e/1FAIpQLSei-xoydOY60ivXqhOjaTzNN8PiBQIDcNhzfy6cw2sjYkcg_g/viewform" }, + + contributors_done_san_x: { img: contributors_x_icon, href: "https://twitter.com/done_vrc" }, + contributors_iya_x: { img: contributors_x_icon, href: "https://twitter.com/IYAA_HHHH" }, + contributors_rera_x: { img: contributors_x_icon, href: "https://twitter.com/rerassi" }, + contributors_rera_github: { img: contributors_github_icon, href: "https://github.com/soumt-r" }, + contributors_poposuke_x: { img: contributors_x_icon, href: "https://twitter.com/sig_popo" }, + contributors_kumaguma_x: { img: contributors_x_icon, href: "https://twitter.com/K_kumaguma_A" }, +}; + +const OpenLinkContainer = ({className, href_id}) => { + const href = about_vrct_links[href_id].href; + const img = about_vrct_links[href_id].img; + return ( + + {/* for adjust size to their parent component's width. */} + + + ); +}; \ No newline at end of file diff --git a/src-ui/windows/config_window/setting_section/setting_box/about_vrct/AboutVrct.module.scss b/src-ui/windows/config_window/setting_section/setting_box/about_vrct/AboutVrct.module.scss new file mode 100644 index 00000000..2d7c43b4 --- /dev/null +++ b/src-ui/windows/config_window/setting_section/setting_box/about_vrct/AboutVrct.module.scss @@ -0,0 +1,171 @@ +.container { + display: flex; + gap: 2.2rem; + flex-direction: column; + width: 72rem; + // background-color: gray; +} + +.section_title { + height: 1.2rem; + object-fit: contain; + object-position: left; + &.the_developers { + margin-bottom: 0.8rem; + } + &.contributors { + margin-bottom: 0.8rem; + } + &.special_thanks { + margin-bottom: 0.6rem; + } + &.poster_showcase { + margin-bottom: 0.6rem; + } +} + +.dev_section { + display: flex; + flex-direction: column; +} +.dev_section_wrapper { + display: flex; + justify-content: space-between; +} +.dev_card_wrapper { + width: 34.6rem; + position: relative; +} +.dev_card_img { + width: 100%; +} + +@mixin dev_sns_styles($right) { + position: absolute; + right: $right; + bottom: 1.2rem; + width: 2.8rem; + padding: 0.4rem; + border-radius: 0.4rem; + &:hover { + background-color: var(--dark_800_color); + } + &:active { + background-color: var(--dark_900_color) + } +} +.dev_misya_x { + @include dev_sns_styles(6rem); +} +.dev_misya_github { + @include dev_sns_styles(3rem); +} +.dev_shiina_x { + @include dev_sns_styles(3rem); +} + + +.project_links_and_logo_section { + display: flex; + flex-direction: row; + justify-content: space-between; + text-align: center; + padding: 0 5.5rem; +} +.about_vrct_logo { + width: 20rem; + object-fit: contain; +} +.project_links_wrapper { + display: flex; + flex-direction: column; + gap: 0.2rem; + align-items: start; +} + +.project_link { + height: 2.6rem; + padding: 0.4rem 1rem; + border-radius: 0.4rem; + &:hover { + background-color: var(--dark_850_color); + } + &:active { + background-color: var(--dark_900_color) + } +} + +.contributors_img_wrapper { + position: relative; +} +.contributors_img { + width: 100%; +} + +@mixin contributors_sns_styles($top, $left) { + position: absolute; + left: $left; + top: $top; + width: 2.4rem; + padding: 0.4rem; + border-radius: 0.4rem; + &:hover { + background-color: var(--dark_825_color); + } + &:active { + background-color: var(--dark_888_color) + } +} + +$first_line_top: 6.2rem; +.contributors_done_san_x { + @include contributors_sns_styles($first_line_top, 2rem); +} +.contributors_iya_x { + @include contributors_sns_styles($first_line_top, 27.6rem); +} +.contributors_rera_x { + @include contributors_sns_styles($first_line_top, 52.2rem); +} +.contributors_rera_github { + @include contributors_sns_styles($first_line_top, 55rem); +} + +$second_line_top: 16.6rem; +.contributors_poposuke_x { + @include contributors_sns_styles($second_line_top, 14.8rem); +} +.contributors_kumaguma_x { + @include contributors_sns_styles($second_line_top, 40.8rem); +} + +.localization_section { + display: flex; + flex-direction: column; +} +.localization_members_img { + width: 100%; +} + +.special_thanks_section { + display: flex; + flex-direction: column; +} +.special_thanks_members_img { + width: 100%; + margin-bottom: 0.4rem; +} +.special_thanks_message_img { + width: 100%; +} + + +.poster_showcase_section { + display: flex; + flex-direction: column; +} + +.vrchat_disclaimer { + width: 100%; + margin-top: 8rem; +} \ No newline at end of file diff --git a/src-ui/windows/config_window/setting_section/setting_box/about_vrct/poster_showcase_contents/PosterShowcaseContents.jsx b/src-ui/windows/config_window/setting_section/setting_box/about_vrct/poster_showcase_contents/PosterShowcaseContents.jsx new file mode 100644 index 00000000..25bed537 --- /dev/null +++ b/src-ui/windows/config_window/setting_section/setting_box/about_vrct/poster_showcase_contents/PosterShowcaseContents.jsx @@ -0,0 +1,12 @@ +import styles from "./PosterShowcaseContents.module.scss"; +import { PostersContents } from "./posters_contents/PostersContents"; +import { PosterShowcaseWorldsContents } from "./poster_showcase_worlds_contents/PosterShowcaseWorldsContents"; + +export const PosterShowcaseContents = () => { + return ( +
+ + +
+ ); +}; \ No newline at end of file diff --git a/src-ui/windows/config_window/setting_section/setting_box/about_vrct/poster_showcase_contents/PosterShowcaseContents.module.scss b/src-ui/windows/config_window/setting_section/setting_box/about_vrct/poster_showcase_contents/PosterShowcaseContents.module.scss new file mode 100644 index 00000000..c7b760b7 --- /dev/null +++ b/src-ui/windows/config_window/setting_section/setting_box/about_vrct/poster_showcase_contents/PosterShowcaseContents.module.scss @@ -0,0 +1,6 @@ +.container { + display: flex; + justify-content: space-between; + align-items: start; + gap: 2rem; +} \ No newline at end of file diff --git a/src-ui/windows/config_window/setting_section/setting_box/about_vrct/poster_showcase_contents/poster_showcase_worlds_contents/PosterShowcaseWorldsContents.jsx b/src-ui/windows/config_window/setting_section/setting_box/about_vrct/poster_showcase_contents/poster_showcase_worlds_contents/PosterShowcaseWorldsContents.jsx new file mode 100644 index 00000000..c088040f --- /dev/null +++ b/src-ui/windows/config_window/setting_section/setting_box/about_vrct/poster_showcase_contents/poster_showcase_worlds_contents/PosterShowcaseWorldsContents.jsx @@ -0,0 +1,91 @@ +import clsx from "clsx"; +import styles from "./PosterShowcaseWorldsContents.module.scss"; +import { usePosterShowcaseWorldPageIndex } from "@store"; +const images = import.meta.glob("@images/about_vrct/showcased_worlds/*.{png,jpg,jpeg,svg}", { eager: true }); + +const getImageByFileName = (file_name) => { + const imagePath = Object.keys(images).find((path) => path.includes(file_name)); + return imagePath ? images[imagePath]?.default : null; +}; + +import poster_showcase_worlds_settings from "./poster_showcase_worlds_settings"; +import { chunkArray } from "@utils/chunkArray"; + +export const PosterShowcaseWorldsContents = () => { + const { currentPosterShowcaseWorldPageIndex } = usePosterShowcaseWorldPageIndex(); + const poster_showcase_world_images = poster_showcase_worlds_settings.map((setting) => ({ + img: getImageByFileName(setting.image_file_name), + x_post_num: setting.x_post_num + })); + + const chunked_poster_showcase_world_images = chunkArray(poster_showcase_world_images, 8); + const target_poster_showcase_world_images = chunked_poster_showcase_world_images[currentPosterShowcaseWorldPageIndex]; + + + return ( +
+
+ {target_poster_showcase_world_images.map((poster, index) => { + let content = ( +
+ +
+ ); + if (poster.x_post_num !== null) { + content = ( + + {content} + + ); + } + const class_names = clsx(styles.poster_showcase_world_wrapper, { + [styles.clickable]: (poster.x_post_num !== null) + }); + return ( +
+ {content} +
+ ); + })} +
+ +
+ ); +}; + +import chat_white_square from "@images/chato_white_square.png"; +import { useEffect } from "react"; +import { randomIntMinMax } from "@utils/randomIntMinMax"; +const PosterShowcaseWorldsPagination = ({ page_length }) => { + const { currentPosterShowcaseWorldPageIndex, updatePosterShowcaseWorldPageIndex } = usePosterShowcaseWorldPageIndex(); + + useEffect(() => { + updatePosterShowcaseWorldPageIndex(randomIntMinMax(page_length -1)); + },[page_length]); + + const setPage = (index) => { + updatePosterShowcaseWorldPageIndex(index); + }; + + const getClassNames = (index, baseClass) => clsx(baseClass, { + [styles.is_active]: (currentPosterShowcaseWorldPageIndex === index), + }); + + return ( +
+ {[...Array(page_length).keys()].map((index) => { + return ( +
setPage(index)}> +
+ +
+
+
+

{index + 1}

+
+
+ ); + })} +
+ ); +}; \ No newline at end of file diff --git a/src-ui/windows/config_window/setting_section/setting_box/about_vrct/poster_showcase_contents/poster_showcase_worlds_contents/PosterShowcaseWorldsContents.module.scss b/src-ui/windows/config_window/setting_section/setting_box/about_vrct/poster_showcase_contents/poster_showcase_worlds_contents/PosterShowcaseWorldsContents.module.scss new file mode 100644 index 00000000..a8afb0d0 --- /dev/null +++ b/src-ui/windows/config_window/setting_section/setting_box/about_vrct/poster_showcase_contents/poster_showcase_worlds_contents/PosterShowcaseWorldsContents.module.scss @@ -0,0 +1,123 @@ +.container { + display: flex; + flex-direction: column; + flex: 1; + gap: 1rem; + justify-content: space-between; +} +$image_height: 2.8rem; +$y_padding: 0.4rem; +$image_height_gap: 0.4rem; +.poster_showcase_world_container { + display: flex; + flex-direction: column; + align-items: stretch; + gap: $image_height_gap; + height: calc( (($image_height + ($y_padding*2)) * 8) + ($image_height_gap * (8 - 1)) ); +} +.poster_showcase_world_wrapper { + display: flex; + padding: $y_padding 0.6rem $y_padding 0.8rem; + border-radius: 0.4rem 0 0 0.4rem; + &.clickable { + cursor: pointer; + &:hover { + background-color: var(--dark_850_color); + } + &:active { + background-color: var(--dark_925_color); + } + } + +} +.poster_showcase_world_img { + height: $image_height; +} + +.pagination_container { + display: flex; + justify-content: space-between; + gap: 6%; + margin: 0 2.6rem; +} + +$animation_duration: .15s; +.pagination_box { + width: 100%; + cursor: pointer; + &:active .pagination_chato_img { + animation: tremble_animation $animation_duration ease-out; + } + &:active.is_active .pagination_chato_img { + transform: translate(-50%, -50%) rotate(-22deg); + } + &.is_active .pagination_chato_img { + top: 48%; + animation: rotate_animation $animation_duration ease-out; + } + &:hover { + & .pagination_chato_img { + top: 108%; + } + &.is_active .pagination_chato_img { + animation: tremble_animation $animation_duration ease-out; + } + } +} + +.indicator_box { + display: flex; + flex-direction: column; + align-items: center; + width: 100%; +} + +.indicator { + width: 100%; + height: 0.2rem; + background-color: var(--dark_800_color); + &.is_active { + background-color: var(--primary_400_color); + } +} + +.pagination_num { + font-size: 1.8rem; + padding: 1rem; + color: var(--dark_600_color); + &.is_active { + color: var(--primary_300_color); + } +} + +.chato_box { + position: relative; + width: 100%; + height: 6rem; + overflow: hidden; +} + +.pagination_chato_img { + position: absolute; + top: 200%; + left: 51%; + transform: translate(-50%, -50%) rotate(22deg); + width: 2.8rem; + transition: top $animation_duration ease-out; +} +@keyframes rotate_animation { + 0% { + transform: translate(-50%, -50%) rotate(22deg); + } + 100% { + transform: translate(-50%, -50%) rotate(360deg + 22deg); + } +} + +@keyframes tremble_animation { + 0% { left: 51%; } + 25% { left: 55%; } + 50% { left: 45%; } + 75% { left: 48%; } + 100% { left: 51%; } +} \ No newline at end of file diff --git a/src-ui/windows/config_window/setting_section/setting_box/about_vrct/poster_showcase_contents/poster_showcase_worlds_contents/poster_showcase_worlds_settings.js b/src-ui/windows/config_window/setting_section/setting_box/about_vrct/poster_showcase_contents/poster_showcase_worlds_contents/poster_showcase_worlds_settings.js new file mode 100644 index 00000000..654c2286 --- /dev/null +++ b/src-ui/windows/config_window/setting_section/setting_box/about_vrct/poster_showcase_contents/poster_showcase_worlds_contents/poster_showcase_worlds_settings.js @@ -0,0 +1,63 @@ +const poster_showcase_worlds_settings = [ + // トサカひよ + { image_file_name: "kokekkopiyopiyo", x_post_num: "1779076974369276014" }, + + // MiuJepang + { image_file_name: "ippaidou", x_post_num: "1787801976354513319" }, + { image_file_name: "nihongokurabu", x_post_num: "1779004631936614893" }, + { image_file_name: "language_exchange_tervern", x_post_num: "1779749425923150317" }, + { image_file_name: "japanese_culture_osenbeito", x_post_num: "1788522972409721137" }, + { image_file_name: "silakan_datang_ke_rumahku", x_post_num: "1788522607631056941" }, + { image_file_name: "uj_club", x_post_num: "1780791654196388201" }, + { image_file_name: "sushi_stand_guruguru", x_post_num: "1788523302404952218" }, + { image_file_name: "sushi_guru_annex", x_post_num: null }, + + // poposuke_sig + { image_file_name: "usanezumi_shrine2", x_post_num: "1781224020383506649" }, + + // KUROINU_YOUHEI + { image_file_name: "kuroinu_work_room", x_post_num: "1779750007564112146" }, + + // いちや_ICHIYA + { image_file_name: "ehon_no_heikousekai_jimusho", x_post_num: "1780792306976850285" }, + { image_file_name: "ikoiba", x_post_num: "1782723006923780580" }, + { image_file_name: "kimodameshi", x_post_num: "1781224391692714133" }, + { image_file_name: "parallel_collar", x_post_num: null }, + + // HayaTikaze + { image_file_name: "study_japanese_world_japanichijou", x_post_num: "1781539871829766550" }, + + // aji_3 + { image_file_name: "yuttari_eikaiwa", x_post_num: "1779002892999078046" }, + + // 八葉そるち + { image_file_name: "re_yatuha_room", x_post_num: "1779830390435590196" }, + + // chakamoto + { image_file_name: "chakachaka_multipurpose_room", x_post_num: null }, + + // MloYolM (よるむ) + { image_file_name: "cafe_cian", x_post_num: "1787802552907739504" }, + + // ミラクル・オルカ + { image_file_name: "mamehinata_dogrun", x_post_num: "1782723423179100471" }, + + // いんく(Eenkoo) + { image_file_name: "tyuuniti_kouryuukai", x_post_num: null }, + + // 1ban_meno + { image_file_name: "bar_asagao", x_post_num: "1788523857642758370" }, + + // 沈黙静寂 + { image_file_name: "monogatari_meetup", x_post_num: "1781538415789674976" }, + + // tommie_500 + { image_file_name: "stretch_club_starting_from_minus", x_post_num: null }, + + // MiMi_Sorahana # VRC日韓交流会 (KRJPEX.1355) + { image_file_name: "kr_jp_exchange", x_post_num: null }, + + // Ein(アイン) + { image_file_name: "smokerz_guild_v2", x_post_num: null }, +]; +export default poster_showcase_worlds_settings; \ No newline at end of file diff --git a/src-ui/windows/config_window/setting_section/setting_box/about_vrct/poster_showcase_contents/posters_contents/PostersContents.jsx b/src-ui/windows/config_window/setting_section/setting_box/about_vrct/poster_showcase_contents/posters_contents/PostersContents.jsx new file mode 100644 index 00000000..37a508b6 --- /dev/null +++ b/src-ui/windows/config_window/setting_section/setting_box/about_vrct/poster_showcase_contents/posters_contents/PostersContents.jsx @@ -0,0 +1,69 @@ +import clsx from "clsx"; +import styles from "./PostersContents.module.scss"; +import { useUiLanguage } from "@store"; + +import { useVrctPosterIndex } from "@store"; +import ArrowLeftSvg from "@images/arrow_left.svg?react"; + +import iya_vrct_poster_ja from "@images/about_vrct/vrct_posters/iya_vrct_poster_ja.png"; +import iya_vrct_poster_en from "@images/about_vrct/vrct_posters/iya_vrct_poster_en.png"; +import iya_vrct_poster_cn from "@images/about_vrct/vrct_posters/iya_vrct_poster_cn.png"; +import iya_vrct_poster_ko from "@images/about_vrct/vrct_posters/iya_vrct_poster_ko.png"; +import iya_vrct_manga_ja from "@images/about_vrct/vrct_posters/iya_vrct_manga_ja.png"; +import iya_vrct_manga_en from "@images/about_vrct/vrct_posters/iya_vrct_manga_en.png"; +import iya_vrct_manga_ko from "@images/about_vrct/vrct_posters/iya_vrct_manga_ko.png"; + +const poster_images = [ + { img: iya_vrct_poster_ja, poster_type: "poster" }, + { img: iya_vrct_poster_en, poster_type: "poster" }, + { img: iya_vrct_poster_cn, poster_type: "poster" }, + { img: iya_vrct_poster_ko, poster_type: "poster" }, + { img: iya_vrct_manga_ja, poster_type: "manga" }, + { img: iya_vrct_manga_en, poster_type: "manga" }, + { img: iya_vrct_manga_ko, poster_type: "manga" }, +]; + +import poster_images_authors_ja from "@images/about_vrct/vrct_posters/authors/poster_images_authors_ja.png"; +import poster_images_authors_en from "@images/about_vrct/vrct_posters/authors/poster_images_authors_en.png"; +import poster_images_authors_m_ja from "@images/about_vrct/vrct_posters/authors/poster_images_authors_m_ja.png"; +import poster_images_authors_m_en from "@images/about_vrct/vrct_posters/authors/poster_images_authors_m_en.png"; + +export const PostersContents = () => { + const { currentVrctPosterIndex, updateVrctPosterIndex } = useVrctPosterIndex(); + const { currentUiLanguage } = useUiLanguage(); + + + const updateIndex = (delta) => { + const newIndex = (currentVrctPosterIndex + delta + poster_images.length) % poster_images.length; + updateVrctPosterIndex(newIndex); + }; + + const current_poster = poster_images[currentVrctPosterIndex]; + const current_poster_authors_img_ja = (current_poster.poster_type === "poster") ? poster_images_authors_ja : poster_images_authors_m_ja; + const current_poster_authors_img_en = (current_poster.poster_type === "poster") ? poster_images_authors_en : poster_images_authors_m_en; + + return ( +
+
+ + + +
+ { + currentUiLanguage === "ja" + ? + : + } +
+ ); +}; diff --git a/src-ui/windows/config_window/setting_section/setting_box/about_vrct/poster_showcase_contents/posters_contents/PostersContents.module.scss b/src-ui/windows/config_window/setting_section/setting_box/about_vrct/poster_showcase_contents/posters_contents/PostersContents.module.scss new file mode 100644 index 00000000..739fe78d --- /dev/null +++ b/src-ui/windows/config_window/setting_section/setting_box/about_vrct/poster_showcase_contents/posters_contents/PostersContents.module.scss @@ -0,0 +1,46 @@ +.poster_pagination_container { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} +.poster_pagination_wrapper { + display: flex; +} + +$poster_img_width: 18rem; +.poster_img { + width: $poster_img_width; +} + +$poster_pagination_button_width: 4.6rem; +.poster_pagination_button { + width: $poster_pagination_button_width; + display: flex; + justify-content: center; + align-items: center; + color: var(--dark_700_color); + &:hover { + background-color: var(--dark_900_color); + } + &:active { + background-color: var(--dark_925_color); + } + &.poster_prev { + border-radius: 0.8rem 0 0 0.8rem; + } + &.poster_next { + border-radius: 0 0.8rem 0.8rem 0; + } +} + +.poster_pagination_svg { + width: 3.2rem; + &.poster_next_svg { + transform: rotate(180deg); + } +} + +.poster_authors_img { + width: $poster_img_width + $poster_pagination_button_width; +} diff --git a/src-ui/windows/config_window/setting_section/setting_box/components/dropdown_menu/DropdownMenu.jsx b/src-ui/windows/config_window/setting_section/setting_box/components/dropdown_menu/DropdownMenu.jsx new file mode 100644 index 00000000..8a90a5fe --- /dev/null +++ b/src-ui/windows/config_window/setting_section/setting_box/components/dropdown_menu/DropdownMenu.jsx @@ -0,0 +1,58 @@ +import styles from "./DropdownMenu.module.scss"; + +import clsx from "clsx"; + +import { useOpenedDropdownMenu } from "@store"; + +export const DropdownMenu = (props) => { + + const { updateOpenedDropdownMenu, currentOpenedDropdownMenu } = useOpenedDropdownMenu(); + const openDropdownMenu = () => { + updateOpenedDropdownMenu(props.dropdown_id); + }; + + const selectValue = (key) => { + updateOpenedDropdownMenu(""); + props.selectFunction({ + dropdown_id: props.dropdown_id, + selected_id: key, + }); + }; + + const dropdown_content_wrapper_class_name = clsx(styles["dropdown_content_wrapper"], { + [styles["is_opened"]]: (currentOpenedDropdownMenu === props.dropdown_id) ? true : false + }); + + const dropdown_toggle_button_class_name = clsx(styles["dropdown_toggle_button"], { + [styles["is_loading"]]: (props.state === "loading") ? true : false + }); + + + return ( +
+
+ {(props.state === "loading") + ?

Loading...

+ :

{props.list[props.selected_id]}

+ } + {(props.state === "loading") + ? + : null + } +
+
+
+ { + Object.entries(props.list).map(([key, value]) => { + return ( +
selectValue(key)}> +

{value}

+
+ ); + }) + } +
+
+
+ ); +}; \ No newline at end of file diff --git a/src-ui/windows/config_window/setting_section/setting_box/components/dropdown_menu/DropdownMenu.module.scss b/src-ui/windows/config_window/setting_section/setting_box/components/dropdown_menu/DropdownMenu.module.scss new file mode 100644 index 00000000..98fd69d0 --- /dev/null +++ b/src-ui/windows/config_window/setting_section/setting_box/components/dropdown_menu/DropdownMenu.module.scss @@ -0,0 +1,64 @@ +@import "@scss_mixins"; + +.container { + position: relative; +} + +.dropdown_toggle_button { + position: relative; + background-color: var(--dark_925_color); + min-width: 20rem; + padding: 0.6rem 0.8rem; + &:hover { + background-color: var(--dark_850_color); + } + &:active { + background-color: var(--dark_950_color); + } + &.is_loading { + pointer-events: none; + } +} + +.dropdown_selected_text { + font-size: 1.4rem; +} + +.dropdown_content_wrapper { + display: none; + position: absolute; + top: 100%; // Position it below the toggle button + left: 0; + width: 100%; + z-index: 1; + &.is_opened { + display: block; + } +} + +.dropdown_content { + background-color: var(--dark_900_color); + border: 0.1rem solid var(--dark_600_color); + display: flex; + flex-direction: column; + gap: 0.1rem; +} + +.value_button { + background-color: var(--dark_875_color); + padding: 0.8rem; + &:hover { + background-color: var(--dark_800_color); + } + &:active { + background-color: var(--dark_900_color); + } +} + +.value_text { + font-size: 1.2rem; +} + +.loader { + @include loader(2rem, 0.2rem, right, 0); +} \ No newline at end of file diff --git a/src-ui/windows/config_window/setting_section/setting_box/components/label_component/LabelComponent.jsx b/src-ui/windows/config_window/setting_section/setting_box/components/label_component/LabelComponent.jsx new file mode 100644 index 00000000..4f49e33e --- /dev/null +++ b/src-ui/windows/config_window/setting_section/setting_box/components/label_component/LabelComponent.jsx @@ -0,0 +1,10 @@ +import styles from "./LabelComponent.module.scss"; + +export const LabelComponent = (props) => { + return ( +
+

{props.label}

+

{props.desc}

+
+ ); +}; \ No newline at end of file diff --git a/src-ui/windows/config_window/setting_section/setting_box/components/label_component/LabelComponent.module.scss b/src-ui/windows/config_window/setting_section/setting_box/components/label_component/LabelComponent.module.scss new file mode 100644 index 00000000..b6baee06 --- /dev/null +++ b/src-ui/windows/config_window/setting_section/setting_box/components/label_component/LabelComponent.module.scss @@ -0,0 +1,3 @@ +.label_component { + +} \ No newline at end of file diff --git a/src-ui/windows/config_window/setting_section/setting_box/useSettingBox.jsx b/src-ui/windows/config_window/setting_section/setting_box/useSettingBox.jsx new file mode 100644 index 00000000..f311ffad --- /dev/null +++ b/src-ui/windows/config_window/setting_section/setting_box/useSettingBox.jsx @@ -0,0 +1,23 @@ +import styles from "./useSettingBox.module.scss"; +import { LabelComponent } from "./components/label_component/LabelComponent"; +import { DropdownMenu } from "./components/dropdown_menu/DropdownMenu"; +import { useOpenedDropdownMenu } from "@store"; + +export const useSettingBox = () => { + const { updateOpenedDropdownMenu } = useOpenedDropdownMenu(); + + const DropdownMenuContainer = (props) => { + const onMouseLeaveFunction = () => { + updateOpenedDropdownMenu(""); + }; + + return ( +
+ + +
+ ); + }; + + return { DropdownMenuContainer }; +}; \ No newline at end of file diff --git a/src-ui/windows/config_window/setting_section/setting_box/useSettingBox.module.scss b/src-ui/windows/config_window/setting_section/setting_box/useSettingBox.module.scss new file mode 100644 index 00000000..90cccd5f --- /dev/null +++ b/src-ui/windows/config_window/setting_section/setting_box/useSettingBox.module.scss @@ -0,0 +1,8 @@ +.container { + display: flex; + width: 100%; + justify-content: space-between; + align-items: center; + background-color: var(--dark_888_color); + padding: 2rem; +} \ No newline at end of file diff --git a/src-ui/windows/config_window/sidebar_section/SidebarSection.jsx b/src-ui/windows/config_window/sidebar_section/SidebarSection.jsx new file mode 100644 index 00000000..3c033b72 --- /dev/null +++ b/src-ui/windows/config_window/sidebar_section/SidebarSection.jsx @@ -0,0 +1,46 @@ +import styles from "./SidebarSection.module.scss"; + +export const SidebarSection = () => { + return ( +
+
+ + + + + + +
+
+ +
+
+ ); +}; + + +import clsx from "clsx"; +import { useTranslation } from "react-i18next"; +import { useSelectedConfigTab } from "@store"; + +const Tab = (props) => { + const { t } = useTranslation(); + const { updateSelectedConfigTab, currentSelectedConfigTab } = useSelectedConfigTab(); + const onclickFunction = () => { + updateSelectedConfigTab(props.tab_id); + }; + + const tab_container_class_names = clsx(styles["tab_container"], { + [styles["is_selected"]]: (currentSelectedConfigTab === props.tab_id) ? true : false + }); + const switch_indicator_class_names = clsx(styles["switch_indicator"], { + [styles["is_selected"]]: (currentSelectedConfigTab === props.tab_id) ? true : false + }); + + return ( +
+

{t(`config_window.side_menu_labels.${props.tab_id}`)}

+
+
+ ); +}; \ No newline at end of file diff --git a/src-ui/windows/config_window/sidebar_section/SidebarSection.module.scss b/src-ui/windows/config_window/sidebar_section/SidebarSection.module.scss new file mode 100644 index 00000000..fa0c7c49 --- /dev/null +++ b/src-ui/windows/config_window/sidebar_section/SidebarSection.module.scss @@ -0,0 +1,63 @@ +.container { + width: var(--config_window_sidebar_width); + flex-shrink: 0; + display: flex; + flex-direction: column; + justify-content: space-between; + padding: 5.8rem 0rem 5.8rem 2.8rem; + max-height: 60rem; +} + +.tabs_wrapper { + width: 100%; + display: flex; + flex-direction: column; + gap: 0.1rem; + flex: 1; +} + +.tab_container { + position: relative; + width: 100%; + display: flex; + justify-content: left; + align-items: center; + color: var(--dark_basic_text_color); + padding: 0.8rem 0 0.8rem 1.8rem; + cursor: pointer; + &:hover { + background-color: var(--dark_800_color); + } + &:active { + background-color: var(--dark_900_color); + } + &.is_selected { + background-color: inherit; + color: var(--primary_200_color); + cursor: default; + pointer-events: none; + } +} + +.switch_indicator { + display: none; + &.is_selected { + display: block; + position: absolute; + top: 50%; + left: 0rem; + transform: translate(-50%, -50%); + width: 0.2rem; + height: 2.6rem; + border-radius: 0.1rem; + background-color: var(--primary_300_color); + } +} + +.tab_text { + font-size: 1.8rem; +} + +.separated_tabs_wrapper { + // padding-bottom: 1.2rem; +} \ No newline at end of file diff --git a/src-ui/windows/config_window/topbar/Topbar.jsx b/src-ui/windows/config_window/topbar/Topbar.jsx new file mode 100644 index 00000000..636da096 --- /dev/null +++ b/src-ui/windows/config_window/topbar/Topbar.jsx @@ -0,0 +1,17 @@ +import styles from "./Topbar.module.scss"; + +import { TitleBox } from "./title_box/TitleBox"; +import { SectionTitleBox } from "./section_title_box/SectionTitleBox"; +import { CompactSwitchBox } from "./compact_switch_box/CompactSwitchBox"; + +export const Topbar = () => { + return ( +
+
+ + + +
+
+ ); +}; \ No newline at end of file diff --git a/src-ui/windows/config_window/topbar/Topbar.module.scss b/src-ui/windows/config_window/topbar/Topbar.module.scss new file mode 100644 index 00000000..d0cd2c64 --- /dev/null +++ b/src-ui/windows/config_window/topbar/Topbar.module.scss @@ -0,0 +1,12 @@ +.container { + width: 100%; + height: 0%; +} + +.wrapper { + height: var(--config_window_topbar_height); + background-color: var(--dark_850_color); + display: flex; + justify-content: space-between; + flex-shrink: 0; +} \ No newline at end of file diff --git a/src-ui/windows/config_window/topbar/compact_switch_box/CompactSwitchBox.jsx b/src-ui/windows/config_window/topbar/compact_switch_box/CompactSwitchBox.jsx new file mode 100644 index 00000000..580e2276 --- /dev/null +++ b/src-ui/windows/config_window/topbar/compact_switch_box/CompactSwitchBox.jsx @@ -0,0 +1,12 @@ +import { useTranslation } from "react-i18next"; + +import styles from "./CompactSwitchBox.module.scss"; + +export const CompactSwitchBox = () => { + const { t } = useTranslation(); + return ( +
+

{t("config_window.compact_mode")}

+
+ ); +}; \ No newline at end of file diff --git a/src-ui/windows/config_window/topbar/compact_switch_box/CompactSwitchBox.module.scss b/src-ui/windows/config_window/topbar/compact_switch_box/CompactSwitchBox.module.scss new file mode 100644 index 00000000..f824b7d0 --- /dev/null +++ b/src-ui/windows/config_window/topbar/compact_switch_box/CompactSwitchBox.module.scss @@ -0,0 +1,9 @@ +.container { + // flex: 0; + // width: 100%; + width: 14rem; + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} \ No newline at end of file diff --git a/src-ui/windows/config_window/topbar/section_title_box/SectionTitleBox.jsx b/src-ui/windows/config_window/topbar/section_title_box/SectionTitleBox.jsx new file mode 100644 index 00000000..90ac7570 --- /dev/null +++ b/src-ui/windows/config_window/topbar/section_title_box/SectionTitleBox.jsx @@ -0,0 +1,13 @@ +import { useTranslation } from "react-i18next"; +import styles from "./SectionTitleBox.module.scss"; +import { useSelectedConfigTab } from "@store"; + +export const SectionTitleBox = () => { + const { t } = useTranslation(); + const { currentSelectedConfigTab } = useSelectedConfigTab(); + return ( +
+

{t(`config_window.side_menu_labels.${currentSelectedConfigTab}`)}

+
+ ); +}; \ No newline at end of file diff --git a/src-ui/windows/config_window/topbar/section_title_box/SectionTitleBox.module.scss b/src-ui/windows/config_window/topbar/section_title_box/SectionTitleBox.module.scss new file mode 100644 index 00000000..bb022d2e --- /dev/null +++ b/src-ui/windows/config_window/topbar/section_title_box/SectionTitleBox.module.scss @@ -0,0 +1,13 @@ +.container { + flex: 1; + width: 100%; + height: 100%; + display: flex; + justify-content: left; + align-items: center; + padding-left: 2rem; +} + +.title { + font-size: 2.2rem; +} \ No newline at end of file diff --git a/src-ui/windows/config_window/topbar/title_box/TitleBox.jsx b/src-ui/windows/config_window/topbar/title_box/TitleBox.jsx new file mode 100644 index 00000000..32a1d5ad --- /dev/null +++ b/src-ui/windows/config_window/topbar/title_box/TitleBox.jsx @@ -0,0 +1,14 @@ +import { useTranslation } from "react-i18next"; + +import styles from "./TitleBox.module.scss"; +import chato_img from "@images/chato_white.png"; + +export const TitleBox = () => { + const { t } = useTranslation(); + return ( +
+ VRCT logo chato +

{t("config_window.config_title")}

+
+ ); +}; \ No newline at end of file diff --git a/src-ui/windows/config_window/topbar/title_box/TitleBox.module.scss b/src-ui/windows/config_window/topbar/title_box/TitleBox.module.scss new file mode 100644 index 00000000..95151fcf --- /dev/null +++ b/src-ui/windows/config_window/topbar/title_box/TitleBox.module.scss @@ -0,0 +1,19 @@ +.container { + // flex: 0; + width: var(--config_window_sidebar_width); + height: 100%; + display: flex; + justify-content: left; + align-items: center; + padding-left: 2.6rem; + gap: 1.4rem; +} + +.logo_chato { + width: 3.2rem; + padding-top: 0.6rem; +} + +.title { + font-size: 2.2rem; +} \ No newline at end of file diff --git a/src-ui/windows/main_window/MainWindow.jsx b/src-ui/windows/main_window/MainWindow.jsx new file mode 100644 index 00000000..7e391cd5 --- /dev/null +++ b/src-ui/windows/main_window/MainWindow.jsx @@ -0,0 +1,52 @@ +import { useEffect, useRef } from "react"; +import styles from "./MainWindow.module.scss"; +import { SidebarSection } from "./sidebar_section/SidebarSection"; +import { MainSection } from "./main_section/MainSection"; +import { useStartPython } from "@logics/useStartPython"; + +export const MainWindow = () => { + const { asyncStartPython } = useStartPython(); + const hasRunRef = useRef(false); + + useEffect(() => { + if (!hasRunRef.current) { + asyncStartPython(); + } + return () => hasRunRef.current = true; + }, []); + + return ( +
+ + + +
+ ); +}; + + +import { useTranslation } from "react-i18next"; +import { useIsOpenedConfigWindow } from "@store"; +import { useWindow } from "@utils/useWindow"; + +export const MainWindowCover = () => { + const { t } = useTranslation(); + const { currentIsOpenedConfigWindow } = useIsOpenedConfigWindow(); + const { closeConfigWindow } = useWindow(); + // console.log(currentIsOpenedConfigWindow); + if ( currentIsOpenedConfigWindow === false) return null; + + const closeSettingsWindow = () => closeConfigWindow(); + + return ( +
+

{t("main_window.cover_message")}

+ +
+ ); +}; \ No newline at end of file diff --git a/src-ui/windows/main_window/MainWindow.module.scss b/src-ui/windows/main_window/MainWindow.module.scss new file mode 100644 index 00000000..7a8b0027 --- /dev/null +++ b/src-ui/windows/main_window/MainWindow.module.scss @@ -0,0 +1,45 @@ +.container { + width: 100%; + height: 100%; + display: flex; + flex-direction: row; + justify-content: space-between; + background-color: var(--dark_888_color); + position: relative; +} + +.main_window_cover { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-color: (#000000cc); + display: flex; + flex-direction: column; + gap: 2rem; + justify-content: center; + align-items: center; + backdrop-filter: blur(0.8rem); + color: var(--dark_basic_text_color); +} + +.cover_message { + font-size: 2rem; + font-weight: 300; +} + +.close_settings_window_button { + font-size: 1.6rem; + font-weight: 300; + padding: 1rem 1.4rem; + border-radius: 0.4rem; + background-color: var(--dark_888_color); + cursor: pointer; + &:hover { + background-color: var(--dark_825_color); + } + &:active { + background-color: var(--dark_925_color); + } +} \ No newline at end of file diff --git a/src-ui/windows/main_window/index.jsx b/src-ui/windows/main_window/index.jsx new file mode 100644 index 00000000..07d4d1d2 --- /dev/null +++ b/src-ui/windows/main_window/index.jsx @@ -0,0 +1,11 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; +import "../../../locales/config.js"; +import "@utils/root.css"; +import { MainWindow } from "./MainWindow"; + +ReactDOM.createRoot(document.getElementById("root")).render( + + + , +); \ No newline at end of file diff --git a/src-ui/windows/main_window/main_section/MainSection.jsx b/src-ui/windows/main_window/main_section/MainSection.jsx new file mode 100644 index 00000000..2b62be6a --- /dev/null +++ b/src-ui/windows/main_window/main_section/MainSection.jsx @@ -0,0 +1,30 @@ +import styles from "./MainSection.module.scss"; + +import { TopBar } from "./top_bar/TopBar"; +import { MessageContainer } from "./message_container/MessageContainer"; +import { LanguageSelector } from "./language_selector/LanguageSelector"; + +import { useIsOpenedLanguageSelector } from "@store"; + +export const MainSection = () => { + + return ( +
+ + + +
+ ); +}; + +const HandleLanguageSelector = () => { + const { currentIsOpenedLanguageSelector } = useIsOpenedLanguageSelector(); + + if (currentIsOpenedLanguageSelector.your_language === true) { + return ; + } else if (currentIsOpenedLanguageSelector.target_language === true) { + return ; + } else { + return null; + } +}; \ No newline at end of file diff --git a/src-ui/windows/main_window/main_section/MainSection.module.scss b/src-ui/windows/main_window/main_section/MainSection.module.scss new file mode 100644 index 00000000..29a7907a --- /dev/null +++ b/src-ui/windows/main_window/main_section/MainSection.module.scss @@ -0,0 +1,13 @@ +.container { + position: relative; + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.language_selector_container { + width: 100%; + height: 100%; +} \ No newline at end of file diff --git a/src-ui/windows/main_window/main_section/language_selector/LanguageSelector.jsx b/src-ui/windows/main_window/main_section/language_selector/LanguageSelector.jsx new file mode 100644 index 00000000..a23faee3 --- /dev/null +++ b/src-ui/windows/main_window/main_section/language_selector/LanguageSelector.jsx @@ -0,0 +1,61 @@ +import { useTranslation } from "react-i18next"; + +import { language_list } from "@data"; +import styles from "./LanguageSelector.module.scss"; + +import { LanguageSelectorTopBar } from "./language_selector_top_bar/LanguageSelectorTopBar"; +export const LanguageSelector = ({ id }) => { + const { t } = useTranslation(); + + const languageTitles = { + "your_language": t("selectable_language_window.title_your_language"), + "target_language": t("selectable_language_window.title_target_language") + }; + + const language_selector_title = languageTitles[id] || ""; + + const groupLanguagesByFirstLetter = (languages) => { + return languages.reduce((acc, { language, country }) => { + const firstLetter = language[0].toUpperCase(); + if (!acc[firstLetter]) { + acc[firstLetter] = []; + } + acc[firstLetter].push({ language, country }); + return acc; + }, {}); + }; + + const groupedLanguages = groupLanguagesByFirstLetter(language_list); + + return ( +
+ +
+
+ {Object.entries(groupedLanguages).map(([letter, languages]) => ( + + ))} +
+
+
+ ); +}; + +const LanguageGroup = ({ letter, languages }) => { + return ( +
+

{letter}

+ {languages.map((languageData, index) => ( + + ))} +
+ ); +}; + +const LanguageButton = ({ languageData }) => { + return ( +
+

{languageData.language} ({languageData.country})

+
+ ); +}; \ No newline at end of file diff --git a/src-ui/windows/main_window/main_section/language_selector/LanguageSelector.module.scss b/src-ui/windows/main_window/main_section/language_selector/LanguageSelector.module.scss new file mode 100644 index 00000000..17845deb --- /dev/null +++ b/src-ui/windows/main_window/main_section/language_selector/LanguageSelector.module.scss @@ -0,0 +1,50 @@ +.container { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-color: var(--dark_875_color); + flex: 1; + overflow-y: hidden; +} + +.language_list_scroll_wrapper { + height: 100%; + overflow-y: auto; + padding: 1.4rem 1rem 8rem 1rem; +} + +.language_list { + column-count: auto; + column-width: 16rem; +} + +.language_each_letter_box { + break-inside: avoid-column; + margin-bottom: 1.4rem; + display: flex; + flex-direction: column; + gap: 0.1rem; +} + +.language_latter { + font-size: 1.4rem; + color: var(--dark_500_color); +} + +.language_button { + padding: 0.8rem 0.6rem; + cursor: pointer; + &:hover{ + background-color: var(--dark_825_color); + } + &:active{ + background-color: var(--dark_888_color); + } +} + +.language_label { + font-size: 1.4rem; + color: var(--dark_basic_text_color); +} \ No newline at end of file diff --git a/src-ui/windows/main_window/main_section/language_selector/language_selector_top_bar/LanguageSelectorTopBar.jsx b/src-ui/windows/main_window/main_section/language_selector/language_selector_top_bar/LanguageSelectorTopBar.jsx new file mode 100644 index 00000000..d1eecc73 --- /dev/null +++ b/src-ui/windows/main_window/main_section/language_selector/language_selector_top_bar/LanguageSelectorTopBar.jsx @@ -0,0 +1,23 @@ +import styles from "./LanguageSelectorTopBar.module.scss"; + +import { useIsOpenedLanguageSelector } from "@store"; + +export const LanguageSelectorTopBar = (props) => { + const { updateIsOpenedLanguageSelector } = useIsOpenedLanguageSelector(); + + const closeLanguageSelector = () => { + updateIsOpenedLanguageSelector({ + your_language: false, + target_language: false, + }); + }; + + return ( +
+
+

Go Back

+
+

{props.title}

+
+ ); +}; \ No newline at end of file diff --git a/src-ui/windows/main_window/main_section/language_selector/language_selector_top_bar/LanguageSelectorTopBar.module.scss b/src-ui/windows/main_window/main_section/language_selector/language_selector_top_bar/LanguageSelectorTopBar.module.scss new file mode 100644 index 00000000..1dc95be7 --- /dev/null +++ b/src-ui/windows/main_window/main_section/language_selector/language_selector_top_bar/LanguageSelectorTopBar.module.scss @@ -0,0 +1,32 @@ +.container { + height: var(--main_window_topbar_height); + background-color: var(--dark_850_color); + display: flex; + justify-content: center; + align-items: center; + position: relative; +} + +.title { + font-size: 2rem; + color: var(--dark_400_color); +} + +.go_back_button_wrapper { + position: absolute; + left: 0; + background-color: var(--dark_800_color); + padding: 1.2rem; + cursor: pointer; + &:hover{ + background-color: var(--dark_750_color); + } + &:active{ + background-color: var(--dark_875_color); + } +} + +.go_back_button_label { + font-size: 1.4rem; + color: var(--dark_400_color); +} \ No newline at end of file diff --git a/src-ui/windows/main_window/main_section/message_container/MessageContainer.jsx b/src-ui/windows/main_window/main_section/message_container/MessageContainer.jsx new file mode 100644 index 00000000..68e8875f --- /dev/null +++ b/src-ui/windows/main_window/main_section/message_container/MessageContainer.jsx @@ -0,0 +1,34 @@ +import { useResizable } from "react-resizable-layout"; + +import styles from "./MessageContainer.module.scss"; + +import { LogBox } from "./log_box/LogBox"; +import { MessageInputBox } from "./message_input_box/MessageInputBox"; + +export const MessageContainer = () => { + const { position, separatorProps } = useResizable({ + axis: "y", + reverse: true + }); + + return ( +
+ + +
+ +
+
+ ); +}; + +const Separator = ({ ...props }) => { + return ( +
+ +
+ ); +}; \ No newline at end of file diff --git a/src-ui/windows/main_window/main_section/message_container/MessageContainer.module.scss b/src-ui/windows/main_window/main_section/message_container/MessageContainer.module.scss new file mode 100644 index 00000000..2bd2288b --- /dev/null +++ b/src-ui/windows/main_window/main_section/message_container/MessageContainer.module.scss @@ -0,0 +1,36 @@ +.container { + height: 0%; + display: flex; + flex-direction: column; + flex: 1; + padding: 0 1.6rem 1rem 1.6rem; +} + +.separator { + position: relative; + width: 100%; + height: 0.8rem; + cursor: row-resize; + flex-shrink: 0; + &:hover { + & .separator_line { + background-color: var(--primary_300_color); + } + } +} +.separator_line { + position: absolute; + bottom: 0%; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + height: 50%; + width: 99%; + transition: background-color .15s ease-out; +} + +.message_box_resize_wrapper { + height: 10rem; + min-height: 3.8rem; + max-height: 80%; +} \ No newline at end of file diff --git a/src-ui/windows/main_window/main_section/message_container/log_box/LogBox.jsx b/src-ui/windows/main_window/main_section/message_container/log_box/LogBox.jsx new file mode 100644 index 00000000..2dbeee71 --- /dev/null +++ b/src-ui/windows/main_window/main_section/message_container/log_box/LogBox.jsx @@ -0,0 +1,47 @@ +import { useEffect, useLayoutEffect, useRef, useState } from "react"; +import styles from "./LogBox.module.scss"; +import { useMessageLogs, store } from "@store"; +import { MessageContainer } from "./message_container/MessageContainer"; +import { scrollToBottom } from "@logics/scrollToBottom"; + +export const LogBox = () => { + const { currentMessageLogs } = useMessageLogs(); + const log_container_ref = useRef(null); + const [is_scrolling, setIsScrolling] = useState(false); + + useLayoutEffect(() => { + store.log_box_ref = log_container_ref; + if (!is_scrolling) { + scrollToBottom(store.log_box_ref, true); + } + }, [currentMessageLogs]); + + useEffect(() => { + const handleScroll = () => { + const element = log_container_ref.current; + const currentScrollTop = element.scrollTop; + const at_bottom = element.scrollHeight - currentScrollTop === element.clientHeight; + + if (at_bottom) { + setIsScrolling(false); + } else { + setIsScrolling(true); + } + }; + + const element = log_container_ref.current; + element.addEventListener("scroll", handleScroll); + + return () => { + element.removeEventListener("scroll", handleScroll); + }; + }, []); + + return ( +
+ {currentMessageLogs.map(message_data => ( + + ))} +
+ ); +}; \ No newline at end of file diff --git a/src-ui/windows/main_window/main_section/message_container/log_box/LogBox.module.scss b/src-ui/windows/main_window/main_section/message_container/log_box/LogBox.module.scss new file mode 100644 index 00000000..1a29c1dc --- /dev/null +++ b/src-ui/windows/main_window/main_section/message_container/log_box/LogBox.module.scss @@ -0,0 +1,13 @@ +.container { + height: 100%; + width: 100%; + flex: 1; + background-color: var(--dark_900_color); + overflow: auto; + border-radius: 0.8rem; + padding: 1rem; +} + +.text { + overflow-wrap: break-word; +} \ No newline at end of file diff --git a/src-ui/windows/main_window/main_section/message_container/log_box/message_container/MessageContainer.jsx b/src-ui/windows/main_window/main_section/message_container/log_box/message_container/MessageContainer.jsx new file mode 100644 index 00000000..7ce032a7 --- /dev/null +++ b/src-ui/windows/main_window/main_section/message_container/log_box/message_container/MessageContainer.jsx @@ -0,0 +1,44 @@ +import { useTranslation } from "react-i18next"; +import clsx from "clsx"; +import styles from "./MessageContainer.module.scss"; + +export const MessageContainer = ({ messages, status, category, created_at }) => { + const { t } = useTranslation(); + + const is_translated_exist = messages.translated.length >= 1; + const is_pending = status === "pending"; + const is_sent_message = category === "sent"; + const category_text = is_sent_message ? t("main_window.textbox_tab_sent") : t("main_window.textbox_tab_received"); + + const message_type_class_name = clsx({ + [styles.sent_message]: is_sent_message, + [styles.received_message]: !is_sent_message, + }); + + return ( +
+
+

{created_at}

+

{category_text}

+ {is_sent_message && is_pending && } +
+
+ {is_translated_exist + ? + :

{messages.original}

+ } +
+
+ ); +}; + +const WithTranslatedMessages = ({ messages }) => { + return ( + <> +

{messages.original}

+ {messages.translated.map((message, index) => ( +

{message}

+ ))} + + ); +}; diff --git a/src-ui/windows/main_window/main_section/message_container/log_box/message_container/MessageContainer.module.scss b/src-ui/windows/main_window/main_section/message_container/log_box/message_container/MessageContainer.module.scss new file mode 100644 index 00000000..66bd5c92 --- /dev/null +++ b/src-ui/windows/main_window/main_section/message_container/log_box/message_container/MessageContainer.module.scss @@ -0,0 +1,70 @@ +@import "@scss_mixins"; + +.container { + margin-bottom: 1rem; + width: 100%; + flex-direction: column; + display: flex; + justify-content: center; + &.sent_message { + align-items: end; + } + &.received_message { + align-items: start; + } +} + +.info_box { + position: relative; + display: flex; + gap: 0.8rem; + justify-content: center; + &.sent_message { + align-items: end; + } + &.received_message { + flex-flow: row-reverse; + align-items: start; + } +} + +.loader { + @include loader(0.8rem, 0.1rem, left, -1rem); +} + +.time { + font-size: 1rem; + color: var(--dark_600_color); +} + +.category { + font-size: 1rem; + &.sent_message { + color: var(--sent_400_color); + } + &.received_message { + align-items: start; + color: var(--received_300_color); + } +} + +.message_box { + display: flex; + flex-direction: column; + &.sent_message { + align-items: end; + } + &.received_message { + align-items: start; + } +} + +.message_main { + color: var(--dark_basic_text_color); + font-size: 1.4rem; +} + +.message_second { + color: var(--dark_450_color); + font-size: 1rem; +} \ No newline at end of file diff --git a/src-ui/windows/main_window/main_section/message_container/message_input_box/MessageInputBox.jsx b/src-ui/windows/main_window/main_section/message_container/message_input_box/MessageInputBox.jsx new file mode 100644 index 00000000..951ec4b8 --- /dev/null +++ b/src-ui/windows/main_window/main_section/message_container/message_input_box/MessageInputBox.jsx @@ -0,0 +1,45 @@ +import { useState } from "react"; +import styles from "./MessageInputBox.module.scss"; +import SendMessageSvg from "@images/send_message.svg?react"; +import { useMessage } from "@logics/useMessage"; +import { store } from "@store"; +import { scrollToBottom } from "@logics/scrollToBottom"; + + +export const MessageInputBox = () => { + const [inputValue, setInputValue] = useState(""); + const { sendMessage } = useMessage(); + + const onSubmitFunction = (e) => { + e.preventDefault(); + sendMessage(inputValue); + + setTimeout(() => { + scrollToBottom(store.log_box_ref); + }, 10); + + }; + + const onChangeFunction = (e) => { + setInputValue(e.currentTarget.value); + }; + + return ( +
+
+