@sprintup-cms/sdk 1.8.62 → 1.8.63
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/next/index.cjs +10 -9
- package/dist/next/index.cjs.map +1 -1
- package/dist/next/index.js +10 -9
- package/dist/next/index.js.map +1 -1
- package/package.json +1 -1
package/dist/next/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/next/revalidate.ts","../../src/next/preview-exit.ts","../../src/next/preview-entry.ts","../../src/client.ts","../../src/react/blocks.tsx","../../src/next/catch-all.tsx","../../src/next/dynamic-proxy.ts"],"names":["POST","GET","NextResponse","draftMode","jsx","jsxs","cookies","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["import { NextRequest, NextResponse } from 'next/server'\nimport { revalidatePath, revalidateTag } from 'next/cache'\n\nexport interface RevalidateHandlerOptions {\n /**\n * Secret that must match the `x-cms-webhook-secret` header.\n * Defaults to process.env.CMS_WEBHOOK_SECRET\n */\n secret?: string\n /**\n * Called after successful revalidation. Use to add custom logic.\n */\n onRevalidate?: (payload: RevalidatePayload) => void | Promise<void>\n}\n\nexport interface RevalidatePayload {\n /** Sent by the CMS webhook (CMSWebhookPayload shape) */\n appId?: string\n event?: 'published' | 'deleted' | 'archived' | 'content.publish' | 'content.unpublish' | 'structure.update'\n /** Cache tag sent by the CMS (e.g. \"content-about\", \"content-list\", \"site-structure-myapp\") */\n tag?: string\n /** Additional data from the CMS webhook */\n data?: Record<string, unknown>\n /** Legacy field — accepted for backwards compatibility */\n slug?: string\n timestamp?: string\n}\n\n/**\n * Factory — create a POST handler with custom options.\n *\n * @example\n * // app/api/cms-revalidate/route.ts\n * import { createRevalidateHandler } from '@sprintup-cms/sdk/next'\n * export const POST = createRevalidateHandler({ secret: process.env.CMS_WEBHOOK_SECRET })\n */\nexport function createRevalidateHandler(options?: RevalidateHandlerOptions) {\n return async function POST(request: NextRequest): Promise<NextResponse> {\n try {\n const secret = options?.secret ?? process.env.CMS_WEBHOOK_SECRET\n const incomingSecret = request.headers.get('x-cms-webhook-secret')\n\n if (secret && incomingSecret !== secret) {\n return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })\n }\n\n const body: RevalidatePayload = await request.json()\n const { slug, tag, appId, data } = body\n\n // Must have at least a tag or a slug to know what to revalidate\n if (!tag && !slug) {\n return NextResponse.json({ error: 'Missing tag or slug in payload' }, { status: 400 })\n }\n\n // Revalidate by the tag sent directly from the CMS (primary path)\n if (tag) {\n revalidateTag(tag)\n }\n\n // Derive slug from data.slug or the tag itself (e.g. \"content-about\" → \"about\")\n const resolvedSlug = slug ?? (data?.slug as string) ?? tag?.replace(/^content-/, '')\n\n if (resolvedSlug) {\n revalidatePath(`/${resolvedSlug}`)\n revalidateTag(`cms-page-${resolvedSlug}`)\n }\n\n // Always revalidate the content list (sitemap, index pages)\n revalidateTag('cms-pages')\n\n // Revalidate the layout for structure changes or publish events so\n // nav/footer pick up the new site structure\n const isStructure = tag?.startsWith('site-structure') || body.event === 'structure.update'\n const isPublish = body.event === 'published' || body.event === 'content.publish'\n if (isStructure || isPublish) {\n revalidatePath('/', 'layout')\n }\n\n await options?.onRevalidate?.(body)\n\n return NextResponse.json({\n revalidated: true,\n tag,\n slug: resolvedSlug,\n event: body.event,\n timestamp: new Date().toISOString(),\n })\n } catch (err: any) {\n console.error('[sprintup-cms] revalidate error:', err)\n return NextResponse.json({ error: err.message }, { status: 500 })\n }\n }\n}\n\n/**\n * Default POST handler — zero-config, reads CMS_WEBHOOK_SECRET from env.\n *\n * @example\n * // app/api/cms-revalidate/route.ts\n * export { POST } from '@sprintup-cms/sdk/next'\n */\nexport const POST = createRevalidateHandler()\n","import { NextResponse } from 'next/server'\nimport { cookies, draftMode } from 'next/headers'\n\nexport interface PreviewExitOptions {\n /** Where to redirect after exiting preview. Defaults to \"/\" */\n redirectTo?: string\n}\n\n/**\n * Factory — create a GET handler for exiting preview/draft mode.\n *\n * @example\n * // app/api/cms-preview/exit/route.ts\n * import { createPreviewExitHandler } from '@sprintup-cms/sdk/next'\n * export const GET = createPreviewExitHandler({ redirectTo: '/' })\n */\nexport function createPreviewExitHandler(options?: PreviewExitOptions) {\n return async function GET(request: Request): Promise<NextResponse> {\n const draft = await draftMode()\n draft.disable()\n\n const cookieStore = await cookies()\n cookieStore.delete('cms_preview_token')\n cookieStore.delete('cms_preview_content_id')\n\n const redirectTo = options?.redirectTo ?? '/'\n const url = new URL(request.url)\n return NextResponse.redirect(new URL(redirectTo, url.origin))\n }\n}\n\n/**\n * Default GET handler.\n *\n * @example\n * // app/api/cms-preview/exit/route.ts\n * export { GET } from '@sprintup-cms/sdk/next'\n */\nexport const GET = createPreviewExitHandler()\n","import { NextRequest, NextResponse } from 'next/server'\nimport { draftMode } from 'next/headers'\n\n/**\n * GET /api/cms-preview?token=xxx\n *\n * Validates the preview token issued by the CMS, enables Next.js draftMode(),\n * and redirects to the page slug embedded in the token.\n *\n * The token is a base64-encoded JSON payload: { contentId, appId, slug, exp }\n * Signature validation is handled by checking exp — the CMS signs tokens with\n * a short TTL (default 1 hour) so expired tokens are silently rejected.\n *\n * @example\n * // app/api/cms-preview/route.ts\n * export { previewEntryGET as GET } from '@sprintup-cms/sdk/next'\n */\nexport async function previewEntryGET(request: NextRequest): Promise<NextResponse> {\n // Called by: app/api/cms-preview/route.ts → export { previewEntryGET as GET }\n // Flow: CMS editor opens /api/cms-preview?token=xxx → draftMode enabled → redirect to /{slug}\n const { searchParams, origin } = new URL(request.url)\n const token = searchParams.get('token')\n\n if (!token) {\n return NextResponse.json({ error: 'Missing token' }, { status: 400 })\n }\n\n // The CMS issues tokens as: base64url(JSON payload) + \".\" + base64url(HMAC-SHA256 signature)\n // This is NOT a JWT — it has two segments, not three.\n let payload: { contentId?: string; appId?: string; slug?: string; exp?: number }\n try {\n const [payloadB64] = token.split('.')\n if (!payloadB64) throw new Error('invalid token format')\n const json = Buffer.from(payloadB64.replace(/-/g, '+').replace(/_/g, '/'), 'base64').toString('utf8')\n payload = JSON.parse(json)\n } catch {\n return NextResponse.json({ error: 'Invalid token' }, { status: 400 })\n }\n\n // Reject expired tokens\n if (payload.exp && Date.now() > payload.exp) {\n return NextResponse.json({ error: 'Preview token has expired' }, { status: 401 })\n }\n\n const slug = payload.slug ?? ''\n\n // Enable Next.js draft mode — CMSCatchAllPage checks draftMode().isEnabled\n const draft = await draftMode()\n draft.enable()\n\n // Store the raw token in a cookie so CMSCatchAllPage can pass it to getPreviewPage()\n const response = NextResponse.redirect(new URL(`/${slug}`, origin))\n response.cookies.set('cms_preview_token', token, {\n httpOnly: true,\n secure: process.env.NODE_ENV === 'production',\n sameSite: 'lax',\n maxAge: 60 * 15, // 15 minutes\n path: '/',\n })\n return response\n}\n","/**\n * @sprintup-cms/sdk — Core Client\n *\n * Zero-dependency, framework-agnostic typed API client for SprintUp Forge CMS.\n *\n * @example\n * import { cmsClient } from '@sprintup-cms/sdk'\n * const page = await cmsClient.getPage('about')\n *\n * @example Custom instance\n * import { createCMSClient } from '@sprintup-cms/sdk'\n * const cms = createCMSClient({ baseUrl: '...', apiKey: '...', appId: '...' })\n */\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport interface CMSBlock {\n id: string\n type: string\n label?: string\n locked?: boolean\n data?: Record<string, any>\n /** Legacy field — blocks created before v1.1 used `content` instead of `data` */\n content?: Record<string, any>\n order?: number\n}\n\nexport interface CMSPage {\n _id?: string\n slug: string\n title: string\n description?: string\n pageType?: string\n pageTypeId?: string\n variant?: string\n status: 'draft' | 'published' | 'archived'\n visibility?: 'public' | 'private' | 'password'\n blocks: CMSBlock[]\n publishedAt?: string\n updatedAt?: string\n seo?: {\n title?: string\n description?: string\n keywords?: string[]\n ogImage?: string\n noIndex?: boolean\n }\n}\n\nexport interface CMSPageTypeField {\n id: string\n name: string\n label: string\n fieldType:\n | 'text' | 'textarea' | 'richtext' | 'image' | 'url'\n | 'number' | 'boolean' | 'date' | 'select' | 'relation'\n | 'email' | 'phone' | 'slug' | 'color' | 'embed'\n | 'multi-select' | 'repeater' | 'file' | 'code'\n required?: boolean\n options?: string[]\n description?: string\n maxLength?: number\n multiple?: boolean\n targetPageTypeKey?: string\n}\n\nexport interface CMSPageTypeSection {\n id: string\n name: string\n label: string\n order: number\n locked?: boolean\n fields: CMSPageTypeField[]\n}\n\nexport interface CMSPageTypeVariant {\n key: string\n label: string\n description?: string\n visibleSections?: string[]\n}\n\nexport interface CMSPageType {\n _id: string\n name: string\n key: string\n description?: string\n icon?: string\n /** Used by page-type-renderers to pick a specialised React component */\n rendererKey?: string\n /** Active variant key (set per-page) */\n variant?: string\n category: 'singleton' | 'collection' | 'global'\n contentCategory: 'singleton' | 'collection' | 'global'\n allowedRoles?: string[]\n variants: CMSPageTypeVariant[]\n sections: CMSPageTypeSection[]\n}\n\n// ── Sitemap ────────────────────────────────────────────────────────────────────\n\nexport interface CMSSitemapUrl {\n loc: string\n lastmod?: string\n changefreq?: string\n priority?: number\n title?: string\n}\n\nexport interface CMSSitemapResponse {\n enabled: boolean\n urls: CMSSitemapUrl[]\n config?: {\n defaultChangeFreq?: string\n defaultPriority?: number\n }\n}\n\n// ── Status ─────────────────────────────────────────────────────────────────────\n\nexport interface CMSStatusResponse {\n appId: string\n totalPages: number\n publishedPages: number\n connected: boolean\n pages: Array<{\n slug: string\n title: string\n pageType?: string\n group?: string\n }>\n}\n\n// ── Site Structure ─────────────────────────────────────────────────────────────\n\nexport type CMSMenuItemType = 'page' | 'url' | 'dynamic'\n\nexport interface CMSMenuItem {\n id: string\n type: CMSMenuItemType\n label: string\n contentId?: string\n url?: string\n /** Resolved href — ready to pass to <a href> or <Link href>. Never null, falls back to \"#\". */\n href: string\n locked: boolean\n openInNewTab: boolean\n children: CMSMenuItem[]\n page?: {\n title?: string\n slug?: string\n seoTitle?: string\n seoDescription?: string\n }\n}\n\nexport interface CMSPageTreeNode {\n id: string\n contentId: string\n parentId: string | null\n order: number\n locked: boolean\n visible?: boolean\n page?: {\n title?: string\n slug?: string\n seoTitle?: string\n seoDescription?: string\n }\n}\n\nexport interface CMSFooterGroup {\n id: string\n heading: string\n headingUrl?: string\n locked: boolean\n links: CMSMenuItem[]\n}\n\nexport interface CMSSiteStructure {\n appId: string\n pageTree: CMSPageTreeNode[]\n menus: {\n header: CMSMenuItem[]\n footer: CMSFooterGroup[]\n footerBottom: CMSMenuItem[]\n sidebar: CMSMenuItem[]\n [slot: string]: CMSMenuItem[] | CMSFooterGroup[]\n }\n updatedAt?: string\n}\n\n// ── Pagination & Responses ─────────────────────────────────────────────────────\n\n// v1 route returns { data, count } — flat, no nested meta object\ninterface CMSListResponse {\n data: CMSPage[]\n count: number\n appId?: string\n}\n\ninterface CMSSingleResponse {\n data: CMSPage\n}\n\n// ── Client Options ─────────────────────────────────────────────────────────────\n\nexport interface CMSClientOptions {\n /** Base URL of your Forge CMS instance, e.g. https://cms.yourschool.io */\n baseUrl?: string\n /** API key generated in CMS Admin → API Keys. Server-side only. */\n apiKey?: string\n /** App ID from CMS Admin → Apps, e.g. \"school-website\" */\n appId?: string\n}\n\nexport interface CMSGetPagesOptions {\n type?: string\n group?: string\n page?: number\n perPage?: number\n status?: 'published' | 'draft' | 'archived'\n}\n\n// ── Factory ───────────────────────────────────────────────────────────────────\n\nexport function createCMSClient(options?: CMSClientOptions) {\n /**\n * Resolve config lazily at request time — NOT at module/build time.\n * This prevents static prerendering crashes when env vars are absent during build.\n */\n function cfg() {\n return {\n baseUrl: (options?.baseUrl ?? process.env.NEXT_PUBLIC_CMS_URL ?? process.env.CMS_BASE_URL ?? '').replace(/\\/$/, ''),\n apiKey: options?.apiKey ?? process.env.CMS_API_KEY ?? '',\n appId: options?.appId ?? process.env.CMS_APP_ID ?? '',\n }\n }\n\n function headers() {\n return { 'X-CMS-API-Key': cfg().apiKey, 'Content-Type': 'application/json' }\n }\n\n // ── Pages ──────────────────────────────────────────────────────────────────\n\n async function getPages(params?: CMSGetPagesOptions): Promise<CMSPage[]> {\n const { baseUrl, apiKey, appId } = cfg()\n if (!baseUrl || !apiKey || !appId) {\n console.warn('[sprintup-cms] Missing CMS_BASE_URL / CMS_API_KEY / CMS_APP_ID — returning []')\n return []\n }\n try {\n const qs = new URLSearchParams()\n if (params?.type) qs.set('type', params.type)\n if (params?.group) qs.set('group', params.group)\n if (params?.page) qs.set('page', String(params.page))\n if (params?.perPage) qs.set('perPage', String(params.perPage))\n const url = `${baseUrl}/api/v1/${appId}/pages${qs.size ? `?${qs}` : ''}`\n const res = await fetch(url, {\n headers: headers(),\n next: { revalidate: 60, tags: [`cms-pages-${appId}`] },\n } as RequestInit)\n if (!res.ok) { console.error(`[sprintup-cms] getPages (${res.status})`); return [] }\n const json: CMSListResponse = await res.json()\n return json.data ?? []\n } catch (err) {\n console.error('[sprintup-cms] getPages error:', err)\n return []\n }\n }\n\n async function getPage(slug: string): Promise<CMSPage | null> {\n const { baseUrl, apiKey, appId } = cfg()\n if (!baseUrl || !apiKey || !appId) {\n console.warn('[sprintup-cms] Missing config — returning null')\n return null\n }\n try {\n const res = await fetch(`${baseUrl}/api/v1/${appId}/pages/${slug}`, {\n headers: headers(),\n next: { revalidate: 60, tags: [`cms-page-${slug}`, `cms-pages-${appId}`] },\n } as RequestInit)\n if (res.status === 404) return null\n if (!res.ok) { console.error(`[sprintup-cms] getPage \"${slug}\" (${res.status})`); return null }\n const json: CMSSingleResponse = await res.json()\n return json.data ?? null\n } catch (err) {\n console.error(`[sprintup-cms] getPage \"${slug}\" error:`, err)\n return null\n }\n }\n\n async function getBlogPosts(): Promise<CMSPage[]> {\n return getPages({ type: 'blog-post' })\n }\n\n async function getEvents(): Promise<CMSPage[]> {\n return getPages({ type: 'event-page' })\n }\n\n async function getAnnouncements(): Promise<CMSPage[]> {\n return getPages({ type: 'announcement-page' })\n }\n\n // ── Preview ────────────────────────────────────────────────────────────────\n\n async function getPreviewPage(token: string): Promise<CMSPage | null> {\n const { baseUrl, appId } = cfg()\n if (!baseUrl || !appId) {\n console.warn('[sprintup-cms] getPreviewPage: Missing baseUrl or appId — returning null')\n return null\n }\n try {\n const url = `${baseUrl}/api/v1/${appId}/preview?token=${encodeURIComponent(token)}`\n const res = await fetch(url, { cache: 'no-store' })\n if (!res.ok) {\n const errorText = await res.text().catch(() => '')\n console.error(`[sprintup-cms] getPreviewPage failed (${res.status}): ${errorText}`)\n return null\n }\n const json = await res.json()\n return json.data ?? null\n } catch (err) {\n console.error('[sprintup-cms] getPreviewPage error:', err)\n return null\n }\n }\n\n async function getPageWithPreview(slug: string, previewToken?: string | null): Promise<CMSPage | null> {\n if (previewToken) {\n const preview = await getPreviewPage(previewToken)\n if (preview?.slug === slug) return preview\n }\n return getPage(slug)\n }\n\n // ── Page Types ─────────────────────────────────────────────────────────────\n\n async function getPageType(pageTypeId: string): Promise<CMSPageType | null> {\n const { baseUrl, apiKey, appId } = cfg()\n if (!baseUrl || !apiKey || !appId || !pageTypeId) return null\n try {\n const res = await fetch(`${baseUrl}/api/v1/${appId}/page-types/${pageTypeId}`, {\n headers: headers(),\n next: { revalidate: 3600, tags: [`cms-page-type-${pageTypeId}`] },\n } as RequestInit)\n if (!res.ok) return null\n const json = await res.json()\n return json.data ?? null\n } catch {\n return null\n }\n }\n\n // ── Site Structure ─────────────────────────────────────────────────────────\n\n async function getSiteStructure(): Promise<CMSSiteStructure | null> {\n const { baseUrl, apiKey, appId } = cfg()\n if (!baseUrl || !apiKey || !appId) return null\n try {\n const res = await fetch(`${baseUrl}/api/v1/${appId}/site-structure`, {\n headers: headers(),\n next: {\n revalidate: 300,\n tags: [`site-structure-${appId}`],\n },\n } as RequestInit)\n if (!res.ok) return null\n const json = await res.json()\n return json.data ?? null\n } catch {\n return null\n }\n }\n\n /**\n * GET /api/v1/{appId}/sitemap\n * Fetch sitemap data for all published pages (priority, changefreq, lastmod).\n *\n * @example app/sitemap.ts\n * import type { MetadataRoute } from 'next'\n * import { cmsClient } from '@sprintup-cms/sdk'\n *\n * export default async function sitemap(): Promise<MetadataRoute.Sitemap> {\n * const data = await cmsClient.getSitemap()\n * if (!data?.enabled) return []\n * return data.urls.map(url => ({\n * url: `${process.env.NEXT_PUBLIC_SITE_URL}${url.loc}`,\n * lastModified: url.lastmod,\n * changeFrequency: url.changefreq as MetadataRoute.Sitemap[0]['changeFrequency'],\n * priority: url.priority,\n * }))\n * }\n */\n async function getSitemap(): Promise<CMSSitemapResponse | null> {\n const { baseUrl, apiKey, appId } = cfg()\n if (!baseUrl || !apiKey || !appId) return null\n try {\n const res = await fetch(`${baseUrl}/api/v1/${appId}/sitemap`, {\n headers: headers(),\n next: { revalidate: 3600 },\n } as RequestInit)\n if (!res.ok) return null\n const json = await res.json()\n return json.data ?? null\n } catch { return null }\n }\n\n /**\n * GET /api/v1/{appId}/status\n * Verify connectivity and retrieve page counts. Never cached — always fresh.\n * Useful for debugging API key setup.\n */\n async function getStatus(): Promise<CMSStatusResponse | null> {\n const { baseUrl, apiKey, appId } = cfg()\n if (!baseUrl || !apiKey || !appId) return null\n try {\n const res = await fetch(`${baseUrl}/api/v1/${appId}/status`, {\n headers: headers(),\n cache: 'no-store',\n } as RequestInit)\n if (!res.ok) return null\n return await res.json()\n } catch { return null }\n }\n\n async function getGlobals(): Promise<{ navigation: CMSPage | null; footer: CMSPage | null }> {\n const { baseUrl, appId } = cfg()\n if (!baseUrl || !appId) return { navigation: null, footer: null }\n try {\n const res = await fetch(`${baseUrl}/api/v1/${appId}/globals`, {\n headers: headers(),\n next: { revalidate: 60, tags: [`cms-globals-${appId}`] },\n } as RequestInit)\n if (!res.ok) {\n const [navPages, footerPages] = await Promise.all([\n getPages({ type: 'navigation' }),\n getPages({ type: 'footer' }),\n ])\n return { navigation: navPages[0] ?? null, footer: footerPages[0] ?? null }\n }\n const json = await res.json()\n return {\n navigation: json.data?.navigation ?? null,\n footer: json.data?.footer ?? null,\n }\n } catch {\n return { navigation: null, footer: null }\n }\n }\n\n return {\n getPages,\n getPage,\n getGlobals,\n getBlogPosts,\n getEvents,\n getAnnouncements,\n getPreviewPage,\n getPageWithPreview,\n getPageType,\n getSiteStructure,\n getSitemap,\n getStatus,\n }\n}\n\n// ── Default singleton ─────────────────────────────────────────────────────────\n\n/** Pre-configured singleton. Reads env vars lazily at request time. */\nexport const cmsClient = createCMSClient()\n","'use client'\n\nimport React from 'react'\nimport type { CMSBlock, CMSPageType } from '../client'\n\nexport interface CMSBlocksProps {\n blocks: CMSBlock[]\n pageType?: CMSPageType | null\n className?: string\n /**\n * Custom block renderers — extend or override built-in blocks.\n * @example\n * <CMSBlocks blocks={blocks} custom={{ 'my-hero': (block) => <MyHero {...block.data} /> }} />\n */\n custom?: Record<string, (block: CMSBlock) => React.ReactNode>\n}\n\n/**\n * Resolves block data from either `data` (v1.1+) or legacy `content` field.\n */\nfunction getData(block: CMSBlock): Record<string, any> {\n return block.data ?? block.content ?? {}\n}\n\n// ── Built-in block renderers ──────────────────────────────────────────────────\n\nfunction HeadingBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const text = d.text || d.heading || d.title || ''\n const level = Number(d.level) || 2\n const cls = {\n 1: 'text-4xl font-bold tracking-tight',\n 2: 'text-2xl font-bold mt-8',\n 3: 'text-xl font-semibold mt-6',\n 4: 'text-lg font-medium mt-4',\n }[level] ?? 'text-2xl font-bold'\n return React.createElement(`h${level}`, { className: cls }, text)\n}\n\nfunction TextBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const raw = d.text || d.content || ''\n // If the stored value contains HTML tags, render it properly rather than as raw tag text\n const isHtml = typeof raw === 'string' && /<[a-z][\\s\\S]*>/i.test(raw)\n if (isHtml) {\n return (\n <div\n className=\"prose prose-neutral dark:prose-invert max-w-none\"\n dangerouslySetInnerHTML={{ __html: raw }}\n />\n )\n }\n return <p className=\"text-base leading-relaxed text-muted-foreground\">{raw}</p>\n}\n\nfunction RichTextBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const html = d.content || d.richtext || d.text || ''\n if (!html) return null\n return (\n <div\n className=\"prose prose-neutral dark:prose-invert max-w-none\"\n dangerouslySetInnerHTML={{ __html: html }}\n />\n )\n}\n\nfunction ImageBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const src = d.src || d.url || d.image || ''\n if (!src) return null\n return (\n <figure className=\"my-6\">\n <img src={src} alt={d.alt || ''} className=\"w-full rounded-lg border object-cover\" />\n {d.caption && (\n <figcaption className=\"mt-2 text-sm text-muted-foreground text-center\">{d.caption}</figcaption>\n )}\n </figure>\n )\n}\n\nfunction HeroBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n return (\n <section className=\"py-12 md:py-20\">\n <div className=\"max-w-3xl\">\n {d.badge && (\n <span className=\"inline-block px-3 py-1 text-xs font-semibold rounded-full bg-secondary text-secondary-foreground mb-4\">\n {d.badge}\n </span>\n )}\n <h1 className=\"text-4xl md:text-5xl font-bold tracking-tight mb-4 text-balance\">{d.title}</h1>\n {d.subtitle && <p className=\"text-xl text-muted-foreground mb-8\">{d.subtitle}</p>}\n {(d.primaryButton || d.cta) && (\n <div className=\"flex gap-4 flex-wrap\">\n {(d.primaryButton || d.cta) && (\n <a href={d.primaryUrl || d.ctaUrl || '#'}\n className=\"inline-flex items-center px-6 py-3 rounded-lg bg-primary text-primary-foreground font-semibold hover:opacity-90 transition-opacity\">\n {d.primaryButton || d.cta}\n </a>\n )}\n {d.secondaryButton && (\n <a href={d.secondaryUrl || '#'}\n className=\"inline-flex items-center px-6 py-3 rounded-lg border border-border font-semibold hover:bg-muted transition-colors\">\n {d.secondaryButton}\n </a>\n )}\n </div>\n )}\n </div>\n </section>\n )\n}\n\nfunction CTABlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n return (\n <section className=\"py-12 px-8 rounded-xl bg-primary text-primary-foreground text-center\">\n <h2 className=\"text-2xl md:text-3xl font-bold mb-4\">{d.title}</h2>\n {d.subtitle && <p className=\"text-primary-foreground/80 mb-6 max-w-2xl mx-auto\">{d.subtitle}</p>}\n <div className=\"flex gap-4 justify-center flex-wrap\">\n {d.primaryButton && (\n <a href={d.primaryUrl || '#'}\n className=\"px-6 py-3 rounded-lg bg-background text-foreground font-semibold hover:opacity-90 transition-opacity\">\n {d.primaryButton}\n </a>\n )}\n {d.secondaryButton && (\n <a href={d.secondaryUrl || '#'}\n className=\"px-6 py-3 rounded-lg border border-primary-foreground/20 text-primary-foreground font-semibold hover:bg-primary-foreground/10 transition-colors\">\n {d.secondaryButton}\n </a>\n )}\n </div>\n </section>\n )\n}\n\nfunction FAQBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const items: { question: string; answer: string }[] = d.items || []\n return (\n <section className=\"py-8\">\n {d.title && <h2 className=\"text-2xl font-bold mb-6\">{d.title}</h2>}\n <div className=\"space-y-4\">\n {items.map((item, i) => (\n <details key={i} className=\"group border border-border rounded-lg\">\n <summary className=\"flex items-center justify-between p-4 cursor-pointer font-medium select-none\">\n {item.question}\n <span className=\"transition-transform group-open:rotate-45 text-lg leading-none\">+</span>\n </summary>\n <div className=\"px-4 pb-4 text-muted-foreground\">{item.answer}</div>\n </details>\n ))}\n </div>\n </section>\n )\n}\n\nfunction TeamMemberBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n return (\n <div className=\"flex flex-col sm:flex-row items-center sm:items-start gap-4 p-6 rounded-xl border border-border bg-card\">\n {d.avatar ? (\n <img\n src={d.avatar}\n alt={d.name || 'Team member'}\n className=\"w-20 h-20 rounded-full object-cover border-2 border-border flex-shrink-0\"\n />\n ) : (\n <div className=\"w-20 h-20 rounded-full bg-muted flex items-center justify-center text-muted-foreground text-2xl font-semibold flex-shrink-0\">\n {(d.name || 'T').charAt(0).toUpperCase()}\n </div>\n )}\n <div className=\"text-center sm:text-left\">\n {d.name && <h3 className=\"font-semibold text-lg\">{d.name}</h3>}\n {d.role && <p className=\"text-sm text-primary font-medium\">{d.role}</p>}\n {d.bio && <p className=\"text-sm text-muted-foreground mt-2 leading-relaxed\">{d.bio}</p>}\n </div>\n </div>\n )\n}\n\nfunction StatsBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const items: { value: string; label: string }[] = d.items || d.stats || []\n return (\n <section className=\"py-8\">\n {d.title && <h2 className=\"text-2xl font-bold mb-6 text-center\">{d.title}</h2>}\n <div className={`grid gap-6 grid-cols-2 md:grid-cols-${Math.min(items.length, 4)}`}>\n {items.map((s, i) => (\n <div key={i} className=\"text-center p-6 rounded-lg border bg-card\">\n <div className=\"text-3xl font-bold text-primary\">{s.value}</div>\n <div className=\"text-sm text-muted-foreground mt-1\">{s.label}</div>\n </div>\n ))}\n </div>\n </section>\n )\n}\n\nfunction TestimonialBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n return (\n <div className=\"border border-border rounded-xl p-6 bg-card\">\n <blockquote className=\"text-lg italic mb-4 text-foreground\">\"{d.quote}\"</blockquote>\n <div className=\"flex items-center gap-3\">\n {d.avatar && <img src={d.avatar} alt=\"\" className=\"w-10 h-10 rounded-full object-cover\" />}\n <div>\n <div className=\"font-semibold\">{d.author}</div>\n {d.role && <div className=\"text-sm text-muted-foreground\">{d.role}</div>}\n </div>\n </div>\n </div>\n )\n}\n\nfunction QuoteBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n return (\n <blockquote className=\"border-l-4 border-primary pl-6 py-2 italic text-lg\">\n {d.text}\n {d.author && <footer className=\"mt-2 text-sm text-muted-foreground not-italic\">— {d.author}</footer>}\n </blockquote>\n )\n}\n\nfunction AlertBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const colors: Record<string, string> = {\n info: 'bg-blue-50 border-blue-200 text-blue-800 dark:bg-blue-950 dark:border-blue-800 dark:text-blue-200',\n success: 'bg-green-50 border-green-200 text-green-800 dark:bg-green-950 dark:border-green-800 dark:text-green-200',\n warning: 'bg-yellow-50 border-yellow-200 text-yellow-800 dark:bg-yellow-950 dark:border-yellow-800 dark:text-yellow-200',\n error: 'bg-red-50 border-red-200 text-red-800 dark:bg-red-950 dark:border-red-800 dark:text-red-200',\n }\n const variant = d.variant || d.type || 'info'\n return (\n <div className={`p-4 rounded-lg border ${colors[variant] ?? colors.info}`}>\n {d.title && <div className=\"font-semibold mb-1\">{d.title}</div>}\n <p>{d.message || d.text || ''}</p>\n </div>\n )\n}\n\nfunction DividerBlock() {\n return <hr className=\"my-8 border-border\" />\n}\n\nfunction SpacerBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const sizes: Record<string, string> = { sm: 'h-4', md: 'h-8', lg: 'h-16', xl: 'h-24' }\n return <div className={sizes[d.size] ?? 'h-8'} />\n}\n\nfunction VideoBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const url = d.url || d.embed || ''\n if (!url) return null\n // Convert YouTube/Vimeo watch URLs to embed URLs\n const embedUrl = url\n .replace('youtube.com/watch?v=', 'youtube.com/embed/')\n .replace('youtu.be/', 'youtube.com/embed/')\n .replace('vimeo.com/', 'player.vimeo.com/video/')\n return (\n <div className=\"aspect-video rounded-lg overflow-hidden border bg-muted\">\n <iframe src={embedUrl} allow=\"autoplay; fullscreen\" allowFullScreen className=\"w-full h-full\" title={d.title || 'Video'} />\n </div>\n )\n}\n\n// ── Product List Block (dynamic, fetches from API) ────────────────────────────\n\ninterface Product {\n id: string\n name: string\n price: number\n image?: string\n rating?: number\n category?: string\n description?: string\n badge?: string\n}\n\nfunction normaliseProduct(raw: Record<string, any>): Product {\n if (raw.id !== undefined && raw.price !== undefined) return raw as Product\n const firstPlan = Array.isArray(raw.plans) && raw.plans.length > 0 ? raw.plans[0] : null\n const courseCount = Array.isArray(raw.courses) ? raw.courses.length : undefined\n // Skip base64 images — too large, use thumbnail or nothing\n const image = raw.image && !raw.image.startsWith('data:') ? raw.image : (raw.thumbnail ?? undefined)\n return {\n id: raw._id ?? raw.id ?? String(Math.random()),\n name: raw.name ?? 'Unnamed',\n description: raw.description,\n price: firstPlan?.price ?? raw.price ?? 0,\n image,\n rating: raw.rating ?? undefined,\n category: raw.type ? raw.type.replace(/-/g, ' ').replace(/\\b\\w/g, (c: string) => c.toUpperCase()) : undefined,\n badge: courseCount ? `${courseCount} course${courseCount !== 1 ? 's' : ''}` : (raw.duration ? `${raw.duration} min` : undefined),\n }\n}\n\nfunction ProductListBlock({ block }: { block: CMSBlock }) {\n // Config lives in block.content; pre-fetched products in block.data.products (set by CMS API)\n const cfg = (block.content ?? {}) as any\n const { title, subtitle, columns = 3, showPrice = true, showRating = true, limit = 6, currency = '$' } = cfg\n const cols = parseInt(String(columns), 10)\n const gridCols = cols === 2 ? 'sm:grid-cols-2' : cols === 4 ? 'sm:grid-cols-2 lg:grid-cols-4' : 'sm:grid-cols-2 lg:grid-cols-3'\n\n // Products pre-fetched by CMS API — stored in content.prefetchedProducts (survives RSC serialization)\n const rawProducts = Array.isArray(cfg.prefetchedProducts) ? cfg.prefetchedProducts : []\n const products: Product[] = (rawProducts as any[]).map(normaliseProduct).slice(0, Number(limit))\n\n if (products.length === 0) {\n return (\n <section className=\"py-12\">\n <div className=\"max-w-6xl mx-auto px-4\">\n <div className=\"text-center py-12 border border-dashed border-border rounded-lg bg-muted/10\">\n <p className=\"text-sm text-muted-foreground\">No products available</p>\n </div>\n </div>\n </section>\n )\n }\n\n return (\n <section className=\"py-12\">\n <div className=\"max-w-6xl mx-auto px-4\">\n {(title || subtitle) && (\n <div className=\"text-center mb-8\">\n {title && <h2 className=\"text-2xl md:text-3xl font-semibold tracking-tight\">{title}</h2>}\n {subtitle && <p className=\"text-muted-foreground mt-2\">{subtitle}</p>}\n </div>\n )}\n <div className={`grid gap-6 grid-cols-1 ${gridCols}`}>\n {products.map((product) => (\n <div key={product.id} className=\"border rounded-lg overflow-hidden group hover:shadow-md transition-shadow bg-card\">\n {product.image && (\n <div className=\"aspect-video relative bg-muted overflow-hidden\">\n <img src={product.image} alt={product.name} className=\"w-full h-full object-cover group-hover:scale-105 transition-transform duration-300\" />\n </div>\n )}\n <div className=\"p-4 space-y-2\">\n <div className=\"flex items-center gap-2 flex-wrap\">\n {product.category && (\n <span className=\"text-xs px-2 py-0.5 rounded-full bg-primary/10 text-primary font-medium\">{product.category}</span>\n )}\n {product.badge && (\n <span className=\"text-xs px-2 py-0.5 rounded-full bg-muted text-muted-foreground\">{product.badge}</span>\n )}\n </div>\n <h3 className=\"font-semibold text-base line-clamp-2\">{product.name}</h3>\n <div className=\"flex items-center justify-between pt-1\">\n {showPrice && product.price > 0 && (\n <span className=\"font-bold text-lg\">{typeof product.price === 'number' ? product.price.toFixed(2) : product.price} {currency}</span>\n )}\n {showRating && product.rating && (\n <div className=\"flex items-center gap-1 text-sm text-muted-foreground\">\n <svg className=\"w-3.5 h-3.5 fill-yellow-400 text-yellow-400\" viewBox=\"0 0 24 24\"><path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"/></svg>\n <span>{product.rating}</span>\n </div>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n </section>\n )\n}\n\n// ── Renders a single field value based on its field type ──────────────────────\n\nfunction FieldValue({ value, fieldType }: { value: any; fieldType: string }) {\n if (value === null || value === undefined || value === '') return null\n const isHtml = (v: any) => typeof v === 'string' && /<[a-z][\\s\\S]*>/i.test(v)\n\n if (fieldType === 'richtext' || isHtml(value)) {\n return (\n <div\n className=\"prose prose-neutral dark:prose-invert max-w-none\"\n dangerouslySetInnerHTML={{ __html: String(value) }}\n />\n )\n }\n if (fieldType === 'image') {\n return <img src={String(value)} alt=\"\" className=\"rounded-lg border max-h-96 object-cover w-full\" />\n }\n if (fieldType === 'boolean') {\n return <span className=\"text-muted-foreground\">{value ? 'Yes' : 'No'}</span>\n }\n if (fieldType === 'url') {\n return <a href={String(value)} className=\"text-primary underline underline-offset-2 break-all\">{String(value)}</a>\n }\n if (Array.isArray(value)) {\n return <span className=\"text-muted-foreground\">{value.join(', ')}</span>\n }\n return <span className=\"text-muted-foreground\">{String(value)}</span>\n}\n\n// ── Structured block: type === '__structured__', content is nested { sectionName: { fieldName: value } }\n// ────────────────────────────────────────────────────��────────────────────────\n\nfunction StructuredBlock({ block, pageType }: { block: CMSBlock; pageType?: CMSPageType | null }) {\n // content is { sectionName: { fieldName: value } } after API denormalization\n const nested: Record<string, Record<string, any>> = (block.content ?? block.data ?? {}) as any\n\n // If we have the page type schema, use it to drive rendering with correct field types\n if (pageType?.sections?.length) {\n return (\n <div className=\"space-y-8\">\n {pageType.sections.map(section => {\n const sectionData = nested[section.name] ?? {}\n const filledFields = section.fields.filter(f => {\n const v = sectionData[f.name]\n return v !== undefined && v !== null && v !== ''\n })\n if (filledFields.length === 0) return null\n return (\n <section key={section.id} className=\"space-y-4\">\n {filledFields.map(field => {\n const value = sectionData[field.name]\n if (value === undefined || value === null || value === '') return null\n return (\n <div key={field.id}>\n <FieldValue value={value} fieldType={field.fieldType} />\n </div>\n )\n })}\n </section>\n )\n })}\n </div>\n )\n }\n\n // No schema — iterate the nested sections and render scalar + html values\n const isHtml = (v: any) => typeof v === 'string' && /<[a-z][\\s\\S]*>/i.test(v)\n return (\n <div className=\"space-y-8\">\n {Object.entries(nested).map(([sectionName, fields]) => {\n if (!fields || typeof fields !== 'object' || Array.isArray(fields)) return null\n const entries = Object.entries(fields).filter(([, v]) => v !== '' && v !== null && v !== undefined)\n if (entries.length === 0) return null\n return (\n <section key={sectionName} className=\"space-y-4\">\n {entries.map(([fieldName, value]) => {\n if (typeof value === 'object' && !Array.isArray(value)) return null\n return (\n <div key={fieldName}>\n {isHtml(value) ? (\n <div className=\"prose prose-neutral dark:prose-invert max-w-none\" dangerouslySetInnerHTML={{ __html: String(value) }} />\n ) : Array.isArray(value) ? (\n <p className=\"text-muted-foreground\">{value.join(', ')}</p>\n ) : (\n <p className=\"text-muted-foreground\">{String(value)}</p>\n )}\n </div>\n )\n })}\n </section>\n )\n })}\n </div>\n )\n}\n\n// ── Named section block (block.type matches a pageType section name) ──────────\n\nfunction SectionBlock({ block, pageType }: { block: CMSBlock; pageType?: CMSPageType | null }) {\n const d = getData(block)\n const section = pageType?.sections.find(s => s.name === block.type)\n\n if (section) {\n const filledFields = section.fields.filter(f => {\n const v = d[f.name]\n return v !== undefined && v !== null && v !== ''\n })\n if (filledFields.length === 0) return null\n return (\n <section className=\"space-y-4\">\n {filledFields.map(field => {\n const value = d[field.name]\n if (value === undefined || value === null || value === '') return null\n return (\n <div key={field.id}>\n <FieldValue value={value} fieldType={field.fieldType} />\n </div>\n )\n })}\n </section>\n )\n }\n\n // No schema — render scalar values only\n const isHtml = (v: any) => typeof v === 'string' && /<[a-z][\\s\\S]*>/i.test(v)\n const entries = Object.entries(d).filter(([, v]) =>\n v !== '' && v !== null && v !== undefined &&\n typeof v !== 'object' && !Array.isArray(v)\n )\n if (entries.length === 0) return null\n return (\n <section className=\"space-y-2\">\n {entries.map(([key, value]) =>\n isHtml(value) ? (\n <div key={key} className=\"prose prose-neutral dark:prose-invert max-w-none\" dangerouslySetInnerHTML={{ __html: String(value) }} />\n ) : (\n <p key={key} className=\"text-muted-foreground\">{String(value)}</p>\n )\n )}\n </section>\n )\n}\n\n// Maps icon string names (from editor) to inline SVG paths\nconst FEATURE_ICONS: Record<string, React.ReactNode> = {\n zap: <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-5 h-5\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"/></svg>,\n shield: <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-5 h-5\"><path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"/></svg>,\n star: <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-5 h-5\"><polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"/></svg>,\n check: <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-5 h-5\"><polyline points=\"20 6 9 17 4 12\"/></svg>,\n lock: <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-5 h-5\"><rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\"/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"/></svg>,\n globe: <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-5 h-5\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"/><path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"/></svg>,\n clock: <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-5 h-5\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><polyline points=\"12 6 12 12 16 14\"/></svg>,\n heart: <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-5 h-5\"><path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"/></svg>,\n settings: <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-5 h-5\"><circle cx=\"12\" cy=\"12\" r=\"3\"/><path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 1 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 1 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 1 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 1 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z\"/></svg>,\n users: <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-5 h-5\"><path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"/><circle cx=\"9\" cy=\"7\" r=\"4\"/><path d=\"M23 21v-2a4 4 0 0 0-3-3.87\"/><path d=\"M16 3.13a4 4 0 0 1 0 7.75\"/></svg>,\n trending: <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-5 h-5\"><polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\"/><polyline points=\"17 6 23 6 23 12\"/></svg>,\n}\n\nfunction ButtonBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const label = d.label || d.text || 'Button'\n const url = d.url || '#'\n const variant = d.variant || 'default'\n const base = 'inline-flex items-center justify-center px-5 py-2.5 rounded-lg text-sm font-medium transition-opacity hover:opacity-90'\n const cls = variant === 'outline'\n ? `${base} border border-primary text-primary bg-transparent`\n : variant === 'ghost'\n ? `${base} text-primary hover:bg-primary/10`\n : `${base} bg-primary text-primary-foreground`\n return (\n <div>\n <a href={url} className={cls}>{label}</a>\n </div>\n )\n}\n\nfunction ListBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const items: string[] = Array.isArray(d.items) ? d.items : []\n const ordered = Boolean(d.ordered)\n const Tag = ordered ? 'ol' : 'ul'\n const listCls = ordered ? 'list-decimal' : 'list-disc'\n return (\n <Tag className={`${listCls} pl-6 space-y-1.5 text-base text-foreground leading-relaxed`}>\n {items.map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </Tag>\n )\n}\n\nfunction GalleryBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const images: any[] = Array.isArray(d.images) ? d.images : []\n const cols = Number(d.columns) || 3\n const gridCols = cols === 2 ? 'grid-cols-2' : cols === 4 ? 'grid-cols-2 md:grid-cols-4' : 'grid-cols-2 md:grid-cols-3'\n if (!images.length) return null\n return (\n <div className={`grid gap-3 ${gridCols}`}>\n {images.filter(img => img.src).map((img, i) => (\n <figure key={i} className=\"overflow-hidden rounded-lg border border-border\">\n <img src={img.src} alt={img.alt || ''} className=\"w-full h-48 object-cover\" />\n {img.caption && <figcaption className=\"px-2 py-1 text-xs text-muted-foreground text-center\">{img.caption}</figcaption>}\n </figure>\n ))}\n </div>\n )\n}\n\nfunction PricingTableBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const tiers: any[] = Array.isArray(d.tiers) ? d.tiers : []\n const [yearly, setYearly] = React.useState(false)\n return (\n <section className=\"py-12\">\n {(d.title || d.subtitle) && (\n <div className=\"text-center mb-8\">\n {d.title && <h2 className=\"text-2xl md:text-3xl font-bold tracking-tight\">{d.title}</h2>}\n {d.subtitle && <p className=\"mt-2 text-muted-foreground\">{d.subtitle}</p>}\n </div>\n )}\n {d.billingToggle && (\n <div className=\"flex items-center justify-center gap-3 mb-8\">\n <span className={`text-sm ${!yearly ? 'font-semibold' : 'text-muted-foreground'}`}>Monthly</span>\n <button\n onClick={() => setYearly(v => !v)}\n className={`relative w-10 h-6 rounded-full transition-colors ${yearly ? 'bg-primary' : 'bg-muted'}`}\n aria-label=\"Toggle billing period\"\n >\n <span className={`absolute top-1 w-4 h-4 rounded-full bg-white shadow transition-all ${yearly ? 'left-5' : 'left-1'}`} />\n </button>\n <span className={`text-sm ${yearly ? 'font-semibold' : 'text-muted-foreground'}`}>Yearly</span>\n </div>\n )}\n <div className={`grid gap-6 ${tiers.length === 2 ? 'md:grid-cols-2' : tiers.length >= 3 ? 'md:grid-cols-3' : ''}`}>\n {tiers.map((tier, i) => {\n const price = yearly ? tier.yearlyPrice ?? tier.monthlyPrice : tier.monthlyPrice\n const featured = Boolean(tier.featured)\n return (\n <div key={tier.id || i} className={`flex flex-col rounded-2xl border p-8 ${featured ? 'border-primary bg-primary text-primary-foreground shadow-xl' : 'border-border bg-card'}`}>\n <div className=\"mb-6\">\n <h3 className={`text-xl font-bold ${featured ? 'text-primary-foreground' : ''}`}>{tier.name}</h3>\n {tier.description && <p className={`text-sm mt-1 ${featured ? 'text-primary-foreground/70' : 'text-muted-foreground'}`}>{tier.description}</p>}\n <div className=\"mt-4 flex items-end gap-1\">\n <span className={`text-4xl font-extrabold ${featured ? 'text-primary-foreground' : ''}`}>{d.currency ?? '$'}{price ?? 0}</span>\n <span className={`text-sm mb-1 ${featured ? 'text-primary-foreground/70' : 'text-muted-foreground'}`}>/mo</span>\n </div>\n </div>\n <ul className=\"space-y-2 flex-1 mb-8\">\n {(tier.features ?? []).map((f: any, j: number) => (\n <li key={j} className=\"flex items-center gap-2 text-sm\">\n <svg className={`w-4 h-4 flex-shrink-0 ${f.included ? (featured ? 'text-primary-foreground' : 'text-primary') : 'text-muted-foreground opacity-40'}`} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n {f.included ? <polyline points=\"20 6 9 17 4 12\"/> : <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/>}\n </svg>\n <span className={!f.included ? 'opacity-50' : ''}>{f.text}</span>\n </li>\n ))}\n </ul>\n {tier.cta && (\n <a href={tier.ctaUrl || '#'} className={`block text-center py-2.5 px-6 rounded-lg font-semibold text-sm transition-opacity hover:opacity-90 ${featured ? 'bg-primary-foreground text-primary' : 'bg-primary text-primary-foreground'}`}>\n {tier.cta}\n </a>\n )}\n </div>\n )\n })}\n </div>\n </section>\n )\n}\n\nfunction SplitHeroBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const imgLeft = d.imagePosition === 'left'\n return (\n <section className=\"py-16\">\n <div className={`flex flex-col ${imgLeft ? 'md:flex-row-reverse' : 'md:flex-row'} items-center gap-10 md:gap-16 max-w-6xl mx-auto px-4`}>\n <div className=\"flex-1 space-y-5\">\n {d.title && <h1 className=\"text-3xl md:text-5xl font-extrabold tracking-tight text-balance leading-tight\">{d.title}</h1>}\n {d.subtitle && <p className=\"text-lg text-muted-foreground leading-relaxed text-pretty\">{d.subtitle}</p>}\n {(d.button || d.secondaryButton) && (\n <div className=\"flex flex-wrap gap-3 pt-2\">\n {d.button && <a href={d.buttonUrl || '#'} className=\"inline-flex items-center px-6 py-3 rounded-lg bg-primary text-primary-foreground font-semibold text-sm hover:opacity-90 transition-opacity\">{d.button}</a>}\n {d.secondaryButton && <a href={d.secondaryUrl || '#'} className=\"inline-flex items-center px-6 py-3 rounded-lg border border-border text-foreground font-semibold text-sm hover:bg-muted transition-colors\">{d.secondaryButton}</a>}\n </div>\n )}\n </div>\n <div className=\"flex-1 w-full\">\n {d.image\n ? <img src={d.image} alt={d.title || ''} className=\"w-full rounded-2xl object-cover shadow-lg border border-border\" />\n : <div className=\"w-full rounded-2xl bg-muted border border-border aspect-video flex items-center justify-center\"><span className=\"text-xs text-muted-foreground\">No image set</span></div>\n }\n </div>\n </div>\n </section>\n )\n}\n\n\nfunction AccordionBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const items: any[] = Array.isArray(d.items) ? d.items : []\n const [open, setOpen] = React.useState<number | null>(null)\n return (\n <section className=\"py-8\">\n {d.title && <h2 className=\"text-2xl font-bold text-center mb-6 text-balance\">{d.title}</h2>}\n <div className=\"max-w-2xl mx-auto divide-y divide-border border border-border rounded-xl overflow-hidden\">\n {items.map((item, i) => (\n <div key={i}>\n <button\n type=\"button\"\n className=\"w-full flex items-center justify-between px-5 py-4 text-left text-sm font-medium hover:bg-muted/50 transition-colors\"\n onClick={() => setOpen(open === i ? null : i)}\n aria-expanded={open === i}\n >\n <span>{item.title}</span>\n <svg className={`w-4 h-4 text-muted-foreground transition-transform ${open === i ? 'rotate-180' : ''}`} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><polyline points=\"6 9 12 15 18 9\"/></svg>\n </button>\n {open === i && (\n <div className=\"px-5 pb-4 text-sm text-muted-foreground leading-relaxed\" dangerouslySetInnerHTML={{ __html: item.content || '' }} />\n )}\n </div>\n ))}\n </div>\n </section>\n )\n}\n\nfunction TabsBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const tabs: any[] = Array.isArray(d.tabs) ? d.tabs : []\n const [active, setActive] = React.useState(0)\n if (!tabs.length) return null\n return (\n <div className=\"py-6\">\n <div className=\"flex gap-1 border-b border-border mb-6 overflow-x-auto\">\n {tabs.map((tab, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={() => setActive(i)}\n className={`px-4 py-2 text-sm font-medium whitespace-nowrap transition-colors border-b-2 -mb-px ${active === i ? 'border-primary text-primary' : 'border-transparent text-muted-foreground hover:text-foreground'}`}\n >\n {tab.label}\n </button>\n ))}\n </div>\n <div className=\"text-sm text-foreground leading-relaxed\" dangerouslySetInnerHTML={{ __html: tabs[active]?.content || '' }} />\n </div>\n )\n}\n\nfunction ColumnsBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const items: any[] = Array.isArray(d.items) ? d.items : []\n const cols = Number(d.columns) || 3\n const gridCols = cols === 2 ? 'md:grid-cols-2' : cols === 4 ? 'md:grid-cols-4' : 'md:grid-cols-3'\n const gap = d.gap === 'sm' ? 'gap-4' : d.gap === 'lg' ? 'gap-12' : 'gap-8'\n if (!items.length) return null\n return (\n <div className={`grid grid-cols-1 ${gridCols} ${gap}`}>\n {items.map((item, i) => (\n <div key={i} className=\"text-sm leading-relaxed\" dangerouslySetInnerHTML={{ __html: item.content || '' }} />\n ))}\n </div>\n )\n}\n\nfunction ContainerBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const maxW: Record<string, string> = { sm: 'max-w-sm', md: 'max-w-md', lg: 'max-w-lg', xl: 'max-w-xl', '2xl': 'max-w-2xl', '4xl': 'max-w-4xl', full: 'max-w-full' }\n const pad: Record<string, string> = { none: 'px-0 py-0', sm: 'px-4 py-4', md: 'px-6 py-8', lg: 'px-8 py-12' }\n const align: Record<string, string> = { left: 'text-left', center: 'text-center', right: 'text-right' }\n const style = d.bgColor ? { backgroundColor: d.bgColor } : undefined\n return (\n <section style={style} className={d.bgColor ? 'rounded-xl' : ''}>\n <div className={`mx-auto ${maxW[d.maxWidth || '4xl'] ?? 'max-w-4xl'} ${pad[d.padding || 'md'] ?? 'px-6 py-8'} ${align[d.align || 'left'] ?? 'text-left'}`}>\n {d.title && <h2 className=\"text-2xl md:text-3xl font-bold tracking-tight text-balance mb-4\">{d.title}</h2>}\n {d.content && (\n <div\n className=\"prose prose-sm max-w-none leading-relaxed\"\n dangerouslySetInnerHTML={{ __html: d.content }}\n />\n )}\n </div>\n </section>\n )\n}\n\nfunction CarouselBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const slides: any[] = Array.isArray(d.slides) ? d.slides : []\n const [current, setCurrent] = React.useState(0)\n\n React.useEffect(() => {\n if (!d.autoplay || slides.length < 2) return\n const id = setInterval(() => setCurrent(c => (c + 1) % slides.length), Number(d.interval) || 4000)\n return () => clearInterval(id)\n }, [d.autoplay, d.interval, slides.length])\n\n if (!slides.length) return null\n const prev = () => setCurrent(c => (c - 1 + slides.length) % slides.length)\n const next = () => setCurrent(c => (c + 1) % slides.length)\n const slide = slides[current]\n\n return (\n <div className=\"relative w-full overflow-hidden rounded-xl border border-border bg-muted\">\n <div className=\"relative aspect-video\">\n {slide.image\n ? <img src={slide.image} alt={slide.title || ''} className=\"w-full h-full object-cover\" />\n : <div className=\"w-full h-full flex items-center justify-center text-muted-foreground text-sm\">No image</div>\n }\n {(slide.title || slide.subtitle) && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-end pb-8 bg-gradient-to-t from-black/60 to-transparent text-white text-center px-6\">\n {slide.title && <h3 className=\"text-xl font-bold text-balance\">{slide.title}</h3>}\n {slide.subtitle && <p className=\"text-sm opacity-80 mt-1\">{slide.subtitle}</p>}\n </div>\n )}\n </div>\n {d.showArrows !== false && slides.length > 1 && (\n <>\n <button onClick={prev} className=\"absolute left-3 top-1/2 -translate-y-1/2 w-9 h-9 rounded-full bg-black/40 text-white flex items-center justify-center hover:bg-black/60 transition-colors\" aria-label=\"Previous\">\n <svg className=\"w-5 h-5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><polyline points=\"15 18 9 12 15 6\"/></svg>\n </button>\n <button onClick={next} className=\"absolute right-3 top-1/2 -translate-y-1/2 w-9 h-9 rounded-full bg-black/40 text-white flex items-center justify-center hover:bg-black/60 transition-colors\" aria-label=\"Next\">\n <svg className=\"w-5 h-5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><polyline points=\"9 18 15 12 9 6\"/></svg>\n </button>\n </>\n )}\n {d.showDots !== false && slides.length > 1 && (\n <div className=\"absolute bottom-3 left-1/2 -translate-x-1/2 flex gap-1.5\">\n {slides.map((_, i) => (\n <button key={i} onClick={() => setCurrent(i)} className={`w-2 h-2 rounded-full transition-colors ${i === current ? 'bg-white' : 'bg-white/40'}`} aria-label={`Slide ${i + 1}`} />\n ))}\n </div>\n )}\n </div>\n )\n}\n\nfunction CardGridBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const cards: any[] = Array.isArray(d.cards) ? d.cards : []\n const cols = Number(d.columns) || 3\n const gridCols = cols === 2 ? 'sm:grid-cols-2' : cols === 4 ? 'sm:grid-cols-2 lg:grid-cols-4' : 'sm:grid-cols-2 lg:grid-cols-3'\n return (\n <section className=\"py-12\">\n <div className=\"max-w-6xl mx-auto px-4\">\n {d.title && <h2 className=\"text-2xl md:text-3xl font-bold tracking-tight text-center text-balance mb-8\">{d.title}</h2>}\n {cards.length === 0 ? (\n <p className=\"text-center text-sm text-muted-foreground\">No cards added yet.</p>\n ) : (\n <div className={`grid grid-cols-1 gap-6 ${gridCols}`}>\n {cards.map((card, i) => (\n <div key={i} className=\"flex flex-col rounded-xl border border-border bg-card overflow-hidden hover:shadow-md transition-shadow\">\n {card.image && (\n <div className=\"aspect-video overflow-hidden bg-muted\">\n <img\n src={card.image}\n alt={card.title || ''}\n className=\"w-full h-full object-cover\"\n onError={(e) => { (e.target as HTMLImageElement).style.display = 'none' }}\n />\n </div>\n )}\n <div className=\"flex flex-col flex-1 p-5 gap-2\">\n {card.title && <h3 className=\"font-semibold text-base\">{card.title}</h3>}\n {card.description && <p className=\"text-sm text-muted-foreground leading-relaxed flex-1\">{card.description}</p>}\n {card.link && (\n <a href={card.link} className=\"inline-flex items-center text-sm font-medium text-primary hover:underline mt-2\">\n {card.linkText || 'Learn more'} →\n </a>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </section>\n )\n}\n\nfunction TimelineBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const items: any[] = Array.isArray(d.items) ? d.items : []\n return (\n <section className=\"py-12\">\n <div className=\"max-w-3xl mx-auto px-4\">\n {(d.title || d.subtitle) && (\n <div className=\"text-center mb-10\">\n {d.title && <h2 className=\"text-2xl md:text-3xl font-bold tracking-tight text-balance\">{d.title}</h2>}\n {d.subtitle && <p className=\"mt-2 text-muted-foreground text-pretty\">{d.subtitle}</p>}\n </div>\n )}\n {items.length === 0 ? (\n <p className=\"text-center text-sm text-muted-foreground\">No timeline items added yet.</p>\n ) : (\n <div className=\"relative\">\n <div className=\"absolute left-6 top-0 bottom-0 w-px bg-border\" aria-hidden=\"true\" />\n <div className=\"space-y-8\">\n {items.map((item, i) => (\n <div key={i} className=\"relative flex gap-6\">\n <div className=\"flex-shrink-0 w-12 h-12 rounded-full bg-primary text-primary-foreground flex items-center justify-center text-xs font-bold z-10 ring-4 ring-background\">\n {item.year || i + 1}\n </div>\n <div className=\"flex-1 pb-2 pt-1\">\n {item.title && <h3 className=\"font-semibold text-base\">{item.title}</h3>}\n {item.description && <p className=\"text-sm text-muted-foreground mt-1 leading-relaxed\">{item.description}</p>}\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n </section>\n )\n}\n\nfunction PricingCardBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const features: string[] = Array.isArray(d.features) ? d.features : []\n const featured = Boolean(d.featured)\n return (\n <div className={`relative flex flex-col rounded-2xl border p-8 ${featured ? 'border-primary bg-primary text-primary-foreground shadow-xl scale-105' : 'border-border bg-card'}`}>\n {featured && (\n <span className=\"absolute -top-3 left-1/2 -translate-x-1/2 px-3 py-1 rounded-full bg-primary-foreground text-primary text-xs font-semibold\">\n Most Popular\n </span>\n )}\n <div className=\"mb-6\">\n {d.name && <h3 className={`text-xl font-bold ${featured ? 'text-primary-foreground' : ''}`}>{d.name}</h3>}\n <div className=\"mt-2 flex items-end gap-1\">\n {d.price && <span className={`text-4xl font-extrabold tracking-tight ${featured ? 'text-primary-foreground' : ''}`}>{d.price}</span>}\n {d.period && <span className={`text-sm mb-1 ${featured ? 'text-primary-foreground/70' : 'text-muted-foreground'}`}>{d.period}</span>}\n </div>\n </div>\n {features.length > 0 && (\n <ul className=\"space-y-3 flex-1 mb-8\">\n {features.map((feat, i) => (\n <li key={i} className=\"flex items-center gap-2 text-sm\">\n <svg className={`w-4 h-4 flex-shrink-0 ${featured ? 'text-primary-foreground' : 'text-primary'}`} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\"/>\n </svg>\n <span className={featured ? 'text-primary-foreground/90' : ''}>{feat}</span>\n </li>\n ))}\n </ul>\n )}\n {d.button && (\n <a\n href={d.url || '#'}\n className={`block text-center py-2.5 px-6 rounded-lg font-semibold text-sm transition-opacity hover:opacity-90 ${featured ? 'bg-primary-foreground text-primary' : 'bg-primary text-primary-foreground'}`}\n >\n {d.button}\n </a>\n )}\n </div>\n )\n}\n\nfunction IconFeatureBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const iconKey = (d.icon || 'zap').toLowerCase()\n return (\n <div className=\"flex items-start gap-4 p-6 rounded-xl border border-border bg-card\">\n <div className=\"w-12 h-12 rounded-lg bg-primary/10 text-primary flex items-center justify-center flex-shrink-0\">\n {FEATURE_ICONS[iconKey] ?? (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" className=\"w-6 h-6\"><circle cx=\"12\" cy=\"12\" r=\"10\"/></svg>\n )}\n </div>\n <div className=\"flex-1 min-w-0\">\n {d.title && <h3 className=\"font-semibold text-base\">{d.title}</h3>}\n {d.description && <p className=\"text-sm text-muted-foreground mt-1 leading-relaxed\">{d.description}</p>}\n </div>\n </div>\n )\n}\n\nfunction FeatureGridBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const features: any[] = Array.isArray(d.features) ? d.features : []\n const cols = Number(d.columns) || 3\n const gridCols = cols === 2 ? 'sm:grid-cols-2' : cols === 4 ? 'sm:grid-cols-2 lg:grid-cols-4' : 'sm:grid-cols-2 lg:grid-cols-3'\n\n return (\n <section className=\"py-12\">\n <div className=\"max-w-6xl mx-auto px-4\">\n {(d.title || d.subtitle) && (\n <div className=\"text-center mb-10\">\n {d.title && <h2 className=\"text-2xl md:text-3xl font-bold tracking-tight text-balance\">{d.title}</h2>}\n {d.subtitle && <p className=\"mt-2 text-muted-foreground text-pretty\">{d.subtitle}</p>}\n </div>\n )}\n {features.length === 0 ? (\n <p className=\"text-center text-sm text-muted-foreground\">No features added yet.</p>\n ) : (\n <div className={`grid grid-cols-1 gap-6 ${gridCols}`}>\n {features.map((feat, i) => (\n <div key={i} className=\"flex flex-col gap-3 p-6 rounded-xl border border-border bg-card hover:shadow-md transition-shadow\">\n {feat.icon && (\n <div className=\"w-10 h-10 rounded-lg bg-primary/10 text-primary flex items-center justify-center flex-shrink-0\">\n {FEATURE_ICONS[feat.icon] ?? (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" className=\"w-5 h-5\"><circle cx=\"12\" cy=\"12\" r=\"10\"/></svg>\n )}\n </div>\n )}\n <div>\n {feat.title && <h3 className=\"font-semibold text-base\">{feat.title}</h3>}\n {feat.description && (\n <div className=\"text-sm text-muted-foreground mt-1 leading-relaxed prose prose-sm max-w-none\" dangerouslySetInnerHTML={{ __html: feat.description }} />\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </section>\n )\n}\n\nfunction TwoColumnBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const imagePos = d.imagePosition === 'left' ? 'flex-row-reverse' : 'flex-row'\n const hasImage = Boolean(d.image)\n return (\n <section className=\"py-10\">\n <div className={`flex flex-col md:${imagePos} gap-8 md:gap-12 items-center`}>\n <div className=\"flex-1 space-y-4\">\n {d.title && <h2 className=\"text-2xl md:text-3xl font-bold tracking-tight text-balance\">{d.title}</h2>}\n {d.text && <p className=\"text-muted-foreground leading-relaxed text-pretty\">{d.text}</p>}\n {d.button && (\n <a\n href={d.buttonUrl || '#'}\n className=\"inline-flex items-center gap-2 px-5 py-2.5 rounded-lg bg-primary text-primary-foreground text-sm font-medium hover:opacity-90 transition-opacity\"\n >\n {d.button}\n </a>\n )}\n </div>\n {hasImage && (\n <div className=\"flex-1 w-full\">\n <img\n src={d.image}\n alt={d.title || ''}\n className=\"w-full rounded-xl object-cover border border-border shadow-sm\"\n />\n </div>\n )}\n {!hasImage && (\n <div className=\"flex-1 w-full rounded-xl bg-muted border border-border aspect-video flex items-center justify-center\">\n <span className=\"text-xs text-muted-foreground\">No image set</span>\n </div>\n )}\n </div>\n </section>\n )\n}\n\n// ── Main component ───────────────────────────────────────────────────────────��\n\nconst BUILT_IN: Record<string, (block: CMSBlock, pageType?: CMSPageType | null) => React.ReactNode> = {\n // Structured page type — content is nested { sectionName: { fieldName: value } }\n '__structured__': (b, pt) => <StructuredBlock block={b} pageType={pt} />,\n heading: (b) => <HeadingBlock block={b} />,\n text: (b) => <TextBlock block={b} />,\n richtext: (b) => <RichTextBlock block={b} />,\n image: (b) => <ImageBlock block={b} />,\n button: (b) => <ButtonBlock block={b} />,\n list: (b) => <ListBlock block={b} />,\n gallery: (b) => <GalleryBlock block={b} />,\n 'pricing-table': (b) => <PricingTableBlock block={b} />,\n hero: (b) => <HeroBlock block={b} />,\n 'hero-section': (b) => <HeroBlock block={b} />,\n cta: (b) => <CTABlock block={b} />,\n faq: (b) => <FAQBlock block={b} />,\n 'team-member': (b) => <TeamMemberBlock block={b} />,\n stats: (b) => <StatsBlock block={b} />,\n testimonial: (b) => <TestimonialBlock block={b} />,\n quote: (b) => <QuoteBlock block={b} />,\n alert: (b) => <AlertBlock block={b} />,\n divider: () => <DividerBlock />,\n spacer: (b) => <SpacerBlock block={b} />,\n video: (b) => <VideoBlock block={b} />,\n 'card-grid': (b) => <CardGridBlock block={b} />,\n timeline: (b) => <TimelineBlock block={b} />,\n 'pricing-card': (b) => <PricingCardBlock block={b} />,\n 'icon-feature': (b) => <IconFeatureBlock block={b} />,\n 'feature-grid': (b) => <FeatureGridBlock block={b} />,\n 'two-column': (b) => <TwoColumnBlock block={b} />,\n 'split-hero': (b) => <SplitHeroBlock block={b} />,\n\n accordion: (b) => <AccordionBlock block={b} />,\n tabs: (b) => <TabsBlock block={b} />,\n columns: (b) => <ColumnsBlock block={b} />,\n container: (b) => <ContainerBlock block={b} />,\n carousel: (b) => <CarouselBlock block={b} />,\n 'product-list': (b) => <ProductListBlock block={b} />,\n}\n\nexport function CMSBlocks({ blocks, pageType, className = '', custom = {} }: CMSBlocksProps) {\n if (!blocks?.length) return null\n\n return (\n <div className={`space-y-8 ${className}`}>\n {blocks.map(block => {\n // 1. Custom renderer takes priority\n if (custom[block.type]) return <React.Fragment key={block.id}>{custom[block.type](block)}</React.Fragment>\n // 2. Built-in renderer\n if (BUILT_IN[block.type]) return <React.Fragment key={block.id}>{BUILT_IN[block.type](block, pageType)}</React.Fragment>\n // 3. Structured section block (from page type sections)\n return <SectionBlock key={block.id} block={block} pageType={pageType} />\n })}\n </div>\n )\n}\n","import React from 'react'\nimport { notFound } from 'next/navigation'\nimport { cookies, draftMode } from 'next/headers'\nimport type { Metadata } from 'next'\nimport { createCMSClient } from '../client'\nimport { CMSBlocks } from '../react/blocks'\n\n// ── Server-side Product List Renderer ─────────────────────────────────────────\n// Renders product-list blocks directly in RSC to avoid client serialization issues\n\n// Resolve a dot-notation path like \"plans[0].price\" from a raw object\nfunction resolvePath(obj: any, path: string): any {\n if (!path) return undefined\n return path.split(/[\\.\\[\\]]+/).filter(Boolean).reduce((acc, key) => acc?.[key], obj)\n}\n\ninterface NormalisedProduct {\n id: string\n name: string\n price: number\n color?: string\n rating?: number\n category?: string\n badge?: string\n description?: string\n ctaUrl?: string\n}\n\ninterface FieldMap {\n fieldTitle?: string\n fieldPrice?: string\n fieldColor?: string\n fieldCategory?: string\n fieldBadge?: string\n fieldDescription?: string\n fieldCtaUrl?: string\n}\n\nfunction normaliseProductServer(raw: Record<string, any>, fm: FieldMap): NormalisedProduct {\n // Resolve using field map if set, otherwise fall back to defaults\n const name = resolvePath(raw, fm.fieldTitle || '') ?? raw.name ?? 'Unnamed'\n const rawPrice = resolvePath(raw, fm.fieldPrice || '') ?? (Array.isArray(raw.plans) ? raw.plans[0]?.price : undefined) ?? raw.price ?? 0\n const color = resolvePath(raw, fm.fieldColor || '') ?? raw.primaryColor ?? raw.color ?? undefined\n const rawCategory = resolvePath(raw, fm.fieldCategory || '') ?? raw.type ?? undefined\n const rawBadge = resolvePath(raw, fm.fieldBadge || '') ?? undefined\n const description = resolvePath(raw, fm.fieldDescription || '') ?? raw.description ?? undefined\n const ctaUrl = resolvePath(raw, fm.fieldCtaUrl || '') ?? raw.url ?? raw.link ?? undefined\n\n // Default badge: course count or duration\n const courseCount = Array.isArray(raw.courses) ? raw.courses.length : undefined\n const badge = rawBadge != null\n ? String(rawBadge)\n : courseCount ? `${courseCount} course${courseCount !== 1 ? 's' : ''}` : (raw.duration ? `${raw.duration} min` : undefined)\n\n const category = rawCategory\n ? String(rawCategory).replace(/-/g, ' ').replace(/\\b\\w/g, (c: string) => c.toUpperCase())\n : undefined\n\n return {\n id: raw._id ?? raw.id ?? String(Math.random()),\n name: String(name),\n price: typeof rawPrice === 'number' ? rawPrice : parseFloat(String(rawPrice)) || 0,\n color: color ? String(color) : undefined,\n rating: raw.rating ?? undefined,\n category,\n badge,\n description: description ? String(description) : undefined,\n ctaUrl: ctaUrl ? String(ctaUrl) : undefined,\n }\n}\n\nfunction ServerProductListBlock({ block }: { block: any }) {\n const cfg = (block.content ?? {}) as any\n const {\n title, subtitle,\n columns = 3, showPrice = true, showRating = true, limit = 6, currency = '$',\n cardStyle = 'color-band',\n ctaLabel = '', ctaUrl: staticCtaUrl = '',\n fieldTitle, fieldPrice, fieldColor, fieldCategory, fieldBadge, fieldDescription, fieldCtaUrl,\n } = cfg\n\n const fm: FieldMap = { fieldTitle, fieldPrice, fieldColor, fieldCategory, fieldBadge, fieldDescription, fieldCtaUrl }\n const cols = parseInt(String(columns), 10)\n const gridCols = cols === 2 ? 'sm:grid-cols-2' : cols === 4 ? 'sm:grid-cols-2 lg:grid-cols-4' : 'sm:grid-cols-2 lg:grid-cols-3'\n\n const rawProducts = Array.isArray(block._resolvedProducts)\n ? block._resolvedProducts\n : (Array.isArray(cfg.prefetchedProducts) ? cfg.prefetchedProducts : [])\n const products = (rawProducts as any[]).map((r) => normaliseProductServer(r, fm)).slice(0, Number(limit))\n\n if (products.length === 0) {\n return (\n <section className=\"py-12\">\n <div className=\"max-w-6xl mx-auto px-4\">\n <div className=\"text-center py-12 border border-dashed border-border rounded-lg bg-muted/10\">\n <p className=\"text-sm text-muted-foreground\">No products available</p>\n </div>\n </div>\n </section>\n )\n }\n\n return (\n <section className=\"py-12\">\n <div className=\"max-w-6xl mx-auto px-4\">\n {(title || subtitle) && (\n <div className=\"text-center mb-8\">\n {title && <h2 className=\"text-2xl md:text-3xl font-semibold tracking-tight text-balance\">{title}</h2>}\n {subtitle && <p className=\"text-muted-foreground mt-2 text-pretty\">{subtitle}</p>}\n </div>\n )}\n <div className={`grid gap-6 grid-cols-1 ${gridCols}`}>\n {products.map((product) => {\n const accentColor = product.color ?? '#6366f1'\n const href = staticCtaUrl || product.ctaUrl\n\n return (\n <div\n key={product.id}\n className={`overflow-hidden group transition-shadow flex flex-col ${\n cardStyle === 'minimal'\n ? 'border-0 shadow-none bg-transparent'\n : 'border rounded-xl hover:shadow-lg bg-card'\n }`}\n >\n {/* Card header — varies by style */}\n {cardStyle === 'color-band' && (\n <div className=\"h-2 w-full flex-shrink-0\" style={{ backgroundColor: accentColor }} />\n )}\n {cardStyle === 'filled-header' && (\n <div className=\"h-20 w-full flex-shrink-0 flex items-end px-5 pb-3\" style={{ backgroundColor: accentColor }}>\n {product.category && (\n <span className=\"text-xs font-semibold text-white/80 uppercase tracking-wider\">{product.category}</span>\n )}\n </div>\n )}\n\n <div className=\"p-5 flex flex-col gap-3 flex-1\">\n {/* Badges row — only for non-filled-header */}\n {cardStyle !== 'filled-header' && (product.category || product.badge) && (\n <div className=\"flex items-center gap-2 flex-wrap\">\n {product.category && (\n <span\n className=\"text-xs px-2 py-0.5 rounded-full font-medium text-white\"\n style={{ backgroundColor: accentColor }}\n >\n {product.category}\n </span>\n )}\n {product.badge && (\n <span className=\"text-xs px-2 py-0.5 rounded-full bg-muted text-muted-foreground\">{product.badge}</span>\n )}\n </div>\n )}\n {/* Badge for filled-header */}\n {cardStyle === 'filled-header' && product.badge && (\n <span className=\"text-xs px-2 py-0.5 rounded-full bg-muted text-muted-foreground self-start\">{product.badge}</span>\n )}\n\n <h3 className=\"font-semibold text-base line-clamp-2\">{product.name}</h3>\n\n {product.description && (\n <p className=\"text-xs text-muted-foreground line-clamp-2\">{product.description}</p>\n )}\n\n <div className=\"mt-auto pt-3 border-t border-border flex items-center justify-between gap-3\">\n <div className=\"flex items-center gap-3\">\n {showPrice && product.price > 0 && (\n <span className=\"font-bold text-lg\">{product.price.toFixed(2)} {currency}</span>\n )}\n {showRating && product.rating && (\n <div className=\"flex items-center gap-1 text-sm text-muted-foreground\">\n <svg className=\"w-3.5 h-3.5 fill-yellow-400 text-yellow-400\" viewBox=\"0 0 24 24\">\n <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"/>\n </svg>\n <span>{product.rating}</span>\n </div>\n )}\n </div>\n {ctaLabel && (\n <a\n href={href || '#'}\n className=\"text-xs font-semibold px-3 py-1.5 rounded-lg text-white transition-opacity hover:opacity-90 flex-shrink-0\"\n style={{ backgroundColor: accentColor }}\n >\n {ctaLabel}\n </a>\n )}\n </div>\n </div>\n </div>\n )\n })}\n </div>\n </div>\n </section>\n )\n}\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction getSD(doc: any) {\n const structuredBlock = Array.isArray(doc?.blocks) && doc.blocks[0]?.type === '__structured__' ? doc.blocks[0].content : null\n return doc?.sectionData ?? structuredBlock ?? null\n}\n\n// ── CMS Header ────────────────────────────────────────────────────────────────\n\nfunction CMSHeader({ nav }: { nav: any | null }) {\n const sd = getSD(nav)\n if (!sd) return null\n\n const logoUrl = sd.logo_url?.trim() || ''\n const logoAlt = sd.logo_alt?.trim() || ''\n const items: any[] = Array.isArray(sd.items) ? sd.items : []\n\n if (!logoUrl && !logoAlt && items.length === 0) return null\n\n const links = items.filter((i: any) => i.type === 'link' || i.type === 'dropdown')\n const buttons = items.filter((i: any) => i.type === 'button')\n\n const btnBase: React.CSSProperties = { textDecoration: 'none', padding: '0.4rem 1rem', borderRadius: '6px', fontWeight: 600, fontSize: '0.875rem', whiteSpace: 'nowrap' as const, transition: 'opacity 0.15s' }\n const btnVariant = (v: string): React.CSSProperties => ({\n primary: { ...btnBase, background: 'var(--foreground, #111)', color: '#fff', border: '1px solid transparent' },\n outline: { ...btnBase, background: 'transparent', color: 'var(--foreground, #111)', border: '1px solid var(--border, #e5e7eb)' },\n ghost: { ...btnBase, background: 'transparent', color: 'var(--muted-foreground, #6b7280)', border: 'none', fontWeight: 500 },\n }[v] ?? btnBase)\n\n return (\n <header style={{ position: 'sticky', top: 0, zIndex: 50, width: '100%', borderBottom: '1px solid var(--border, #e5e7eb)', background: 'rgba(255,255,255,0.97)', backdropFilter: 'blur(8px)', WebkitBackdropFilter: 'blur(8px)' }}>\n <div style={{ maxWidth: '1200px', margin: '0 auto', padding: '0 1.5rem', height: '64px', display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: '2rem' }}>\n {/* Logo */}\n <a href=\"/\" style={{ display: 'flex', alignItems: 'center', gap: '0.5rem', textDecoration: 'none', flexShrink: 0 }}>\n {logoUrl\n ? <img src={logoUrl} alt={logoAlt || 'Logo'} style={{ height: '32px', width: 'auto', display: 'block' }} />\n : <span style={{ fontWeight: 700, fontSize: '1.125rem', color: 'var(--foreground, #111)' }}>{logoAlt}</span>}\n </a>\n {/* Center nav links */}\n {links.length > 0 && (\n <nav style={{ display: 'flex', alignItems: 'center', gap: '1.75rem', flex: 1 }}>\n {links.map((item: any) => (\n <a key={item.id} href={item.url || '#'}\n target={item.openInNewTab ? '_blank' : undefined}\n rel={item.openInNewTab ? 'noopener noreferrer' : undefined}\n style={{ fontSize: '0.9rem', color: 'var(--muted-foreground, #6b7280)', textDecoration: 'none', fontWeight: 500 }}>\n {item.label}\n </a>\n ))}\n </nav>\n )}\n {/* CTA buttons */}\n {buttons.length > 0 && (\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.625rem', flexShrink: 0 }}>\n {buttons.map((item: any) => (\n <a key={item.id} href={item.url || '#'}\n target={item.openInNewTab ? '_blank' : undefined}\n rel={item.openInNewTab ? 'noopener noreferrer' : undefined}\n style={btnVariant(item.variant || 'ghost')}>\n {item.label}\n </a>\n ))}\n </div>\n )}\n </div>\n </header>\n )\n}\n\n// ── CMS Footer ────────────────────────────────────────────────────────────────\n\nconst SOCIAL_ICONS: { key: string; label: string; d: string }[] = [\n { key: 'facebook', label: 'Facebook', d: 'M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z' },\n { key: 'twitter', label: 'X', d: 'M18 6L6 18M6 6l12 12' },\n { key: 'instagram', label: 'Instagram', d: 'M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37zm1.5-4.87h.01M6.5 2h11A4.5 4.5 0 0 1 22 6.5v11A4.5 4.5 0 0 1 17.5 22h-11A4.5 4.5 0 0 1 2 17.5v-11A4.5 4.5 0 0 1 6.5 2z' },\n { key: 'linkedin', label: 'LinkedIn', d: 'M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-4 0v7h-4v-7a6 6 0 0 1 6-6zM2 9h4v12H2zm2-3a2 2 0 1 1 0-4 2 2 0 0 1 0 4z' },\n { key: 'youtube', label: 'YouTube', d: 'M22.54 6.42a2.78 2.78 0 0 0-1.94-1.96C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 1.96A29 29 0 0 0 1 12a29 29 0 0 0 .46 5.58 2.78 2.78 0 0 0 1.94 1.96C5.12 20 12 20 12 20s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-1.96A29 29 0 0 0 23 12a29 29 0 0 0-.46-5.58zM9.75 15.02V8.98L15.5 12l-5.75 3.02z' },\n]\n\nfunction renderFooterSection(sec: any, mutedLink: React.CSSProperties) {\n if (sec.type === 'brand') {\n if (!sec.logo_url && !sec.tagline) return null\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n {sec.logo_url && <img src={sec.logo_url} alt=\"Logo\" style={{ height: '32px', width: 'auto', objectFit: 'contain' }} />}\n {sec.tagline && <p style={{ fontSize: '0.875rem', color: 'var(--muted-foreground, #6b7280)', lineHeight: 1.6, margin: 0 }}>{sec.tagline}</p>}\n </div>\n )\n }\n if (sec.type === 'links') {\n const links = (sec.links || []).filter((l: any) => l.label)\n if (!links.length && !sec.title) return null\n return (\n <div>\n {sec.title && <h4 style={{ fontWeight: 600, fontSize: '0.875rem', margin: '0 0 0.875rem', color: 'var(--foreground, #111)' }}>{sec.title}</h4>}\n <ul style={{ listStyle: 'none', margin: 0, padding: 0, display: 'flex', flexDirection: 'column', gap: '0.5rem' }}>\n {links.map((link: any) => (\n <li key={link.id || link.label}>\n <a href={link.url || '#'} target={link.external ? '_blank' : undefined}\n rel={link.external ? 'noopener noreferrer' : undefined} style={mutedLink}>\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n )\n }\n if (sec.type === 'contact') {\n if (!sec.email && !sec.phone && !sec.address) return null\n return (\n <div>\n {sec.title && <h4 style={{ fontWeight: 600, fontSize: '0.875rem', margin: '0 0 0.875rem', color: 'var(--foreground, #111)' }}>{sec.title}</h4>}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.4rem' }}>\n {sec.email && <a href={`mailto:${sec.email}`} style={mutedLink}>{sec.email}</a>}\n {sec.phone && <a href={`tel:${sec.phone}`} style={mutedLink}>{sec.phone}</a>}\n {sec.address && <p style={{ ...mutedLink, whiteSpace: 'pre-line', margin: 0 }}>{sec.address}</p>}\n </div>\n </div>\n )\n }\n if (sec.type === 'social') {\n const active = SOCIAL_ICONS.filter(s => sec[s.key]?.trim())\n if (!active.length) return null\n return (\n <div>\n {sec.title && <h4 style={{ fontWeight: 600, fontSize: '0.875rem', margin: '0 0 0.875rem', color: 'var(--foreground, #111)' }}>{sec.title}</h4>}\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '0.625rem' }}>\n {active.map(s => (\n <a key={s.key} href={sec[s.key]} target=\"_blank\" rel=\"noopener noreferrer\" aria-label={s.label}\n style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', width: '34px', height: '34px', borderRadius: '8px', border: '1px solid var(--border, #e5e7eb)', color: 'var(--muted-foreground, #6b7280)', textDecoration: 'none' }}>\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d={s.d} />\n </svg>\n </a>\n ))}\n </div>\n </div>\n )\n }\n return null\n}\n\nfunction CMSFooter({ footer }: { footer: any | null }) {\n const sd = getSD(footer)\n if (!sd) return null\n\n // New sections-based format\n const sections: any[] = Array.isArray(sd.sections) ? sd.sections : []\n\n // Legacy format fallback: convert old {brand,columns,contact,social,legal} to virtual sections\n let renderSections = sections\n if (renderSections.length === 0 && (sd.brand || sd.columns || sd.contact || sd.social || sd.legal)) {\n renderSections = []\n if (sd.brand?.logo_url || sd.brand?.tagline) renderSections.push({ id: 'b', type: 'brand', ...sd.brand })\n ;(sd.columns || []).forEach((col: any) => renderSections.push({ id: col.id || col.title, type: 'links', title: col.title, links: col.links }))\n if (sd.contact?.email || sd.contact?.phone) renderSections.push({ id: 'c', type: 'contact', ...sd.contact })\n if (Object.values(sd.social || {}).some(Boolean)) renderSections.push({ id: 's', type: 'social', ...sd.social })\n }\n\n // Find legal section\n const legalSec = sd.sections ? sd.sections.find((s: any) => s.type === 'legal') : sd.legal\n const mainSections = renderSections.filter((s: any) => s.type !== 'legal')\n\n if (mainSections.length === 0 && !legalSec) return null\n\n const gridCount = mainSections.length\n const gridCols = gridCount <= 1 ? '1fr' : gridCount === 2 ? 'repeat(2,1fr)' : gridCount === 3 ? 'repeat(3,1fr)' : 'repeat(4,1fr)'\n const mutedLink: React.CSSProperties = { fontSize: '0.875rem', color: 'var(--muted-foreground, #6b7280)', textDecoration: 'none' }\n\n // Normalize legal for both old and new formats\n const copyright = legalSec?.copyright || ''\n const legalLinks: any[] = legalSec?.legal_links || legalSec?.links || []\n const hasBottom = copyright || legalLinks.filter((l: any) => l.label).length > 0\n\n return (\n <footer style={{ borderTop: '1px solid var(--border, #e5e7eb)', background: 'var(--muted, #f9fafb)', marginTop: '4rem' }}>\n <div style={{ maxWidth: '1200px', margin: '0 auto', padding: '3rem 1.5rem 1.5rem' }}>\n\n {mainSections.length > 0 && (\n <div style={{ display: 'grid', gridTemplateColumns: gridCols, gap: '2.5rem', marginBottom: hasBottom ? '2.5rem' : 0 }}>\n {mainSections.map((sec: any) => {\n const rendered = renderFooterSection(sec, mutedLink)\n return rendered ? <div key={sec.id}>{rendered}</div> : null\n })}\n </div>\n )}\n\n {hasBottom && (\n <div style={{ borderTop: '1px solid var(--border, #e5e7eb)', paddingTop: '1.25rem', display: 'flex', flexWrap: 'wrap', alignItems: 'center', justifyContent: 'space-between', gap: '1rem' }}>\n {copyright && <p style={{ fontSize: '0.8rem', color: 'var(--muted-foreground, #6b7280)', margin: 0 }}>{copyright}</p>}\n {legalLinks.filter((l: any) => l.label).length > 0 && (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '1.25rem' }}>\n {legalLinks.filter((l: any) => l.label).map((link: any) => (\n <a key={link.id || link.label} href={link.url || '#'}\n target={link.external ? '_blank' : undefined}\n rel={link.external ? 'noopener noreferrer' : undefined}\n style={{ fontSize: '0.8rem', color: 'var(--muted-foreground, #6b7280)', textDecoration: 'none' }}>\n {link.label}\n </a>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n </footer>\n )\n}\n\nexport interface CMSCatchAllParams {\n slug: string[]\n}\n\nconst client = createCMSClient()\n\n// ── Metadata ──────────────────────────────────────────────────────────────────\n\nexport async function generateMetadata(\n { params }: { params: Promise<CMSCatchAllParams> }\n): Promise<Metadata> {\n const { slug } = await params\n const page = await client.getPage(slug.join('/'))\n if (!page) return { title: 'Not Found' }\n return {\n title: page.seo?.title || page.title,\n description: page.seo?.description || '',\n keywords: page.seo?.keywords?.join(', '),\n robots: page.seo?.noIndex ? 'noindex,nofollow' : undefined,\n openGraph: {\n title: page.seo?.title || page.title,\n description: page.seo?.description,\n images: page.seo?.ogImage ? [page.seo.ogImage] : undefined,\n },\n }\n}\n\n// ── Page ──────────────────────────────────────────────────────────────────────\n\n// Fetch products for a product-list block directly (no serialization boundary)\nasync function resolveProductListBlocks(blocks: any[]): Promise<any[]> {\n return Promise.all(blocks.map(async (block) => {\n if (block.type !== 'product-list') return block\n const cfg = block.content ?? block.data ?? {}\n // Already have prefetched products — use them\n if (Array.isArray(cfg.prefetchedProducts) && cfg.prefetchedProducts.length > 0) return block\n const endpoint = cfg.endpoint\n if (!endpoint) return block\n try {\n const headers: Record<string, string> = { 'Accept': 'application/json' }\n const token = cfg.token ?? cfg.apiToken\n if (token) headers['Authorization'] = `Bearer ${token}`\n const res = await fetch(endpoint, { headers, next: { revalidate: cfg.refreshInterval || 300 } })\n if (!res.ok) return block\n const json = await res.json()\n const items: any[] = Array.isArray(json) ? json : (json.products ?? json.data ?? json.items ?? json.result ?? [])\n // Inject products directly into block so ServerProductListBlock can read them\n return { ...block, _resolvedProducts: items }\n } catch {\n return block\n }\n }))\n}\n\nexport default async function CMSCatchAllPage(\n { params }: { params: Promise<CMSCatchAllParams> }\n) {\n const { slug } = await params\n const slugStr = slug.join('/')\n const draft = await draftMode()\n const cookieStore = await cookies()\n\n let page = null\n let isPreview = false\n\n if (draft.isEnabled) {\n const token = cookieStore.get('cms_preview_token')?.value\n if (token) {\n page = await client.getPreviewPage(token)\n isPreview = !!page\n }\n if (!page) page = await client.getPage(slugStr)\n } else {\n page = await client.getPage(slugStr)\n }\n\n if (!page) notFound()\n\n // Fetch page type + globals in parallel\n const [pageType, globals] = await Promise.all([\n page.pageTypeId ? client.getPageType(page.pageTypeId) : Promise.resolve(null),\n client.getGlobals().catch(() => ({ navigation: null, footer: null })),\n ])\n\n // Resolve product-list blocks with fresh data fetched here in the RSC\n const resolvedBlocks = await resolveProductListBlocks(page.blocks ?? [])\n\n return (\n <div className=\"min-h-screen bg-background flex flex-col\">\n <CMSHeader nav={globals?.navigation} />\n {isPreview && (\n <div className=\"sticky top-0 z-50 flex items-center justify-between px-4 py-2.5 bg-amber-500 text-white text-sm font-medium shadow\">\n <div className=\"flex items-center gap-2\">\n <span>Draft Preview</span>\n <span className=\"opacity-60 mx-1\">·</span>\n <span className=\"opacity-75 capitalize\">{page.status}</span>\n <span className=\"opacity-60 mx-1\">·</span>\n <span className=\"opacity-75 font-normal\">/{page.slug}</span>\n </div>\n <a\n href=\"/api/cms-preview/exit\"\n className=\"px-3 py-1 rounded bg-white/20 hover:bg-white/30 transition-colors text-xs\"\n >\n Exit Preview\n </a>\n </div>\n )}\n\n <article className=\"max-w-5xl mx-auto px-6 py-12\">\n {resolvedBlocks.length > 0 ? (\n <>\n {resolvedBlocks.map((block: any, idx: number) =>\n block.type === 'product-list' ? (\n <ServerProductListBlock key={block.id ?? idx} block={block} />\n ) : null\n )}\n <CMSBlocks blocks={resolvedBlocks.filter((b: any) => b.type !== 'product-list')} pageType={pageType} />\n </>\n ) : (\n <div className=\"flex flex-col items-center justify-center py-24 text-muted-foreground border-2 border-dashed border-border rounded-xl\">\n <p className=\"text-sm\">No content added yet.</p>\n {isPreview && (\n <p className=\"text-xs mt-1 opacity-60\">Add blocks in the CMS editor to see them here.</p>\n )}\n </div>\n )}\n </article>\n <CMSFooter footer={globals?.footer} />\n </div>\n )\n}\n\n\n","import { NextRequest, NextResponse } from 'next/server'\n\n/**\n * dynamicProxyGET — server-side proxy for dynamic block API calls.\n *\n * Usage in external app:\n * // app/api/cms-dynamic-proxy/route.ts\n * export { dynamicProxyGET as GET } from '@sprintup-cms/sdk/next'\n *\n * The ProductListBlock calls this proxy to avoid CORS issues when fetching\n * from external APIs (e.g. iRead, Shopify, etc.).\n *\n * Usage: GET /api/cms-dynamic-proxy?url=https://external-api.com/products\n */\nexport async function dynamicProxyGET(req: NextRequest): Promise<NextResponse> {\n const url = req.nextUrl.searchParams.get('url')\n if (!url) {\n return NextResponse.json({ error: 'Missing url parameter' }, { status: 400 })\n }\n\n // Only allow http(s) URLs\n if (!url.startsWith('http://') && !url.startsWith('https://')) {\n return NextResponse.json({ error: 'Invalid URL' }, { status: 400 })\n }\n\n try {\n const res = await fetch(url, {\n headers: { 'Accept': 'application/json' },\n next: { revalidate: 300 }, // cache for 5 minutes\n })\n const data = await res.json()\n return NextResponse.json(data, {\n status: res.status,\n headers: { 'Cache-Control': 'public, s-maxage=300, stale-while-revalidate=60' },\n })\n } catch (err: any) {\n return NextResponse.json({ error: err.message }, { status: 502 })\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/next/revalidate.ts","../../src/next/preview-exit.ts","../../src/next/preview-entry.ts","../../src/client.ts","../../src/react/blocks.tsx","../../src/next/catch-all.tsx","../../src/next/dynamic-proxy.ts"],"names":["POST","GET","NextResponse","draftMode","jsx","jsxs","cookies","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["import { NextRequest, NextResponse } from 'next/server'\nimport { revalidatePath, revalidateTag } from 'next/cache'\n\nexport interface RevalidateHandlerOptions {\n /**\n * Secret that must match the `x-cms-webhook-secret` header.\n * Defaults to process.env.CMS_WEBHOOK_SECRET\n */\n secret?: string\n /**\n * Called after successful revalidation. Use to add custom logic.\n */\n onRevalidate?: (payload: RevalidatePayload) => void | Promise<void>\n}\n\nexport interface RevalidatePayload {\n /** Sent by the CMS webhook (CMSWebhookPayload shape) */\n appId?: string\n event?: 'published' | 'deleted' | 'archived' | 'content.publish' | 'content.unpublish' | 'structure.update'\n /** Cache tag sent by the CMS (e.g. \"content-about\", \"content-list\", \"site-structure-myapp\") */\n tag?: string\n /** Additional data from the CMS webhook */\n data?: Record<string, unknown>\n /** Legacy field — accepted for backwards compatibility */\n slug?: string\n timestamp?: string\n}\n\n/**\n * Factory — create a POST handler with custom options.\n *\n * @example\n * // app/api/cms-revalidate/route.ts\n * import { createRevalidateHandler } from '@sprintup-cms/sdk/next'\n * export const POST = createRevalidateHandler({ secret: process.env.CMS_WEBHOOK_SECRET })\n */\nexport function createRevalidateHandler(options?: RevalidateHandlerOptions) {\n return async function POST(request: NextRequest): Promise<NextResponse> {\n try {\n const secret = options?.secret ?? process.env.CMS_WEBHOOK_SECRET\n const incomingSecret = request.headers.get('x-cms-webhook-secret')\n\n if (secret && incomingSecret !== secret) {\n return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })\n }\n\n const body: RevalidatePayload = await request.json()\n const { slug, tag, appId, data } = body\n\n // Must have at least a tag or a slug to know what to revalidate\n if (!tag && !slug) {\n return NextResponse.json({ error: 'Missing tag or slug in payload' }, { status: 400 })\n }\n\n // Revalidate by the tag sent directly from the CMS (primary path)\n if (tag) {\n revalidateTag(tag)\n }\n\n // Derive slug from data.slug or the tag itself (e.g. \"content-about\" → \"about\")\n const resolvedSlug = slug ?? (data?.slug as string) ?? tag?.replace(/^content-/, '')\n\n if (resolvedSlug) {\n revalidatePath(`/${resolvedSlug}`)\n revalidateTag(`cms-page-${resolvedSlug}`)\n }\n\n // Always revalidate the content list (sitemap, index pages)\n revalidateTag('cms-pages')\n\n // Revalidate the layout for structure changes or publish events so\n // nav/footer pick up the new site structure\n const isStructure = tag?.startsWith('site-structure') || body.event === 'structure.update'\n const isPublish = body.event === 'published' || body.event === 'content.publish'\n if (isStructure || isPublish) {\n revalidatePath('/', 'layout')\n }\n\n await options?.onRevalidate?.(body)\n\n return NextResponse.json({\n revalidated: true,\n tag,\n slug: resolvedSlug,\n event: body.event,\n timestamp: new Date().toISOString(),\n })\n } catch (err: any) {\n console.error('[sprintup-cms] revalidate error:', err)\n return NextResponse.json({ error: err.message }, { status: 500 })\n }\n }\n}\n\n/**\n * Default POST handler — zero-config, reads CMS_WEBHOOK_SECRET from env.\n *\n * @example\n * // app/api/cms-revalidate/route.ts\n * export { POST } from '@sprintup-cms/sdk/next'\n */\nexport const POST = createRevalidateHandler()\n","import { NextResponse } from 'next/server'\nimport { cookies, draftMode } from 'next/headers'\n\nexport interface PreviewExitOptions {\n /** Where to redirect after exiting preview. Defaults to \"/\" */\n redirectTo?: string\n}\n\n/**\n * Factory — create a GET handler for exiting preview/draft mode.\n *\n * @example\n * // app/api/cms-preview/exit/route.ts\n * import { createPreviewExitHandler } from '@sprintup-cms/sdk/next'\n * export const GET = createPreviewExitHandler({ redirectTo: '/' })\n */\nexport function createPreviewExitHandler(options?: PreviewExitOptions) {\n return async function GET(request: Request): Promise<NextResponse> {\n const draft = await draftMode()\n draft.disable()\n\n const cookieStore = await cookies()\n cookieStore.delete('cms_preview_token')\n cookieStore.delete('cms_preview_content_id')\n\n const redirectTo = options?.redirectTo ?? '/'\n const url = new URL(request.url)\n return NextResponse.redirect(new URL(redirectTo, url.origin))\n }\n}\n\n/**\n * Default GET handler.\n *\n * @example\n * // app/api/cms-preview/exit/route.ts\n * export { GET } from '@sprintup-cms/sdk/next'\n */\nexport const GET = createPreviewExitHandler()\n","import { NextRequest, NextResponse } from 'next/server'\nimport { draftMode } from 'next/headers'\n\n/**\n * GET /api/cms-preview?token=xxx\n *\n * Validates the preview token issued by the CMS, enables Next.js draftMode(),\n * and redirects to the page slug embedded in the token.\n *\n * The token is a base64-encoded JSON payload: { contentId, appId, slug, exp }\n * Signature validation is handled by checking exp — the CMS signs tokens with\n * a short TTL (default 1 hour) so expired tokens are silently rejected.\n *\n * @example\n * // app/api/cms-preview/route.ts\n * export { previewEntryGET as GET } from '@sprintup-cms/sdk/next'\n */\nexport async function previewEntryGET(request: NextRequest): Promise<NextResponse> {\n // Called by: app/api/cms-preview/route.ts → export { previewEntryGET as GET }\n // Flow: CMS editor opens /api/cms-preview?token=xxx → draftMode enabled → redirect to /{slug}\n const { searchParams, origin } = new URL(request.url)\n const token = searchParams.get('token')\n\n if (!token) {\n return NextResponse.json({ error: 'Missing token' }, { status: 400 })\n }\n\n // The CMS issues tokens as: base64url(JSON payload) + \".\" + base64url(HMAC-SHA256 signature)\n // This is NOT a JWT — it has two segments, not three.\n let payload: { contentId?: string; appId?: string; slug?: string; exp?: number }\n try {\n const [payloadB64] = token.split('.')\n if (!payloadB64) throw new Error('invalid token format')\n const json = Buffer.from(payloadB64.replace(/-/g, '+').replace(/_/g, '/'), 'base64').toString('utf8')\n payload = JSON.parse(json)\n } catch {\n return NextResponse.json({ error: 'Invalid token' }, { status: 400 })\n }\n\n // Reject expired tokens\n if (payload.exp && Date.now() > payload.exp) {\n return NextResponse.json({ error: 'Preview token has expired' }, { status: 401 })\n }\n\n const slug = payload.slug ?? ''\n\n // Enable Next.js draft mode — CMSCatchAllPage checks draftMode().isEnabled\n const draft = await draftMode()\n draft.enable()\n\n // Store the raw token in a cookie so CMSCatchAllPage can pass it to getPreviewPage()\n const response = NextResponse.redirect(new URL(`/${slug}`, origin))\n response.cookies.set('cms_preview_token', token, {\n httpOnly: true,\n secure: process.env.NODE_ENV === 'production',\n sameSite: 'lax',\n maxAge: 60 * 15, // 15 minutes\n path: '/',\n })\n return response\n}\n","/**\n * @sprintup-cms/sdk — Core Client\n *\n * Zero-dependency, framework-agnostic typed API client for SprintUp Forge CMS.\n *\n * @example\n * import { cmsClient } from '@sprintup-cms/sdk'\n * const page = await cmsClient.getPage('about')\n *\n * @example Custom instance\n * import { createCMSClient } from '@sprintup-cms/sdk'\n * const cms = createCMSClient({ baseUrl: '...', apiKey: '...', appId: '...' })\n */\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport interface CMSBlock {\n id: string\n type: string\n label?: string\n locked?: boolean\n data?: Record<string, any>\n /** Legacy field — blocks created before v1.1 used `content` instead of `data` */\n content?: Record<string, any>\n order?: number\n}\n\nexport interface CMSPage {\n _id?: string\n slug: string\n title: string\n description?: string\n pageType?: string\n pageTypeId?: string\n variant?: string\n status: 'draft' | 'published' | 'archived'\n visibility?: 'public' | 'private' | 'password'\n blocks: CMSBlock[]\n publishedAt?: string\n updatedAt?: string\n seo?: {\n title?: string\n description?: string\n keywords?: string[]\n ogImage?: string\n noIndex?: boolean\n }\n}\n\nexport interface CMSPageTypeField {\n id: string\n name: string\n label: string\n fieldType:\n | 'text' | 'textarea' | 'richtext' | 'image' | 'url'\n | 'number' | 'boolean' | 'date' | 'select' | 'relation'\n | 'email' | 'phone' | 'slug' | 'color' | 'embed'\n | 'multi-select' | 'repeater' | 'file' | 'code'\n required?: boolean\n options?: string[]\n description?: string\n maxLength?: number\n multiple?: boolean\n targetPageTypeKey?: string\n}\n\nexport interface CMSPageTypeSection {\n id: string\n name: string\n label: string\n order: number\n locked?: boolean\n fields: CMSPageTypeField[]\n}\n\nexport interface CMSPageTypeVariant {\n key: string\n label: string\n description?: string\n visibleSections?: string[]\n}\n\nexport interface CMSPageType {\n _id: string\n name: string\n key: string\n description?: string\n icon?: string\n /** Used by page-type-renderers to pick a specialised React component */\n rendererKey?: string\n /** Active variant key (set per-page) */\n variant?: string\n category: 'singleton' | 'collection' | 'global'\n contentCategory: 'singleton' | 'collection' | 'global'\n allowedRoles?: string[]\n variants: CMSPageTypeVariant[]\n sections: CMSPageTypeSection[]\n}\n\n// ── Sitemap ────────────────────────────────────────────────────────────────────\n\nexport interface CMSSitemapUrl {\n loc: string\n lastmod?: string\n changefreq?: string\n priority?: number\n title?: string\n}\n\nexport interface CMSSitemapResponse {\n enabled: boolean\n urls: CMSSitemapUrl[]\n config?: {\n defaultChangeFreq?: string\n defaultPriority?: number\n }\n}\n\n// ── Status ─────────────────────────────────────────────────────────────────────\n\nexport interface CMSStatusResponse {\n appId: string\n totalPages: number\n publishedPages: number\n connected: boolean\n pages: Array<{\n slug: string\n title: string\n pageType?: string\n group?: string\n }>\n}\n\n// ── Site Structure ─────────────────────────────────────────────────────────────\n\nexport type CMSMenuItemType = 'page' | 'url' | 'dynamic'\n\nexport interface CMSMenuItem {\n id: string\n type: CMSMenuItemType\n label: string\n contentId?: string\n url?: string\n /** Resolved href — ready to pass to <a href> or <Link href>. Never null, falls back to \"#\". */\n href: string\n locked: boolean\n openInNewTab: boolean\n children: CMSMenuItem[]\n page?: {\n title?: string\n slug?: string\n seoTitle?: string\n seoDescription?: string\n }\n}\n\nexport interface CMSPageTreeNode {\n id: string\n contentId: string\n parentId: string | null\n order: number\n locked: boolean\n visible?: boolean\n page?: {\n title?: string\n slug?: string\n seoTitle?: string\n seoDescription?: string\n }\n}\n\nexport interface CMSFooterGroup {\n id: string\n heading: string\n headingUrl?: string\n locked: boolean\n links: CMSMenuItem[]\n}\n\nexport interface CMSSiteStructure {\n appId: string\n pageTree: CMSPageTreeNode[]\n menus: {\n header: CMSMenuItem[]\n footer: CMSFooterGroup[]\n footerBottom: CMSMenuItem[]\n sidebar: CMSMenuItem[]\n [slot: string]: CMSMenuItem[] | CMSFooterGroup[]\n }\n updatedAt?: string\n}\n\n// ── Pagination & Responses ─────────────────────────────────────────────────────\n\n// v1 route returns { data, count } — flat, no nested meta object\ninterface CMSListResponse {\n data: CMSPage[]\n count: number\n appId?: string\n}\n\ninterface CMSSingleResponse {\n data: CMSPage\n}\n\n// ── Client Options ─────────────────────────────────────────────────────────────\n\nexport interface CMSClientOptions {\n /** Base URL of your Forge CMS instance, e.g. https://cms.yourschool.io */\n baseUrl?: string\n /** API key generated in CMS Admin → API Keys. Server-side only. */\n apiKey?: string\n /** App ID from CMS Admin → Apps, e.g. \"school-website\" */\n appId?: string\n}\n\nexport interface CMSGetPagesOptions {\n type?: string\n group?: string\n page?: number\n perPage?: number\n status?: 'published' | 'draft' | 'archived'\n}\n\n// ── Factory ───────────────────────────────────────────────────────────────────\n\nexport function createCMSClient(options?: CMSClientOptions) {\n /**\n * Resolve config lazily at request time — NOT at module/build time.\n * This prevents static prerendering crashes when env vars are absent during build.\n */\n function cfg() {\n return {\n baseUrl: (options?.baseUrl ?? process.env.NEXT_PUBLIC_CMS_URL ?? process.env.CMS_BASE_URL ?? '').replace(/\\/$/, ''),\n apiKey: options?.apiKey ?? process.env.CMS_API_KEY ?? '',\n appId: options?.appId ?? process.env.CMS_APP_ID ?? '',\n }\n }\n\n function headers() {\n return { 'X-CMS-API-Key': cfg().apiKey, 'Content-Type': 'application/json' }\n }\n\n // ── Pages ──────────────────────────────────────────────────────────────────\n\n async function getPages(params?: CMSGetPagesOptions): Promise<CMSPage[]> {\n const { baseUrl, apiKey, appId } = cfg()\n if (!baseUrl || !apiKey || !appId) {\n console.warn('[sprintup-cms] Missing CMS_BASE_URL / CMS_API_KEY / CMS_APP_ID — returning []')\n return []\n }\n try {\n const qs = new URLSearchParams()\n if (params?.type) qs.set('type', params.type)\n if (params?.group) qs.set('group', params.group)\n if (params?.page) qs.set('page', String(params.page))\n if (params?.perPage) qs.set('perPage', String(params.perPage))\n const url = `${baseUrl}/api/v1/${appId}/pages${qs.size ? `?${qs}` : ''}`\n const res = await fetch(url, {\n headers: headers(),\n next: { revalidate: 60, tags: [`cms-pages-${appId}`] },\n } as RequestInit)\n if (!res.ok) { console.error(`[sprintup-cms] getPages (${res.status})`); return [] }\n const json: CMSListResponse = await res.json()\n return json.data ?? []\n } catch (err) {\n console.error('[sprintup-cms] getPages error:', err)\n return []\n }\n }\n\n async function getPage(slug: string): Promise<CMSPage | null> {\n const { baseUrl, apiKey, appId } = cfg()\n if (!baseUrl || !apiKey || !appId) {\n console.warn('[sprintup-cms] Missing config — returning null')\n return null\n }\n try {\n const res = await fetch(`${baseUrl}/api/v1/${appId}/pages/${slug}`, {\n headers: headers(),\n next: { revalidate: 60, tags: [`cms-page-${slug}`, `cms-pages-${appId}`] },\n } as RequestInit)\n if (res.status === 404) return null\n if (!res.ok) { console.error(`[sprintup-cms] getPage \"${slug}\" (${res.status})`); return null }\n const json: CMSSingleResponse = await res.json()\n return json.data ?? null\n } catch (err) {\n console.error(`[sprintup-cms] getPage \"${slug}\" error:`, err)\n return null\n }\n }\n\n async function getBlogPosts(): Promise<CMSPage[]> {\n return getPages({ type: 'blog-post' })\n }\n\n async function getEvents(): Promise<CMSPage[]> {\n return getPages({ type: 'event-page' })\n }\n\n async function getAnnouncements(): Promise<CMSPage[]> {\n return getPages({ type: 'announcement-page' })\n }\n\n // ── Preview ────────────────────────────────────────────────────────────────\n\n async function getPreviewPage(token: string): Promise<CMSPage | null> {\n const { baseUrl, appId } = cfg()\n if (!baseUrl || !appId) {\n console.warn('[sprintup-cms] getPreviewPage: Missing baseUrl or appId — returning null')\n return null\n }\n try {\n const url = `${baseUrl}/api/v1/${appId}/preview?token=${encodeURIComponent(token)}`\n const res = await fetch(url, { cache: 'no-store' })\n if (!res.ok) {\n const errorText = await res.text().catch(() => '')\n console.error(`[sprintup-cms] getPreviewPage failed (${res.status}): ${errorText}`)\n return null\n }\n const json = await res.json()\n return json.data ?? null\n } catch (err) {\n console.error('[sprintup-cms] getPreviewPage error:', err)\n return null\n }\n }\n\n async function getPageWithPreview(slug: string, previewToken?: string | null): Promise<CMSPage | null> {\n if (previewToken) {\n const preview = await getPreviewPage(previewToken)\n if (preview?.slug === slug) return preview\n }\n return getPage(slug)\n }\n\n // ── Page Types ─────────────────────────────────────────────────────────────\n\n async function getPageType(pageTypeId: string): Promise<CMSPageType | null> {\n const { baseUrl, apiKey, appId } = cfg()\n if (!baseUrl || !apiKey || !appId || !pageTypeId) return null\n try {\n const res = await fetch(`${baseUrl}/api/v1/${appId}/page-types/${pageTypeId}`, {\n headers: headers(),\n next: { revalidate: 3600, tags: [`cms-page-type-${pageTypeId}`] },\n } as RequestInit)\n if (!res.ok) return null\n const json = await res.json()\n return json.data ?? null\n } catch {\n return null\n }\n }\n\n // ── Site Structure ─────────────────────────────────────────────────────────\n\n async function getSiteStructure(): Promise<CMSSiteStructure | null> {\n const { baseUrl, apiKey, appId } = cfg()\n if (!baseUrl || !apiKey || !appId) return null\n try {\n const res = await fetch(`${baseUrl}/api/v1/${appId}/site-structure`, {\n headers: headers(),\n next: {\n revalidate: 300,\n tags: [`site-structure-${appId}`],\n },\n } as RequestInit)\n if (!res.ok) return null\n const json = await res.json()\n return json.data ?? null\n } catch {\n return null\n }\n }\n\n /**\n * GET /api/v1/{appId}/sitemap\n * Fetch sitemap data for all published pages (priority, changefreq, lastmod).\n *\n * @example app/sitemap.ts\n * import type { MetadataRoute } from 'next'\n * import { cmsClient } from '@sprintup-cms/sdk'\n *\n * export default async function sitemap(): Promise<MetadataRoute.Sitemap> {\n * const data = await cmsClient.getSitemap()\n * if (!data?.enabled) return []\n * return data.urls.map(url => ({\n * url: `${process.env.NEXT_PUBLIC_SITE_URL}${url.loc}`,\n * lastModified: url.lastmod,\n * changeFrequency: url.changefreq as MetadataRoute.Sitemap[0]['changeFrequency'],\n * priority: url.priority,\n * }))\n * }\n */\n async function getSitemap(): Promise<CMSSitemapResponse | null> {\n const { baseUrl, apiKey, appId } = cfg()\n if (!baseUrl || !apiKey || !appId) return null\n try {\n const res = await fetch(`${baseUrl}/api/v1/${appId}/sitemap`, {\n headers: headers(),\n next: { revalidate: 3600 },\n } as RequestInit)\n if (!res.ok) return null\n const json = await res.json()\n return json.data ?? null\n } catch { return null }\n }\n\n /**\n * GET /api/v1/{appId}/status\n * Verify connectivity and retrieve page counts. Never cached — always fresh.\n * Useful for debugging API key setup.\n */\n async function getStatus(): Promise<CMSStatusResponse | null> {\n const { baseUrl, apiKey, appId } = cfg()\n if (!baseUrl || !apiKey || !appId) return null\n try {\n const res = await fetch(`${baseUrl}/api/v1/${appId}/status`, {\n headers: headers(),\n cache: 'no-store',\n } as RequestInit)\n if (!res.ok) return null\n return await res.json()\n } catch { return null }\n }\n\n async function getGlobals(): Promise<{ navigation: CMSPage | null; footer: CMSPage | null }> {\n const { baseUrl, appId } = cfg()\n if (!baseUrl || !appId) return { navigation: null, footer: null }\n try {\n const res = await fetch(`${baseUrl}/api/v1/${appId}/globals`, {\n headers: headers(),\n next: { revalidate: 60, tags: [`cms-globals-${appId}`] },\n } as RequestInit)\n if (!res.ok) {\n const [navPages, footerPages] = await Promise.all([\n getPages({ type: 'navigation' }),\n getPages({ type: 'footer' }),\n ])\n return { navigation: navPages[0] ?? null, footer: footerPages[0] ?? null }\n }\n const json = await res.json()\n return {\n navigation: json.data?.navigation ?? null,\n footer: json.data?.footer ?? null,\n }\n } catch {\n return { navigation: null, footer: null }\n }\n }\n\n return {\n getPages,\n getPage,\n getGlobals,\n getBlogPosts,\n getEvents,\n getAnnouncements,\n getPreviewPage,\n getPageWithPreview,\n getPageType,\n getSiteStructure,\n getSitemap,\n getStatus,\n }\n}\n\n// ── Default singleton ─────────────────────────────────────────────────────────\n\n/** Pre-configured singleton. Reads env vars lazily at request time. */\nexport const cmsClient = createCMSClient()\n","'use client'\n\nimport React from 'react'\nimport type { CMSBlock, CMSPageType } from '../client'\n\nexport interface CMSBlocksProps {\n blocks: CMSBlock[]\n pageType?: CMSPageType | null\n className?: string\n /**\n * Custom block renderers — extend or override built-in blocks.\n * @example\n * <CMSBlocks blocks={blocks} custom={{ 'my-hero': (block) => <MyHero {...block.data} /> }} />\n */\n custom?: Record<string, (block: CMSBlock) => React.ReactNode>\n}\n\n/**\n * Resolves block data from either `data` (v1.1+) or legacy `content` field.\n */\nfunction getData(block: CMSBlock): Record<string, any> {\n return block.data ?? block.content ?? {}\n}\n\n// ── Built-in block renderers ──────────────────────────────────────────────────\n\nfunction HeadingBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const text = d.text || d.heading || d.title || ''\n const level = Number(d.level) || 2\n const cls = {\n 1: 'text-4xl font-bold tracking-tight',\n 2: 'text-2xl font-bold mt-8',\n 3: 'text-xl font-semibold mt-6',\n 4: 'text-lg font-medium mt-4',\n }[level] ?? 'text-2xl font-bold'\n return React.createElement(`h${level}`, { className: cls }, text)\n}\n\nfunction TextBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const raw = d.text || d.content || ''\n // If the stored value contains HTML tags, render it properly rather than as raw tag text\n const isHtml = typeof raw === 'string' && /<[a-z][\\s\\S]*>/i.test(raw)\n if (isHtml) {\n return (\n <div\n className=\"prose prose-neutral dark:prose-invert max-w-none\"\n dangerouslySetInnerHTML={{ __html: raw }}\n />\n )\n }\n return <p className=\"text-base leading-relaxed text-muted-foreground\">{raw}</p>\n}\n\nfunction RichTextBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const html = d.content || d.richtext || d.text || ''\n if (!html) return null\n return (\n <div\n className=\"prose prose-neutral dark:prose-invert max-w-none\"\n dangerouslySetInnerHTML={{ __html: html }}\n />\n )\n}\n\nfunction ImageBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const src = d.src || d.url || d.image || ''\n if (!src) return null\n return (\n <figure className=\"my-6\">\n <img src={src} alt={d.alt || ''} className=\"w-full rounded-lg border object-cover\" />\n {d.caption && (\n <figcaption className=\"mt-2 text-sm text-muted-foreground text-center\">{d.caption}</figcaption>\n )}\n </figure>\n )\n}\n\nfunction HeroBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n return (\n <section className=\"py-12 md:py-20\">\n <div className=\"max-w-3xl\">\n {d.badge && (\n <span className=\"inline-block px-3 py-1 text-xs font-semibold rounded-full bg-secondary text-secondary-foreground mb-4\">\n {d.badge}\n </span>\n )}\n <h1 className=\"text-4xl md:text-5xl font-bold tracking-tight mb-4 text-balance\">{d.title}</h1>\n {d.subtitle && <p className=\"text-xl text-muted-foreground mb-8\">{d.subtitle}</p>}\n {(d.primaryButton || d.cta) && (\n <div className=\"flex gap-4 flex-wrap\">\n {(d.primaryButton || d.cta) && (\n <a href={d.primaryUrl || d.ctaUrl || '#'}\n className=\"inline-flex items-center px-6 py-3 rounded-lg bg-primary text-primary-foreground font-semibold hover:opacity-90 transition-opacity\">\n {d.primaryButton || d.cta}\n </a>\n )}\n {d.secondaryButton && (\n <a href={d.secondaryUrl || '#'}\n className=\"inline-flex items-center px-6 py-3 rounded-lg border border-border font-semibold hover:bg-muted transition-colors\">\n {d.secondaryButton}\n </a>\n )}\n </div>\n )}\n </div>\n </section>\n )\n}\n\nfunction CTABlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n return (\n <section className=\"py-12 px-8 rounded-xl bg-primary text-primary-foreground text-center\">\n <h2 className=\"text-2xl md:text-3xl font-bold mb-4\">{d.title}</h2>\n {d.subtitle && <p className=\"text-primary-foreground/80 mb-6 max-w-2xl mx-auto\">{d.subtitle}</p>}\n <div className=\"flex gap-4 justify-center flex-wrap\">\n {d.primaryButton && (\n <a href={d.primaryUrl || '#'}\n className=\"px-6 py-3 rounded-lg bg-background text-foreground font-semibold hover:opacity-90 transition-opacity\">\n {d.primaryButton}\n </a>\n )}\n {d.secondaryButton && (\n <a href={d.secondaryUrl || '#'}\n className=\"px-6 py-3 rounded-lg border border-primary-foreground/20 text-primary-foreground font-semibold hover:bg-primary-foreground/10 transition-colors\">\n {d.secondaryButton}\n </a>\n )}\n </div>\n </section>\n )\n}\n\nfunction FAQBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const items: { question: string; answer: string }[] = d.items || []\n return (\n <section className=\"py-8\">\n {d.title && <h2 className=\"text-2xl font-bold mb-6\">{d.title}</h2>}\n <div className=\"space-y-4\">\n {items.map((item, i) => (\n <details key={i} className=\"group border border-border rounded-lg\">\n <summary className=\"flex items-center justify-between p-4 cursor-pointer font-medium select-none\">\n {item.question}\n <span className=\"transition-transform group-open:rotate-45 text-lg leading-none\">+</span>\n </summary>\n <div className=\"px-4 pb-4 text-muted-foreground\">{item.answer}</div>\n </details>\n ))}\n </div>\n </section>\n )\n}\n\nfunction TeamMemberBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n return (\n <div className=\"flex flex-col sm:flex-row items-center sm:items-start gap-4 p-6 rounded-xl border border-border bg-card\">\n {d.avatar ? (\n <img\n src={d.avatar}\n alt={d.name || 'Team member'}\n className=\"w-20 h-20 rounded-full object-cover border-2 border-border flex-shrink-0\"\n />\n ) : (\n <div className=\"w-20 h-20 rounded-full bg-muted flex items-center justify-center text-muted-foreground text-2xl font-semibold flex-shrink-0\">\n {(d.name || 'T').charAt(0).toUpperCase()}\n </div>\n )}\n <div className=\"text-center sm:text-left\">\n {d.name && <h3 className=\"font-semibold text-lg\">{d.name}</h3>}\n {d.role && <p className=\"text-sm text-primary font-medium\">{d.role}</p>}\n {d.bio && <p className=\"text-sm text-muted-foreground mt-2 leading-relaxed\">{d.bio}</p>}\n </div>\n </div>\n )\n}\n\nfunction StatsBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const items: { value: string; label: string }[] = d.items || d.stats || []\n return (\n <section className=\"py-8\">\n {d.title && <h2 className=\"text-2xl font-bold mb-6 text-center\">{d.title}</h2>}\n <div className={`grid gap-6 grid-cols-2 md:grid-cols-${Math.min(items.length, 4)}`}>\n {items.map((s, i) => (\n <div key={i} className=\"text-center p-6 rounded-lg border bg-card\">\n <div className=\"text-3xl font-bold text-primary\">{s.value}</div>\n <div className=\"text-sm text-muted-foreground mt-1\">{s.label}</div>\n </div>\n ))}\n </div>\n </section>\n )\n}\n\nfunction TestimonialBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n return (\n <div className=\"border border-border rounded-xl p-6 bg-card\">\n <blockquote className=\"text-lg italic mb-4 text-foreground\">\"{d.quote}\"</blockquote>\n <div className=\"flex items-center gap-3\">\n {d.avatar && <img src={d.avatar} alt=\"\" className=\"w-10 h-10 rounded-full object-cover\" />}\n <div>\n <div className=\"font-semibold\">{d.author}</div>\n {d.role && <div className=\"text-sm text-muted-foreground\">{d.role}</div>}\n </div>\n </div>\n </div>\n )\n}\n\nfunction QuoteBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n return (\n <blockquote className=\"border-l-4 border-primary pl-6 py-2 italic text-lg\">\n {d.text}\n {d.author && <footer className=\"mt-2 text-sm text-muted-foreground not-italic\">— {d.author}</footer>}\n </blockquote>\n )\n}\n\nfunction AlertBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const colors: Record<string, string> = {\n info: 'bg-blue-50 border-blue-200 text-blue-800 dark:bg-blue-950 dark:border-blue-800 dark:text-blue-200',\n success: 'bg-green-50 border-green-200 text-green-800 dark:bg-green-950 dark:border-green-800 dark:text-green-200',\n warning: 'bg-yellow-50 border-yellow-200 text-yellow-800 dark:bg-yellow-950 dark:border-yellow-800 dark:text-yellow-200',\n error: 'bg-red-50 border-red-200 text-red-800 dark:bg-red-950 dark:border-red-800 dark:text-red-200',\n }\n const variant = d.variant || d.type || 'info'\n return (\n <div className={`p-4 rounded-lg border ${colors[variant] ?? colors.info}`}>\n {d.title && <div className=\"font-semibold mb-1\">{d.title}</div>}\n <p>{d.message || d.text || ''}</p>\n </div>\n )\n}\n\nfunction DividerBlock() {\n return <hr className=\"my-8 border-border\" />\n}\n\nfunction SpacerBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const sizes: Record<string, string> = { sm: 'h-4', md: 'h-8', lg: 'h-16', xl: 'h-24' }\n return <div className={sizes[d.size] ?? 'h-8'} />\n}\n\nfunction VideoBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const url = d.url || d.embed || ''\n if (!url) return null\n // Convert YouTube/Vimeo watch URLs to embed URLs\n const embedUrl = url\n .replace('youtube.com/watch?v=', 'youtube.com/embed/')\n .replace('youtu.be/', 'youtube.com/embed/')\n .replace('vimeo.com/', 'player.vimeo.com/video/')\n return (\n <div className=\"aspect-video rounded-lg overflow-hidden border bg-muted\">\n <iframe src={embedUrl} allow=\"autoplay; fullscreen\" allowFullScreen className=\"w-full h-full\" title={d.title || 'Video'} />\n </div>\n )\n}\n\n// ── Product List Block (dynamic, fetches from API) ────────────────────────────\n\ninterface Product {\n id: string\n name: string\n price: number\n image?: string\n rating?: number\n category?: string\n description?: string\n badge?: string\n}\n\nfunction normaliseProduct(raw: Record<string, any>): Product {\n if (raw.id !== undefined && raw.price !== undefined) return raw as Product\n const firstPlan = Array.isArray(raw.plans) && raw.plans.length > 0 ? raw.plans[0] : null\n const courseCount = Array.isArray(raw.courses) ? raw.courses.length : undefined\n // Skip base64 images — too large, use thumbnail or nothing\n const image = raw.image && !raw.image.startsWith('data:') ? raw.image : (raw.thumbnail ?? undefined)\n return {\n id: raw._id ?? raw.id ?? String(Math.random()),\n name: raw.name ?? 'Unnamed',\n description: raw.description,\n price: firstPlan?.price ?? raw.price ?? 0,\n image,\n rating: raw.rating ?? undefined,\n category: raw.type ? raw.type.replace(/-/g, ' ').replace(/\\b\\w/g, (c: string) => c.toUpperCase()) : undefined,\n badge: courseCount ? `${courseCount} course${courseCount !== 1 ? 's' : ''}` : (raw.duration ? `${raw.duration} min` : undefined),\n }\n}\n\nfunction ProductListBlock({ block }: { block: CMSBlock }) {\n // Config lives in block.content; pre-fetched products in block.data.products (set by CMS API)\n const cfg = (block.content ?? {}) as any\n const { title, subtitle, columns = 3, showPrice = true, showRating = true, limit = 6, currency = '$' } = cfg\n const cols = parseInt(String(columns), 10)\n const gridCols = cols === 2 ? 'sm:grid-cols-2' : cols === 4 ? 'sm:grid-cols-2 lg:grid-cols-4' : 'sm:grid-cols-2 lg:grid-cols-3'\n\n // Products pre-fetched by CMS API — stored in content.prefetchedProducts (survives RSC serialization)\n const rawProducts = Array.isArray(cfg.prefetchedProducts) ? cfg.prefetchedProducts : []\n const products: Product[] = (rawProducts as any[]).map(normaliseProduct).slice(0, Number(limit))\n\n if (products.length === 0) {\n return (\n <section className=\"py-12\">\n <div className=\"max-w-6xl mx-auto px-4\">\n <div className=\"text-center py-12 border border-dashed border-border rounded-lg bg-muted/10\">\n <p className=\"text-sm text-muted-foreground\">No products available</p>\n </div>\n </div>\n </section>\n )\n }\n\n return (\n <section className=\"py-12\">\n <div className=\"max-w-6xl mx-auto px-4\">\n {(title || subtitle) && (\n <div className=\"text-center mb-8\">\n {title && <h2 className=\"text-2xl md:text-3xl font-semibold tracking-tight\">{title}</h2>}\n {subtitle && <p className=\"text-muted-foreground mt-2\">{subtitle}</p>}\n </div>\n )}\n <div className={`grid gap-6 grid-cols-1 ${gridCols}`}>\n {products.map((product) => (\n <div key={product.id} className=\"border rounded-lg overflow-hidden group hover:shadow-md transition-shadow bg-card\">\n {product.image && (\n <div className=\"aspect-video relative bg-muted overflow-hidden\">\n <img src={product.image} alt={product.name} className=\"w-full h-full object-cover group-hover:scale-105 transition-transform duration-300\" />\n </div>\n )}\n <div className=\"p-4 space-y-2\">\n <div className=\"flex items-center gap-2 flex-wrap\">\n {product.category && (\n <span className=\"text-xs px-2 py-0.5 rounded-full bg-primary/10 text-primary font-medium\">{product.category}</span>\n )}\n {product.badge && (\n <span className=\"text-xs px-2 py-0.5 rounded-full bg-muted text-muted-foreground\">{product.badge}</span>\n )}\n </div>\n <h3 className=\"font-semibold text-base line-clamp-2\">{product.name}</h3>\n <div className=\"flex items-center justify-between pt-1\">\n {showPrice && product.price > 0 && (\n <span className=\"font-bold text-lg\">{typeof product.price === 'number' ? product.price.toFixed(2) : product.price} {currency}</span>\n )}\n {showRating && product.rating && (\n <div className=\"flex items-center gap-1 text-sm text-muted-foreground\">\n <svg className=\"w-3.5 h-3.5 fill-yellow-400 text-yellow-400\" viewBox=\"0 0 24 24\"><path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"/></svg>\n <span>{product.rating}</span>\n </div>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n </section>\n )\n}\n\n// ── Renders a single field value based on its field type ──────────────────────\n\nfunction FieldValue({ value, fieldType }: { value: any; fieldType: string }) {\n if (value === null || value === undefined || value === '') return null\n const isHtml = (v: any) => typeof v === 'string' && /<[a-z][\\s\\S]*>/i.test(v)\n\n if (fieldType === 'richtext' || isHtml(value)) {\n return (\n <div\n className=\"prose prose-neutral dark:prose-invert max-w-none\"\n dangerouslySetInnerHTML={{ __html: String(value) }}\n />\n )\n }\n if (fieldType === 'image') {\n return <img src={String(value)} alt=\"\" className=\"rounded-lg border max-h-96 object-cover w-full\" />\n }\n if (fieldType === 'boolean') {\n return <span className=\"text-muted-foreground\">{value ? 'Yes' : 'No'}</span>\n }\n if (fieldType === 'url') {\n return <a href={String(value)} className=\"text-primary underline underline-offset-2 break-all\">{String(value)}</a>\n }\n if (Array.isArray(value)) {\n return <span className=\"text-muted-foreground\">{value.join(', ')}</span>\n }\n return <span className=\"text-muted-foreground\">{String(value)}</span>\n}\n\n// ── Structured block: type === '__structured__', content is nested { sectionName: { fieldName: value } }\n// ────────────────────────────────────────────────────��────────────────────────\n\nfunction StructuredBlock({ block, pageType }: { block: CMSBlock; pageType?: CMSPageType | null }) {\n // content is { sectionName: { fieldName: value } } after API denormalization\n const nested: Record<string, Record<string, any>> = (block.content ?? block.data ?? {}) as any\n\n // If we have the page type schema, use it to drive rendering with correct field types\n if (pageType?.sections?.length) {\n return (\n <div className=\"space-y-8\">\n {pageType.sections.map(section => {\n const sectionData = nested[section.name] ?? {}\n const filledFields = section.fields.filter(f => {\n const v = sectionData[f.name]\n return v !== undefined && v !== null && v !== ''\n })\n if (filledFields.length === 0) return null\n return (\n <section key={section.id} className=\"space-y-4\">\n {filledFields.map(field => {\n const value = sectionData[field.name]\n if (value === undefined || value === null || value === '') return null\n return (\n <div key={field.id}>\n <FieldValue value={value} fieldType={field.fieldType} />\n </div>\n )\n })}\n </section>\n )\n })}\n </div>\n )\n }\n\n // No schema — iterate the nested sections and render scalar + html values\n const isHtml = (v: any) => typeof v === 'string' && /<[a-z][\\s\\S]*>/i.test(v)\n return (\n <div className=\"space-y-8\">\n {Object.entries(nested).map(([sectionName, fields]) => {\n if (!fields || typeof fields !== 'object' || Array.isArray(fields)) return null\n const entries = Object.entries(fields).filter(([, v]) => v !== '' && v !== null && v !== undefined)\n if (entries.length === 0) return null\n return (\n <section key={sectionName} className=\"space-y-4\">\n {entries.map(([fieldName, value]) => {\n if (typeof value === 'object' && !Array.isArray(value)) return null\n return (\n <div key={fieldName}>\n {isHtml(value) ? (\n <div className=\"prose prose-neutral dark:prose-invert max-w-none\" dangerouslySetInnerHTML={{ __html: String(value) }} />\n ) : Array.isArray(value) ? (\n <p className=\"text-muted-foreground\">{value.join(', ')}</p>\n ) : (\n <p className=\"text-muted-foreground\">{String(value)}</p>\n )}\n </div>\n )\n })}\n </section>\n )\n })}\n </div>\n )\n}\n\n// ── Named section block (block.type matches a pageType section name) ──────────\n\nfunction SectionBlock({ block, pageType }: { block: CMSBlock; pageType?: CMSPageType | null }) {\n const d = getData(block)\n const section = pageType?.sections.find(s => s.name === block.type)\n\n if (section) {\n const filledFields = section.fields.filter(f => {\n const v = d[f.name]\n return v !== undefined && v !== null && v !== ''\n })\n if (filledFields.length === 0) return null\n return (\n <section className=\"space-y-4\">\n {filledFields.map(field => {\n const value = d[field.name]\n if (value === undefined || value === null || value === '') return null\n return (\n <div key={field.id}>\n <FieldValue value={value} fieldType={field.fieldType} />\n </div>\n )\n })}\n </section>\n )\n }\n\n // No schema — render scalar values only\n const isHtml = (v: any) => typeof v === 'string' && /<[a-z][\\s\\S]*>/i.test(v)\n const entries = Object.entries(d).filter(([, v]) =>\n v !== '' && v !== null && v !== undefined &&\n typeof v !== 'object' && !Array.isArray(v)\n )\n if (entries.length === 0) return null\n return (\n <section className=\"space-y-2\">\n {entries.map(([key, value]) =>\n isHtml(value) ? (\n <div key={key} className=\"prose prose-neutral dark:prose-invert max-w-none\" dangerouslySetInnerHTML={{ __html: String(value) }} />\n ) : (\n <p key={key} className=\"text-muted-foreground\">{String(value)}</p>\n )\n )}\n </section>\n )\n}\n\n// Maps icon string names (from editor) to inline SVG paths\nconst FEATURE_ICONS: Record<string, React.ReactNode> = {\n zap: <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-5 h-5\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"/></svg>,\n shield: <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-5 h-5\"><path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"/></svg>,\n star: <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-5 h-5\"><polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"/></svg>,\n check: <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-5 h-5\"><polyline points=\"20 6 9 17 4 12\"/></svg>,\n lock: <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-5 h-5\"><rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\"/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"/></svg>,\n globe: <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-5 h-5\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"/><path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"/></svg>,\n clock: <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-5 h-5\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><polyline points=\"12 6 12 12 16 14\"/></svg>,\n heart: <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-5 h-5\"><path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\"/></svg>,\n settings: <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-5 h-5\"><circle cx=\"12\" cy=\"12\" r=\"3\"/><path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 1 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 1 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 1 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 1 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z\"/></svg>,\n users: <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-5 h-5\"><path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"/><circle cx=\"9\" cy=\"7\" r=\"4\"/><path d=\"M23 21v-2a4 4 0 0 0-3-3.87\"/><path d=\"M16 3.13a4 4 0 0 1 0 7.75\"/></svg>,\n trending: <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"w-5 h-5\"><polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\"/><polyline points=\"17 6 23 6 23 12\"/></svg>,\n}\n\nfunction ButtonBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const label = d.label || d.text || 'Button'\n const url = d.url || '#'\n const variant = d.variant || 'default'\n const base = 'inline-flex items-center justify-center px-5 py-2.5 rounded-lg text-sm font-medium transition-opacity hover:opacity-90'\n const cls = variant === 'outline'\n ? `${base} border border-primary text-primary bg-transparent`\n : variant === 'ghost'\n ? `${base} text-primary hover:bg-primary/10`\n : `${base} bg-primary text-primary-foreground`\n return (\n <div>\n <a href={url} className={cls}>{label}</a>\n </div>\n )\n}\n\nfunction ListBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const items: string[] = Array.isArray(d.items) ? d.items : []\n const ordered = Boolean(d.ordered)\n const Tag = ordered ? 'ol' : 'ul'\n const listCls = ordered ? 'list-decimal' : 'list-disc'\n return (\n <Tag className={`${listCls} pl-6 space-y-1.5 text-base text-foreground leading-relaxed`}>\n {items.map((item, i) => (\n <li key={i}>{item}</li>\n ))}\n </Tag>\n )\n}\n\nfunction GalleryBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const images: any[] = Array.isArray(d.images) ? d.images : []\n const cols = Number(d.columns) || 3\n const gridCols = cols === 2 ? 'grid-cols-2' : cols === 4 ? 'grid-cols-2 md:grid-cols-4' : 'grid-cols-2 md:grid-cols-3'\n if (!images.length) return null\n return (\n <div className={`grid gap-3 ${gridCols}`}>\n {images.filter(img => img.src).map((img, i) => (\n <figure key={i} className=\"overflow-hidden rounded-lg border border-border\">\n <img src={img.src} alt={img.alt || ''} className=\"w-full h-48 object-cover\" />\n {img.caption && <figcaption className=\"px-2 py-1 text-xs text-muted-foreground text-center\">{img.caption}</figcaption>}\n </figure>\n ))}\n </div>\n )\n}\n\nfunction PricingTableBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const tiers: any[] = Array.isArray(d.tiers) ? d.tiers : []\n const [yearly, setYearly] = React.useState(false)\n return (\n <section className=\"py-12\">\n {(d.title || d.subtitle) && (\n <div className=\"text-center mb-8\">\n {d.title && <h2 className=\"text-2xl md:text-3xl font-bold tracking-tight\">{d.title}</h2>}\n {d.subtitle && <p className=\"mt-2 text-muted-foreground\">{d.subtitle}</p>}\n </div>\n )}\n {d.billingToggle && (\n <div className=\"flex items-center justify-center gap-3 mb-8\">\n <span className={`text-sm ${!yearly ? 'font-semibold' : 'text-muted-foreground'}`}>Monthly</span>\n <button\n onClick={() => setYearly(v => !v)}\n className={`relative w-10 h-6 rounded-full transition-colors ${yearly ? 'bg-primary' : 'bg-muted'}`}\n aria-label=\"Toggle billing period\"\n >\n <span className={`absolute top-1 w-4 h-4 rounded-full bg-white shadow transition-all ${yearly ? 'left-5' : 'left-1'}`} />\n </button>\n <span className={`text-sm ${yearly ? 'font-semibold' : 'text-muted-foreground'}`}>Yearly</span>\n </div>\n )}\n <div className={`grid gap-6 ${tiers.length === 2 ? 'md:grid-cols-2' : tiers.length >= 3 ? 'md:grid-cols-3' : ''}`}>\n {tiers.map((tier, i) => {\n const price = yearly ? tier.yearlyPrice ?? tier.monthlyPrice : tier.monthlyPrice\n const featured = Boolean(tier.featured)\n return (\n <div key={tier.id || i} className={`flex flex-col rounded-2xl border p-8 ${featured ? 'border-primary bg-primary text-primary-foreground shadow-xl' : 'border-border bg-card'}`}>\n <div className=\"mb-6\">\n <h3 className={`text-xl font-bold ${featured ? 'text-primary-foreground' : ''}`}>{tier.name}</h3>\n {tier.description && <p className={`text-sm mt-1 ${featured ? 'text-primary-foreground/70' : 'text-muted-foreground'}`}>{tier.description}</p>}\n <div className=\"mt-4 flex items-end gap-1\">\n <span className={`text-4xl font-extrabold ${featured ? 'text-primary-foreground' : ''}`}>{d.currency ?? '$'}{price ?? 0}</span>\n <span className={`text-sm mb-1 ${featured ? 'text-primary-foreground/70' : 'text-muted-foreground'}`}>/mo</span>\n </div>\n </div>\n <ul className=\"space-y-2 flex-1 mb-8\">\n {(tier.features ?? []).map((f: any, j: number) => (\n <li key={j} className=\"flex items-center gap-2 text-sm\">\n <svg className={`w-4 h-4 flex-shrink-0 ${f.included ? (featured ? 'text-primary-foreground' : 'text-primary') : 'text-muted-foreground opacity-40'}`} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n {f.included ? <polyline points=\"20 6 9 17 4 12\"/> : <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/>}\n </svg>\n <span className={!f.included ? 'opacity-50' : ''}>{f.text}</span>\n </li>\n ))}\n </ul>\n {tier.cta && (\n <a href={tier.ctaUrl || '#'} className={`block text-center py-2.5 px-6 rounded-lg font-semibold text-sm transition-opacity hover:opacity-90 ${featured ? 'bg-primary-foreground text-primary' : 'bg-primary text-primary-foreground'}`}>\n {tier.cta}\n </a>\n )}\n </div>\n )\n })}\n </div>\n </section>\n )\n}\n\nfunction SplitHeroBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const imgLeft = d.imagePosition === 'left'\n return (\n <section className=\"py-16\">\n <div className={`flex flex-col ${imgLeft ? 'md:flex-row-reverse' : 'md:flex-row'} items-center gap-10 md:gap-16 max-w-6xl mx-auto px-4`}>\n <div className=\"flex-1 space-y-5\">\n {d.title && <h1 className=\"text-3xl md:text-5xl font-extrabold tracking-tight text-balance leading-tight\">{d.title}</h1>}\n {d.subtitle && <p className=\"text-lg text-muted-foreground leading-relaxed text-pretty\">{d.subtitle}</p>}\n {(d.button || d.secondaryButton) && (\n <div className=\"flex flex-wrap gap-3 pt-2\">\n {d.button && <a href={d.buttonUrl || '#'} className=\"inline-flex items-center px-6 py-3 rounded-lg bg-primary text-primary-foreground font-semibold text-sm hover:opacity-90 transition-opacity\">{d.button}</a>}\n {d.secondaryButton && <a href={d.secondaryUrl || '#'} className=\"inline-flex items-center px-6 py-3 rounded-lg border border-border text-foreground font-semibold text-sm hover:bg-muted transition-colors\">{d.secondaryButton}</a>}\n </div>\n )}\n </div>\n <div className=\"flex-1 w-full\">\n {d.image\n ? <img src={d.image} alt={d.title || ''} className=\"w-full rounded-2xl object-cover shadow-lg border border-border\" />\n : <div className=\"w-full rounded-2xl bg-muted border border-border aspect-video flex items-center justify-center\"><span className=\"text-xs text-muted-foreground\">No image set</span></div>\n }\n </div>\n </div>\n </section>\n )\n}\n\n\nfunction AccordionBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const items: any[] = Array.isArray(d.items) ? d.items : []\n const [open, setOpen] = React.useState<number | null>(null)\n return (\n <section className=\"py-8\">\n {d.title && <h2 className=\"text-2xl font-bold text-center mb-6 text-balance\">{d.title}</h2>}\n <div className=\"max-w-2xl mx-auto divide-y divide-border border border-border rounded-xl overflow-hidden\">\n {items.map((item, i) => (\n <div key={i}>\n <button\n type=\"button\"\n className=\"w-full flex items-center justify-between px-5 py-4 text-left text-sm font-medium hover:bg-muted/50 transition-colors\"\n onClick={() => setOpen(open === i ? null : i)}\n aria-expanded={open === i}\n >\n <span>{item.title}</span>\n <svg className={`w-4 h-4 text-muted-foreground transition-transform ${open === i ? 'rotate-180' : ''}`} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><polyline points=\"6 9 12 15 18 9\"/></svg>\n </button>\n {open === i && (\n <div className=\"px-5 pb-4 text-sm text-muted-foreground leading-relaxed\" dangerouslySetInnerHTML={{ __html: item.content || '' }} />\n )}\n </div>\n ))}\n </div>\n </section>\n )\n}\n\nfunction TabsBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const tabs: any[] = Array.isArray(d.tabs) ? d.tabs : []\n const [active, setActive] = React.useState(0)\n if (!tabs.length) return null\n return (\n <div className=\"py-6\">\n <div className=\"flex gap-1 border-b border-border mb-6 overflow-x-auto\">\n {tabs.map((tab, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={() => setActive(i)}\n className={`px-4 py-2 text-sm font-medium whitespace-nowrap transition-colors border-b-2 -mb-px ${active === i ? 'border-primary text-primary' : 'border-transparent text-muted-foreground hover:text-foreground'}`}\n >\n {tab.label}\n </button>\n ))}\n </div>\n <div className=\"text-sm text-foreground leading-relaxed\" dangerouslySetInnerHTML={{ __html: tabs[active]?.content || '' }} />\n </div>\n )\n}\n\nfunction ColumnsBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const items: any[] = Array.isArray(d.items) ? d.items : []\n const cols = Number(d.columns) || 3\n const gridCols = cols === 2 ? 'md:grid-cols-2' : cols === 4 ? 'md:grid-cols-4' : 'md:grid-cols-3'\n const gap = d.gap === 'sm' ? 'gap-4' : d.gap === 'lg' ? 'gap-12' : 'gap-8'\n if (!items.length) return null\n return (\n <div className={`grid grid-cols-1 ${gridCols} ${gap}`}>\n {items.map((item, i) => (\n <div key={i} className=\"text-sm leading-relaxed\" dangerouslySetInnerHTML={{ __html: item.content || '' }} />\n ))}\n </div>\n )\n}\n\nfunction ContainerBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const maxW: Record<string, string> = { sm: 'max-w-sm', md: 'max-w-md', lg: 'max-w-lg', xl: 'max-w-xl', '2xl': 'max-w-2xl', '4xl': 'max-w-4xl', full: 'max-w-full' }\n const pad: Record<string, string> = { none: 'px-0 py-0', sm: 'px-4 py-4', md: 'px-6 py-8', lg: 'px-8 py-12' }\n const align: Record<string, string> = { left: 'text-left', center: 'text-center', right: 'text-right' }\n const style = d.bgColor ? { backgroundColor: d.bgColor } : undefined\n return (\n <section style={style} className={d.bgColor ? 'rounded-xl' : ''}>\n <div className={`mx-auto ${maxW[d.maxWidth || '4xl'] ?? 'max-w-4xl'} ${pad[d.padding || 'md'] ?? 'px-6 py-8'} ${align[d.align || 'left'] ?? 'text-left'}`}>\n {d.title && <h2 className=\"text-2xl md:text-3xl font-bold tracking-tight text-balance mb-4\">{d.title}</h2>}\n {d.content && (\n <div\n className=\"prose prose-sm max-w-none leading-relaxed\"\n dangerouslySetInnerHTML={{ __html: d.content }}\n />\n )}\n </div>\n </section>\n )\n}\n\nfunction CarouselBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const slides: any[] = Array.isArray(d.slides) ? d.slides : []\n const [current, setCurrent] = React.useState(0)\n\n React.useEffect(() => {\n if (!d.autoplay || slides.length < 2) return\n const id = setInterval(() => setCurrent(c => (c + 1) % slides.length), Number(d.interval) || 4000)\n return () => clearInterval(id)\n }, [d.autoplay, d.interval, slides.length])\n\n if (!slides.length) return null\n const prev = () => setCurrent(c => (c - 1 + slides.length) % slides.length)\n const next = () => setCurrent(c => (c + 1) % slides.length)\n const slide = slides[current]\n\n return (\n <div className=\"relative w-full overflow-hidden rounded-xl border border-border bg-muted\">\n <div className=\"relative aspect-video\">\n {slide.image\n ? <img src={slide.image} alt={slide.title || ''} className=\"w-full h-full object-cover\" />\n : <div className=\"w-full h-full flex items-center justify-center text-muted-foreground text-sm\">No image</div>\n }\n {(slide.title || slide.subtitle) && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-end pb-8 bg-gradient-to-t from-black/60 to-transparent text-white text-center px-6\">\n {slide.title && <h3 className=\"text-xl font-bold text-balance\">{slide.title}</h3>}\n {slide.subtitle && <p className=\"text-sm opacity-80 mt-1\">{slide.subtitle}</p>}\n </div>\n )}\n </div>\n {d.showArrows !== false && slides.length > 1 && (\n <>\n <button onClick={prev} className=\"absolute left-3 top-1/2 -translate-y-1/2 w-9 h-9 rounded-full bg-black/40 text-white flex items-center justify-center hover:bg-black/60 transition-colors\" aria-label=\"Previous\">\n <svg className=\"w-5 h-5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><polyline points=\"15 18 9 12 15 6\"/></svg>\n </button>\n <button onClick={next} className=\"absolute right-3 top-1/2 -translate-y-1/2 w-9 h-9 rounded-full bg-black/40 text-white flex items-center justify-center hover:bg-black/60 transition-colors\" aria-label=\"Next\">\n <svg className=\"w-5 h-5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><polyline points=\"9 18 15 12 9 6\"/></svg>\n </button>\n </>\n )}\n {d.showDots !== false && slides.length > 1 && (\n <div className=\"absolute bottom-3 left-1/2 -translate-x-1/2 flex gap-1.5\">\n {slides.map((_, i) => (\n <button key={i} onClick={() => setCurrent(i)} className={`w-2 h-2 rounded-full transition-colors ${i === current ? 'bg-white' : 'bg-white/40'}`} aria-label={`Slide ${i + 1}`} />\n ))}\n </div>\n )}\n </div>\n )\n}\n\nfunction CardGridBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const cards: any[] = Array.isArray(d.cards) ? d.cards : []\n const cols = Number(d.columns) || 3\n const gridCols = cols === 2 ? 'sm:grid-cols-2' : cols === 4 ? 'sm:grid-cols-2 lg:grid-cols-4' : 'sm:grid-cols-2 lg:grid-cols-3'\n return (\n <section className=\"py-12\">\n <div className=\"max-w-6xl mx-auto px-4\">\n {d.title && <h2 className=\"text-2xl md:text-3xl font-bold tracking-tight text-center text-balance mb-8\">{d.title}</h2>}\n {cards.length === 0 ? (\n <p className=\"text-center text-sm text-muted-foreground\">No cards added yet.</p>\n ) : (\n <div className={`grid grid-cols-1 gap-6 ${gridCols}`}>\n {cards.map((card, i) => (\n <div key={i} className=\"flex flex-col rounded-xl border border-border bg-card overflow-hidden hover:shadow-md transition-shadow\">\n {card.image && (\n <div className=\"aspect-video overflow-hidden bg-muted\">\n <img\n src={card.image}\n alt={card.title || ''}\n className=\"w-full h-full object-cover\"\n onError={(e) => { (e.target as HTMLImageElement).style.display = 'none' }}\n />\n </div>\n )}\n <div className=\"flex flex-col flex-1 p-5 gap-2\">\n {card.title && <h3 className=\"font-semibold text-base\">{card.title}</h3>}\n {card.description && <p className=\"text-sm text-muted-foreground leading-relaxed flex-1\">{card.description}</p>}\n {card.link && (\n <a href={card.link} className=\"inline-flex items-center text-sm font-medium text-primary hover:underline mt-2\">\n {card.linkText || 'Learn more'} →\n </a>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </section>\n )\n}\n\nfunction TimelineBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const items: any[] = Array.isArray(d.items) ? d.items : []\n return (\n <section className=\"py-12\">\n <div className=\"max-w-3xl mx-auto px-4\">\n {(d.title || d.subtitle) && (\n <div className=\"text-center mb-10\">\n {d.title && <h2 className=\"text-2xl md:text-3xl font-bold tracking-tight text-balance\">{d.title}</h2>}\n {d.subtitle && <p className=\"mt-2 text-muted-foreground text-pretty\">{d.subtitle}</p>}\n </div>\n )}\n {items.length === 0 ? (\n <p className=\"text-center text-sm text-muted-foreground\">No timeline items added yet.</p>\n ) : (\n <div className=\"relative\">\n <div className=\"absolute left-6 top-0 bottom-0 w-px bg-border\" aria-hidden=\"true\" />\n <div className=\"space-y-8\">\n {items.map((item, i) => (\n <div key={i} className=\"relative flex gap-6\">\n <div className=\"flex-shrink-0 w-12 h-12 rounded-full bg-primary text-primary-foreground flex items-center justify-center text-xs font-bold z-10 ring-4 ring-background\">\n {item.year || i + 1}\n </div>\n <div className=\"flex-1 pb-2 pt-1\">\n {item.title && <h3 className=\"font-semibold text-base\">{item.title}</h3>}\n {item.description && <p className=\"text-sm text-muted-foreground mt-1 leading-relaxed\">{item.description}</p>}\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n </section>\n )\n}\n\nfunction PricingCardBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const features: string[] = Array.isArray(d.features) ? d.features : []\n const featured = Boolean(d.featured)\n return (\n <div className={`relative flex flex-col rounded-2xl border p-8 ${featured ? 'border-primary bg-primary text-primary-foreground shadow-xl scale-105' : 'border-border bg-card'}`}>\n {featured && (\n <span className=\"absolute -top-3 left-1/2 -translate-x-1/2 px-3 py-1 rounded-full bg-primary-foreground text-primary text-xs font-semibold\">\n Most Popular\n </span>\n )}\n <div className=\"mb-6\">\n {d.name && <h3 className={`text-xl font-bold ${featured ? 'text-primary-foreground' : ''}`}>{d.name}</h3>}\n <div className=\"mt-2 flex items-end gap-1\">\n {d.price && <span className={`text-4xl font-extrabold tracking-tight ${featured ? 'text-primary-foreground' : ''}`}>{d.price}</span>}\n {d.period && <span className={`text-sm mb-1 ${featured ? 'text-primary-foreground/70' : 'text-muted-foreground'}`}>{d.period}</span>}\n </div>\n </div>\n {features.length > 0 && (\n <ul className=\"space-y-3 flex-1 mb-8\">\n {features.map((feat, i) => (\n <li key={i} className=\"flex items-center gap-2 text-sm\">\n <svg className={`w-4 h-4 flex-shrink-0 ${featured ? 'text-primary-foreground' : 'text-primary'}`} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\"/>\n </svg>\n <span className={featured ? 'text-primary-foreground/90' : ''}>{feat}</span>\n </li>\n ))}\n </ul>\n )}\n {d.button && (\n <a\n href={d.url || '#'}\n className={`block text-center py-2.5 px-6 rounded-lg font-semibold text-sm transition-opacity hover:opacity-90 ${featured ? 'bg-primary-foreground text-primary' : 'bg-primary text-primary-foreground'}`}\n >\n {d.button}\n </a>\n )}\n </div>\n )\n}\n\nfunction IconFeatureBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const iconKey = (d.icon || 'zap').toLowerCase()\n return (\n <div className=\"flex items-start gap-4 p-6 rounded-xl border border-border bg-card\">\n <div className=\"w-12 h-12 rounded-lg bg-primary/10 text-primary flex items-center justify-center flex-shrink-0\">\n {FEATURE_ICONS[iconKey] ?? (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" className=\"w-6 h-6\"><circle cx=\"12\" cy=\"12\" r=\"10\"/></svg>\n )}\n </div>\n <div className=\"flex-1 min-w-0\">\n {d.title && <h3 className=\"font-semibold text-base\">{d.title}</h3>}\n {d.description && <p className=\"text-sm text-muted-foreground mt-1 leading-relaxed\">{d.description}</p>}\n </div>\n </div>\n )\n}\n\nfunction FeatureGridBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const features: any[] = Array.isArray(d.features) ? d.features : []\n const cols = Number(d.columns) || 3\n const gridCols = cols === 2 ? 'sm:grid-cols-2' : cols === 4 ? 'sm:grid-cols-2 lg:grid-cols-4' : 'sm:grid-cols-2 lg:grid-cols-3'\n\n return (\n <section className=\"py-12\">\n <div className=\"max-w-6xl mx-auto px-4\">\n {(d.title || d.subtitle) && (\n <div className=\"text-center mb-10\">\n {d.title && <h2 className=\"text-2xl md:text-3xl font-bold tracking-tight text-balance\">{d.title}</h2>}\n {d.subtitle && <p className=\"mt-2 text-muted-foreground text-pretty\">{d.subtitle}</p>}\n </div>\n )}\n {features.length === 0 ? (\n <p className=\"text-center text-sm text-muted-foreground\">No features added yet.</p>\n ) : (\n <div className={`grid grid-cols-1 gap-6 ${gridCols}`}>\n {features.map((feat, i) => (\n <div key={i} className=\"flex flex-col gap-3 p-6 rounded-xl border border-border bg-card hover:shadow-md transition-shadow\">\n {feat.icon && (\n <div className=\"w-10 h-10 rounded-lg bg-primary/10 text-primary flex items-center justify-center flex-shrink-0\">\n {FEATURE_ICONS[feat.icon] ?? (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" className=\"w-5 h-5\"><circle cx=\"12\" cy=\"12\" r=\"10\"/></svg>\n )}\n </div>\n )}\n <div>\n {feat.title && <h3 className=\"font-semibold text-base\">{feat.title}</h3>}\n {feat.description && (\n <div className=\"text-sm text-muted-foreground mt-1 leading-relaxed prose prose-sm max-w-none\" dangerouslySetInnerHTML={{ __html: feat.description }} />\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </section>\n )\n}\n\nfunction TwoColumnBlock({ block }: { block: CMSBlock }) {\n const d = getData(block)\n const imagePos = d.imagePosition === 'left' ? 'flex-row-reverse' : 'flex-row'\n const hasImage = Boolean(d.image)\n return (\n <section className=\"py-10\">\n <div className={`flex flex-col md:${imagePos} gap-8 md:gap-12 items-center`}>\n <div className=\"flex-1 space-y-4\">\n {d.title && <h2 className=\"text-2xl md:text-3xl font-bold tracking-tight text-balance\">{d.title}</h2>}\n {d.text && <p className=\"text-muted-foreground leading-relaxed text-pretty\">{d.text}</p>}\n {d.button && (\n <a\n href={d.buttonUrl || '#'}\n className=\"inline-flex items-center gap-2 px-5 py-2.5 rounded-lg bg-primary text-primary-foreground text-sm font-medium hover:opacity-90 transition-opacity\"\n >\n {d.button}\n </a>\n )}\n </div>\n {hasImage && (\n <div className=\"flex-1 w-full\">\n <img\n src={d.image}\n alt={d.title || ''}\n className=\"w-full rounded-xl object-cover border border-border shadow-sm\"\n />\n </div>\n )}\n {!hasImage && (\n <div className=\"flex-1 w-full rounded-xl bg-muted border border-border aspect-video flex items-center justify-center\">\n <span className=\"text-xs text-muted-foreground\">No image set</span>\n </div>\n )}\n </div>\n </section>\n )\n}\n\n// ── Main component ───────────────────────────────────────────────────────────��\n\nconst BUILT_IN: Record<string, (block: CMSBlock, pageType?: CMSPageType | null) => React.ReactNode> = {\n // Structured page type — content is nested { sectionName: { fieldName: value } }\n '__structured__': (b, pt) => <StructuredBlock block={b} pageType={pt} />,\n heading: (b) => <HeadingBlock block={b} />,\n text: (b) => <TextBlock block={b} />,\n richtext: (b) => <RichTextBlock block={b} />,\n image: (b) => <ImageBlock block={b} />,\n button: (b) => <ButtonBlock block={b} />,\n list: (b) => <ListBlock block={b} />,\n gallery: (b) => <GalleryBlock block={b} />,\n 'pricing-table': (b) => <PricingTableBlock block={b} />,\n hero: (b) => <HeroBlock block={b} />,\n 'hero-section': (b) => <HeroBlock block={b} />,\n cta: (b) => <CTABlock block={b} />,\n faq: (b) => <FAQBlock block={b} />,\n 'team-member': (b) => <TeamMemberBlock block={b} />,\n stats: (b) => <StatsBlock block={b} />,\n testimonial: (b) => <TestimonialBlock block={b} />,\n quote: (b) => <QuoteBlock block={b} />,\n alert: (b) => <AlertBlock block={b} />,\n divider: () => <DividerBlock />,\n spacer: (b) => <SpacerBlock block={b} />,\n video: (b) => <VideoBlock block={b} />,\n 'card-grid': (b) => <CardGridBlock block={b} />,\n timeline: (b) => <TimelineBlock block={b} />,\n 'pricing-card': (b) => <PricingCardBlock block={b} />,\n 'icon-feature': (b) => <IconFeatureBlock block={b} />,\n 'feature-grid': (b) => <FeatureGridBlock block={b} />,\n 'two-column': (b) => <TwoColumnBlock block={b} />,\n 'split-hero': (b) => <SplitHeroBlock block={b} />,\n\n accordion: (b) => <AccordionBlock block={b} />,\n tabs: (b) => <TabsBlock block={b} />,\n columns: (b) => <ColumnsBlock block={b} />,\n container: (b) => <ContainerBlock block={b} />,\n carousel: (b) => <CarouselBlock block={b} />,\n 'product-list': (b) => <ProductListBlock block={b} />,\n}\n\nexport function CMSBlocks({ blocks, pageType, className = '', custom = {} }: CMSBlocksProps) {\n if (!blocks?.length) return null\n\n return (\n <div className={`space-y-8 ${className}`}>\n {blocks.map(block => {\n // 1. Custom renderer takes priority\n if (custom[block.type]) return <React.Fragment key={block.id}>{custom[block.type](block)}</React.Fragment>\n // 2. Built-in renderer\n if (BUILT_IN[block.type]) return <React.Fragment key={block.id}>{BUILT_IN[block.type](block, pageType)}</React.Fragment>\n // 3. Structured section block (from page type sections)\n return <SectionBlock key={block.id} block={block} pageType={pageType} />\n })}\n </div>\n )\n}\n","import React from 'react'\nimport { notFound } from 'next/navigation'\nimport { cookies, draftMode } from 'next/headers'\nimport type { Metadata } from 'next'\nimport { createCMSClient } from '../client'\nimport { CMSBlocks } from '../react/blocks'\n\n// ── Server-side Product List Renderer ─────────────────────────────────────────\n// Renders product-list blocks directly in RSC to avoid client serialization issues\n\n// Resolve a dot-notation path like \"plans[0].price\" from a raw object\nfunction resolvePath(obj: any, path: string): any {\n if (!path) return undefined\n return path.split(/[\\.\\[\\]]+/).filter(Boolean).reduce((acc, key) => acc?.[key], obj)\n}\n\ninterface NormalisedProduct {\n id: string\n name: string\n price: number\n color?: string\n rating?: number\n category?: string\n badge?: string\n description?: string\n ctaUrl?: string\n}\n\ninterface FieldMap {\n fieldTitle?: string\n fieldPrice?: string\n fieldColor?: string\n fieldCategory?: string\n fieldBadge?: string\n fieldDescription?: string\n fieldCtaUrl?: string\n}\n\nfunction normaliseProductServer(raw: Record<string, any>, fm: FieldMap): NormalisedProduct {\n // Resolve using field map if set, otherwise fall back to defaults\n const name = resolvePath(raw, fm.fieldTitle || '') ?? raw.name ?? 'Unnamed'\n const rawPrice = resolvePath(raw, fm.fieldPrice || '') ?? (Array.isArray(raw.plans) ? raw.plans[0]?.price : undefined) ?? raw.price ?? 0\n const color = resolvePath(raw, fm.fieldColor || '') ?? raw.primaryColor ?? raw.color ?? undefined\n const rawCategory = resolvePath(raw, fm.fieldCategory || '') ?? raw.type ?? undefined\n const rawBadge = resolvePath(raw, fm.fieldBadge || '') ?? undefined\n const description = resolvePath(raw, fm.fieldDescription || '') ?? raw.description ?? undefined\n const ctaUrl = resolvePath(raw, fm.fieldCtaUrl || '') ?? raw.url ?? raw.link ?? undefined\n\n // Default badge: course count or duration\n const courseCount = Array.isArray(raw.courses) ? raw.courses.length : undefined\n const badge = rawBadge != null\n ? String(rawBadge)\n : courseCount ? `${courseCount} course${courseCount !== 1 ? 's' : ''}` : (raw.duration ? `${raw.duration} min` : undefined)\n\n const category = rawCategory\n ? String(rawCategory).replace(/-/g, ' ').replace(/\\b\\w/g, (c: string) => c.toUpperCase())\n : undefined\n\n return {\n id: raw._id ?? raw.id ?? String(Math.random()),\n name: String(name),\n price: typeof rawPrice === 'number' ? rawPrice : parseFloat(String(rawPrice)) || 0,\n color: color ? String(color) : undefined,\n rating: raw.rating ?? undefined,\n category,\n badge,\n description: description ? String(description) : undefined,\n ctaUrl: ctaUrl ? String(ctaUrl) : undefined,\n }\n}\n\nfunction ServerProductListBlock({ block }: { block: any }) {\n const cfg = (block.content ?? {}) as any\n const {\n title, subtitle,\n columns = 3, showPrice = true, showRating = true, limit = 6, currency = '$',\n cardStyle = 'color-band',\n ctaLabel = '', ctaUrl: staticCtaUrl = '',\n fieldTitle, fieldPrice, fieldColor, fieldCategory, fieldBadge, fieldDescription, fieldCtaUrl,\n } = cfg\n\n const fm: FieldMap = { fieldTitle, fieldPrice, fieldColor, fieldCategory, fieldBadge, fieldDescription, fieldCtaUrl }\n const cols = parseInt(String(columns), 10)\n const gridCols = cols === 2 ? 'sm:grid-cols-2' : cols === 4 ? 'sm:grid-cols-2 lg:grid-cols-4' : 'sm:grid-cols-2 lg:grid-cols-3'\n\n const rawProducts = Array.isArray(block._resolvedProducts)\n ? block._resolvedProducts\n : (Array.isArray(cfg.prefetchedProducts) ? cfg.prefetchedProducts : [])\n const products = (rawProducts as any[]).map((r) => normaliseProductServer(r, fm)).slice(0, Number(limit))\n\n if (products.length === 0) {\n return (\n <section className=\"py-12\">\n <div className=\"max-w-6xl mx-auto px-4\">\n <div className=\"text-center py-12 border border-dashed border-border rounded-lg bg-muted/10\">\n <p className=\"text-sm text-muted-foreground\">No products available</p>\n </div>\n </div>\n </section>\n )\n }\n\n return (\n <section className=\"py-12\">\n <div className=\"max-w-6xl mx-auto px-4\">\n {(title || subtitle) && (\n <div className=\"text-center mb-8\">\n {title && <h2 className=\"text-2xl md:text-3xl font-semibold tracking-tight text-balance\">{title}</h2>}\n {subtitle && <p className=\"text-muted-foreground mt-2 text-pretty\">{subtitle}</p>}\n </div>\n )}\n <div className={`grid gap-6 grid-cols-1 ${gridCols}`}>\n {products.map((product) => {\n const accentColor = product.color ?? '#6366f1'\n const href = staticCtaUrl || product.ctaUrl\n\n return (\n <div\n key={product.id}\n className={`overflow-hidden group transition-shadow flex flex-col ${\n cardStyle === 'minimal'\n ? 'border-0 shadow-none bg-transparent'\n : 'border rounded-xl hover:shadow-lg bg-card'\n }`}\n >\n {/* Card header — varies by style */}\n {cardStyle === 'color-band' && (\n <div className=\"h-2 w-full flex-shrink-0\" style={{ backgroundColor: accentColor }} />\n )}\n {cardStyle === 'filled-header' && (\n <div className=\"h-20 w-full flex-shrink-0 flex items-end px-5 pb-3\" style={{ backgroundColor: accentColor }}>\n {product.category && (\n <span className=\"text-xs font-semibold text-white/80 uppercase tracking-wider\">{product.category}</span>\n )}\n </div>\n )}\n\n <div className=\"p-5 flex flex-col gap-3 flex-1\">\n {/* Badges row — only for non-filled-header */}\n {cardStyle !== 'filled-header' && (product.category || product.badge) && (\n <div className=\"flex items-center gap-2 flex-wrap\">\n {product.category && (\n <span\n className=\"text-xs px-2 py-0.5 rounded-full font-medium text-white\"\n style={{ backgroundColor: accentColor }}\n >\n {product.category}\n </span>\n )}\n {product.badge && (\n <span className=\"text-xs px-2 py-0.5 rounded-full bg-muted text-muted-foreground\">{product.badge}</span>\n )}\n </div>\n )}\n {/* Badge for filled-header */}\n {cardStyle === 'filled-header' && product.badge && (\n <span className=\"text-xs px-2 py-0.5 rounded-full bg-muted text-muted-foreground self-start\">{product.badge}</span>\n )}\n\n <h3 className=\"font-semibold text-base line-clamp-2\">{product.name}</h3>\n\n {product.description && (\n <p className=\"text-xs text-muted-foreground line-clamp-2\">{product.description}</p>\n )}\n\n <div className=\"mt-auto pt-3 border-t border-border flex items-center justify-between gap-3\">\n <div className=\"flex items-center gap-3\">\n {showPrice && product.price > 0 && (\n <span className=\"font-bold text-lg\">{product.price.toFixed(2)} {currency}</span>\n )}\n {showRating && product.rating && (\n <div className=\"flex items-center gap-1 text-sm text-muted-foreground\">\n <svg className=\"w-3.5 h-3.5 fill-yellow-400 text-yellow-400\" viewBox=\"0 0 24 24\">\n <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"/>\n </svg>\n <span>{product.rating}</span>\n </div>\n )}\n </div>\n {ctaLabel && (\n <a\n href={href || '#'}\n className=\"text-xs font-semibold px-3 py-1.5 rounded-lg text-white transition-opacity hover:opacity-90 flex-shrink-0\"\n style={{ backgroundColor: accentColor }}\n >\n {ctaLabel}\n </a>\n )}\n </div>\n </div>\n </div>\n )\n })}\n </div>\n </div>\n </section>\n )\n}\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction getSD(doc: any) {\n const structuredBlock = Array.isArray(doc?.blocks) && doc.blocks[0]?.type === '__structured__' ? doc.blocks[0].content : null\n return doc?.sectionData ?? structuredBlock ?? null\n}\n\n// ── CMS Header ────────────────────────────────────────────────────────────────\n\nfunction CMSHeader({ nav }: { nav: any | null }) {\n const sd = getSD(nav)\n if (!sd) return null\n\n const logoUrl = sd.logo_url?.trim() || ''\n const logoAlt = sd.logo_alt?.trim() || ''\n const items: any[] = Array.isArray(sd.items) ? sd.items : []\n\n if (!logoUrl && !logoAlt && items.length === 0) return null\n\n const links = items.filter((i: any) => i.type === 'link' || i.type === 'dropdown')\n const buttons = items.filter((i: any) => i.type === 'button')\n\n const btnBase: React.CSSProperties = { textDecoration: 'none', padding: '0.4rem 1rem', borderRadius: '6px', fontWeight: 600, fontSize: '0.875rem', whiteSpace: 'nowrap' as const, transition: 'opacity 0.15s' }\n const btnVariant = (v: string): React.CSSProperties => ({\n primary: { ...btnBase, background: 'var(--foreground, #111)', color: '#fff', border: '1px solid transparent' },\n outline: { ...btnBase, background: 'transparent', color: 'var(--foreground, #111)', border: '1px solid var(--border, #e5e7eb)' },\n ghost: { ...btnBase, background: 'transparent', color: 'var(--muted-foreground, #6b7280)', border: 'none', fontWeight: 500 },\n }[v] ?? btnBase)\n\n return (\n <header style={{ position: 'sticky', top: 0, zIndex: 50, width: '100%', borderBottom: '1px solid var(--border, #e5e7eb)', background: 'rgba(255,255,255,0.97)', backdropFilter: 'blur(8px)', WebkitBackdropFilter: 'blur(8px)' }}>\n <div style={{ maxWidth: '1200px', margin: '0 auto', padding: '0 1.5rem', height: '64px', display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: '2rem' }}>\n {/* Logo */}\n <a href=\"/\" style={{ display: 'flex', alignItems: 'center', gap: '0.5rem', textDecoration: 'none', flexShrink: 0 }}>\n {logoUrl\n ? <img src={logoUrl} alt={logoAlt || 'Logo'} style={{ height: '32px', width: 'auto', display: 'block' }} />\n : <span style={{ fontWeight: 700, fontSize: '1.125rem', color: 'var(--foreground, #111)' }}>{logoAlt}</span>}\n </a>\n {/* Center nav links */}\n {links.length > 0 && (\n <nav style={{ display: 'flex', alignItems: 'center', gap: '1.75rem', flex: 1 }}>\n {links.map((item: any) => (\n <a key={item.id} href={item.url || '#'}\n target={item.openInNewTab ? '_blank' : undefined}\n rel={item.openInNewTab ? 'noopener noreferrer' : undefined}\n style={{ fontSize: '0.9rem', color: 'var(--muted-foreground, #6b7280)', textDecoration: 'none', fontWeight: 500 }}>\n {item.label}\n </a>\n ))}\n </nav>\n )}\n {/* CTA buttons */}\n {buttons.length > 0 && (\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.625rem', flexShrink: 0 }}>\n {buttons.map((item: any) => (\n <a key={item.id} href={item.url || '#'}\n target={item.openInNewTab ? '_blank' : undefined}\n rel={item.openInNewTab ? 'noopener noreferrer' : undefined}\n style={btnVariant(item.variant || 'ghost')}>\n {item.label}\n </a>\n ))}\n </div>\n )}\n </div>\n </header>\n )\n}\n\n// ── CMS Footer ────────────────────────────────────────────────────────────────\n\nconst SOCIAL_ICONS: { key: string; label: string; d: string }[] = [\n { key: 'facebook', label: 'Facebook', d: 'M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z' },\n { key: 'twitter', label: 'X', d: 'M18 6L6 18M6 6l12 12' },\n { key: 'instagram', label: 'Instagram', d: 'M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37zm1.5-4.87h.01M6.5 2h11A4.5 4.5 0 0 1 22 6.5v11A4.5 4.5 0 0 1 17.5 22h-11A4.5 4.5 0 0 1 2 17.5v-11A4.5 4.5 0 0 1 6.5 2z' },\n { key: 'linkedin', label: 'LinkedIn', d: 'M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-4 0v7h-4v-7a6 6 0 0 1 6-6zM2 9h4v12H2zm2-3a2 2 0 1 1 0-4 2 2 0 0 1 0 4z' },\n { key: 'youtube', label: 'YouTube', d: 'M22.54 6.42a2.78 2.78 0 0 0-1.94-1.96C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 1.96A29 29 0 0 0 1 12a29 29 0 0 0 .46 5.58 2.78 2.78 0 0 0 1.94 1.96C5.12 20 12 20 12 20s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-1.96A29 29 0 0 0 23 12a29 29 0 0 0-.46-5.58zM9.75 15.02V8.98L15.5 12l-5.75 3.02z' },\n]\n\nfunction renderFooterSection(sec: any, mutedLink: React.CSSProperties) {\n if (sec.type === 'brand') {\n if (!sec.logo_url && !sec.tagline) return null\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n {sec.logo_url && <img src={sec.logo_url} alt=\"Logo\" style={{ height: '32px', width: 'auto', objectFit: 'contain' }} />}\n {sec.tagline && <p style={{ fontSize: '0.875rem', color: 'var(--muted-foreground, #6b7280)', lineHeight: 1.6, margin: 0 }}>{sec.tagline}</p>}\n </div>\n )\n }\n if (sec.type === 'links') {\n const links = (sec.links || []).filter((l: any) => l.label)\n if (!links.length && !sec.title) return null\n return (\n <div>\n {sec.title && <h4 style={{ fontWeight: 600, fontSize: '0.875rem', margin: '0 0 0.875rem', color: 'var(--foreground, #111)' }}>{sec.title}</h4>}\n <ul style={{ listStyle: 'none', margin: 0, padding: 0, display: 'flex', flexDirection: 'column', gap: '0.5rem' }}>\n {links.map((link: any) => (\n <li key={link.id || link.label}>\n <a href={link.url || '#'} target={link.external ? '_blank' : undefined}\n rel={link.external ? 'noopener noreferrer' : undefined} style={mutedLink}>\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n )\n }\n if (sec.type === 'contact') {\n if (!sec.email && !sec.phone && !sec.address) return null\n return (\n <div>\n {sec.title && <h4 style={{ fontWeight: 600, fontSize: '0.875rem', margin: '0 0 0.875rem', color: 'var(--foreground, #111)' }}>{sec.title}</h4>}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.4rem' }}>\n {sec.email && <a href={`mailto:${sec.email}`} style={mutedLink}>{sec.email}</a>}\n {sec.phone && <a href={`tel:${sec.phone}`} style={mutedLink}>{sec.phone}</a>}\n {sec.address && <p style={{ ...mutedLink, whiteSpace: 'pre-line', margin: 0 }}>{sec.address}</p>}\n </div>\n </div>\n )\n }\n if (sec.type === 'social') {\n const active = SOCIAL_ICONS.filter(s => sec[s.key]?.trim())\n if (!active.length) return null\n return (\n <div>\n {sec.title && <h4 style={{ fontWeight: 600, fontSize: '0.875rem', margin: '0 0 0.875rem', color: 'var(--foreground, #111)' }}>{sec.title}</h4>}\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '0.625rem' }}>\n {active.map(s => (\n <a key={s.key} href={sec[s.key]} target=\"_blank\" rel=\"noopener noreferrer\" aria-label={s.label}\n style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', width: '34px', height: '34px', borderRadius: '8px', border: '1px solid var(--border, #e5e7eb)', color: 'var(--muted-foreground, #6b7280)', textDecoration: 'none' }}>\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d={s.d} />\n </svg>\n </a>\n ))}\n </div>\n </div>\n )\n }\n return null\n}\n\nfunction CMSFooter({ footer }: { footer: any | null }) {\n const sd = getSD(footer)\n if (!sd) return null\n\n // New sections-based format\n const sections: any[] = Array.isArray(sd.sections) ? sd.sections : []\n\n // Legacy format fallback: convert old {brand,columns,contact,social,legal} to virtual sections\n // Trigger when sd.sections is absent/empty but any legacy key exists\n const isLegacy = sections.length === 0 && ('brand' in sd || 'columns' in sd || 'contact' in sd || 'social' in sd || 'legal' in sd)\n let renderSections = sections\n if (isLegacy) {\n renderSections = []\n if (sd.brand?.logo_url || sd.brand?.tagline) renderSections.push({ id: 'b', type: 'brand', ...sd.brand })\n ;(Array.isArray(sd.columns) ? sd.columns : []).forEach((col: any) =>\n renderSections.push({ id: col.id || col.title || Math.random(), type: 'links', title: col.title, links: col.links || [] }))\n if (sd.contact?.email || sd.contact?.phone || sd.contact?.address) renderSections.push({ id: 'c', type: 'contact', ...sd.contact })\n if (sd.social && Object.values(sd.social).some(Boolean)) renderSections.push({ id: 's', type: 'social', ...sd.social })\n }\n\n // Find legal — check sections array first, then legacy sd.legal\n const legalSec = sections.find((s: any) => s.type === 'legal') ?? (isLegacy ? sd.legal ?? null : null)\n const mainSections = renderSections.filter((s: any) => s.type !== 'legal')\n\n // Nothing to render\n const copyright = legalSec?.copyright || ''\n const legalLinks: any[] = Array.isArray(legalSec?.legal_links) ? legalSec.legal_links\n : Array.isArray(legalSec?.links) ? legalSec.links : []\n const hasBottom = !!(copyright || legalLinks.filter((l: any) => l.label).length)\n\n if (mainSections.length === 0 && !hasBottom) return null\n\n const gridCount = mainSections.length\n const gridCols = gridCount <= 1 ? '1fr' : gridCount === 2 ? 'repeat(2,1fr)' : gridCount === 3 ? 'repeat(3,1fr)' : 'repeat(4,1fr)'\n const mutedLink: React.CSSProperties = { fontSize: '0.875rem', color: 'var(--muted-foreground, #6b7280)', textDecoration: 'none' }\n\n return (\n <footer style={{ borderTop: '1px solid var(--border, #e5e7eb)', background: 'var(--muted, #f9fafb)', marginTop: '4rem' }}>\n <div style={{ maxWidth: '1200px', margin: '0 auto', padding: '3rem 1.5rem 1.5rem' }}>\n\n {mainSections.length > 0 && (\n <div style={{ display: 'grid', gridTemplateColumns: gridCols, gap: '2.5rem', marginBottom: hasBottom ? '2.5rem' : 0 }}>\n {mainSections.map((sec: any) => {\n const rendered = renderFooterSection(sec, mutedLink)\n return rendered ? <div key={sec.id}>{rendered}</div> : null\n })}\n </div>\n )}\n\n {hasBottom && (\n <div style={{ borderTop: '1px solid var(--border, #e5e7eb)', paddingTop: '1.25rem', display: 'flex', flexWrap: 'wrap', alignItems: 'center', justifyContent: 'space-between', gap: '1rem' }}>\n {copyright && <p style={{ fontSize: '0.8rem', color: 'var(--muted-foreground, #6b7280)', margin: 0 }}>{copyright}</p>}\n {legalLinks.filter((l: any) => l.label).length > 0 && (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '1.25rem' }}>\n {legalLinks.filter((l: any) => l.label).map((link: any) => (\n <a key={link.id || link.label} href={link.url || '#'}\n target={link.external ? '_blank' : undefined}\n rel={link.external ? 'noopener noreferrer' : undefined}\n style={{ fontSize: '0.8rem', color: 'var(--muted-foreground, #6b7280)', textDecoration: 'none' }}>\n {link.label}\n </a>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n </footer>\n )\n}\n\nexport interface CMSCatchAllParams {\n slug: string[]\n}\n\nconst client = createCMSClient()\n\n// ── Metadata ──────────────────────────────────────────────────────────────────\n\nexport async function generateMetadata(\n { params }: { params: Promise<CMSCatchAllParams> }\n): Promise<Metadata> {\n const { slug } = await params\n const page = await client.getPage(slug.join('/'))\n if (!page) return { title: 'Not Found' }\n return {\n title: page.seo?.title || page.title,\n description: page.seo?.description || '',\n keywords: page.seo?.keywords?.join(', '),\n robots: page.seo?.noIndex ? 'noindex,nofollow' : undefined,\n openGraph: {\n title: page.seo?.title || page.title,\n description: page.seo?.description,\n images: page.seo?.ogImage ? [page.seo.ogImage] : undefined,\n },\n }\n}\n\n// ── Page ──────────────────────────────────────────────────────────────────────\n\n// Fetch products for a product-list block directly (no serialization boundary)\nasync function resolveProductListBlocks(blocks: any[]): Promise<any[]> {\n return Promise.all(blocks.map(async (block) => {\n if (block.type !== 'product-list') return block\n const cfg = block.content ?? block.data ?? {}\n // Already have prefetched products — use them\n if (Array.isArray(cfg.prefetchedProducts) && cfg.prefetchedProducts.length > 0) return block\n const endpoint = cfg.endpoint\n if (!endpoint) return block\n try {\n const headers: Record<string, string> = { 'Accept': 'application/json' }\n const token = cfg.token ?? cfg.apiToken\n if (token) headers['Authorization'] = `Bearer ${token}`\n const res = await fetch(endpoint, { headers, next: { revalidate: cfg.refreshInterval || 300 } })\n if (!res.ok) return block\n const json = await res.json()\n const items: any[] = Array.isArray(json) ? json : (json.products ?? json.data ?? json.items ?? json.result ?? [])\n // Inject products directly into block so ServerProductListBlock can read them\n return { ...block, _resolvedProducts: items }\n } catch {\n return block\n }\n }))\n}\n\nexport default async function CMSCatchAllPage(\n { params }: { params: Promise<CMSCatchAllParams> }\n) {\n const { slug } = await params\n const slugStr = slug.join('/')\n const draft = await draftMode()\n const cookieStore = await cookies()\n\n let page = null\n let isPreview = false\n\n if (draft.isEnabled) {\n const token = cookieStore.get('cms_preview_token')?.value\n if (token) {\n page = await client.getPreviewPage(token)\n isPreview = !!page\n }\n if (!page) page = await client.getPage(slugStr)\n } else {\n page = await client.getPage(slugStr)\n }\n\n if (!page) notFound()\n\n // Fetch page type + globals in parallel\n const [pageType, globals] = await Promise.all([\n page.pageTypeId ? client.getPageType(page.pageTypeId) : Promise.resolve(null),\n client.getGlobals().catch(() => ({ navigation: null, footer: null })),\n ])\n\n // Resolve product-list blocks with fresh data fetched here in the RSC\n const resolvedBlocks = await resolveProductListBlocks(page.blocks ?? [])\n\n return (\n <div className=\"min-h-screen bg-background flex flex-col\">\n <CMSHeader nav={globals?.navigation} />\n {isPreview && (\n <div className=\"sticky top-0 z-50 flex items-center justify-between px-4 py-2.5 bg-amber-500 text-white text-sm font-medium shadow\">\n <div className=\"flex items-center gap-2\">\n <span>Draft Preview</span>\n <span className=\"opacity-60 mx-1\">·</span>\n <span className=\"opacity-75 capitalize\">{page.status}</span>\n <span className=\"opacity-60 mx-1\">·</span>\n <span className=\"opacity-75 font-normal\">/{page.slug}</span>\n </div>\n <a\n href=\"/api/cms-preview/exit\"\n className=\"px-3 py-1 rounded bg-white/20 hover:bg-white/30 transition-colors text-xs\"\n >\n Exit Preview\n </a>\n </div>\n )}\n\n <article className=\"max-w-5xl mx-auto px-6 py-12\">\n {resolvedBlocks.length > 0 ? (\n <>\n {resolvedBlocks.map((block: any, idx: number) =>\n block.type === 'product-list' ? (\n <ServerProductListBlock key={block.id ?? idx} block={block} />\n ) : null\n )}\n <CMSBlocks blocks={resolvedBlocks.filter((b: any) => b.type !== 'product-list')} pageType={pageType} />\n </>\n ) : (\n <div className=\"flex flex-col items-center justify-center py-24 text-muted-foreground border-2 border-dashed border-border rounded-xl\">\n <p className=\"text-sm\">No content added yet.</p>\n {isPreview && (\n <p className=\"text-xs mt-1 opacity-60\">Add blocks in the CMS editor to see them here.</p>\n )}\n </div>\n )}\n </article>\n <CMSFooter footer={globals?.footer} />\n </div>\n )\n}\n\n\n","import { NextRequest, NextResponse } from 'next/server'\n\n/**\n * dynamicProxyGET — server-side proxy for dynamic block API calls.\n *\n * Usage in external app:\n * // app/api/cms-dynamic-proxy/route.ts\n * export { dynamicProxyGET as GET } from '@sprintup-cms/sdk/next'\n *\n * The ProductListBlock calls this proxy to avoid CORS issues when fetching\n * from external APIs (e.g. iRead, Shopify, etc.).\n *\n * Usage: GET /api/cms-dynamic-proxy?url=https://external-api.com/products\n */\nexport async function dynamicProxyGET(req: NextRequest): Promise<NextResponse> {\n const url = req.nextUrl.searchParams.get('url')\n if (!url) {\n return NextResponse.json({ error: 'Missing url parameter' }, { status: 400 })\n }\n\n // Only allow http(s) URLs\n if (!url.startsWith('http://') && !url.startsWith('https://')) {\n return NextResponse.json({ error: 'Invalid URL' }, { status: 400 })\n }\n\n try {\n const res = await fetch(url, {\n headers: { 'Accept': 'application/json' },\n next: { revalidate: 300 }, // cache for 5 minutes\n })\n const data = await res.json()\n return NextResponse.json(data, {\n status: res.status,\n headers: { 'Cache-Control': 'public, s-maxage=300, stale-while-revalidate=60' },\n })\n } catch (err: any) {\n return NextResponse.json({ error: err.message }, { status: 502 })\n }\n}\n"]}
|