From 76c4150f02d66e6fb84a8b246f79b09aa00e5cd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francesc=20Arp=C3=AD=20Roca?= Date: Sat, 13 Jun 2026 10:05:11 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20a=C3=B1adir=20tier=20'Comunidades=20Pat?= =?UTF-8?q?rocinadoras'=20para=20sponsors?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Añadir 'community' al union TSponsorTier - Añadir variable CSS --color-tier-community (azul suave #4a6fa5) en @theme - Añadir clave 'sponsors.community' en i18n (es, en, ca) - Mover EuroPython Society de tier 'gold' a tier 'community' - Renderizar nueva sección debajo de Bronce en SectionSponsors.astro (tamaño 140) - Refactor: reemplazar 6 bloques SponsorsGroup repetidos por un array de configuración tierDefs iterado con .map(). Añadir un nuevo tier ahora es 1 línea en el array en vez de 6 líneas de JSX --- src/components/home/SectionSponsors.astro | 63 ++++++++--------------- src/data/sponsors/eps.md | 2 +- src/i18n/home.ts | 3 ++ src/style/global.css | 3 ++ src/types/sponsors.ts | 2 +- 5 files changed, 29 insertions(+), 44 deletions(-) diff --git a/src/components/home/SectionSponsors.astro b/src/components/home/SectionSponsors.astro index 1e735bb..7151e1a 100644 --- a/src/components/home/SectionSponsors.astro +++ b/src/components/home/SectionSponsors.astro @@ -2,7 +2,7 @@ import { texts } from '../../i18n/home' import SectionTitle from '../SectionTitle.astro' import CenteredPanel from '../CenteredPanel.astro' -import type { ISponsor } from '../../types/sponsors' +import type { ISponsor, TSponsorTier } from '../../types/sponsors' import SponsorsGroup from './sponsors/SponsorsGroup.astro' const sponsors = Object.values(import.meta.glob('../../data/sponsors/*.md', { eager: true })) as { @@ -16,18 +16,21 @@ interface Props { const { lang } = Astro.props const t = texts[lang as keyof typeof texts] -function filterSponsorsByTier(tier: string): ISponsor[] { +function filterSponsorsByTier(tier: TSponsorTier): ISponsor[] { return sponsors .filter((s) => s.frontmatter.tier === tier) .map((s) => s.frontmatter) .sort((a, b) => a.name.localeCompare(b.name)) } -const bronze = filterSponsorsByTier('bronze') -const silver = filterSponsorsByTier('silver') -const gold = filterSponsorsByTier('gold') -const platinum = filterSponsorsByTier('platinum') -const main = filterSponsorsByTier('main') +const tierDefs: Array<{ key: TSponsorTier; size: number; color: string }> = [ + { key: 'main', size: 280, color: 'text-tier-main' }, + { key: 'platinum', size: 170, color: 'text-tier-platinum' }, + { key: 'gold', size: 140, color: 'text-tier-gold' }, + { key: 'silver', size: 110, color: 'text-tier-silver' }, + { key: 'bronze', size: 90, color: 'text-tier-bronze' }, + { key: 'community', size: 140, color: 'text-tier-community' }, +] ---
@@ -35,40 +38,16 @@ const main = filterSponsorsByTier('main')
- - - - - + { + tierDefs.map((tier) => ( + + )) + }
diff --git a/src/data/sponsors/eps.md b/src/data/sponsors/eps.md index 6e5bc4b..219658a 100644 --- a/src/data/sponsors/eps.md +++ b/src/data/sponsors/eps.md @@ -1,7 +1,7 @@ --- name: 'EuroPython Society' website: 'https://www.europython-society.org/' -tier: 'gold' +tier: 'community' logobg: '#ffffff' logo: '/collaborators/europython.png' --- diff --git a/src/i18n/home.ts b/src/i18n/home.ts index 3d31e07..a28c07b 100644 --- a/src/i18n/home.ts +++ b/src/i18n/home.ts @@ -12,6 +12,7 @@ export const texts = { 'sponsors.gold': 'Patrocinador Oro', 'sponsors.silver': 'Patrocinador Plata', 'sponsors.bronze': 'Patrocinador Bronce', + 'sponsors.community': 'Comunidades Patrocinadoras', 'sponsors.none': 'No hay patrocinadores en este nivel', 'sponsors.altlogo': 'Logo de {name}', 'cfp.title': 'Llamada a Propuestas', @@ -37,6 +38,7 @@ export const texts = { 'sponsors.gold': 'Gold Sponsor', 'sponsors.silver': 'Silver Sponsor', 'sponsors.bronze': 'Bronze Sponsor', + 'sponsors.community': 'Sponsoring Communities', 'sponsors.none': 'No sponsors in this tier', 'sponsors.altlogo': '{name} logo', 'cfp.title': 'Call for Proposals', @@ -63,6 +65,7 @@ export const texts = { 'sponsors.gold': 'Patrocinador Or', 'sponsors.silver': 'Patrocinador Plata', 'sponsors.bronze': 'Patrocinador Bronze', + 'sponsors.community': 'Comunitats Patrocinadores', 'sponsors.none': 'No hi ha patrocinadors en aquest nivell', 'sponsors.altlogo': 'Logo de {name}', 'cfp.title': 'Crida a Propostes', diff --git a/src/style/global.css b/src/style/global.css index 0f0cc2a..52badd0 100644 --- a/src/style/global.css +++ b/src/style/global.css @@ -96,6 +96,9 @@ html { --color-tier-bronze: var(--color-pycon-gray); --color-contrast-tier-bronze: #ffffff; + + --color-tier-community: #4a6fa5; + --color-contrast-tier-community: #ffffff; } @layer base { diff --git a/src/types/sponsors.ts b/src/types/sponsors.ts index 364c819..935a04d 100644 --- a/src/types/sponsors.ts +++ b/src/types/sponsors.ts @@ -1,4 +1,4 @@ -export type TSponsorTier = 'bronze' | 'silver' | 'gold' | 'platinum' | 'main' +export type TSponsorTier = 'bronze' | 'silver' | 'gold' | 'platinum' | 'main' | 'community' export interface ISponsor { name: string