dark mode
This commit is contained in:
79
codex-prompt/dark-mode.txt
Normal file
79
codex-prompt/dark-mode.txt
Normal file
@@ -0,0 +1,79 @@
|
||||
TASK: Aggiungere Dark Mode globale con toggle nel footer (Flowbite + Tailwind).
|
||||
|
||||
Vincoli:
|
||||
- Usare Tailwind dark mode con strategia "class" (non media)
|
||||
- Toggle nel footer visibile su tutte le pagine (layout globale)
|
||||
- Stato persistente con localStorage
|
||||
- Default: se non c’è preferenza salvata, usare prefers-color-scheme
|
||||
- Nessun framework JS aggiuntivo
|
||||
- Non rompere HTMX e Flowbite
|
||||
- Accessibile (aria-label, stato, focus)
|
||||
|
||||
1) Tailwind config
|
||||
- Aggiornare tailwind.config.js:
|
||||
- impostare `darkMode: 'class'`
|
||||
- assicurarsi che content includa templates e node_modules/flowbite come già configurato
|
||||
|
||||
2) JS globale
|
||||
- Creare file /web/static/vendor/theme.js (o /web/static/js/theme.js se preferisci) con:
|
||||
- all’avvio (prima del render visibile):
|
||||
- leggere localStorage key `theme` ('dark'|'light')
|
||||
- se non presente, leggere `window.matchMedia('(prefers-color-scheme: dark)')`
|
||||
- applicare/rimuovere classe `dark` su <html> (document.documentElement)
|
||||
- esporre funzione toggleTheme() che:
|
||||
- toggla classe `dark`
|
||||
- salva preferenza in localStorage
|
||||
- aggiorna label testo del bottone e aria-pressed
|
||||
- gestire aggiornamento se l’utente non ha preferenza salvata e cambia prefers-color-scheme (listener matchMedia), opzionale ma gradito
|
||||
|
||||
3) Includere theme.js nel layout
|
||||
- In /web/templates/layout.html:
|
||||
- includere theme.js nel <head> prima del CSS per evitare FOUC:
|
||||
<script src="/static/vendor/theme.js"></script>
|
||||
- poi link CSS e script htmx/flowbite come già presenti
|
||||
- aggiungere classi base al body per dark:
|
||||
- bg-white dark:bg-gray-900
|
||||
- text-gray-900 dark:text-gray-100
|
||||
- min-h-screen flex flex-col
|
||||
- contenuto in main con flex-1
|
||||
|
||||
4) Footer + toggle button (Flowbite style)
|
||||
- Nel footer del layout aggiungere un bottone:
|
||||
- posizionato a destra (o center se preferisci) con icona (testo va bene senza icone)
|
||||
- classi Flowbite/Tailwind:
|
||||
- px-3 py-2 text-sm font-medium rounded-lg
|
||||
- bg-gray-100 hover:bg-gray-200 dark:bg-gray-800 dark:hover:bg-gray-700
|
||||
- attributi accessibilità:
|
||||
- id="themeToggle"
|
||||
- type="button"
|
||||
- aria-label="Toggle dark mode"
|
||||
- aria-pressed="false" (aggiornato via JS)
|
||||
- testo dinamico: "Dark mode" / "Light mode" o "Tema: Scuro/Chiaro"
|
||||
|
||||
- Aggiungere onclick:
|
||||
- onclick="window.toggleTheme && window.toggleTheme()"
|
||||
|
||||
5) Aggiornare componenti base per dark
|
||||
- Aggiornare /web/templates/components/navbar.html (se esiste) e altri partial principali con classi dark:
|
||||
- Navbar: bg-white dark:bg-gray-900, border-gray-200 dark:border-gray-700
|
||||
- Dropdown: bg-white dark:bg-gray-800, text colors
|
||||
- Cards: bg-white dark:bg-gray-800
|
||||
- Tables: dark divide colors
|
||||
Non serve perfezione totale, ma assicurare leggibilità.
|
||||
|
||||
6) README
|
||||
- Aggiornare README con nota:
|
||||
- dark mode persistente in localStorage key "theme"
|
||||
|
||||
7) Criteri di accettazione
|
||||
- Il toggle è visibile nel footer su tutte le pagine
|
||||
- Il tema persiste al reload
|
||||
- Default segue prefers-color-scheme se non impostato manualmente
|
||||
- Nessun flash di tema sbagliato (FOUC minimizzato)
|
||||
- Non rompe Flowbite JS, modals, dropdown e HTMX
|
||||
- Accessibile: bottone focusable e aria-pressed aggiornato
|
||||
|
||||
Esegui:
|
||||
- make tw-build (o make tw-watch per verificare)
|
||||
- Avvia server e verifica cambio tema su /login e /users.
|
||||
Correggi eventuali classi mancanti.
|
||||
Reference in New Issue
Block a user