diff --git a/wp-content/themes/headless/app/assets/css/_main.css b/wp-content/themes/headless/app/assets/css/_main.css index be7683e..3cd03f0 100644 --- a/wp-content/themes/headless/app/assets/css/_main.css +++ b/wp-content/themes/headless/app/assets/css/_main.css @@ -2,5 +2,6 @@ @import "@nuxt/ui"; @import "./containers.css"; +@import "./links.css"; @import "./theme.css"; @import "./typography.css"; diff --git a/wp-content/themes/headless/app/assets/css/links.css b/wp-content/themes/headless/app/assets/css/links.css new file mode 100644 index 0000000..6ad3240 --- /dev/null +++ b/wp-content/themes/headless/app/assets/css/links.css @@ -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; +} diff --git a/wp-content/themes/headless/app/components/site/SiteFooter.vue b/wp-content/themes/headless/app/components/site/SiteFooter.vue new file mode 100644 index 0000000..a7554da --- /dev/null +++ b/wp-content/themes/headless/app/components/site/SiteFooter.vue @@ -0,0 +1,15 @@ + + + diff --git a/wp-content/themes/headless/app/components/site/SiteFooterBottom.vue b/wp-content/themes/headless/app/components/site/SiteFooterBottom.vue new file mode 100644 index 0000000..3b8cb10 --- /dev/null +++ b/wp-content/themes/headless/app/components/site/SiteFooterBottom.vue @@ -0,0 +1,10 @@ + + + diff --git a/wp-content/themes/headless/app/components/site/SiteFooterCopyright.vue b/wp-content/themes/headless/app/components/site/SiteFooterCopyright.vue new file mode 100644 index 0000000..b67ff11 --- /dev/null +++ b/wp-content/themes/headless/app/components/site/SiteFooterCopyright.vue @@ -0,0 +1,10 @@ + + + diff --git a/wp-content/themes/headless/app/components/site/SiteFooterCredits.vue b/wp-content/themes/headless/app/components/site/SiteFooterCredits.vue new file mode 100644 index 0000000..f2983a2 --- /dev/null +++ b/wp-content/themes/headless/app/components/site/SiteFooterCredits.vue @@ -0,0 +1,12 @@ + diff --git a/wp-content/themes/headless/app/layouts/default.vue b/wp-content/themes/headless/app/layouts/default.vue index e040540..46b40bd 100644 --- a/wp-content/themes/headless/app/layouts/default.vue +++ b/wp-content/themes/headless/app/layouts/default.vue @@ -1,6 +1,9 @@ diff --git a/wp-content/themes/headless/app/pages/[...uri].vue b/wp-content/themes/headless/app/pages/[...uri].vue index 618477f..e9d8090 100644 --- a/wp-content/themes/headless/app/pages/[...uri].vue +++ b/wp-content/themes/headless/app/pages/[...uri].vue @@ -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)) { diff --git a/wp-content/themes/headless/package.json b/wp-content/themes/headless/package.json index 8776fdd..fc7d8ea 100644 --- a/wp-content/themes/headless/package.json +++ b/wp-content/themes/headless/package.json @@ -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", diff --git a/wp-content/themes/headless/pnpm-lock.yaml b/wp-content/themes/headless/pnpm-lock.yaml index 2331012..189a18e 100644 --- a/wp-content/themes/headless/pnpm-lock.yaml +++ b/wp-content/themes/headless/pnpm-lock.yaml @@ -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