feat: Initial SiteFooter

This commit is contained in:
2026-03-26 11:07:07 -04:00
parent fa557c0f9e
commit 9181f91e7c
10 changed files with 90 additions and 13 deletions

View File

@@ -2,5 +2,6 @@
@import "@nuxt/ui";
@import "./containers.css";
@import "./links.css";
@import "./theme.css";
@import "./typography.css";

View File

@@ -0,0 +1,13 @@
/* Variant to target all children links without specific link or button classes */
@custom-variant links (& a:not([class*='link-']):not([class*='button-']));
/* Link styles */
@utility link-base {
@apply cursor-pointer transition;
}
@utility link-underline {
@apply link-base underline hover:decoration-primary;
}
@utility link-opacity {
@apply link-base hover:opacity-80;
}

View File

@@ -0,0 +1,15 @@
<script setup lang="ts">
const { data: siteOptions } = await useSiteOptions();
</script>
<template>
<footer class="links:link-prose bg-muted">
<div class="container py-3">
<AcfSocial
:social="siteOptions?.social"
class="flex items-center gap-1.5 links:link-opacity"
></AcfSocial>
</div>
<SiteFooterBottom />
</footer>
</template>

View File

@@ -0,0 +1,10 @@
<script setup lang="ts"></script>
<template>
<div class="bg-inverted py-1.5 text-inverted">
<div class="container flex flex-col items-center gap-3 sm:flex-row">
<SiteFooterCopyright class="sm:mr-auto" />
<SiteFooterCredits />
</div>
</div>
</template>

View File

@@ -0,0 +1,10 @@
<script setup lang="ts">
const { data: generalSettings } = await useGeneralSettings();
</script>
<template>
<div class="">
© {{ new Date().getFullYear() }}
<span v-if="generalSettings?.title">{{ generalSettings.title }}</span>
</div>
</template>

View File

@@ -0,0 +1,12 @@
<template>
<div class="flex items-center gap-1">
Fait avec <UIcon name="i-lucide-heart" /> par
<ULink
href="https://websimple.com"
target="_blank"
external
title="Site web développé par Websimple"
>Websimple</ULink
>
</div>
</template>

View File

@@ -1,6 +1,9 @@
<template>
<div id="layout-default">
<SiteHeader />
<UMain>
<slot />
</UMain>
<SiteFooter />
</div>
</template>

View File

@@ -9,7 +9,6 @@ const { data: node, error } = await useAsyncGraphQLQuery(
},
);
// Handle errors and missing nodes
if (!node.value) {
console.error("NodeByUri query error:", error.value);
@@ -20,7 +19,6 @@ if (!node.value) {
});
}
// Dynamically resolve component based on node type
const componentName = `Node${node.value.__typename}`;
if (!useNuxtApp().vueApp.component(componentName)) {

View File

@@ -24,7 +24,7 @@
"nuxt-svgo": "^4.2.6",
"tailwindcss": "^4.2.2",
"vue": "^3.5.31",
"vue-router": "^5.0.4"
"vue-router": "^4.6.4"
},
"devDependencies": {
"@types/node": "^25.5.0",

View File

@@ -23,7 +23,7 @@ importers:
version: 0.7.5(graphql@16.13.1)(magicast@0.5.2)(zod@4.3.6)
'@nuxt/ui':
specifier: ^4.6.0
version: 4.6.0(@tiptap/extensions@3.20.5(@tiptap/core@3.14.0(@tiptap/pm@3.14.0))(@tiptap/pm@3.14.0))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.7)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(db0@0.3.4)(embla-carousel@8.6.0)(ioredis@5.10.1)(magicast@0.5.2)(tailwindcss@4.2.2)(typescript@6.0.2)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))(vue-router@5.0.4(@vue/compiler-sfc@3.5.31)(vue@3.5.31(typescript@6.0.2)))(vue@3.5.31(typescript@6.0.2))(yjs@13.6.30)(zod@4.3.6)
version: 4.6.0(@tiptap/extensions@3.20.5(@tiptap/core@3.14.0(@tiptap/pm@3.14.0))(@tiptap/pm@3.14.0))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.7)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(db0@0.3.4)(embla-carousel@8.6.0)(ioredis@5.10.1)(magicast@0.5.2)(tailwindcss@4.2.2)(typescript@6.0.2)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))(vue-router@4.6.4(vue@3.5.31(typescript@6.0.2)))(vue@3.5.31(typescript@6.0.2))(yjs@13.6.30)(zod@4.3.6)
nuxt:
specifier: ^4.4.2
version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@parcel/watcher@2.5.6)(@types/node@25.5.0)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(oxlint@1.57.0)(rollup-plugin-visualizer@7.0.1(rollup@4.60.0))(rollup@4.60.0)(terser@5.46.1)(typescript@6.0.2)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3)
@@ -37,8 +37,8 @@ importers:
specifier: ^3.5.31
version: 3.5.31(typescript@6.0.2)
vue-router:
specifier: ^5.0.4
version: 5.0.4(@vue/compiler-sfc@3.5.31)(vue@3.5.31(typescript@6.0.2))
specifier: ^4.6.4
version: 4.6.4(vue@3.5.31(typescript@6.0.2))
devDependencies:
'@types/node':
specifier: ^25.5.0
@@ -2242,6 +2242,9 @@ packages:
'@vue/compiler-ssr@3.5.31':
resolution: {integrity: sha512-h0xIMxrt/LHOvJKMri+vdYT92BrK3HFLtDqq9Pr/lVVfE4IyKZKvWf0vJFW10Yr6nX02OR4MkJwI0c1HDa1hog==}
'@vue/devtools-api@6.6.4':
resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
'@vue/devtools-api@8.1.1':
resolution: {integrity: sha512-bsDMJ07b3GN1puVwJb/fyFnj/U2imyswK5UQVLZwVl7O05jDrt6BHxeG5XffmOOdasOj/bOmIjxJvGPxU7pcqw==}
@@ -2516,8 +2519,8 @@ packages:
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
baseline-browser-mapping@2.10.10:
resolution: {integrity: sha512-sUoJ3IMxx4AyRqO4MLeHlnGDkyXRoUG0/AI9fjK+vS72ekpV0yWVY7O0BVjmBcRtkNcsAO2QDZ4tdKKGoI6YaQ==}
baseline-browser-mapping@2.10.11:
resolution: {integrity: sha512-DAKrHphkJyiGuau/cFieRYhcTFeK/lBuD++C7cZ6KZHbMhBrisoi+EvhQ5RZrIfV5qwsW8kgQ07JIC+MDJRAhg==}
engines: {node: '>=6.0.0'}
hasBin: true
@@ -4890,6 +4893,11 @@ packages:
vue-devtools-stub@0.1.0:
resolution: {integrity: sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ==}
vue-router@4.6.4:
resolution: {integrity: sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==}
peerDependencies:
vue: ^3.5.0
vue-router@5.0.4:
resolution: {integrity: sha512-lCqDLCI2+fKVRl2OzXuzdSWmxXFLQRxQbmHugnRpTMyYiT+hNaycV0faqG5FBHDXoYrZ6MQcX87BvbY8mQ20Bg==}
peerDependencies:
@@ -6101,7 +6109,7 @@ snapshots:
rc9: 3.0.0
std-env: 3.10.0
'@nuxt/ui@4.6.0(@tiptap/extensions@3.20.5(@tiptap/core@3.14.0(@tiptap/pm@3.14.0))(@tiptap/pm@3.14.0))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.7)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(db0@0.3.4)(embla-carousel@8.6.0)(ioredis@5.10.1)(magicast@0.5.2)(tailwindcss@4.2.2)(typescript@6.0.2)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))(vue-router@5.0.4(@vue/compiler-sfc@3.5.31)(vue@3.5.31(typescript@6.0.2)))(vue@3.5.31(typescript@6.0.2))(yjs@13.6.30)(zod@4.3.6)':
'@nuxt/ui@4.6.0(@tiptap/extensions@3.20.5(@tiptap/core@3.14.0(@tiptap/pm@3.14.0))(@tiptap/pm@3.14.0))(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.7)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(db0@0.3.4)(embla-carousel@8.6.0)(ioredis@5.10.1)(magicast@0.5.2)(tailwindcss@4.2.2)(typescript@6.0.2)(vite@7.3.1(@types/node@25.5.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))(vue-router@4.6.4(vue@3.5.31(typescript@6.0.2)))(vue@3.5.31(typescript@6.0.2))(yjs@13.6.30)(zod@4.3.6)':
dependencies:
'@floating-ui/dom': 1.7.6
'@iconify/vue': 5.0.0(vue@3.5.31(typescript@6.0.2))
@@ -6170,7 +6178,7 @@ snapshots:
vaul-vue: 0.4.1(reka-ui@2.9.2(vue@3.5.31(typescript@6.0.2)))(vue@3.5.31(typescript@6.0.2))
vue-component-type-helpers: 3.2.6
optionalDependencies:
vue-router: 5.0.4(@vue/compiler-sfc@3.5.31)(vue@3.5.31(typescript@6.0.2))
vue-router: 4.6.4(vue@3.5.31(typescript@6.0.2))
zod: 4.3.6
transitivePeerDependencies:
- '@azure/app-configuration'
@@ -7297,6 +7305,8 @@ snapshots:
'@vue/compiler-dom': 3.5.31
'@vue/shared': 3.5.31
'@vue/devtools-api@6.6.4': {}
'@vue/devtools-api@8.1.1':
dependencies:
'@vue/devtools-kit': 8.1.1
@@ -7553,7 +7563,7 @@ snapshots:
base64-js@1.5.1: {}
baseline-browser-mapping@2.10.10: {}
baseline-browser-mapping@2.10.11: {}
bindings@1.5.0:
dependencies:
@@ -7579,7 +7589,7 @@ snapshots:
browserslist@4.28.1:
dependencies:
baseline-browser-mapping: 2.10.10
baseline-browser-mapping: 2.10.11
caniuse-lite: 1.0.30001781
electron-to-chromium: 1.5.325
node-releases: 2.0.36
@@ -10246,6 +10256,11 @@ snapshots:
vue-devtools-stub@0.1.0: {}
vue-router@4.6.4(vue@3.5.31(typescript@6.0.2)):
dependencies:
'@vue/devtools-api': 6.6.4
vue: 3.5.31(typescript@6.0.2)
vue-router@5.0.4(@vue/compiler-sfc@3.5.31)(vue@3.5.31(typescript@6.0.2)):
dependencies:
'@babel/generator': 7.29.1