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
@@ -567,7 +567,7 @@ const admin: TranslationStrings = {
'admin.addons.catalog.packing.name': 'Listor',
'admin.addons.catalog.packing.description': 'Packlistor och saker att göra inför dina resor',
'admin.addons.catalog.budget.name': 'Kostnader',
'admin.addons.catalog.budget.description': 'Håll koll på utgifterna och planera din resebudget',
'admin.addons.catalog.budget.description': 'Håll koll på resans utgifter och dela dem mellan resenärerna',
'admin.addons.catalog.documents.name': 'Dokument',
'admin.addons.catalog.documents.description': 'Spara och hantera resedokument',
'admin.addons.catalog.vacay.name': 'Vacay',
@@ -575,13 +575,19 @@ const admin: TranslationStrings = {
'admin.addons.catalog.atlas.name': 'Atlas',
'admin.addons.catalog.atlas.description': 'Världskarta med besökta länder och resestatistik',
'admin.addons.catalog.collab.name': 'Samarbete',
'admin.addons.catalog.collab.description': 'Noteringar, omröstningar och chatt i realtid för resplanering',
'admin.addons.catalog.collab.description': 'Anteckningar, omröstningar, chatt och förslag för gemensam planering',
'admin.addons.catalog.memories.name': 'Foton (Immich)',
'admin.addons.catalog.memories.description': 'Dela resefoton via din Immich-instans',
'admin.addons.catalog.mcp.name': 'MCP',
'admin.addons.catalog.mcp.description': 'Modellkontextprotokoll för integration av AI-assistenter',
'admin.addons.subtitleBefore': 'Aktivera eller inaktivera funktioner för att anpassa din ',
'admin.addons.subtitleAfter': ' erfarenhet.',
'admin.addons.catalog.naver_list_import.name': 'Naver List Import',
'admin.addons.catalog.naver_list_import.description': 'Importera platser från en delad Naver Maps-lista',
'admin.addons.catalog.airtrail.name': 'AirTrail',
'admin.addons.catalog.airtrail.description': 'Synkronisera flyg från din egen AirTrail-instans',
'admin.addons.catalog.llm_parsing.name': 'AI-tolkning',
'admin.addons.catalog.llm_parsing.description': 'Läser bokningar som den inbyggda tolken inte klarar, med en AI-modell du väljer',
'admin.addons.enabled': 'Aktiverad',
'admin.addons.disabled': 'Inaktiverad',
'admin.addons.type.trip': 'Resa',
@@ -592,6 +598,7 @@ const admin: TranslationStrings = {
'admin.addons.integrationHint': 'Backend-tjänster och API-integrationer utan egen sida',
'admin.addons.toast.updated': 'Tillägget har uppdaterats',
'admin.addons.toast.error': 'Det gick inte att uppdatera tillägget',
'admin.addons.group.count': '{enabled} av {total} aktiverade',
'admin.addons.noAddons': 'Inga tillägg tillgängliga',
'admin.weather.title': 'Väderdata',
'admin.weather.badge': 'Sedan den 24 mars 2026',
@@ -684,8 +691,7 @@ const admin: TranslationStrings = {
'admin.addons.catalog.journey.name': 'Journey',
'admin.addons.catalog.journey.description': 'Resespårning och resedagbok med incheckningar, foton och dagliga inlägg',
'admin.addons.catalog.collections.name': 'Samlingar',
'admin.addons.catalog.collections.description':
'Personligt platsbibliotek — spara platser mellan resor i namngivna listor, kopiera till valfri resa, dela med andra',
'admin.addons.catalog.collections.description': 'Samla platser från alla resor i namngivna listor och återanvänd dem',
'admin.passkey.title': 'Inloggningsnyckel',
'admin.passkey.cardHint': 'Låter användare att logga in med inloggningsnyckel (WebAuthn). Avstängt som standard.',
'admin.passkey.login': 'Aktivera inloggningsnyckel',