/* ============================================================================
Footer - typed defaults
----------------------------------------------------------------------------
Draft copy is taken from docs/SHARPER_Website_Draft_Section_EN_AR.docx and the
communication guideline; the section names are the ten-section IA. Everything
here is a default only - Strapi will supply the same shapes later, so nothing
below may be imported by anything except 's own prop defaults.
========================================================================= */
import { ROUTE_SLUGS } from "~/lib/route-slugs";
import { SITE_FACEBOOK_URL } from "~/lib/site-links";
import type {
FooterCopy,
FooterLinkGroup,
FooterLocale,
FooterPartner,
FooterSocialLink,
} from "./types";
/* ---------------------------------------------------------------------------
Assets - exported from Figma (frames 312:4012, 84:4483, 228:2984) and
committed under apps/web/public/assets/. Two cuts of every piece of baked
ink: the plain one for a light surface, `*-inverse` for a dark one.
------------------------------------------------------------------------ */
export const FOOTER_ASSETS = {
/** SHARP-ER wordmark, designed 334x46 (figma 317:5571 / 317:7812). */
wordmark: "/assets/sharp-er-wordmark.png",
wordmarkInverse: "/assets/sharp-er-wordmark-inverse.png",
/** EU emblem, designed 48x32 (figma 22:5358 / 238:2323). */
euEmblem: "/assets/eu-emblem.png",
euEmblemInverse: "/assets/eu-emblem-inverse.png",
} as const;
/** Designed CSS pixels of the wordmark inside the footer brand column. */
export const FOOTER_WORDMARK_SIZE = { width: 196, height: 27 } as const;
/** Designed CSS pixels of the EU emblem (figma "european union", 48x32). */
export const FOOTER_EU_EMBLEM_SIZE = { width: 48, height: 32 } as const;
/* ---------------------------------------------------------------------------
Route slugs
The footer only ever builds `/{locale}/{slug}`, and the slugs come from the
ONE source of truth the route config itself is built from - redeclaring them
here is how the footer ended up linking at five pages that do not exist.
Re-exported under the old name so the barrel keeps its public surface.
------------------------------------------------------------------------ */
export const FOOTER_ROUTE_SLUGS = ROUTE_SLUGS;
const path = (locale: FooterLocale, slug: string): string => `/${locale}/${slug}`;
/* ---------------------------------------------------------------------------
Copy
------------------------------------------------------------------------ */
export const DEFAULT_FOOTER_COPY: Readonly> = {
en: {
brandLine:
"Shared Action on Rule of Law Progress — Exit Route. December 2025 – December 2027.",
euStatement: "This project is funded by the European Union",
euEmblemAlt: "Emblem of the European Union",
implementedByLabel: "Implemented by",
disclaimer:
"This website was produced with the financial support of the European Union. Its contents are the sole responsibility of the SHARP-ER consortium and do not necessarily reflect the views of the European Union.",
socialHeading: "Follow SHARP-ER",
homeLabel: "SHARP-ER — home",
navLabel: "Site sections",
},
ar: {
brandLine:
"العمل المشترك لتعزيز سيادة القانون – مسار الخروج. ديسمبر 2025 – ديسمبر 2027.",
euStatement: "هذا المشروع ممول من الاتحاد الأوروبي",
euEmblemAlt: "شعار الاتحاد الأوروبي",
implementedByLabel: "الجهات المنفّذة",
disclaimer:
"أُنتج هذا الموقع الإلكتروني بدعم مالي من الاتحاد الأوروبي. ومحتوياته هي مسؤولية ائتلاف SHARP-ER وحده، ولا تعكس بالضرورة وجهات نظر الاتحاد الأوروبي.",
socialHeading: "تابعوا SHARP-ER",
homeLabel: "SHARP-ER — الصفحة الرئيسية",
navLabel: "أقسام الموقع",
},
};
/* ---------------------------------------------------------------------------
Sitemap columns - the three IA groups. "Home" is not repeated as a link
because the wordmark above the columns already points at it.
------------------------------------------------------------------------ */
const LINK_GROUPS: Readonly<
Record
> = {
en: [
{
id: "about-and-strategy",
heading: "About and Strategy",
links: [
{ label: "About", href: path("en", FOOTER_ROUTE_SLUGS.about) },
{ label: "What We Do", href: path("en", FOOTER_ROUTE_SLUGS.whatWeDo) },
{
label: "Activities and Initiatives",
href: path("en", FOOTER_ROUTE_SLUGS.activities),
},
],
},
{
id: "engagement-and-opportunities",
heading: "Engagement and Opportunities",
links: [
{ label: "Events Calendar", href: path("en", FOOTER_ROUTE_SLUGS.events) },
{
label: "Applications and Opportunities",
href: path("en", FOOTER_ROUTE_SLUGS.applications),
},
{ label: "News and Updates", href: path("en", FOOTER_ROUTE_SLUGS.news) },
{ label: "Contact", href: path("en", FOOTER_ROUTE_SLUGS.contact) },
],
},
{
id: "knowledge-and-impact",
heading: "Knowledge and Impact",
links: [
{
label: "Resources and Publications",
href: path("en", FOOTER_ROUTE_SLUGS.resources),
},
{ label: "Knowledge Hub", href: path("en", FOOTER_ROUTE_SLUGS.knowledgeHub) },
],
},
],
ar: [
{
id: "about-and-strategy",
heading: "عن المشروع والاستراتيجية",
links: [
{ label: "عن المشروع", href: path("ar", FOOTER_ROUTE_SLUGS.about) },
{ label: "ماذا نفعل", href: path("ar", FOOTER_ROUTE_SLUGS.whatWeDo) },
{ label: "الأنشطة والمبادرات", href: path("ar", FOOTER_ROUTE_SLUGS.activities) },
],
},
{
id: "engagement-and-opportunities",
heading: "المشاركة والفرص",
links: [
{ label: "التقويم الزمني للفعاليات", href: path("ar", FOOTER_ROUTE_SLUGS.events) },
{ label: "طلبات وفرص المشاركة", href: path("ar", FOOTER_ROUTE_SLUGS.applications) },
{ label: "الأخبار والمستجدات", href: path("ar", FOOTER_ROUTE_SLUGS.news) },
{ label: "تواصل معنا", href: path("ar", FOOTER_ROUTE_SLUGS.contact) },
],
},
{
id: "knowledge-and-impact",
heading: "المعرفة والأثر",
links: [
{ label: "الموارد والمنشورات", href: path("ar", FOOTER_ROUTE_SLUGS.resources) },
{ label: "مركز المعرفة", href: path("ar", FOOTER_ROUTE_SLUGS.knowledgeHub) },
],
},
],
};
/** The three IA sitemap columns for a locale. */
export function defaultFooterLinkGroups(
locale: FooterLocale,
): readonly FooterLinkGroup[] {
return LINK_GROUPS[locale];
}
/* ---------------------------------------------------------------------------
Consortium logos - shown together, never standalone (communication guideline).
Sizes are the designed boxes from figma frame 228:2984.
------------------------------------------------------------------------ */
export const DEFAULT_FOOTER_PARTNERS: readonly FooterPartner[] = [
{
id: "acted",
name: "Acted",
src: "/assets/partner-acted.png",
srcInverse: "/assets/partner-acted-inverse.png",
width: 86,
height: 24,
},
{
id: "uec",
name: "United Efforts Consultancy (UEC)",
src: "/assets/partner-uec.png",
srcInverse: "/assets/partner-uec-inverse.png",
width: 24,
height: 24,
},
{
id: "sbe",
name: "Stichting Bureau Ensemble (SBE)",
src: "/assets/partner-sbe.png",
srcInverse: "/assets/partner-sbe-inverse.png",
width: 43,
height: 24,
},
];
/* ---------------------------------------------------------------------------
Social profiles
DELIBERATELY EMPTY. The draft copy names Facebook as the only confirmed
channel and leaves its URL a placeholder, so there is no handle here that
the project is known to own - and shipping a guessed one from an EU-funded
site would point readers at an account somebody else may control.
Real profiles arrive through the `socialLinks` prop (Strapi); the footer's
`links.length > 0` guard drops the whole row until they do.
------------------------------------------------------------------------ */
export const DEFAULT_FOOTER_SOCIAL_LINKS_BY_LOCALE: Readonly<
Record
> = {
en: [
{
platform: "facebook",
label: "Follow us on Facebook",
href: SITE_FACEBOOK_URL,
},
],
ar: [
{
platform: "facebook",
label: "تابعونا على فيسبوك",
href: SITE_FACEBOOK_URL,
},
],
};
/** The English row, kept as the old name so the barrel's surface is unchanged. */
export const DEFAULT_FOOTER_SOCIAL_LINKS: readonly FooterSocialLink[] =
DEFAULT_FOOTER_SOCIAL_LINKS_BY_LOCALE.en;
export function defaultFooterSocialLinks(
locale: FooterLocale,
): readonly FooterSocialLink[] {
return DEFAULT_FOOTER_SOCIAL_LINKS_BY_LOCALE[locale];
}