gaufre: handle DSFR dark theme

This commit is contained in:
Emmanuel Pelletier
2024-05-15 09:49:10 +02:00
parent 89de926f9c
commit bdf31c94a0
6 changed files with 117 additions and 48 deletions

View File

@@ -10,6 +10,9 @@ export default {
? ["./src/html.tsx", "./src/components/**/*.tsx"] ? ["./src/html.tsx", "./src/components/**/*.tsx"]
: ["./src/**/*.{js,jsx,ts,tsx,html}"], : ["./src/**/*.{js,jsx,ts,tsx,html}"],
css: ["./src/**/*.css"], css: ["./src/**/*.css"],
safelist: {
greedy: [/lasuite/],
},
variables: true, variables: true,
}), }),
autoprefixer(), autoprefixer(),

View File

@@ -0,0 +1,12 @@
import { ReactNode, useEffect } from "react"
export const DarkTheme = ({ children }: { children: ReactNode }) => {
useEffect(() => {
window.document.documentElement.setAttribute("data-fr-scheme", "dark")
return () => {
window.document.documentElement.removeAttribute("data-fr-scheme")
}
}, [])
return children
}

View File

@@ -2,3 +2,8 @@ body {
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
[data-fr-scheme="dark"] {
background-color: #161616;
color: #cecece;
}

View File

@@ -13,6 +13,7 @@ import { StylesStandalone } from "./StylesStandalone"
import { StylesGaufre } from "./StylesGaufre" import { StylesGaufre } from "./StylesGaufre"
import { DsfrHeader } from "./DsfrHeader" import { DsfrHeader } from "./DsfrHeader"
import services from "../../../../website/src/data/services.json" import services from "../../../../website/src/data/services.json"
import { DarkTheme } from "./DarkTheme"
const serviceHomepage = ({ const serviceHomepage = ({
id, id,
@@ -139,55 +140,59 @@ const routes = [
path: "/gaufre-custom", path: "/gaufre-custom",
label: "Gaufre (header custom)", label: "Gaufre (header custom)",
component: ( component: (
<StylesGaufre> <DarkTheme>
<div <StylesGaufre>
style={{ <div
margin: "2rem auto", data-fr-scheme="dark"
width: 800, style={{
border: "1px solid #999", margin: "2rem auto",
padding: "2rem", width: 800,
borderRadius: "0.5rem", border: "1px solid #999",
}} padding: "2rem",
> borderRadius: "0.5rem",
<div style={{ display: "flex", justifyContent: "space-between" }}> }}
<h1>À droite</h1> >
<Gaufre /> <div style={{ display: "flex", justifyContent: "space-between" }}>
<h1>À droite</h1>
<Gaufre />
</div>
<div style={{ display: "flex" }}>
<h1>À gauche</h1>
<Gaufre />
</div>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ac diam a libero
posuere ornare facilisis in mi. Nullam eu vulputate augue, in auctor nibh. Praesent ac
tempus dui. Integer vel enim non purus facilisis mattis et vel dolor. Aliquam lacinia
elit et massa faucibus, at dictum risus ornare. Vivamus ultricies magna et gravida
consequat. Donec ac odio finibus, lobortis purus vel, consequat purus. Maecenas
convallis vel enim eu malesuada. Vestibulum elementum maximus massa, a porta erat
congue quis. Nunc neque quam, euismod et malesuada in, bibendum ac ex. Phasellus felis
elit, egestas a convallis nec, malesuada a est. Donec ac urna venenatis lorem aliquet
rhoncus in accumsan ipsum.
</p>
<p>
Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi sed augue
elementum, tempus diam in, euismod purus. Fusce interdum, leo nec blandit eleifend,
sapien ligula egestas quam, quis aliquam ex turpis ut augue. Nullam a neque
consectetur, feugiat eros a, lacinia tortor. Proin imperdiet vehicula justo, eget
bibendum tortor gravida a. Pellentesque sit amet fermentum urna. Ut rutrum eros a
ligula dapibus pharetra. In porttitor arcu in euismod dictum. Aenean vestibulum mi et
dignissim rutrum. Phasellus ultrices ex justo, eu tincidunt metus efficitur non.
Curabitur ac lorem ornare, aliquet neque et, tristique elit. Donec quis turpis
sodales, interdum massa fermentum, dictum magna.
</p>
<p>
Mauris elit risus, facilisis at magna quis, interdum tempor nulla. Ut ac erat eget
tellus ultricies semper. Ut at dictum ante. Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Nam placerat lacinia eros ac convallis. Sed ultricies lectus et
pharetra aliquet. Vestibulum feugiat pulvinar fermentum. Vivamus imperdiet dapibus
ornare. Donec venenatis, lectus id faucibus tempus, sapien urna molestie augue, at
egestas enim lectus quis nisi.
</p>
</div> </div>
<div style={{ display: "flex" }}> </StylesGaufre>
<h1>À gauche</h1> </DarkTheme>
<Gaufre />
</div>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ac diam a libero posuere
ornare facilisis in mi. Nullam eu vulputate augue, in auctor nibh. Praesent ac tempus
dui. Integer vel enim non purus facilisis mattis et vel dolor. Aliquam lacinia elit et
massa faucibus, at dictum risus ornare. Vivamus ultricies magna et gravida consequat.
Donec ac odio finibus, lobortis purus vel, consequat purus. Maecenas convallis vel enim
eu malesuada. Vestibulum elementum maximus massa, a porta erat congue quis. Nunc neque
quam, euismod et malesuada in, bibendum ac ex. Phasellus felis elit, egestas a convallis
nec, malesuada a est. Donec ac urna venenatis lorem aliquet rhoncus in accumsan ipsum.
</p>
<p>
Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi sed augue elementum,
tempus diam in, euismod purus. Fusce interdum, leo nec blandit eleifend, sapien ligula
egestas quam, quis aliquam ex turpis ut augue. Nullam a neque consectetur, feugiat eros
a, lacinia tortor. Proin imperdiet vehicula justo, eget bibendum tortor gravida a.
Pellentesque sit amet fermentum urna. Ut rutrum eros a ligula dapibus pharetra. In
porttitor arcu in euismod dictum. Aenean vestibulum mi et dignissim rutrum. Phasellus
ultrices ex justo, eu tincidunt metus efficitur non. Curabitur ac lorem ornare, aliquet
neque et, tristique elit. Donec quis turpis sodales, interdum massa fermentum, dictum
magna.
</p>
<p>
Mauris elit risus, facilisis at magna quis, interdum tempor nulla. Ut ac erat eget
tellus ultricies semper. Ut at dictum ante. Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Nam placerat lacinia eros ac convallis. Sed ultricies lectus et
pharetra aliquet. Vestibulum feugiat pulvinar fermentum. Vivamus imperdiet dapibus
ornare. Donec venenatis, lectus id faucibus tempus, sapien urna molestie augue, at
egestas enim lectus quis nisi.
</p>
</div>
</StylesGaufre>
), ),
}, },
] ]

View File

@@ -48,6 +48,11 @@
padding-right: 0.5rem !important; padding-right: 0.5rem !important;
} }
[data-fr-scheme="dark"] .lasuite-gaufre-btn--vanilla {
color: #8585f6 !important;
box-shadow: inset 0 0 0 1px #353535 !important;
}
.lasuite-gaufre-btn--vanilla::before { .lasuite-gaufre-btn--vanilla::before {
content: "" !important; content: "" !important;
flex: 0 0 auto !important; flex: 0 0 auto !important;
@@ -67,6 +72,15 @@
background-color: #f6f6f6 !important; background-color: #f6f6f6 !important;
} }
[data-fr-scheme="dark"] .lasuite-gaufre-btn--vanilla:hover,
[data-fr-scheme="dark"] .lasuite-gaufre-btn--vanilla:focus-visible {
background-color: #343434 !important;
}
.lasuite-gaufre-btn--vanilla:active { .lasuite-gaufre-btn--vanilla:active {
background-color: #ededed !important; background-color: #ededed !important;
} }
[data-fr-scheme="dark"] .lasuite-gaufre-btn--vanilla:active {
background-color: #474747 !important;
}

View File

@@ -56,6 +56,10 @@ const { services } = Astro.props
overflow: hidden !important; overflow: hidden !important;
} }
[data-fr-scheme="dark"] .lagaufre {
background-color: #8585f6 !important;
}
.lagaufre-sr-only { .lagaufre-sr-only {
position: absolute !important; position: absolute !important;
width: 1px !important; width: 1px !important;
@@ -85,6 +89,10 @@ const { services } = Astro.props
overflow: auto !important; overflow: auto !important;
} }
[data-fr-scheme="dark"] .lagaufre-list {
background-color: #1e1e1e !important;
}
.lagaufre-service { .lagaufre-service {
position: relative !important; position: relative !important;
display: flex !important; display: flex !important;
@@ -123,6 +131,13 @@ const { services } = Astro.props
border-bottom: 1px solid #8989cd !important; border-bottom: 1px solid #8989cd !important;
} }
[data-fr-scheme="dark"] .lagaufre-service:hover,
[data-fr-scheme="dark"] .lagaufre-service:focus-within {
background-color: #2d2d2d !important;
border-top: 1px solid #8989cd !important;
border-bottom: 1px solid #8989cd !important;
}
.lagaufre-service__icon { .lagaufre-service__icon {
display: flex !important; display: flex !important;
align-items: center !important; align-items: center !important;
@@ -130,12 +145,27 @@ const { services } = Astro.props
height: 40px !important; height: 40px !important;
} }
.lagaufre-service__icon img {
max-width: 100% !important;
height: auto !important;
}
[data-fr-scheme="dark"] .lagaufre-service__icon {
border-radius: 3px !important;
padding: 6px !important;
background-color: #fff !important;
}
.lagaufre-service__name { .lagaufre-service__name {
margin-left: 1.5rem !important; margin-left: 1.5rem !important;
text-decoration: none !important; text-decoration: none !important;
color: #161616 !important; color: #161616 !important;
} }
[data-fr-scheme="dark"] .lagaufre-service__name {
color: #cecece !important;
}
.lagaufre-service__name:focus { .lagaufre-service__name:focus {
outline: 0 !important; outline: 0 !important;
} }