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,8 +140,10 @@ const routes = [
path: "/gaufre-custom", path: "/gaufre-custom",
label: "Gaufre (header custom)", label: "Gaufre (header custom)",
component: ( component: (
<DarkTheme>
<StylesGaufre> <StylesGaufre>
<div <div
data-fr-scheme="dark"
style={{ style={{
margin: "2rem auto", margin: "2rem auto",
width: 800, width: 800,
@@ -158,25 +161,26 @@ const routes = [
<Gaufre /> <Gaufre />
</div> </div>
<p> <p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ac diam a libero posuere Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ac diam a libero
ornare facilisis in mi. Nullam eu vulputate augue, in auctor nibh. Praesent ac tempus posuere ornare facilisis in mi. Nullam eu vulputate augue, in auctor nibh. Praesent ac
dui. Integer vel enim non purus facilisis mattis et vel dolor. Aliquam lacinia elit et tempus dui. Integer vel enim non purus facilisis mattis et vel dolor. Aliquam lacinia
massa faucibus, at dictum risus ornare. Vivamus ultricies magna et gravida consequat. elit et massa faucibus, at dictum risus ornare. Vivamus ultricies magna et gravida
Donec ac odio finibus, lobortis purus vel, consequat purus. Maecenas convallis vel enim consequat. Donec ac odio finibus, lobortis purus vel, consequat purus. Maecenas
eu malesuada. Vestibulum elementum maximus massa, a porta erat congue quis. Nunc neque convallis vel enim eu malesuada. Vestibulum elementum maximus massa, a porta erat
quam, euismod et malesuada in, bibendum ac ex. Phasellus felis elit, egestas a convallis congue quis. Nunc neque quam, euismod et malesuada in, bibendum ac ex. Phasellus felis
nec, malesuada a est. Donec ac urna venenatis lorem aliquet rhoncus in accumsan ipsum. elit, egestas a convallis nec, malesuada a est. Donec ac urna venenatis lorem aliquet
rhoncus in accumsan ipsum.
</p> </p>
<p> <p>
Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi sed augue elementum, Interdum et malesuada fames ac ante ipsum primis in faucibus. Morbi sed augue
tempus diam in, euismod purus. Fusce interdum, leo nec blandit eleifend, sapien ligula elementum, tempus diam in, euismod purus. Fusce interdum, leo nec blandit eleifend,
egestas quam, quis aliquam ex turpis ut augue. Nullam a neque consectetur, feugiat eros sapien ligula egestas quam, quis aliquam ex turpis ut augue. Nullam a neque
a, lacinia tortor. Proin imperdiet vehicula justo, eget bibendum tortor gravida a. consectetur, feugiat eros a, lacinia tortor. Proin imperdiet vehicula justo, eget
Pellentesque sit amet fermentum urna. Ut rutrum eros a ligula dapibus pharetra. In bibendum tortor gravida a. Pellentesque sit amet fermentum urna. Ut rutrum eros a
porttitor arcu in euismod dictum. Aenean vestibulum mi et dignissim rutrum. Phasellus ligula dapibus pharetra. In porttitor arcu in euismod dictum. Aenean vestibulum mi et
ultrices ex justo, eu tincidunt metus efficitur non. Curabitur ac lorem ornare, aliquet dignissim rutrum. Phasellus ultrices ex justo, eu tincidunt metus efficitur non.
neque et, tristique elit. Donec quis turpis sodales, interdum massa fermentum, dictum Curabitur ac lorem ornare, aliquet neque et, tristique elit. Donec quis turpis
magna. sodales, interdum massa fermentum, dictum magna.
</p> </p>
<p> <p>
Mauris elit risus, facilisis at magna quis, interdum tempor nulla. Ut ac erat eget Mauris elit risus, facilisis at magna quis, interdum tempor nulla. Ut ac erat eget
@@ -188,6 +192,7 @@ const routes = [
</p> </p>
</div> </div>
</StylesGaufre> </StylesGaufre>
</DarkTheme>
), ),
}, },
] ]

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;
} }