diff --git a/.prettierignore b/.prettierignore index 5f7484c1a6..449d3ded7f 100644 --- a/.prettierignore +++ b/.prettierignore @@ -41,3 +41,7 @@ CHANGELOG.md CONTRIBUTING.md *.yml *.yaml + +# Pre-existing intentional formatting exceptions (do not reformat) +packages/web/index.html +packages/web/src/lib/useVisualViewport.ts diff --git a/RESPONSIVE_UI_PATCH.md b/RESPONSIVE_UI_PATCH.md new file mode 100644 index 0000000000..dc639af0a4 --- /dev/null +++ b/RESPONSIVE_UI_PATCH.md @@ -0,0 +1,805 @@ +# Patch : UI Mobile-Responsive — Archon + +> **Date du patch :** Avril 2026 +> **Auteur :** Roland Galzy +> **Version Archon ciblée :** branche `main` / tag à préciser lors de la prochaine mise à jour + +--- + +## Pourquoi ce patch existe + +Archon est déployé localement et exposé via un tunnel Cloudflare (`cloudflared`) pour permettre un accès depuis un smartphone ou une tablette. L'interface d'origine n'étant pas conçue pour les petits écrans (navigation en haut de page non adaptée, panneau latéral gauche du chat prenant toute la largeur), une série de modifications a été appliquée pour rendre l'UI pleinement utilisable sur mobile. + +**Changements principaux :** + +1. Création d'un **contexte React partagé** (`MobileNavContext`) pour synchroniser l'état du drawer mobile. +2. Ajout d'un **drawer de navigation latéral** dans `Layout.tsx` (visible uniquement sur mobile). +3. Transformation de la **TopNav** : bouton hamburger ☰ sur mobile, comportement inchangé sur desktop. +4. Masquage du **panneau gauche de ChatPage** sur mobile (conversations), la zone de chat prend toute la largeur. + +--- + +## Fichiers modifiés + +### 1. `packages/web/src/contexts/MobileNavContext.tsx` _(nouveau fichier)_ + +**Rôle :** Contexte React permettant à `Layout.tsx` et `TopNav.tsx` de partager l'état d'ouverture du drawer mobile (`open` / `setOpen`) sans props drilling. + +**Code complet :** + +```tsx +import { createContext, useContext } from 'react'; + +export interface MobileNavContextValue { + open: boolean; + setOpen: (open: boolean) => void; +} + +export const MobileNavContext = createContext({ + open: false, + setOpen: () => {}, +}); + +export function useMobileNav(): MobileNavContextValue { + return useContext(MobileNavContext); +} +``` + +--- + +### 2. `packages/web/src/components/layout/Layout.tsx` _(modifié)_ + +**Changements apportés :** + +- Import de `useState`, des icônes Lucide (`MessageSquare`, `LayoutDashboard`, `Workflow`, `Settings`, `X`) et de `NavLink` depuis `react-router`. +- Import de `MobileNavContext` et `cn`. +- Ajout de l'état `open` / `setOpen` via `useState(false)`. +- Enveloppe le JSX dans ``. +- Ajout d'un **backdrop overlay** semi-transparent (cliquable pour fermer) : `fixed inset-0 z-40 bg-black/60 md:hidden`. +- Ajout d'un **drawer `