Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8d350bb092 | |||
| 4338028c60 | |||
| ab563a7b37 | |||
| 2cfc1a0047 | |||
| 98e8d971e8 | |||
| 87be06ecea | |||
| 28f6e1ae7c | |||
| 27380290e1 | |||
| 7e44554767 | |||
| 9c3dceef84 | |||
| ba8d8e00a8 | |||
| 8f037b5950 | |||
| 291fa6eaa4 | |||
| 4079e4ecfb | |||
| eea020b136 | |||
| 5161bff624 | |||
| 3199835e83 | |||
| 6dd13ead91 |
@@ -3,4 +3,3 @@
|
|||||||
Headless WordPress project boilerplate using Nuxt.
|
Headless WordPress project boilerplate using Nuxt.
|
||||||
|
|
||||||
[✨ Release notes](/wp-content/themes/moonshine/CHANGELOG.md)
|
[✨ Release notes](/wp-content/themes/moonshine/CHANGELOG.md)
|
||||||
|
|
||||||
1
wp-content/themes/moonshine/.gitignore
vendored
1
wp-content/themes/moonshine/.gitignore
vendored
@@ -25,3 +25,4 @@ logs
|
|||||||
|
|
||||||
# Wrangler files
|
# Wrangler files
|
||||||
.wrangler
|
.wrangler
|
||||||
|
server/types/cloudflare.d.ts
|
||||||
|
|||||||
@@ -1,5 +1,37 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## v0.1.12
|
||||||
|
|
||||||
|
[compare changes](https://gitea.websimple.com/wp-sites/wp-headless/compare/v0.1.11...v0.1.12)
|
||||||
|
|
||||||
|
### 🚀 Enhancements
|
||||||
|
|
||||||
|
- ConnexionButton (87be06e)
|
||||||
|
- ShowLabel (98e8d97)
|
||||||
|
- ParseAcfLink (2cfc1a0)
|
||||||
|
- ParseAcfMedia (ab563a7)
|
||||||
|
- Event context type for Cloudflare environment (4338028)
|
||||||
|
|
||||||
|
### 🩹 Fixes
|
||||||
|
|
||||||
|
- UApp in app.vue (28f6e1a)
|
||||||
|
|
||||||
|
## v0.1.11
|
||||||
|
|
||||||
|
[compare changes](https://gitea.websimple.com/wp-sites/wp-headless/compare/v0.1.10...v0.1.11)
|
||||||
|
|
||||||
|
### 🚀 Enhancements
|
||||||
|
|
||||||
|
- MapSocialIcon (6dd13ea)
|
||||||
|
- AcfSocial / parseAcfSocial (3199835)
|
||||||
|
|
||||||
|
### 🩹 Fixes
|
||||||
|
|
||||||
|
- Remove unneeded wrangler main / assets (eea020b)
|
||||||
|
- Cloudflare image provider only in production (291fa6e)
|
||||||
|
- Wrangler project name (8f037b5)
|
||||||
|
- ENABLE_CLOUDFLARE_IMAGE (9c3dcee)
|
||||||
|
|
||||||
## v0.1.10
|
## v0.1.10
|
||||||
|
|
||||||
[compare changes](https://gitea.websimple.com/templates/wp-headless/compare/v0.1.9...v0.1.10)
|
[compare changes](https://gitea.websimple.com/templates/wp-headless/compare/v0.1.9...v0.1.10)
|
||||||
|
|||||||
@@ -6,7 +6,14 @@ Thème WordPress en headless basé sur Nuxt.
|
|||||||
|
|
||||||
| Nom | Description | Exemple | Requise |
|
| Nom | Description | Exemple | Requise |
|
||||||
|-----|-------------|---------|---------|
|
|-----|-------------|---------|---------|
|
||||||
| `NUXT_SESSION_PASSWORD` | Clé secrète pour l'authentification | `date \| md5sum` | ✅ |
|
|
||||||
| `NUXT_WP_URL` | URL du backend WordPress | https://wp.exemple.com | ✅ |
|
|
||||||
| `NUXT_SITE_URL` | URL du frontend Nuxt | https://www.example.com | ➖ |
|
|
||||||
| `NUXT_SITE_ENV` | Environnement | staging \| production | ➖ |
|
| `NUXT_SITE_ENV` | Environnement | staging \| production | ➖ |
|
||||||
|
| `NUXT_SITE_URL` | URL du frontend Nuxt | https://www.example.com | ➖ |
|
||||||
|
| `NUXT_WP_URL` | URL du backend WordPress | https://wp.exemple.com | ✅ |
|
||||||
|
|
||||||
|
## Secrets
|
||||||
|
|
||||||
|
Configurer les secrets nécessaires au projet:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pnpm wrangler secret put NUXT_SESSION_PASSWORD
|
||||||
|
```
|
||||||
|
|||||||
@@ -0,0 +1,86 @@
|
|||||||
|
{
|
||||||
|
"key": "group_abstract_social",
|
||||||
|
"title": "Abstract - Social",
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"key": "field_6855a1d643408",
|
||||||
|
"label": "Médias sociaux",
|
||||||
|
"name": "profiles",
|
||||||
|
"aria-label": "",
|
||||||
|
"type": "repeater",
|
||||||
|
"instructions": "",
|
||||||
|
"required": 0,
|
||||||
|
"conditional_logic": 0,
|
||||||
|
"wrapper": {
|
||||||
|
"width": "",
|
||||||
|
"class": "",
|
||||||
|
"id": ""
|
||||||
|
},
|
||||||
|
"acfe_repeater_stylised_button": 0,
|
||||||
|
"layout": "table",
|
||||||
|
"pagination": 0,
|
||||||
|
"min": 0,
|
||||||
|
"max": 0,
|
||||||
|
"collapsed": "",
|
||||||
|
"button_label": "Ajouter un élément",
|
||||||
|
"show_in_graphql": 1,
|
||||||
|
"graphql_description": "",
|
||||||
|
"graphql_field_name": "profiles",
|
||||||
|
"graphql_non_null": 1,
|
||||||
|
"rows_per_page": 20,
|
||||||
|
"sub_fields": [
|
||||||
|
{
|
||||||
|
"key": "field_6855a7e143409",
|
||||||
|
"label": "URL",
|
||||||
|
"name": "url",
|
||||||
|
"aria-label": "",
|
||||||
|
"type": "url",
|
||||||
|
"instructions": "",
|
||||||
|
"required": 1,
|
||||||
|
"conditional_logic": 0,
|
||||||
|
"wrapper": {
|
||||||
|
"width": "",
|
||||||
|
"class": "",
|
||||||
|
"id": ""
|
||||||
|
},
|
||||||
|
"default_value": "",
|
||||||
|
"allow_in_bindings": 0,
|
||||||
|
"placeholder": "",
|
||||||
|
"show_in_graphql": 1,
|
||||||
|
"graphql_description": "",
|
||||||
|
"graphql_field_name": "url",
|
||||||
|
"graphql_non_null": 1,
|
||||||
|
"parent_repeater": "field_6855a1d643408"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"location": [
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"param": "abstract"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"menu_order": 0,
|
||||||
|
"position": "normal",
|
||||||
|
"style": "seamless",
|
||||||
|
"label_placement": "top",
|
||||||
|
"instruction_placement": "label",
|
||||||
|
"hide_on_screen": "",
|
||||||
|
"active": true,
|
||||||
|
"description": "",
|
||||||
|
"show_in_rest": 0,
|
||||||
|
"display_title": "",
|
||||||
|
"acfe_autosync": [
|
||||||
|
"json"
|
||||||
|
],
|
||||||
|
"acfe_form": 0,
|
||||||
|
"show_in_graphql": 1,
|
||||||
|
"graphql_field_name": "GroupAbstractSocial",
|
||||||
|
"map_graphql_types_from_location_rules": 0,
|
||||||
|
"graphql_types": "",
|
||||||
|
"acfe_meta": "",
|
||||||
|
"acfe_note": "",
|
||||||
|
"modified": 1769788591
|
||||||
|
}
|
||||||
@@ -48,6 +48,34 @@
|
|||||||
"graphql_field_name": "phoneNumber",
|
"graphql_field_name": "phoneNumber",
|
||||||
"graphql_non_null": 1
|
"graphql_non_null": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"key": "field_697cd4c5fc56a",
|
||||||
|
"label": "Médias sociaux",
|
||||||
|
"name": "social",
|
||||||
|
"aria-label": "",
|
||||||
|
"type": "clone",
|
||||||
|
"instructions": "",
|
||||||
|
"required": 1,
|
||||||
|
"conditional_logic": 0,
|
||||||
|
"wrapper": {
|
||||||
|
"width": "",
|
||||||
|
"class": "",
|
||||||
|
"id": ""
|
||||||
|
},
|
||||||
|
"graphql_field_name": "social",
|
||||||
|
"clone": [
|
||||||
|
"group_abstract_social"
|
||||||
|
],
|
||||||
|
"display": "seamless",
|
||||||
|
"layout": "block",
|
||||||
|
"prefix_label": 0,
|
||||||
|
"prefix_name": 0,
|
||||||
|
"acfe_seamless_style": 0,
|
||||||
|
"acfe_clone_modal": 0,
|
||||||
|
"acfe_clone_modal_close": 0,
|
||||||
|
"acfe_clone_modal_button": "",
|
||||||
|
"acfe_clone_modal_size": "large"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"key": "field_697cc921234cc",
|
"key": "field_697cc921234cc",
|
||||||
"label": "Liens globaux",
|
"label": "Liens globaux",
|
||||||
@@ -126,5 +154,5 @@
|
|||||||
"graphql_types": "",
|
"graphql_types": "",
|
||||||
"acfe_meta": "",
|
"acfe_meta": "",
|
||||||
"acfe_note": "",
|
"acfe_note": "",
|
||||||
"modified": 1769785750
|
"modified": 1769788698
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,13 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { fr } from "@nuxt/ui/locale";
|
||||||
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<UApp :locale="fr">
|
||||||
<NuxtRouteAnnouncer />
|
<NuxtRouteAnnouncer />
|
||||||
<NuxtLoadingIndicator />
|
<NuxtLoadingIndicator />
|
||||||
<NuxtLayout>
|
<NuxtLayout>
|
||||||
<NuxtPage />
|
<NuxtPage />
|
||||||
</NuxtLayout>
|
</NuxtLayout>
|
||||||
</div>
|
</UApp>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ defineProps<{ image?: AcfImageFragment }>();
|
|||||||
:width="image.mediaDetails?.width"
|
:width="image.mediaDetails?.width"
|
||||||
:height="image.mediaDetails?.height"
|
:height="image.mediaDetails?.height"
|
||||||
:style="{ objectPosition: image.objectPosition || 'center' }"
|
:style="{ objectPosition: image.objectPosition || 'center' }"
|
||||||
format="avif,webp"
|
|
||||||
placeholder
|
placeholder
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -4,9 +4,10 @@ import type { ButtonProps } from "@nuxt/ui";
|
|||||||
|
|
||||||
type AcfLinkButtonProps = & Omit<ButtonProps, "to" | "target" | "href"> & {
|
type AcfLinkButtonProps = & Omit<ButtonProps, "to" | "target" | "href"> & {
|
||||||
link?: AcfLinkFragment;
|
link?: AcfLinkFragment;
|
||||||
|
showLabel?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
const { link, ...buttonProps } = defineProps<AcfLinkButtonProps>();
|
const { link, showLabel, ...buttonProps } = defineProps<AcfLinkButtonProps>();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -18,6 +19,6 @@ const { link, ...buttonProps } = defineProps<AcfLinkButtonProps>();
|
|||||||
:external="link.target === '_blank'"
|
:external="link.target === '_blank'"
|
||||||
:rel="link.target === '_blank' ? 'noopener noreferrer' : undefined"
|
:rel="link.target === '_blank' ? 'noopener noreferrer' : undefined"
|
||||||
>
|
>
|
||||||
<slot>{{ link.title }}</slot>
|
<slot>{{ showLabel ? link.title : "" }}</slot>
|
||||||
</UButton>
|
</UButton>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -1,9 +1,5 @@
|
|||||||
fragment AcfMedia on GroupAbstractMedia_Fields {
|
fragment AcfMedia on GroupAbstractMedia_Fields {
|
||||||
image {
|
image { node { ... AcfImage } }
|
||||||
node {
|
|
||||||
...AcfImage
|
|
||||||
}
|
|
||||||
}
|
|
||||||
aspectRatio
|
aspectRatio
|
||||||
objectFit
|
objectFit
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
fragment AcfSocial on GroupAbstractSocial_Fields {
|
||||||
|
profiles {
|
||||||
|
url
|
||||||
|
}
|
||||||
|
}
|
||||||
11
wp-content/themes/moonshine/app/components/acf/AcfSocial.vue
Normal file
11
wp-content/themes/moonshine/app/components/acf/AcfSocial.vue
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
defineProps<{ social?: AcfSocialOutput }>();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div v-if="social?.profiles" class="flex gap-1.5">
|
||||||
|
<a v-for="({ url, icon }, key) in social.profiles" :key="key" :href="url" target="_blank" rel="noopener noreferrer" class="flex">
|
||||||
|
<UIcon :name="icon" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
<script setup lang="ts">
|
|
||||||
const { isLoggedIn } = useAuth();
|
|
||||||
const attrs = computed(() => {
|
|
||||||
return isLoggedIn.value
|
|
||||||
? {
|
|
||||||
label: "Déconnexion",
|
|
||||||
icon: "i-lucide-log-out",
|
|
||||||
}
|
|
||||||
: {
|
|
||||||
label: "Connexion",
|
|
||||||
icon: "i-lucide-log-in",
|
|
||||||
};
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<AuthState>
|
|
||||||
<UButton to="/connexion" v-bind="attrs" color="neutral" />
|
|
||||||
</AuthState>
|
|
||||||
</template>
|
|
||||||
@@ -34,7 +34,7 @@ const classes = tvSectionHeroSplit({
|
|||||||
<section :class="classes.base()">
|
<section :class="classes.base()">
|
||||||
<div :class="classes.container()">
|
<div :class="classes.container()">
|
||||||
<UiProse :content="content" :class="classes.content()" />
|
<UiProse :content="content" :class="classes.content()" />
|
||||||
<AcfMedia :media="$props" :class="classes.media()" />
|
<AcfMedia :media="parseAcfMedia(props)" :class="classes.media()" />
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
const { data: siteOptions } = await useSiteOptions();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<UFooter id="site-footer">
|
<footer class="bg-accented links:link-prose">
|
||||||
<template #left>
|
<div class="container py-6">
|
||||||
<SiteFooterCopyright />
|
<AcfSocial :social="parseAcfSocial(siteOptions)" />
|
||||||
</template>
|
</div>
|
||||||
<template #right>
|
<SiteFooterBottom />
|
||||||
<SiteFooterCredits />
|
</footer>
|
||||||
</template>
|
|
||||||
</UFooter>
|
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
const { connexionButton } = useAuthConnexion();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="bg-inverted text-inverted py-1.5">
|
||||||
|
<div class="container flex flex-col sm:flex-row items-center gap-3">
|
||||||
|
<SiteFooterCopyright class="sm:mr-auto" />
|
||||||
|
<UButton v-bind="connexionButton" color="neutral" variant="link" />
|
||||||
|
<SiteFooterCredits />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
@@ -8,8 +8,5 @@
|
|||||||
<SvgSiteLogo class="h-12 w-auto" />
|
<SvgSiteLogo class="h-12 w-auto" />
|
||||||
</NuxtLink>
|
</NuxtLink>
|
||||||
</template>
|
</template>
|
||||||
<template #right>
|
|
||||||
<AuthConnexionButton />
|
|
||||||
</template>
|
|
||||||
</UHeader>
|
</UHeader>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -2,5 +2,6 @@ export function useAuth() {
|
|||||||
const { loggedIn: isLoggedIn, session } = useUserSession();
|
const { loggedIn: isLoggedIn, session } = useUserSession();
|
||||||
const hasRole = (role: string) => session.value?.user?.roles?.includes(role) || false;
|
const hasRole = (role: string) => session.value?.user?.roles?.includes(role) || false;
|
||||||
const isAdmin = computed(() => hasRole("administrator"));
|
const isAdmin = computed(() => hasRole("administrator"));
|
||||||
|
|
||||||
return { isLoggedIn, hasRole, isAdmin };
|
return { isLoggedIn, hasRole, isAdmin };
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import type { FormSubmitEvent } from "@nuxt/ui";
|
|||||||
const isRedirecting = ref(false);
|
const isRedirecting = ref(false);
|
||||||
|
|
||||||
export function useAuthConnexion() {
|
export function useAuthConnexion() {
|
||||||
|
const { isLoggedIn } = useAuth();
|
||||||
const toast = useToast();
|
const toast = useToast();
|
||||||
const { fetch: refreshUserSession } = useUserSession();
|
const { fetch: refreshUserSession } = useUserSession();
|
||||||
const routeRedirect = useRoute().query.redirect as string || undefined;
|
const routeRedirect = useRoute().query.redirect as string || undefined;
|
||||||
@@ -67,5 +68,12 @@ export function useAuthConnexion() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return { isRedirecting, login, logout };
|
// Dynamic connexion link
|
||||||
|
const connexionButton = computed(() => ({
|
||||||
|
label: isLoggedIn.value ? "Déconnexion" : "Connexion",
|
||||||
|
icon: isLoggedIn.value ? "i-lucide-log-out" : "i-lucide-log-in",
|
||||||
|
to: "/connexion",
|
||||||
|
}));
|
||||||
|
|
||||||
|
return { isRedirecting, login, logout, connexionButton };
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
fragment SiteOptions on GroupSiteOptions {
|
fragment SiteOptions on GroupSiteOptions {
|
||||||
email
|
email
|
||||||
phoneNumber { ... AcfPhone }
|
phoneNumber { ... AcfPhone }
|
||||||
|
...AcfSocial
|
||||||
links {
|
links {
|
||||||
contact { ... AcfLink}
|
contact { ... AcfLink}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,9 @@
|
|||||||
<script setup lang="ts">
|
|
||||||
import { fr } from "@nuxt/ui/locale";
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<UApp id="layout-default" :locale="fr">
|
<div id="layout-default">
|
||||||
<SiteHeader />
|
<SiteHeader />
|
||||||
<UMain>
|
<UMain>
|
||||||
<slot />
|
<slot />
|
||||||
</UMain>
|
</UMain>
|
||||||
<SiteFooter />
|
<SiteFooter />
|
||||||
</UApp>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
18
wp-content/themes/moonshine/app/utils/acf-link.ts
Normal file
18
wp-content/themes/moonshine/app/utils/acf-link.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import * as z from "zod";
|
||||||
|
import type { AcfLinkFragment } from "#graphql/operations";
|
||||||
|
|
||||||
|
const acfLinkSchema = z.object({
|
||||||
|
title: z.string(),
|
||||||
|
url: z.string(),
|
||||||
|
target: z.string().optional().default(""),
|
||||||
|
});
|
||||||
|
export type AcfLinkOutput = z.infer<typeof acfLinkSchema>;
|
||||||
|
|
||||||
|
export function parseAcfLink(data?: Partial<AcfLinkFragment>) {
|
||||||
|
try {
|
||||||
|
return acfLinkSchema.parse(data);
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
29
wp-content/themes/moonshine/app/utils/acf-media.ts
Normal file
29
wp-content/themes/moonshine/app/utils/acf-media.ts
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import type { AcfMediaFragment } from "#graphql/operations";
|
||||||
|
import * as z from "zod";
|
||||||
|
|
||||||
|
export const acfImageSchema = z.object({
|
||||||
|
src: z.url(),
|
||||||
|
alt: z.string(),
|
||||||
|
mediaDetails: z.object({
|
||||||
|
width: z.number(),
|
||||||
|
height: z.number(),
|
||||||
|
}),
|
||||||
|
objectPosition: z.string().optional().default("center"),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const acfMediaSchema = z.object({
|
||||||
|
image: z.object({
|
||||||
|
node: acfImageSchema,
|
||||||
|
}),
|
||||||
|
aspectRatio: z.enum(["square", "video", "portrait", "auto"]).optional().default("auto"),
|
||||||
|
objectFit: z.enum(["cover", "contain"]).optional().default("cover"),
|
||||||
|
});
|
||||||
|
|
||||||
|
export function parseAcfMedia(data?: Partial<AcfMediaFragment>) {
|
||||||
|
try {
|
||||||
|
return acfMediaSchema.parse(data);
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
32
wp-content/themes/moonshine/app/utils/acf-social.ts
Normal file
32
wp-content/themes/moonshine/app/utils/acf-social.ts
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
import * as z from "zod";
|
||||||
|
import type { AcfSocialFragment } from "#graphql/operations";
|
||||||
|
|
||||||
|
const socialProfile = z.object({ url: z.url() }).transform(({ url }) => ({ url, icon: getSocialIcon(url) }));
|
||||||
|
const acfSocialSchema = z.object({
|
||||||
|
profiles: z.array(socialProfile),
|
||||||
|
});
|
||||||
|
export type AcfSocialOutput = z.infer<typeof acfSocialSchema>;
|
||||||
|
|
||||||
|
export function parseAcfSocial(data?: AcfSocialFragment) {
|
||||||
|
try {
|
||||||
|
return acfSocialSchema.parse(data);
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const socialIconMap = {
|
||||||
|
"facebook.com": "i-cib-facebook-f",
|
||||||
|
"twitter.com": "i-cib-twitter",
|
||||||
|
"x.com": "i-cib-twitter",
|
||||||
|
"instagram.com": "i-cib-instagram",
|
||||||
|
"youtube.com": "i-cib-youtube",
|
||||||
|
"linkedin.com": "i-cib-linkedin",
|
||||||
|
"tiktok.com": "i-cib-tiktok",
|
||||||
|
};
|
||||||
|
|
||||||
|
function getSocialIcon(url: string): string {
|
||||||
|
const domain = new URL(url).hostname.toLowerCase().replace(/^www\./, "");
|
||||||
|
return socialIconMap[domain as keyof typeof socialIconMap] ?? "i-lucide-globe";
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
// Override TermConnection query args
|
// Override term connection query args
|
||||||
add_filter( 'graphql_term_object_connection_query_args', 'moonshine_graphql_term_object_connection_query_args', 10, 3 );
|
add_filter( 'graphql_term_object_connection_query_args', 'moonshine_graphql_term_object_connection_query_args', 10, 3 );
|
||||||
function moonshine_graphql_term_object_connection_query_args( $query_args, $source, $args ) {
|
function moonshine_graphql_term_object_connection_query_args( $query_args, $source, $args ) {
|
||||||
// Sort by 'order' meta value instead of legacy 'term_order' field
|
// Sort by 'order' meta value instead of legacy 'term_order' field
|
||||||
|
|||||||
@@ -1,2 +1,29 @@
|
|||||||
<?php
|
<?php
|
||||||
return ['project-id-version'=>'Moonshine','report-msgid-bugs-to'=>'','pot-creation-date'=>'2026-01-13 15:52+0000','po-revision-date'=>'2026-01-29 02:55+0000','last-translator'=>'','language-team'=>'Français du Canada','language'=>'fr_CA','plural-forms'=>'nplurals=2; plural=n > 1;','mime-version'=>'1.0','content-type'=>'text/plain; charset=UTF-8','content-transfer-encoding'=>'8bit','x-generator'=>'Loco https://localise.biz/','x-loco-version'=>'2.8.1; wp-6.9; php-8.3.27','x-domain'=>'moonshine','messages'=>['Heading styles'=>'Styles de titres','Headless WordPress theme based on Nuxt.'=>'Thème Wordpress headless basé sur Nuxt.','https://websimple.com/'=>'https://websimple.com/','Inline styles'=>'Styles de caractères','Link styles'=>'Styles de liens','Main menu'=>'Menu principal','Moonshine'=>'Moonshine','Paragraph styles'=>'Styles de paragraphes','Pascal Martineau '=>'Pascal Martineau ','Semi-bold'=>'Semi-gras']];
|
return array(
|
||||||
|
'project-id-version' => 'Moonshine',
|
||||||
|
'report-msgid-bugs-to' => '',
|
||||||
|
'pot-creation-date' => '2026-01-13 15:52+0000',
|
||||||
|
'po-revision-date' => '2026-01-29 02:55+0000',
|
||||||
|
'last-translator' => '',
|
||||||
|
'language-team' => 'Français du Canada',
|
||||||
|
'language' => 'fr_CA',
|
||||||
|
'plural-forms' => 'nplurals=2; plural=n > 1;',
|
||||||
|
'mime-version' => '1.0',
|
||||||
|
'content-type' => 'text/plain; charset=UTF-8',
|
||||||
|
'content-transfer-encoding' => '8bit',
|
||||||
|
'x-generator' => 'Loco https://localise.biz/',
|
||||||
|
'x-loco-version' => '2.8.1; wp-6.9; php-8.3.27',
|
||||||
|
'x-domain' => 'moonshine',
|
||||||
|
'messages' => array(
|
||||||
|
'Heading styles' => 'Styles de titres',
|
||||||
|
'Headless WordPress theme based on Nuxt.' => 'Thème Wordpress headless basé sur Nuxt.',
|
||||||
|
'https://websimple.com/' => 'https://websimple.com/',
|
||||||
|
'Inline styles' => 'Styles de caractères',
|
||||||
|
'Link styles' => 'Styles de liens',
|
||||||
|
'Main menu' => 'Menu principal',
|
||||||
|
'Moonshine' => 'Moonshine',
|
||||||
|
'Paragraph styles' => 'Styles de paragraphes',
|
||||||
|
'Pascal Martineau ' => 'Pascal Martineau ',
|
||||||
|
'Semi-bold' => 'Semi-gras',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
import { version } from "./package.json";
|
import { version } from "./package.json";
|
||||||
|
|
||||||
const isDev = process.env.NODE_ENV !== "production";
|
|
||||||
|
|
||||||
const siteUrl = process.env.NUXT_SITE_URL;
|
const siteUrl = process.env.NUXT_SITE_URL;
|
||||||
if (!siteUrl) {
|
if (!siteUrl) {
|
||||||
throw new Error(`NUXT_SITE_URL is not defined. Make sure to set it in your build environment variables.`);
|
throw new Error(`NUXT_SITE_URL is not defined. Make sure to set it in your build environment variables.`);
|
||||||
@@ -13,6 +11,8 @@ if (!wpUrl) {
|
|||||||
}
|
}
|
||||||
const wpDomain = new URL(wpUrl).hostname;
|
const wpDomain = new URL(wpUrl).hostname;
|
||||||
|
|
||||||
|
const enableCloudflareImage = Boolean(process.env.ENABLE_CLOUDFLARE_IMAGE);
|
||||||
|
|
||||||
// https://nuxt.com/docs/api/configuration/nuxt-config
|
// https://nuxt.com/docs/api/configuration/nuxt-config
|
||||||
export default defineNuxtConfig({
|
export default defineNuxtConfig({
|
||||||
|
|
||||||
@@ -60,10 +60,9 @@ export default defineNuxtConfig({
|
|||||||
nodeCompat: true,
|
nodeCompat: true,
|
||||||
wrangler: {
|
wrangler: {
|
||||||
// Project name
|
// Project name
|
||||||
name: "moonshine",
|
name: "wp-headless",
|
||||||
// Cloudflare Workers settings
|
// Cloudflare Workers settings
|
||||||
compatibility_date: "2026-01-27",
|
compatibility_date: "2026-01-27",
|
||||||
main: "./.output/server/index.mjs",
|
|
||||||
observability: { enabled: true },
|
observability: { enabled: true },
|
||||||
preview_urls: false,
|
preview_urls: false,
|
||||||
// Environment variables
|
// Environment variables
|
||||||
@@ -72,11 +71,6 @@ export default defineNuxtConfig({
|
|||||||
NUXT_SITE_URL: siteUrl,
|
NUXT_SITE_URL: siteUrl,
|
||||||
NUXT_WP_URL: wpUrl,
|
NUXT_WP_URL: wpUrl,
|
||||||
},
|
},
|
||||||
// Bindings
|
|
||||||
assets: {
|
|
||||||
binding: "ASSETS",
|
|
||||||
directory: "./.output/public/",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -108,8 +102,10 @@ export default defineNuxtConfig({
|
|||||||
},
|
},
|
||||||
|
|
||||||
image: {
|
image: {
|
||||||
...isDev ? {} : { provider: "cloudflare", cloudflare: { baseURL: "/" } },
|
provider: enableCloudflareImage ? "cloudflare" : "none",
|
||||||
|
cloudflare: { baseURL: `${siteUrl}/` },
|
||||||
domains: [wpDomain],
|
domains: [wpDomain],
|
||||||
|
format: ["avif", "webp"],
|
||||||
},
|
},
|
||||||
|
|
||||||
robots: {
|
robots: {
|
||||||
@@ -123,4 +119,5 @@ export default defineNuxtConfig({
|
|||||||
componentPrefix: "Svg",
|
componentPrefix: "Svg",
|
||||||
defaultImport: "component",
|
defaultImport: "component",
|
||||||
},
|
},
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,22 +1,31 @@
|
|||||||
{
|
{
|
||||||
"name": "@lewebsimple/moonshine",
|
"name": "@lewebsimple/moonshine",
|
||||||
"description": "Headless WordPress theme based on Nuxt.",
|
"description": "Headless WordPress theme based on Nuxt.",
|
||||||
"version": "0.1.10",
|
"version": "0.1.12",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "nuxt build",
|
"build": "pnpm --sequential /build:.*/",
|
||||||
"editor-style": "pnpx @tailwindcss/cli -i ./app/assets/css/_main.css -o ./editor-style.css --minify",
|
"build:nuxt": "nuxt build",
|
||||||
"dev": "nuxt dev",
|
"dev": "nuxt dev",
|
||||||
"lint": "eslint --fix .",
|
"editor-style": "pnpx @tailwindcss/cli -i ./app/assets/css/_main.css -o ./editor-style.css --minify",
|
||||||
"postinstall": "nuxt prepare",
|
"lint": "eslint . --fix",
|
||||||
"preview": "pnpm run build && wrangler dev --port 3000",
|
"postinstall": "pnpm --sequential /postinstall:.*/",
|
||||||
"release": "pnpm lint && changelogen --noAuthors --release --push",
|
"postinstall:wrangler-types": "pnpm wrangler types ./server/types/cloudflare.d.ts",
|
||||||
"typecheck": "nuxt typecheck"
|
"postinstall:nuxt": "nuxt prepare",
|
||||||
|
"preview": "pnpm --sequential /preview:.*/",
|
||||||
|
"preview:build": "pnpm run build",
|
||||||
|
"preview:wrangler-dev": "wrangler dev --port 3000",
|
||||||
|
"release": "pnpm --sequential /release:.*/",
|
||||||
|
"release:lint": "eslint .",
|
||||||
|
"release:typecheck": "nuxt typecheck",
|
||||||
|
"release:changelogen": "changelogen --noAuthors --release --push",
|
||||||
|
"wrangler": "wrangler --config .output/server/wrangler.json"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@iconify-json/cib": "^1.2.3",
|
||||||
"@iconify-json/lucide": "^1.2.87",
|
"@iconify-json/lucide": "^1.2.87",
|
||||||
"@lewebsimple/nuxt-graphql": "^0.6.7",
|
"@lewebsimple/nuxt-graphql": "^0.6.8",
|
||||||
"@nuxt/image": "^2.0.0",
|
"@nuxt/image": "^2.0.0",
|
||||||
"@nuxt/ui": "4.3.0",
|
"@nuxt/ui": "4.3.0",
|
||||||
"@nuxtjs/device": "4.0.0",
|
"@nuxtjs/device": "4.0.0",
|
||||||
|
|||||||
56
wp-content/themes/moonshine/pnpm-lock.yaml
generated
56
wp-content/themes/moonshine/pnpm-lock.yaml
generated
@@ -12,12 +12,15 @@ importers:
|
|||||||
|
|
||||||
.:
|
.:
|
||||||
dependencies:
|
dependencies:
|
||||||
|
'@iconify-json/cib':
|
||||||
|
specifier: ^1.2.3
|
||||||
|
version: 1.2.3
|
||||||
'@iconify-json/lucide':
|
'@iconify-json/lucide':
|
||||||
specifier: ^1.2.87
|
specifier: ^1.2.87
|
||||||
version: 1.2.87
|
version: 1.2.87
|
||||||
'@lewebsimple/nuxt-graphql':
|
'@lewebsimple/nuxt-graphql':
|
||||||
specifier: ^0.6.7
|
specifier: ^0.6.8
|
||||||
version: 0.6.7(db0@0.3.4)(ioredis@5.9.2)(magicast@0.5.1)
|
version: 0.6.8(db0@0.3.4)(ioredis@5.9.2)(magicast@0.5.1)
|
||||||
'@nuxt/image':
|
'@nuxt/image':
|
||||||
specifier: ^2.0.0
|
specifier: ^2.0.0
|
||||||
version: 2.0.0(db0@0.3.4)(ioredis@5.9.2)(magicast@0.5.1)
|
version: 2.0.0(db0@0.3.4)(ioredis@5.9.2)(magicast@0.5.1)
|
||||||
@@ -836,8 +839,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
|
resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
|
|
||||||
'@eslint/config-helpers@0.5.1':
|
'@eslint/config-helpers@0.5.2':
|
||||||
resolution: {integrity: sha512-QN8067dXsXAl9HIvqws7STEviheRFojX3zek5OpC84oBxDGqizW9731ByF/ASxqQihbWrVDdZXS+Ihnsckm9dg==}
|
resolution: {integrity: sha512-a5MxrdDXEvqnIq+LisyCX6tQMPF/dSJpCfBgBauY+pNZ28yCtSsTvyTYrMhaI+LK26bVyCJfJkT0u8KIj2i1dQ==}
|
||||||
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
|
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
|
||||||
|
|
||||||
'@eslint/config-inspector@1.4.2':
|
'@eslint/config-inspector@1.4.2':
|
||||||
@@ -850,8 +853,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
|
resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
|
|
||||||
'@eslint/core@1.0.1':
|
'@eslint/core@1.1.0':
|
||||||
resolution: {integrity: sha512-r18fEAj9uCk+VjzGt2thsbOmychS+4kxI14spVNibUO2vqKX7obOG+ymZljAwuPZl+S3clPGwCwTDtrdqTiY6Q==}
|
resolution: {integrity: sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==}
|
||||||
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
|
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
|
||||||
|
|
||||||
'@eslint/eslintrc@3.3.3':
|
'@eslint/eslintrc@3.3.3':
|
||||||
@@ -1060,6 +1063,9 @@ packages:
|
|||||||
resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
|
resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
|
||||||
engines: {node: '>=18.18'}
|
engines: {node: '>=18.18'}
|
||||||
|
|
||||||
|
'@iconify-json/cib@1.2.3':
|
||||||
|
resolution: {integrity: sha512-MMvRXVTHt82z3bYN19JDAjv/X8OBNC/1B3I334SV/1nyhdPeeyvJZVoI1cGuNqYznBjMnWxKPtIhhiVgGQ1CzQ==}
|
||||||
|
|
||||||
'@iconify-json/lucide@1.2.87':
|
'@iconify-json/lucide@1.2.87':
|
||||||
resolution: {integrity: sha512-wxYIAp0f8Uw0rJa6BMWMaRbiHk3yV4XczA38GKXFlqyZtTdmHM1QOF4NZw5xpMlRDzbh2MnB7wjteLeFnn/ciQ==}
|
resolution: {integrity: sha512-wxYIAp0f8Uw0rJa6BMWMaRbiHk3yV4XczA38GKXFlqyZtTdmHM1QOF4NZw5xpMlRDzbh2MnB7wjteLeFnn/ciQ==}
|
||||||
|
|
||||||
@@ -1267,8 +1273,8 @@ packages:
|
|||||||
'@kwsites/promise-deferred@1.1.1':
|
'@kwsites/promise-deferred@1.1.1':
|
||||||
resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==}
|
resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==}
|
||||||
|
|
||||||
'@lewebsimple/nuxt-graphql@0.6.7':
|
'@lewebsimple/nuxt-graphql@0.6.8':
|
||||||
resolution: {integrity: sha512-/7jol50YtpKdUlVIliDI0IH9z9D8Gk0pm6Jc1q7CL6TTOKlJKnCmLw0KsjmmmniUgtBQjyh/G+VqXu60iRgRYg==}
|
resolution: {integrity: sha512-b7QYVQx4OeiWmO8qY5CDxFC+Vnafn92ak8ApijA4C4t1lrJ/QjFl5avdATOWeTsskHBvq0QI3rGE2O144iBZGA==}
|
||||||
|
|
||||||
'@mapbox/node-pre-gyp@2.0.3':
|
'@mapbox/node-pre-gyp@2.0.3':
|
||||||
resolution: {integrity: sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==}
|
resolution: {integrity: sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==}
|
||||||
@@ -4078,8 +4084,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==}
|
resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==}
|
||||||
engines: {node: '>=18'}
|
engines: {node: '>=18'}
|
||||||
|
|
||||||
get-tsconfig@4.13.0:
|
get-tsconfig@4.13.1:
|
||||||
resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==}
|
resolution: {integrity: sha512-EoY1N2xCn44xU6750Sx7OjOIT59FkmstNc3X6y5xpz7D5cBtZRe/3pSlTkDJgqsOk3WwZPkWfonhhUJfttQo3w==}
|
||||||
|
|
||||||
giget@2.0.0:
|
giget@2.0.0:
|
||||||
resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==}
|
resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==}
|
||||||
@@ -5219,8 +5225,8 @@ packages:
|
|||||||
pkg-types@2.3.0:
|
pkg-types@2.3.0:
|
||||||
resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==}
|
resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==}
|
||||||
|
|
||||||
playwright-core@1.58.0:
|
playwright-core@1.58.1:
|
||||||
resolution: {integrity: sha512-aaoB1RWrdNi3//rOeKuMiS65UCcgOVljU46At6eFcOFPFHWtd2weHRRow6z/n+Lec0Lvu0k9ZPKJSjPugikirw==}
|
resolution: {integrity: sha512-bcWzOaTxcW+VOOGBCQgnaKToLJ65d6AqfLVKEWvexyS3AS6rbXl+xdpYRMGSRBClPvyj44njOWoxjNdL/H9UNg==}
|
||||||
engines: {node: '>=18'}
|
engines: {node: '>=18'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
@@ -7111,9 +7117,9 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@eslint/core': 0.17.0
|
'@eslint/core': 0.17.0
|
||||||
|
|
||||||
'@eslint/config-helpers@0.5.1':
|
'@eslint/config-helpers@0.5.2':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint/core': 1.0.1
|
'@eslint/core': 1.1.0
|
||||||
|
|
||||||
'@eslint/config-inspector@1.4.2(eslint@9.39.2(jiti@2.6.1))':
|
'@eslint/config-inspector@1.4.2(eslint@9.39.2(jiti@2.6.1))':
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -7134,7 +7140,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@types/json-schema': 7.0.15
|
'@types/json-schema': 7.0.15
|
||||||
|
|
||||||
'@eslint/core@1.0.1':
|
'@eslint/core@1.1.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/json-schema': 7.0.15
|
'@types/json-schema': 7.0.15
|
||||||
|
|
||||||
@@ -7426,6 +7432,10 @@ snapshots:
|
|||||||
|
|
||||||
'@humanwhocodes/retry@0.4.3': {}
|
'@humanwhocodes/retry@0.4.3': {}
|
||||||
|
|
||||||
|
'@iconify-json/cib@1.2.3':
|
||||||
|
dependencies:
|
||||||
|
'@iconify/types': 2.0.0
|
||||||
|
|
||||||
'@iconify-json/lucide@1.2.87':
|
'@iconify-json/lucide@1.2.87':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@iconify/types': 2.0.0
|
'@iconify/types': 2.0.0
|
||||||
@@ -7609,7 +7619,7 @@ snapshots:
|
|||||||
|
|
||||||
'@kwsites/promise-deferred@1.1.1': {}
|
'@kwsites/promise-deferred@1.1.1': {}
|
||||||
|
|
||||||
'@lewebsimple/nuxt-graphql@0.6.7(db0@0.3.4)(ioredis@5.9.2)(magicast@0.5.1)':
|
'@lewebsimple/nuxt-graphql@0.6.8(db0@0.3.4)(ioredis@5.9.2)(magicast@0.5.1)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@graphql-codegen/core': 5.0.0(graphql@16.12.0)
|
'@graphql-codegen/core': 5.0.0(graphql@16.12.0)
|
||||||
'@graphql-codegen/typed-document-node': 6.1.5(graphql@16.12.0)
|
'@graphql-codegen/typed-document-node': 6.1.5(graphql@16.12.0)
|
||||||
@@ -10493,12 +10503,12 @@ snapshots:
|
|||||||
|
|
||||||
eslint-flat-config-utils@3.0.0:
|
eslint-flat-config-utils@3.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint/config-helpers': 0.5.1
|
'@eslint/config-helpers': 0.5.2
|
||||||
pathe: 2.0.3
|
pathe: 2.0.3
|
||||||
|
|
||||||
eslint-import-context@0.1.9(unrs-resolver@1.11.1):
|
eslint-import-context@0.1.9(unrs-resolver@1.11.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
get-tsconfig: 4.13.0
|
get-tsconfig: 4.13.1
|
||||||
stable-hash-x: 0.2.0
|
stable-hash-x: 0.2.0
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
unrs-resolver: 1.11.1
|
unrs-resolver: 1.11.1
|
||||||
@@ -10909,7 +10919,7 @@ snapshots:
|
|||||||
'@sec-ant/readable-stream': 0.4.1
|
'@sec-ant/readable-stream': 0.4.1
|
||||||
is-stream: 4.0.1
|
is-stream: 4.0.1
|
||||||
|
|
||||||
get-tsconfig@4.13.0:
|
get-tsconfig@4.13.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
resolve-pkg-maps: 1.0.0
|
resolve-pkg-maps: 1.0.0
|
||||||
|
|
||||||
@@ -11514,7 +11524,7 @@ snapshots:
|
|||||||
|
|
||||||
lower-case@2.0.2:
|
lower-case@2.0.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
tslib: 2.6.3
|
tslib: 2.8.1
|
||||||
|
|
||||||
lru-cache@10.4.3: {}
|
lru-cache@10.4.3: {}
|
||||||
|
|
||||||
@@ -11906,7 +11916,7 @@ snapshots:
|
|||||||
ohash: 2.0.11
|
ohash: 2.0.11
|
||||||
pathe: 2.0.3
|
pathe: 2.0.3
|
||||||
pkg-types: 2.3.0
|
pkg-types: 2.3.0
|
||||||
playwright-core: 1.58.0
|
playwright-core: 1.58.1
|
||||||
radix3: 1.1.2
|
radix3: 1.1.2
|
||||||
satori: 0.18.4
|
satori: 0.18.4
|
||||||
satori-html: 0.3.2
|
satori-html: 0.3.2
|
||||||
@@ -12387,7 +12397,7 @@ snapshots:
|
|||||||
exsolve: 1.0.8
|
exsolve: 1.0.8
|
||||||
pathe: 2.0.3
|
pathe: 2.0.3
|
||||||
|
|
||||||
playwright-core@1.58.0: {}
|
playwright-core@1.58.1: {}
|
||||||
|
|
||||||
pluralize@8.0.0: {}
|
pluralize@8.0.0: {}
|
||||||
|
|
||||||
@@ -13461,7 +13471,7 @@ snapshots:
|
|||||||
|
|
||||||
upper-case@2.0.2:
|
upper-case@2.0.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
tslib: 2.6.3
|
tslib: 2.8.1
|
||||||
|
|
||||||
uqr@0.1.2: {}
|
uqr@0.1.2: {}
|
||||||
|
|
||||||
|
|||||||
@@ -3639,6 +3639,58 @@ interface GroupAbstractMedia_Fields implements AcfFieldGroup & AcfFieldGroupFiel
|
|||||||
objectFit: String!
|
objectFit: String!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
The "GroupAbstractSocial" Field Group. Added to the Schema by "WPGraphQL for ACF".
|
||||||
|
"""
|
||||||
|
type GroupAbstractSocial implements AcfFieldGroup & AcfFieldGroupFields & GroupAbstractSocial_Fields {
|
||||||
|
"""The name of the field group"""
|
||||||
|
fieldGroupName: String @deprecated(reason: "Use __typename instead")
|
||||||
|
|
||||||
|
"""
|
||||||
|
Field of the "repeater" Field Type added to the schema as part of the "GroupAbstractSocial" Field Group
|
||||||
|
"""
|
||||||
|
profiles: [GroupAbstractSocialProfiles]!
|
||||||
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
The "GroupAbstractSocialProfiles" Field Group. Added to the Schema by "WPGraphQL for ACF".
|
||||||
|
"""
|
||||||
|
type GroupAbstractSocialProfiles implements AcfFieldGroup & AcfFieldGroupFields & GroupAbstractSocialProfiles_Fields {
|
||||||
|
"""The name of the field group"""
|
||||||
|
fieldGroupName: String @deprecated(reason: "Use __typename instead")
|
||||||
|
|
||||||
|
"""
|
||||||
|
Field of the "url" Field Type added to the schema as part of the "GroupAbstractSocialProfiles" Field Group
|
||||||
|
"""
|
||||||
|
url: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
Interface representing fields of the ACF "GroupAbstractSocialProfiles" Field Group
|
||||||
|
"""
|
||||||
|
interface GroupAbstractSocialProfiles_Fields implements AcfFieldGroup & AcfFieldGroupFields {
|
||||||
|
"""The name of the field group"""
|
||||||
|
fieldGroupName: String @deprecated(reason: "Use __typename instead")
|
||||||
|
|
||||||
|
"""
|
||||||
|
Field of the "url" Field Type added to the schema as part of the "GroupAbstractSocialProfiles" Field Group
|
||||||
|
"""
|
||||||
|
url: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
Interface representing fields of the ACF "GroupAbstractSocial" Field Group
|
||||||
|
"""
|
||||||
|
interface GroupAbstractSocial_Fields implements AcfFieldGroup & AcfFieldGroupFields {
|
||||||
|
"""The name of the field group"""
|
||||||
|
fieldGroupName: String @deprecated(reason: "Use __typename instead")
|
||||||
|
|
||||||
|
"""
|
||||||
|
Field of the "repeater" Field Type added to the schema as part of the "GroupAbstractSocial" Field Group
|
||||||
|
"""
|
||||||
|
profiles: [GroupAbstractSocialProfiles]!
|
||||||
|
}
|
||||||
|
|
||||||
"""
|
"""
|
||||||
The "GroupLayoutContained" Field Group. Added to the Schema by "WPGraphQL for ACF".
|
The "GroupLayoutContained" Field Group. Added to the Schema by "WPGraphQL for ACF".
|
||||||
"""
|
"""
|
||||||
@@ -3714,7 +3766,7 @@ interface GroupPostPage_Fields implements AcfFieldGroup & AcfFieldGroupFields &
|
|||||||
"""
|
"""
|
||||||
The "GroupSiteOptions" Field Group. Added to the Schema by "WPGraphQL for ACF".
|
The "GroupSiteOptions" Field Group. Added to the Schema by "WPGraphQL for ACF".
|
||||||
"""
|
"""
|
||||||
type GroupSiteOptions implements AcfFieldGroup & AcfFieldGroupFields & GroupSiteOptions_Fields {
|
type GroupSiteOptions implements AcfFieldGroup & AcfFieldGroupFields & GroupAbstractSocial_Fields & GroupSiteOptions_Fields {
|
||||||
"""
|
"""
|
||||||
Field of the "email" Field Type added to the schema as part of the "GroupSiteOptions" Field Group
|
Field of the "email" Field Type added to the schema as part of the "GroupSiteOptions" Field Group
|
||||||
"""
|
"""
|
||||||
@@ -3732,6 +3784,11 @@ type GroupSiteOptions implements AcfFieldGroup & AcfFieldGroupFields & GroupSite
|
|||||||
Field of the "phone" Field Type added to the schema as part of the "GroupSiteOptions" Field Group
|
Field of the "phone" Field Type added to the schema as part of the "GroupSiteOptions" Field Group
|
||||||
"""
|
"""
|
||||||
phoneNumber: AcfPhone!
|
phoneNumber: AcfPhone!
|
||||||
|
|
||||||
|
"""
|
||||||
|
Field of the "repeater" Field Type added to the schema as part of the "GroupAbstractSocial" Field Group
|
||||||
|
"""
|
||||||
|
profiles: [GroupAbstractSocialProfiles]!
|
||||||
}
|
}
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@@ -3763,7 +3820,7 @@ interface GroupSiteOptionsLinks_Fields implements AcfFieldGroup & AcfFieldGroupF
|
|||||||
"""
|
"""
|
||||||
Interface representing fields of the ACF "GroupSiteOptions" Field Group
|
Interface representing fields of the ACF "GroupSiteOptions" Field Group
|
||||||
"""
|
"""
|
||||||
interface GroupSiteOptions_Fields implements AcfFieldGroup & AcfFieldGroupFields {
|
interface GroupSiteOptions_Fields implements AcfFieldGroup & AcfFieldGroupFields & GroupAbstractSocial_Fields {
|
||||||
"""
|
"""
|
||||||
Field of the "email" Field Type added to the schema as part of the "GroupSiteOptions" Field Group
|
Field of the "email" Field Type added to the schema as part of the "GroupSiteOptions" Field Group
|
||||||
"""
|
"""
|
||||||
@@ -3781,6 +3838,11 @@ interface GroupSiteOptions_Fields implements AcfFieldGroup & AcfFieldGroupFields
|
|||||||
Field of the "phone" Field Type added to the schema as part of the "GroupSiteOptions" Field Group
|
Field of the "phone" Field Type added to the schema as part of the "GroupSiteOptions" Field Group
|
||||||
"""
|
"""
|
||||||
phoneNumber: AcfPhone!
|
phoneNumber: AcfPhone!
|
||||||
|
|
||||||
|
"""
|
||||||
|
Field of the "repeater" Field Type added to the schema as part of the "GroupAbstractSocial" Field Group
|
||||||
|
"""
|
||||||
|
profiles: [GroupAbstractSocialProfiles]!
|
||||||
}
|
}
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|||||||
9
wp-content/themes/moonshine/server/types/h3.d.ts
vendored
Normal file
9
wp-content/themes/moonshine/server/types/h3.d.ts
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import "h3";
|
||||||
|
|
||||||
|
declare module "h3" {
|
||||||
|
interface H3EventContext {
|
||||||
|
cloudflare: {
|
||||||
|
env: Cloudflare.Env;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user