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
@@ -509,7 +509,7 @@ const admin: TranslationStrings = {
'admin.addons.catalog.packing.name': 'Liste',
'admin.addons.catalog.packing.description': 'Liste di imballaggio e attività da svolgere per i tuoi viaggi',
'admin.addons.catalog.budget.name': 'Costi',
'admin.addons.catalog.budget.description': 'Tieni traccia delle spese e pianifica il budget del tuo viaggio',
'admin.addons.catalog.budget.description': 'Tieni traccia delle spese del viaggio e dividile tra i viaggiatori',
'admin.addons.catalog.documents.name': 'Documenti',
'admin.addons.catalog.documents.description': 'Archivia e gestisci i documenti di viaggio',
'admin.addons.catalog.vacay.name': 'Ferie',
@@ -517,13 +517,19 @@ const admin: TranslationStrings = {
'admin.addons.catalog.atlas.name': 'Atlante',
'admin.addons.catalog.atlas.description': 'Mappa del mondo con paesi visitati e statistiche di viaggio',
'admin.addons.catalog.collab.name': 'Collaborazione',
'admin.addons.catalog.collab.description': 'Note, sondaggi e chat in tempo reale per la pianificazione del viaggio',
'admin.addons.catalog.collab.description': 'Note, sondaggi, chat e suggerimenti per pianificare insieme',
'admin.addons.catalog.memories.name': 'Foto (Immich)',
'admin.addons.catalog.memories.description': 'Condividi le foto del viaggio tramite la tua istanza Immich',
'admin.addons.catalog.mcp.name': 'MCP',
'admin.addons.catalog.mcp.description': "Model Context Protocol per l'integrazione di assistenti AI",
'admin.addons.subtitleBefore': 'Abilita o disabilita le funzionalità per personalizzare la tua ',
'admin.addons.subtitleAfter': ' esperienza.',
'admin.addons.catalog.naver_list_import.name': 'Naver List Import',
'admin.addons.catalog.naver_list_import.description': 'Importa luoghi da un elenco condiviso di Naver Maps',
'admin.addons.catalog.airtrail.name': 'AirTrail',
'admin.addons.catalog.airtrail.description': 'Sincronizza i voli dalla tua istanza AirTrail self-hosted',
'admin.addons.catalog.llm_parsing.name': 'Analisi con IA',
'admin.addons.catalog.llm_parsing.description': 'Legge le prenotazioni che l’analizzatore integrato non riesce a interpretare, con un modello di IA a tua scelta',
'admin.addons.enabled': 'Abilitato',
'admin.addons.disabled': 'Disabilitato',
'admin.addons.type.trip': 'Viaggio',
@@ -534,6 +540,7 @@ const admin: TranslationStrings = {
'admin.addons.integrationHint': 'Servizi backend e integrazioni API senza pagina dedicata',
'admin.addons.toast.updated': 'Modulo aggiornato',
'admin.addons.toast.error': 'Impossibile aggiornare il modulo',
'admin.addons.group.count': '{enabled} di {total} attivi',
'admin.addons.noAddons': 'Nessun modulo disponibile',
'admin.weather.title': 'Dati meteo',
'admin.weather.badge': 'Dal 24 marzo 2026',
@@ -669,8 +676,7 @@ const admin: TranslationStrings = {
'admin.addons.catalog.journey.name': 'Diario di viaggio',
'admin.addons.catalog.journey.description': 'Tracciamento viaggi e diario con check-in, foto e storie quotidiane',
'admin.addons.catalog.collections.name': 'Raccolte',
'admin.addons.catalog.collections.description':
'Libreria personale di luoghi: salva luoghi dai tuoi viaggi in liste con nome, copiali in qualsiasi viaggio e condividili con altri',
'admin.addons.catalog.collections.description': 'Raccogli luoghi da tutti i viaggi in elenchi con nome e riutilizzali',
'admin.passkey.title': 'Accesso con passkey',
'admin.passkey.cardHint':
'Consenti agli utenti di accedere con le passkey (WebAuthn). Disattivato per impostazione predefinita.',