feat(admin): rebuild the addons page as a tile grid with sub-shelves

The three stacked sections become one grid of cards per group, with the
type shown on the tile itself. Bag tracking, the collab features and the
photo providers hang off their parent addon as compact shelf rows
instead of full-width siblings, and each group header counts how many of
its addons are on.

Along the way:
- naver_list_import, airtrail and llm_parsing get catalog entries, so
  their names and descriptions translate like everyone else
- dark detection moves into a shared useIsDark hook that watches the
  .dark class instead of re-deriving settings + matchMedia locally
- the ToggleSwitch knob uses --accent-text so a light accent in dark
  mode no longer renders white-on-white
This commit is contained in:
Maurice
2026-08-30 14:04:25 +02:00
committed by Maurice
parent 9bfdc19e68
commit 3472d06e62
29 changed files with 590 additions and 383 deletions
+10 -4
View File
@@ -506,7 +506,7 @@ const admin: TranslationStrings = {
'admin.addons.catalog.packing.name': 'Listy',
'admin.addons.catalog.packing.description': 'Listy pakowania i zadania do wykonania dla Twoich podróży',
'admin.addons.catalog.budget.name': 'Koszty',
'admin.addons.catalog.budget.description': 'Śledź wydatki i planuj budżet podróży',
'admin.addons.catalog.budget.description': 'Śledź wydatki na podróż i dziel je między uczestników',
'admin.addons.catalog.documents.name': 'Dokumenty',
'admin.addons.catalog.documents.description': 'Przechowuj i zarządzaj dokumentami podróżnymi',
'admin.addons.catalog.vacay.name': 'Urlopy',
@@ -514,13 +514,19 @@ const admin: TranslationStrings = {
'admin.addons.catalog.atlas.name': 'Atlas',
'admin.addons.catalog.atlas.description': 'Mapa świata z odwiedzonymi krajami i statystykami podróży',
'admin.addons.catalog.collab.name': 'Współpraca',
'admin.addons.catalog.collab.description': 'Notatki w czasie rzeczywistym, ankiety i czat do planowania podróży',
'admin.addons.catalog.collab.description': 'Notatki, ankiety, czat i podpowiedzi do wspólnego planowania',
'admin.addons.catalog.memories.name': 'Zdjęcia (Immich)',
'admin.addons.catalog.memories.description': 'Udostępniaj zdjęcia z podróży za pośrednictwem swojej instancji Immich',
'admin.addons.catalog.mcp.name': 'MCP',
'admin.addons.catalog.mcp.description': 'Model Context Protocol dla integracji asystenta AI',
'admin.addons.subtitleBefore': 'Włączaj lub wyłączaj funkcje, aby dostosować swoje doświadczenie w ',
'admin.addons.subtitleAfter': '.',
'admin.addons.catalog.naver_list_import.name': 'Naver List Import',
'admin.addons.catalog.naver_list_import.description': 'Importuj miejsca z udostępnionej listy Naver Maps',
'admin.addons.catalog.airtrail.name': 'AirTrail',
'admin.addons.catalog.airtrail.description': 'Synchronizuj loty z własnej instancji AirTrail',
'admin.addons.catalog.llm_parsing.name': 'Analiza AI',
'admin.addons.catalog.llm_parsing.description': 'Odczytuje rezerwacje, których nie rozumie wbudowany parser, przy użyciu wybranego modelu AI',
'admin.addons.enabled': 'Włączone',
'admin.addons.disabled': 'Wyłączone',
'admin.addons.type.trip': 'Podróż',
@@ -531,6 +537,7 @@ const admin: TranslationStrings = {
'admin.addons.integrationHint': 'Usługi backendowe i integracje API bez dedykowanej strony',
'admin.addons.toast.updated': 'Dodatek został zaktualizowany',
'admin.addons.toast.error': 'Nie udało się zaktualizować dodatku',
'admin.addons.group.count': '{enabled} z {total} włączonych',
'admin.addons.noAddons': 'Brak dostępnych dodatków',
'admin.weather.title': 'Dane pogodowe',
'admin.weather.badge': 'Od 24 marca 2026',
@@ -677,8 +684,7 @@ const admin: TranslationStrings = {
'admin.addons.catalog.journey.description':
'Śledzenie podróży i dziennik z zameldowaniami, zdjęciami i codziennymi historiami',
'admin.addons.catalog.collections.name': 'Kolekcje',
'admin.addons.catalog.collections.description':
'Osobista biblioteka miejsc — zapisuj miejsca z podróży na nazwanych listach, kopiuj je do dowolnej podróży i udostępniaj innym',
'admin.addons.catalog.collections.description': 'Zbieraj miejsca ze wszystkich podróży na nazwane listy i używaj ich ponownie',
'admin.passkey.title': 'Logowanie kluczem dostępu',
'admin.passkey.cardHint': 'Pozwól użytkownikom logować się kluczami dostępu (WebAuthn). Domyślnie wyłączone.',
'admin.passkey.login': 'Włącz logowanie kluczem dostępu',