@fayz-ai/plugin-linkinbio 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/public/BioPageRenderer.d.ts.map +1 -1
- package/dist/public/blocks/ProfileHeader.d.ts.map +1 -1
- package/dist/public/components/MediaKit.d.ts +6 -0
- package/dist/public/components/MediaKit.d.ts.map +1 -0
- package/dist/public/index.js +238 -4
- package/dist/public/index.js.map +1 -1
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +11 -10
- package/src/public/BioPageRenderer.tsx +2 -0
- package/src/public/blocks/ProfileHeader.tsx +16 -18
- package/src/public/components/MediaKit.tsx +249 -0
- package/src/types.ts +9 -0
- package/dist/index.cjs +0 -33
- package/dist/index.cjs.map +0 -1
- package/dist/public/index.cjs +0 -1750
- package/dist/public/index.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/public/data.ts","../../src/public/data.supabase.ts","../../src/public/context.tsx","../../src/public/utils.ts","../../src/public/registry.ts","../../src/public/components/Reveal.tsx","../../src/public/blocks/HeroSection.tsx","../../src/public/blocks/BioSection.tsx","../../src/public/blocks/GallerySection.tsx","../../src/public/blocks/VideoGridSection.tsx","../../src/public/components/PlatformIcon.tsx","../../src/public/blocks/SocialLinksSection.tsx","../../src/public/blocks/EmbedSection.tsx","../../src/public/blocks/ProjectSection.tsx","../../src/public/blocks/StatsSection.tsx","../../src/public/blocks/VenueListSection.tsx","../../src/public/blocks/CTASection.tsx","../../src/public/blocks/TextSection.tsx","../../src/public/blocks/ProfileHeader.tsx","../../src/public/blocks/LinksBlock.tsx","../../src/public/components/Carousel.tsx","../../src/public/blocks/MusicReleasesBlock.tsx","../../src/public/blocks/TourDatesBlock.tsx","../../src/public/blocks/FeaturedBlock.tsx","../../src/public/BioPageRenderer.tsx","../../src/public/BioPage.tsx","../../src/public/createPublicLinkInBioPlugin.ts"],"names":["getSupabaseClientOptional","createContext","jsx","useContext","Instagram","Music","Youtube","Phone","Mail","Twitter","Facebook","Globe","useRef","useState","useEffect","jsxs","SiInstagram","SiYoutube","SiSoundcloud","SiTiktok","SiSpotify","SiWhatsapp","SiApplemusic","SiBandcamp","SiFacebook","SiX","SiTelegram","SiBeatport","SiMixcloud","SiGoogledrive","ExternalLink","ChevronDown","ChevronRight","ChevronLeft","Play","MapPin","ArrowUpRight","ChevronUp","MessageCircle","useParams","createSafeDataProvider","createElement"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { BioPage } from '../types';\n\n// ---------------------------------------------------------------------------\n// BioPageDataProvider — the read seam for the public bio page.\n//\n// Two implementations ship: a mock provider seeded from an in-memory map (host\n// config / demo content) and a Supabase provider (data.supabase.ts). The\n// factory picks between them via createSafeDataProvider — Supabase when a global\n// client is configured, mock otherwise.\n// ---------------------------------------------------------------------------\n\nexport interface BioPageDataProvider {\n /** Resolve a published bio page by its public slug, or null when missing/unpublished. */\n getBySlug(slug: string): Promise<BioPage | null>;\n}\n\nexport interface MockBioPageOptions {\n /** slug → BioPage map used as the mock catalog. */\n seed?: Record<string, BioPage>;\n}\n\nexport function createMockBioPageProvider(options: MockBioPageOptions = {}): BioPageDataProvider {\n const seed = options.seed ?? {};\n return {\n async getBySlug(slug: string): Promise<BioPage | null> {\n return seed[slug] ?? null;\n },\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { getSupabaseClientOptional } from '@fayz-ai/core';\nimport type { BioPage } from '../types';\nimport type { BioPageDataProvider } from './data';\n\nexport interface SupabaseBioPageOptions {\n /**\n * Table holding bio pages. Defaults to `press_kits` — a jsonb `data` column\n * with the full BioPage payload, plus `slug` and `is_published` columns and\n * an RLS policy allowing anon SELECT when `is_published` is true.\n */\n table?: string;\n}\n\nexport function createSupabaseBioPageProvider(options: SupabaseBioPageOptions = {}): BioPageDataProvider {\n const table = options.table ?? 'press_kits';\n return {\n async getBySlug(slug: string): Promise<BioPage | null> {\n const client = getSupabaseClientOptional() as any;\n if (!client) return null;\n const { data, error } = await client\n .from(table)\n .select('data, is_published')\n .eq('slug', slug)\n .maybeSingle();\n if (error || !data) return null;\n if (!data.is_published) return null;\n return data.data as BioPage;\n },\n };\n}\n","import { createContext, useContext, type ReactNode } from 'react';\nimport type { BioPageDataProvider } from './data';\n\nexport interface LinkInBioContextValue {\n provider: BioPageDataProvider;\n /** Optional \"made with\" footer link rendered by BioPageRenderer. */\n poweredBy?: { label: string; url: string };\n /** Fallback document.title suffix when a page omits seo.title. Default 'Bio'. */\n titleSuffix: string;\n}\n\nconst LinkInBioContext = createContext<LinkInBioContextValue | null>(null);\n\nexport function LinkInBioProvider({\n value,\n children,\n}: {\n value: LinkInBioContextValue;\n children: ReactNode;\n}) {\n return <LinkInBioContext.Provider value={value}>{children}</LinkInBioContext.Provider>;\n}\n\nexport function useLinkInBio(): LinkInBioContextValue {\n const ctx = useContext(LinkInBioContext);\n if (!ctx) {\n throw new Error('useLinkInBio must be used within a LinkInBioProvider (mount the plugin Provider).');\n }\n return ctx;\n}\n","import { Instagram, Music, Youtube, Globe, Mail, Phone, Facebook, Twitter } from 'lucide-react';\nimport type { BioBranding } from '../types';\n\n// Lightweight markdown → HTML renderer (bold, italic, links, paragraphs)\nexport function renderMarkdown(md: string): string {\n return md\n .split(/\\n\\n+/)\n .map((block) => {\n const html = block\n .replace(/\\*\\*\\*(.+?)\\*\\*\\*/g, '<strong><em>$1</em></strong>')\n .replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>')\n .replace(/\\*(.+?)\\*/g, '<em>$1</em>')\n .replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, '<a href=\"$2\" target=\"_blank\" rel=\"noopener noreferrer\">$1</a>')\n .replace(/\\n/g, '<br />');\n return `<p>${html}</p>`;\n })\n .join('');\n}\n\nexport const platformColors: Record<string, string> = {\n instagram: '#E4405F',\n spotify: '#1DB954',\n soundcloud: '#FF5500',\n youtube: '#FF0000',\n tiktok: '#000000',\n whatsapp: '#25D366',\n email: '#EA4335',\n twitter: '#1DA1F2',\n facebook: '#1877F2',\n bandcamp: '#629AA9',\n mixcloud: '#5000FF',\n beatport: '#94D500',\n 'apple-music': '#FC3C44',\n deezer: '#FEAA2D',\n telegram: '#0088CC',\n website: '#888888',\n custom: '#888888',\n};\n\nexport const platformLabels: Record<string, string> = {\n instagram: 'Instagram',\n spotify: 'Spotify',\n soundcloud: 'SoundCloud',\n youtube: 'YouTube',\n tiktok: 'TikTok',\n whatsapp: 'WhatsApp',\n email: 'Email',\n twitter: 'Twitter / X',\n facebook: 'Facebook',\n bandcamp: 'Bandcamp',\n mixcloud: 'Mixcloud',\n beatport: 'Beatport',\n 'apple-music': 'Apple Music',\n deezer: 'Deezer',\n telegram: 'Telegram',\n website: 'Website',\n custom: 'Link',\n};\n\nexport const platformIconMap: Record<string, typeof Instagram> = {\n instagram: Instagram,\n spotify: Music,\n soundcloud: Music,\n youtube: Youtube,\n tiktok: Music,\n whatsapp: Phone,\n email: Mail,\n twitter: Twitter,\n facebook: Facebook,\n bandcamp: Music,\n mixcloud: Music,\n beatport: Music,\n 'apple-music': Music,\n deezer: Music,\n telegram: Globe,\n website: Globe,\n custom: Globe,\n};\n\nexport const borderRadiusMap: Record<string, string> = {\n none: '0px',\n sm: '4px',\n md: '8px',\n lg: '16px',\n full: '9999px',\n};\n\nexport function getBrandingVars(branding: BioBranding): Record<string, string> {\n return {\n '--pk-primary': branding.primaryColor,\n '--pk-secondary': branding.secondaryColor,\n '--pk-accent': branding.accentColor,\n '--pk-bg': branding.backgroundColor,\n '--pk-text': branding.textColor,\n '--pk-muted': branding.mutedTextColor,\n '--pk-radius': borderRadiusMap[branding.borderRadius ?? 'md'],\n '--pk-font-heading': branding.fontHeading ?? \"'Space Grotesk', sans-serif\",\n '--pk-font-body': branding.fontBody ?? \"'DM Sans', sans-serif\",\n '--pk-alt-bg': branding.sectionAltBg ?? branding.backgroundColor,\n '--pk-alt-bg2': branding.sectionAltBg2 ?? branding.backgroundColor,\n };\n}\n","import type { ComponentType } from 'react';\nimport type { BioBlock, BioPage } from '../types';\n\n// ---------------------------------------------------------------------------\n// Block registry — the extensibility seam.\n//\n// The 11 built-in blocks are rendered by BioPageRenderer's switch. Hosts that\n// need a niche block type (e.g. a DJ tour map, a course catalog) register it\n// here; BioPageRenderer consults the registry BEFORE its built-in switch, so a\n// registered type wins and unknown types render nothing. This keeps the plugin\n// komi-generic while letting each app extend it without forking.\n//\n// import { registerBlock } from '@fayz-ai/plugin-linkinbio/public'\n// registerBlock('tour-map', ({ block }) => <TourMap stops={block.stops} />)\n// ---------------------------------------------------------------------------\n\n/** Uniform props every registered block component receives. */\nexport interface BlockRenderProps<B = BioBlock> {\n block: B;\n page: BioPage;\n}\n\nexport type BlockComponent<B = BioBlock> = ComponentType<BlockRenderProps<B>>;\n\nconst registry = new Map<string, BlockComponent<never>>();\n\n/** Register a custom block renderer for a `type` string not covered by the built-ins. */\nexport function registerBlock<B extends { type: string }>(type: B['type'], component: BlockComponent<B>): void {\n registry.set(type, component as unknown as BlockComponent<never>);\n}\n\n/** Look up a host-registered block renderer, or undefined for built-in/unknown types. */\nexport function getBlock(type: string): BlockComponent<never> | undefined {\n return registry.get(type);\n}\n\n/** Whether a host has registered a renderer for this type (built-ins are not in the registry). */\nexport function hasBlock(type: string): boolean {\n return registry.has(type);\n}\n","import { useEffect, useRef, useState, type ReactNode } from 'react';\n\n/**\n * Scroll-reveal wrapper: fades + lifts its children into view the first time\n * they intersect the viewport. Respects prefers-reduced-motion (renders shown).\n * Works inside the page's `fixed inset-0` scroll container because the default\n * IntersectionObserver root is the viewport.\n */\nexport function Reveal({\n children,\n delay = 0,\n className,\n}: {\n children: ReactNode;\n delay?: number;\n className?: string;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n const [shown, setShown] = useState(false);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const reduce =\n typeof window !== 'undefined' &&\n window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\n if (reduce || typeof IntersectionObserver === 'undefined') {\n setShown(true);\n return;\n }\n const io = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setShown(true);\n io.disconnect();\n }\n },\n { threshold: 0.1, rootMargin: '0px 0px -6% 0px' },\n );\n io.observe(el);\n return () => io.disconnect();\n }, []);\n\n return (\n <div\n ref={ref}\n className={className}\n style={{\n opacity: shown ? 1 : 0,\n transform: shown ? 'none' : 'translateY(22px)',\n transition: `opacity 0.6s ease ${delay}ms, transform 0.6s cubic-bezier(0.2,0.7,0.2,1) ${delay}ms`,\n willChange: 'opacity, transform',\n }}\n >\n {children}\n </div>\n );\n}\n","import type { HeroSection as HeroSectionType, BioIdentity, BioBranding } from '../../types';\n\ninterface Props {\n section: HeroSectionType;\n identity: BioIdentity;\n branding: BioBranding;\n}\n\nexport default function HeroSection({ section, identity, branding }: Props) {\n const hasLogo = section.showLogo && branding.logoUrl;\n\n return (\n <section\n className=\"relative flex flex-col items-center justify-center min-h-screen overflow-hidden\"\n id={section.id}\n >\n {/* Background image (skipped when no image — overlay carries the visual) */}\n <div className=\"absolute inset-0\">\n {section.backgroundImageUrl && (\n <img\n src={section.backgroundImageUrl}\n alt={identity.name}\n className=\"h-full w-full object-cover\"\n />\n )}\n {section.overlayGradient && (\n <div className=\"absolute inset-0\" style={{ background: section.overlayGradient }} />\n )}\n </div>\n\n {/* Content — always centered */}\n <div className=\"relative z-10 flex flex-col items-center text-center px-6 pt-20 pb-24\">\n {hasLogo ? (\n <img\n src={branding.logoUrl}\n alt={`${identity.name} logo`}\n className=\"mb-6 h-48 w-auto md:h-64 lg:h-80 object-contain drop-shadow-2xl\"\n />\n ) : (\n <h1\n className=\"text-5xl md:text-7xl lg:text-8xl font-bold tracking-tight mb-4 drop-shadow-lg\"\n style={{ fontFamily: 'var(--pk-font-heading)', color: 'var(--pk-text)' }}\n >\n {identity.name}\n </h1>\n )}\n\n {identity.tagline && (\n <p\n className=\"text-lg md:text-xl mb-6 max-w-lg opacity-70\"\n style={{ color: 'var(--pk-text)' }}\n >\n {identity.tagline}\n </p>\n )}\n\n {section.showGenres && identity.genres.length > 0 && (\n <div className=\"flex flex-wrap justify-center gap-2 mb-4\">\n {identity.genres.map((genre) => (\n <span\n key={genre}\n className=\"px-4 py-1.5 text-sm font-semibold backdrop-blur-sm\"\n style={{\n backgroundColor: 'rgba(255,255,255,0.08)',\n color: 'var(--pk-primary)',\n border: '1px solid rgba(255,255,255,0.12)',\n borderRadius: '9999px',\n }}\n >\n {genre}\n </span>\n ))}\n </div>\n )}\n\n {section.showLocation && identity.location && (\n <p className=\"text-sm mt-2 opacity-50\" style={{ color: 'var(--pk-text)' }}>\n {identity.location}\n </p>\n )}\n\n {section.ctaText && section.ctaUrl && (\n <a\n href={section.ctaUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"mt-8 inline-block px-10 py-4 font-bold text-lg tracking-wider transition-transform hover:scale-105\"\n style={{\n backgroundColor: 'var(--pk-primary)',\n color: 'var(--pk-bg)',\n borderRadius: '9999px',\n }}\n >\n {section.ctaText}\n </a>\n )}\n </div>\n\n {/* Scroll hint */}\n <div className=\"absolute bottom-8 left-1/2 -translate-x-1/2 z-10 animate-bounce opacity-40\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ color: 'var(--pk-text)' }}>\n <path d=\"M12 5v14M5 12l7 7 7-7\" />\n </svg>\n </div>\n </section>\n );\n}\n","import type { BioSection as BioSectionType } from '../../types';\nimport { renderMarkdown } from '../utils';\n\ninterface Props {\n section: BioSectionType;\n}\n\nexport default function BioSection({ section }: Props) {\n const hasImage = section.imageUrl && section.imagePosition !== 'none';\n const isTop = section.imagePosition === 'top';\n const isSide = section.imagePosition === 'left' || section.imagePosition === 'right';\n const isRight = section.imagePosition === 'right';\n\n return (\n <section className=\"py-16 md:py-24 px-6\" id={section.id}>\n <div className=\"max-w-4xl mx-auto\">\n {section.title && (\n <h2\n className=\"text-3xl md:text-4xl font-bold mb-8\"\n style={{ fontFamily: 'var(--pk-font-heading)', color: 'var(--pk-text)' }}\n >\n {section.title}\n </h2>\n )}\n\n <div className={isSide && hasImage ? `grid grid-cols-1 md:grid-cols-2 gap-8 md:gap-12 items-start` : ''}>\n {hasImage && isTop && (\n <img\n src={section.imageUrl}\n alt=\"\"\n className=\"w-full max-h-96 object-cover mb-8\"\n style={{ borderRadius: 'var(--pk-radius)' }}\n loading=\"lazy\"\n />\n )}\n\n {hasImage && isSide && !isRight && (\n <img\n src={section.imageUrl}\n alt=\"\"\n className=\"w-full aspect-[3/4] object-cover\"\n style={{ borderRadius: 'var(--pk-radius)' }}\n loading=\"lazy\"\n />\n )}\n\n <div\n className=\"prose prose-invert max-w-none text-base md:text-lg leading-relaxed [&_p]:mb-4 [&_strong]:font-semibold [&_a]:underline [&_a]:decoration-[var(--pk-primary)]\"\n style={{ color: 'var(--pk-muted)' }}\n dangerouslySetInnerHTML={{ __html: renderMarkdown(section.content) }}\n />\n\n {hasImage && isSide && isRight && (\n <img\n src={section.imageUrl}\n alt=\"\"\n className=\"w-full aspect-[3/4] object-cover\"\n style={{ borderRadius: 'var(--pk-radius)' }}\n loading=\"lazy\"\n />\n )}\n </div>\n </div>\n </section>\n );\n}\n","import { useState } from 'react';\nimport type { GallerySection as GallerySectionType, BioMediaItem } from '../../types';\n\ninterface Props {\n section: GallerySectionType;\n}\n\nfunction isInstagramEmbed(item: BioMediaItem) {\n return item.url.includes('instagram.com');\n}\n\nfunction getInstagramEmbedUrl(url: string) {\n // Convert instagram reel/post URL to embed URL\n const match = url.match(/instagram\\.com\\/(reel|p)\\/([^/?]+)/);\n if (match) return `https://www.instagram.com/${match[1]}/${match[2]}/embed`;\n return url;\n}\n\nfunction MediaItem({ item, index, cols, isFeatured, onImageClick }: {\n item: BioMediaItem;\n index: number;\n cols: number;\n isFeatured: boolean;\n onImageClick: (i: number) => void;\n}) {\n if (isInstagramEmbed(item)) {\n return (\n <div\n className={`overflow-hidden ${isFeatured && index === 0 ? 'col-span-2' : ''}`}\n style={{ borderRadius: 'var(--pk-radius)' }}\n >\n <iframe\n src={getInstagramEmbedUrl(item.url)}\n className=\"w-full border-0\"\n style={{ minHeight: cols <= 2 ? '500px' : '420px' }}\n loading=\"lazy\"\n // @ts-expect-error React wants lowercase for custom DOM attributes\n allowtransparency=\"true\"\n allow=\"encrypted-media\"\n title={item.alt ?? 'Instagram'}\n />\n </div>\n );\n }\n\n return (\n <img\n src={item.url}\n alt={item.alt ?? ''}\n className={`w-full object-cover cursor-pointer hover:opacity-90 transition-opacity ${\n isFeatured && index === 0 ? 'col-span-2 aspect-[16/9]' : 'aspect-square'\n }`}\n style={{ borderRadius: 'var(--pk-radius)' }}\n loading=\"lazy\"\n onClick={() => onImageClick(index)}\n />\n );\n}\n\nexport default function GallerySection({ section }: Props) {\n const [lightboxIdx, setLightboxIdx] = useState<number | null>(null);\n const cols = section.columns ?? 3;\n const isFeatured = section.layout === 'featured-grid';\n const isCarousel = section.layout === 'carousel';\n\n // Only images for lightbox navigation\n const imageItems = section.media.filter((m) => !isInstagramEmbed(m));\n\n return (\n <section className=\"py-16 md:py-24 px-6\" id={section.id}>\n <div className=\"max-w-5xl mx-auto\">\n {section.title && (\n <h2\n className=\"text-3xl md:text-4xl font-bold mb-8\"\n style={{ fontFamily: 'var(--pk-font-heading)', color: 'var(--pk-text)' }}\n >\n {section.title}\n </h2>\n )}\n\n {isCarousel ? (\n <div className=\"flex gap-4 overflow-x-auto snap-x snap-mandatory pb-4 -mx-6 px-6 scrollbar-hide\">\n {section.media.map((item, i) => (\n <div key={i} className=\"flex-none w-72 md:w-96 snap-center\">\n <MediaItem item={item} index={i} cols={cols} isFeatured={false} onImageClick={setLightboxIdx} />\n </div>\n ))}\n </div>\n ) : (\n <div\n className={`grid gap-3 md:gap-4 ${\n isFeatured\n ? 'grid-cols-2'\n : cols === 2\n ? 'grid-cols-1 sm:grid-cols-2'\n : cols === 4\n ? 'grid-cols-2 md:grid-cols-4'\n : 'grid-cols-2 md:grid-cols-3'\n }`}\n >\n {section.media.map((item, i) => (\n <MediaItem key={i} item={item} index={i} cols={cols} isFeatured={isFeatured} onImageClick={setLightboxIdx} />\n ))}\n </div>\n )}\n\n {/* Lightbox — images only */}\n {lightboxIdx !== null && imageItems[lightboxIdx] && (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/90 p-4\"\n onClick={() => setLightboxIdx(null)}\n >\n <button\n className=\"absolute top-4 right-4 text-white text-3xl font-light hover:opacity-70 z-10\"\n onClick={() => setLightboxIdx(null)}\n >\n ×\n </button>\n <button\n className=\"absolute left-4 top-1/2 -translate-y-1/2 text-white text-4xl font-light hover:opacity-70 z-10\"\n onClick={(e) => {\n e.stopPropagation();\n setLightboxIdx((lightboxIdx - 1 + imageItems.length) % imageItems.length);\n }}\n >\n ‹\n </button>\n <button\n className=\"absolute right-4 top-1/2 -translate-y-1/2 text-white text-4xl font-light hover:opacity-70 z-10\"\n onClick={(e) => {\n e.stopPropagation();\n setLightboxIdx((lightboxIdx + 1) % imageItems.length);\n }}\n >\n ›\n </button>\n <img\n src={imageItems[lightboxIdx].url}\n alt={imageItems[lightboxIdx].alt ?? ''}\n className=\"max-h-[85vh] max-w-[90vw] object-contain\"\n onClick={(e) => e.stopPropagation()}\n />\n </div>\n )}\n </div>\n </section>\n );\n}\n","import type { VideoGridSection as VideoGridSectionType } from '../../types';\n\ninterface Props {\n section: VideoGridSectionType;\n}\n\nexport default function VideoGridSection({ section }: Props) {\n const isFeatured = section.layout === 'featured';\n const isList = section.layout === 'list';\n\n return (\n <section className=\"py-16 md:py-24 px-6\" id={section.id}>\n <div className=\"max-w-5xl mx-auto\">\n {section.title && (\n <h2\n className=\"text-3xl md:text-4xl font-bold mb-8\"\n style={{ fontFamily: 'var(--pk-font-heading)', color: 'var(--pk-text)' }}\n >\n {section.title}\n </h2>\n )}\n\n {isFeatured && section.videos.length > 0 ? (\n <div className=\"space-y-6\">\n {/* Featured video */}\n <div className=\"aspect-video w-full overflow-hidden\" style={{ borderRadius: 'var(--pk-radius)' }}>\n <iframe\n src={`https://www.youtube.com/embed/${section.videos[0].videoId}`}\n title={section.videos[0].title ?? 'Video'}\n className=\"h-full w-full\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n loading=\"lazy\"\n />\n </div>\n {section.videos[0].title && (\n <p className=\"text-sm font-medium\" style={{ color: 'var(--pk-muted)' }}>\n {section.videos[0].title}\n </p>\n )}\n {/* Remaining videos */}\n {section.videos.length > 1 && (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n {section.videos.slice(1).map((video, i) => (\n <div key={i}>\n <div className=\"aspect-video overflow-hidden\" style={{ borderRadius: 'var(--pk-radius)' }}>\n <iframe\n src={`https://www.youtube.com/embed/${video.videoId}`}\n title={video.title ?? 'Video'}\n className=\"h-full w-full\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n loading=\"lazy\"\n />\n </div>\n {video.title && (\n <p className=\"mt-2 text-sm\" style={{ color: 'var(--pk-muted)' }}>\n {video.title}\n </p>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n ) : (\n <div className={`grid gap-4 md:gap-6 ${isList ? 'grid-cols-1' : 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3'}`}>\n {section.videos.map((video, i) => (\n <div key={i}>\n <div className=\"aspect-video overflow-hidden\" style={{ borderRadius: 'var(--pk-radius)' }}>\n <iframe\n src={`https://www.youtube.com/embed/${video.videoId}`}\n title={video.title ?? 'Video'}\n className=\"h-full w-full\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n loading=\"lazy\"\n />\n </div>\n {video.title && (\n <p className=\"mt-2 text-sm\" style={{ color: 'var(--pk-muted)' }}>\n {video.title}\n </p>\n )}\n </div>\n ))}\n {section.channelUrl && (\n <a\n href={section.channelUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"aspect-video overflow-hidden flex items-center justify-center border border-white/10 hover:border-white/30 transition-colors\"\n style={{ borderRadius: 'var(--pk-radius)', background: 'var(--pk-alt-bg, rgba(255,255,255,0.05))' }}\n >\n <span className=\"text-lg font-semibold\" style={{ color: 'var(--pk-text)', fontFamily: 'var(--pk-font-heading)' }}>\n Ver todos →\n </span>\n </a>\n )}\n </div>\n )}\n </div>\n </section>\n );\n}\n","import type { CSSProperties, ComponentType } from 'react';\nimport {\n SiInstagram,\n SiYoutube,\n SiSoundcloud,\n SiTiktok,\n SiSpotify,\n SiWhatsapp,\n SiApplemusic,\n SiBandcamp,\n SiFacebook,\n SiX,\n SiTelegram,\n SiBeatport,\n SiGoogledrive,\n SiMixcloud,\n} from 'react-icons/si';\nimport { Globe, Mail, ExternalLink } from 'lucide-react';\n\ntype IconProps = { size?: number | string; style?: CSSProperties; className?: string };\n\n// Real brand glyphs for social/platform links (react-icons → simple-icons set).\nconst BRAND: Record<string, ComponentType<IconProps>> = {\n instagram: SiInstagram,\n youtube: SiYoutube,\n soundcloud: SiSoundcloud,\n tiktok: SiTiktok,\n spotify: SiSpotify,\n whatsapp: SiWhatsapp,\n 'apple-music': SiApplemusic,\n bandcamp: SiBandcamp,\n facebook: SiFacebook,\n twitter: SiX,\n telegram: SiTelegram,\n beatport: SiBeatport,\n mixcloud: SiMixcloud,\n drive: SiGoogledrive,\n email: Mail,\n website: Globe,\n};\n\n/** Renders the real brand icon for a platform, falling back to a generic link glyph. */\nexport function PlatformIcon({\n platform,\n size = 20,\n style,\n className,\n}: {\n platform: string;\n size?: number;\n style?: CSSProperties;\n className?: string;\n}) {\n const Icon = BRAND[platform] ?? ExternalLink;\n return <Icon size={size} style={style} className={className} />;\n}\n","import { ExternalLink } from 'lucide-react';\nimport type { SocialLinksSection as SocialLinksSectionType } from '../../types';\nimport { platformColors, platformLabels } from '../utils';\nimport { PlatformIcon } from '../components/PlatformIcon';\n\ninterface Props {\n section: SocialLinksSectionType;\n}\n\nexport default function SocialLinksSection({ section }: Props) {\n const layout = section.layout ?? 'buttons';\n\n return (\n <section className=\"py-16 md:py-24 px-6\" id={section.id}>\n <div className=\"max-w-xl mx-auto\">\n {section.title && (\n <h2\n className=\"text-3xl md:text-4xl font-bold mb-10 text-center\"\n style={{ fontFamily: 'var(--pk-font-heading)', color: 'var(--pk-text)' }}\n >\n {section.title}\n </h2>\n )}\n\n {layout === 'icons' && (\n <div className=\"flex flex-wrap justify-center gap-5\">\n {section.links.map((link) => {\n const color = platformColors[link.platform];\n return (\n <a\n key={link.platform + link.url}\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"group flex items-center justify-center w-16 h-16 rounded-full transition-all duration-300 hover:scale-110 hover:shadow-lg\"\n style={{\n backgroundColor: color + '15',\n boxShadow: `0 0 0 1px ${color}25`,\n }}\n title={link.label ?? platformLabels[link.platform]}\n >\n <PlatformIcon platform={link.platform} size={26} style={{ color }} />\n </a>\n );\n })}\n </div>\n )}\n\n {layout === 'buttons' && (\n <div className=\"flex flex-col gap-3\">\n {section.links.map((link) => {\n const color = platformColors[link.platform];\n return (\n <a\n key={link.platform + link.url}\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"group relative flex items-center gap-5 px-6 py-4 font-medium transition-all duration-300 hover:scale-[1.02] overflow-hidden\"\n style={{\n backgroundColor: color + '10',\n color: 'var(--pk-text)',\n borderRadius: 'var(--pk-radius)',\n border: `1px solid ${color}30`,\n }}\n >\n {/* Hover glow */}\n <div\n className=\"absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity duration-300\"\n style={{ background: `linear-gradient(135deg, ${color}18, transparent 60%)` }}\n />\n\n <div className=\"relative z-10 flex items-center justify-center w-10 h-10 rounded-full shrink-0\"\n style={{ backgroundColor: color + '20' }}\n >\n <PlatformIcon platform={link.platform} size={20} style={{ color }} />\n </div>\n\n <span className=\"relative z-10 text-base\">{link.label ?? platformLabels[link.platform]}</span>\n\n <ExternalLink\n size={16}\n className=\"relative z-10 ml-auto opacity-0 group-hover:opacity-50 transition-opacity duration-300\"\n style={{ color: 'var(--pk-text)' }}\n />\n </a>\n );\n })}\n </div>\n )}\n\n {layout === 'list' && (\n <div className=\"space-y-1\">\n {section.links.map((link) => {\n const color = platformColors[link.platform];\n return (\n <a\n key={link.platform + link.url}\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"group flex items-center gap-4 py-4 px-3 transition-all duration-200 hover:bg-white/5 rounded-lg\"\n >\n <div className=\"flex items-center justify-center w-9 h-9 rounded-full shrink-0\"\n style={{ backgroundColor: color + '18' }}\n >\n <PlatformIcon platform={link.platform} size={18} style={{ color }} />\n </div>\n <span className=\"text-sm font-medium\" style={{ color: 'var(--pk-text)' }}>\n {link.label ?? platformLabels[link.platform]}\n </span>\n <ExternalLink\n size={14}\n className=\"ml-auto opacity-0 group-hover:opacity-40 transition-opacity\"\n style={{ color: 'var(--pk-text)' }}\n />\n </a>\n );\n })}\n </div>\n )}\n </div>\n </section>\n );\n}\n","import type { EmbedSection as EmbedSectionType } from '../../types';\n\ninterface Props {\n section: EmbedSectionType;\n}\n\nexport default function EmbedSection({ section }: Props) {\n const isVideo = section.aspectRatio === '16:9' || section.embedType === 'youtube';\n const height = section.height ?? (isVideo ? undefined : 352);\n\n return (\n <section className=\"py-16 md:py-24 px-6\" id={section.id}>\n <div className=\"max-w-4xl mx-auto\">\n {section.title && (\n <h2\n className=\"text-3xl md:text-4xl font-bold mb-8\"\n style={{ fontFamily: 'var(--pk-font-heading)', color: 'var(--pk-text)' }}\n >\n {section.title}\n </h2>\n )}\n\n {section.embedHtml && section.embedType === 'custom' ? (\n <div\n className=\"overflow-hidden\"\n style={{ borderRadius: 'var(--pk-radius)' }}\n dangerouslySetInnerHTML={{ __html: section.embedHtml }}\n />\n ) : isVideo ? (\n <div className=\"aspect-video overflow-hidden\" style={{ borderRadius: 'var(--pk-radius)' }}>\n <iframe\n src={section.embedUrl}\n className=\"h-full w-full\"\n allow=\"autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture\"\n loading=\"lazy\"\n title={section.title ?? 'Embed'}\n />\n </div>\n ) : (\n <div className=\"overflow-hidden\" style={{ borderRadius: 'var(--pk-radius)', height }}>\n <iframe\n src={section.embedUrl}\n className=\"w-full h-full\"\n allow=\"autoplay; clipboard-write; encrypted-media; fullscreen\"\n loading=\"lazy\"\n title={section.title ?? 'Embed'}\n />\n </div>\n )}\n </div>\n </section>\n );\n}\n","import type { ProjectSection as ProjectSectionType } from '../../types';\nimport { renderMarkdown } from '../utils';\n\ninterface Props {\n section: ProjectSectionType;\n}\n\nexport default function ProjectSection({ section }: Props) {\n const isSideBySide = section.layout === 'side-by-side';\n const hasMedia = section.media && section.media.length > 0;\n const firstMedia = hasMedia ? section.media![0] : null;\n const isVideo = firstMedia?.type === 'video';\n\n const MediaBlock = () => {\n if (!firstMedia) return null;\n if (isVideo) {\n return (\n <div className=\"relative w-full\" style={{ paddingBottom: '56.25%', borderRadius: 'var(--pk-radius)', overflow: 'hidden' }}>\n <iframe\n src={firstMedia.url}\n className=\"absolute inset-0 w-full h-full\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n loading=\"lazy\"\n title={firstMedia.alt ?? section.title ?? 'Video'}\n />\n </div>\n );\n }\n return (\n <img\n src={firstMedia.url}\n alt={firstMedia.alt ?? ''}\n className=\"w-full h-full object-cover\"\n style={{ borderRadius: 'var(--pk-radius)' }}\n loading=\"lazy\"\n />\n );\n };\n\n const ContentBlock = () => (\n <div className=\"flex flex-col justify-center\">\n {section.label && (\n <span\n className=\"inline-block self-start px-4 py-1.5 text-xs font-bold uppercase tracking-[0.15em] mb-5\"\n style={{\n backgroundColor: 'transparent',\n color: 'var(--pk-accent)',\n border: '1px solid var(--pk-accent)',\n borderRadius: '4px',\n }}\n >\n {section.label}\n </span>\n )}\n\n {section.title && (\n <h2\n className=\"text-3xl md:text-4xl lg:text-5xl font-bold mb-5\"\n style={{ fontFamily: 'var(--pk-font-heading)', color: 'var(--pk-text)' }}\n >\n {section.title}\n </h2>\n )}\n\n {section.content && (\n <div\n className=\"text-base md:text-lg leading-relaxed [&_p]:mb-4 [&_strong]:font-semibold [&_strong]:text-white [&_em]:italic\"\n style={{ color: 'var(--pk-muted)' }}\n dangerouslySetInnerHTML={{ __html: renderMarkdown(section.content) }}\n />\n )}\n\n {section.tags && section.tags.length > 0 && (\n <div className=\"flex flex-wrap gap-2 mt-5\">\n {section.tags.map((tag) => (\n <span\n key={tag}\n className=\"px-3 py-1 text-xs font-medium\"\n style={{\n color: 'var(--pk-muted)',\n border: '1px solid rgba(255,255,255,0.1)',\n borderRadius: 'var(--pk-radius)',\n }}\n >\n {tag}\n </span>\n ))}\n </div>\n )}\n\n {section.links && section.links.length > 0 && (\n <div className=\"flex flex-wrap gap-4 mt-6\">\n {section.links.map((link) => (\n <a\n key={link.url}\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-sm font-medium underline underline-offset-4 hover:opacity-80 transition-opacity\"\n style={{ color: 'var(--pk-primary)' }}\n >\n {link.label}\n </a>\n ))}\n </div>\n )}\n </div>\n );\n\n return (\n <section className=\"py-20 md:py-28 px-6\" id={section.id}>\n <div className=\"max-w-5xl mx-auto\">\n {isSideBySide && hasMedia ? (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8 md:gap-16 items-center\">\n <div className=\"order-1\">\n <ContentBlock />\n </div>\n <div className=\"order-2\">\n <MediaBlock />\n </div>\n </div>\n ) : (\n <div>\n <ContentBlock />\n {hasMedia && (\n <div className={`grid grid-cols-1 gap-4 mt-8 ${section.media!.length > 1 ? 'md:grid-cols-2' : ''}`}>\n {section.media!.map((item, i) =>\n item.type === 'video' ? (\n <div key={i} className=\"aspect-video overflow-hidden\" style={{ borderRadius: 'var(--pk-radius)' }}>\n <iframe\n src={item.url}\n className=\"h-full w-full\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n loading=\"lazy\"\n title={item.alt ?? 'Video'}\n />\n </div>\n ) : (\n <img\n key={i}\n src={item.url}\n alt={item.alt ?? ''}\n className=\"w-full aspect-[4/3] object-cover\"\n style={{ borderRadius: 'var(--pk-radius)' }}\n loading=\"lazy\"\n />\n )\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </section>\n );\n}\n","import type { StatsSection as StatsSectionType } from '../../types';\n\ninterface Props {\n section: StatsSectionType;\n}\n\nexport default function StatsSection({ section }: Props) {\n const isGrid = section.layout === 'grid';\n\n return (\n <section className=\"py-16 md:py-24 px-6\" id={section.id}>\n <div className=\"max-w-4xl mx-auto\">\n {section.title && (\n <h2\n className=\"text-3xl md:text-4xl font-bold mb-8 text-center\"\n style={{ fontFamily: 'var(--pk-font-heading)', color: 'var(--pk-text)' }}\n >\n {section.title}\n </h2>\n )}\n\n <div\n className={\n isGrid\n ? 'grid grid-cols-2 md:grid-cols-4 gap-6'\n : 'flex flex-wrap justify-center gap-8 md:gap-12'\n }\n >\n {section.stats.map((stat, i) => (\n <div key={i} className=\"text-center\">\n <div\n className=\"text-3xl md:text-4xl font-bold mb-1\"\n style={{ fontFamily: 'var(--pk-font-heading)', color: 'var(--pk-primary)' }}\n >\n {stat.value}\n </div>\n <div className=\"text-sm\" style={{ color: 'var(--pk-muted)' }}>\n {stat.label}\n </div>\n </div>\n ))}\n </div>\n </div>\n </section>\n );\n}\n","import type { VenueListSection as VenueListSectionType } from '../../types';\n\ninterface Props {\n section: VenueListSectionType;\n}\n\nexport default function VenueListSection({ section }: Props) {\n const layout = section.layout ?? 'grid';\n\n return (\n <section className=\"py-16 md:py-24 px-6\" id={section.id}>\n <div className=\"max-w-5xl mx-auto\">\n {section.title && (\n <h2\n className=\"text-3xl md:text-4xl font-bold mb-10\"\n style={{ fontFamily: 'var(--pk-font-heading)', color: 'var(--pk-text)' }}\n >\n {section.title}\n </h2>\n )}\n\n {layout === 'logo-cloud' ? (\n <div className=\"flex flex-wrap justify-center gap-6 md:gap-8\">\n {section.venues.map((venue, i) => (\n <div key={i} className=\"flex flex-col items-center gap-2\">\n {venue.logoUrl ? (\n <img src={venue.logoUrl} alt={venue.name} className=\"h-12 w-12 object-contain opacity-70\" loading=\"lazy\" />\n ) : (\n <div\n className=\"h-12 w-12 flex items-center justify-center text-lg font-bold opacity-70\"\n style={{ backgroundColor: 'rgba(255,255,255,0.06)', color: 'var(--pk-text)', borderRadius: 'var(--pk-radius)' }}\n >\n {venue.name[0]}\n </div>\n )}\n <span className=\"text-xs text-center\" style={{ color: 'var(--pk-muted)' }}>{venue.name}</span>\n </div>\n ))}\n </div>\n ) : layout === 'list' ? (\n <div className=\"space-y-3\">\n {section.venues.map((venue, i) => (\n <div\n key={i}\n className=\"flex items-center justify-between py-3 px-4\"\n style={{ backgroundColor: 'rgba(255,255,255,0.04)', borderRadius: 'var(--pk-radius)' }}\n >\n <span className=\"font-medium\" style={{ color: 'var(--pk-text)' }}>{venue.name}</span>\n <span className=\"text-sm\" style={{ color: 'var(--pk-muted)' }}>\n {[venue.city, venue.year].filter(Boolean).join(' · ')}\n </span>\n </div>\n ))}\n </div>\n ) : (\n /* Organic flowing tag cloud */\n <div className=\"flex flex-wrap gap-3\">\n {section.venues.map((venue, i) => {\n // Vary sizes based on name length and position for organic feel\n const isLong = venue.name.length > 12;\n const isShort = venue.name.length < 6;\n const sizeClass = isLong ? 'text-base md:text-lg px-6 py-3' : isShort ? 'text-sm px-4 py-2.5' : 'text-sm md:text-base px-5 py-3';\n // Alternate subtle visual weight\n const isHighlight = i % 5 === 0 || i % 7 === 0;\n return (\n <div\n key={i}\n className={`inline-flex flex-col items-start transition-all duration-300 hover:scale-105 ${sizeClass}`}\n style={{\n backgroundColor: isHighlight ? 'rgba(255,255,255,0.08)' : 'rgba(255,255,255,0.03)',\n border: isHighlight ? '1px solid rgba(255,255,255,0.12)' : '1px solid rgba(255,255,255,0.06)',\n borderRadius: '9999px',\n }}\n >\n <span className=\"font-semibold whitespace-nowrap\" style={{ color: 'var(--pk-text)' }}>\n {venue.name}\n {venue.city && (\n <span className=\"font-normal ml-2 opacity-50\" style={{ color: 'var(--pk-muted)', fontSize: '0.8em' }}>\n {venue.city}\n </span>\n )}\n </span>\n </div>\n );\n })}\n </div>\n )}\n </div>\n </section>\n );\n}\n","import type { CTASection as CTASectionType } from '../../types';\nimport { renderMarkdown } from '../utils';\n\ninterface Props {\n section: CTASectionType;\n}\n\nexport default function CTASection({ section }: Props) {\n return (\n <section className=\"py-24 md:py-36 px-6 text-center\" id={section.id}>\n <div className=\"max-w-2xl mx-auto\">\n {section.title && (\n <h2\n className=\"text-4xl md:text-5xl lg:text-6xl font-bold mb-6\"\n style={{ fontFamily: 'var(--pk-font-heading)', color: 'var(--pk-text)' }}\n >\n {section.title}\n </h2>\n )}\n\n {section.content && (\n <div\n className=\"text-base md:text-lg mb-10 [&_p]:mb-2\"\n style={{ color: 'var(--pk-muted)' }}\n dangerouslySetInnerHTML={{ __html: renderMarkdown(section.content) }}\n />\n )}\n\n <div className=\"flex flex-col sm:flex-row items-center justify-center gap-5\">\n {section.ctaButtons.map((btn) => {\n const isPrimary = btn.variant === 'primary';\n const isOutline = btn.variant === 'outline';\n return (\n <a\n key={btn.url}\n href={btn.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center justify-center px-10 py-4 text-base font-bold tracking-[0.1em] uppercase transition-all duration-300 hover:scale-105 min-w-[200px]\"\n style={{\n backgroundColor: isPrimary ? 'var(--pk-primary)' : isOutline ? 'transparent' : 'var(--pk-secondary)',\n color: isPrimary ? 'var(--pk-bg)' : 'var(--pk-text)',\n border: isOutline ? '2px solid rgba(255,255,255,0.2)' : 'none',\n borderRadius: '9999px',\n boxShadow: isPrimary ? '0 8px 32px rgba(0,0,0,0.3)' : 'none',\n }}\n >\n {btn.label}\n </a>\n );\n })}\n </div>\n </div>\n </section>\n );\n}\n","import type { TextSection as TextSectionType } from '../../types';\nimport { renderMarkdown } from '../utils';\n\ninterface Props {\n section: TextSectionType;\n}\n\nexport default function TextSection({ section }: Props) {\n return (\n <section className=\"py-16 md:py-24 px-6\" id={section.id}>\n <div className=\"max-w-3xl mx-auto\">\n {section.title && (\n <h2\n className=\"text-3xl md:text-4xl font-bold mb-8\"\n style={{ fontFamily: 'var(--pk-font-heading)', color: 'var(--pk-text)' }}\n >\n {section.title}\n </h2>\n )}\n\n <div\n className=\"text-base md:text-lg leading-relaxed [&_p]:mb-4 [&_strong]:font-semibold [&_em]:italic [&_a]:underline [&_a]:decoration-[var(--pk-primary)]\"\n style={{ color: 'var(--pk-muted)' }}\n dangerouslySetInnerHTML={{ __html: renderMarkdown(section.content) }}\n />\n </div>\n </section>\n );\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport type { ProfileHeaderSection, BioPage } from '../../types';\nimport { platformLabels } from '../utils';\nimport { PlatformIcon } from '../components/PlatformIcon';\n\ninterface Props {\n section: ProfileHeaderSection;\n page: BioPage;\n}\n\nexport default function ProfileHeader({ section, page }: Props) {\n const { identity, branding } = page;\n const isHub = page.layout === 'hub';\n const socials = section.socials ?? page.socialLinks ?? [];\n const hasLogo = section.showLogo && branding.logoUrl;\n\n // Scroll-driven parallax: the image lags while the logo lifts + fades on its\n // own curve, so the hero opens clean (just the logo) and dissolves on scroll.\n const heroRef = useRef<HTMLDivElement>(null);\n const [sy, setSy] = useState(0);\n useEffect(() => {\n const container = document.querySelector('.fixed.inset-0') as HTMLElement | null;\n if (!container) return;\n const reduce = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\n if (reduce) return;\n let raf = 0;\n const onScroll = () => {\n if (raf) return;\n raf = requestAnimationFrame(() => {\n setSy(container.scrollTop);\n raf = 0;\n });\n };\n container.addEventListener('scroll', onScroll, { passive: true });\n return () => {\n container.removeEventListener('scroll', onScroll);\n if (raf) cancelAnimationFrame(raf);\n };\n }, []);\n\n const heroH = heroRef.current?.offsetHeight ?? 700;\n const p = Math.min(1, sy / heroH); // 0 → 1 over the hero's height\n // imageOffsetTop nudges the image content DOWN inside the frame (not a margin);\n // the baseline scale (>1) leaves overflow room so no gap opens at the top.\n const imageOffsetTop = section.imageOffsetTop ?? '0px';\n const imageTransform = `translateY(calc(${imageOffsetTop} + ${sy * 0.22}px)) scale(1.18)`;\n const logoTransform = `translateY(${-sy * 0.5}px) scale(${1 - p * 0.12})`;\n const logoOpacity = Math.max(0, 1 - p * 1.25);\n const hintOpacity = Math.max(0, 1 - p * 4);\n\n const scrollTo = (id: string) => {\n const el = typeof document !== 'undefined' ? document.getElementById(id) : null;\n el?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n };\n\n return (\n <header id={section.id} className=\"relative\">\n {/* Hero — fills the viewport so the page opens clean on just the logo. */}\n <div\n ref={heroRef}\n className={`relative w-full h-[86vh] max-h-[880px] overflow-hidden ${\n isHub ? 'sm:rounded-[26px]' : ''\n }`}\n >\n {section.imageUrl && (\n <img\n src={section.imageUrl}\n alt={identity.name}\n className=\"absolute inset-0 h-full w-full object-cover will-change-transform\"\n style={{ transform: imageTransform, objectPosition: section.imageObjectPosition }}\n />\n )}\n <div\n className=\"absolute inset-0\"\n style={{\n background:\n section.overlayGradient ??\n 'linear-gradient(to bottom, rgba(0,0,0,0.05) 0%, rgba(0,0,0,0.35) 60%, var(--pk-bg) 100%)',\n }}\n />\n\n {/* Logo (or name) overlaid — its own motion curve */}\n <div className=\"absolute inset-x-0 bottom-0 flex flex-col items-center text-center px-6 pb-14\">\n {hasLogo ? (\n <img\n src={branding.logoUrl}\n alt={`${identity.name} logo`}\n className=\"w-[82%] max-w-[380px] h-auto object-contain drop-shadow-[0_4px_24px_rgba(0,0,0,0.55)] will-change-transform\"\n style={{ transform: logoTransform, opacity: logoOpacity }}\n />\n ) : (\n <h1\n className=\"text-5xl sm:text-6xl font-bold tracking-tight drop-shadow-lg will-change-transform\"\n style={{\n fontFamily: 'var(--pk-font-heading)',\n color: 'var(--pk-text)',\n transform: logoTransform,\n opacity: logoOpacity,\n }}\n >\n {identity.name}\n </h1>\n )}\n </div>\n\n {/* Scroll hint */}\n <div\n className=\"absolute bottom-4 left-1/2 -translate-x-1/2 animate-bounce\"\n style={{ opacity: hintOpacity, color: 'var(--pk-text)' }}\n >\n <ChevronDown size={22} />\n </div>\n </div>\n\n {/* Below the hero (revealed on scroll): tagline, socials, nav */}\n {(identity.tagline || (section.showLocation && identity.location)) && (\n <div className=\"text-center mt-5 px-4\">\n {identity.tagline && (\n <p className=\"text-base font-medium\" style={{ color: 'var(--pk-text)' }}>\n {identity.tagline}\n </p>\n )}\n {section.showLocation && identity.location && (\n <p className=\"text-xs mt-1 opacity-60\" style={{ color: 'var(--pk-muted)' }}>\n {identity.location}\n </p>\n )}\n </div>\n )}\n\n {/* Social icon row */}\n {socials.length > 0 && (\n <div className=\"flex flex-wrap justify-center gap-3 mt-4 px-4\">\n {socials.map((link) => (\n <a\n key={link.platform + link.url}\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={link.label ?? platformLabels[link.platform] ?? 'Link'}\n className=\"flex items-center justify-center w-11 h-11 rounded-full transition-transform hover:scale-110\"\n style={{ backgroundColor: 'rgba(255,255,255,0.07)', color: 'var(--pk-text)' }}\n >\n <PlatformIcon platform={link.platform} size={19} />\n </a>\n ))}\n </div>\n )}\n\n {/* Quick-nav pills */}\n {section.navPills && section.navPills.length > 0 && (\n <nav\n className=\"flex gap-2 overflow-x-auto scrollbar-hide mt-4 px-4 pb-1 justify-start sm:justify-center\"\n aria-label=\"Seções\"\n >\n {section.navPills.map((pill) => (\n <button\n key={pill.targetId}\n type=\"button\"\n onClick={() => scrollTo(pill.targetId)}\n className=\"whitespace-nowrap px-4 py-2 text-sm font-medium rounded-full transition-colors shrink-0\"\n style={{\n backgroundColor: 'rgba(255,255,255,0.06)',\n color: 'var(--pk-text)',\n border: '1px solid rgba(255,255,255,0.08)',\n }}\n >\n {pill.label}\n </button>\n ))}\n </nav>\n )}\n </header>\n );\n}\n","import { ChevronRight } from 'lucide-react';\nimport type { LinksSection, LinkCardItem } from '../../types';\nimport { PlatformIcon } from '../components/PlatformIcon';\n\ninterface Props {\n section: LinksSection;\n}\n\nfunction LinkCard({ item }: { item: LinkCardItem }) {\n return (\n <a\n href={item.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"group flex items-center gap-4 p-3 transition-all duration-200 hover:scale-[1.015] active:scale-[0.99]\"\n style={{\n backgroundColor: 'rgba(255,255,255,0.05)',\n border: '1px solid rgba(255,255,255,0.07)',\n borderRadius: 'var(--pk-radius)',\n }}\n >\n <div\n className=\"shrink-0 flex items-center justify-center w-12 h-12 overflow-hidden\"\n style={{ borderRadius: 'calc(var(--pk-radius) - 4px)', backgroundColor: 'rgba(255,255,255,0.06)' }}\n >\n {item.thumbnailUrl ? (\n <img src={item.thumbnailUrl} alt=\"\" className=\"w-full h-full object-cover\" loading=\"lazy\" />\n ) : (\n <PlatformIcon platform={item.icon ?? 'custom'} size={20} style={{ color: 'var(--pk-primary)' }} />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-semibold truncate\" style={{ color: 'var(--pk-text)' }}>\n {item.title}\n </span>\n {item.badge && (\n <span\n className=\"text-[10px] font-bold uppercase tracking-wide px-2 py-0.5 rounded-full shrink-0\"\n style={{ backgroundColor: 'var(--pk-primary)', color: 'var(--pk-bg)' }}\n >\n {item.badge}\n </span>\n )}\n </div>\n {item.subtitle && (\n <p className=\"text-xs truncate mt-0.5\" style={{ color: 'var(--pk-muted)' }}>\n {item.subtitle}\n </p>\n )}\n </div>\n <ChevronRight\n size={18}\n className=\"shrink-0 opacity-40 group-hover:opacity-80 group-hover:translate-x-0.5 transition-all\"\n style={{ color: 'var(--pk-text)' }}\n />\n </a>\n );\n}\n\nexport default function LinksBlock({ section }: Props) {\n const isGrid = section.layout === 'grid';\n return (\n <section className=\"py-6\" id={section.id}>\n {section.title && (\n <h2\n className=\"text-xl md:text-2xl font-bold mb-4 px-1\"\n style={{ fontFamily: 'var(--pk-font-heading)', color: 'var(--pk-text)' }}\n >\n {section.title}\n </h2>\n )}\n <div className={isGrid ? 'grid grid-cols-2 gap-3' : 'flex flex-col gap-3'}>\n {section.links.map((item, i) => (\n <LinkCard key={item.url + i} item={item} />\n ))}\n </div>\n </section>\n );\n}\n","import { useEffect, useRef, useState, type ReactNode } from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\n\n/**\n * Komi-style horizontal collection: a section title with prev/next controls and\n * a snap-scrolling track. Mobile-first — the track scrolls by touch and the\n * arrows nudge it by ~80% of the viewport. Arrows disable at the track ends.\n */\nexport function Carousel({ title, children }: { title?: string; children: ReactNode }) {\n const trackRef = useRef<HTMLDivElement>(null);\n const [atStart, setAtStart] = useState(true);\n const [atEnd, setAtEnd] = useState(false);\n\n const update = () => {\n const el = trackRef.current;\n if (!el) return;\n setAtStart(el.scrollLeft <= 2);\n setAtEnd(el.scrollLeft + el.clientWidth >= el.scrollWidth - 2);\n };\n\n useEffect(() => {\n update();\n const el = trackRef.current;\n if (!el) return;\n el.addEventListener('scroll', update, { passive: true });\n window.addEventListener('resize', update);\n return () => {\n el.removeEventListener('scroll', update);\n window.removeEventListener('resize', update);\n };\n }, []);\n\n const nudge = (dir: 1 | -1) => {\n const el = trackRef.current;\n if (!el) return;\n el.scrollBy({ left: dir * el.clientWidth * 0.8, behavior: 'smooth' });\n };\n\n const arrowStyle = (disabled: boolean) => ({\n backgroundColor: 'rgba(255,255,255,0.06)',\n color: 'var(--pk-text)',\n opacity: disabled ? 0.25 : 1,\n borderRadius: '9999px',\n });\n\n return (\n <div>\n {(title || true) && (\n <div className=\"flex items-center justify-between mb-4 px-1\">\n {title && (\n <h2\n className=\"text-xl md:text-2xl font-bold\"\n style={{ fontFamily: 'var(--pk-font-heading)', color: 'var(--pk-text)' }}\n >\n {title}\n </h2>\n )}\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n aria-label=\"Anterior\"\n onClick={() => nudge(-1)}\n disabled={atStart}\n className=\"flex items-center justify-center w-9 h-9 transition-opacity\"\n style={arrowStyle(atStart)}\n >\n <ChevronLeft size={18} />\n </button>\n <button\n type=\"button\"\n aria-label=\"Próximo\"\n onClick={() => nudge(1)}\n disabled={atEnd}\n className=\"flex items-center justify-center w-9 h-9 transition-opacity\"\n style={arrowStyle(atEnd)}\n >\n <ChevronRight size={18} />\n </button>\n </div>\n </div>\n )}\n <div\n ref={trackRef}\n className=\"flex gap-3 overflow-x-auto snap-x snap-mandatory scrollbar-hide pb-1\"\n >\n {children}\n </div>\n </div>\n );\n}\n","import { Play } from 'lucide-react';\nimport type { MusicReleasesSection, MusicReleaseItem } from '../../types';\nimport { Carousel } from '../components/Carousel';\n\ninterface Props {\n section: MusicReleasesSection;\n}\n\nfunction ReleaseCard({ item, cta, wide }: { item: MusicReleaseItem; cta: string; wide?: boolean }) {\n return (\n <a\n href={item.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={`group ${wide ? 'flex-none w-40 snap-start' : ''} flex flex-col transition-transform hover:scale-[1.02]`}\n >\n <div\n className=\"relative w-full aspect-square overflow-hidden\"\n style={{ borderRadius: 'var(--pk-radius)', backgroundColor: 'rgba(255,255,255,0.05)' }}\n >\n <img src={item.artworkUrl} alt={item.title} className=\"w-full h-full object-cover\" loading=\"lazy\" />\n <div className=\"absolute inset-0 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity\"\n style={{ background: 'rgba(0,0,0,0.35)' }}\n >\n <span\n className=\"flex items-center justify-center w-11 h-11 rounded-full\"\n style={{ backgroundColor: 'var(--pk-primary)', color: 'var(--pk-bg)' }}\n >\n <Play size={20} fill=\"currentColor\" />\n </span>\n </div>\n </div>\n <div className=\"mt-2 px-0.5\">\n <p className=\"text-sm font-semibold truncate\" style={{ color: 'var(--pk-text)' }}>\n {item.title}\n </p>\n {item.artist && (\n <p className=\"text-xs truncate\" style={{ color: 'var(--pk-muted)' }}>\n {item.artist}\n </p>\n )}\n <span\n className=\"inline-flex items-center gap-1 mt-1.5 px-3 py-1 text-xs font-semibold rounded-full\"\n style={{ backgroundColor: 'rgba(255,255,255,0.08)', color: 'var(--pk-text)' }}\n >\n <Play size={11} fill=\"currentColor\" /> {cta}\n </span>\n </div>\n </a>\n );\n}\n\nexport default function MusicReleasesBlock({ section }: Props) {\n const cta = section.ctaLabel ?? 'Ouvir';\n if (section.layout === 'grid') {\n return (\n <section className=\"py-6\" id={section.id}>\n {section.title && (\n <h2\n className=\"text-xl md:text-2xl font-bold mb-4 px-1\"\n style={{ fontFamily: 'var(--pk-font-heading)', color: 'var(--pk-text)' }}\n >\n {section.title}\n </h2>\n )}\n <div className=\"grid grid-cols-2 gap-4\">\n {section.releases.map((item, i) => (\n <ReleaseCard key={item.url + i} item={item} cta={cta} />\n ))}\n </div>\n </section>\n );\n }\n return (\n <section className=\"py-6\" id={section.id}>\n <Carousel title={section.title}>\n {section.releases.map((item, i) => (\n <ReleaseCard key={item.url + i} item={item} cta={cta} wide />\n ))}\n </Carousel>\n </section>\n );\n}\n","import { MapPin } from 'lucide-react';\nimport type { TourDatesSection, TourDateItem } from '../../types';\n\ninterface Props {\n section: TourDatesSection;\n}\n\nconst MONTHS_PT = ['JAN', 'FEV', 'MAR', 'ABR', 'MAI', 'JUN', 'JUL', 'AGO', 'SET', 'OUT', 'NOV', 'DEZ'];\n\nfunction parseDate(date: string): { month: string; day: string; year: string } {\n const m = date.match(/^(\\d{4})-(\\d{2})-(\\d{2})/);\n if (m) {\n const monthIdx = Math.min(11, Math.max(0, parseInt(m[2], 10) - 1));\n return { month: MONTHS_PT[monthIdx], day: String(parseInt(m[3], 10)), year: m[1] };\n }\n return { month: '', day: date, year: '' };\n}\n\nfunction DateRow({ item, cta }: { item: TourDateItem; cta: string }) {\n const { month, day, year } = parseDate(item.date);\n const hasLink = !!item.url;\n const label = hasLink ? cta : item.soldOut ? 'Esgotado' : 'Em breve';\n const Tag = hasLink ? 'a' : 'div';\n return (\n <Tag\n {...(hasLink ? { href: item.url, target: '_blank', rel: 'noopener noreferrer' } : {})}\n className={`flex items-center gap-4 p-3 transition-all duration-200 ${hasLink ? 'hover:scale-[1.01]' : 'cursor-default'}`}\n style={{\n backgroundColor: 'rgba(255,255,255,0.04)',\n border: '1px solid rgba(255,255,255,0.07)',\n borderRadius: 'var(--pk-radius)',\n }}\n >\n <div\n className=\"shrink-0 flex flex-col items-center justify-center w-14 h-16\"\n style={{ backgroundColor: 'rgba(255,255,255,0.05)', borderRadius: 'calc(var(--pk-radius) - 4px)' }}\n >\n <span className=\"text-[10px] font-bold tracking-wider\" style={{ color: 'var(--pk-primary)' }}>{month}</span>\n <span className=\"text-xl font-bold leading-none\" style={{ color: 'var(--pk-text)', fontFamily: 'var(--pk-font-heading)' }}>{day}</span>\n <span className=\"text-[10px] opacity-60\" style={{ color: 'var(--pk-muted)' }}>{year}</span>\n </div>\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-semibold truncate\" style={{ color: 'var(--pk-text)' }}>{item.venue}</p>\n {item.city && (\n <p className=\"text-xs truncate flex items-center gap-1 mt-0.5\" style={{ color: 'var(--pk-muted)' }}>\n <MapPin size={11} /> {item.city}\n </p>\n )}\n </div>\n <span\n className=\"shrink-0 px-4 py-1.5 text-xs font-semibold rounded-full\"\n style={\n hasLink\n ? { backgroundColor: 'var(--pk-primary)', color: 'var(--pk-bg)' }\n : { backgroundColor: 'transparent', color: 'var(--pk-muted)', border: '1px solid rgba(255,255,255,0.12)' }\n }\n >\n {label}\n </span>\n </Tag>\n );\n}\n\nexport default function TourDatesBlock({ section }: Props) {\n const cta = section.ctaLabel ?? 'Ingressos';\n return (\n <section className=\"py-6\" id={section.id}>\n {section.title && (\n <h2\n className=\"text-xl md:text-2xl font-bold mb-4 px-1\"\n style={{ fontFamily: 'var(--pk-font-heading)', color: 'var(--pk-text)' }}\n >\n {section.title}\n </h2>\n )}\n <div className=\"flex flex-col gap-3\">\n {section.dates.map((item, i) => (\n <DateRow key={item.date + item.venue + i} item={item} cta={cta} />\n ))}\n </div>\n </section>\n );\n}\n","import { ArrowUpRight } from 'lucide-react';\nimport type { FeaturedSection } from '../../types';\n\ninterface Props {\n section: FeaturedSection;\n}\n\nexport default function FeaturedBlock({ section }: Props) {\n return (\n <section className=\"py-6\" id={section.id}>\n {section.title && (\n <h2\n className=\"text-xl md:text-2xl font-bold mb-4 px-1\"\n style={{ fontFamily: 'var(--pk-font-heading)', color: 'var(--pk-text)' }}\n >\n {section.title}\n </h2>\n )}\n <a\n href={section.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"group flex items-center gap-4 p-4 overflow-hidden transition-all duration-300 hover:scale-[1.01]\"\n style={{\n borderRadius: 'var(--pk-radius)',\n border: '1px solid rgba(255,255,255,0.09)',\n background:\n 'linear-gradient(135deg, color-mix(in srgb, var(--pk-primary) 14%, transparent), rgba(255,255,255,0.03) 55%)',\n }}\n >\n {section.imageUrl && (\n <div\n className=\"shrink-0 w-20 h-20 overflow-hidden\"\n style={{ borderRadius: 'calc(var(--pk-radius) - 4px)' }}\n >\n <img\n src={section.imageUrl}\n alt={section.headline}\n className=\"w-full h-full object-cover group-hover:scale-105 transition-transform duration-500\"\n loading=\"lazy\"\n />\n </div>\n )}\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-base font-bold leading-tight\" style={{ color: 'var(--pk-text)', fontFamily: 'var(--pk-font-heading)' }}>\n {section.headline}\n </p>\n {section.subtitle && (\n <p className=\"text-xs mt-1 line-clamp-2\" style={{ color: 'var(--pk-muted)' }}>\n {section.subtitle}\n </p>\n )}\n {section.ctaLabel && (\n <span\n className=\"inline-flex items-center gap-1 mt-2 px-3 py-1 text-xs font-semibold rounded-full\"\n style={{ backgroundColor: 'var(--pk-primary)', color: 'var(--pk-bg)' }}\n >\n {section.ctaLabel}\n </span>\n )}\n </div>\n <ArrowUpRight\n size={20}\n className=\"shrink-0 opacity-50 group-hover:opacity-90 group-hover:translate-x-0.5 group-hover:-translate-y-0.5 transition-all\"\n style={{ color: 'var(--pk-text)' }}\n />\n </a>\n </section>\n );\n}\n","import { useState, useEffect, useRef } from 'react';\nimport { ChevronUp, MessageCircle } from 'lucide-react';\nimport type { BioPage, BioBlock } from '../types';\nimport { getBlock } from './registry';\nimport { Reveal } from './components/Reveal';\nimport HeroSection from './blocks/HeroSection';\nimport BioSection from './blocks/BioSection';\nimport GallerySection from './blocks/GallerySection';\nimport VideoGridSection from './blocks/VideoGridSection';\nimport SocialLinksSection from './blocks/SocialLinksSection';\nimport EmbedSection from './blocks/EmbedSection';\nimport ProjectSection from './blocks/ProjectSection';\nimport StatsSection from './blocks/StatsSection';\nimport VenueListSection from './blocks/VenueListSection';\nimport CTASection from './blocks/CTASection';\nimport TextSection from './blocks/TextSection';\nimport ProfileHeader from './blocks/ProfileHeader';\nimport LinksBlock from './blocks/LinksBlock';\nimport MusicReleasesBlock from './blocks/MusicReleasesBlock';\nimport TourDatesBlock from './blocks/TourDatesBlock';\nimport FeaturedBlock from './blocks/FeaturedBlock';\n\nexport interface BioPageRendererProps {\n page: BioPage;\n /** Optional \"made with\" footer link. Omit for just the copyright line. */\n poweredBy?: { label: string; url: string };\n}\n\n// Blocks that get alternating backgrounds in scroll mode (hero/header/cta excluded).\nconst ALT_BG_TYPES = new Set(['bio', 'gallery', 'video-grid', 'project', 'embed', 'stats', 'venue-list', 'text', 'social-links']);\n\nexport default function BioPageRenderer({ page, poweredBy }: BioPageRendererProps) {\n const { identity, branding, sections, floatingCta } = page;\n const isHub = page.layout === 'hub';\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const [scrollProgress, setScrollProgress] = useState(0);\n const [showFloatingCta, setShowFloatingCta] = useState(false);\n\n // Scroll progress & floating CTA visibility\n useEffect(() => {\n const container = scrollRef.current?.closest('.fixed.inset-0') as HTMLElement | null;\n if (!container) return;\n\n const onScroll = () => {\n const { scrollTop, scrollHeight, clientHeight } = container;\n const progress = scrollHeight > clientHeight ? scrollTop / (scrollHeight - clientHeight) : 0;\n setScrollProgress(progress);\n setShowFloatingCta(scrollTop > clientHeight * 0.5);\n };\n\n container.addEventListener('scroll', onScroll, { passive: true });\n return () => container.removeEventListener('scroll', onScroll);\n }, []);\n\n // Assign alternating bg to non-hero/cta sections (scroll mode only)\n let altIndex = 0;\n const sectionBgs: Map<string, string | undefined> = new Map();\n if (!isHub) {\n for (const s of sections) {\n if (s.visible === false) continue;\n if (ALT_BG_TYPES.has(s.type)) {\n const bgs = [undefined, 'var(--pk-alt-bg)', 'var(--pk-alt-bg2)'];\n sectionBgs.set(s.id, bgs[altIndex % bgs.length]);\n altIndex++;\n }\n }\n }\n\n function renderInner(section: BioBlock) {\n // Host-registered niche blocks win over the built-in switch.\n const Custom = getBlock(section.type);\n if (Custom) return <Custom block={section as never} page={page} />;\n switch (section.type) {\n case 'hero':\n return <HeroSection section={section} identity={identity} branding={branding} />;\n case 'profile-header':\n return <ProfileHeader section={section} page={page} />;\n case 'bio':\n return <BioSection section={section} />;\n case 'gallery':\n return <GallerySection section={section} />;\n case 'video-grid':\n return <VideoGridSection section={section} />;\n case 'social-links':\n return <SocialLinksSection section={section} />;\n case 'embed':\n return <EmbedSection section={section} />;\n case 'project':\n return <ProjectSection section={section} />;\n case 'stats':\n return <StatsSection section={section} />;\n case 'venue-list':\n return <VenueListSection section={section} />;\n case 'cta':\n return <CTASection section={section} />;\n case 'text':\n return <TextSection section={section} />;\n case 'links':\n return <LinksBlock section={section} />;\n case 'music-releases':\n return <MusicReleasesBlock section={section} />;\n case 'tour-dates':\n return <TourDatesBlock section={section} />;\n case 'featured':\n return <FeaturedBlock section={section} />;\n default:\n return null;\n }\n }\n\n function renderSection(section: BioBlock, index: number) {\n if (section.visible === false) return null;\n const inner = renderInner(section);\n if (inner === null) return null;\n\n // ── Hub layout: everything sits inside the mobile-width column (padding is\n // provided by the wrapper below). The header renders without a reveal\n // (it's above the fold); other blocks fade in on scroll.\n if (isHub) {\n // Header breaks out of the column padding to sit full-bleed on mobile;\n // on desktop it becomes a contained rounded card within the column.\n if (section.type === 'profile-header')\n return (\n <div key={section.id} className=\"-mx-3 -mt-3 sm:mx-0 sm:mt-0\">\n {inner}\n </div>\n );\n return <Reveal key={section.id}>{inner}</Reveal>;\n }\n\n // ── Scroll (press-kit) layout: full-width sections, alternating bg ──\n if (section.type === 'hero') return <div key={section.id}>{inner}</div>;\n const bg = sectionBgs.get(section.id);\n return (\n <div key={section.id} style={bg ? { backgroundColor: bg } : undefined}>\n <Reveal delay={index === 0 ? 0 : 40}>{inner}</Reveal>\n </div>\n );\n }\n\n return (\n <div ref={scrollRef} className=\"min-h-full\">\n {/* Scroll progress bar */}\n <div className=\"fixed top-0 left-0 right-0 z-50 h-[3px]\" style={{ backgroundColor: 'transparent' }}>\n <div\n className=\"h-full transition-[width] duration-100 ease-out\"\n style={{\n width: `${scrollProgress * 100}%`,\n background: `linear-gradient(90deg, var(--pk-primary), var(--pk-accent))`,\n }}\n />\n </div>\n\n {/* Sections + footer. Hub = a centered mobile-width column (komi/linktree\n style) that stays phone-width even on desktop, with breathing room so\n the hero reads as a rounded floating card. */}\n <div className={isHub ? 'max-w-[480px] mx-auto px-3 sm:px-4 pt-3 pb-6' : ''}>\n {sections.map(renderSection)}\n\n {/* Footer */}\n <footer className=\"pt-10 pb-24 px-6 text-center\" style={{ backgroundColor: 'var(--pk-bg)' }}>\n <p className=\"text-xs opacity-40\" style={{ color: 'var(--pk-muted)' }}>\n © {new Date().getFullYear()} {identity.name}\n </p>\n {poweredBy && (\n <a\n href={poweredBy.url}\n className=\"text-xs opacity-25 mt-1 hover:opacity-40 transition-opacity\"\n style={{ color: 'var(--pk-muted)' }}\n >\n {poweredBy.label}\n </a>\n )}\n </footer>\n </div>\n\n {/* Floating actions — hub: circular stack (scroll-to-top + primary action,\n presskitpro style); scroll: the classic wide pill. */}\n {isHub ? (\n <div className=\"fixed z-50 right-4 bottom-6 flex flex-col items-center gap-3\">\n <button\n type=\"button\"\n aria-label=\"Voltar ao topo\"\n onClick={() =>\n (scrollRef.current?.closest('.fixed.inset-0') as HTMLElement | null)?.scrollTo({\n top: 0,\n behavior: 'smooth',\n })\n }\n className=\"flex items-center justify-center w-11 h-11 rounded-full transition-all duration-300\"\n style={{\n opacity: showFloatingCta ? 1 : 0,\n transform: showFloatingCta ? 'none' : 'translateY(12px)',\n pointerEvents: showFloatingCta ? 'auto' : 'none',\n color: 'var(--pk-primary)',\n border: '1.5px solid var(--pk-primary)',\n backgroundColor: 'color-mix(in srgb, var(--pk-bg) 70%, transparent)',\n backdropFilter: 'blur(6px)',\n }}\n >\n <ChevronUp size={20} />\n </button>\n {floatingCta && (\n <a\n href={floatingCta.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={floatingCta.label}\n className=\"flex items-center justify-center w-14 h-14 rounded-full transition-transform hover:scale-105\"\n style={{\n backgroundColor: 'var(--pk-primary)',\n color: 'var(--pk-bg)',\n boxShadow: '0 8px 28px rgba(0,0,0,0.45)',\n }}\n >\n <MessageCircle size={24} />\n </a>\n )}\n </div>\n ) : (\n floatingCta && (\n <a\n href={floatingCta.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"fixed z-50 transition-all duration-500 ease-out\"\n style={{\n bottom: showFloatingCta ? '2rem' : '-4rem',\n left: '50%',\n transform: 'translateX(-50%)',\n opacity: showFloatingCta ? 1 : 0,\n backgroundColor: 'var(--pk-primary)',\n color: 'var(--pk-bg)',\n fontFamily: 'var(--pk-font-heading)',\n borderRadius: '9999px',\n padding: '1rem 2.5rem',\n fontSize: '1rem',\n fontWeight: 700,\n letterSpacing: '0.1em',\n boxShadow: '0 8px 32px rgba(0,0,0,0.4)',\n }}\n >\n {floatingCta.label}\n </a>\n )\n )}\n </div>\n );\n}\n","import { useEffect, useState } from 'react';\nimport { useParams } from 'react-router-dom';\nimport type { BioPage as BioPageType } from '../types';\nimport { getBrandingVars } from './utils';\nimport BioPageRenderer from './BioPageRenderer';\nimport { useLinkInBio } from './context';\n\n/**\n * Public bio-page route component. Reads `:slug` from the URL, resolves the page\n * from the data provider, applies SEO + dynamic Google Fonts + branding CSS vars,\n * and renders the block list. Mounted by the plugin manifest as a guard:'public'\n * route (default path `/p/:slug`).\n */\nexport default function BioPage() {\n const { slug } = useParams<{ slug: string }>();\n const { provider, poweredBy, titleSuffix } = useLinkInBio();\n const [page, setPage] = useState<BioPageType | null>(null);\n const [resolved, setResolved] = useState(false);\n\n useEffect(() => {\n if (!slug) {\n setResolved(true);\n return;\n }\n let cancelled = false;\n setResolved(false);\n provider\n .getBySlug(slug)\n .then((pk) => {\n if (cancelled) return;\n setPage(pk);\n setResolved(true);\n })\n .catch(() => {\n if (cancelled) return;\n setResolved(true);\n });\n return () => {\n cancelled = true;\n };\n }, [slug, provider]);\n\n // Set document title & load custom fonts\n useEffect(() => {\n if (!page) return;\n\n // SEO\n document.title = page.seo.title ?? `${page.identity.name} | ${titleSuffix}`;\n const metaDesc = document.querySelector('meta[name=\"description\"]');\n if (metaDesc && page.seo.description) {\n metaDesc.setAttribute('content', page.seo.description);\n }\n\n // Dynamic Google Fonts loading\n const fontsToLoad: string[] = [];\n const { fontHeading, fontBody } = page.branding;\n if (fontHeading && !fontHeading.includes('Space Grotesk')) {\n const family = fontHeading.replace(/['\"]/g, '').split(',')[0].trim();\n fontsToLoad.push(family);\n }\n if (fontBody && !fontBody.includes('DM Sans')) {\n const family = fontBody.replace(/['\"]/g, '').split(',')[0].trim();\n fontsToLoad.push(family);\n }\n\n const linkElements: HTMLLinkElement[] = [];\n if (fontsToLoad.length > 0) {\n const families = fontsToLoad.map((f) => `family=${f.replace(/\\s/g, '+')}:wght@400;600;700`).join('&');\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = `https://fonts.googleapis.com/css2?${families}&display=swap`;\n document.head.appendChild(link);\n linkElements.push(link);\n }\n\n return () => {\n linkElements.forEach((el) => el.remove());\n };\n }, [page, titleSuffix]);\n\n if (!resolved) {\n return (\n <div className=\"dark fixed inset-0 flex items-center justify-center bg-background text-foreground\">\n <div className=\"w-2 h-2 rounded-full bg-foreground/40 animate-pulse\" aria-label=\"carregando\" />\n </div>\n );\n }\n\n if (!page) {\n return (\n <div className=\"dark fixed inset-0 flex items-center justify-center bg-background text-foreground\">\n <div className=\"text-center px-6\">\n <h1 className=\"text-large font-bold mb-4\" style={{ fontFamily: 'var(--font-display)' }}>\n 404\n </h1>\n <p className=\"text-foreground-secondary mb-6\">Página não encontrada.</p>\n <a\n href=\"/\"\n className=\"text-sm underline underline-offset-4 text-foreground-secondary hover:text-foreground transition-colors\"\n >\n voltar ao início\n </a>\n </div>\n </div>\n );\n }\n\n const brandingVars = getBrandingVars(page.branding);\n\n return (\n <div\n className=\"fixed inset-0 overflow-y-auto overflow-x-hidden\"\n style={{\n ...brandingVars,\n backgroundColor: 'var(--pk-bg)',\n color: 'var(--pk-text)',\n fontFamily: 'var(--pk-font-body)',\n } as React.CSSProperties}\n >\n <BioPageRenderer page={page} poweredBy={poweredBy} />\n </div>\n );\n}\n","import { createElement, type FC, type ReactNode } from 'react';\nimport { createSafeDataProvider, type PluginManifest, type PluginScope, type VerticalId } from '@fayz-ai/core';\nimport type { BioPage } from '../types';\nimport { createMockBioPageProvider, type BioPageDataProvider } from './data';\nimport { createSupabaseBioPageProvider } from './data.supabase';\nimport { LinkInBioProvider, type LinkInBioContextValue } from './context';\nimport BioPageRoute from './BioPage';\n\nexport interface PublicLinkInBioOptions {\n /** Mount prefix for the public bio route. The route is `${basePath}/:slug`. Default '/p'. */\n basePath?: string;\n /**\n * When a Supabase client is configured (setGlobalSupabaseClient) this selects\n * the Supabase-backed provider. Omit to force the seeded mock provider.\n */\n useSupabase?: boolean;\n /** Table holding bio pages (Supabase mode). Default 'press_kits'. */\n table?: string;\n /** Inject a custom provider (overrides the mock/Supabase safe resolver). */\n dataProvider?: BioPageDataProvider;\n /** Seed catalog for the mock provider: slug → BioPage (host config / demo content). */\n seed?: Record<string, BioPage>;\n /** Optional \"made with\" footer link rendered on every page. */\n poweredBy?: { label: string; url: string };\n /** Fallback `<title>` suffix when a page omits seo.title. Default 'Bio'. */\n titleSuffix?: string;\n scope?: PluginScope;\n verticalId?: VerticalId;\n defaultEnabled?: boolean;\n}\n\nexport interface PublicLinkInBioPlugin {\n manifest: PluginManifest;\n Provider: FC<{ children: ReactNode }>;\n dataProvider: BioPageDataProvider;\n}\n\nexport function createPublicLinkInBioPlugin(options: PublicLinkInBioOptions = {}): PublicLinkInBioPlugin {\n const basePath = options.basePath ?? '/p';\n const table = options.table ?? 'press_kits';\n const seed = options.seed ?? {};\n\n // Resolution: explicit dataProvider → Supabase (when a global client is\n // configured AND useSupabase !== false) → seeded mock. Deferred + memoized so\n // importing the plugin never forces a Supabase connection.\n const provider: BioPageDataProvider =\n options.dataProvider ??\n (options.useSupabase === false\n ? createMockBioPageProvider({ seed })\n : createSafeDataProvider<BioPageDataProvider>(\n () => createSupabaseBioPageProvider({ table }),\n () => createMockBioPageProvider({ seed }),\n ));\n\n const contextValue: LinkInBioContextValue = {\n provider,\n poweredBy: options.poweredBy,\n titleSuffix: options.titleSuffix ?? 'Bio',\n };\n\n const Provider: FC<{ children: ReactNode }> = ({ children }) =>\n createElement(LinkInBioProvider, { value: contextValue, children });\n Provider.displayName = 'LinkInBioProvider';\n\n const manifest: PluginManifest = {\n id: 'linkinbio',\n name: 'Link in Bio',\n icon: 'Link',\n version: '0.1.0',\n scope: options.scope ?? 'universal',\n verticalId: options.verticalId,\n scaffolds: ['website', 'landing_page'],\n defaultEnabled: options.defaultEnabled ?? true,\n dependencies: [],\n navigation: [],\n routes: [{ path: `${basePath}/:slug`, component: BioPageRoute, guard: 'public', fullBleed: true }],\n widgets: [],\n };\n\n return { manifest, Provider, dataProvider: provider };\n}\n"]}
|