2026-09-11 02:46:56 +02:00
/* ============================================================================
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 <Footer />'s own prop defaults.
========================================================================= */
import { ROUTE_SLUGS } from "~/lib/route-slugs" ;
2026-09-16 20:32:56 +02:00
import { SITE_FACEBOOK_URL } from "~/lib/site-links" ;
2026-09-11 02:46:56 +02:00
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 < Record < FooterLocale , FooterCopy >> = {
en : {
2026-09-16 20:32:56 +02:00
brandLine :
"Shared Action on Rule of Law Progress — Exit Route. December 2025 – December 2027." ,
2026-09-11 02:46:56 +02:00
euStatement : "This project is funded by the European Union" ,
euEmblemAlt : "Emblem of the European Union" ,
implementedByLabel : "Implemented by" ,
2026-09-16 20:32:56 +02:00
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." ,
2026-09-11 02:46:56 +02:00
socialHeading : "Follow SHARP-ER" ,
homeLabel : "SHARP-ER — home" ,
navLabel : "Site sections" ,
},
ar : {
2026-09-16 20:32:56 +02:00
brandLine :
"العمل المشترك لتعزيز سيادة القانون – مسار الخروج. ديسمبر 2025 – ديسمبر 2027." ,
2026-09-11 02:46:56 +02:00
euStatement : "هذا المشروع ممول من الاتحاد الأوروبي" ,
euEmblemAlt : "شعار الاتحاد الأوروبي" ,
implementedByLabel : "الجهات المنفّذة" ,
2026-09-16 20:32:56 +02:00
disclaimer :
"أُنتج هذا الموقع الإلكتروني بدعم مالي من الاتحاد الأوروبي. ومحتوياته هي مسؤولية ائتلاف SHARP-ER وحده، ولا تعكس بالضرورة وجهات نظر الاتحاد الأوروبي." ,
2026-09-11 02:46:56 +02:00
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 < FooterLocale , readonly FooterLinkGroup [] >
> = {
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.
------------------------------------------------------------------------ */
2026-09-16 20:32:56 +02:00
export const DEFAULT_FOOTER_SOCIAL_LINKS_BY_LOCALE : Readonly <
Record < FooterLocale , readonly FooterSocialLink [] >
> = {
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 ];
}