Compare commits
2
Commits
98fab43fe5
...
069d206e94
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
069d206e94 | ||
|
|
5ec6474b37 |
@@ -47,6 +47,7 @@ Les fichiers YAML sont dans `site/pages/`, organisés en sous-dossiers par secti
|
|||||||
- Défaut : **été** (premier visiteur)
|
- Défaut : **été** (premier visiteur)
|
||||||
- Persisté en `localStorage('palette')` pour les visites suivantes
|
- Persisté en `localStorage('palette')` pour les visites suivantes
|
||||||
- CSS : variables `--color-primary`, `--color-accent`, etc. + classe `.palette-light`/`.palette-dark`
|
- CSS : variables `--color-primary`, `--color-accent`, etc. + classe `.palette-light`/`.palette-dark`
|
||||||
|
- Mécanique DOM (injection des variables, classes `mood-*`/`palette-*`, `color-scheme`, persistance) déléguée à `useMood` du layer `../yvv-nuxt-base` (`extends` dans `nuxt.config.ts`) — les couleurs restent définies ici. ⚠️ le layer est hors du repo : build Docker/CI cassera tant que la stratégie de distribution n'est pas tranchée (voir README du layer)
|
||||||
- Overrides light mode dans `main.css` (`.palette-light .text-white` → couleur adaptive)
|
- Overrides light mode dans `main.css` (`.palette-light .text-white` → couleur adaptive)
|
||||||
- Admin : tous les `color: white` dans les composants admin sont remplacés par `hsl(var(--color-text))` sauf les boutons sur fond `hsl(var(--color-primary))` (`AdminSaveButton`, `.login-btn`)
|
- Admin : tous les `color: white` dans les composants admin sont remplacés par `hsl(var(--color-text))` sauf les boutons sur fond `hsl(var(--color-primary))` (`AdminSaveButton`, `.login-btn`)
|
||||||
|
|
||||||
|
|||||||
+31
-23
@@ -75,36 +75,44 @@ const palettes: Record<PaletteName, PaletteColors> = {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
export const usePaletteStore = defineStore('palette', () => {
|
// Chaque palette devient un "mood" du layer @yvv/nuxt-base : les couleurs
|
||||||
const currentPalette = ref<PaletteName>(
|
// (identité du projet) sont injectées en variables CSS --color-*, et les classes
|
||||||
(import.meta.client && localStorage.getItem('palette') as PaletteName) || 'ete',
|
// .palette-light / .palette-dark + color-scheme sont gérées par le mécanisme partagé.
|
||||||
|
const paletteMoods = (Object.entries(palettes) as [PaletteName, PaletteColors][]).map(
|
||||||
|
([id, c]) => ({
|
||||||
|
id,
|
||||||
|
isDark: !c.isLight,
|
||||||
|
vars: {
|
||||||
|
'--color-primary': c.primary,
|
||||||
|
'--color-accent': c.accent,
|
||||||
|
'--color-surface': c.surface,
|
||||||
|
'--color-bg': c.bg,
|
||||||
|
'--color-surface-light': c.surfaceLight,
|
||||||
|
'--color-text': c.text,
|
||||||
|
'--color-text-muted': c.textMuted,
|
||||||
|
},
|
||||||
|
}),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
export const usePaletteStore = defineStore('palette', () => {
|
||||||
|
// Application DOM + persistance + light/dark déléguées au layer partagé.
|
||||||
|
// storageKey 'palette' conservé pour ne pas perdre les préférences existantes.
|
||||||
|
const { currentMood, setMood, initMood } = useMood(paletteMoods, {
|
||||||
|
storageKey: 'palette',
|
||||||
|
defaultId: 'ete',
|
||||||
|
syncColorMode: false, // librodrome n'utilise pas @nuxtjs/color-mode
|
||||||
|
lightDarkClasses: true,
|
||||||
|
})
|
||||||
|
|
||||||
|
const currentPalette = computed<PaletteName>(() => (currentMood.value as PaletteName) || 'ete')
|
||||||
const colors = computed(() => palettes[currentPalette.value])
|
const colors = computed(() => palettes[currentPalette.value])
|
||||||
const isLight = computed(() => colors.value.isLight)
|
const isLight = computed(() => colors.value.isLight)
|
||||||
|
|
||||||
function applyToDOM() {
|
// Init depuis localStorage (SSR-safe : no-op côté serveur).
|
||||||
if (!import.meta.client) return
|
const applyToDOM = () => initMood()
|
||||||
const c = colors.value
|
|
||||||
const root = document.documentElement
|
|
||||||
const s = root.style
|
|
||||||
s.setProperty('--color-primary', c.primary)
|
|
||||||
s.setProperty('--color-accent', c.accent)
|
|
||||||
s.setProperty('--color-surface', c.surface)
|
|
||||||
s.setProperty('--color-bg', c.bg)
|
|
||||||
s.setProperty('--color-surface-light', c.surfaceLight)
|
|
||||||
s.setProperty('--color-text', c.text)
|
|
||||||
s.setProperty('--color-text-muted', c.textMuted)
|
|
||||||
// Toggle light/dark class for CSS overrides
|
|
||||||
root.classList.toggle('palette-light', c.isLight)
|
|
||||||
root.classList.toggle('palette-dark', !c.isLight)
|
|
||||||
s.setProperty('color-scheme', c.isLight ? 'light' : 'dark')
|
|
||||||
}
|
|
||||||
|
|
||||||
function setPalette(name: PaletteName) {
|
function setPalette(name: PaletteName) {
|
||||||
currentPalette.value = name
|
setMood(name)
|
||||||
if (import.meta.client) localStorage.setItem('palette', name)
|
|
||||||
applyToDOM()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
// https://nuxt.com/docs/api/configuration/nuxt-config
|
// https://nuxt.com/docs/api/configuration/nuxt-config
|
||||||
export default defineNuxtConfig({
|
export default defineNuxtConfig({
|
||||||
|
extends: ['@yvv/nuxt-base'],
|
||||||
compatibilityDate: '2025-07-15',
|
compatibilityDate: '2025-07-15',
|
||||||
|
|
||||||
devtools: { enabled: true },
|
devtools: { enabled: true },
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
"@pinia/nuxt": "^0.11.3",
|
"@pinia/nuxt": "^0.11.3",
|
||||||
"@unocss/nuxt": "^66.6.0",
|
"@unocss/nuxt": "^66.6.0",
|
||||||
"@vueuse/nuxt": "^14.2.1",
|
"@vueuse/nuxt": "^14.2.1",
|
||||||
|
"@yvv/nuxt-base": "git+ssh://gitea@git.open.us.org/yvv/yvv-nuxt-base.git#v0.1.0",
|
||||||
"better-sqlite3": "^12.6.2",
|
"better-sqlite3": "^12.6.2",
|
||||||
"nuxt": "^4.3.1",
|
"nuxt": "^4.3.1",
|
||||||
"nuxt-umami": "^3.2.1",
|
"nuxt-umami": "^3.2.1",
|
||||||
|
|||||||
Generated
+9
@@ -26,6 +26,9 @@ importers:
|
|||||||
'@vueuse/nuxt':
|
'@vueuse/nuxt':
|
||||||
specifier: ^14.2.1
|
specifier: ^14.2.1
|
||||||
version: 14.2.1(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.3)(magicast@0.5.2)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))
|
version: 14.2.1(magicast@0.5.2)(nuxt@4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.3)(magicast@0.5.2)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2))(vue@3.5.28(typescript@5.9.3))
|
||||||
|
'@yvv/nuxt-base':
|
||||||
|
specifier: git+ssh://gitea@git.open.us.org/yvv/yvv-nuxt-base.git#v0.1.0
|
||||||
|
version: git+ssh://gitea@git.open.us.org/yvv/yvv-nuxt-base.git#b1c6a2f28052564d505dd05b363169cb97fb81b3
|
||||||
better-sqlite3:
|
better-sqlite3:
|
||||||
specifier: ^12.6.2
|
specifier: ^12.6.2
|
||||||
version: 12.6.2
|
version: 12.6.2
|
||||||
@@ -1916,6 +1919,10 @@ packages:
|
|||||||
'@xtuc/long@4.2.2':
|
'@xtuc/long@4.2.2':
|
||||||
resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
|
resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
|
||||||
|
|
||||||
|
'@yvv/nuxt-base@git+ssh://gitea@git.open.us.org/yvv/yvv-nuxt-base.git#b1c6a2f28052564d505dd05b363169cb97fb81b3':
|
||||||
|
resolution: {commit: b1c6a2f28052564d505dd05b363169cb97fb81b3, repo: ssh://gitea@git.open.us.org/yvv/yvv-nuxt-base.git, type: git}
|
||||||
|
version: 0.1.0
|
||||||
|
|
||||||
abbrev@3.0.1:
|
abbrev@3.0.1:
|
||||||
resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==}
|
resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==}
|
||||||
engines: {node: ^18.17.0 || >=20.5.0}
|
engines: {node: ^18.17.0 || >=20.5.0}
|
||||||
@@ -7004,6 +7011,8 @@ snapshots:
|
|||||||
|
|
||||||
'@xtuc/long@4.2.2': {}
|
'@xtuc/long@4.2.2': {}
|
||||||
|
|
||||||
|
'@yvv/nuxt-base@git+ssh://gitea@git.open.us.org/yvv/yvv-nuxt-base.git#b1c6a2f28052564d505dd05b363169cb97fb81b3': {}
|
||||||
|
|
||||||
abbrev@3.0.1: {}
|
abbrev@3.0.1: {}
|
||||||
|
|
||||||
abort-controller@3.0.0:
|
abort-controller@3.0.0:
|
||||||
|
|||||||
Reference in New Issue
Block a user