diff --git a/gui/package.json b/gui/package.json index 00deaa49e..8bc08e850 100644 --- a/gui/package.json +++ b/gui/package.json @@ -12,7 +12,7 @@ "@react-hookz/deep-equal": "^3.0.3", "@react-three/drei": "^9.114.3", "@react-three/fiber": "^8.17.10", - "@sentry/react": "^9.9.0", + "@sentry/react": "10.29.0", "@sentry/vite-plugin": "^2.22.7", "@tailwindcss/typography": "^0.5.15", "@tanstack/react-query": "^5.48.0", @@ -71,7 +71,7 @@ }, "devDependencies": { "@dword-design/eslint-plugin-import-alias": "^4.0.9", - "@openapi-codegen/cli": "^2.0.2", + "@openapi-codegen/cli": "^3.1.0", "@openapi-codegen/typescript": "^8.0.2", "@stylistic/eslint-plugin": "^5.5.0", "@tailwindcss/forms": "^0.5.9", @@ -84,19 +84,18 @@ "@types/react-modal": "3.16.3", "@types/semver": "^7.5.8", "@types/three": "^0.163.0", - "@typescript-eslint/eslint-plugin": "^7.18.0", - "@typescript-eslint/parser": "^7.18.0", + "@typescript-eslint/eslint-plugin": "^8.48.1", + "@typescript-eslint/parser": "^8.48.1", "@vitejs/plugin-react": "^4.3.2", "autoprefixer": "^10.4.20", "cross-env": "^7.0.3", "dotenv": "^16.4.5", - "eslint": "^9.39.0", - "eslint-config-airbnb": "^19.0.4", + "eslint": "^9.39.1", "eslint-import-resolver-typescript": "^3.10.1", "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-react": "^7.37.5", - "eslint-plugin-react-hooks": "^4.6.2", + "eslint-plugin-react-hooks": "^7.0.1", "globals": "^15.10.0", "prettier": "^3.3.3", "rollup-plugin-visualizer": "^5.12.0", diff --git a/gui/public/i18n/de/translation.ftl b/gui/public/i18n/de/translation.ftl index 3d45c28fe..2203bb82c 100644 --- a/gui/public/i18n/de/translation.ftl +++ b/gui/public/i18n/de/translation.ftl @@ -1184,6 +1184,8 @@ onboarding-automatic_proportions-smol_warning-cancel = Zurück ## Stay Aligned setup onboarding-stay_aligned-title = Stay Aligned +onboarding-stay_aligned-put_trackers_on-title = Legen Sie Ihre Tracker an +onboarding-stay_aligned-put_trackers_on-trackers_warning = Sie haben derzeit weniger als 5 Tracker verbunden und zugewiesen! Dies ist die Mindestanzahl an Trackern, die erforderlich sind, damit Stay Aligned richtig funktioniert. onboarding-stay_aligned-put_trackers_on-next = Ich habe alle meine Tracker angelegt onboarding-stay_aligned-preparation-title = Vorbereitung onboarding-stay_aligned-relaxed_poses-skip_step = Überspringen @@ -1347,3 +1349,13 @@ error_collection_modal-description_v2 = Sie können diese Einstellung später im Abschnitt Verhalten auf der Einstellungsseite ändern. error_collection_modal-confirm = Ich stimme zu error_collection_modal-cancel = Ich will nicht +tracking_checklist-STEAMVR_DISCONNECTED-desc = SteamVR läuft nicht. Nutzen sie es für VR? +tracking_checklist-STEAMVR_DISCONNECTED-open = SteamVR starten +tracking_checklist-ignore = Ignorieren +preview-disable_render = Vorschau deaktivieren +preview-disabled_render = Vorschau deaktiviert +toolbar-mounting_calibration-default = Körper +toolbar-mounting_calibration-feet = Füße +toolbar-mounting_calibration-fingers = Finger +toolbar-assigned_trackers = { $count } Tracker zugewiesen +toolbar-unassigned_trackers = { $count } Tracker nicht zugewiesen diff --git a/gui/public/i18n/en/translation.ftl b/gui/public/i18n/en/translation.ftl index a520fea44..a02c9dab3 100644 --- a/gui/public/i18n/en/translation.ftl +++ b/gui/public/i18n/en/translation.ftl @@ -921,11 +921,13 @@ onboarding-setup_warning-cancel = Continue setup ## Wi-Fi setup onboarding-wifi_creds-back = Go back to introduction -onboarding-wifi_creds = Input Wi-Fi credentials +onboarding-wifi_creds-v2 = Trackers using Wi-Fi # This cares about multilines -onboarding-wifi_creds-description = - The Trackers will use these credentials to connect wirelessly. - Please use the credentials that you are currently connected to. +onboarding-wifi_creds-description-v2 = + Most trackers (such as official SlimeVR trackers) use Wi-Fi to connect to the server. + Please use the credentials of the Wi-Fi network your device is currently connected to. + + Make sure to use a 2.4GHz Wi-Fi connection for your trackers! onboarding-wifi_creds-skip = Skip Wi-Fi settings onboarding-wifi_creds-submit = Submit! onboarding-wifi_creds-ssid = @@ -936,6 +938,12 @@ onboarding-wifi_creds-password = .label = Password .placeholder = Enter password +onboarding-wifi_creds-dongle-title = Trackers using a dongle +onboarding-wifi_creds-dongle-description = + If your trackers came with a dongle, plug it into your device and you should be good to go! +onboarding-wifi_creds-dongle-wip = This section is a work in progress. A dedicated page to manage trackers that connect via a dongle will be made soon. +onboarding-wifi_creds-dongle-continue = Continue with a dongle + ## Mounting setup onboarding-reset_tutorial-back = Go back to Mounting calibration onboarding-reset_tutorial = Reset tutorial @@ -1557,7 +1565,7 @@ error_collection_modal-description_v2 = { settings-interface-behavior-error_trac error_collection_modal-confirm = I agree error_collection_modal-cancel = I don't want to - +## Tracking checklist section tracking_checklist = Tracking Checklist tracking_checklist-settings = Tracking Checklist Settings tracking_checklist-settings-close = Close diff --git a/gui/public/i18n/pl/translation.ftl b/gui/public/i18n/pl/translation.ftl index c272fc819..eafc4700e 100644 --- a/gui/public/i18n/pl/translation.ftl +++ b/gui/public/i18n/pl/translation.ftl @@ -33,6 +33,10 @@ tips-failed_webgl = Nie udało się zainicjalizować WebGL. ## Units +unit-meter = Metr +unit-foot = Stopa +unit-inch = Cal +unit-cm = cm ## Body parts @@ -98,6 +102,8 @@ board_type-WEMOSD1MINI = Wemos D1 Mini board_type-TTGO_TBASE = Podstawa T TTGO board_type-ESP01 = Zobacz materiał ESP-01 board_type-SLIMEVR = SlimeVR +board_type-SLIMEVR_DEV = SlimeVR Płytka Deweloperska +board_type-SLIMEVR_V1_2 = SlimeVR v1.2 board_type-LOLIN_C3_MINI = Lolin C3 Mini board_type-BEETLE32C3 = Beetle ESP32-C3 board_type-ESP32C3DEVKITM1 = Espressif ESP32-C3 DevKitM-1 @@ -249,6 +255,10 @@ reset-mounting = Zresetuj położenie reset-mounting-feet = Zresetuj mocowanie stóp reset-mounting-fingers = Zresetuj mocowanie palców reset-yaw = Reset odchylenia +reset-error-no_feet_tracker = Nie przypisano urządzenia śledzenia stóp +reset-error-no_fingers_tracker = Nie przypisano urządzenia śledzenia palcy +reset-error-mounting-need_full_reset = Potrzebny jest pełny reset przed montażem +reset-error-yaw-need_full_reset = Potrzebny jest pełny reset przed resetem obrotu ## Serial detection stuff @@ -268,10 +278,12 @@ navbar-trackers_assign = Przydzielenie Trackerów navbar-mounting = Kalibracja Pozycji navbar-onboarding = Wstępna konfiguracja navbar-settings = Ustawienia +navbar-connect_trackers = Połącz Urządzenia ## Biovision hierarchy recording bvh-start_recording = Nagraj BVH +bvh-stop_recording = Zapisz nagranie BVH bvh-recording = Nagrywanie... bvh-save_title = Zapisz nagranie BVH @@ -408,11 +420,15 @@ tracker-settings-name_section-label = Nazwa Urządzenia tracker-settings-forget = Zapomnij o trackerze tracker-settings-forget-description = Usuwa moduł śledzący z serwera SlimeVR i uniemożliwia mu połączenie się z nim do czasu ponownego uruchomienia serwera. Konfiguracja modułu śledzącego nie zostanie utracona. tracker-settings-forget-label = Zapomnij o trackerze +tracker-settings-update-unavailable-v2 = Nie znaleziono aktualizacji +tracker-settings-update-incompatible = Nie można zaktualizować. Niekompatybilne urządzenie lub wersja oprogramowania. tracker-settings-update-low-battery = Nie można zaktualizować. Bateria poniżej 50% tracker-settings-update-up_to_date = Aktualny tracker-settings-update-blocked = Aktualizacja niedostępna. Brak innych wersji tracker-settings-update = Zaktualizuj teraz tracker-settings-update-title = Wersja oprogramowania +tracker-settings-current-version = Aktualny +tracker-settings-latest-version = Najnowszy ## Tracker part card info @@ -478,6 +494,7 @@ mounting_selection_menu-close = Zamknij settings-sidebar-title = Ustawienia settings-sidebar-general = Ogólne +settings-sidebar-steamvr = SteamVR settings-sidebar-tracker_mechanics = Mechanika trackerów settings-sidebar-stay_aligned = Wyrównywanie settings-sidebar-fk_settings = Ustawienia śledzenia @@ -485,9 +502,12 @@ settings-sidebar-gesture_control = Sterowanie gestami settings-sidebar-interface = Interfejs settings-sidebar-osc_router = OSC router settings-sidebar-osc_trackers = Śledzenie VRChat OSC +settings-sidebar-osc_vmc = VMC settings-sidebar-utils = Narzędzia settings-sidebar-serial = Konsola szeregowa settings-sidebar-appearance = Wygląd +settings-sidebar-home = Strona Główna +settings-sidebar-checklist = Lista kontrolna settings-sidebar-notifications = Powiadomienia settings-sidebar-behavior = Zachowanie settings-sidebar-firmware-tool = Narzędzie do oprogramowania sprzętowego DIY @@ -613,11 +633,16 @@ settings-general-fk_settings-leg_tweak-floor_clip-description = Floor-clip może settings-general-fk_settings-leg_tweak-toe_snap-description = Toe-snap próbuje odgadnąć obrót twoich stóp, jeśli trackery stóp nie są używane. settings-general-fk_settings-leg_tweak-foot_plant-description = Foot-plant obraca stopy, aby były równoległe do podłoża podczas kontaktu. settings-general-fk_settings-leg_fk = Śledzenie nóg +settings-general-fk_settings-leg_fk-reset_mounting_feet-description-v1 = Wymuś kalibracje montażu stóp podczas kalibracji pozycji. +settings-general-fk_settings-leg_fk-reset_mounting_feet-v1 = Wymuś kalibracje mocowania stóp settings-general-fk_settings-enforce_joint_constraints = Limity szkieletowe settings-general-fk_settings-enforce_joint_constraints-enforce_constraints = Wymuszanie ograniczeń settings-general-fk_settings-enforce_joint_constraints-enforce_constraints-description = Zapobiega obracaniu się stawów poza ich limit settings-general-fk_settings-enforce_joint_constraints-correct_constraints = Korygowanie za pomocą ograniczeń settings-general-fk_settings-enforce_joint_constraints-correct_constraints-description = Koryguj rotacje stawów, gdy przekraczają swój limit +settings-general-fk_settings-ik = Dane pozycji +settings-general-fk_settings-ik-use_position = Użyj danych o pozycji +settings-general-fk_settings-ik-use_position-description = Umożliwia wykorzystanie danych o pozycji z urządzeń, które je wspierają. Włączając to, upewnij się, że dokonałeś reset w aplikacji i skalibrowałeś położenie w grze. settings-general-fk_settings-arm_fk = Śledzenie ramienia settings-general-fk_settings-arm_fk-description = Zmień sposób śledzenia ramion. settings-general-fk_settings-arm_fk-force_arms = Śledź ramiona z gogli VR @@ -775,6 +800,11 @@ settings-serial-auto_dropdown_item = Auto settings-serial-get_wifi_scan = Skanuj sieci WiFi settings-serial-file_type = Zwykły tekst settings-serial-save_logs = Zapisz do pliku +settings-serial-send_command = Wyślij +settings-serial-send_command-placeholder = Polecenie... +settings-serial-send_command-warning = Ostrzeżenie: Wysyłanie poleceń szeregowych może prowadzić do utraty danych lub zablokowania urządzenia. +settings-serial-send_command-warning-ok = Wiem co robię +settings-serial-send_command-warning-cancel = Anuluj ## OSC router settings @@ -874,6 +904,8 @@ settings-osc-vmc-mirror_tracking-label = Odbicie lustrzane śledzenia ## Common OSC settings +settings-osc-common-network-ports_match_error = Porty wejściowe i wyjściowe routera OSC nie mogą być takie same! +settings-osc-common-network-port_banned_error = Port { $port } nie może zostać użyty! ## Advanced settings @@ -906,9 +938,15 @@ settings-utils-advanced-open_logs-label = Otwórz folder ## Home Screen +settings-home-list-layout = Układ listy urządzeń +settings-home-list-layout-desc = Wybierz jeden z możliwych układów ekranu głównego +settings-home-list-layout-grid = Siatka +settings-home-list-layout-table = Tabela ## Tracking Checlist +settings-tracking_checklist-active_steps = Aktywne Kroki +settings-tracking_checklist-active_steps-desc = Lista wszystkich kroków kontrolnych. Możesz wyłączyć konkretne punkty. ## Setup/onboarding menu @@ -1046,6 +1084,7 @@ onboarding-assignment_tutorial-done = Umieszczam naklejki i paski! onboarding-assign_trackers-back = Cofnij się do ustawień Wi-Fi onboarding-assign_trackers-title = Przydziel Trackery onboarding-assign_trackers-description = Wybierzmy gdzie idzie jaki tracker. Naciśnij gdzie chcesz go przydzielić +onboarding-assign_trackers-unassign_all = Usuń przydzielenie wszystkich urządzeń # Look at translation of onboarding-connect_tracker-connected_trackers on how to use plurals # $assigned (Number) - Trackers that have been assigned a body part # $trackers (Number) - Trackers connected to the server @@ -1193,6 +1232,8 @@ onboarding-automatic_mounting-done-restart = Cofnij się na początek onboarding-automatic_mounting-mounting_reset-title = Kalibracja Pozycji onboarding-automatic_mounting-mounting_reset-step-0 = 1. Zrób pozycje "na Małysza" z wygiętymi nogami, tułowiem pochylonym do przodu z wygiętymi rękami. onboarding-automatic_mounting-mounting_reset-step-1 = 2. Naciśnij "Zresetuj Położenie" i poczekaj 3 sekundy zanim trackery się zresetują. +onboarding-automatic_mounting-mounting_reset-feet-step-0 = 1. Stań na palcach z obiema stopami skierowanymi do przodu. Alternatywnie możesz to zrobić siedząc na krześle. +onboarding-automatic_mounting-mounting_reset-feet-step-1 = 2. Naciśnij "Kalibracja Stóp" i poczekaj 3 sekundy zanim zresetuje pozycje. onboarding-automatic_mounting-preparation-title = Przygotowania onboarding-automatic_mounting-preparation-v2-step-0 = 1. Naciśnij przycisk "Pełny reset". onboarding-automatic_mounting-preparation-v2-step-1 = 2. Stań prosto z rękami po bokach. Upewnij się, że patrzysz przed siebie. @@ -1200,9 +1241,11 @@ onboarding-automatic_mounting-preparation-v2-step-2 = 3. Utrzymaj pozycję, aż onboarding-automatic_mounting-put_trackers_on-title = Załóż trackery onboarding-automatic_mounting-put_trackers_on-description = Aby skalibrować rotacje, użyjemy trackerów które przypisano przed chwilą. Załóż wszystkie trackery, możesz je odróznić na postaci po prawej. onboarding-automatic_mounting-put_trackers_on-next = Wszystkie trackery założone +onboarding-automatic_mounting-return-home = Gotowe ## Tracker manual proportions setupa +onboarding-manual_proportions-back-scaled = Wróć do skalowania proporcji onboarding-manual_proportions-title = Manualne Proporcje Ciała onboarding-manual_proportions-fine_tuning_button = Automatyczne dostrajanie proporcji onboarding-manual_proportions-fine_tuning_button-disabled-tooltip = Podłącz gogle VR, aby korzystać z automatycznego dostrajania @@ -1304,6 +1347,30 @@ onboarding-automatic_proportions-smol_warning-cancel = Przejdź wstecz ## User height calibration +onboarding-user_height-title = Jaki masz wzrost? +onboarding-user_height-description = Potrzebujemy twojego wzrostu, aby obliczyć proporcje ciała i dokładnie oddać twoje ruchy. Możesz pozwolić SlimeVR to obliczyć albo wpisać swój wzrost ręcznie. +onboarding-user_height-need_head_tracker = Do kalibracji wymaganę są gogle vr z kontrolerami. +onboarding-user_height-calculate = Automatycznie oblicz mój wzrost +onboarding-user_height-next_step = Kontynuuj i zapisz +onboarding-user_height-manual-proportions = Manualne Proporcje Ciała +onboarding-user_height-calibration-title = Postęp kalibracji +onboarding-user_height-calibration-RECORDING_FLOOR = Dotknij podłogi górną częścią kontrolera +onboarding-user_height-calibration-WAITING_FOR_RISE = Wstań +onboarding-user_height-calibration-WAITING_FOR_FW_LOOK = Wstań i spójrz przed siebie +onboarding-user_height-calibration-WAITING_FOR_FW_LOOK-ok = Upewnij się, że masz głowę poziomo +onboarding-user_height-calibration-WAITING_FOR_FW_LOOK-low = Nie patrz w podłogę +onboarding-user_height-calibration-WAITING_FOR_FW_LOOK-high = Nie patrz za wysoko +onboarding-user_height-calibration-WAITING_FOR_CONTROLLER_PITCH = Upewnij się, że kontroler jest skierowany w dół +onboarding-user_height-calibration-RECORDING_HEIGHT = Wstań i nie ruszaj się! +onboarding-user_height-calibration-DONE = Sukces! +onboarding-user_height-calibration-ERROR_TIMEOUT = Kalibracja zakończona niepomyślnie, spróbuj ponownie. +onboarding-user_height-calibration-ERROR_TOO_HIGH = Wykryty wzrost użytkownika jest zbyt wysoki, spróbuj ponownie. +onboarding-user_height-calibration-ERROR_TOO_SMALL = Wykryty wzrost użytkownika jest zbyt mały. Upewnij się, że stoisz prosto i patrzysz przed siebie pod koniec kalibracji. +onboarding-user_height-calibration-error = Kalibracja nieudana +onboarding-user_height-manual-tip = Podczas regulacji wzrostu wypróbuj różne pozy i zobacz, czy szkielet odzwierciedla twoje ruchy. +onboarding-user_height-reset-warning = + Ostrzeżenie: Spowoduje to zresetowanie wszystkich ustawień proporcji do wartości domyślnych. + Czy na pewno chcesz to zrobić? ## Stay Aligned setup @@ -1342,6 +1409,8 @@ onboarding-stay_aligned-done = Gotowy ## Home home-no_trackers = Nie wykryto ani nie przypisano żadnych trackerów +home-settings = Ustawienia strony głównej +home-settings-close = Zamknij ## Trackers Still On notification @@ -1383,21 +1452,50 @@ firmware_tool = Narzędzie do oprogramowania sprzętowego DIY firmware_tool-description = Umożliwia konfigurowanie i flashowanie trackerów DIY firmware_tool-not_available = Ups, narzędzie do oprogramowania sprzętowego nie jest obecnie dostępne. Wróć później! firmware_tool-not_compatible = Narzędzie oprogramowania układowego nie jest kompatybilne z tą wersją serwera. Proszę zaktualizować swój serwer! +firmware_tool-select_source = Wybierz oprogramowanie do wgrania +firmware_tool-select_source-description = Wybierz oprogramowanie, które chcesz wgrać na urządzenie +firmware_tool-select_source-error = Nie można załadować oprogramowania +firmware_tool-select_source-board_type = Typ urządzenia +firmware_tool-select_source-firmware = Źródło oprogramowania +firmware_tool-select_source-version = Wersja oprogramowania +firmware_tool-select_source-official = Oficjalny +firmware_tool-select_source-dev = Deweloperski +firmware_tool-board_defaults = Skonfiguruj swoje urządzenie +firmware_tool-board_defaults-description = Ustaw piny lub ustawienia do twojego urządzenia +firmware_tool-board_defaults-add = Dodaj +firmware_tool-board_defaults-reset = Zresetuj do domyślnych ustawień +firmware_tool-board_defaults-error-required = Wymagane pole +firmware_tool-board_defaults-error-format = Nieprawidłowy format +firmware_tool-board_defaults-error-format-number = To nie liczba firmware_tool-flash_method_step = Metoda flashowania firmware_tool-flash_method_step-description = Wybierz metodę flashowania, której chcesz użyć +firmware_tool-flash_method_step-ota-v2 = + .label = Wi-Fi + .description = Użyj metody bezprzewodowej. Twoje urządzenie będzie aktualizować się przez Wi-Fi. Działa tylko z skonfigurowanymi urządzeniami. +firmware_tool-flash_method_step-ota-info = + Używamy Twoich danych wi-fi, aby wgrać tracker i potwierdzić, że wszystko działa poprawnie. + Nie przechowujemy Twoich danych wifi! +firmware_tool-flash_method_step-serial-v2 = + .label = USB + .description = Użyj kabla usb, aby aktualizować urządzenie. firmware_tool-flashbtn_step = Naciśnij przycisk zasilania firmware_tool-flashbtn_step-description = Zanim przejdziesz do następnego kroku, musisz zrobić kilka rzeczy firmware_tool-flashbtn_step-board_SLIMEVR = Naciśnij przycisk flash na płytce drukowanej przed włożeniem, aby włączyć tracker.¶ Jeśli tracker był już włączony, po prostu go wyłącz i włącz ponownie, naciskając przycisk lub zwierając podkładki flash.¶ Oto kilka zdjęć, jak to zrobić, zgodnie z różnymi wersjami trackera SlimeVR +firmware_tool-flashbtn_step-board_SLIMEVR-r11-v2 = Włącz tracker zwierając drugi prostokątny pad FLASH od krawędzi na górnej stronie płytki, a metalową osłonę mikrokontrolera +firmware_tool-flashbtn_step-board_SLIMEVR-r12-v2 = Włącz tracker zwierając drugi prostokątny pad FLASH od krawędzi na górnej stronie płytki, a metalową osłonę mikrokontrolera +firmware_tool-flashbtn_step-board_SLIMEVR-r14-v2 = Włącz tracker, naciskając przycisk FLASH na górnej stronie płytki. Dioda LED powinna krótko mrógnąć. firmware_tool-flashbtn_step-board_OTHER = Przed flashowaniem prawdopodobnie będziesz musiał przełączyć moduł śledzący w tryb bootloadera.¶ W większości przypadków oznacza to naciśnięcie przycisku rozruchu na płycie przed rozpoczęciem procesu flashowania.¶ Jeśli na początku flashowania upłynie limit czasu procesu flashowania, prawdopodobnie oznacza to, że moduł śledzący nie był w trybie bootloadera¶ Aby dowiedzieć się, jak włączyć tryb ładowarki łodzi, zapoznaj się z instrukcjami flashowania swojej tablicy +firmware_tool-flash_method_ota-title = Wgrywanie przez Wi-Fi firmware_tool-flash_method_ota-devices = Wykryte urządzenia OTA: firmware_tool-flash_method_ota-no_devices = Nie ma tablic, które można zaktualizować za pomocą OTA, upewnij się, że wybrałeś właściwy typ płyty +firmware_tool-flash_method_serial-title = Wgrywanie przez USB firmware_tool-flash_method_serial-wifi = Dane uwierzytelniające Wi-Fi: firmware_tool-flash_method_serial-devices-label = Wykryte urządzenia szeregowe: firmware_tool-flash_method_serial-devices-placeholder = Wybierz urządzenie szeregowe @@ -1412,7 +1510,10 @@ firmware_tool-flashing_step-exit = Wyjście ## firmware tool build status +firmware_tool-build-QUEUED = Budowanie.... firmware_tool-build-CREATING_BUILD_FOLDER = Tworzenie folderu kompilacji +firmware_tool-build-DOWNLOADING_SOURCE = Pobieranie kodu źródłowego +firmware_tool-build-EXTRACTING_SOURCE = Ekstrakcja kodu źródłowego firmware_tool-build-BUILDING = Budowa oprogramowania sprzętowego firmware_tool-build-SAVING = Zapisywanie kompilacji firmware_tool-build-DONE = Budowa ukończona @@ -1521,8 +1622,69 @@ vrc_config-avatar_measurement_type-ARM_SPAN = Rozpiętość ramion error_collection_modal-title = Czy możemy zbierać błędy? error_collection_modal-description_v2 = - { ustawienia-interfejsu-zachowanie-error_tracking-description_v2 } + { settings-interface-behavior-error_tracking-description_v2 } To ustawienie można zmienić później w sekcji Zachowanie na stronie ustawień. error_collection_modal-confirm = Zgadzam się error_collection_modal-cancel = Nie chcę +tracking_checklist = Lista Kontrolna +tracking_checklist-settings = Ustawienia Listy Kontrolnej +tracking_checklist-settings-close = Zamknij +tracking_checklist-status-incomplete = Nie jesteś przygotowany aby korzystać ze SlimeVR! +tracking_checklist-status-partial = + { $count -> + [one] Masz { $count } ostrzeżenie! + [few] Masz { $count } ostrzeżeń! + *[many] Masz { $count } ostrzeżeń! + } +tracking_checklist-status-complete = Jesteś gotowy korzystać ze SlimeVR! +tracking_checklist-MOUNTING_CALIBRATION = Wykonaj kalibrację montażu +tracking_checklist-FEET_MOUNTING_CALIBRATION = Wykonaj kalibrację montażu stóp +tracking_checklist-FULL_RESET = Wykonaj pełny reset +tracking_checklist-FULL_RESET-desc = Niektóre urządzenia wymagają resetu. +tracking_checklist-STEAMVR_DISCONNECTED = SteamVR nie jest uruchomiony +tracking_checklist-STEAMVR_DISCONNECTED-desc = SteamVR nie jest uruchomiony. Czy twoje gogle są podłączone? +tracking_checklist-STEAMVR_DISCONNECTED-open = Uruchom SteamVR +tracking_checklist-TRACKERS_REST_CALIBRATION = Skalibruj swoje urządzenia +tracking_checklist-TRACKERS_REST_CALIBRATION-desc = Nie wykonałeś kalibracji urządzenia. Proszę, pozwól swoim urządzeniom (podświetlonym na żółto) odpocząć na stabilnej powierzchni przez kilka sekund. +tracking_checklist-TRACKER_ERROR = Urządzenia z błędami +tracking_checklist-TRACKER_ERROR-desc = Niektóre z Twoich urządzeń mają błędy. Proszę ponownie uruchomić urządzenia podświetlone na żółto. +tracking_checklist-VRCHAT_SETTINGS = Konfiguruj ustawienia do VRChat'a +tracking_checklist-VRCHAT_SETTINGS-desc = Źle ustawiłeś ustawienia VRChat'a! Może to negatywnie wpłynąć na twoje śledzenie. +tracking_checklist-VRCHAT_SETTINGS-open = Przejdź do ostrzeżeń VRChat +tracking_checklist-UNASSIGNED_HMD = Zestaw VR nieprzypisany do Głowy +tracking_checklist-UNASSIGNED_HMD-desc = Zestaw VR powinien być przypisany jako śledzenie głowy. +tracking_checklist-NETWORK_PROFILE_PUBLIC = Zmień profil sieciowy +tracking_checklist-NETWORK_PROFILE_PUBLIC-desc = + { $count -> + [one] + Jeden z Twoich adapterów sieciowych jest ustawiony na publiczny: + { $adapters } + Nie zaleca się tego, aby SlimeVR działał poprawnie. + Zobacz, jak to naprawić tutaj. + [few] + Niektóre z Twoich adapterów sieciowych są ustawione na publiczne: + { $adapters } + Nie zaleca się tego, aby SlimeVR działał poprawnie. + Zobacz, jak to naprawić tutaj. + *[many] + Niektóre z Twoich adapterów sieciowych są ustawione na publiczne: + { $adapters } + Nie zaleca się tego, aby SlimeVR działał poprawnie. + Zobacz, jak to naprawić tutaj. + } +tracking_checklist-NETWORK_PROFILE_PUBLIC-open = Otwórz panel sterowania +tracking_checklist-STAY_ALIGNED_CONFIGURED = Konfiguruj Opcje Wyrównywania +tracking_checklist-STAY_ALIGNED_CONFIGURED-desc = Zapisz pozycje wyrównywania, aby zmniejszyć poślizg +tracking_checklist-STAY_ALIGNED_CONFIGURED-open = Otwórz Konfiguracje Wyrównywania +tracking_checklist-ignore = Ignoruj +preview-mocap_mode_soon = Tryb mocap (wkrótce™) +preview-disable_render = Wyłącz renderowanie +preview-disabled_render = Renderowanie wyłączone +toolbar-mounting_calibration = Kalibracja Pozycji +toolbar-mounting_calibration-default = Ciało +toolbar-mounting_calibration-feet = Stopy +toolbar-mounting_calibration-fingers = Palce +toolbar-drift_reset = Reset Poślizgu +toolbar-assigned_trackers = { $count } Przydzielonych urządzeń +toolbar-unassigned_trackers = { $count } Nieprzydzielonych urządzeń diff --git a/gui/public/i18n/th/translation.ftl b/gui/public/i18n/th/translation.ftl index de040d0b5..1361cf6fd 100644 --- a/gui/public/i18n/th/translation.ftl +++ b/gui/public/i18n/th/translation.ftl @@ -17,9 +17,9 @@ websocket-error-logs = เปิดโฟลเดอร์ไฟล์บัน ## Update notification -version_update-title = มีเวอร์ชั่นใหม่พร้อมแล้ว: { $version } +version_update-title = มีเวอร์ชันใหม่พร้อมแล้ว: { $version } version_update-description = คลิกที่ "{ version_update-update }" เพื่อดาวน์โหลดตัวติดตั้ง SlimeVR ให้คุณ -version_update-update = อัพเดต +version_update-update = อัปเดต version_update-close = ปิด ## Tips @@ -141,7 +141,7 @@ skeleton_bone-UPPER_CHEST-desc = skeleton_bone-CHEST_OFFSET = การชดเชยตำแหน่งหน้าอก skeleton_bone-CHEST_OFFSET-desc = นี่เป็นการปรับให้แทร็กเกอร์เสมือนบริเวณอกสูงขึ้น หรือต่ำลงเพื่อช่วย - ในการตั้งศูนย์หรือปรับเทียบสำหรับบางเกมหรือแอปพลิเคชั่นที่กำหนดตำแหน่งแทร็กเกอร์สูงกว่า หรือต่ำกว่า + ในการตั้งศูนย์หรือปรับเทียบสำหรับบางเกมหรือแอปพลิเคชันที่กำหนดตำแหน่งแทร็กเกอร์สูงกว่า หรือต่ำกว่า skeleton_bone-CHEST = ความยาวหน้าอก skeleton_bone-CHEST-desc = นี่เป็นระยะห่างจากกลางหน้าอกถึงกลางกระดูกสันหลัง @@ -151,7 +151,7 @@ skeleton_bone-WAIST = ความยาวเอว skeleton_bone-WAIST-desc = นี่เป็นระยะห่างจากตรงกลางกระดูกสันหลังถึงสะดือ ปรับด้วยการเริ่มจากการปรับความยาวลำตัวให้เหมาะสมก่อน แล้วปรับค่านี้ในท่าต่างๆ - (นั่งลง ก้มตัว นอนราบ เป็นต้น) จนกว่ากระดูกหลังเสมือนจะตรงกับกระดูกสันหลังจริง + (นั่งลง ก้มตัว นอนราบ เป็นต้น) จนกว่ากระดูกหลังเสมือนจะตรงกับกระดูกสันหลังจริงของคุณ skeleton_bone-HIP = ความยาวสะโพก skeleton_bone-HIP-desc = นี่เป็นระยะห่างจากสะดือถึงสะโพก @@ -160,12 +160,12 @@ skeleton_bone-HIP-desc = skeleton_bone-HIP_OFFSET = การชดเชยตำแหน่งสะโพก skeleton_bone-HIP_OFFSET-desc = ปรับค่านี้เพื่อขยับแทร็กเกอร์เสมือนของสะโพกขึ้นหรือลง - เพื่อช่วยในการตั้งศูนย์หรือปรับเทียบสำหรับบางเกมหรือแอปพลิเคชั่นที่กำหนดตำแหน่งแทร็กเกอร์ให้อยู่ที่สะโพก + เพื่อช่วยในการตั้งศูนย์หรือปรับเทียบสำหรับบางเกมหรือแอปพลิเคชันที่กำหนดตำแหน่งแทร็กเกอร์ให้อยู่ที่สะโพก skeleton_bone-HIPS_WIDTH = ความกว้างสะโพก skeleton_bone-HIPS_WIDTH-desc = นี่เป็นระยะห่างจากจุดเริ่มต้นของขาทั้งสอง - ปรับด้วยการเริ่มจากการรีเซ็ตแทร็กเกอร์ทั้งหมดในขณะที่ยืนตรง - ขาตรง และจึงปรับค่านี้จนกระทั้งขาเสมือนของคุณตรงกับขาจริงในแนวนอน + ปรับด้วยการเริ่มจากการรีเซ็ตทั้งหมดในขณะที่ยืนตรง + ขาตรง และจึงปรับค่านี้จนกระทั่งขาเสมือนของคุณตรงกับขาจริงในแนวนอน skeleton_bone-leg_group = ความยาวขา skeleton_bone-leg_group-desc = นี่เป็นระยะห่างจากสะโพกถึงเท้า @@ -189,7 +189,7 @@ skeleton_bone-FOOT_SHIFT = การปรับชดเชยการวา skeleton_bone-FOOT_SHIFT-desc = นี่เป็นระยะห่างในแนวนอนจากหัวเข่าถึงข้อเท้า ค่านี้ช่วยในการคำนวณการเอียงของขาส่วนล่างเมื่อยืนตัวตรง - โดยเริ่มจากการตั้งความยาวเท้าเป็น 0, รีเซ็ตแทร็กเกอร์ทั้งหมด, + โดยเริ่มจากการตั้งความยาวเท้าเป็น 0, จากนั้นรีเซ็ตทั้งหมด แล้วจึงปรับค่าจนกระทั่งเท้าเสมือนตรงกับกลางข้อเท้าจริงของคุณ skeleton_bone-SKELETON_OFFSET = การชดเชยตำแหน่งโครงร่างรวม skeleton_bone-SKELETON_OFFSET-desc = @@ -226,14 +226,14 @@ skeleton_bone-HAND_Y-desc = นี่เป็นระยะห่างในแนวตั้งจากข้อมือถึงกลางมือของคุณ หากใช้สำหรับ Motion Capture ให้เริ่มจากปรับความยาวแขนให้เหมาะสม แล้วปรับค่านี้จนกว่า แทร็กเกอร์เสมือนของมือนั้นอยู่ในแนวตั้งเดียวกับกลางมือจริง - หากใช้สำหรับจับตำแหน่งข้อศอกจากคอนโทรลเลอร์ ให้เริ่มจากตั้งความยาวแขน เป็น 0 และ + หากใช้สำหรับจับตำแหน่งข้อศอกจากคอนโทรลเลอร์ ให้เริ่มจากตั้งความยาวแขน เป็น 0 และปรับค่าจนกว่าแทร็กเกอร์ข้อศอกนั้นอยู่ในแนวตั้งเดียวกับข้อมือจริง skeleton_bone-HAND_Z = ระยะมือแนวราบ (แกน Z) skeleton_bone-HAND_Z-desc = นี่เป็นระยะห่างแนวนอนจากข้อมือถึงกลางมือของคุณ หากใช้สำหรับ Motion capture ให้ตั้งค่านี้เป็น 0 - หากใช้สำหรับจับตำแหน่งข้อศอกจากคอนโทรลเลอร์ ให้เริ่มจากตั้งความยาวแขนเป็น 0 และ - ปรับค่าจนกว่าแทร็กเกอร์ข้อศอกนั้นอยู่ในแนวราบเดียวกับข้อมือจริงของคุณ + หากใช้สำหรับจับตำแหน่งข้อศอกจากคอนโทรลเลอร์ ให้เริ่มจากตั้งความยาวแขนเป็น 0 + และปรับค่าจนกว่าแทร็กเกอร์ข้อศอกนั้นอยู่ในแนวราบเดียวกับข้อมือจริงของคุณ skeleton_bone-ELBOW_OFFSET = ชดเชยตำแหน่งข้อศอก skeleton_bone-ELBOW_OFFSET-desc = สามารถปรับเพื่อเลื่อนแทร็กเกอร์ข้อศอกเสมือนของคุณขึ้นหรือลงเพื่อช่วย @@ -250,23 +250,23 @@ reset-reset_all_warning-cancel = ยกเลิก reset-reset_all_warning_default-v2 = คำเตือน: คุณยังไม่ได้ตั้งค่าความสูง สัดส่วนของคุณจะถูกรีเซ็ตเป็นค่าเริ่มต้น คุณแน่ใจหรือไม่ว่าต้องการทำเช่นนี้ -reset-full = รีเซ็ตแทร็กเกอร์ทั้งหมด +reset-full = รีเซ็ตทั้งหมด reset-mounting = รีเซ็ตตั้งศูนย์การติดตั้ง reset-mounting-feet = รีเซ็ตทิศทางติดตั้งเท้า reset-mounting-fingers = รีเซ็ตการติดตั้งนิ้วมือ reset-yaw = รีเซ็ตแกนตั้ง reset-error-no_feet_tracker = ไม่ได้กำหนดแทร็กเกอร์เท้า -reset-error-no_fingers_tracker = ไม่ได้กําหนดแทร็กเกอร์นิ้ว -reset-error-mounting-need_full_reset = ต้องรีเซ็ตแทร็กเกอร์ทั้งหมดก่อนการตั้งศูนย์การติดตั้ง -reset-error-yaw-need_full_reset = ต้องรีเซ็ตแทร็กเกอร์ทั้งหมดก่อนรีเซ็ตแกนตั้ง +reset-error-no_fingers_tracker = ไม่ได้กำหนดแทร็กเกอร์นิ้ว +reset-error-mounting-need_full_reset = ต้องรีเซ็ตทั้งหมดก่อนการตั้งศูนย์การติดตั้ง +reset-error-yaw-need_full_reset = ต้องรีเซ็ตทั้งหมดก่อนรีเซ็ตแกนตั้ง ## Serial detection stuff serial_detection-new_device-p0 = ตรวจพบอุปกรณ์ Serial ใหม่! -serial_detection-new_device-p1 = ป้อนข้อมูลการเข้าสู่ระบบ Wi-Fi ของคุณ! +serial_detection-new_device-p1 = ใส่ข้อมูลเครือข่าย Wi-Fi ของคุณ! serial_detection-new_device-p2 = กรุณาเลือกสิ่งที่คุณต้องการทำกับอุปกรณ์ serial_detection-open_wifi = เชื่อมต่อกับ Wi-Fi -serial_detection-open_serial = เปิด Serial console +serial_detection-open_serial = เปิดหน้า Serial console serial_detection-submit = ยืนยัน! serial_detection-close = ปิด @@ -276,7 +276,7 @@ navbar-home = หน้าหลัก navbar-body_proportions = สัดส่วนร่างกาย navbar-trackers_assign = กำหนดแทร็กเกอร์ navbar-mounting = ตั้งศูนย์การติดตั้ง -navbar-onboarding = ตัวช่วยการตั้งค่า +navbar-onboarding = ตัวช่วยตั้งค่าโปรแกรม navbar-settings = ตั้งค่า navbar-connect_trackers = เชื่อมต่อแทร็กเกอร์ @@ -401,9 +401,9 @@ tracker-settings-assignment_section-edit = แก้ไขการกำหน tracker-settings-mounting_section = ทิศทางการติดตั้ง tracker-settings-mounting_section-description = แทร็กเกอร์นี้อยู่ด้านไหนของคุณ? tracker-settings-mounting_section-edit = แก้ไขการติดตั้ง -tracker-settings-drift_compensation_section = เปิดใช้การชดเชยค่าดริฟท์ -tracker-settings-drift_compensation_section-description = ให้แทร็กเกอร์ตัวนี้ชดเชยค่าดริฟท์เมื่อมีการเปิดใช้งานการชดเชยค่าดริฟท์หรือไม่? -tracker-settings-drift_compensation_section-edit = ใช้การชดเชยค่าดริฟท์ +tracker-settings-drift_compensation_section = เปิดใช้การชดเชยการดริฟท์ +tracker-settings-drift_compensation_section-description = ให้แทร็กเกอร์ตัวนี้ชดเชยการดริฟท์เมื่อมีการเปิดใช้งานการชดเชยการดริฟท์หรือไม่? +tracker-settings-drift_compensation_section-edit = ใช้การชดเชยการดริฟท์ tracker-settings-use_mag = เปิดใช้งานเซ็นเซอร์สนามแม่เหล็กสำหรับแทร็กเกอร์ตัวนี้ # Multiline! tracker-settings-use_mag-description = @@ -421,10 +421,10 @@ tracker-settings-forget-description = ลบแทร็กเกอร์ออ tracker-settings-forget-label = ลืมแทร็กเกอร์ tracker-settings-update-unavailable-v2 = ไม่พบเวอร์ชันที่เผยแพร่ tracker-settings-update-incompatible = ไม่สามารถอัปเดตได้ บอร์ดไม่รองรับ -tracker-settings-update-low-battery = ไม่สามารถอัพเดตได้ แบตเตอรี่ต่ำกว่า 50% +tracker-settings-update-low-battery = ไม่สามารถอัปเดตได้ แบตเตอรี่ต่ำกว่า 50% tracker-settings-update-up_to_date = เป็นเวอร์ชันล่าสุดแล้ว tracker-settings-update-blocked = ไม่มีอัปเดต ไม่มีเวอร์ชันอื่นให้ใช้งาน -tracker-settings-update = อัพเดตทันที +tracker-settings-update = อัปเดตทันที tracker-settings-update-title = เวอร์ชันเฟิร์มแวร์ tracker-settings-current-version = ปัจจุบัน tracker-settings-latest-version = ล่าสุด @@ -465,7 +465,7 @@ tracker_selection_menu-UPPER_CHEST = { -tracker_selection-part } หน้าอ tracker_selection_menu-CHEST = { -tracker_selection-part } อก? tracker_selection_menu-WAIST = { -tracker_selection-part } เอว? tracker_selection_menu-HIP = { -tracker_selection-part } สะโพก? -tracker_selection_menu-LEFT_SHOULDER = { -tracker_selection-part } หัวไหลซ้าย? +tracker_selection_menu-LEFT_SHOULDER = { -tracker_selection-part } ไหล่ซ้าย? tracker_selection_menu-LEFT_UPPER_ARM = { -tracker_selection-part } แขนซ้ายส่วนบน? tracker_selection_menu-LEFT_LOWER_ARM = { -tracker_selection-part } แขนซ้ายส่วนล่าง? tracker_selection_menu-LEFT_HAND = { -tracker_selection-part } มือซ้าย? @@ -506,7 +506,7 @@ settings-sidebar-utils = เครื่องมือ settings-sidebar-serial = Serial Console settings-sidebar-appearance = รูปแบบ settings-sidebar-home = หน้าหลัก -settings-sidebar-checklist = รายการเตรียมความพร้อมแทร็กกิ้ง +settings-sidebar-checklist = รายการเตรียมความพร้อมแทร็กเกอร์ settings-sidebar-notifications = การแจ้งเตือน settings-sidebar-behavior = พฤติกรรมการทำงาน settings-sidebar-firmware-tool = เครื่องมือเฟิร์มแวร์ DIY @@ -550,7 +550,7 @@ settings-general-tracker_mechanics-filtering = การกรองข้อม # This also cares about multilines settings-general-tracker_mechanics-filtering-description = เลือกประเภทการกรองสัญญาณรบกวนสำหรับแทร็กเกอร์ - หากใช้การการคาดการณ์จะคาดการณ์การเคลื่อนไหว ในขณะที่การทำให้ราบรื่นจะทำให้การเคลื่อนไหวราบรื่นขึ้น + หากใช้การคาดการณ์จะคาดการณ์การเคลื่อนไหว ในขณะที่การทำให้ราบรื่นจะทำให้การเคลื่อนไหวราบรื่นขึ้น settings-general-tracker_mechanics-filtering-type = ประเภทการกรองสัญญาณ settings-general-tracker_mechanics-filtering-type-none = ไม่มีการกรอง settings-general-tracker_mechanics-filtering-type-none-description = ใช้ค่าการหมุนตามจริง จะไม่มีการกรองข้อมูลใดๆ @@ -560,33 +560,33 @@ settings-general-tracker_mechanics-filtering-type-prediction = คาดกา settings-general-tracker_mechanics-filtering-type-prediction-description = ลดความหน่วง และทำให้การเคลื่อนไหวฉับไวขึ้น แต่อาจเพิ่มการกระตุก settings-general-tracker_mechanics-filtering-amount = ปริมาณ settings-general-tracker_mechanics-yaw-reset-smooth-time = เวลาหน่วงการรีเซ็ตแกนตั้ง(ตั้งที่ 0 วินาทีเพื่อปิดการใช้) -settings-general-tracker_mechanics-drift_compensation = การชดเชยค่าดริฟท์ +settings-general-tracker_mechanics-drift_compensation = การชดเชยการดริฟท์ # This cares about multilines settings-general-tracker_mechanics-drift_compensation-description = ชดเชยความคลาดเคลื่อนแกนตั้งของ IMU โดยหมุนชดเชยในทิศทางตรงข้าม โดยนำปริมาณการรีเซ็ตและจำนวนครั้งในการรีเซ็ตมาพิจารณา ควรใช้เฉพาะในกรณีที่คุณต้องรีเซ็ตบ่อยครั้งมากเท่านั้น! -settings-general-tracker_mechanics-drift_compensation-enabled-label = การชดเชยค่าดริฟท์ -settings-general-tracker_mechanics-drift_compensation-prediction = การคาดการณ์การชดเชยค่าดริฟท์ +settings-general-tracker_mechanics-drift_compensation-enabled-label = การชดเชยการดริฟท์ +settings-general-tracker_mechanics-drift_compensation-prediction = การคาดการณ์การชดเชยการดริฟท์ # This cares about multilines settings-general-tracker_mechanics-drift_compensation-prediction-description = - คาดการณ์การชดเชยค่าดริฟท์ของแกนตั้งนอกเหนือจากช่วงที่เคยถูกวัดไว้ + คาดการณ์การชดเชยการดริฟท์ของแกนตั้งนอกเหนือจากช่วงที่เคยถูกวัดไว้ เปิดใช้งานหากแทร็กเกอร์ของคุณหมุนรอบแกนตั้งอย่างต่อเนื่อง -settings-general-tracker_mechanics-drift_compensation-prediction-label = คาดการณ์การชดเชยค่าดริฟท์ +settings-general-tracker_mechanics-drift_compensation-prediction-label = คาดการณ์การชดเชยการดริฟท์ settings-general-tracker_mechanics-drift_compensation_warning = คำเตือน: ควรใช้การชดเชยดริฟท์เฉพาะในกรณีที่คุณต้องรีเซ็ต บ่อยครั้งมากเท่านั้น (ทุก ~5-10 นาที) IMU บางตัวที่มีแนวโน้มที่จะต้องรีเซ็ตบ่อย ได้แก่: - Joy-Cons, owoTrack, และ MPU (หากเฟิร์มแวร์ไม่ได้รับการอัพเดต) + Joy-Cons, owoTrack, และ MPU (หากเฟิร์มแวร์ไม่ได้รับการอัปเดต) settings-general-tracker_mechanics-drift_compensation_warning-cancel = ยกเลิก settings-general-tracker_mechanics-drift_compensation_warning-done = ฉันเข้าใจแล้ว settings-general-tracker_mechanics-drift_compensation-amount-label = ปริมาณการชดเชย settings-general-tracker_mechanics-drift_compensation-max_resets-label = ใช้ค่าจากการรีเซ็ต X ครั้ง -settings-general-tracker_mechanics-save_mounting_reset = บันทึกการตั้งศูนย์การรีเซ็ตการติดตั้งอัตโนมัติ +settings-general-tracker_mechanics-save_mounting_reset = บันทึกค่าการตั้งศูนย์การติดตั้งโดยอัตโนมัติ settings-general-tracker_mechanics-save_mounting_reset-description = - บันทึกการตั้งศูนย์การติดตั้งแทร็กเกอร์ระหว่างการรีสตาร์ท มีประโยชน์ - เมื่อสวมชุดที่แทร็กเกอร์ไม่ขยับระหว่างเซสชัน ไม่แนะนำสำหรับผู้ใช้ทั่วไป! + บันทึกการตั้งศูนย์การติดตั้งแทร็กเกอร์อัตโนมัติเพื่อใช้ซ้ำเมื่อรีสตาร์ท + มีประโยชน์เมื่อสวมชุดที่ตำแหน่งแทร็กเกอร์ไม่เปลี่ยนแปลงระหว่างการใช้งาน ไม่แนะนำสำหรับผู้ใช้ทั่วไป! settings-general-tracker_mechanics-save_mounting_reset-enabled-label = บันทึกการรีเซ็ตการติดตั้ง settings-general-tracker_mechanics-use_mag_on_all_trackers = ใช้เซ็นเซอร์สนามแม่เหล็กบนแทร็กเกอร์ที่ IMU รองรับ settings-general-tracker_mechanics-use_mag_on_all_trackers-description = @@ -597,12 +597,12 @@ settings-stay_aligned = Stay Aligned settings-stay_aligned-description = Stay Aligned จะลดดริฟท์โดยค่อยๆ ปรับแทร็กเกอร์ให้เข้ากับท่าทางผ่อนคลายของคุณ settings-stay_aligned-setup-label = ตั้งค่า Stay Aligned settings-stay_aligned-setup-description = คุณต้องทำ "ตั้งค่า Stay Aligned" ให้เสร็จสมบูรณ์เพื่อเปิดใช้งาน Stay Aligned -settings-stay_aligned-warnings-drift_compensation = ⚠ โปรดปิด การชดเชยค่าดริฟท์! เพราะมันจะขัดแย้งกับการทำงานของ Stay Aligned +settings-stay_aligned-warnings-drift_compensation = ⚠ โปรดปิด การชดเชยการดริฟท์! เพราะมันจะขัดแย้งกับการทำงานของ Stay Aligned settings-stay_aligned-enabled-label = เปิดใช้งาน settings-stay_aligned-hide_yaw_correction-label = ซ่อนการปรับแต่ง (เพื่อเปรียบเทียบกับแบบไม่มี Stay Aligned) settings-stay_aligned-general-label = ทั่วไป settings-stay_aligned-relaxed_poses-label = ท่าทางผ่อนคลาย -settings-stay_aligned-relaxed_poses-description = Stay Aligned ใช้ท่าทางผ่อนคลายของคุณเพื่อให้แทร็กเกอร์อยู่ในแนวที่ถูกต้อง ใช้ "ตั้งค่า Stay Aligned" เพื่ออัพเดตท่าทางเหล่านี้ +settings-stay_aligned-relaxed_poses-description = Stay Aligned ใช้ท่าทางผ่อนคลายของคุณเพื่อให้แทร็กเกอร์อยู่ในแนวที่ถูกต้อง ใช้ "ตั้งค่า Stay Aligned" เพื่ออัปเดตท่าทางเหล่านี้ settings-stay_aligned-relaxed_poses-standing = ปรับแทร็กเกอร์ขณะยืน settings-stay_aligned-relaxed_poses-sitting = ปรับแทร็กเกอร์ขณะนั่งเก้าอี้ settings-stay_aligned-relaxed_poses-flat = ปรับแทร็กเกอร์ขณะนั่งบนพื้น หรือนอนหงาย @@ -628,10 +628,10 @@ settings-general-fk_settings-leg_tweak-skating_correction = การแก้ settings-general-fk_settings-leg_tweak-toe_snap = เดาการหมุนเท้า settings-general-fk_settings-leg_tweak-foot_plant = ปรับสมดุลเท้า settings-general-fk_settings-leg_tweak-skating_correction-amount = ปริมาณการแก้ไขการไถล -settings-general-fk_settings-leg_tweak-skating_correction-description = การแก้ไขการไถล จะแก้ไขปัญหาที่เท้าสไลด์เหมือนเล่นสเก็ตน้ำแข็ง แต่สามารถลดความแม่นยำในการเคลื่อนไหวบางรูปแบบ เมื่อเปิดใช้งานแล้วต้องทำการรีเซ็ตแทร็กเกอร์ทั้งหมด แล้วตั้งศูนย์หรือปรับเทียบใหม่ในเกม -settings-general-fk_settings-leg_tweak-floor_clip-description = การล๊อกระดับพื้นสามารถลดหรือกำจัดการทะลุผ่านพื้นได้ เมื่อเปิดใช้งานแล้วต้องทำการรีเซ็ตแทร็กเกอร์ทั้งหมด แล้วตั้งศูนย์หรือปรับเทียบใหม่ในเกม +settings-general-fk_settings-leg_tweak-skating_correction-description = การแก้ไขการไถล จะแก้ไขปัญหาที่เท้าสไลด์เหมือนเล่นสเก็ตน้ำแข็ง แต่สามารถลดความแม่นยำในการเคลื่อนไหวบางรูปแบบ เมื่อเปิดใช้งานแล้วต้องทำการรีเซ็ตทั้งหมด แล้วตั้งศูนย์หรือปรับเทียบใหม่ในเกม +settings-general-fk_settings-leg_tweak-floor_clip-description = การล็อกระดับพื้นสามารถลดหรือกำจัดการทะลุผ่านพื้นได้ เมื่อเปิดใช้งานแล้วต้องทำการรีเซ็ตทั้งหมด แล้วตั้งศูนย์หรือปรับเทียบใหม่ในเกม settings-general-fk_settings-leg_tweak-toe_snap-description = การเดาการหมุนของเท้า จะพยายามคาดเดาการหมุนของเท้า หากไม่ได้ใช้แทร็กเกอร์เท้า -settings-general-fk_settings-leg_tweak-foot_plant-description = การปรับสมดุลย์เท้า จะหมุนเท้าให้ขนานกับพื้นเมื่อมีการสัมผัสพื้น +settings-general-fk_settings-leg_tweak-foot_plant-description = การปรับสมดุลเท้า จะหมุนเท้าให้ขนานกับพื้นเมื่อมีการสัมผัสพื้น settings-general-fk_settings-leg_fk = การจับตำแหน่งขา settings-general-fk_settings-leg_fk-reset_mounting_feet-description-v1 = บังคับรีเซ็ตการติดตั้งเท้าในระหว่างการรีเซ็ตการติดตั้งทั่วไป settings-general-fk_settings-leg_fk-reset_mounting_feet-v1 = บังคับรีเซ็ตการติดตั้งเท้า @@ -642,20 +642,20 @@ settings-general-fk_settings-enforce_joint_constraints-correct_constraints = แ settings-general-fk_settings-enforce_joint_constraints-correct_constraints-description = แก้ไขการหมุนของข้อต่อเมื่อมีการหมุนเกินขีดจำกัด settings-general-fk_settings-ik = ข้อมูลตำแหน่ง settings-general-fk_settings-ik-use_position = ใช้ข้อมูลตำแหน่ง -settings-general-fk_settings-ik-use_position-description = เปิดใช้งานการใช้ข้อมูลตำแหน่งจากแทร็กเกอร์ที่รองรับ เมื่อเปิดใช้งานแล้วโปรดทำการรีเซ็ตแทร็กเกอร์ทั้งหมด แล้วตั้งศูนย์หรือปรับเทียบใหม่ในเกม +settings-general-fk_settings-ik-use_position-description = เปิดใช้งานการใช้ข้อมูลตำแหน่งจากแทร็กเกอร์ที่รองรับ เมื่อเปิดใช้งานแล้วโปรดทำการรีเซ็ตทั้งหมด แล้วตั้งศูนย์หรือปรับเทียบใหม่ในเกม settings-general-fk_settings-arm_fk = การจับตำแหน่งแขน -settings-general-fk_settings-arm_fk-description = บังคับให้ใช้ตำแหน่งแขนจากแว่น VR แม้ว่าจะมีข้อมูลตำแหน่งมืออยู่ก็ตาม +settings-general-fk_settings-arm_fk-description = บังคับให้ติดตามแขนจากเฮดเซ็ต (HMD) แม้ว่าจะมีข้อมูลตำแหน่งมืออยู่ก็ตาม settings-general-fk_settings-arm_fk-force_arms = บังคับใช้ตำแหน่งแขนจากแว่น settings-general-fk_settings-reset_settings = ตั้งค่าการรีเซ็ต -settings-general-fk_settings-reset_settings-reset_hmd_pitch-description = รีเซ็ตความเอียง (การหมุนก้มหรือเงย) ของ HMD เมื่อทำการรีเซ็ตแทร็กเกอร์ทั้งหมด มีประโยชน์หากสวม HMD ไว้ที่หน้าผากสำหรับ VTubing หรือ MoCap ไม่ควรเปิดใช้งานสำหรับการใช้งาน VR ทั่วไป +settings-general-fk_settings-reset_settings-reset_hmd_pitch-description = รีเซ็ตความเอียง (การหมุนก้มหรือเงย) ของ HMD เมื่อทำการรีเซ็ตทั้งหมด มีประโยชน์หากสวม HMD ไว้ที่หน้าผากสำหรับ VTubing หรือ MoCap ไม่ควรเปิดใช้งานสำหรับการใช้งาน VR ทั่วไป settings-general-fk_settings-reset_settings-reset_hmd_pitch = รีเซ็ตความเอียงของ HMD settings-general-fk_settings-arm_fk-reset_mode-description = เปลี่ยนท่าทางแขนที่ใช้สำหรับการรีเซ็ตตั้งศูนย์การติดตั้ง settings-general-fk_settings-arm_fk-back = ยื่นไปด้านหลัง settings-general-fk_settings-arm_fk-back-description = โหมดค่าเริ่มต้น โดยแขนท่อนบนจะเอียงไปด้านหลัง และแขนท่อนล่างจะชี้ไปด้านหน้า settings-general-fk_settings-arm_fk-tpose_up = ที-โพส (แขนขึ้น) -settings-general-fk_settings-arm_fk-tpose_up-description = กำหนดให้แขนแนบลำตัวระหว่างการรีเซ็ตแทร็กเกอร์ทั้งหมด และเหยียดออกด้านข้าง 90 องศา ระหว่างการรีเซ็ตตั้งศูนย์การติดตั้ง +settings-general-fk_settings-arm_fk-tpose_up-description = กำหนดให้แขนแนบลำตัวระหว่างการรีเซ็ตทั้งหมด และเหยียดออกด้านข้าง 90 องศา ระหว่างการรีเซ็ตตั้งศูนย์การติดตั้ง settings-general-fk_settings-arm_fk-tpose_down = ที-โพส (แขนลง) -settings-general-fk_settings-arm_fk-tpose_down-description = กำหนดให้แขนเหยียดออกด้านข้าง 90 องศา ระหว่างการรีเซ็ตแทร็กเกอร์ทั้งหมดและแนบลำตัว ระหว่างการรีเซ็ตตั้งศูนย์การติดตั้ง +settings-general-fk_settings-arm_fk-tpose_down-description = กำหนดให้แขนเหยียดออกด้านข้าง 90 องศา ระหว่างการรีเซ็ตทั้งหมดและแนบลำตัว ระหว่างการรีเซ็ตตั้งศูนย์การติดตั้ง settings-general-fk_settings-arm_fk-forward = ไปข้างหน้า settings-general-fk_settings-arm_fk-forward-description = กำหนดให้แขนยกไปด้านหน้าทำมุม 90 องศา มีประโยชน์สำหรับงาน VTubing settings-general-fk_settings-skeleton_settings-toggles = ตัวเลือกโครงกระดูก @@ -670,7 +670,7 @@ settings-general-fk_settings-skeleton_settings-impute_waist_from_chest_legs = settings-general-fk_settings-skeleton_settings-impute_hip_from_chest_legs = คำนวณตำแหน่งสะโพกจากอกและขา settings-general-fk_settings-skeleton_settings-impute_hip_from_waist_legs = คำนวณตำแหน่งสะโพกจากเอวและขา settings-general-fk_settings-skeleton_settings-interp_hip_legs = เฉลี่ยค่าแกนตั้งและแกนยาวของสะโพกร่วมกับขา -settings-general-fk_settings-skeleton_settings-interp_knee_tracker_ankle = เฉลี่ยค่าแกนตั้งและแกนยาวของตัวแทร็กเกอร์เข่าร่วมกับข้อเท้า +settings-general-fk_settings-skeleton_settings-interp_knee_tracker_ankle = เฉลี่ยค่าแกนตั้งและแกนยาวของแทร็กเกอร์เข่าร่วมกับข้อเท้า settings-general-fk_settings-skeleton_settings-interp_knee_ankle = เฉลี่ยค่าแกนตั้งและแกนยาวของเข่าร่วมกับข้อเท้า settings-general-fk_settings-self_localization-title = โหมด Mocap settings-general-fk_settings-self_localization-description = โหมด Mocap ช่วยให้โมเดลโครงกระดูกสามารถติดตามตำแหน่งโดยประมาณได้ โดยไม่ต้องใช้อุปกรณ์เฮดเซต (แว่น VR ) หรือแทร็กเกอร์อื่น ๆ โปรดทราบว่าฟังก์ชันนี้ต้องใช้แทร็กเกอร์ที่เท้าและศีรษะจึงจะทำงานได้ และยังอยู่ในช่วงทดลอง @@ -679,7 +679,7 @@ settings-general-fk_settings-self_localization-description = โหมด Mocap settings-general-gesture_control = การควบคุมด้วยท่าทาง settings-general-gesture_control-subtitle = การรีเซ็ตด้วยการแตะ -settings-general-gesture_control-description = เปิดใช้การรีเซ็ตด้วยการแตะแทร็กเกอร์ แทร็กเกอร์ที่อยู่สูงที่สุดบนลำตัวจะใช้สำหรับการรีเซ็ตแกนตั้ง แทร็กเกอร์ที่อยู่สูงที่สุดบนขาซ้ายใช้สำหรับรีเซ็ตแทร็กเกอร์ทั้งหมด และแทร็กเกอร์ที่อยู่สูงที่สุดบนขาขวาใช้สำหรับรีเซ็ตตั้งศูนย์การติดตั้ง โดยการแตะจะต้องเกิดขึ้นภายในเวลา 0.3 วินาทีคูณด้วยจำนวนครั้งของการแตะเพื่อให้ระบบรับรู้ +settings-general-gesture_control-description = เปิดใช้การรีเซ็ตด้วยการแตะแทร็กเกอร์ แทร็กเกอร์ที่อยู่สูงที่สุดบนลำตัวจะใช้สำหรับการรีเซ็ตแกนตั้ง แทร็กเกอร์ที่อยู่สูงที่สุดบนขาซ้ายใช้สำหรับรีเซ็ตทั้งหมด และแทร็กเกอร์ที่อยู่สูงที่สุดบนขาขวาใช้สำหรับรีเซ็ตตั้งศูนย์การติดตั้ง โดยการแตะจะต้องเกิดขึ้นภายในเวลา 0.3 วินาทีคูณด้วยจำนวนครั้งของการแตะเพื่อให้ระบบรับรู้ # This is a unit: 3 taps, 2 taps, 1 tap # $amount (Number) - Amount of taps (touches to the tracker's case) settings-general-gesture_control-taps = { $amount } ครั้ง @@ -689,7 +689,7 @@ settings-general-gesture_control-trackers = { $amount } ตัว settings-general-gesture_control-yawResetEnabled = ใช้การแตะเพื่อรีเซ็ตแกนตั้ง settings-general-gesture_control-yawResetDelay = เวลาหน่วงก่อนรีเซ็ตแกนตั้ง settings-general-gesture_control-yawResetTaps = แตะเพื่อรีเซ็ตแกนตั้ง -settings-general-gesture_control-fullResetEnabled = ใช้การแตะเพื่อรีเซ็ตแทร็กเกอร์ทั้งหมด +settings-general-gesture_control-fullResetEnabled = ใช้การแตะเพื่อรีเซ็ตทั้งหมด settings-general-gesture_control-fullResetDelay = เวลาหน่วงก่อนรีเซ็ตทั้งหมด settings-general-gesture_control-fullResetTaps = แตะเพื่อรีเซ็ตทั้งหมด settings-general-gesture_control-mountingResetEnabled = ใช้การแตะเพื่อรีเซ็ตการตั้งศูนย์การติดตั้ง @@ -729,7 +729,7 @@ settings-interface-appearance-decorations-label = ใช้แถบด้าน settings-interface-notifications = การแจ้งเตือน settings-general-interface-serial_detection = การตรวจจับอุปกรณ์ Serial settings-general-interface-serial_detection-description = ตัวเลือกนี้จะแสดงหน้าต่างป๊อปอัพทุกครั้งที่คุณเสียบอุปกรณ์ Serial ใหม่ที่อาจเป็นแทร็กเกอร์ ช่วยลดขั้นตอนการตั้งค่าแทร็กเกอร์ -settings-general-interface-serial_detection-label = ใช้การตรวจจับอุปกรณ์ซีเรียล +settings-general-interface-serial_detection-label = ใช้การตรวจจับอุปกรณ์ Serial settings-general-interface-feedback_sound = การแจ้งเตือนด้วยเสียง settings-general-interface-feedback_sound-description = ตัวเลือกนี้จะเล่นเสียงเมื่อมีการใช้การรีเซ็ต settings-general-interface-feedback_sound-label = แจ้งเตือนด้วยเสียง @@ -823,7 +823,7 @@ settings-osc-vrchat = แทร็กเกอร์ OSC VRChat # This cares about multilines settings-osc-vrchat-description-v1 = เปลี่ยนการตั้งค่าเฉพาะสำหรับมาตรฐานแทร็กเกอร์ OSC ที่ใช้ในการส่งข้อมูลการติดตาม - ไปยังแอปพลิเคชันที่ไม่ได้ใช้ SteamVR (เช่นอุปกรณ์ VR แบบเดี่ยว) + ไปยังแอปพลิเคชันที่ไม่ได้ใช้ SteamVR (เช่น เฮดเซ็ท VR แบบ Standalone ) ตรวจสอบให้แน่ใจว่าได้เปิดใช้งาน OSC ใน VRChat ผ่านเมนู Action Menu แล้วไปที่ ตัวเลือก>OSC > เปิดใช้งาน settings-osc-vrchat-enable = เปิดใช้งาน settings-osc-vrchat-enable-description = เปิดการรับและส่งข้อมูล @@ -832,7 +832,7 @@ settings-osc-vrchat-oscqueryEnabled = เปิดใช้งาน OSCQuery settings-osc-vrchat-oscqueryEnabled-description = OSCQuery จะตรวจจับอินสแตนซ์ของ VRChat ที่กำลังทำงานโดยอัตโนมัติ และส่งข้อมูลไปให้ และยังสามารถประกาศตัวเองเพื่อให้ได้รับข้อมูลจาก HMD และของคอนโทรเลอร์จาก VRChat ได้อีกด้วย - หากต้องการอนุญาตให้รับข้อมูล HMD และตัวควบคุมจาก VRChat ให้ไปที่การตั้งค่าเมนูหลัก ใต้ "การติดตาม & IK" และเปิดใช้งาน "อนุญาติให้ส่งข้อมูลการติดตามศรีษะและข้อมือ VR ผ่าน OSC" + หากต้องการอนุญาตให้รับข้อมูล HMD และตัวควบคุมจาก VRChat ให้ไปที่การตั้งค่าเมนูหลัก ใต้ "การติดตาม & IK" และเปิดใช้งาน "อนุญาตให้ส่งข้อมูลการติดตามศีรษะและข้อมือ VR ผ่าน OSC" settings-osc-vrchat-oscqueryEnabled-label = เปิดใช้งาน OSCQuery settings-osc-vrchat-network = พอร์ตเครือข่าย settings-osc-vrchat-network-description-v1 = ตั้งค่าพอร์ตสำหรับการรับฟังและการส่งข้อมูล สามารถปล่อยว่างไว้สำหรับ VRChat @@ -872,18 +872,18 @@ settings-osc-vmc-network-port_out = .label = พอร์ตขาออก .placeholder = พอร์ตขาออก (ค่าเริ่มต้น: 39539) settings-osc-vmc-network-address = ที่อยู่เครือข่าย -settings-osc-vmc-network-address-description = เลื่อกที่อยู่เครือข่ายที่จะส่งข้อมูลผ่าน VMC +settings-osc-vmc-network-address-description = เลือกที่อยู่เครือข่ายที่จะส่งข้อมูลผ่าน VMC settings-osc-vmc-network-address-placeholder = ที่อยู่ IPV4 settings-osc-vmc-vrm = โมเดล VRM settings-osc-vmc-vrm-description = โหลดโมเดล VRM เพื่อเปิดใช้งานการยึดศีรษะและเพิ่มความเข้ากันได้กับแอปพลิเคชันอื่น settings-osc-vmc-vrm-untitled_model = โมเดลที่ไม่มีชื่อ settings-osc-vmc-vrm-file_select = ลากและวางโมเดลหรือ ค้นหา -settings-osc-vmc-anchor_hip = ตรึงตำแหน่งที่สะโพก -settings-osc-vmc-anchor_hip-description = ตรึงการติดตามตำแหน่งไว้ที่สะโพก มีประโยชน์สำหรับการทำ VTubing ขณะนั่ง -settings-osc-vmc-anchor_hip-label = ตรึงตำแหน่งสะโพก +settings-osc-vmc-anchor_hip = ยึดตำแหน่งที่สะโพก +settings-osc-vmc-anchor_hip-description = ยึดการติดตามที่สะโพก มีประโยชน์สำหรับการทำ VTubing ในขณะนั่ง หากปิดใช้งาน ให้โหลดโมเดล VRM +settings-osc-vmc-anchor_hip-label = ยึดแหน่งที่สะโพก settings-osc-vmc-mirror_tracking = สะท้อนตำแหน่งการติดตาม settings-osc-vmc-mirror_tracking-description = สะท้อนการติดตามในแนวนอน -settings-osc-vmc-mirror_tracking-label = สะท้อนการติดตาม +settings-osc-vmc-mirror_tracking-label = สะท้อนตำแหน่งการติดตาม ## Common OSC settings @@ -896,7 +896,7 @@ settings-utils-advanced = ขั้นสูง settings-utils-advanced-reset-gui = รีเซ็ตตั้งค่า GUI settings-utils-advanced-reset-gui-description = คืนค่าการตั้งค่าเริ่มต้นสำหรับอินเทอร์เฟซ settings-utils-advanced-reset-gui-label = รีเซ็ต GUI -settings-utils-advanced-reset-server = รีเซ็ตตั้งค่าการแทร็กกิ้ง +settings-utils-advanced-reset-server = รีเซ็ตการตั้งค่าการติดตาม settings-utils-advanced-reset-server-description = คืนค่าการจับตำแหน่งทั้งหมดเป็นค่าเริ่มต้น settings-utils-advanced-reset-server-label = รีเซ็ตการจับตำแหน่ง settings-utils-advanced-reset-all = รีเซ็ตการตั้งค่าทั้งหมด @@ -904,17 +904,17 @@ settings-utils-advanced-reset-all-description = คืนค่าการต settings-utils-advanced-reset-all-label = รีเซ็ตทั้งหมด settings-utils-advanced-reset_warning = { $type -> - [gui] คำเตือน:การดำเนินการนี้จะรีเซ็ตการตั้งค่า GUI เป็นค่าเริ่มต้น คุณแน่ใจที่จะดำเนินการต่อไหม? + [gui] คำเตือน:การดำเนินการนี้จะรีเซ็ตการตั้งค่าอินเทอร์เฟซทั้งหมดเป็นค่าเริ่มต้น คุณแน่ใจที่จะดำเนินการต่อไหม? [server] คำเตือน:การดำเนินการนี้จะรีเซ็ตการตั้งค่าการจับตำแหน่งเป็นค่าเริ่มต้น คุณแน่ใจที่จะดำเนินการต่อไหม? *[all] คำเตือน:การดำเนินการนี้จะรีเซ็ตการตั้งค่าทั้งหมดเป็นค่าเริ่มต้น คุณแน่ใจที่จะดำเนินการต่อไหม? } settings-utils-advanced-reset_warning-reset = รีเซ็ตการตั้งค่า settings-utils-advanced-reset_warning-cancel = ยกเลิก settings-utils-advanced-open_data-v1 = โฟลเดอร์การตั้งค่า -settings-utils-advanced-open_data-description-v1 = เปิดโฟลเดอร์การตั้งค่าของ SlimeVR โดยจะมีไฟล์การตั้งค่าโปรแกรมด้านใน +settings-utils-advanced-open_data-description-v1 = เปิดโฟลเดอร์การตั้งค่าของ SlimeVR โดยภายในจะมีไฟล์การตั้งค่าโปรแกรม settings-utils-advanced-open_data-label = เปิดโฟลเดอร์ settings-utils-advanced-open_logs = โฟลเดอร์บันทึก -settings-utils-advanced-open_logs-description = เปิดโฟลเดอร์บันทึกไฟล์ของ SlimeVR โดยจะมีไฟล์บันทึกการทำงานของแอป +settings-utils-advanced-open_logs-description = เปิดโฟลเดอร์บันทึกไฟล์ของ SlimeVR โดยภายในจะมีไฟล์บันทึกการทำงานของแอป settings-utils-advanced-open_logs-label = เปิดโฟลเดอร์ ## Home Screen @@ -933,22 +933,23 @@ settings-tracking_checklist-active_steps-desc = รายการขั้น onboarding-skip = ข้ามการตั้งค่า onboarding-continue = ดำเนินการต่อ -onboarding-wip = อยู่ในระหว่างการดำเนินการ +onboarding-wip = ยังไม่พร้อมใช้งาน onboarding-previous_step = ขั้นตอนก่อนหน้า onboarding-setup_warning = คำเตือน: การตั้งค่าเริ่มต้นนี้จำเป็นสำหรับการจับตำแหน่งที่ดี - จำเป็นต้องดำเนินกาหากนี่เป็นครั้งแรกที่คุณใช้ SlimeVR + จำเป็นต้องดำเนินการหากนี่เป็นครั้งแรกที่คุณใช้ SlimeVR onboarding-setup_warning-skip = ข้ามการตั้งค่า onboarding-setup_warning-cancel = ดำเนินการตั้งค่าต่อ ## Wi-Fi setup onboarding-wifi_creds-back = กลับไปที่หน้าบทนำ -onboarding-wifi_creds = ป้อนข้อมูลประจำตัว Wi-Fi +onboarding-wifi_creds = ป้อนข้อมูลเครือข่าย Wi-Fi # This cares about multilines onboarding-wifi_creds-description = - แทร็กเกอร์จะใช้ข้อมูลประจำตัวเหล่านี้ในการเชื่อมต่อแบบไร้สาย - โปรดใช้ข้อมูลประจำตัวที่คุณกำลังเชื่อมต่ออยู่ในปัจจุบัน + แทร็กเกอร์จะใช้ข้อมูลการเชื่อมต่อเหล่านี้เพื่อเชื่อมต่อแบบไร้สาย + โปรดใช้ข้อมูลเครือข่าย Wi-Fi ที่อุปกรณ์ของคุณกำลังเชื่อมต่ออยู่ + เครือข่าย Wi-Fi นี้ต้องเป็นเครือข่าย 2.4 GHz เท่านั้น onboarding-wifi_creds-skip = ข้ามการตั้งค่า Wi-Fi onboarding-wifi_creds-submit = ยืนยัน! onboarding-wifi_creds-ssid = @@ -963,24 +964,24 @@ onboarding-wifi_creds-password = onboarding-reset_tutorial-back = กลับไปยังการตั้งศูนย์การติดตั้งแทร็กเกอร์ onboarding-reset_tutorial = บทช่วยสอนการรีเซ็ต -onboarding-reset_tutorial-explanation = ขณะใช้งานแทร็กเกอร์ของคุณอาจคลาดเคลื่อนเนื่องจากการดริฟท์ของแกนตั้งของ IMU หรือจากการเคลื่อนที่ทางกายภาพของตัวแทร็กเกอร์เอง คุณมีวิธีการแก้ไขหลายวิธี +onboarding-reset_tutorial-explanation = ขณะที่คุณใช้แทร็กเกอร์ มันอาจเกิดการคลาดเคลื่อนขึ้นได้เนื่องจากการดริฟท์ของ IMU หรือจากการที่แทร็กเกอร์บนตัวคุณนั้นขยับออกจากตำแหน่ง คุณมีหลายวิธีในการแก้ไขปัญหานี้ onboarding-reset_tutorial-skip = ข้ามขั้นตอนนี้ # Cares about multiline onboarding-reset_tutorial-0 = - แตะแทร็กเกอร์ที่ถูกเน้น { $taps } ครั้ง ในการรีเซ็ตแกนตั้ง - นี่จะทำให้แทร็กเกอร์หันไปด้านเดียวกับแว่น VR ของคุณ + แตะแทร็กเกอร์ที่ไฮไลท์ { $taps } ครั้ง เพื่อเรียกใช้การรีเซ็ตแกนตั้ง + นี่จะทำให้แทร็กเกอร์หันไปในทิศทางเดียวกับเฮดเซ็ท (HMD) ของคุณ # Cares about multiline onboarding-reset_tutorial-1 = - แตะแทร็กเกอร์ที่ถูกเน้น { $taps } ครั้ง ในการรีเซ็ตแทรกเกอร์ทั้งหมด - คุณจำเป็นจะต้องยืนตรง แขนแนบลำตัวในการรีเซ็ตนี้(i-pose) จะมีดีเลย์ 3 วินาที (สามารถปรับได้) ก่อนจะเริ่มการรีเซ็ต - นี่จะรีเซ็ตตำแหน่งและค่าหมุนของแทร็กเกอร์ทั้งหมดกลับมาที่เดิม ซึ่งช่วยแก้ปัญหาส่วนใหญ่ได้ + แตะแทร็กเกอร์ที่ไฮไลท์ { $taps } ครั้ง เพื่อเรียกใช้การรีเซ็ตทั้งหมด + คุณจำเป็นจะต้องยืนตรง แขนแนบลำตัว(i-pose) จะนับถอยหลัง 3 วินาที (สามารถปรับได้) ก่อนที่การรีเซ็ตจะเกิดขึ้น + นี่จะรีเซ็ตตำแหน่งและการหมุนของแทร็กเกอร์ทั้งหมดของคุณ ซึ่งช่วยแก้ปัญหาส่วนใหญ่ได้ # Cares about multiline onboarding-reset_tutorial-2 = - แตะไปยังแทร็กเกอร์ที่ถูกเน้น { $taps } ครั้ง เพื่อทำการรีเซ็ตตำแหน่งแทร็กเกอร์ + แตะแทร็กเกอร์ที่ไฮไลท์ { $taps } ครั้ง เพื่อเรียกใช้การตั้งศูนย์การติดตั้ง - รีเซ็ตตำแหน่งนั้นช่วยปรับตำแหน่งที่แทร็กเกอร์ถูกวางบนตัวคุณจริงๆ ดังนั้นหากคุณเผลอเคลื่อนย้ายแทร็กเกอร์และเปลี่ยนทิศทางของมันไปมาก สิ่งนี้จะช่วยแก้ไขได้ + การตั้งศูนย์การติดตั้งจะปรับแก้ตามวิธีการวางแทร็กเกอร์บนร่างกายของคุณ นี่จะช่วยคุณได้มากหากคุณเผลอเคลื่อนย้ายหรือเปลี่ยนทิศทางของแทร็กเกอร์จนมากเกินไป - คุณต้องอยู่ในท่าเหมือนกำลังเล่นสกีตามที่แสดงในตัวช่วยการติดตั้งอัตโนมัติ โดยจะนับถอยหลังใน 3 วิาที (สามารถกำหนดได้) ก่อนจะทำการรีเซ็ต + คุณต้องอยู่ในท่าเล่นสกีตามที่แสดงในตัวช่วยตั้งค่า โดยจะนับถอยหลังใน 3 วินาที (สามารถกำหนดได้) ก่อนที่การรีเซ็ตจะเกิดขึ้น ## Setup start @@ -995,25 +996,25 @@ onboarding-done-close = ปิดการตั้งค่า ## Tracker connection setup -onboarding-connect_tracker-back = กลับไปหน้าข้อมูล Wi-Fi +onboarding-connect_tracker-back = กลับไปหน้าข้อมูลเครือข่าย Wi-Fi onboarding-connect_tracker-title = เชื่อมต่อแทร็กเกอร์ -onboarding-connect_tracker-description-p0-v1 = มาถึงส่วนที่สนุกแล้ว การเชื่อมต่อแทร็กเกอร์! +onboarding-connect_tracker-description-p0-v1 = มาถึงส่วนที่น่าสนใจแล้ว คือการเชื่อมต่อแทร็กเกอร์! onboarding-connect_tracker-description-p1-v1 = เชื่อมต่อแทร็กเกอร์ทีละตัวผ่านพอร์ต USB onboarding-connect_tracker-issue-serial = ฉันมีปัญหาในการเชื่อมต่อ! onboarding-connect_tracker-usb = USB แทร็กเกอร์ -onboarding-connect_tracker-connection_status-none = กำลังมองหาแทร็กเกอร์... +onboarding-connect_tracker-connection_status-none = กำลังค้นหาแทร็กเกอร์ onboarding-connect_tracker-connection_status-serial_init = กำลังเชื่อมต่อกับอุปกรณ์ Serial onboarding-connect_tracker-connection_status-obtaining_mac_address = กำลังรับ MAC address ของแทร็กเกอร์ -onboarding-connect_tracker-connection_status-provisioning = กำลังส่งข้อมูล Wi-Fi +onboarding-connect_tracker-connection_status-provisioning = กำลังส่งข้อมูลเครือข่าย Wi-Fi onboarding-connect_tracker-connection_status-connecting = กำลังพยายามเชื่อมต่อ Wi-Fi onboarding-connect_tracker-connection_status-looking_for_server = กำลังหาเซิร์ฟเวอร์ onboarding-connect_tracker-connection_status-connection_error = ไม่สามารถเชื่อมต่อกับ Wi-Fi onboarding-connect_tracker-connection_status-could_not_find_server = ไม่พบเซิร์ฟเวอร์ onboarding-connect_tracker-connection_status-done = เชื่อมต่อกับเซิร์ฟเวอร์แล้ว onboarding-connect_tracker-connection_status-no_serial_log = ไม่สามารถรับบันทึกจากแทร็กเกอร์ได้ -onboarding-connect_tracker-connection_status-no_serial_device_found = ไม่สามารถหาแทร็กเกอร์จาก USB +onboarding-connect_tracker-connection_status-no_serial_device_found = ไม่พบแทร็กเกอร์จาก USB onboarding-connect_serial-error-modal-no_serial_log = แทร็กเกอร์คุณเปิดอยู่หรือเปล่า? -onboarding-connect_serial-error-modal-no_serial_log-desc = ตรวจสอบให้แน่ใจว่าแทร็กเกอร์นั้นเปิดอยู่และเชื่อมต่อกับคอมพิวเตอร์ของคุณ +onboarding-connect_serial-error-modal-no_serial_log-desc = ตรวจสอบให้แน่ใจว่าแทร็กเกอร์เปิดอยู่และเชื่อมต่อกับคอมพิวเตอร์ของคุณ onboarding-connect_serial-error-modal-no_serial_device_found = ไม่พบแทร็กเกอร์ onboarding-connect_serial-error-modal-no_serial_device_found-desc = โปรดเชื่อมต่อแทร็กเกอร์ด้วยสาย USB เข้ากับคอมพิวเตอร์ของคุณและเปิดแทร็กเกอร์ @@ -1036,8 +1037,8 @@ onboarding-connect_tracker-next = ฉันเชื่อมต่อแทร ## Tracker calibration tutorial onboarding-calibration_tutorial = บทเรียนการตั้งศูนย์ IMU -onboarding-calibration_tutorial-subtitle = นี่จะช่วยลดค่าดริฟท์ของแทร็กเกอร์! -onboarding-calibration_tutorial-description-v1 = หลังจากเปิดแทร็กเกอร์แล้ว ให้วางไว้บนพื้นผิวที่มั่นคงสักครู่เพื่อทำการตั้งศูนย์ การตั้งศูนย์ IMU สามารถทำได้ตลอดเวลาหลังจากเปิดแทร็กเกอร์—หน้าจอนี้เพียงแค่ให้บทช่วยสอน หากต้องการเริ่ม ให้คลิกปุ่ม "{ onboarding-calibration_tutorial-calibrate }" จากนั้น อย่าขยับแทร็กเกอร์ของคุณ! +onboarding-calibration_tutorial-subtitle = นี่จะช่วยลดการดริฟท์ของแทร็กเกอร์! +onboarding-calibration_tutorial-description-v1 = หลังจากเปิดแทร็กเกอร์แล้ว ให้วางไว้บนพื้นที่เรียบนิ่งๆสักครู่เพื่อทำการตั้งศูนย์ การตั้งศูนย์ IMU สามารถทำได้ตลอดเวลาหลังจากเปิดแทร็กเกอร์—หน้าจอนี้เพียงแค่ให้บทช่วยสอน หากต้องการเริ่ม ให้คลิกปุ่ม "{ onboarding-calibration_tutorial-calibrate }" จากนั้น อย่าขยับแทร็กเกอร์ของคุณ! onboarding-calibration_tutorial-calibrate = ฉันวางแทร็กเกอร์บนโต๊ะแล้ว onboarding-calibration_tutorial-status-waiting = กำลังรอคุณอยู่ onboarding-calibration_tutorial-status-calibrating = กำลังตั้งศูนย์ @@ -1048,7 +1049,7 @@ onboarding-calibration_tutorial-skip = ข้ามบทช่วยสอน ## Tracker assignment tutorial onboarding-assignment_tutorial = วิธีเตรียมแทร็กเกอร์ Slime ก่อนสวมใส่ -onboarding-assignment_tutorial-first_step = 1. ติดสติกเกอร์ส่วนของร่างกาย (หากคุณมี) บนแทร็กเกอร์ตามที่คุณเลือก +onboarding-assignment_tutorial-first_step = 1. ติดสติกเกอร์บอกส่วนของร่างกาย (หากคุณมี) บนแทร็กเกอร์ตามที่คุณเลือก # This text has a character limit of around 11 characters, so please keep it short onboarding-assignment_tutorial-sticker = สติกเกอร์ onboarding-assignment_tutorial-second_step-v2 = 2. ติดสายรัดเข้ากับแทร็กเกอร์ของคุณ โดยให้ด้านหนามเตยของสายรัดหันไปในทิศทางเดียวกับหน้าของแทร็กเกอร์: @@ -1057,17 +1058,17 @@ onboarding-assignment_tutorial-done = ฉันแปะสติกเกอร ## Tracker assignment setup -onboarding-assign_trackers-back = กลับไปยังการตั้งค่า Wi-Fi +onboarding-assign_trackers-back = กลับไปยังการตั้งค่าข้อมูลเครือข่าย Wi-Fi onboarding-assign_trackers-title = กำหนดตำแหน่งแทร็กเกอร์ -onboarding-assign_trackers-description = มาเลือกกันเลยว่าแทร็กเกอร์ไหนจะไปอยู่ตรงไหน คลิกที่ตำแหน่งที่คุณต้องการกำหนดแทร็กเกอร์ +onboarding-assign_trackers-description = มาเลือกกันเลยว่าแทร็กเกอร์ไหนจะไปอยู่ตรงไหน คลิกที่ตำแหน่งที่คุณต้องการกำหนดแทร็กเกอร์ได้เลย onboarding-assign_trackers-unassign_all = ยกเลิกการกำหนดแทร็กเกอร์ทั้งหมด # Look at translation of onboarding-connect_tracker-connected_trackers on how to use plurals # $assigned (Number) - Trackers that have been assigned a body part # $trackers (Number) - Trackers connected to the server onboarding-assign_trackers-assigned = แทร็กเกอร์ { $assigned } จาก { $trackers } ตัว ได้ถูกกำหนดตำแหน่งแล้ว onboarding-assign_trackers-advanced = แสดงตำแหน่งที่กำหนดได้เพิ่มเติม -onboarding-assign_trackers-next = ฉันได้กำหนดตำแหน่งหมดแล้ว -onboarding-assign_trackers-mirror_view = สะท้อนด้านตำแหน่ง +onboarding-assign_trackers-next = ฉันกำหนดแทร็กเกอร์ทั้งหมดแล้ว +onboarding-assign_trackers-mirror_view = มุมมองภาพสะท้อน onboarding-assign_trackers-option-amount = x{ $trackersCount } onboarding-assign_trackers-option-label = { $mode -> @@ -1095,7 +1096,7 @@ onboarding-assign_trackers-warning-LEFT_FOOT = [0] กำหนดตำแหน่งเท้าซ้ายแล้ว แต่ยังต้องกำหนดข้อเท้าซ้าย, ต้นขาซ้าย และส่วนใดส่วนหนึ่งระหว่าง อก, สะโพก หรือ เอว เพิ่มเติมด้วย! [1] กำหนดตำแหน่งเท้าซ้ายแล้ว แต่ยังต้องกำหนดต้นขาซ้าย และส่วนใดส่วนหนึ่งระหว่าง อก, สะโพก หรือ เอว เพิ่มเติมด้วย! [2] กำหนดตำแหน่งเท้าซ้ายแล้ว แต่ยังต้องกำหนดข้อเท้าซ้าย และส่วนใดส่วนหนึ่งระหว่าง อก, สะโพก หรือ เอว เพิ่มเติมด้วย! - [3] เท้าซ้าย ถูกกำหนดแล้ว แต่คุณต้องกำหนด และส่วนใดส่วนหนึ่งระหว่าง อก สะโพก หรือ เอว ด้วย + [3] เท้าซ้าย ถูกกำหนดแล้ว แต่คุณต้องกำหนด และส่วนใดส่วนหนึ่งระหว่าง อก, สะโพก หรือ เอว ด้วย [4] กำหนดตำแหน่งเท้าซ้ายแล้ว แต่ยังต้องกำหนดส่วนใดส่วนหนึ่งระหว่าง อก, สะโพก หรือ เอว เพิ่มเติมด้วย! [5] กำหนดตำแหน่งเท้าซ้ายแล้ว แต่ยังต้องกำหนดต้นขาซ้ายเพิ่มเติมด้วย! [6] กำหนดตำแหน่งเท้าซ้ายแล้ว แต่ยังต้องกำหนดข้อเท้าซ้ายเพิ่มเติมด้วย! @@ -1158,21 +1159,21 @@ onboarding-assign_trackers-warning-WAIST = onboarding-choose_mounting = ต้องการใช้วิธีการตั้งศูนย์การติดตั้งแบบใด? # Multiline text -onboarding-choose_mounting-description = การตั้งศูนย์การติดตั้งจะแก้ไขการวางแนวของแทร็กเกอร์บนร่างกายของคุณ +onboarding-choose_mounting-description = การตั้งศูนย์การติดตั้งจะแก้ไขทิศทางการติดตั้งของแทร็กเกอร์บนร่างกายของคุณ onboarding-choose_mounting-auto_mounting = ตั้งศูนย์การติดตั้งอัตโนมัติ # Italicized text onboarding-choose_mounting-auto_mounting-label-v2 = แนะนำ -onboarding-choose_mounting-auto_mounting-description = ะบบจะตรวจจับการวางแนวการติดตั้งของแทร็กเกอร์ทั้งหมดของคุณโดยอัตโนมัติ จากท่าทาง 2 ท่า +onboarding-choose_mounting-auto_mounting-description = ระบบจะตรวจจับทิศทางการติดตั้งของแทร็กเกอร์ทั้งหมดของคุณโดยอัตโนมัติ จากท่าทาง 2 ท่า onboarding-choose_mounting-manual_mounting = ตั้งศูนย์การติดตั้งด้วยตัวเอง # Italicized text onboarding-choose_mounting-manual_mounting-label-v2 = อาจมีความแม่นยำไม่เพียงพอ -onboarding-choose_mounting-manual_mounting-description = คุณสามารถเลือกการวางแนวการติดตั้งด้วยตนเองสำหรับแทร็กเกอร์แต่ละตัว +onboarding-choose_mounting-manual_mounting-description = คุณสามารถเลือกทิศทางการติดตั้งด้วยตนเองสำหรับแทร็กเกอร์แต่ละตัว # Multiline text onboarding-choose_mounting-manual_modal-title = คุณแน่ใจหรือไม่ว่าต้องการ ทำการตั้งศูนย์การติดตั้งแบบอัตโนมัติ? onboarding-choose_mounting-manual_modal-description = แนะนำให้ผู้ใช้ใหม่ใช้การตั้งศูนย์การติดตั้งด้วยตนเอง เนื่องจากท่าทางสำหรับการตั้งศูนย์แบบอัตโนมัตินั้นอาจทำได้ยากในช่วงแรกและอาจต้องอาศัยการฝึกฝน -onboarding-choose_mounting-manual_modal-confirm = ฉันรู้ว่าฉันทําอะไรอยู่ +onboarding-choose_mounting-manual_modal-confirm = ฉันรู้ว่าฉันทำอะไรอยู่ onboarding-choose_mounting-manual_modal-cancel = ยกเลิก ## Tracker manual mounting setup @@ -1187,7 +1188,7 @@ onboarding-manual_mounting-next = ขั้นตอนถัดไป onboarding-automatic_mounting-back = กลับไปยังเข้าสู่ VR onboarding-automatic_mounting-title = ตั้งศูนย์การติดตั้งแทร็กเกอร์ -onboarding-automatic_mounting-description = เพื่อให้ SlimeVR ทำงานได้ เราจะต้องทำการตั้งค่าการติดตั้งของแทร็กเกอร์ของคุณให้ตรงกับการติดตั้งบนร่างกายจริง +onboarding-automatic_mounting-description = เพื่อให้แทร็กเกอร์ SlimeVR ทำงานได้ เราจำเป็นต้องกำหนดทิศทางการติดตั้งให้กับแทร็กเกอร์ของคุณเพื่อจัดแนวให้ตรงกับการติดตั้งแทร็กเกอร์บนร่างกายคุณ onboarding-automatic_mounting-manual_mounting = ตั้งศูนย์การติดตั้งด้วยตนเอง onboarding-automatic_mounting-next = ขั้นตอนถัดไป onboarding-automatic_mounting-prev_step = ขั้นตอนก่อนหน้า @@ -1196,30 +1197,30 @@ onboarding-automatic_mounting-done-description = ตั้งศูนย์ก onboarding-automatic_mounting-done-restart = ลองอีกครั้ง onboarding-automatic_mounting-mounting_reset-title = ตั้งศูนย์การติดตั้ง onboarding-automatic_mounting-mounting_reset-step-0 = 1. ย่อตัวในท่า "เล่นสกี" โดยการงอขา ลำตัวส่วนบนเอียงไปด้านหน้า และงอแขน -onboarding-automatic_mounting-mounting_reset-step-1 = 2. กดปุ่ม "ตั้งศูนย์การติดตั้ง" และรอ 3 วินาที ก่อนที่การวางแนวการติดตั้งของแทร็กเกอร์จะถูกรีเซ็ต +onboarding-automatic_mounting-mounting_reset-step-1 = 2. กดปุ่ม "ตั้งศูนย์การติดตั้ง" และรอ 3 วินาที ก่อนที่ทิศทางการติดตั้งของแทร็กเกอร์จะถูกรีเซ็ต onboarding-automatic_mounting-mounting_reset-feet-step-0 = 1. ยืนเขย่งปลายเท้าทั้งสองข้างโดยให้เท้าชี้ไปด้านหน้า หรืออีกทางเลือกหนึ่งคือคุณสามารถทำได้ขณะนั่งอยู่บนเก้าอี้ -onboarding-automatic_mounting-mounting_reset-feet-step-1 = 2. กดปุ่ม "ตั้งศูนย์เท้า" และรอ 3 วินาที ก่อนที่การวางแนวการติดตั้งของแทร็กเกอร์จะถูกรีเซ็ต -onboarding-automatic_mounting-preparation-title = การเตรียมความพร้อม -onboarding-automatic_mounting-preparation-v2-step-0 = 1. กดที่ปุ่ม "รีเซ็ตแทร็กเกอร์ทั้งหมด" +onboarding-automatic_mounting-mounting_reset-feet-step-1 = 2. กดปุ่ม "ตั้งศูนย์เท้า" และรอ 3 วินาที ก่อนที่ทิศทางการติดตั้งของแทร็กเกอร์จะถูกรีเซ็ต +onboarding-automatic_mounting-preparation-title = การเตรียมตัว +onboarding-automatic_mounting-preparation-v2-step-0 = 1. กดที่ปุ่ม "รีเซ็ตทั้งหมด" onboarding-automatic_mounting-preparation-v2-step-1 = 2. ยืนตัวตรง แขนแนบลำตัว ตรวจสอบให้แน่ใจว่ากำลังมองตรงไปข้างหน้า onboarding-automatic_mounting-preparation-v2-step-2 = 3. ค้างท่าทางไว้จนกว่าตัวจับเวลา 3 วินาทีจะสิ้นสุดลง onboarding-automatic_mounting-put_trackers_on-title = ใส่แทร็กเกอร์ของคุณ -onboarding-automatic_mounting-put_trackers_on-description = เพื่อตั้งศูนย์การวางแนวการติดตั้ง เราจะใช้แทร็กเกอร์ที่คุณกำหนดตำแหน่งไปเมื่อสักครู่ โปรดสวมใส่แทร็กเกอร์ของคุณ โดยคุณสามารถดูว่าแทร็กเกอร์ใดคือส่วนใดได้จากภาพด้านขวา -onboarding-automatic_mounting-put_trackers_on-next = ฉันใส่แทร็กเกอร์ทั้งหมดแล้ว +onboarding-automatic_mounting-put_trackers_on-description = เพื่อตั้งศูนย์ทิศทางการติดตั้ง เราจะใช้แทร็กเกอร์ที่คุณกำหนดตำแหน่งไปเมื่อสักครู่ โปรดสวมใส่แทร็กเกอร์ของคุณ โดยคุณสามารถดูว่าแทร็กเกอร์ใดคือส่วนใดได้จากภาพด้านขวา +onboarding-automatic_mounting-put_trackers_on-next = ฉันสวมแทร็กเกอร์ทั้งหมดแล้ว onboarding-automatic_mounting-return-home = เสร็จแล้ว ## Tracker manual proportions setupa onboarding-manual_proportions-back-scaled = กลับไปที่สัดส่วนที่อ้างอิงขนาด onboarding-manual_proportions-title = ปรับสัดส่วนร่างกายด้วยตนเอง -onboarding-manual_proportions-fine_tuning_button = ปรับค่าสัดส่วนร่างกายโดยอัตโนมัติ -onboarding-manual_proportions-fine_tuning_button-disabled-tooltip = กรุณาเชื่อมแว่น VR ของคุณเพื่อใช้งานการปรับค่าโดยอัตโนมัติ +onboarding-manual_proportions-fine_tuning_button = ปรับสัดส่วนโดยละเอียดอัตโนมัติ +onboarding-manual_proportions-fine_tuning_button-disabled-tooltip = โปรดเชื่อมต่อเฮดเซ็ท VR เพื่อใช้การปรับโดยละเอียดอัตโนมัติ onboarding-manual_proportions-export = ส่งออกค่าสัดส่วน onboarding-manual_proportions-import = นำเข้าค่าสัดส่วน onboarding-manual_proportions-file_type = ไฟล์ข้อมูลสัดส่วน onboarding-manual_proportions-normal_increment = เพิ่มจำนวนแบบปกติ onboarding-manual_proportions-precise_increment = เพิ่มจำนวนแบบละเอียด -onboarding-manual_proportions-grouped_proportions = กลุ่มสัดส่วนร่างกาย +onboarding-manual_proportions-grouped_proportions = สัดส่วนแบบกลุ่ม onboarding-manual_proportions-all_proportions = สัดส่วนทั้งหมด onboarding-manual_proportions-estimated_height = ความสูงของผู้ใช้โดยประมาณ @@ -1231,8 +1232,8 @@ onboarding-automatic_proportions-description = เพื่อให้ SlimeVR onboarding-automatic_proportions-manual = ปรับสัดส่วนด้วยตัวเอง onboarding-automatic_proportions-prev_step = ขั้นตอนก่อนหน้า onboarding-automatic_proportions-put_trackers_on-title = ใส่แทร็กเกอร์ของคุณ -onboarding-automatic_proportions-put_trackers_on-description = เราจะใช้แทร็กเกอรที่ถูกกำหนดตำแหน่งไว้แล้วในการตั้งศูนย์สัดส่วน ใส่แทร็กเกอร์ของคุณได้เลย หากไม่แน่ใจว่าแทร็กเกอร์เป็นตัวไหน สามารถดูได้จากภาพด้านขวา -onboarding-automatic_proportions-put_trackers_on-next = ฉันใส่แทร็กเกอร์ทั้งหมดแล้ว +onboarding-automatic_proportions-put_trackers_on-description = เราจะใช้แทร็กเกอร์ที่ถูกกำหนดตำแหน่งไว้แล้วในการตั้งศูนย์สัดส่วน ใส่แทร็กเกอร์ของคุณได้เลย หากไม่แน่ใจว่าแทร็กเกอร์เป็นตัวไหน สามารถดูได้จากภาพด้านขวา +onboarding-automatic_proportions-put_trackers_on-next = ฉันสวมแทร็กเกอร์ครบทุกตัวแล้ว onboarding-automatic_proportions-requirements-title = สิ่งที่ต้องการ # Each line of text is a different list item onboarding-automatic_proportions-requirements-descriptionv2 = @@ -1245,8 +1246,10 @@ onboarding-automatic_proportions-requirements-next = ฉันได้อ่า onboarding-automatic_proportions-check_height-title-v3 = วัดความสูงของเฮดเซ็ท onboarding-automatic_proportions-check_height-description-v2 = ความสูงเฮดเซ็ท (HMD) ควรจะต่ำกว่าความสูงจริงของคุณเล็กน้อย เนื่องจากเฮดเซ็ทจะวัดความสูงระดับสายตา การวัดนี้จะถูกใช้เป็นพื้นฐานสำหรับการคำนวณสัดส่วนร่างกายของคุณ # All the text is in bold! -onboarding-automatic_proportions-check_height-calculation_warning-v3 = ให้เริ่มต้นการวัดในขณะที่ยืนตัวตรงเพื่อวัดความสูงของคุณ ระวังอย่าให้มือของคุณยกสูงเกินเฮดเซ็ท เพราะอาจส่งผลต่อการวัด! -onboarding-automatic_proportions-check_height-guardian_tip = หากคุณใช้อุปกรณ์แว่น VR แบบเดี่ยวๆ โปรดตรวจสอบให้แน่ใจว่าได้เปิดใช้งาน Guardian /Boundary เพื่อให้การวัดความสูงถูกต้อง! +onboarding-automatic_proportions-check_height-calculation_warning-v3 = ให้เริ่มต้นการวัดในขณะที่ยืนตัว ตรง เพื่อวัดความสูงของคุณ ระวังอย่าให้มือของคุณยกสูงเกินเฮดเซ็ท เพราะอาจส่งผลต่อการวัด! +onboarding-automatic_proportions-check_height-guardian_tip = + หากคุณใช้เฮดเซ็ท VR แบบ Standalone โปรดตรวจสอบให้แน่ใจว่าได้เปิด Guardian / + Boundary เพื่อให้ความสูงของคุณถูกต้อง! # Context is that the height is unknown onboarding-automatic_proportions-check_height-unknown = ไม่ทราบ # Shows an element below it @@ -1255,10 +1258,10 @@ onboarding-automatic_proportions-check_height-measure-start = เริ่มก onboarding-automatic_proportions-check_height-measure-stop = หยุดการวัด onboarding-automatic_proportions-check_height-measure-reset = ทำการวัดอีกครั้ง onboarding-automatic_proportions-check_height-next_step = ใช้ความสูงจากเฮดเซ็ทคุณ -onboarding-automatic_proportions-check_floor_height-title = วัดความสูงของพื้นของคุณ (ไม่บังคับ) -onboarding-automatic_proportions-check_floor_height-description = ในบางกรณีแว่นของคุณอาจมีการตั้งค่าความสูงของพื้นที่ไม่ถูกต้อง ทำให้ความสูงของแว่นวัดได้สูงกว่าที่ควร คุณสามารถวัดความ"สูง" ของพื้นให้ถูกต้องได้ +onboarding-automatic_proportions-check_floor_height-title = วัดความสูงพื้นของคุณ (ไม่บังคับ) +onboarding-automatic_proportions-check_floor_height-description = ในบางกรณี ความสูงพื้นของเฮดเซ็ทอาจไม่ได้ถูกตั้งค่าอย่างถูกต้อง ทำให้ความสูงที่วัดได้สูงเกินกว่าที่ควรจะเป็น คุณสามารถวัด "ความสูง" ของพื้นเพื่อแก้ไขความสูงของเฮดเซ็ทคุณได้ # All the text is in bold! -onboarding-automatic_proportions-check_floor_height-calculation_warning-v2 = เริ่มต้นการวัดโดยการวาง Controller บนพื้นเพื่อวัดความสูงของพื้นของคุณ ถ้าคุณมั่นใจแล้วว่าความสูงของพื้นคุณถูกต้อง คุณสามารถข้ามขั้นตอนนี้ได้ +onboarding-automatic_proportions-check_floor_height-calculation_warning-v2 = เริ่มการวัดและวางคอนโทรลเลอร์ไว้บนพื้นเพื่อวัดความสูง หากคุณแน่ใจว่าความสูงพื้นถูกต้อง คุณสามารถข้ามขั้นตอนนี้ได้ # Shows an element below it onboarding-automatic_proportions-check_floor_height-floor_height = ความสูงของพื้นของคุณคือ: onboarding-automatic_proportions-check_floor_height-full_height = ความสูงโดยประมาณของคุณคือ: @@ -1291,7 +1294,7 @@ onboarding-automatic_proportions-verify_results-processing = กำลังป onboarding-automatic_proportions-verify_results-redo = ทำการบันทึกใหม่ onboarding-automatic_proportions-verify_results-confirm = ถูกต้องแล้ว onboarding-automatic_proportions-done-title = วัดสัดส่วนร่างกายและบันทึกเรียบร้อยแล้ว -onboarding-automatic_proportions-done-description = ปรับสัดส่วนร่างกายของคุณสำเร็จแล้ว +onboarding-automatic_proportions-done-description = การตั้งศูนย์สัดส่วนร่างกายของคุณเสร็จสมบูรณ์แล้ว! onboarding-automatic_proportions-error_modal-v2 = คำเตือน: เกิดข้อผิดพลาดระหว่างการประมาณสัดส่วน! อาจเกิดจากตำแหน่งการติดตั้งแทร็กเกอร์ที่ไม่ถูกต้อง โปรดตรวจสอบว่าแทร็กเกอร์ทำงานอย่างถูกต้อง แล้วลองอีกครั้ง @@ -1317,14 +1320,14 @@ onboarding-user_height-calibration-WAITING_FOR_FW_LOOK = ยืนขึ้น onboarding-user_height-calibration-WAITING_FOR_FW_LOOK-ok = ตรวจสอบให้แน่ใจว่าหัวของคุณอยู่ในแนวระนาบ onboarding-user_height-calibration-WAITING_FOR_FW_LOOK-low = อย่ามองที่พื้น onboarding-user_height-calibration-WAITING_FOR_FW_LOOK-high = อย่าเงยหน้าสูงเกินไป -onboarding-user_height-calibration-WAITING_FOR_CONTROLLER_PITCH = ตรวจสอบให้แน่ใจว่าคอนโทรลเลอร์ชี้ลง +onboarding-user_height-calibration-WAITING_FOR_CONTROLLER_PITCH = ตรวจสอบให้แน่ใจว่าคอนโทรลเลอร์นั้นชี้ลง onboarding-user_height-calibration-RECORDING_HEIGHT = ยืนขึ้นอีกครั้งแล้วยืนนิ่งๆ! -onboarding-user_height-calibration-DONE = สําเร็จ! +onboarding-user_height-calibration-DONE = สำเร็จ! onboarding-user_height-calibration-ERROR_TIMEOUT = การตั้งศูนย์หมดเวลา ลองใหม่อีกครั้ง onboarding-user_height-calibration-ERROR_TOO_HIGH = ความสูงของผู้ใช้ที่ตรวจพบสูงเกินไป ลองใหม่อีกครั้ง -onboarding-user_height-calibration-ERROR_TOO_SMALL = ความสูงของผู้ใช้ที่ตรวจพบเตี้ยเกินไป ตรวจสอบให้แน่ใจว่ายืนตัวตรงเต็มที่ระหว่างกระบวนการ +onboarding-user_height-calibration-ERROR_TOO_SMALL = ความสูงของผู้ใช้ที่ตรวจพบเตี้ยเกินไป ตรวจสอบให้แน่ใจว่ายืนตัวตรงในระหว่างการตั้งศูนย์ onboarding-user_height-calibration-error = ตั้งศูนย์ไม่สำเร็จ -onboarding-user_height-manual-tip = ขณะปรับความสูงของคุณ ให้ลองทำท่าทางต่างๆ และดูว่าโครงกระดูกตรงกับร่างกายของคุณอย่างไร +onboarding-user_height-manual-tip = ขณะปรับความสูงของคุณ ให้ลองทำท่าทางต่างๆ และดูว่าการเคลื่อนไหวของโครงกระดูกตรงกับร่างกายของคุณหรือไม่ onboarding-user_height-reset-warning = คุณได้ตั้งค่าสัดส่วนไว้แล้วโดยใช้หน้าสัดส่วนแบบปรับเอง การดำเนินการต่อจะเป็นการรีเซ็ตสัดส่วนเหล่านี้เพื่อใช้เฉพาะความสูงของคุณเท่านั้น คุณต้องการดำเนินการต่อหรือไม่? ## Stay Aligned setup @@ -1363,7 +1366,7 @@ onboarding-stay_aligned-done = เสร็จแล้ว ## Home -home-no_trackers = ไม่พบแทร็กเกอร์หรือยังไม่ได้ถูกกำหนด +home-no_trackers = ไม่พบหรือไม่ได้กำหนดแทร็กเกอร์ home-settings = การตั้งค่าหน้าหลัก home-settings-close = ปิด @@ -1371,22 +1374,22 @@ home-settings-close = ปิด trackers_still_on-modal-title = แทร็กเกอร์ยังคงเปิดอยู่ trackers_still_on-modal-description = - มีแทร็กเกอร์เปิดค้างไว้อยู่ - คุณแน่ใจที่จะปิด SlimeVR? + มีแทร็กเกอร์อยู่ตั้งแต่หนึ่งตัวขึ้นไปเปิดอยู่ + คุณยังต้องการออกจาก SlimeVR หรือไม่? trackers_still_on-modal-confirm = ออกจาก SlimeVR trackers_still_on-modal-cancel = ใจเย็นๆก่อน.... ## Status system -status_system-StatusTrackerReset = เราแนะนำให้คุณทำการรีเซ็ตทั้งหมดเพราะว่าแทร็กเกอร์หนึ่งตัวหรือมากกว่านั้นยังไม่ได้ถูกปรับ +status_system-StatusTrackerReset = แนะนำให้ทำการรีเซ็ตทั้งหมด เนื่องจากมีแทร็กเกอร์ที่ยังไม่ได้ปรับค่าตั้งแต่หนึ่งตัวขึ้นไป status_system-StatusSteamVRDisconnected = { $type -> [steamvr_feeder] ขณะนี้ยังไม่มีการเชื่อมต่อกับแอป SlimeVR Feeder *[steamvr] ขณะนี้ยังไม่มีการเชื่อมต่อกับ SteamVR ผ่านไดรเวอร์ SlimeVR } status_system-StatusTrackerError = แทร็กเกอร์ { $trackerName } เกิดข้อผิดพลาด -status_system-StatusUnassignedHMD = แว่น VR ของคุณควรจะถูกกำหนดเป็นแทร็กเกอร์ส่วนหัว -status_system-StatusPublicNetwork = โปรไฟล์เครือข่ายของคุณตอนนี้ถูกตั้งค่าเป็นสาธารณะ ({ $adapters }) ซึ่งไม่แนะนำสำหรับการทำงานของ SlimeVR ดูวิธีการแก้ไขให้เหมาะสมที่นี่ +status_system-StatusUnassignedHMD = เฮดเซ็ท VR ของคุณควรจะถูกกำหนดเป็นแทร็กเกอร์ส่วนหัว +status_system-StatusPublicNetwork = โปรไฟล์เครือข่ายของคุณตอนนี้ถูกตั้งค่าเป็นสาธารณะ ({ $adapters }) ในขณะนี้ ซึ่งไม่แนะนำสำหรับการทำงานของ SlimeVR สามารถดูวิธีการแก้ไขได้ที่นี่ ## Firmware tool globals @@ -1399,15 +1402,15 @@ firmware_tool-loading = กำลังโหลด... ## Firmware tool Steps firmware_tool = เครื่องมือเฟิร์มแวร์ DIY -firmware_tool-description = ให้คุณตั้งค่าและแฟลชเฟิร์มแวร์แทร็กเกอร์ DIY ของคุณ -firmware_tool-not_available = ไอ่หย๊า เครื่องมือเฟิร์มแวร์ยังไม่พร้อมใช้งานในขณะนี้ โปรดกลับมาใหม่ทีหลัง! -firmware_tool-not_compatible = Firmware นี้เข้ากันไม่ได้กับเซิร์ฟเวอร์เวอร์ชั่นนี้ โปรดอัปเดตเซิร์ฟเวอร์ของคุณ! -firmware_tool-select_source = เลือกเฟิร์มแวร์ที่จะแฟลช -firmware_tool-select_source-description = เลือกเฟิร์มแวร์ที่คุณต้องการแฟลชลงบนบอร์ดของคุณ +firmware_tool-description = ช่วยให้คุณกำหนดค่าและลงเฟิร์มแวร์แทร็กเกอร์ DIY ของคุณ +firmware_tool-not_available = ขออภัย เครื่องมือเฟิร์มแวร์ยังไม่พร้อมใช้งานในขณะนี้ โปรดกลับมาในภายหลัง! +firmware_tool-not_compatible = เครื่องมือเฟิร์มแวร์ไม่เข้ากันกับ SlimeVR Server เวอร์ชันนี้ โปรดอัปเดต SlimeVR Server ของคุณ! +firmware_tool-select_source = เลือกเฟิร์มแวร์ที่คุณจะติดตั้ง +firmware_tool-select_source-description = เลือกเฟิร์มแวร์ที่คุณต้องการลงบนบอร์ดของคุณ firmware_tool-select_source-error = ไม่สามารถโหลดแหล่งที่มาได้ firmware_tool-select_source-board_type = ชนิดของบอร์ด firmware_tool-select_source-firmware = แหล่งที่มาของเฟิร์มแวร์ -firmware_tool-select_source-version = เวอร์ชั่นของเฟิร์มแวร์ +firmware_tool-select_source-version = เวอร์ชันของเฟิร์มแวร์ firmware_tool-select_source-official = ทางการ firmware_tool-select_source-dev = รุ่นพัฒนา firmware_tool-board_defaults = กำหนดค่าบอร์ดของคุณ @@ -1417,84 +1420,84 @@ firmware_tool-board_defaults-reset = รีเซ็ตเป็นค่าเ firmware_tool-board_defaults-error-required = ช่องที่จำเป็น firmware_tool-board_defaults-error-format = รูปแบบไม่ถูกต้อง firmware_tool-board_defaults-error-format-number = ไม่ใช่ตัวเลข -firmware_tool-flash_method_step = วิธีการลง Firmware -firmware_tool-flash_method_step-description = กรุณาเลือกวิธีการลง Firmware ที่คุณต้องการ +firmware_tool-flash_method_step = วิธีการลงเฟิร์มแวร์ +firmware_tool-flash_method_step-description = กรุณาเลือกวิธีการลงเฟิร์มแวร์ที่คุณต้องการใช้ firmware_tool-flash_method_step-ota-v2 = .label = Wi-Fi .description = ใช้การอัปเดตแบบ Over-the-air (OTA) โดยแทร็กเกอร์คุณจะใช้ Wi-Fi เพื่ออัปเดตเฟิร์มแวร์ ใช้งานได้เฉพาะแทร็กเกอร์ที่ได้รับการตั้งค่าแล้วเท่านั้น firmware_tool-flash_method_step-ota-info = - เราใช้ข้อมูลรับรอง Wi-Fi ของคุณเพื่อแฟลชแทร็กเกอร์และยืนยันว่าทุกอย่างทำงานได้อย่างถูกต้อง + เราใช้ข้อมูลรับรอง Wi-Fi ของคุณเพื่อลงเฟิร์มแวร์แทร็กเกอร์และยืนยันว่าทุกอย่างทำงานได้อย่างถูกต้อง เราไม่จัดเก็บข้อมูล Wi-Fi ของคุณ! firmware_tool-flash_method_step-serial-v2 = .label = USB .description = ใช้สาย USB เพื่ออัปเดตแทร็กเกอร์ของคุณ firmware_tool-flashbtn_step = กรุณากดปุ่ม Boot firmware_tool-flashbtn_step-description = มีสิ่งที่คุณควรจะรับทราบก่อนจะไปยังขั้นตอนถัดไป -firmware_tool-flashbtn_step-board_SLIMEVR = ปิดแทร็กเกอร์ของคุณ ถอดอุปกรณ์ออกจากเคสพลาสติก(ถ้ามี) แล้วต่อสาย USB จากแทร็กเกอร์เข้าสู่คอมพิวเตอร์ จากนั้นทำตามขั้นตอนตามชนิดบอร์ดของ SlimeVR ของคุณ +firmware_tool-flashbtn_step-board_SLIMEVR = ปิดแทร็กเกอร์ของคุณ ถอดบอร์ดออกจากเคส(ถ้ามี) แล้วต่อสาย USB จากแทร็กเกอร์เข้าสู่คอมพิวเตอร์ จากนั้นทำตามขั้นตอนตามชนิดบอร์ดของ SlimeVR คุณ firmware_tool-flashbtn_step-board_SLIMEVR-r11-v2 = เปิดแทร็กเกอร์ขณะทำการลัดวงจรแพด FLASH สี่เหลี่ยมอันที่สองจากขอบด้านบนของบอร์ดเข้ากับฝาโลหะของไมโครคอนโทรลเลอร์ ไฟ LED ของแทร็กเกอร์ควรกะพริบสั้นๆ firmware_tool-flashbtn_step-board_SLIMEVR-r12-v2 = เปิดแทร็กเกอร์ขณะทำการลัดวงจรแพด FLASH วงกลมที่ด้านบนของบอร์ดเข้ากับฝาครอบโลหะของไมโครคอนโทรลเลอร์ ไฟ LED ของแทร็กเกอร์ควรกะพริบสั้นๆ firmware_tool-flashbtn_step-board_SLIMEVR-r14-v2 = เปิดแทร็กเกอร์ขณะกดปุ่ม FLASH ที่ด้านบนของบอร์ดค้างไว้ ไฟ LED ของแทร็กเกอร์ควรกะพริบสั้นๆ firmware_tool-flashbtn_step-board_OTHER = - ก่อนการแฟลช คุณอาจต้องตั้งค่าแทร็กเกอร์ให้อยู่ในโหมดบูตโหลดเดอร์ก่อน - โดยส่วนใหญ่ คุณจะต้องกดปุ่มบูตบนบอร์ดก่อนที่กระบวนการแฟลชจะเริ่มต้น - หากกระบวนการแฟลชหมดเวลาที่จุดเริ่มต้น อาจหมายความว่าแทร็กเกอร์ไม่ได้อยู่ในโหมดบูตโหลดเดอร์ - โปรดดูคำแนะนำการแฟลชของบอร์ดของคุณเพื่อทราบวิธีเปิดโหมดบูตโหลดเดอร์ -firmware_tool-flash_method_ota-title = กำลังแฟลชผ่าน Wi-Fi + ก่อนลงเฟิร์มแวร์ คุณอาจต้องตั้งค่าแทร็กเกอร์ให้อยู่ในโหมดบูตโหลดเดอร์ก่อน + โดยส่วนใหญ่ คุณจะต้องกดปุ่มบูตบนบอร์ดก่อนที่กระบวนการลงเฟิร์มแวร์จะเริ่มต้น + หากกระบวนการหมดเวลาตั้งแต่เริ่มต้น อาจหมายความว่าแทร็กเกอร์ไม่ได้อยู่ในโหมดบูตโหลดเดอร์ + โปรดดูคำแนะนำการลงเฟิร์มแวร์ของบอร์ดของคุณเพื่อทราบวิธีเปิดโหมดบูตโหลดเดอร์ +firmware_tool-flash_method_ota-title = กำลังลงเฟิร์มแวร์ผ่าน Wi-Fi firmware_tool-flash_method_ota-devices = พบอุปกรณ์ OTA: -firmware_tool-flash_method_ota-no_devices = ไม่พบบอร์ดที่เราสามารถอัพเดตได้ผ่าน OTA กรุณาตรวจสอบว่าคุณได้เลือกชนิดของบอร์ดที่ถูกต้อง -firmware_tool-flash_method_serial-title = กำลังแฟลชผ่าน USB -firmware_tool-flash_method_serial-wifi = ข้อมูล Wi-Fi: -firmware_tool-flash_method_serial-devices-label = พบอุปกรณ์ซีเรียล: -firmware_tool-flash_method_serial-devices-placeholder = เลือกอุปกรณ์ซีเรียลของคุณ -firmware_tool-flash_method_serial-no_devices = ไม่พบอุปกรณ์ซีเรียลที่เข้ากันได้ กรุณาตรวจสอบว่าแทร็กเกอร์ของคุณเสียบอยู่ +firmware_tool-flash_method_ota-no_devices = ไม่พบบอร์ดที่สามารถอัปเดตโดยใช้ OTA ได้ ตรวจสอบให้แน่ใจว่าคุณเลือกประเภทบอร์ดได้ถูกต้อง +firmware_tool-flash_method_serial-title = กำลังลงเฟิร์มแวร์ผ่าน USB +firmware_tool-flash_method_serial-wifi = ข้อมูลเครือข่าย Wi-Fi: +firmware_tool-flash_method_serial-devices-label = พบอุปกรณ์ Serial: +firmware_tool-flash_method_serial-devices-placeholder = เลือกอุปกรณ์ Serial ของคุณ +firmware_tool-flash_method_serial-no_devices = ไม่พบอุปกรณ์ Serial ที่เข้ากันได้ ตรวจสอบให้แน่ใจว่าได้เสียบแทร็กเกอร์แล้ว firmware_tool-build_step = สร้างเฟิร์มแวร์ -firmware_tool-build_step-description = กำลังสร้างเฟิร์มแวร์ โปรดรอสักครู่ -firmware_tool-flashing_step = ติดตั้งเฟิร์มแวร์ -firmware_tool-flashing_step-description = กำลังติดตั้งเฟิร์มแวร์ให้แทร็กเกอร์ของคุณ กรุณาทำตามคำแนะนำบนหน้าจอ +firmware_tool-build_step-description = เฟิร์มแวร์กำลังสร้าง โปรดรอสักครู่ +firmware_tool-flashing_step = ลงเฟิร์มแวร์ +firmware_tool-flashing_step-description = กำลังลงเฟิร์มแวร์ให้แทร็กเกอร์ของคุณ กรุณาทำตามคำแนะนำบนหน้าจอ firmware_tool-flashing_step-warning-v2 = อย่าถอดสาย หรือปิดแทร็กเกอร์ในระหว่างกระบวนการอัปโหลด เว้นแต่จะได้รับคำแนะนำ ไม่อย่างนั้นอาจทำให้บอร์ดของคุณใช้งานไม่ได้ -firmware_tool-flashing_step-flash_more = ติดตั้งเฟิร์มแวร์ให้แทร็กเกอร์ตัวอื่น +firmware_tool-flashing_step-flash_more = ลงเฟิร์มแวร์ให้แทร็กเกอร์ตัวอื่น firmware_tool-flashing_step-exit = ออก ## firmware tool build status firmware_tool-build-QUEUED = กำลังรอการสร้าง... -firmware_tool-build-CREATING_BUILD_FOLDER = กำลังสร้าง Build folder +firmware_tool-build-CREATING_BUILD_FOLDER = กำลังสร้างโฟลเดอร์บิลด์ firmware_tool-build-DOWNLOADING_SOURCE = กำลังดาวน์โหลดซอร์สโค้ด firmware_tool-build-EXTRACTING_SOURCE = กำลังแตกไฟล์ซอร์สโค้ด -firmware_tool-build-BUILDING = กำลังสร้างตัว Firmware -firmware_tool-build-SAVING = บันทึกค่าที่สร้างไว้ -firmware_tool-build-DONE = การสร้างเสร็จสมบูรณ์ -firmware_tool-build-ERROR = ไม่สามารถสร้าง Firmware ได้ +firmware_tool-build-BUILDING = กำลังสร้างเฟิร์มแวร์ +firmware_tool-build-SAVING = กำลังบันทึกไฟล์บิลด์ +firmware_tool-build-DONE = สร้างเสร็จสมบูรณ์ +firmware_tool-build-ERROR = ไม่สามารถสร้างเฟิร์มแวร์ได้ ## Firmware update status -firmware_update-status-DOWNLOADING = กำลังโหลด Firmware -firmware_update-status-NEED_MANUAL_REBOOT-v2 = กรุณปิดและเปิดแทร็กเกอร์ของคุณใหม่อีกครั้ง +firmware_update-status-DOWNLOADING = กำลังดาวน์โหลดเฟิร์มแวร์ +firmware_update-status-NEED_MANUAL_REBOOT-v2 = โปรดปิดและเปิดแทร็กเกอร์ของคุณอีกครั้ง firmware_update-status-AUTHENTICATING = กำลังยืนยันตัวตนกับ MCU firmware_update-status-UPLOADING = กำลังอัปโหลดเฟิร์มแวร์ -firmware_update-status-SYNCING_WITH_MCU = กำลังซิงโครไนซ์กับ MCU -firmware_update-status-REBOOTING = กำลังดำเนินการอัปเดต -firmware_update-status-PROVISIONING = ตั้งค่าข้อมูลการเชื่อมต่อ Wi-Fi -firmware_update-status-DONE = อัพเดตสำเร็จ! -firmware_update-status-ERROR_DEVICE_NOT_FOUND = ไม่สามารถหาตัวอุปกรณ์ได้ -firmware_update-status-ERROR_TIMEOUT = กระบวนการอัปเดตหมดเวลาการเชื่อมต่อ -firmware_update-status-ERROR_DOWNLOAD_FAILED = ไม่สามารถดาวน์โหลด Firmware ได้ -firmware_update-status-ERROR_AUTHENTICATION_FAILED = ไม่สามารถยืนยันตัวตนหรือเชื่อมต่อกับ MCU ได้ -firmware_update-status-ERROR_UPLOAD_FAILED = ไม่สามารถอัปโหลดเฟิร์มแวร์ได้ -firmware_update-status-ERROR_PROVISIONING_FAILED = ไม่สามารถตั้งข้อมูลการเชื่อมต่อ Wi-Fi ได้ -firmware_update-status-ERROR_UNSUPPORTED_METHOD = ยังไม่รองรับวิธีการอัพเดตนี้ +firmware_update-status-SYNCING_WITH_MCU = กำลังซิงค์กับ MCU +firmware_update-status-REBOOTING = กำลังใช้การอัปเดต +firmware_update-status-PROVISIONING = ตั้งค่าข้อมูลเครือข่าย Wi-Fi +firmware_update-status-DONE = อัปเดตสำเร็จ! +firmware_update-status-ERROR_DEVICE_NOT_FOUND = ไม่พบอุปกรณ์ +firmware_update-status-ERROR_TIMEOUT = กระบวนการอัปเดตหมดเวลา +firmware_update-status-ERROR_DOWNLOAD_FAILED = ไม่สามารถดาวน์โหลดเฟิร์มแวร์ +firmware_update-status-ERROR_AUTHENTICATION_FAILED = ไม่สามารถยืนยันตัวตนกับ MCU +firmware_update-status-ERROR_UPLOAD_FAILED = ไม่สามารถอัปโหลดเฟิร์มแวร์ +firmware_update-status-ERROR_PROVISIONING_FAILED = ไม่สามารถตั้งค่าข้อมูลเครือข่าย Wi-Fi +firmware_update-status-ERROR_UNSUPPORTED_METHOD = ยังไม่รองรับวิธีการอัปเดตนี้ firmware_update-status-ERROR_UNKNOWN = เกิดข้อผิดพลาดที่ไม่รู้จัก ## Dedicated Firmware Update Page -firmware_update-title = อัพเดตเฟิร์มแวร์ +firmware_update-title = อัปเดตเฟิร์มแวร์ firmware_update-devices = อุปกรณ์ที่พร้อมใช้งาน -firmware_update-devices-description = โปรดเลือกตัวแทร็กเกอร์ที่คุณต้องการอัปเดตเป็น Firmware SlimeVR เวอร์ชันล่าสุด -firmware_update-no_devices = กรุณาตรวจสอบว่าแทร็กเกอร์ที่คุณต้องการจะอัพเดทนั้นเปิดอยู่ และต่อเข้ากับ Wi-Fi! +firmware_update-devices-description = โปรดเลือกแทร็กเกอร์ที่คุณต้องการอัปเดตเป็นเฟิร์มแวร์ SlimeVR เวอร์ชันล่าสุด +firmware_update-no_devices = กรุณาตรวจสอบว่าแทร็กเกอร์ที่คุณต้องการจะอัปเดตนั้นเปิดอยู่ และต่อเข้ากับ Wi-Fi! firmware_update-changelog-title = กำลังอัปเดตเป็น { $version } -firmware_update-looking_for_devices = กำลังมองหาอุปกรณ์เพื่ออัพเดต... +firmware_update-looking_for_devices = กำลังมองหาอุปกรณ์เพื่ออัปเดต... firmware_update-retry = ลองอีกครั้ง -firmware_update-update = อัพเดตแทร็กเกอร์ที่เลือก +firmware_update-update = อัปเดตแทร็กเกอร์ที่เลือก firmware_update-exit = ออก ## Tray Menu @@ -1507,9 +1510,12 @@ tray_menu-quit = ออก tray_or_exit_modal-title = คุณต้องการให้ปุ่มปิดทำอะไร? # Multiline text -tray_or_exit_modal-description = นี่จะให้คุณเลือกว่าจะเป็นการปิดโปรแกรมหรือเป็นการพับเก็บโปรแกรมเมื่อกดปุ่มปิด -tray_or_exit_modal-radio-exit = ออกโปรแกรมเมื่อปิด -tray_or_exit_modal-radio-tray = พับไปยัง System tray +tray_or_exit_modal-description = + เลือกที่จะออกจากโปรแกรม หรือย่อไปที่ถาดระบบเมื่อคลิกปุ่มปิด + + คุณสามารถเปลี่ยนการตั้งค่านี้ได้ภายหลังในส่วนการตั้งค่าอินเทอร์เฟซ +tray_or_exit_modal-radio-exit = ออกเมื่อปิด +tray_or_exit_modal-radio-tray = ย่อไปที่ถาดระบบ tray_or_exit_modal-submit = บันทึก tray_or_exit_modal-cancel = ยกเลิก @@ -1522,30 +1528,30 @@ unknown_device-modal-description = unknown_device-modal-confirm = แน่นอน unknown_device-modal-forget = เพิกเฉย # VRChat config warnings -vrc_config-page-title = คำเตือนการตั้งค่าของ VRChat +vrc_config-page-title = คำเตือนการตั้งค่าใน VRChat vrc_config-page-desc = หน้านี้แสดงการตั้งค่าใน VRChat ของคุณ และการตั้งค่าที่ไม่เข้ากับ SlimeVR เราแนะนำเป็นอย่างยิ่งให้คุณแก้ไขการแจ้งเตือนที่แสดงให้เห็นเพื่อประสบการณ์การใช้ SlimeVR ที่ดีที่สุด vrc_config-page-help = ไม่พบการตั้งค่าใช่ไหม? -vrc_config-page-help-desc = สามารถดูเอกสารประกอบการตั้งค่าตรงนี้! -vrc_config-page-big_menu = แทร็กกิ้ง & IK (หน้าเมนูใหญ่) +vrc_config-page-help-desc = สามารถดู เอกสารประกอบการตั้งค่าได้ที่นี่! +vrc_config-page-big_menu = แทร็กกิ้ง & IK (หน้าเมนูใหญ่) vrc_config-page-big_menu-desc = การตั้งค่าที่เกี่ยวกับ IK ในเมนูการตั้งค่าหลัก vrc_config-page-wrist_menu = แทร็กกิ้ง & IK (เมนูบนข้อมือ) -vrc_config-page-wrist_menu-desc = การตั้งค่าที่เกี่ยวกับ IK ในเมนูตั้งค่าเล็ก (เมนูบนข้อมือ) +vrc_config-page-wrist_menu-desc = การตั้งค่าเกี่ยวกับ IK ในเมนูตั้งค่าเล็ก (เมนูบนข้อมือ) vrc_config-on = เปิด vrc_config-off = ปิด -vrc_config-invalid = คุณมีการตั้งค่าใน VRchat ที่ไม่ถูกต้อง! +vrc_config-invalid = คุณมีการตั้งค่าใน VRChat ที่ไม่ถูกต้อง! vrc_config-show_more = แสดงข้อมูลเพิ่มเติม -vrc_config-setting_name = ชื่อการตั้งค่าใน VRchat -vrc_config-recommended_value = ค่าที่แนะนำ +vrc_config-setting_name = ชื่อการตั้งค่าใน VRChat +vrc_config-recommended_value = การตั้งค่าที่แนะนำ vrc_config-current_value = การตั้งค่าปัจจุบัน vrc_config-mute = ปิดคำเตือนการตั้งค่า vrc_config-mute-btn = ปิดคำเตือน -vrc_config-unmute-btn = เลิกแจ้งเตือน -vrc_config-legacy_mode = การตั้งศูนย์แบบเก่า -vrc_config-disable_shoulder_tracking = ปิดใช้งานการจับตำแหน่งไหล +vrc_config-unmute-btn = แสดงคำเตือน +vrc_config-legacy_mode = ใช้การแก้ไข IK แบบเก่า +vrc_config-disable_shoulder_tracking = ปิดการใช้งานการติดตามไหล่ vrc_config-shoulder_width_compensation = การชดเชยความกว้างของไหล่ vrc_config-spine_mode = โหมดกระดูกสันหลัง FBT vrc_config-tracker_model = โมเดลแทร็กเกอร์ FBT -vrc_config-avatar_measurement_type = การวัดของอวาตาร์ +vrc_config-avatar_measurement_type = การวัดขนาดอวาตาร์ vrc_config-calibration_range = ช่วงการตั้งศูนย์ vrc_config-calibration_visuals = แสดงภาพการตั้งศูนย์ vrc_config-user_height = ความสูงจริงของผู้ใช้ @@ -1564,46 +1570,46 @@ vrc_config-avatar_measurement_type-ARM_SPAN = ช่วงแขน ## Error collection consent modal -error_collection_modal-title = อนุญาติให้เราเก็บข้อมูลขอผิดพลาดหรือไม่? +error_collection_modal-title = อนุญาตให้เราเก็บข้อมูลข้อผิดพลาดหรือไม่? error_collection_modal-description_v2 = { settings-interface-behavior-error_tracking-description_v2 } คุณสามารถเปลี่ยนการตั้งค่านี้ในภายหลังได้ในแถบ พฤติกรรมการทำงาน ภายในหน้าการตั้งค่า error_collection_modal-confirm = ฉันตกลง error_collection_modal-cancel = ฉันไม่ต้องการ -tracking_checklist = รายการเตรียมความพร้อมแทร็กกิ้ง -tracking_checklist-settings = รายการเตรียมพร้อมแทร็กเกอร์ +tracking_checklist = รายการเตรียมพร้อมแทร็กเกอร์ +tracking_checklist-settings = การตั้งค่ารายการเตรียมพร้อมแทร็กเกอร์ tracking_checklist-settings-close = ปิด tracking_checklist-status-incomplete = คุณยังไม่พร้อมที่จะใช้ SlimeVR! -tracking_checklist-status-partial = คุณมี { $count } คำเตือน +tracking_checklist-status-partial = คุณมี { $count } คำเตือน! tracking_checklist-status-complete = คุณพร้อมที่จะใช้ SlimeVR แล้ว! -tracking_checklist-MOUNTING_CALIBRATION = ตั้งศูนย์การติดตั้ง +tracking_checklist-MOUNTING_CALIBRATION = ทำการตั้งศูนย์การติดตั้ง tracking_checklist-FEET_MOUNTING_CALIBRATION = ตั้งศูนย์การติดตั้งแทร็กเกอร์เท้า -tracking_checklist-FULL_RESET = รีเซ็ตแทร็กเกอร์ทั้งหมด +tracking_checklist-FULL_RESET = ทำการรีเซ็ตทั้งหมด tracking_checklist-FULL_RESET-desc = แทร็กเกอร์บางส่วนจำเป็นต้องทำการรีเซ็ต tracking_checklist-STEAMVR_DISCONNECTED = SteamVR ไม่ได้ทำงานอยู่ -tracking_checklist-STEAMVR_DISCONNECTED-desc = SteamVR ไม่ได้ทำงานอยู่ คุณใช้งานเพื่อเล่น VR ใช่หรือไม่? +tracking_checklist-STEAMVR_DISCONNECTED-desc = SteamVR ไม่ได้ทำงานอยู่ คุณจะใช้เพื่อเล่น VR ใช่หรือไม่? tracking_checklist-STEAMVR_DISCONNECTED-open = เปิด SteamVR tracking_checklist-TRACKERS_REST_CALIBRATION = ตั้งศูนย์แทร็กเกอร์ของคุณ tracking_checklist-TRACKERS_REST_CALIBRATION-desc = คุณยังไม่ได้ทำการตั้งศูนย์แทร็กเกอร์ โปรดวางแทร็กเกอร์ของคุณ (ที่ไฮไลต์ด้วยสีเหลือง) ไว้บนพื้นที่ราบเวลาสองสามวินาที -tracking_checklist-TRACKER_ERROR = แทร็กเกอร์มีปัญหา -tracking_checklist-TRACKER_ERROR-desc = ตัวแทร็กเกอร์บางส่วนของคุณมีปัญหา โปรดทำการรีสตาร์ทแทร็กเกอร์ที่ไฮไลต์ด้วยสีเหลือง -tracking_checklist-VRCHAT_SETTINGS = การตั้งค่าของ VRChat -tracking_checklist-VRCHAT_SETTINGS-desc = คุณมีการตั้งค่าของ VRChat ที่ไม่ถูกต้อง! ซึ่งอาจส่งผลเสียต่อการจับตำแหน่งของแทร็กเกอร์คุณ +tracking_checklist-TRACKER_ERROR = แทร็กเกอร์ที่มีปัญหา +tracking_checklist-TRACKER_ERROR-desc = แทร็กเกอร์บางตัวของคุณมีปัญหา โปรดทำการรีสตาร์ทแทร็กเกอร์ที่ไฮไลต์ด้วยสีเหลือง +tracking_checklist-VRCHAT_SETTINGS = การตั้งค่าใน VRChat +tracking_checklist-VRCHAT_SETTINGS-desc = คุณมีการตั้งค่าใน VRChat ที่ไม่ถูกต้อง! ซึ่งอาจส่งผลเสียต่อการจับตำแหน่งของแทร็กเกอร์คุณ tracking_checklist-VRCHAT_SETTINGS-open = ไปยังคำเตือนการตั้งค่า VRChat -tracking_checklist-UNASSIGNED_HMD = อุปกรณ์แว่น VR ไม่ได้ถูกกำหนดที่ส่วนหัว -tracking_checklist-UNASSIGNED_HMD-desc = ควรระบุอุปกรณ์แว่น VR ให้เป็นแทร็กเกอร์ส่วนหัว +tracking_checklist-UNASSIGNED_HMD = เฮดเซ็ท VR ไม่ได้ถูกกำหนดที่ส่วนหัว +tracking_checklist-UNASSIGNED_HMD-desc = ควรระบุเฮตเซ็ท VR ให้เป็นแทร็กเกอร์ส่วนหัว tracking_checklist-NETWORK_PROFILE_PUBLIC = แก้ไขโปรไฟล์เครือข่าย tracking_checklist-NETWORK_PROFILE_PUBLIC-desc = โปรไฟล์เครือข่ายของคุณ ({ $adapters }) ถูกตั้งค่าเป็น สาธารณะ (Public) อยู่ในขณะนี้ ซึ่งไม่แนะนำสำหรับการทำงานที่ถูกต้องของ SlimeVR ดูวิธีการแก้ไขได้ที่นี่ tracking_checklist-NETWORK_PROFILE_PUBLIC-open = เปิด Control Panel tracking_checklist-STAY_ALIGNED_CONFIGURED = ตั้งค่า Stay Aligned -tracking_checklist-STAY_ALIGNED_CONFIGURED-desc = บันทึกท่าท่างแบบใน Stay Aligned เพื่อลดค่าดริฟท์ +tracking_checklist-STAY_ALIGNED_CONFIGURED-desc = บันทึกท่าท่างใน Stay Aligned เพื่อลดการดริฟท์ tracking_checklist-STAY_ALIGNED_CONFIGURED-open = เปิดตัวช่วยการตั้งค่า Stay Aligned tracking_checklist-ignore = ละเว้น preview-mocap_mode_soon = โหมด Mocap (เร็ว ๆ นี้™) preview-disable_render = ปิดการแสดงตัวอย่าง -preview-disabled_render = ปิดใช้งานการแสดงผล +preview-disabled_render = การแสดงตัวอย่างถูกปิด toolbar-mounting_calibration = ตั้งศูนย์การติดตั้ง toolbar-mounting_calibration-default = ร่างกาย toolbar-mounting_calibration-feet = เท้า diff --git a/gui/public/i18n/zh-Hant/translation.ftl b/gui/public/i18n/zh-Hant/translation.ftl index 0e6f5b2f2..cab9aa8b1 100644 --- a/gui/public/i18n/zh-Hant/translation.ftl +++ b/gui/public/i18n/zh-Hant/translation.ftl @@ -33,6 +33,10 @@ tips-failed_webgl = 初始化 WebGL 失敗。 ## Units +unit-meter = 公尺 +unit-foot = 英尺 +unit-inch = 英吋 +unit-cm = 公分 ## Body parts @@ -270,6 +274,7 @@ navbar-trackers_assign = 追蹤器分配 navbar-mounting = 配戴校正 navbar-onboarding = 快速設定 navbar-settings = 詳細設定 +navbar-connect_trackers = 連接追蹤器 ## Biovision hierarchy recording @@ -418,6 +423,8 @@ tracker-settings-update-up_to_date = 已為最新版本 tracker-settings-update-blocked = 無法更新,沒有其他可用版本。 tracker-settings-update = 立即更新 tracker-settings-update-title = 韌體版本 +tracker-settings-current-version = 目前版本 +tracker-settings-latest-version = 最新版本 ## Tracker part card info @@ -1058,6 +1065,7 @@ onboarding-assignment_tutorial-done = 我把貼紙跟綁帶都弄上了 onboarding-assign_trackers-back = 返回到 Wi-Fi 認證資訊設定 onboarding-assign_trackers-title = 分配追蹤器 onboarding-assign_trackers-description = 這些追蹤器要放在身上的哪個部位呢?請點選要放置追蹤器的部位 +onboarding-assign_trackers-unassign_all = 解除全部分配 # Look at translation of onboarding-connect_tracker-connected_trackers on how to use plurals # $assigned (Number) - Trackers that have been assigned a body part # $trackers (Number) - Trackers connected to the server @@ -1205,6 +1213,7 @@ onboarding-automatic_mounting-return-home = 完成 ## Tracker manual proportions setupa +onboarding-manual_proportions-back-scaled = 返回使用縮放比例 onboarding-manual_proportions-title = 手動調整軀幹比例 onboarding-manual_proportions-fine_tuning_button = 自動微調軀幹比例 onboarding-manual_proportions-fine_tuning_button-disabled-tooltip = 請連接 VR 頭戴顯示器以使用此功能 @@ -1222,7 +1231,7 @@ onboarding-manual_proportions-estimated_height = 預估的使用者身高 onboarding-automatic_proportions-back = 返回重置教學 onboarding-automatic_proportions-title = 測量你的身體比例 onboarding-automatic_proportions-description = 為了讓 SlimeVR 追蹤器正常使用,我們需要知道你的骨頭長度。這個簡短的流程將會進行這方面的測量。 -onboarding-automatic_proportions-manual = 進行手動校正 +onboarding-automatic_proportions-manual = 手動調整軀幹比例 onboarding-automatic_proportions-prev_step = 上一步 onboarding-automatic_proportions-put_trackers_on-title = 請戴好追蹤器 onboarding-automatic_proportions-put_trackers_on-description = 為了校準你的軀幹比例,我們將使用你剛才分配的追蹤器。戴上你所有的追蹤器,你可以在右邊的圖中看到追蹤器的對應部位。 @@ -1300,6 +1309,30 @@ onboarding-automatic_proportions-smol_warning-cancel = 返回 ## User height calibration +onboarding-user_height-title = 你的身高是多少? +onboarding-user_height-description = 我們需要使用你的身高來計算軀幹比例,以準確呈現你的動作。你可以讓 SlimeVR 自動求得身高,也可以手動輸入。 +onboarding-user_height-need_head_tracker = 進行校正需要具備定位功能的頭戴顯示器與控制器。 +onboarding-user_height-calculate = 自動計算我的身高 +onboarding-user_height-next_step = 繼續並儲存 +onboarding-user_height-manual-proportions = 手動調整軀幹比例 +onboarding-user_height-calibration-title = 校正進度 +onboarding-user_height-calibration-RECORDING_FLOOR = 以控制器前端碰觸地面 +onboarding-user_height-calibration-WAITING_FOR_RISE = 回到站姿 +onboarding-user_height-calibration-WAITING_FOR_FW_LOOK = 回到站姿並向前看 +onboarding-user_height-calibration-WAITING_FOR_FW_LOOK-ok = 確保你的頭部保持水平 +onboarding-user_height-calibration-WAITING_FOR_FW_LOOK-low = 不要朝地板看 +onboarding-user_height-calibration-WAITING_FOR_FW_LOOK-high = 不要朝高處看 +onboarding-user_height-calibration-WAITING_FOR_CONTROLLER_PITCH = 確保控制器朝下 +onboarding-user_height-calibration-RECORDING_HEIGHT = 維持站姿並站直! +onboarding-user_height-calibration-DONE = 完成! +onboarding-user_height-calibration-ERROR_TIMEOUT = 校正逾時,請再試一次。 +onboarding-user_height-calibration-ERROR_TOO_HIGH = 偵測到的使用者身高太高,請再試一次。 +onboarding-user_height-calibration-ERROR_TOO_SMALL = 偵測到的使用者身高太低,請確保在校正結尾時維持站直並向前看的姿勢。 +onboarding-user_height-calibration-error = 校正失敗 +onboarding-user_height-manual-tip = 調整身高時,請嘗試使用不同的姿勢來確保骨架與你的身體吻合。 +onboarding-user_height-reset-warning = + 警告: 這會將軀幹比例重置為僅基於身高的比例。 + 你確定要執行此操作嗎? ## Stay Aligned setup @@ -1405,6 +1438,9 @@ firmware_tool-flash_method_step-serial-v2 = firmware_tool-flashbtn_step = 進入燒錄模式 firmware_tool-flashbtn_step-description = 在進入下一步前,請先進行以下操作 firmware_tool-flashbtn_step-board_SLIMEVR = 關閉追蹤器電源,移除外殼(若有的話),並用 USB 線連接到這台電腦上,然後根據你持有的 SlimeVR 追蹤器主板的版本,進行下述操作: +firmware_tool-flashbtn_step-board_SLIMEVR-r11-v2 = 將追蹤器上方第二個 FLASH 方形接點與微控制器的金屬遮罩短路,同時開啟追蹤器開關。追蹤器指示燈應該會短暫閃爍並熄滅。 +firmware_tool-flashbtn_step-board_SLIMEVR-r12-v2 = 將追蹤器上方的 FLASH 圓形接點與微控制器的金屬遮罩短路,同時開啟追蹤器開關。追蹤器指示燈應該會短暫閃爍並熄滅。 +firmware_tool-flashbtn_step-board_SLIMEVR-r14-v2 = 按住追蹤器上方的 FLASH 按鈕,同時開啟追蹤器開關。追蹤器指示燈應該會短暫閃爍並熄滅。 firmware_tool-flashbtn_step-board_OTHER = 在燒錄前,你可能需要將追蹤器切換進 Bootloader(開機載入程式)。 多數狀況下,在燒錄開始前按下 BOOT 按鈕即可開始燒錄。 diff --git a/gui/public/images/assignment-pose.webp b/gui/public/images/assignment-pose.webp index 81e443aa5..e2c7c80e1 100644 Binary files a/gui/public/images/assignment-pose.webp and b/gui/public/images/assignment-pose.webp differ diff --git a/gui/src/components/MainLayout.scss b/gui/src/components/MainLayout.scss index a304b3a25..216a618bd 100644 --- a/gui/src/components/MainLayout.scss +++ b/gui/src/components/MainLayout.scss @@ -22,7 +22,7 @@ } @screen sm { - --right-section-w: 35%; + --right-section-w: 36%; } @screen md { diff --git a/gui/src/components/Navbar.tsx b/gui/src/components/Navbar.tsx index a7cfba45e..b3bce34f1 100644 --- a/gui/src/components/Navbar.tsx +++ b/gui/src/components/Navbar.tsx @@ -33,7 +33,7 @@ export function NavButton({ state={state} className={classnames( 'flex flex-col justify-center xs:gap-4 mobile:gap-2', - 'xs:w-[85px] mobile:w-[65px] mobile:h-[65px]', + 'mobile:w-[65px] mobile:h-[65px]', 'xs:py-3 mobile:py-4 rounded-md mobile:rounded-b-none group select-text', { 'bg-accent-background-50 fill-accent-background-20': doesMatch, @@ -96,7 +96,7 @@ export function MainLinks() { } + icon={} state={{ alonePage: true }} > {l10n.getString('navbar-connect_trackers')} diff --git a/gui/src/components/commons/Button.tsx b/gui/src/components/commons/Button.tsx index 1b4141cbb..e4f2d0d3e 100644 --- a/gui/src/components/commons/Button.tsx +++ b/gui/src/components/commons/Button.tsx @@ -107,7 +107,13 @@ export function Button({ to={to} className={classes} state={state} - onClick={(ev) => disabled && ev.preventDefault()} + onClick={(ev) => { + if (disabled) { + ev.preventDefault(); + return; + } + if (props.onClick) return props.onClick(ev as any); + }} > {id && ( diff --git a/gui/src/components/commons/Tooltip.tsx b/gui/src/components/commons/Tooltip.tsx index 898fd0452..18a95cfdd 100644 --- a/gui/src/components/commons/Tooltip.tsx +++ b/gui/src/components/commons/Tooltip.tsx @@ -438,7 +438,7 @@ export function DrawerTooltip({
{children} diff --git a/gui/src/components/commons/icon/UsbIcon.tsx b/gui/src/components/commons/icon/UsbIcon.tsx index a0018d8e8..948a704b9 100644 --- a/gui/src/components/commons/icon/UsbIcon.tsx +++ b/gui/src/components/commons/icon/UsbIcon.tsx @@ -1,6 +1,11 @@ -export function USBIcon() { +export function USBIcon({ size = 48 }: { size?: number }) { return ( - + ); diff --git a/gui/src/components/commons/icon/WifiIcon.tsx b/gui/src/components/commons/icon/WifiIcon.tsx index 920fe9afd..7c1762a43 100644 --- a/gui/src/components/commons/icon/WifiIcon.tsx +++ b/gui/src/components/commons/icon/WifiIcon.tsx @@ -2,10 +2,14 @@ import classNames from 'classnames'; import { useMemo } from 'react'; export function WifiIcon({ + variant = 'progress', value, + size = 16, disabled = false, }: { + variant?: 'progress' | 'navbar'; value: number | null; + size?: number; disabled?: boolean; }) { const percent = useMemo( @@ -21,6 +25,8 @@ export function WifiIcon({ const y = useMemo(() => (1 - percent) * 13, [percent]); const col = useMemo(() => { + if (variant === 'navbar') return 'fill-inherit'; + const colorsMap: { [key: number]: string } = { 0.4: 'fill-status-success', 0.2: 'fill-status-warning', @@ -33,12 +39,12 @@ export function WifiIcon({ return disabled ? 'fill-background-40' : colorsMap[+val] || 'fill-background-10'; - }, [percent, disabled]); + }, [percent, disabled, variant]); return ( diff --git a/gui/src/components/home/HomeSettingsModal.tsx b/gui/src/components/home/HomeSettingsModal.tsx index dc269930c..97d508942 100644 --- a/gui/src/components/home/HomeSettingsModal.tsx +++ b/gui/src/components/home/HomeSettingsModal.tsx @@ -20,7 +20,7 @@ export function HomeSettingsModal({ >
- +
- )} -
-
- - - - - - v === undefined || - v.length === 0 || - new Blob([v]).size >= 8, - }, - }} - name="password" - type="password" - label="Password" - placeholder="password" - variant="secondary" - /> - -
- - +
+
+
+
+
+
+ +
+
+ + + WARNING + +
+
+
+
+
+
+ +
+ +
+ +
+ +
+ + + + + + v === undefined || + v.length === 0 || + new Blob([v]).size >= 8, + }, + }} + name="password" + type="password" + label="Password" + placeholder="password" + variant="secondary" + /> + +
+ + +
+
+
+
- +
); } diff --git a/gui/src/components/onboarding/pages/body-proportions/ScaledProportions.tsx b/gui/src/components/onboarding/pages/body-proportions/ScaledProportions.tsx index d4b5105a4..751a73ff1 100644 --- a/gui/src/components/onboarding/pages/body-proportions/ScaledProportions.tsx +++ b/gui/src/components/onboarding/pages/body-proportions/ScaledProportions.tsx @@ -35,6 +35,7 @@ import { ProgressBar } from '@/components/commons/ProgressBar'; import { useBreakpoint } from '@/hooks/breakpoint'; import { useConfig } from '@/hooks/config'; import { ProportionsResetModal } from './ProportionsResetModal'; +import * as Sentry from '@sentry/react'; const statusSteps = [ // Order matters be carefull @@ -237,6 +238,7 @@ function UserHeightStatus({ export function ScaledProportionsPage() { const [hmdHeight, setHmdHeight] = useState(0); const [tmpHeight, setTmpHeight] = useState(0); + const [lastUsed, setLastUsed] = useState<'manual' | 'auto' | null>(null); const { config, setConfig } = useConfig(); const { applyProgress, state } = useOnboarding(); @@ -297,6 +299,7 @@ export function ScaledProportionsPage() { new SkeletonResetAllRequestT() ); setConfig({ lastUsedProportions: 'scaled' }); + setLastUsed('manual'); }; useRPCPacket( @@ -311,6 +314,7 @@ export function ScaledProportionsPage() { if (res.status === UserHeightCalibrationStatus.DONE) { setConfig({ lastUsedProportions: 'scaled' }); + setLastUsed('auto'); } } ); @@ -330,6 +334,11 @@ export function ScaledProportionsPage() { return () => { cancel(); + if (lastUsed !== null) { + Sentry.metrics.count('scaled_proportions', 1, { + attributes: { calibration: lastUsed }, + }); + } }; }, []); @@ -418,7 +427,9 @@ export function ScaledProportionsPage() { ) { setTmpHeight(height); setResetModal('manual'); - } else setHmdHeight(height); + } else { + applyHeight(height); + } setAuto(false); }} /> diff --git a/gui/src/components/onboarding/pages/mounting/ManualMounting.tsx b/gui/src/components/onboarding/pages/mounting/ManualMounting.tsx index 2ffb4bb93..c0b314f13 100644 --- a/gui/src/components/onboarding/pages/mounting/ManualMounting.tsx +++ b/gui/src/components/onboarding/pages/mounting/ManualMounting.tsx @@ -18,6 +18,7 @@ import { Quaternion } from 'three'; import { AssignMode, defaultConfig, useConfig } from '@/hooks/config'; import { assignedTrackersAtom, FlatDeviceTracker } from '@/store/app-store'; import { useAtomValue } from 'jotai'; +import * as Sentry from '@sentry/react'; export function ManualMountingPage() { const { isMobile } = useBreakpoint('mobile'); @@ -59,6 +60,12 @@ export function ManualMountingPage() { assignreq.allowDriftCompensation = false; sendRPCPacket(RpcMessage.AssignTrackerRequest, assignreq); + Sentry.metrics.count('manual_mounting_set', 1, { + attributes: { + part: BodyPart[assignreq.bodyPosition], + direction: assignreq.mountingOrientation, + }, + }); }); setSelectRole(BodyPart.NONE); diff --git a/gui/src/components/onboarding/pages/mounting/MountingChoose.tsx b/gui/src/components/onboarding/pages/mounting/MountingChoose.tsx index 846943519..3c18965e8 100644 --- a/gui/src/components/onboarding/pages/mounting/MountingChoose.tsx +++ b/gui/src/components/onboarding/pages/mounting/MountingChoose.tsx @@ -5,6 +5,7 @@ import { SkipSetupWarningModal } from '@/components/onboarding/SkipSetupWarningM import classNames from 'classnames'; import { Typography } from '@/components/commons/Typography'; import { Button } from '@/components/commons/Button'; +import * as Sentry from '@sentry/react'; export function MountingChoose() { const { l10n } = useLocalization(); @@ -66,6 +67,11 @@ export function MountingChoose() { variant="primary" to={'/onboarding/mounting/auto'} className="self-start mt-auto" + onClick={() => { + Sentry.metrics.count('mounting_choose', 1, { + attributes: { choose: 'auto' }, + }); + }} state={{ alonePage: state.alonePage }} > {l10n.getString('onboarding-manual_mounting-auto_mounting')} @@ -111,6 +117,11 @@ export function MountingChoose() { to="/onboarding/mounting/manual" className="self-start mt-auto" state={{ alonePage: state.alonePage }} + onClick={() => { + Sentry.metrics.count('mounting_choose', 1, { + attributes: { choose: 'manual' }, + }); + }} > {l10n.getString( 'onboarding-automatic_mounting-manual_mounting' diff --git a/gui/src/components/settings/pages/HomeScreenSettings.tsx b/gui/src/components/settings/pages/HomeScreenSettings.tsx index 483202db8..c2df687d5 100644 --- a/gui/src/components/settings/pages/HomeScreenSettings.tsx +++ b/gui/src/components/settings/pages/HomeScreenSettings.tsx @@ -16,6 +16,7 @@ import classNames from 'classnames'; import { ReactNode, useEffect } from 'react'; import { useForm } from 'react-hook-form'; import { TrackingChecklistStepId } from 'solarxr-protocol'; +import * as Sentry from '@sentry/react'; type StepsForm = { steps: Record }; export function TrackingChecklistSettings({ @@ -54,10 +55,16 @@ export function TrackingChecklistSettings({ // that prevent sending a packet for steps that didnt change if (!value && !ignoredSteps.includes(stepId)) { ignoreStep(stepId, true); + Sentry.metrics.count('mute_checklist_step', 1, { + attributes: { step: TrackingChecklistStepId[stepId] }, + }); } if (value && ignoredSteps.includes(stepId)) { ignoreStep(stepId, false); + Sentry.metrics.count('unmute_checklist_step', 1, { + attributes: { step: TrackingChecklistStepId[stepId] }, + }); } } }; @@ -130,11 +137,19 @@ export function LayoutSelector({ ); } -export function HomeLayoutSettings() { +export function HomeLayoutSettings({ + variant, +}: { + variant: 'settings' | 'modal'; +}) { const { config, setConfig } = useConfig(); - const setLayout = (layout: Config['homeLayout']) => + const setLayout = (layout: Config['homeLayout']) => { setConfig({ homeLayout: layout }); + Sentry.metrics.count('change_layout', 1, { + attributes: { layout, from: variant }, + }); + }; return (
@@ -178,7 +193,7 @@ export function HomeScreenSettings() {
}> - + }> diff --git a/gui/src/components/tracker/TrackerPartCard.tsx b/gui/src/components/tracker/TrackerPartCard.tsx index 66926f6be..a52c54705 100644 --- a/gui/src/components/tracker/TrackerPartCard.tsx +++ b/gui/src/components/tracker/TrackerPartCard.tsx @@ -6,6 +6,7 @@ import { Typography } from '@/components/commons/Typography'; import { useLocalization } from '@fluent/react'; import { WarningIcon } from '@/components/commons/icon/WarningIcon'; import { FlatDeviceTracker } from '@/store/app-store'; +import { useBreakpoint } from '@/hooks/breakpoint'; function Tracker({ tracker, @@ -46,6 +47,7 @@ export function TrackerPartCard({ direction: 'left' | 'right'; onClick?: MouseEventHandler; }) { + const { isXs } = useBreakpoint('xs'); const { l10n } = useLocalization(); const [velocities, setVelocities] = useState([]); @@ -78,7 +80,7 @@ export function TrackerPartCard({ (showCard && (
)} - + {l10n.getString('body_part-' + BodyPart[role])} {td?.map(({ tracker }, index) => ( diff --git a/gui/src/hooks/autobone.ts b/gui/src/hooks/autobone.ts index c4b0b9d24..07984ca00 100644 --- a/gui/src/hooks/autobone.ts +++ b/gui/src/hooks/autobone.ts @@ -13,6 +13,7 @@ import { useWebsocketAPI } from './websocket-api'; import { useLocalization } from '@fluent/react'; import { log } from '@/utils/logging'; import { useConfig } from './config'; +import * as Sentry from '@sentry/react'; export enum ProcessStatus { PENDING, @@ -81,6 +82,7 @@ export function useProvideAutobone(): AutoboneContext { const applyProcessing = () => { sendRPCPacket(RpcMessage.AutoBoneApplyRequest, new AutoBoneApplyRequestT()); setConfig({ lastUsedProportions: 'autobone' }); + Sentry.metrics.count('autobone', 1); }; useRPCPacket( diff --git a/gui/src/hooks/crypto.ts b/gui/src/hooks/crypto.ts new file mode 100644 index 000000000..6b857283c --- /dev/null +++ b/gui/src/hooks/crypto.ts @@ -0,0 +1,11 @@ +// implemetation of https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function +export function hash(str: string) { + let hash = 2166136261; + for (let i = 0; i < str.length; i++) { + hash ^= str.charCodeAt(i); + hash = Math.imul(hash, 16777619); // FNV prime + } + + // Convert to unsigned 32-bit integer and normalize (0, 1) + return (hash >>> 0) / 2 ** 32; +} diff --git a/gui/src/hooks/firmware-update.ts b/gui/src/hooks/firmware-update.ts index 7557aee7e..35107a17d 100644 --- a/gui/src/hooks/firmware-update.ts +++ b/gui/src/hooks/firmware-update.ts @@ -2,7 +2,8 @@ import { BoardType, DeviceDataT } from 'solarxr-protocol'; import { fetch as tauriFetch } from '@tauri-apps/plugin-http'; import { cacheWrap } from './cache'; import semver from 'semver'; -import { hostname, locale, platform, version } from '@tauri-apps/plugin-os'; +import { hash } from './crypto'; +import { getUserID } from './user'; export interface FirmwareRelease { name: string; @@ -12,18 +13,6 @@ export interface FirmwareRelease { userCanUpdate: boolean; } -// implemetation of https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function -const hash = (str: string) => { - let hash = 2166136261; - for (let i = 0; i < str.length; i++) { - hash ^= str.charCodeAt(i); - hash = Math.imul(hash, 16777619); // FNV prime - } - - // Convert to unsigned 32-bit integer and normalize (0, 1) - return (hash >>> 0) / 2 ** 32; -}; - const firstAsset = (assets: any[], name: string) => assets.find((asset: any) => asset.name === name && asset.browser_download_url); @@ -67,7 +56,7 @@ const checkUserCanUpdate = async (url: string, fwVersion: string) => { const todayUpdateRange = todaysRange(deployData); if (!todayUpdateRange) return false; - const uniqueUserKey = `${await hostname()}-${await locale()}-${platform()}-${version()}`; + const uniqueUserKey = await getUserID(); // Make it so the hash change every version. Prevent the same user from getting the same delay return hash(`${uniqueUserKey}-${fwVersion}`) <= todayUpdateRange; }; diff --git a/gui/src/hooks/manual-proportions.ts b/gui/src/hooks/manual-proportions.ts index 0e7591f3a..55bc8cb59 100644 --- a/gui/src/hooks/manual-proportions.ts +++ b/gui/src/hooks/manual-proportions.ts @@ -8,6 +8,7 @@ import { import { useWebsocketAPI } from './websocket-api'; import { useEffect, useMemo, useState } from 'react'; import { useConfig } from './config'; +import * as Sentry from '@sentry/react'; type LabelBase = { value: number; @@ -193,6 +194,7 @@ export function useManualProportions({ type }: { type: 'linear' | 'ratio' }): { } sendRPCPacket(RpcMessage.SkeletonConfigRequest, new SkeletonConfigRequestT()); setConfig({ lastUsedProportions: 'manual' }); + Sentry.metrics.count('manual_proportions_change', 1, { attributes: params }); }, }; } diff --git a/gui/src/hooks/reset.ts b/gui/src/hooks/reset.ts index 82cb4cd4d..eff3728ed 100644 --- a/gui/src/hooks/reset.ts +++ b/gui/src/hooks/reset.ts @@ -12,6 +12,7 @@ import { useAtomValue } from 'jotai'; import { assignedTrackersAtom, serverGuardsAtom } from '@/store/app-store'; import { FEET_BODY_PARTS, FINGER_BODY_PARTS } from './body-parts'; import { useLocaleConfig } from '@/i18n/config'; +import * as Sentry from '@sentry/react'; export type ResetBtnStatus = 'idle' | 'counting' | 'finished'; @@ -45,6 +46,8 @@ export function useReset(options: UseResetOptions, onReseted?: () => void) { req.resetType = options.type; req.bodyParts = parts; sendRPCPacket(RpcMessage.ResetRequest, req); + + Sentry.metrics.count('reset_click', 1, { attributes: options }); }; const onResetFinished = () => { diff --git a/gui/src/hooks/user.ts b/gui/src/hooks/user.ts new file mode 100644 index 000000000..e590bbfb3 --- /dev/null +++ b/gui/src/hooks/user.ts @@ -0,0 +1,8 @@ +import { locale, hostname, platform, version } from '@tauri-apps/plugin-os'; +import { hash } from './crypto'; + +export async function getUserID() { + // FIXME: This does not support android. It currently return the same id for all android users + + return hash(`${await hostname()}-${await locale()}-${platform()}-${version()}`); +} diff --git a/gui/src/index.scss b/gui/src/index.scss index 28c5673d6..f9501135e 100644 --- a/gui/src/index.scss +++ b/gui/src/index.scss @@ -61,8 +61,9 @@ body { :root { // overflow: hidden; -- NEVER EVER BRING THIS BACK <3 background: theme('colors.background.20'); + overscroll-behavior: none; - --navbar-w: 101px; + --navbar-w: 110px; --topbar-h: 38px; @screen mobile { diff --git a/gui/src/utils/sentry.ts b/gui/src/utils/sentry.ts index 5f4611f8f..4bf9f8e6a 100644 --- a/gui/src/utils/sentry.ts +++ b/gui/src/utils/sentry.ts @@ -8,6 +8,7 @@ import { useNavigationType, } from 'react-router-dom'; import { DeviceDataT } from 'solarxr-protocol'; +import { getUserID } from '@/hooks/user'; export function getSentryOrCompute(enabled = false) { // if sentry is already initialized - SKIP @@ -62,6 +63,10 @@ export function getSentryOrCompute(enabled = false) { log('Initialized the Sentry client'); } + getUserID().then((id) => { + Sentry.setUser({ id }); + }); + return newClient; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 247679860..7fe8ff8c6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -42,8 +42,8 @@ importers: specifier: ^8.17.10 version: 8.17.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.163.0) '@sentry/react': - specifier: ^9.9.0 - version: 9.9.0(react@18.3.1) + specifier: 10.29.0 + version: 10.29.0(react@18.3.1) '@sentry/vite-plugin': specifier: ^2.22.7 version: 2.22.7 @@ -169,8 +169,8 @@ importers: specifier: ^4.0.9 version: 4.0.9 '@openapi-codegen/cli': - specifier: ^2.0.2 - version: 2.0.2(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^3.1.0 + version: 3.1.0 '@openapi-codegen/typescript': specifier: ^8.0.2 version: 8.0.2 @@ -208,11 +208,11 @@ importers: specifier: ^0.163.0 version: 0.163.0 '@typescript-eslint/eslint-plugin': - specifier: ^7.18.0 - version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3))(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3) + specifier: ^8.48.1 + version: 8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3))(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3) '@typescript-eslint/parser': - specifier: ^7.18.0 - version: 7.18.0(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3) + specifier: ^8.48.1 + version: 8.48.1(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3) '@vitejs/plugin-react': specifier: ^4.3.2 version: 4.3.2(vite@5.4.9(@types/node@24.10.0)(sass@1.80.2)(terser@5.31.1)) @@ -226,17 +226,14 @@ importers: specifier: ^16.4.5 version: 16.4.5 eslint: - specifier: ^9.39.0 + specifier: ^9.39.1 version: 9.39.1(jiti@1.21.6) - eslint-config-airbnb: - specifier: ^19.0.4 - version: 19.0.4(eslint-plugin-import@2.32.0)(eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.1(jiti@1.21.6)))(eslint-plugin-react-hooks@4.6.2(eslint@9.39.1(jiti@1.21.6)))(eslint-plugin-react@7.37.5(eslint@9.39.1(jiti@1.21.6)))(eslint@9.39.1(jiti@1.21.6)) eslint-import-resolver-typescript: specifier: ^3.10.1 version: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@1.21.6)) eslint-plugin-import: specifier: ^2.32.0 - version: 2.32.0(@typescript-eslint/parser@7.18.0(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@1.21.6)) + version: 2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@1.21.6)) eslint-plugin-jsx-a11y: specifier: ^6.10.2 version: 6.10.2(eslint@9.39.1(jiti@1.21.6)) @@ -244,8 +241,8 @@ importers: specifier: ^7.37.5 version: 7.37.5(eslint@9.39.1(jiti@1.21.6)) eslint-plugin-react-hooks: - specifier: ^4.6.2 - version: 4.6.2(eslint@9.39.1(jiti@1.21.6)) + specifier: ^7.0.1 + version: 7.0.1(eslint@9.39.1(jiti@1.21.6)) globals: specifier: ^15.10.0 version: 15.10.0 @@ -297,24 +294,6 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@apollo/client@3.10.6': - resolution: {integrity: sha512-3lLFGJtzC1/mEnK11BRf+Bf8536kBQUSB1G9yMtcRsxmY+tCKdTPzsP3fMUKy10BPIE0sDUY1pux3iMPIn2vow==} - peerDependencies: - graphql: ^15.0.0 || ^16.0.0 - graphql-ws: ^5.5.5 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - subscriptions-transport-ws: ^0.9.0 || ^0.11.0 - peerDependenciesMeta: - graphql-ws: - optional: true - react: - optional: true - react-dom: - optional: true - subscriptions-transport-ws: - optional: true - '@babel/code-frame@7.24.7': resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} @@ -493,6 +472,12 @@ packages: resolution: {integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==} engines: {node: '>=6.9.0'} + '@clack/core@0.4.1': + resolution: {integrity: sha512-Pxhij4UXg8KSr7rPek6Zowm+5M22rbd2g1nfojHJkxp5YkFqiZ2+YLEM/XGVIzvGOcM0nqjIFxrpDwWRZYWYjA==} + + '@clack/prompts@0.9.1': + resolution: {integrity: sha512-JIpyaboYZeWYlyP0H+OoPPxd6nqueG/CmN6ixBiNFsIDHREevjIf0n0Ohh5gr5C8pEDknzgvz+pIJ8dMhzWIeg==} + '@dword-design/dedent@0.7.0': resolution: {integrity: sha512-OFmAmzKiDUh9m7WRMYcoEOPI7b5tS5hdqQmtKDwF+ZssVJv8a+GHo9VOtFsmlw3h8Roh/9QzFWIsjSFZyQUMdg==} @@ -655,12 +640,6 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/eslint-utils@4.9.0': resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -729,11 +708,6 @@ packages: '@formatjs/intl-localematcher@0.2.32': resolution: {integrity: sha512-k/MEBstff4sttohyEpXxCmC3MqbUn9VvHGlZ8fauLzkbwXmVrEeyzS+4uhrvAk9DWU9/7otYWxyDox4nT/KVLQ==} - '@graphql-typed-document-node/core@3.2.0': - resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@hookform/resolvers@3.6.0': resolution: {integrity: sha512-UBcpyOX3+RR+dNnqBd0lchXpoL8p4xC21XP8H6Meb8uve5Br1GCnmg0PcBoKKqPKgGu9GHQ/oygcmPrQhetwqw==} peerDependencies: @@ -759,6 +733,9 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -771,15 +748,21 @@ packages: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - '@jridgewell/source-map@0.3.6': - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@mediapipe/tasks-vision@0.10.8': resolution: {integrity: sha512-Rp7ll8BHrKB3wXaRFKhrltwZl1CiXGdibPxuWXvqGnKTnv8fqa/nvftYNuSbf+pbJWKYCXdBtYTITdAUTGGh0Q==} @@ -811,8 +794,26 @@ packages: resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} engines: {node: '>=12.4.0'} - '@openapi-codegen/cli@2.0.2': - resolution: {integrity: sha512-uBk6yOBSBIgGWA2ok/IjBS03UwVAIpnan0lKz2sk3tsSe8rVIjOnQPxGYvSuByfxzdIu+nrPom2meqtcjlMvDQ==} + '@octokit/endpoint@10.1.4': + resolution: {integrity: sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA==} + engines: {node: '>= 18'} + + '@octokit/openapi-types@25.1.0': + resolution: {integrity: sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==} + + '@octokit/request-error@6.1.8': + resolution: {integrity: sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==} + engines: {node: '>= 18'} + + '@octokit/request@9.2.4': + resolution: {integrity: sha512-q8ybdytBmxa6KogWlNa818r0k1wlqzNC+yNkcQDECHvQo8Vmstrg18JwqJHdJdUiHD2sjlwBgSm9kHkOKe2iyA==} + engines: {node: '>= 18'} + + '@octokit/types@14.1.0': + resolution: {integrity: sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==} + + '@openapi-codegen/cli@3.1.0': + resolution: {integrity: sha512-w9OO+3rFKWkAdKfjnjBg5pisBAKXtZAbDPNTu46Vcd7yJH1JsMH9SDoyRN2vMZZIR4ir1pLMn8Oom9kzuTAFrQ==} hasBin: true '@openapi-codegen/typescript@8.0.2': @@ -901,7 +902,7 @@ packages: '@react-hookz/deep-equal@3.0.3': resolution: {integrity: sha512-SLy+NmiDpncqc2d9TR4Y4R7f8lUFOQK9WbnIq02A6wDxy+dTHfA2Np0dPvj0SFp6i1nqERLmEUe9MxPLuO/IqA==} engines: {node: '>=18.0.0'} - deprecated: Package is deprecated and will be deleted soon. Use @ver0/deep-equal instead. + deprecated: PACKAGE IS DEPRECATED AND WILL BE DETED SOON, USE @ver0/deep-equal INSTEAD '@react-spring/animated@9.6.1': resolution: {integrity: sha512-ls/rJBrAqiAYozjLo5EPPLLOb1LM0lNVQcXODTC1SMtS6DbuBCPaKco5svFUQFMP2dso3O+qcC4k9FsKc0KxMQ==} @@ -1054,28 +1055,28 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@sentry-internal/browser-utils@9.9.0': - resolution: {integrity: sha512-V/YhKLis98JFkqBGZaEBlDNFpJHJjoCvNb05raAYXdITfDIl37Kxqj0zX+IzyRhqnswkQ+DBTyoEoci09IR2bQ==} + '@sentry-internal/browser-utils@10.29.0': + resolution: {integrity: sha512-M3kycMY6f3KY9a8jDYac+yG0E3ZgWVWSxlOEC5MhYyX+g7mqxkwrb3LFQyuxSm/m+CCgMTCaPOOaB2twXP6EQg==} engines: {node: '>=18'} - '@sentry-internal/feedback@9.9.0': - resolution: {integrity: sha512-hrxuOLm0Xsnx75hTNt3eLgNNjER3egrHZShdRzlMiakfKpA9f2X10z75vlZmT5ZUygDQnp9UVUnu28cDuVb9Zw==} + '@sentry-internal/feedback@10.29.0': + resolution: {integrity: sha512-Y7IRsNeS99cEONu1mZWZc3HvbjNnu59Hgymm0swFFKbdgbCgdT6l85kn2oLsuq4Ew8Dw/pL/Sgpwsl9UgYFpUg==} engines: {node: '>=18'} - '@sentry-internal/replay-canvas@9.9.0': - resolution: {integrity: sha512-YK0ixGjquahGpNsQskCEVwycdHlwNBLCx9XJr1BmGnlOw6fUCmpyVetaGg/ZyhkzKGNXAGoTa4s7FUFnAG4bKg==} + '@sentry-internal/replay-canvas@10.29.0': + resolution: {integrity: sha512-typY4JrpAQQGPuSyd/BD8+nNCbvTV2UVvKzr+iKgI0m1qc4Dz8tHZ4Nfais2Z8eYn/pL1kqVQN5ERTmJoYFdIw==} engines: {node: '>=18'} - '@sentry-internal/replay@9.9.0': - resolution: {integrity: sha512-EWczKMu3qiZ0SUUWU3zkGod+AWD/VQCLiQw+tw+PEpdHbRZIdYKsEptengZCFKthrwe2QmYpVCTSRxGvujJ/6g==} + '@sentry-internal/replay@10.29.0': + resolution: {integrity: sha512-45NVw9PwB9TQ8z+xJ6G6Za+wmQ1RTA35heBSzR6U4bknj8LmA04k2iwnobvxCBEQXeLfcJEO1vFgagMoqMZMBw==} engines: {node: '>=18'} '@sentry/babel-plugin-component-annotate@2.22.7': resolution: {integrity: sha512-aa7XKgZMVl6l04NY+3X7BP7yvQ/s8scn8KzQfTLrGRarziTlMGrsCOBQtCNWXOPEbtxAIHpZ9dsrAn5EJSivOQ==} engines: {node: '>= 14'} - '@sentry/browser@9.9.0': - resolution: {integrity: sha512-pIMdkOC+iggZefBs6ck5fL1mBhbLzjdw/8K99iqSeDh+lLvmlHVZajAhPlmw50xfH8CyQ1s22dhcL+zXbg3NKw==} + '@sentry/browser@10.29.0': + resolution: {integrity: sha512-XdbyIR6F4qoR9Z1JCWTgunVcTJjS9p2Th+v4wYs4ME+ZdLC4tuKKmRgYg3YdSIWCn1CBfIgdI6wqETSf7H6Njw==} engines: {node: '>=18'} '@sentry/bundler-plugin-core@2.22.7': @@ -1128,12 +1129,12 @@ packages: engines: {node: '>= 10'} hasBin: true - '@sentry/core@9.9.0': - resolution: {integrity: sha512-GxKvx8PSgoWhLLS+/WBGIXy7rsFcnJBPDqFXIfcAGy89k2j06d9IP0kiIc63qBGStSUkh5FFJLPTakZ5RXiFXA==} + '@sentry/core@10.29.0': + resolution: {integrity: sha512-olQ2DU9dA/Bwsz3PtA9KNXRMqBWRQSkPw+MxwWEoU1K1qtiM9L0j6lbEFb5iSY3d7WYD5MB+1d5COugjSBrHtw==} engines: {node: '>=18'} - '@sentry/react@9.9.0': - resolution: {integrity: sha512-7BE2Lx5CNtHtlNSS7Z9HxKquohC0xhdFceO3NlMXlx+dZuVCMoQmLISB8SQEcHw+2VO24MvtP3LPEzdeNbkIfg==} + '@sentry/react@10.29.0': + resolution: {integrity: sha512-YGaEUXubzil7qssD1koh1fyt0aS8tHB61/6+oNShJ6xZPg03AB42bNMr2/y8fIFx36kb3MiCA5sFoH/ubF0LnQ==} engines: {node: '>=18'} peerDependencies: react: ^16.14.0 || 17.x || 18.x || 19.x @@ -1452,20 +1453,6 @@ packages: '@types/webxr@0.5.16': resolution: {integrity: sha512-0E0Cl84FECtzrB4qG19TNTqpunw0F1YF0QZZnFMF6pDw1kNKJtrlTKlVB34stGIsHbZsYQ7H0tNjPfZftkHHoA==} - '@types/yoga-layout@1.9.2': - resolution: {integrity: sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==} - - '@typescript-eslint/eslint-plugin@7.18.0': - resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@typescript-eslint/eslint-plugin@8.46.4': resolution: {integrity: sha512-R48VhmTJqplNyDxCyqqVkFSZIx1qX6PzwqgcXn1olLrzxcSBDlOsbtcnQuQhNtnNiJ4Xe5gREI1foajYaYU2Vg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1474,15 +1461,13 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@7.18.0': - resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/eslint-plugin@8.48.1': + resolution: {integrity: sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser': ^8.48.1 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/parser@8.46.4': resolution: {integrity: sha512-tK3GPFWbirvNgsNKto+UmB/cRtn6TZfyw0D6IKrW55n6Vbs7KJoZtI//kpTKzE/DUmmnAFD8/Ca46s7Obs92/w==} @@ -1491,35 +1476,44 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/parser@8.48.1': + resolution: {integrity: sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/project-service@8.46.4': resolution: {integrity: sha512-nPiRSKuvtTN+no/2N1kt2tUh/HoFzeEgOm9fQ6XQk4/ApGqjx0zFIIaLJ6wooR1HIoozvj2j6vTi/1fgAz7UYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@7.18.0': - resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/project-service@8.48.1': + resolution: {integrity: sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/scope-manager@8.46.4': resolution: {integrity: sha512-tMDbLGXb1wC+McN1M6QeDx7P7c0UWO5z9CXqp7J8E+xGcJuUuevWKxuG8j41FoweS3+L41SkyKKkia16jpX7CA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.48.1': + resolution: {integrity: sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/tsconfig-utils@8.46.4': resolution: {integrity: sha512-+/XqaZPIAk6Cjg7NWgSGe27X4zMGqrFqZ8atJsX3CWxH/jACqWnrWI68h7nHQld0y+k9eTTjb9r+KU4twLoo9A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@7.18.0': - resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/tsconfig-utils@8.48.1': + resolution: {integrity: sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/type-utils@8.46.4': resolution: {integrity: sha512-V4QC8h3fdT5Wro6vANk6eojqfbv5bpwHuMsBcJUJkqs2z5XnYhJzyz9Y02eUmF9u3PgXEUiOt4w4KHR3P+z0PQ==} @@ -1528,22 +1522,20 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@7.18.0': - resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/type-utils@8.48.1': + resolution: {integrity: sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/types@8.46.4': resolution: {integrity: sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@7.18.0': - resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/types@8.48.1': + resolution: {integrity: sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@8.46.4': resolution: {integrity: sha512-7oV2qEOr1d4NWNmpXLR35LvCfOkTNymY9oyW+lUHkmCno7aOmIf/hMaydnJBUTBMRCOGZh8YjkFOc8dadEoNGA==} @@ -1551,11 +1543,11 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@7.18.0': - resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/typescript-estree@8.48.1': + resolution: {integrity: sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/utils@8.46.4': resolution: {integrity: sha512-AbSv11fklGXV6T28dp2Me04Uw90R2iJ30g2bgLz529Koehrmkbs1r7paFqr1vPCZi7hHwYxYtxfyQMRC8QaVSg==} @@ -1564,14 +1556,21 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@7.18.0': - resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/utils@8.48.1': + resolution: {integrity: sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/visitor-keys@8.46.4': resolution: {integrity: sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.48.1': + resolution: {integrity: sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} @@ -1684,26 +1683,6 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 - '@wry/caches@1.0.1': - resolution: {integrity: sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA==} - engines: {node: '>=8'} - - '@wry/context@0.7.4': - resolution: {integrity: sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ==} - engines: {node: '>=8'} - - '@wry/equality@0.5.7': - resolution: {integrity: sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw==} - engines: {node: '>=8'} - - '@wry/trie@0.4.3': - resolution: {integrity: sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w==} - engines: {node: '>=8'} - - '@wry/trie@0.5.0': - resolution: {integrity: sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA==} - engines: {node: '>=8'} - acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1729,10 +1708,6 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - ansi-escapes@7.0.0: resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} engines: {node: '>=18'} @@ -1797,10 +1772,6 @@ packages: resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} engines: {node: '>= 0.4'} - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - array.prototype.findlast@1.2.5: resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} engines: {node: '>= 0.4'} @@ -1840,14 +1811,6 @@ packages: ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - - auto-bind@4.0.0: - resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} - engines: {node: '>=8'} - autoprefixer@10.4.20: resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} engines: {node: ^10 || ^12 || >=14} @@ -2010,20 +1973,9 @@ packages: resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} engines: {node: '>= 14.16.0'} - ci-info@2.0.0: - resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} - classnames@2.5.1: resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} - cli-boxes@2.2.1: - resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} - engines: {node: '>=6'} - - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -2033,16 +1985,12 @@ packages: engines: {node: '>=8.0.0', npm: '>=5.0.0'} hasBin: true - cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} - cli-truncate@4.0.0: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} - clipanion@3.2.1: - resolution: {integrity: sha512-dYFdjLb7y1ajfxQopN05mylEpK9ZX0sO1/RfMXdfmwjlIsPkbh4p7A682x++zFPLDCo1x3p82dtljHf5cW2LKA==} + clipanion@4.0.0-rc.4: + resolution: {integrity: sha512-CXkMQxU6s9GklO/1f714dkKBMu1lopS1WFF0B8o4AxPykR1hpozxSiUZ5ZUeBjfPgCWqbcNOtZVFhB8Lkfp1+Q==} peerDependencies: typanion: '*' @@ -2053,10 +2001,6 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - code-excerpt@3.0.0: - resolution: {integrity: sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw==} - engines: {node: '>=10'} - color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -2090,16 +2034,9 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - confusing-browser-globals@1.0.11: - resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} - convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - convert-to-spaces@1.0.2: - resolution: {integrity: sha512-cj09EBuObp9gZNQCzc7hByQyrs6jVGE+o9kSJmeUoj+GiPiJvi5LYqEH/Hmme4+MTLHM+Ejtq+FChpjjEnsPdQ==} - engines: {node: '>= 4'} - convert@5.13.1: resolution: {integrity: sha512-LB7K75X/D7Xp9ZYhNrjcny8kr+xzlDcw/KK6lccXrHhxvr2E/LO/UtlYRZRdpAVb9xe5uEBY++uish8Rz5+9IQ==} @@ -2255,10 +2192,6 @@ packages: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} @@ -2387,10 +2320,6 @@ packages: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -2399,23 +2328,6 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - eslint-config-airbnb-base@15.0.0: - resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} - engines: {node: ^10.12.0 || >=12.0.0} - peerDependencies: - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.2 - - eslint-config-airbnb@19.0.4: - resolution: {integrity: sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==} - engines: {node: ^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.3 - eslint-plugin-jsx-a11y: ^6.5.1 - eslint-plugin-react: ^7.28.0 - eslint-plugin-react-hooks: ^4.3.0 - eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} @@ -2469,11 +2381,11 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - eslint-plugin-react-hooks@4.6.2: - resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} - engines: {node: '>=10'} + eslint-plugin-react-hooks@7.0.1: + resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==} + engines: {node: '>=18'} peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 eslint-plugin-react@7.37.5: resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} @@ -2543,6 +2455,9 @@ packages: extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + fast-content-type-parse@2.0.1: + resolution: {integrity: sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -2742,10 +2657,6 @@ packages: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - glsl-noise@0.0.0: resolution: {integrity: sha512-b/ZCF6amfAUb7dJM/MxRs7AetQEahYzJ8PtgfrmEdtw6uyGOr+ZSGtgjFm6mfsBkxJ4d2W7kg+Nlqzqvn3Bc0w==} @@ -2759,6 +2670,7 @@ packages: got-fetch@5.1.10: resolution: {integrity: sha512-Gwj/A2htjvLEcY07PKDItv0WCPEs3dV2vWeZ+9TVBSKSTuWEZ4oXaMD0ZAOsajwx2orahQWN4HI0MfRyWSZsbg==} engines: {node: '>=14.0.0'} + deprecated: please use built-in fetch in nodejs peerDependencies: got: ^12.0.0 @@ -2772,16 +2684,6 @@ packages: graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - graphql-tag@2.12.6: - resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} - engines: {node: '>=10'} - peerDependencies: - graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - - graphql@15.9.0: - resolution: {integrity: sha512-GCOQdvm7XxV1S4U4CGrsdlEN37245eC8P9zaYCMr6K1BG0IPGy5lUwmJsEOGyl1GD6HXjOtl2keCP9asRBwNvA==} - engines: {node: '>= 10.x'} - has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} @@ -2834,6 +2736,12 @@ packages: hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + + hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} @@ -2904,20 +2812,6 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - - ink@3.2.0: - resolution: {integrity: sha512-firNp1q3xxTzoItj/eOOSZQnYSlyrWks5llCTVX37nJ59K3eXbQ8PtzCguqo8YI19EELo5QxaKnJd4VxzhU8tg==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '>=16.8.0' - react: '>=16.8.0' - peerDependenciesMeta: - '@types/react': - optional: true - inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} @@ -2983,10 +2877,6 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-ci@2.0.0: - resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} - hasBin: true - is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} @@ -3652,10 +3542,6 @@ packages: resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} - object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} - engines: {node: '>= 0.4'} - object.entries@1.1.9: resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} engines: {node: '>= 0.4'} @@ -3701,9 +3587,6 @@ packages: openapi3-ts@2.0.2: resolution: {integrity: sha512-TxhYBMoqx9frXyOgnRHufjQfPXomTIHYKhSKJ6jHfj13kS8OEIhvmE8CTuQyKtjjWttAjX5DPxM1vmalEpo8Qw==} - optimism@0.18.0: - resolution: {integrity: sha512-tGn8+REwLRNFnb9WmcY5IfpOqeX2kpaYJ1s6Ae3mn12AeydLkR3j+jSCmVQFoXqU8D41PAJ1RG1rCRNWmNZVmQ==} - optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -3752,10 +3635,6 @@ packages: parse5@6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - patch-console@1.0.0: - resolution: {integrity: sha512-nxl9nrnLQmh64iTzMfyylSlRozL7kAXIaxw1fVcLYdyhNkJCRUzirRZTikXGJsg+hc4fqpneTK6iU2H1Q8THSA==} - engines: {node: '>=10'} - path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} @@ -3779,10 +3658,6 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - pegjs@0.10.0: resolution: {integrity: sha512-qI5+oFNEGi3L5HAxDwN2LA4Gg7irF70Zs25edhjld9QemOgp0CbvMtbFcMvFtEo1OityPrcCzkQFB8JP/hxgow==} engines: {node: '>=0.10'} @@ -3930,9 +3805,6 @@ packages: peerDependencies: react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - react-devtools-core@4.28.5: - resolution: {integrity: sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA==} - react-dom@18.3.1: resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} peerDependencies: @@ -3976,12 +3848,6 @@ packages: react: ^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 react-dom: ^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 - react-reconciler@0.26.2: - resolution: {integrity: sha512-nK6kgY28HwrMNwDnMui3dvm3rCFjZrcGiuwLc5COUipBK5hWHLOxMJhSnSomirqWwjPBJKV1QcbkI0VJr7Gl1Q==} - engines: {node: '>=0.10.0'} - peerDependencies: - react: ^17.0.2 - react-reconciler@0.27.0: resolution: {integrity: sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA==} engines: {node: '>=0.10.0'} @@ -4053,17 +3919,6 @@ packages: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} - rehackt@0.1.0: - resolution: {integrity: sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw==} - peerDependencies: - '@types/react': '*' - react: '*' - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true - remark-gfm@4.0.0: resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} @@ -4105,18 +3960,10 @@ packages: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true - response-iterator@0.2.6: - resolution: {integrity: sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw==} - engines: {node: '>=0.8'} - responselike@3.0.0: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} engines: {node: '>=14.16'} - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - restore-cursor@5.1.0: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} @@ -4146,9 +3993,6 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - safe-array-concat@1.1.2: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} @@ -4174,9 +4018,6 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - scheduler@0.20.2: - resolution: {integrity: sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==} - scheduler@0.21.0: resolution: {integrity: sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==} @@ -4220,9 +4061,6 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - should-equal@2.0.0: resolution: {integrity: sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==} @@ -4271,18 +4109,10 @@ packages: sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - slash@4.0.0: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} engines: {node: '>=12'} - slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} - slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} @@ -4334,10 +4164,6 @@ packages: stable-hash@0.0.5: resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - stats-gl@2.2.8: resolution: {integrity: sha512-94G5nZvduDmzxBS7K0lYnynYwreZpkknD8g5dZmU6mpwIhy3caCrjAm11Qm1cbyx7mqix7Fp00RkbsonzKWnoQ==} @@ -4451,10 +4277,6 @@ packages: resolution: {integrity: sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==} hasBin: true - symbol-observable@4.0.0: - resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} - engines: {node: '>=0.10'} - tailwind-gradient-mask-image@1.2.0: resolution: {integrity: sha512-tUJaGhvqbJFiVKJu6EU5n//KvGdVvY3L3VOFNqjztk13+ifAk00pcSNHBTgHfUiBGOEzDn0gFRbSmsftUV1lXA==} @@ -4532,12 +4354,6 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - ts-api-utils@1.3.0: - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' - ts-api-utils@2.1.0: resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} engines: {node: '>=18.12'} @@ -4547,10 +4363,6 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - ts-invariant@0.10.3: - resolution: {integrity: sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==} - engines: {node: '>=8'} - ts-node@9.1.1: resolution: {integrity: sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==} engines: {node: '>=10.0.0'} @@ -4586,14 +4398,6 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@0.12.0: - resolution: {integrity: sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==} - engines: {node: '>=10'} - - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - type-fest@2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} @@ -4652,6 +4456,11 @@ packages: engines: {node: '>=14.17'} hasBin: true + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + engines: {node: '>=14.17'} + hasBin: true + unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} @@ -4680,6 +4489,9 @@ packages: unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + universal-user-agent@7.0.3: + resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} + universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -4817,18 +4629,10 @@ packages: engines: {node: '>= 8'} hasBin: true - widest-line@3.1.0: - resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} - engines: {node: '>=8'} - word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -4844,18 +4648,6 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -4901,18 +4693,17 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yoga-layout-prebuilt@1.10.0: - resolution: {integrity: sha512-YnOmtSbv4MTf7RGJMK0FvZ+KD8OEe/J5BNnR0GHhD8J/XcG/Qvxgszm0Un6FTHWW4uHlTgP0IztiXQnGyIR45g==} - engines: {node: '>=8'} - yup@1.4.0: resolution: {integrity: sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg==} - zen-observable-ts@1.2.5: - resolution: {integrity: sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==} + zod-validation-error@4.0.2: + resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.25.0 || ^4.0.0 - zen-observable@0.8.15: - resolution: {integrity: sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==} + zod@4.1.13: + resolution: {integrity: sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==} zustand@3.7.2: resolution: {integrity: sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==} @@ -4950,29 +4741,6 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@apollo/client@3.10.6(@types/react@18.3.11)(graphql@15.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@15.9.0) - '@wry/caches': 1.0.1 - '@wry/equality': 0.5.7 - '@wry/trie': 0.5.0 - graphql: 15.9.0 - graphql-tag: 2.12.6(graphql@15.9.0) - hoist-non-react-statics: 3.3.2 - optimism: 0.18.0 - prop-types: 15.8.1 - rehackt: 0.1.0(@types/react@18.3.11)(react@18.3.1) - response-iterator: 0.2.6 - symbol-observable: 4.0.0 - ts-invariant: 0.10.3 - tslib: 2.6.3 - zen-observable-ts: 1.2.5 - optionalDependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - transitivePeerDependencies: - - '@types/react' - '@babel/code-frame@7.24.7': dependencies: '@babel/highlight': 7.24.7 @@ -5234,6 +5002,17 @@ snapshots: '@babel/helper-validator-identifier': 7.25.7 to-fast-properties: 2.0.0 + '@clack/core@0.4.1': + dependencies: + picocolors: 1.1.1 + sisteransi: 1.0.5 + + '@clack/prompts@0.9.1': + dependencies: + '@clack/core': 0.4.1 + picocolors: 1.1.1 + sisteransi: 1.0.5 + '@dword-design/dedent@0.7.0': dependencies: babel-plugin-add-module-exports: 1.0.4 @@ -5346,11 +5125,6 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@9.39.1(jiti@1.21.6))': - dependencies: - eslint: 9.39.1(jiti@1.21.6) - eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1(jiti@1.21.6))': dependencies: eslint: 9.39.1(jiti@1.21.6) @@ -5363,7 +5137,7 @@ snapshots: '@eslint/config-array@0.21.1': dependencies: '@eslint/object-schema': 2.1.7 - debug: 4.3.7 + debug: 4.4.3 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -5379,7 +5153,7 @@ snapshots: '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 - debug: 4.3.7 + debug: 4.4.3 espree: 10.4.0 globals: 14.0.0 ignore: 5.3.1 @@ -5420,10 +5194,6 @@ snapshots: dependencies: tslib: 2.6.3 - '@graphql-typed-document-node/core@3.2.0(graphql@15.9.0)': - dependencies: - graphql: 15.9.0 - '@hookform/resolvers@3.6.0(react-hook-form@7.66.0(react@18.3.1))': dependencies: react-hook-form: 7.66.0(react@18.3.1) @@ -5448,6 +5218,12 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + optional: true + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 @@ -5458,19 +5234,28 @@ snapshots: '@jridgewell/set-array@1.2.1': {} - '@jridgewell/source-map@0.3.6': + '@jridgewell/source-map@0.3.11': dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 optional: true '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.5': + optional: true + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + optional: true + '@mediapipe/tasks-vision@0.10.8': {} '@mgit-at/typescript-flatbuffers-codegen@0.1.3': @@ -5511,38 +5296,51 @@ snapshots: '@nolyfill/is-core-module@1.0.39': {} - '@openapi-codegen/cli@2.0.2(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@octokit/endpoint@10.1.4': dependencies: - '@apollo/client': 3.10.6(@types/react@18.3.11)(graphql@15.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@octokit/types': 14.1.0 + universal-user-agent: 7.0.3 + + '@octokit/openapi-types@25.1.0': {} + + '@octokit/request-error@6.1.8': + dependencies: + '@octokit/types': 14.1.0 + + '@octokit/request@9.2.4': + dependencies: + '@octokit/endpoint': 10.1.4 + '@octokit/request-error': 6.1.8 + '@octokit/types': 14.1.0 + fast-content-type-parse: 2.0.1 + universal-user-agent: 7.0.3 + + '@octokit/types@14.1.0': + dependencies: + '@octokit/openapi-types': 25.1.0 + + '@openapi-codegen/cli@3.1.0': + dependencies: + '@clack/prompts': 0.9.1 + '@octokit/request': 9.2.4 '@swc/core': 1.6.5 case: 1.6.3 - chalk: 5.3.0 cli-highlight: 2.1.11 - clipanion: 3.2.1(typanion@3.14.0) + clipanion: 4.0.0-rc.4(typanion@3.14.0) fs-extra: 10.1.0 got: 12.6.1 got-fetch: 5.1.10(got@12.6.1) - graphql: 15.9.0 - ink: 3.2.0(@types/react@18.3.11)(react@18.3.1) js-yaml: 4.1.0 openapi3-ts: 2.0.2 prettier: 3.3.3 - rxjs: 7.8.1 slash: 4.0.0 swagger2openapi: 7.0.8 tslib: 2.6.3 typanion: 3.14.0 - typescript: 4.8.2 + typescript: 5.7.3 transitivePeerDependencies: - '@swc/helpers' - - '@types/react' - - bufferutil - encoding - - graphql-ws - - react - - react-dom - - subscriptions-transport-ws - - utf-8-validate '@openapi-codegen/typescript@8.0.2': dependencies: @@ -5755,33 +5553,33 @@ snapshots: '@rtsao/scc@1.1.0': {} - '@sentry-internal/browser-utils@9.9.0': + '@sentry-internal/browser-utils@10.29.0': dependencies: - '@sentry/core': 9.9.0 + '@sentry/core': 10.29.0 - '@sentry-internal/feedback@9.9.0': + '@sentry-internal/feedback@10.29.0': dependencies: - '@sentry/core': 9.9.0 + '@sentry/core': 10.29.0 - '@sentry-internal/replay-canvas@9.9.0': + '@sentry-internal/replay-canvas@10.29.0': dependencies: - '@sentry-internal/replay': 9.9.0 - '@sentry/core': 9.9.0 + '@sentry-internal/replay': 10.29.0 + '@sentry/core': 10.29.0 - '@sentry-internal/replay@9.9.0': + '@sentry-internal/replay@10.29.0': dependencies: - '@sentry-internal/browser-utils': 9.9.0 - '@sentry/core': 9.9.0 + '@sentry-internal/browser-utils': 10.29.0 + '@sentry/core': 10.29.0 '@sentry/babel-plugin-component-annotate@2.22.7': {} - '@sentry/browser@9.9.0': + '@sentry/browser@10.29.0': dependencies: - '@sentry-internal/browser-utils': 9.9.0 - '@sentry-internal/feedback': 9.9.0 - '@sentry-internal/replay': 9.9.0 - '@sentry-internal/replay-canvas': 9.9.0 - '@sentry/core': 9.9.0 + '@sentry-internal/browser-utils': 10.29.0 + '@sentry-internal/feedback': 10.29.0 + '@sentry-internal/replay': 10.29.0 + '@sentry-internal/replay-canvas': 10.29.0 + '@sentry/core': 10.29.0 '@sentry/bundler-plugin-core@2.22.7': dependencies: @@ -5837,12 +5635,12 @@ snapshots: - encoding - supports-color - '@sentry/core@9.9.0': {} + '@sentry/core@10.29.0': {} - '@sentry/react@9.9.0(react@18.3.1)': + '@sentry/react@10.29.0(react@18.3.1)': dependencies: - '@sentry/browser': 9.9.0 - '@sentry/core': 9.9.0 + '@sentry/browser': 10.29.0 + '@sentry/core': 10.29.0 hoist-non-react-statics: 3.3.2 react: 18.3.1 @@ -6138,26 +5936,6 @@ snapshots: '@types/webxr@0.5.16': {} - '@types/yoga-layout@1.9.2': {} - - '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3))(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3)': - dependencies: - '@eslint-community/regexpp': 4.10.1 - '@typescript-eslint/parser': 7.18.0(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3) - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/type-utils': 7.18.0(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3) - '@typescript-eslint/utils': 7.18.0(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 7.18.0 - eslint: 9.39.1(jiti@1.21.6) - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/eslint-plugin@8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3))(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3)': dependencies: '@eslint-community/regexpp': 4.10.1 @@ -6175,15 +5953,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.18.0(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3)': + '@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3))(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3)': dependencies: - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.3.5 + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.48.1 + '@typescript-eslint/type-utils': 8.48.1(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.48.1 eslint: 9.39.1(jiti@1.21.6) - optionalDependencies: + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.6.3) typescript: 5.6.3 transitivePeerDependencies: - supports-color @@ -6200,6 +5982,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.48.1 + '@typescript-eslint/types': 8.48.1 + '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.48.1 + debug: 4.4.3 + eslint: 9.39.1(jiti@1.21.6) + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/project-service@8.46.4(typescript@5.6.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.6.3) @@ -6209,31 +6003,32 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@7.18.0': + '@typescript-eslint/project-service@8.48.1(typescript@5.6.3)': dependencies: - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/visitor-keys': 7.18.0 + '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.6.3) + '@typescript-eslint/types': 8.48.1 + debug: 4.4.3 + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color '@typescript-eslint/scope-manager@8.46.4': dependencies: '@typescript-eslint/types': 8.46.4 '@typescript-eslint/visitor-keys': 8.46.4 + '@typescript-eslint/scope-manager@8.48.1': + dependencies: + '@typescript-eslint/types': 8.48.1 + '@typescript-eslint/visitor-keys': 8.48.1 + '@typescript-eslint/tsconfig-utils@8.46.4(typescript@5.6.3)': dependencies: typescript: 5.6.3 - '@typescript-eslint/type-utils@7.18.0(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3)': + '@typescript-eslint/tsconfig-utils@8.48.1(typescript@5.6.3)': dependencies: - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.3) - '@typescript-eslint/utils': 7.18.0(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3) - debug: 4.3.5 - eslint: 9.39.1(jiti@1.21.6) - ts-api-utils: 1.3.0(typescript@5.6.3) - optionalDependencies: typescript: 5.6.3 - transitivePeerDependencies: - - supports-color '@typescript-eslint/type-utils@8.46.4(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3)': dependencies: @@ -6247,25 +6042,22 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@7.18.0': {} - - '@typescript-eslint/types@8.46.4': {} - - '@typescript-eslint/typescript-estree@7.18.0(typescript@5.6.3)': + '@typescript-eslint/type-utils@8.48.1(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3)': dependencies: - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.3.5 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.4 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.3) - optionalDependencies: + '@typescript-eslint/types': 8.48.1 + '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.6.3) + '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3) + debug: 4.4.3 + eslint: 9.39.1(jiti@1.21.6) + ts-api-utils: 2.1.0(typescript@5.6.3) typescript: 5.6.3 transitivePeerDependencies: - supports-color + '@typescript-eslint/types@8.46.4': {} + + '@typescript-eslint/types@8.48.1': {} + '@typescript-eslint/typescript-estree@8.46.4(typescript@5.6.3)': dependencies: '@typescript-eslint/project-service': 8.46.4(typescript@5.6.3) @@ -6282,16 +6074,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.18.0(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3)': + '@typescript-eslint/typescript-estree@8.48.1(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.39.1(jiti@1.21.6)) - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.3) - eslint: 9.39.1(jiti@1.21.6) + '@typescript-eslint/project-service': 8.48.1(typescript@5.6.3) + '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.6.3) + '@typescript-eslint/types': 8.48.1 + '@typescript-eslint/visitor-keys': 8.48.1 + debug: 4.4.3 + minimatch: 9.0.4 + semver: 7.7.3 + tinyglobby: 0.2.15 + ts-api-utils: 2.1.0(typescript@5.6.3) + typescript: 5.6.3 transitivePeerDependencies: - supports-color - - typescript '@typescript-eslint/utils@8.46.4(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3)': dependencies: @@ -6304,16 +6100,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@7.18.0': + '@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3)': dependencies: - '@typescript-eslint/types': 7.18.0 - eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@1.21.6)) + '@typescript-eslint/scope-manager': 8.48.1 + '@typescript-eslint/types': 8.48.1 + '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.6.3) + eslint: 9.39.1(jiti@1.21.6) + typescript: 5.6.3 + transitivePeerDependencies: + - supports-color '@typescript-eslint/visitor-keys@8.46.4': dependencies: '@typescript-eslint/types': 8.46.4 eslint-visitor-keys: 4.2.1 + '@typescript-eslint/visitor-keys@8.48.1': + dependencies: + '@typescript-eslint/types': 8.48.1 + eslint-visitor-keys: 4.2.1 + '@ungap/structured-clone@1.2.0': {} '@unrs/resolver-binding-android-arm-eabi@1.11.1': @@ -6393,26 +6200,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@wry/caches@1.0.1': - dependencies: - tslib: 2.6.3 - - '@wry/context@0.7.4': - dependencies: - tslib: 2.6.3 - - '@wry/equality@0.5.7': - dependencies: - tslib: 2.6.3 - - '@wry/trie@0.4.3': - dependencies: - tslib: 2.6.3 - - '@wry/trie@0.5.0': - dependencies: - tslib: 2.6.3 - acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -6423,7 +6210,7 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.3.7 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -6441,10 +6228,6 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - ansi-escapes@7.0.0: dependencies: environment: 1.1.0 @@ -6510,8 +6293,6 @@ snapshots: is-string: 1.1.1 math-intrinsics: 1.1.0 - array-union@2.1.0: {} - array.prototype.findlast@1.2.5: dependencies: call-bind: 1.0.7 @@ -6590,10 +6371,6 @@ snapshots: ast-types-flow@0.0.8: {} - astral-regex@2.0.0: {} - - auto-bind@4.0.0: {} - autoprefixer@10.4.20(postcss@8.4.38): dependencies: browserslist: 4.24.0 @@ -6769,16 +6546,8 @@ snapshots: dependencies: readdirp: 4.0.2 - ci-info@2.0.0: {} - classnames@2.5.1: {} - cli-boxes@2.2.1: {} - - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -6792,17 +6561,12 @@ snapshots: parse5-htmlparser2-tree-adapter: 6.0.1 yargs: 16.2.0 - cli-truncate@2.1.0: - dependencies: - slice-ansi: 3.0.0 - string-width: 4.2.3 - cli-truncate@4.0.0: dependencies: slice-ansi: 5.0.0 string-width: 7.1.0 - clipanion@3.2.1(typanion@3.14.0): + clipanion@4.0.0-rc.4(typanion@3.14.0): dependencies: typanion: 3.14.0 @@ -6818,10 +6582,6 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - code-excerpt@3.0.0: - dependencies: - convert-to-spaces: 1.0.2 - color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -6847,12 +6607,8 @@ snapshots: concat-map@0.0.1: {} - confusing-browser-globals@1.0.11: {} - convert-source-map@2.0.0: {} - convert-to-spaces@1.0.2: {} - convert@5.13.1: {} create-require@1.1.1: {} @@ -7002,10 +6758,6 @@ snapshots: diff@4.0.2: {} - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - dlv@1.1.3: {} doctrine@2.1.0: @@ -7264,32 +7016,10 @@ snapshots: escape-string-regexp@1.0.5: {} - escape-string-regexp@2.0.0: {} - escape-string-regexp@4.0.0: {} escape-string-regexp@5.0.0: {} - eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@1.21.6)): - dependencies: - confusing-browser-globals: 1.0.11 - eslint: 9.39.1(jiti@1.21.6) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@7.18.0(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@1.21.6)) - object.assign: 4.1.5 - object.entries: 1.1.8 - semver: 6.3.1 - - eslint-config-airbnb@19.0.4(eslint-plugin-import@2.32.0)(eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.1(jiti@1.21.6)))(eslint-plugin-react-hooks@4.6.2(eslint@9.39.1(jiti@1.21.6)))(eslint-plugin-react@7.37.5(eslint@9.39.1(jiti@1.21.6)))(eslint@9.39.1(jiti@1.21.6)): - dependencies: - eslint: 9.39.1(jiti@1.21.6) - eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@1.21.6)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@7.18.0(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@1.21.6)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.1(jiti@1.21.6)) - eslint-plugin-react: 7.37.5(eslint@9.39.1(jiti@1.21.6)) - eslint-plugin-react-hooks: 4.6.2(eslint@9.39.1(jiti@1.21.6)) - object.assign: 4.1.5 - object.entries: 1.1.8 - eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 @@ -7309,22 +7039,22 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@7.18.0(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@1.21.6)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@1.21.6)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@7.18.0(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@1.21.6)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@1.21.6)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3) eslint: 9.39.1(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@1.21.6)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@7.18.0(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@1.21.6)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@1.21.6)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -7335,7 +7065,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.1(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@7.18.0(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@1.21.6)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@1.21.6)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -7347,7 +7077,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3) + '@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@1.21.6))(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -7372,9 +7102,16 @@ snapshots: safe-regex-test: 1.0.3 string.prototype.includes: 2.0.1 - eslint-plugin-react-hooks@4.6.2(eslint@9.39.1(jiti@1.21.6)): + eslint-plugin-react-hooks@7.0.1(eslint@9.39.1(jiti@1.21.6)): dependencies: + '@babel/core': 7.25.8 + '@babel/parser': 7.25.8 eslint: 9.39.1(jiti@1.21.6) + hermes-parser: 0.25.1 + zod: 4.1.13 + zod-validation-error: 4.0.2(zod@4.1.13) + transitivePeerDependencies: + - supports-color eslint-plugin-react@7.37.5(eslint@9.39.1(jiti@1.21.6)): dependencies: @@ -7424,7 +7161,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.3.7 + debug: 4.4.3 escape-string-regexp: 4.0.0 eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -7498,6 +7235,8 @@ snapshots: extend@3.0.2: {} + fast-content-type-parse@2.0.1: {} + fast-deep-equal@3.1.3: {} fast-glob@3.3.2: @@ -7708,15 +7447,6 @@ snapshots: define-properties: 1.2.1 gopd: 1.2.0 - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.1 - merge2: 1.4.1 - slash: 3.0.0 - glsl-noise@0.0.0: {} gopd@1.0.1: @@ -7747,13 +7477,6 @@ snapshots: graphemer@1.4.0: {} - graphql-tag@2.12.6(graphql@15.9.0): - dependencies: - graphql: 15.9.0 - tslib: 2.6.3 - - graphql@15.9.0: {} - has-bigints@1.0.2: {} has-flag@3.0.0: {} @@ -7814,6 +7537,12 @@ snapshots: dependencies: '@types/hast': 3.0.4 + hermes-estree@0.25.1: {} + + hermes-parser@0.25.1: + dependencies: + hermes-estree: 0.25.1 + highlight.js@10.7.3: {} hls.js@1.5.17: {} @@ -7836,7 +7565,7 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.7 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -7868,40 +7597,6 @@ snapshots: imurmurhash@0.1.4: {} - indent-string@4.0.0: {} - - ink@3.2.0(@types/react@18.3.11)(react@18.3.1): - dependencies: - ansi-escapes: 4.3.2 - auto-bind: 4.0.0 - chalk: 4.1.2 - cli-boxes: 2.2.1 - cli-cursor: 3.1.0 - cli-truncate: 2.1.0 - code-excerpt: 3.0.0 - indent-string: 4.0.0 - is-ci: 2.0.0 - lodash: 4.17.21 - patch-console: 1.0.0 - react: 18.3.1 - react-devtools-core: 4.28.5 - react-reconciler: 0.26.2(react@18.3.1) - scheduler: 0.20.2 - signal-exit: 3.0.7 - slice-ansi: 3.0.0 - stack-utils: 2.0.6 - string-width: 4.2.3 - type-fest: 0.12.0 - widest-line: 3.1.0 - wrap-ansi: 6.2.0 - ws: 7.5.10 - yoga-layout-prebuilt: 1.10.0 - optionalDependencies: - '@types/react': 18.3.11 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - inline-style-parser@0.2.4: {} internal-slot@1.0.7: @@ -7975,10 +7670,6 @@ snapshots: is-callable@1.2.7: {} - is-ci@2.0.0: - dependencies: - ci-info: 2.0.0 - is-core-module@2.13.1: dependencies: hasown: 2.0.2 @@ -8814,12 +8505,6 @@ snapshots: has-symbols: 1.1.0 object-keys: 1.1.1 - object.entries@1.1.8: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - object.entries@1.1.9: dependencies: call-bind: 1.0.8 @@ -8881,13 +8566,6 @@ snapshots: dependencies: yaml: 1.10.2 - optimism@0.18.0: - dependencies: - '@wry/caches': 1.0.1 - '@wry/context': 0.7.4 - '@wry/trie': 0.4.3 - tslib: 2.6.3 - optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -8946,8 +8624,6 @@ snapshots: parse5@6.0.1: {} - patch-console@1.0.0: {} - path-exists@3.0.0: {} path-exists@4.0.0: {} @@ -8963,8 +8639,6 @@ snapshots: lru-cache: 10.2.2 minipass: 7.1.2 - path-type@4.0.0: {} - pegjs@0.10.0: {} picocolors@1.0.1: {} @@ -9084,14 +8758,6 @@ snapshots: prop-types: 15.8.1 react: 18.3.1 - react-devtools-core@4.28.5: - dependencies: - shell-quote: 1.8.1 - ws: 7.5.10 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - react-dom@18.3.1(react@18.3.1): dependencies: loose-envify: 1.4.0 @@ -9147,13 +8813,6 @@ snapshots: react-lifecycles-compat: 3.0.4 warning: 4.0.3 - react-reconciler@0.26.2(react@18.3.1): - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react: 18.3.1 - scheduler: 0.20.2 - react-reconciler@0.27.0(react@18.3.1): dependencies: loose-envify: 1.4.0 @@ -9241,11 +8900,6 @@ snapshots: gopd: 1.2.0 set-function-name: 2.0.2 - rehackt@0.1.0(@types/react@18.3.11)(react@18.3.1): - optionalDependencies: - '@types/react': 18.3.11 - react: 18.3.1 - remark-gfm@4.0.0: dependencies: '@types/mdast': 4.0.4 @@ -9304,17 +8958,10 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - response-iterator@0.2.6: {} - responselike@3.0.0: dependencies: lowercase-keys: 3.0.0 - restore-cursor@3.1.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - restore-cursor@5.1.0: dependencies: onetime: 7.0.0 @@ -9359,10 +9006,6 @@ snapshots: dependencies: queue-microtask: 1.2.3 - rxjs@7.8.1: - dependencies: - tslib: 2.6.3 - safe-array-concat@1.1.2: dependencies: call-bind: 1.0.7 @@ -9402,11 +9045,6 @@ snapshots: immutable: 4.3.6 source-map-js: 1.2.0 - scheduler@0.20.2: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - scheduler@0.21.0: dependencies: loose-envify: 1.4.0 @@ -9451,8 +9089,6 @@ snapshots: shebang-regex@3.0.0: {} - shell-quote@1.8.1: {} - should-equal@2.0.0: dependencies: should-type: 1.4.0 @@ -9520,16 +9156,8 @@ snapshots: sisteransi@1.0.5: {} - slash@3.0.0: {} - slash@4.0.0: {} - slice-ansi@3.0.0: - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - slice-ansi@5.0.0: dependencies: ansi-styles: 6.2.1 @@ -9580,10 +9208,6 @@ snapshots: stable-hash@0.0.5: {} - stack-utils@2.0.6: - dependencies: - escape-string-regexp: 2.0.0 - stats-gl@2.2.8: dependencies: '@types/three': 0.163.0 @@ -9741,8 +9365,6 @@ snapshots: transitivePeerDependencies: - encoding - symbol-observable@4.0.0: {} - tailwind-gradient-mask-image@1.2.0: {} tailwindcss@3.4.14(ts-node@9.1.1(typescript@5.6.3)): @@ -9774,7 +9396,7 @@ snapshots: terser@5.31.1: dependencies: - '@jridgewell/source-map': 0.3.6 + '@jridgewell/source-map': 0.3.11 acorn: 8.15.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -9841,20 +9463,12 @@ snapshots: trough@2.2.0: {} - ts-api-utils@1.3.0(typescript@5.6.3): - dependencies: - typescript: 5.6.3 - ts-api-utils@2.1.0(typescript@5.6.3): dependencies: typescript: 5.6.3 ts-interface-checker@0.1.13: {} - ts-invariant@0.10.3: - dependencies: - tslib: 2.6.3 - ts-node@9.1.1(typescript@4.8.4): dependencies: arg: 4.1.3 @@ -9908,10 +9522,6 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-fest@0.12.0: {} - - type-fest@0.21.3: {} - type-fest@2.19.0: {} typed-array-buffer@1.0.2: @@ -9996,6 +9606,8 @@ snapshots: typescript@5.6.3: {} + typescript@5.7.3: {} + unbox-primitive@1.0.2: dependencies: call-bind: 1.0.7 @@ -10045,6 +9657,8 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 + universal-user-agent@7.0.3: {} + universalify@2.0.1: {} unplugin@1.0.1: @@ -10224,18 +9838,8 @@ snapshots: dependencies: isexe: 2.0.0 - widest-line@3.1.0: - dependencies: - string-width: 4.2.3 - word-wrap@1.2.5: {} - wrap-ansi@6.2.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -10256,8 +9860,6 @@ snapshots: wrappy@1.0.2: {} - ws@7.5.10: {} - y18n@5.0.8: {} yallist@3.1.1: {} @@ -10296,10 +9898,6 @@ snapshots: yocto-queue@0.1.0: {} - yoga-layout-prebuilt@1.10.0: - dependencies: - '@types/yoga-layout': 1.9.2 - yup@1.4.0: dependencies: property-expr: 2.0.6 @@ -10307,11 +9905,11 @@ snapshots: toposort: 2.0.2 type-fest: 2.19.0 - zen-observable-ts@1.2.5: + zod-validation-error@4.0.2(zod@4.1.13): dependencies: - zen-observable: 0.8.15 + zod: 4.1.13 - zen-observable@0.8.15: {} + zod@4.1.13: {} zustand@3.7.2(react@18.3.1): optionalDependencies: diff --git a/server/core/src/main/java/dev/slimevr/trackingchecklist/TrackingChecklistManager.kt b/server/core/src/main/java/dev/slimevr/trackingchecklist/TrackingChecklistManager.kt index 0549249fe..e2931d12d 100644 --- a/server/core/src/main/java/dev/slimevr/trackingchecklist/TrackingChecklistManager.kt +++ b/server/core/src/main/java/dev/slimevr/trackingchecklist/TrackingChecklistManager.kt @@ -78,7 +78,7 @@ class TrackingChecklistManager(private val vrServer: VRServer) : VRCConfigListen steps.add( TrackingChecklistStepT().apply { id = TrackingChecklistStepId.STEAMVR_DISCONNECTED - enabled = true + enabled = false optional = false ignorable = true visibility = TrackingChecklistStepVisibility.WHEN_INVALID @@ -266,6 +266,7 @@ class TrackingChecklistManager(private val vrServer: VRServer) : VRCConfigListen TrackingChecklistStepId.STEAMVR_DISCONNECTED, steamvrConnected, ) { + it.enabled = true if (!steamvrConnected) { it.extraData = TrackingChecklistExtraDataUnion().apply { type = TrackingChecklistExtraData.TrackingChecklistSteamVRDisconnected