fix(dsfr): remplace l'usage détourné de fr-card par un panneau .app-panel
.fr-card (flex + height:100% + bordure ::before) débordait quand utilisé comme conteneur générique (wizard de saisie, journal, rapports, profil, timeline) et chevauchait le footer. Remplacé par .app-panel (panneau neutre, variables DSFR). Les vraies cartes structurées (fr-card__body) sont conservées. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -86,7 +86,7 @@ export default function NouvelleSaisiePage() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Étape actuelle */}
|
{/* Étape actuelle */}
|
||||||
<div className="fr-card fr-p-3w fr-mb-3w">
|
<div className="app-panel fr-p-3w fr-mb-3w">
|
||||||
<p className="fr-text--sm fr-text-mention--grey fr-mb-3w">
|
<p className="fr-text--sm fr-text-mention--grey fr-mb-3w">
|
||||||
{STEPS[step - 1].description}
|
{STEPS[step - 1].description}
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ export default function JournalPage() {
|
|||||||
|
|
||||||
{/* Filtres */}
|
{/* Filtres */}
|
||||||
{showFilters && (
|
{showFilters && (
|
||||||
<div className="fr-card fr-p-3w fr-mb-4w">
|
<div className="app-panel fr-p-3w fr-mb-4w">
|
||||||
<div className="fr-grid-row fr-grid-row--gutters">
|
<div className="fr-grid-row fr-grid-row--gutters">
|
||||||
<div className="fr-col-12 fr-col-md-4">
|
<div className="fr-col-12 fr-col-md-4">
|
||||||
<div className="fr-input-group">
|
<div className="fr-input-group">
|
||||||
|
|||||||
@@ -128,26 +128,26 @@ export default function RapportsPage() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Répartition (Camembert) */}
|
{/* Répartition (Camembert) */}
|
||||||
<div className="fr-card fr-p-3w fr-mb-3w">
|
<div className="app-panel fr-p-3w fr-mb-3w">
|
||||||
<h2 className="fr-h5">Répartition des émotions</h2>
|
<h2 className="fr-h5">Répartition des émotions</h2>
|
||||||
<EmotionChart data={rapport} type="repartition" />
|
<EmotionChart data={rapport} type="repartition" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Évolution (Lignes) */}
|
{/* Évolution (Lignes) */}
|
||||||
<div className="fr-card fr-p-3w fr-mb-3w">
|
<div className="app-panel fr-p-3w fr-mb-3w">
|
||||||
<h2 className="fr-h5">Évolution dans le temps</h2>
|
<h2 className="fr-h5">Évolution dans le temps</h2>
|
||||||
<EmotionChart data={rapport} type="evolution" />
|
<EmotionChart data={rapport} type="evolution" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Intensité moyenne (Barres) */}
|
{/* Intensité moyenne (Barres) */}
|
||||||
<div className="fr-card fr-p-3w fr-mb-3w">
|
<div className="app-panel fr-p-3w fr-mb-3w">
|
||||||
<h2 className="fr-h5">Intensité moyenne par période</h2>
|
<h2 className="fr-h5">Intensité moyenne par période</h2>
|
||||||
<EmotionChart data={rapport} type="intensite" />
|
<EmotionChart data={rapport} type="intensite" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Détail répartition */}
|
{/* Détail répartition */}
|
||||||
{rapport.repartition.length > 0 && (
|
{rapport.repartition.length > 0 && (
|
||||||
<div className="fr-card fr-p-3w">
|
<div className="app-panel fr-p-3w">
|
||||||
<h2 className="fr-h5">Détail par émotion</h2>
|
<h2 className="fr-h5">Détail par émotion</h2>
|
||||||
<ul className="fr-raw-list">
|
<ul className="fr-raw-list">
|
||||||
{rapport.repartition.map((item) => (
|
{rapport.repartition.map((item) => (
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ export default function ProfilPage() {
|
|||||||
<h1>Mon profil</h1>
|
<h1>Mon profil</h1>
|
||||||
|
|
||||||
{/* Infos du profil */}
|
{/* Infos du profil */}
|
||||||
<div className="fr-card fr-p-3w fr-mb-3w">
|
<div className="app-panel fr-p-3w fr-mb-3w">
|
||||||
<h2 className="fr-h4 fr-mb-1v">
|
<h2 className="fr-h4 fr-mb-1v">
|
||||||
{user?.prenom} {user?.nom}
|
{user?.prenom} {user?.nom}
|
||||||
</h2>
|
</h2>
|
||||||
@@ -171,7 +171,7 @@ export default function ProfilPage() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Changer mot de passe */}
|
{/* Changer mot de passe */}
|
||||||
<div className="fr-card fr-p-3w fr-mb-3w">
|
<div className="app-panel fr-p-3w fr-mb-3w">
|
||||||
<h2 className="fr-h5">
|
<h2 className="fr-h5">
|
||||||
<span className="fr-icon-lock-line fr-mr-1w" aria-hidden="true" />
|
<span className="fr-icon-lock-line fr-mr-1w" aria-hidden="true" />
|
||||||
Mot de passe
|
Mot de passe
|
||||||
@@ -252,7 +252,7 @@ export default function ProfilPage() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Zone dangereuse — RGPD */}
|
{/* Zone dangereuse — RGPD */}
|
||||||
<div className="fr-card fr-p-3w">
|
<div className="app-panel fr-p-3w">
|
||||||
<h2 className="fr-h5">
|
<h2 className="fr-h5">
|
||||||
<span className="fr-icon-warning-line fr-mr-1w" aria-hidden="true" />
|
<span className="fr-icon-warning-line fr-mr-1w" aria-hidden="true" />
|
||||||
Zone dangereuse
|
Zone dangereuse
|
||||||
|
|||||||
@@ -1,5 +1,13 @@
|
|||||||
@import "tailwindcss";
|
@import "tailwindcss";
|
||||||
|
|
||||||
|
/* Panneau neutre (remplace l'usage détourné de .fr-card comme conteneur).
|
||||||
|
Utilise les variables DSFR pour s'adapter aux thèmes clair/sombre. */
|
||||||
|
.app-panel {
|
||||||
|
background-color: var(--background-default-grey);
|
||||||
|
border: 1px solid var(--border-default-grey);
|
||||||
|
border-radius: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
@theme inline {
|
@theme inline {
|
||||||
--color-background: var(--background);
|
--color-background: var(--background);
|
||||||
--color-foreground: var(--foreground);
|
--color-foreground: var(--foreground);
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ export default function TrackerTimeline({ saisies, onEdit, onDelete }: TrackerTi
|
|||||||
<div className="fr-grid-row fr-grid-row--gutters">
|
<div className="fr-grid-row fr-grid-row--gutters">
|
||||||
{items.map((saisie) => (
|
{items.map((saisie) => (
|
||||||
<div key={saisie.id} className="fr-col-12">
|
<div key={saisie.id} className="fr-col-12">
|
||||||
<div className="fr-card fr-p-2w">
|
<div className="app-panel fr-p-2w">
|
||||||
<div className="fr-grid-row fr-grid-row--gutters fr-grid-row--top">
|
<div className="fr-grid-row fr-grid-row--gutters fr-grid-row--top">
|
||||||
{/* Icône émotion */}
|
{/* Icône émotion */}
|
||||||
<div className="fr-col-auto">
|
<div className="fr-col-auto">
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ interface CardProps {
|
|||||||
// éditoriale DSFR, afin de garder un conteneur générique réutilisable).
|
// éditoriale DSFR, afin de garder un conteneur générique réutilisable).
|
||||||
export default function Card({ children, className = "", hover = false }: CardProps) {
|
export default function Card({ children, className = "", hover = false }: CardProps) {
|
||||||
const classes = [
|
const classes = [
|
||||||
"fr-card",
|
"app-panel",
|
||||||
"fr-p-3w",
|
"fr-p-3w",
|
||||||
hover ? "fr-enlarge-link" : "",
|
hover ? "fr-enlarge-link" : "",
|
||||||
className,
|
className,
|
||||||
|
|||||||
@@ -3,8 +3,13 @@
|
|||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"strict": true,
|
"strict": true,
|
||||||
"paths": {
|
"paths": {
|
||||||
"@/*": ["./*"]
|
"@/*": [
|
||||||
|
"./*"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"include": ["**/*.ts", "**/*.tsx", ".expo/types/**/*.ts", "expo-env.d.ts"]
|
"include": [
|
||||||
|
"**/*.ts",
|
||||||
|
"**/*.tsx"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user