@clay-ds/react 0.3.0 → 0.3.2

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/index.d.ts CHANGED
@@ -389,6 +389,17 @@ export declare const FOOTER_ASSETS: {
389
389
  */
390
390
  export declare const FOOTER_DEFAULTS: Omit<FooterSectionProps, 'logo'>;
391
391
 
392
+ /**
393
+ * Canonical content for the compact (`short`) footer variant.
394
+ *
395
+ * Reuses the full footer's shared bottom bar (social, badges, legal,
396
+ * language, accessibility) and only swaps the navigation for a single
397
+ * row of two-link columns. Spread it the same way as FOOTER_DEFAULTS:
398
+ *
399
+ * <FooterSection {...FOOTER_SHORT_DEFAULTS} logo={{ src, alt, href }} />
400
+ */
401
+ export declare const FOOTER_SHORT_DEFAULTS: Omit<FooterSectionProps, 'logo'>;
402
+
392
403
  export declare interface FooterBadge {
393
404
  src: string;
394
405
  alt: string;
@@ -427,6 +438,12 @@ export declare interface FooterNavLink {
427
438
  export declare const FooterSection: ForwardRefExoticComponent<FooterSectionProps & RefAttributes<HTMLElement>>;
428
439
 
429
440
  export declare interface FooterSectionProps extends Omit<HTMLAttributes<HTMLElement>, 'children'> {
441
+ /**
442
+ * Layout variant.
443
+ * - `full` (default): the multi-column mega footer.
444
+ * - `short`: a compact footer with the logo + a single row of link columns.
445
+ */
446
+ variant?: FooterVariant;
430
447
  logo?: {
431
448
  src: string;
432
449
  alt: string;
@@ -453,6 +470,8 @@ export declare interface FooterSocialLink {
453
470
  icon: ReactNode;
454
471
  }
455
472
 
473
+ export declare type FooterVariant = 'full' | 'short';
474
+
456
475
  export declare interface FormField {
457
476
  name: string;
458
477
  placeholder: string;
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
2
  import { forwardRef, useId, useState } from "react";
3
- import { M as MediaSlot, r as Tag } from "./footerDefaults-Dx94Jc_F.js";
4
- import { B, a, C, b, c, d, e, f, F, g, h, i, j, H, I, k, l, N, m, S, n, T, o, p, q, s, t, u, v } from "./footerDefaults-Dx94Jc_F.js";
3
+ import { M as MediaSlot, s as Tag } from "./footerDefaults-DRDmvQb8.js";
4
+ import { B, a, C, b, c, d, e, f, F, g, h, i, j, k, H, I, l, m, N, n, S, o, T, p, q, r, t, u, v, w } from "./footerDefaults-DRDmvQb8.js";
5
5
  import { iconSvgMap } from "./icons.js";
6
6
  const icon = "_icon_171j1_2";
7
7
  const styles$c = {
@@ -1301,9 +1301,10 @@ export {
1301
1301
  CustomerStoryCard,
1302
1302
  F as FOOTER_ASSETS,
1303
1303
  g as FOOTER_DEFAULTS,
1304
- h as FaqSection,
1305
- i as FeaturesSection,
1306
- j as FooterSection,
1304
+ h as FOOTER_SHORT_DEFAULTS,
1305
+ i as FaqSection,
1306
+ j as FeaturesSection,
1307
+ k as FooterSection,
1307
1308
  G2Icon,
1308
1309
  G2_BADGES,
1309
1310
  Grid,
@@ -1313,13 +1314,13 @@ export {
1313
1314
  ImageCard,
1314
1315
  Input,
1315
1316
  I as IntegrationCard,
1316
- k as IntegrationLogo,
1317
- l as Integrations,
1317
+ l as IntegrationLogo,
1318
+ m as Integrations,
1318
1319
  MarketingCta,
1319
1320
  MediaPrimitive,
1320
1321
  MediaSlot,
1321
1322
  N as NavbarMenu,
1322
- m as NumbersSection,
1323
+ n as NumbersSection,
1323
1324
  ProductLogo,
1324
1325
  SHAPE_NAMES,
1325
1326
  SHAPE_PATHS,
@@ -1328,19 +1329,19 @@ export {
1328
1329
  Shapes,
1329
1330
  SiteFooter,
1330
1331
  S as SliderArrow,
1331
- n as SliderDots,
1332
+ o as SliderDots,
1332
1333
  T as Tab,
1333
- o as TabList,
1334
- p as TabPanel,
1335
- q as Tabs,
1334
+ p as TabList,
1335
+ q as TabPanel,
1336
+ r as Tabs,
1336
1337
  TabsShellMuted,
1337
1338
  TabsShellStroke,
1338
1339
  Tag,
1339
- s as TestimonialsSection,
1340
+ t as TestimonialsSection,
1340
1341
  Toggle,
1341
- t as TrustBadge,
1342
- u as TrustBentoSection,
1343
- v as TrustSection,
1342
+ u as TrustBadge,
1343
+ v as TrustBentoSection,
1344
+ w as TrustSection,
1344
1345
  WIDE_SHAPES,
1345
1346
  WebLayout
1346
1347
  };
package/dist/render.cjs CHANGED
@@ -9,7 +9,7 @@ const node_url = require("node:url");
9
9
  const node_module = require("node:module");
10
10
  const logos_resolve = require("./logos/resolve.cjs");
11
11
  const pageSpec = require("./page-spec.cjs");
12
- const footerDefaults = require("./footerDefaults-BILm5CMK.cjs");
12
+ const footerDefaults = require("./footerDefaults-C-9-hOSt.cjs");
13
13
  var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null;
14
14
  const __dirname$1 = node_path.dirname(node_url.fileURLToPath(typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("render.cjs", document.baseURI).href));
15
15
  const require$1 = node_module.createRequire(typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("render.cjs", document.baseURI).href);
@@ -297,9 +297,11 @@ function renderPageSpec(input) {
297
297
  return /* @__PURE__ */ jsxRuntime.jsx(React.Fragment, { children: render(props) }, i);
298
298
  });
299
299
  const css = loadCss();
300
+ const navLogoSrc = resolveLogoSrc("products/monday-com/Layout=Master, Type Color=Black, Com=On") ?? void 0;
301
+ const navActions = /* @__PURE__ */ jsxRuntime.jsx("a", { href: "#", style: { display: "contents" }, children: /* @__PURE__ */ jsxRuntime.jsx(footerDefaults.Button, { buttonStyle: "primary", size: "regular", children: "Get started" }) });
300
302
  const bodyHtml = server.renderToStaticMarkup(
301
303
  /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
302
- /* @__PURE__ */ jsxRuntime.jsx(footerDefaults.NavbarMenu, {}),
304
+ /* @__PURE__ */ jsxRuntime.jsx(footerDefaults.NavbarMenu, { logoSrc: navLogoSrc, actions: navActions }),
303
305
  sectionElements
304
306
  ] })
305
307
  );
@@ -1 +1 @@
1
- {"version":3,"file":"render.cjs","sources":["../src/ssr/renderPageSpec.tsx"],"sourcesContent":["/**\n * renderPageSpec — maps a typed PageSpec to real Clay React components and\n * returns self-contained static HTML + CSS.\n *\n * Node-safe (no import.meta.glob, no Vite-only APIs).\n * v1 is static-only (renderToStaticMarkup); no hydration.\n *\n * Naming skew resolved here (not in the public PageSpec contract):\n * IntegrationsSection → exported `Integrations` component\n * TrustSection layout=\"bento\" → TrustSection with layout=\"bento\"\n */\n\nimport type { ReactNode } from 'react'\nimport { Fragment } from 'react'\nimport { renderToStaticMarkup } from 'react-dom/server'\nimport { readFileSync } from 'node:fs'\nimport { join, dirname } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { createRequire } from 'node:module'\n\nimport {\n Button,\n CustomerLogo,\n CustomerLogoSection,\n HeaderSection,\n FeaturesSection,\n CardsSection,\n TestimonialsSection,\n FaqSection,\n BulletsSection,\n CtaSection,\n FooterSection,\n FOOTER_DEFAULTS,\n ContactSection,\n TrustSection,\n NumbersSection,\n Integrations,\n NavbarMenu,\n MediaSlot,\n} from '../index'\n\nimport { logoSvg } from '../logos/resolve'\nimport { PageSpec, sectionSchemas, type SectionType } from '../page-spec/index'\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\nconst require = createRequire(import.meta.url)\n\n// ── helpers ─────────────────────────────────────────────────────────────────\n\nfunction svgDataUrl(svg: string): string {\n return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`\n}\n\nfunction resolveLogoSrc(key: string): string | null {\n const svg = logoSvg(key)\n return svg ? svgDataUrl(svg) : null\n}\n\nconst BulletDefaultIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"10\" cy=\"10\" r=\"6\" fill=\"currentColor\" />\n </svg>\n)\n\nfunction makeCtas(ctas: { label: string; href: string }[] | undefined): ReactNode {\n if (!ctas?.length) return undefined\n return (\n <>\n {ctas.map((c, i) => (\n <a key={i} href={c.href} style={{ display: 'contents' }}>\n {/* Adapter sets semantics (first CTA = primary) only; color is Clay's to decide\n (Button defaults to the brand color). Never hard-code a color here. */}\n <Button buttonStyle={i === 0 ? 'primary' : 'secondary'} size=\"regular\">\n {c.label}\n </Button>\n </a>\n ))}\n </>\n )\n}\n\nfunction makeMedia(\n m:\n | {\n src: string\n type?: 'image' | 'video'\n alt?: string\n fit?: 'contain' | 'cover' | 'fill'\n aspectRatio?: string\n }\n | undefined\n): ReactNode {\n if (!m?.src) return undefined\n const isVideo = m.type === 'video'\n return (\n <MediaSlot\n type={isVideo ? 'video' : 'image'}\n src={m.src}\n alt={m.alt}\n fit={m.fit}\n aspectRatio={m.aspectRatio}\n {...(isVideo ? { autoPlay: true, loop: true } : {})}\n />\n )\n}\n\n// ── CSS loader (cached) ──────────────────────────────────────────────────────\n\nlet _css: string | null = null\n\nfunction loadCss(): string {\n if (_css) return _css\n const tokensCssPath = require.resolve('@clay-ds/tokens/css')\n const tokensCss = readFileSync(tokensCssPath, 'utf8')\n const componentCss = readFileSync(join(__dirname, 'index.css'), 'utf8')\n _css = tokensCss + '\\n' + componentCss\n return _css\n}\n\n// ── section registry ─────────────────────────────────────────────────────────\n\ntype SectionRenderers = {\n [K in SectionType]: (props: import('zod').infer<(typeof sectionSchemas)[K]>) => ReactNode\n}\n\nconst SECTION_REGISTRY: SectionRenderers = {\n HeaderSection(data) {\n const logos = data.logoKeys?.length ? (\n <>\n {data.logoKeys.map((key, i) => {\n const src = resolveLogoSrc(key)\n if (!src) return null\n const name = key.split('/').pop() ?? key\n return <CustomerLogo key={i} src={src} name={name} placement=\"web\" />\n })}\n </>\n ) : undefined\n return (\n <HeaderSection\n layout={data.layout}\n heading={data.heading}\n description={data.description}\n actionCaption={data.actionCaption}\n actions={makeCtas(data.ctas)}\n logos={logos}\n media={makeMedia(data.media)}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n CustomerLogoSection(data) {\n // Drop unresolved keys rather than emit a broken <img src=\"\">.\n const logos = data.logoKeys\n .map((key) => {\n const src = resolveLogoSrc(key)\n if (!src) return null\n return { name: key.split('/').pop() ?? key, srcBlack: src, srcColored: src }\n })\n .filter((l): l is { name: string; srcBlack: string; srcColored: string } => l !== null)\n return (\n <CustomerLogoSection\n heading={data.heading}\n logos={logos}\n colorMode={data.colorMode}\n />\n )\n },\n\n FeaturesSection(data) {\n const items = data.items.map((it) => ({\n ...it,\n media: makeMedia(it.media),\n }))\n return (\n <FeaturesSection\n layout={data.layout}\n sectionHeading={data.sectionHeading}\n sectionTopic={data.sectionTopic}\n sectionDescription={data.sectionDescription}\n items={items}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n CardsSection(data) {\n const cards = data.cards?.map((c) => ({\n ...c,\n media: makeMedia(c.media),\n }))\n return (\n <CardsSection\n layout={data.layout}\n tagline={data.tagline}\n sectionHeading={data.sectionHeading}\n sectionDescription={data.sectionDescription}\n cards={cards}\n revealCards={data.revealCards}\n valueCards={data.valueCards}\n iconLinkCards={data.iconLinkCards}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n TestimonialsSection(data) {\n const cards = data.cards?.map((c) => ({\n quote: c.quote,\n authorName: c.authorName,\n authorRole: c.authorRole,\n stars: c.stars,\n stat: c.stat,\n statLabel: c.statLabel,\n ctaLabel: c.ctaLabel,\n ctaHref: c.ctaHref,\n logo: c.logoKey\n ? (() => {\n const src = resolveLogoSrc(c.logoKey)\n if (!src) return undefined\n return (\n <CustomerLogo\n src={src}\n name={c.logoKey.split('/').pop() ?? c.logoKey}\n placement=\"marketing\"\n />\n )\n })()\n : undefined,\n }))\n return (\n <TestimonialsSection\n layout={data.layout}\n heading={data.heading}\n description={data.description}\n miniTitle={data.miniTitle}\n ctaLabel={data.ctaLabel}\n ctaHref={data.ctaHref}\n cards={cards}\n carouselCards={data.carouselCards}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n FaqSection(data) {\n return (\n <FaqSection\n layout={data.layout}\n heading={data.heading}\n items={data.items}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n BulletsSection(data) {\n const action = data.cta ? (\n <a href={data.cta.href} style={{ display: 'contents' }}>\n <Button buttonStyle=\"secondary\" size=\"regular\">\n {data.cta.label}\n </Button>\n </a>\n ) : undefined\n return (\n <BulletsSection\n layout={data.layout}\n miniTitle={data.miniTitle}\n heading={data.heading}\n description={data.description}\n columns={data.columns}\n items={data.items.map((item) => ({\n icon: <BulletDefaultIcon />,\n title: item.title,\n description: item.description,\n }))}\n action={action}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n CtaSection(data) {\n return (\n <CtaSection\n layout={data.layout}\n heading={data.heading}\n description={data.description}\n actions={makeCtas(data.ctas)}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n FooterSection(data) {\n const logoSrcValue = data.logoKey ? resolveLogoSrc(data.logoKey) : undefined\n // FOOTER_DEFAULTS deliberately omits logo (consumers supply per-brand).\n // Only pass logo when we have a resolvable src — never an empty string,\n // which would render a broken <img> and trigger a React warning.\n const logo = logoSrcValue\n ? { src: logoSrcValue, alt: data.logoAlt ?? 'monday.com', href: '/' }\n : undefined\n return <FooterSection {...FOOTER_DEFAULTS} logo={logo} />\n },\n\n ContactSection(data) {\n const logos = data.logos\n ?.map((item) => {\n const src = resolveLogoSrc(item.key)\n return src ? { src, name: item.name } : null\n })\n .filter((l): l is { src: string; name: string } => l !== null)\n return (\n <ContactSection\n heading={data.heading}\n description={data.description}\n ratingValue={data.ratingValue}\n ratingLabel={data.ratingLabel}\n formTitle={data.formTitle}\n submitLabel={data.submitLabel}\n fields={data.fields}\n logos={logos}\n badges={data.badges}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n TrustSection(data) {\n return (\n <TrustSection\n layout={data.layout}\n heading={data.heading}\n ratingValue={data.ratingValue}\n ratingOut={data.ratingOut}\n ratingLabel={data.ratingLabel}\n badges={data.badges}\n ctaLabel={data.ctaLabel}\n ctaHref={data.ctaHref}\n topicLabel={data.topicLabel}\n securityTitle={data.securityTitle}\n securityDescription={data.securityDescription}\n securityLinkLabel={data.securityLinkLabel}\n securityLinkHref={data.securityLinkHref}\n complianceLogos={data.complianceLogos}\n statCards={data.statCards}\n />\n )\n },\n\n NumbersSection(data) {\n return (\n <NumbersSection\n layout={data.layout}\n heading={data.heading}\n items={data.items}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n IntegrationsSection(data) {\n // naming skew: IntegrationsSection (agent-facing) → Integrations (React export)\n const integrations = data.integrations\n ?.map((item) => {\n const src =\n resolveLogoSrc(item.key) ??\n resolveLogoSrc(`integrations/${item.name.toLowerCase()}`)\n return src ? { name: item.name, src } : null\n })\n .filter((i): i is { name: string; src: string } => i !== null)\n return (\n <Integrations\n layout={data.layout}\n heading={data.heading}\n description={data.description}\n integrations={integrations}\n statValue={data.statValue}\n statLabel={data.statLabel}\n ctaLabel={data.ctaLabel}\n ctaHref={data.ctaHref}\n />\n )\n },\n}\n\n// ── public API ───────────────────────────────────────────────────────────────\n\nexport interface RenderResult {\n /** Complete self-contained HTML document */\n html: string\n /** Combined CSS (tokens + component styles) for reference */\n css: string\n}\n\n/**\n * Parse a PageSpec and render it to static HTML using real Clay React components.\n * Throws a ZodError on invalid input.\n */\nexport function renderPageSpec(input: unknown): RenderResult {\n const spec = PageSpec.parse(input)\n\n const sectionElements = spec.sections.map((section, i) => {\n const schema = sectionSchemas[section.type as SectionType]\n const props = schema.parse(section.props)\n const render = SECTION_REGISTRY[section.type as SectionType]\n return <Fragment key={i}>{render(props as never)}</Fragment>\n })\n\n const css = loadCss()\n\n const bodyHtml = renderToStaticMarkup(\n <>\n <NavbarMenu />\n {sectionElements}\n </>\n )\n\n const html = `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<title>${spec.brand ?? 'Landing Page'}</title>\n<style>${css}</style>\n</head>\n<body>\n${bodyHtml}\n</body>\n</html>`\n\n return { html, css }\n}\n"],"names":["__dirname","dirname","fileURLToPath","require","createRequire","logoSvg","jsx","Fragment","Button","MediaSlot","readFileSync","join","CustomerLogo","HeaderSection","CustomerLogoSection","FeaturesSection","CardsSection","TestimonialsSection","FaqSection","BulletsSection","CtaSection","FooterSection","FOOTER_DEFAULTS","ContactSection","TrustSection","NumbersSection","Integrations","PageSpec","sectionSchemas","renderToStaticMarkup","jsxs","NavbarMenu"],"mappings":"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"}
1
+ {"version":3,"file":"render.cjs","sources":["../src/ssr/renderPageSpec.tsx"],"sourcesContent":["/**\n * renderPageSpec — maps a typed PageSpec to real Clay React components and\n * returns self-contained static HTML + CSS.\n *\n * Node-safe (no import.meta.glob, no Vite-only APIs).\n * v1 is static-only (renderToStaticMarkup); no hydration.\n *\n * Naming skew resolved here (not in the public PageSpec contract):\n * IntegrationsSection → exported `Integrations` component\n * TrustSection layout=\"bento\" → TrustSection with layout=\"bento\"\n */\n\nimport type { ReactNode } from 'react'\nimport { Fragment } from 'react'\nimport { renderToStaticMarkup } from 'react-dom/server'\nimport { readFileSync } from 'node:fs'\nimport { join, dirname } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { createRequire } from 'node:module'\n\nimport {\n Button,\n CustomerLogo,\n CustomerLogoSection,\n HeaderSection,\n FeaturesSection,\n CardsSection,\n TestimonialsSection,\n FaqSection,\n BulletsSection,\n CtaSection,\n FooterSection,\n FOOTER_DEFAULTS,\n ContactSection,\n TrustSection,\n NumbersSection,\n Integrations,\n NavbarMenu,\n MediaSlot,\n} from '../index'\n\nimport { logoSvg } from '../logos/resolve'\nimport { PageSpec, sectionSchemas, type SectionType } from '../page-spec/index'\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\nconst require = createRequire(import.meta.url)\n\n// ── helpers ─────────────────────────────────────────────────────────────────\n\nfunction svgDataUrl(svg: string): string {\n return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`\n}\n\nfunction resolveLogoSrc(key: string): string | null {\n const svg = logoSvg(key)\n return svg ? svgDataUrl(svg) : null\n}\n\nconst BulletDefaultIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"10\" cy=\"10\" r=\"6\" fill=\"currentColor\" />\n </svg>\n)\n\nfunction makeCtas(ctas: { label: string; href: string }[] | undefined): ReactNode {\n if (!ctas?.length) return undefined\n return (\n <>\n {ctas.map((c, i) => (\n <a key={i} href={c.href} style={{ display: 'contents' }}>\n {/* Adapter sets semantics (first CTA = primary) only; color is Clay's to decide\n (Button defaults to the brand color). Never hard-code a color here. */}\n <Button buttonStyle={i === 0 ? 'primary' : 'secondary'} size=\"regular\">\n {c.label}\n </Button>\n </a>\n ))}\n </>\n )\n}\n\nfunction makeMedia(\n m:\n | {\n src: string\n type?: 'image' | 'video'\n alt?: string\n fit?: 'contain' | 'cover' | 'fill'\n aspectRatio?: string\n }\n | undefined\n): ReactNode {\n if (!m?.src) return undefined\n const isVideo = m.type === 'video'\n return (\n <MediaSlot\n type={isVideo ? 'video' : 'image'}\n src={m.src}\n alt={m.alt}\n fit={m.fit}\n aspectRatio={m.aspectRatio}\n {...(isVideo ? { autoPlay: true, loop: true } : {})}\n />\n )\n}\n\n// ── CSS loader (cached) ──────────────────────────────────────────────────────\n\nlet _css: string | null = null\n\nfunction loadCss(): string {\n if (_css) return _css\n const tokensCssPath = require.resolve('@clay-ds/tokens/css')\n const tokensCss = readFileSync(tokensCssPath, 'utf8')\n const componentCss = readFileSync(join(__dirname, 'index.css'), 'utf8')\n _css = tokensCss + '\\n' + componentCss\n return _css\n}\n\n// ── section registry ─────────────────────────────────────────────────────────\n\ntype SectionRenderers = {\n [K in SectionType]: (props: import('zod').infer<(typeof sectionSchemas)[K]>) => ReactNode\n}\n\nconst SECTION_REGISTRY: SectionRenderers = {\n HeaderSection(data) {\n const logos = data.logoKeys?.length ? (\n <>\n {data.logoKeys.map((key, i) => {\n const src = resolveLogoSrc(key)\n if (!src) return null\n const name = key.split('/').pop() ?? key\n return <CustomerLogo key={i} src={src} name={name} placement=\"web\" />\n })}\n </>\n ) : undefined\n return (\n <HeaderSection\n layout={data.layout}\n heading={data.heading}\n description={data.description}\n actionCaption={data.actionCaption}\n actions={makeCtas(data.ctas)}\n logos={logos}\n media={makeMedia(data.media)}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n CustomerLogoSection(data) {\n // Drop unresolved keys rather than emit a broken <img src=\"\">.\n const logos = data.logoKeys\n .map((key) => {\n const src = resolveLogoSrc(key)\n if (!src) return null\n return { name: key.split('/').pop() ?? key, srcBlack: src, srcColored: src }\n })\n .filter((l): l is { name: string; srcBlack: string; srcColored: string } => l !== null)\n return (\n <CustomerLogoSection\n heading={data.heading}\n logos={logos}\n colorMode={data.colorMode}\n />\n )\n },\n\n FeaturesSection(data) {\n const items = data.items.map((it) => ({\n ...it,\n media: makeMedia(it.media),\n }))\n return (\n <FeaturesSection\n layout={data.layout}\n sectionHeading={data.sectionHeading}\n sectionTopic={data.sectionTopic}\n sectionDescription={data.sectionDescription}\n items={items}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n CardsSection(data) {\n const cards = data.cards?.map((c) => ({\n ...c,\n media: makeMedia(c.media),\n }))\n return (\n <CardsSection\n layout={data.layout}\n tagline={data.tagline}\n sectionHeading={data.sectionHeading}\n sectionDescription={data.sectionDescription}\n cards={cards}\n revealCards={data.revealCards}\n valueCards={data.valueCards}\n iconLinkCards={data.iconLinkCards}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n TestimonialsSection(data) {\n const cards = data.cards?.map((c) => ({\n quote: c.quote,\n authorName: c.authorName,\n authorRole: c.authorRole,\n stars: c.stars,\n stat: c.stat,\n statLabel: c.statLabel,\n ctaLabel: c.ctaLabel,\n ctaHref: c.ctaHref,\n logo: c.logoKey\n ? (() => {\n const src = resolveLogoSrc(c.logoKey)\n if (!src) return undefined\n return (\n <CustomerLogo\n src={src}\n name={c.logoKey.split('/').pop() ?? c.logoKey}\n placement=\"marketing\"\n />\n )\n })()\n : undefined,\n }))\n return (\n <TestimonialsSection\n layout={data.layout}\n heading={data.heading}\n description={data.description}\n miniTitle={data.miniTitle}\n ctaLabel={data.ctaLabel}\n ctaHref={data.ctaHref}\n cards={cards}\n carouselCards={data.carouselCards}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n FaqSection(data) {\n return (\n <FaqSection\n layout={data.layout}\n heading={data.heading}\n items={data.items}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n BulletsSection(data) {\n const action = data.cta ? (\n <a href={data.cta.href} style={{ display: 'contents' }}>\n <Button buttonStyle=\"secondary\" size=\"regular\">\n {data.cta.label}\n </Button>\n </a>\n ) : undefined\n return (\n <BulletsSection\n layout={data.layout}\n miniTitle={data.miniTitle}\n heading={data.heading}\n description={data.description}\n columns={data.columns}\n items={data.items.map((item) => ({\n icon: <BulletDefaultIcon />,\n title: item.title,\n description: item.description,\n }))}\n action={action}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n CtaSection(data) {\n return (\n <CtaSection\n layout={data.layout}\n heading={data.heading}\n description={data.description}\n actions={makeCtas(data.ctas)}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n FooterSection(data) {\n const logoSrcValue = data.logoKey ? resolveLogoSrc(data.logoKey) : undefined\n // FOOTER_DEFAULTS deliberately omits logo (consumers supply per-brand).\n // Only pass logo when we have a resolvable src — never an empty string,\n // which would render a broken <img> and trigger a React warning.\n const logo = logoSrcValue\n ? { src: logoSrcValue, alt: data.logoAlt ?? 'monday.com', href: '/' }\n : undefined\n return <FooterSection {...FOOTER_DEFAULTS} logo={logo} />\n },\n\n ContactSection(data) {\n const logos = data.logos\n ?.map((item) => {\n const src = resolveLogoSrc(item.key)\n return src ? { src, name: item.name } : null\n })\n .filter((l): l is { src: string; name: string } => l !== null)\n return (\n <ContactSection\n heading={data.heading}\n description={data.description}\n ratingValue={data.ratingValue}\n ratingLabel={data.ratingLabel}\n formTitle={data.formTitle}\n submitLabel={data.submitLabel}\n fields={data.fields}\n logos={logos}\n badges={data.badges}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n TrustSection(data) {\n return (\n <TrustSection\n layout={data.layout}\n heading={data.heading}\n ratingValue={data.ratingValue}\n ratingOut={data.ratingOut}\n ratingLabel={data.ratingLabel}\n badges={data.badges}\n ctaLabel={data.ctaLabel}\n ctaHref={data.ctaHref}\n topicLabel={data.topicLabel}\n securityTitle={data.securityTitle}\n securityDescription={data.securityDescription}\n securityLinkLabel={data.securityLinkLabel}\n securityLinkHref={data.securityLinkHref}\n complianceLogos={data.complianceLogos}\n statCards={data.statCards}\n />\n )\n },\n\n NumbersSection(data) {\n return (\n <NumbersSection\n layout={data.layout}\n heading={data.heading}\n items={data.items}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n IntegrationsSection(data) {\n // naming skew: IntegrationsSection (agent-facing) → Integrations (React export)\n const integrations = data.integrations\n ?.map((item) => {\n const src =\n resolveLogoSrc(item.key) ??\n resolveLogoSrc(`integrations/${item.name.toLowerCase()}`)\n return src ? { name: item.name, src } : null\n })\n .filter((i): i is { name: string; src: string } => i !== null)\n return (\n <Integrations\n layout={data.layout}\n heading={data.heading}\n description={data.description}\n integrations={integrations}\n statValue={data.statValue}\n statLabel={data.statLabel}\n ctaLabel={data.ctaLabel}\n ctaHref={data.ctaHref}\n />\n )\n },\n}\n\n// ── public API ───────────────────────────────────────────────────────────────\n\nexport interface RenderResult {\n /** Complete self-contained HTML document */\n html: string\n /** Combined CSS (tokens + component styles) for reference */\n css: string\n}\n\n/**\n * Parse a PageSpec and render it to static HTML using real Clay React components.\n * Throws a ZodError on invalid input.\n */\nexport function renderPageSpec(input: unknown): RenderResult {\n const spec = PageSpec.parse(input)\n\n const sectionElements = spec.sections.map((section, i) => {\n const schema = sectionSchemas[section.type as SectionType]\n const props = schema.parse(section.props)\n const render = SECTION_REGISTRY[section.type as SectionType]\n return <Fragment key={i}>{render(props as never)}</Fragment>\n })\n\n const css = loadCss()\n\n // Resolve the monday.com colored wordmark — Master layout, black type, \".com\" on.\n // Only pass logoSrc when we have a real src; never pass an empty string (broken <img>).\n const navLogoSrc = resolveLogoSrc('products/monday-com/Layout=Master, Type Color=Black, Com=On') ?? undefined\n\n // Default primary CTA for campaign-style bars: mirrors the real monday.com top bar.\n const navActions = (\n <a href=\"#\" style={{ display: 'contents' }}>\n <Button buttonStyle=\"primary\" size=\"regular\">Get started</Button>\n </a>\n )\n\n const bodyHtml = renderToStaticMarkup(\n <>\n <NavbarMenu logoSrc={navLogoSrc} actions={navActions} />\n {sectionElements}\n </>\n )\n\n const html = `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<title>${spec.brand ?? 'Landing Page'}</title>\n<style>${css}</style>\n</head>\n<body>\n${bodyHtml}\n</body>\n</html>`\n\n return { html, css }\n}\n"],"names":["__dirname","dirname","fileURLToPath","require","createRequire","logoSvg","jsx","Fragment","Button","MediaSlot","readFileSync","join","CustomerLogo","HeaderSection","CustomerLogoSection","FeaturesSection","CardsSection","TestimonialsSection","FaqSection","BulletsSection","CtaSection","FooterSection","FOOTER_DEFAULTS","ContactSection","TrustSection","NumbersSection","Integrations","PageSpec","sectionSchemas","renderToStaticMarkup","jsxs","NavbarMenu"],"mappings":"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"}
package/dist/render.js CHANGED
@@ -7,7 +7,7 @@ import { fileURLToPath } from "node:url";
7
7
  import { createRequire } from "node:module";
8
8
  import { logoSvg } from "./logos/resolve.js";
9
9
  import { PageSpec, sectionSchemas } from "./page-spec.js";
10
- import { N as NavbarMenu, l as Integrations, m as NumbersSection, v as TrustSection, b as ContactSection, j as FooterSection, g as FOOTER_DEFAULTS, d as CtaSection, a as Button, B as BulletsSection, h as FaqSection, e as CustomerLogo, s as TestimonialsSection, C as CardsSection, i as FeaturesSection, f as CustomerLogoSection, H as HeaderSection, M as MediaSlot } from "./footerDefaults-Dx94Jc_F.js";
10
+ import { N as NavbarMenu, m as Integrations, n as NumbersSection, w as TrustSection, b as ContactSection, k as FooterSection, g as FOOTER_DEFAULTS, d as CtaSection, a as Button, B as BulletsSection, i as FaqSection, e as CustomerLogo, t as TestimonialsSection, C as CardsSection, j as FeaturesSection, f as CustomerLogoSection, H as HeaderSection, M as MediaSlot } from "./footerDefaults-DRDmvQb8.js";
11
11
  const __dirname$1 = dirname(fileURLToPath(import.meta.url));
12
12
  const require$1 = createRequire(import.meta.url);
13
13
  function svgDataUrl(svg) {
@@ -294,9 +294,11 @@ function renderPageSpec(input) {
294
294
  return /* @__PURE__ */ jsx(Fragment, { children: render(props) }, i);
295
295
  });
296
296
  const css = loadCss();
297
+ const navLogoSrc = resolveLogoSrc("products/monday-com/Layout=Master, Type Color=Black, Com=On") ?? void 0;
298
+ const navActions = /* @__PURE__ */ jsx("a", { href: "#", style: { display: "contents" }, children: /* @__PURE__ */ jsx(Button, { buttonStyle: "primary", size: "regular", children: "Get started" }) });
297
299
  const bodyHtml = renderToStaticMarkup(
298
300
  /* @__PURE__ */ jsxs(Fragment$1, { children: [
299
- /* @__PURE__ */ jsx(NavbarMenu, {}),
301
+ /* @__PURE__ */ jsx(NavbarMenu, { logoSrc: navLogoSrc, actions: navActions }),
300
302
  sectionElements
301
303
  ] })
302
304
  );
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sources":["../src/ssr/renderPageSpec.tsx"],"sourcesContent":["/**\n * renderPageSpec — maps a typed PageSpec to real Clay React components and\n * returns self-contained static HTML + CSS.\n *\n * Node-safe (no import.meta.glob, no Vite-only APIs).\n * v1 is static-only (renderToStaticMarkup); no hydration.\n *\n * Naming skew resolved here (not in the public PageSpec contract):\n * IntegrationsSection → exported `Integrations` component\n * TrustSection layout=\"bento\" → TrustSection with layout=\"bento\"\n */\n\nimport type { ReactNode } from 'react'\nimport { Fragment } from 'react'\nimport { renderToStaticMarkup } from 'react-dom/server'\nimport { readFileSync } from 'node:fs'\nimport { join, dirname } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { createRequire } from 'node:module'\n\nimport {\n Button,\n CustomerLogo,\n CustomerLogoSection,\n HeaderSection,\n FeaturesSection,\n CardsSection,\n TestimonialsSection,\n FaqSection,\n BulletsSection,\n CtaSection,\n FooterSection,\n FOOTER_DEFAULTS,\n ContactSection,\n TrustSection,\n NumbersSection,\n Integrations,\n NavbarMenu,\n MediaSlot,\n} from '../index'\n\nimport { logoSvg } from '../logos/resolve'\nimport { PageSpec, sectionSchemas, type SectionType } from '../page-spec/index'\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\nconst require = createRequire(import.meta.url)\n\n// ── helpers ─────────────────────────────────────────────────────────────────\n\nfunction svgDataUrl(svg: string): string {\n return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`\n}\n\nfunction resolveLogoSrc(key: string): string | null {\n const svg = logoSvg(key)\n return svg ? svgDataUrl(svg) : null\n}\n\nconst BulletDefaultIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"10\" cy=\"10\" r=\"6\" fill=\"currentColor\" />\n </svg>\n)\n\nfunction makeCtas(ctas: { label: string; href: string }[] | undefined): ReactNode {\n if (!ctas?.length) return undefined\n return (\n <>\n {ctas.map((c, i) => (\n <a key={i} href={c.href} style={{ display: 'contents' }}>\n {/* Adapter sets semantics (first CTA = primary) only; color is Clay's to decide\n (Button defaults to the brand color). Never hard-code a color here. */}\n <Button buttonStyle={i === 0 ? 'primary' : 'secondary'} size=\"regular\">\n {c.label}\n </Button>\n </a>\n ))}\n </>\n )\n}\n\nfunction makeMedia(\n m:\n | {\n src: string\n type?: 'image' | 'video'\n alt?: string\n fit?: 'contain' | 'cover' | 'fill'\n aspectRatio?: string\n }\n | undefined\n): ReactNode {\n if (!m?.src) return undefined\n const isVideo = m.type === 'video'\n return (\n <MediaSlot\n type={isVideo ? 'video' : 'image'}\n src={m.src}\n alt={m.alt}\n fit={m.fit}\n aspectRatio={m.aspectRatio}\n {...(isVideo ? { autoPlay: true, loop: true } : {})}\n />\n )\n}\n\n// ── CSS loader (cached) ──────────────────────────────────────────────────────\n\nlet _css: string | null = null\n\nfunction loadCss(): string {\n if (_css) return _css\n const tokensCssPath = require.resolve('@clay-ds/tokens/css')\n const tokensCss = readFileSync(tokensCssPath, 'utf8')\n const componentCss = readFileSync(join(__dirname, 'index.css'), 'utf8')\n _css = tokensCss + '\\n' + componentCss\n return _css\n}\n\n// ── section registry ─────────────────────────────────────────────────────────\n\ntype SectionRenderers = {\n [K in SectionType]: (props: import('zod').infer<(typeof sectionSchemas)[K]>) => ReactNode\n}\n\nconst SECTION_REGISTRY: SectionRenderers = {\n HeaderSection(data) {\n const logos = data.logoKeys?.length ? (\n <>\n {data.logoKeys.map((key, i) => {\n const src = resolveLogoSrc(key)\n if (!src) return null\n const name = key.split('/').pop() ?? key\n return <CustomerLogo key={i} src={src} name={name} placement=\"web\" />\n })}\n </>\n ) : undefined\n return (\n <HeaderSection\n layout={data.layout}\n heading={data.heading}\n description={data.description}\n actionCaption={data.actionCaption}\n actions={makeCtas(data.ctas)}\n logos={logos}\n media={makeMedia(data.media)}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n CustomerLogoSection(data) {\n // Drop unresolved keys rather than emit a broken <img src=\"\">.\n const logos = data.logoKeys\n .map((key) => {\n const src = resolveLogoSrc(key)\n if (!src) return null\n return { name: key.split('/').pop() ?? key, srcBlack: src, srcColored: src }\n })\n .filter((l): l is { name: string; srcBlack: string; srcColored: string } => l !== null)\n return (\n <CustomerLogoSection\n heading={data.heading}\n logos={logos}\n colorMode={data.colorMode}\n />\n )\n },\n\n FeaturesSection(data) {\n const items = data.items.map((it) => ({\n ...it,\n media: makeMedia(it.media),\n }))\n return (\n <FeaturesSection\n layout={data.layout}\n sectionHeading={data.sectionHeading}\n sectionTopic={data.sectionTopic}\n sectionDescription={data.sectionDescription}\n items={items}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n CardsSection(data) {\n const cards = data.cards?.map((c) => ({\n ...c,\n media: makeMedia(c.media),\n }))\n return (\n <CardsSection\n layout={data.layout}\n tagline={data.tagline}\n sectionHeading={data.sectionHeading}\n sectionDescription={data.sectionDescription}\n cards={cards}\n revealCards={data.revealCards}\n valueCards={data.valueCards}\n iconLinkCards={data.iconLinkCards}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n TestimonialsSection(data) {\n const cards = data.cards?.map((c) => ({\n quote: c.quote,\n authorName: c.authorName,\n authorRole: c.authorRole,\n stars: c.stars,\n stat: c.stat,\n statLabel: c.statLabel,\n ctaLabel: c.ctaLabel,\n ctaHref: c.ctaHref,\n logo: c.logoKey\n ? (() => {\n const src = resolveLogoSrc(c.logoKey)\n if (!src) return undefined\n return (\n <CustomerLogo\n src={src}\n name={c.logoKey.split('/').pop() ?? c.logoKey}\n placement=\"marketing\"\n />\n )\n })()\n : undefined,\n }))\n return (\n <TestimonialsSection\n layout={data.layout}\n heading={data.heading}\n description={data.description}\n miniTitle={data.miniTitle}\n ctaLabel={data.ctaLabel}\n ctaHref={data.ctaHref}\n cards={cards}\n carouselCards={data.carouselCards}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n FaqSection(data) {\n return (\n <FaqSection\n layout={data.layout}\n heading={data.heading}\n items={data.items}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n BulletsSection(data) {\n const action = data.cta ? (\n <a href={data.cta.href} style={{ display: 'contents' }}>\n <Button buttonStyle=\"secondary\" size=\"regular\">\n {data.cta.label}\n </Button>\n </a>\n ) : undefined\n return (\n <BulletsSection\n layout={data.layout}\n miniTitle={data.miniTitle}\n heading={data.heading}\n description={data.description}\n columns={data.columns}\n items={data.items.map((item) => ({\n icon: <BulletDefaultIcon />,\n title: item.title,\n description: item.description,\n }))}\n action={action}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n CtaSection(data) {\n return (\n <CtaSection\n layout={data.layout}\n heading={data.heading}\n description={data.description}\n actions={makeCtas(data.ctas)}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n FooterSection(data) {\n const logoSrcValue = data.logoKey ? resolveLogoSrc(data.logoKey) : undefined\n // FOOTER_DEFAULTS deliberately omits logo (consumers supply per-brand).\n // Only pass logo when we have a resolvable src — never an empty string,\n // which would render a broken <img> and trigger a React warning.\n const logo = logoSrcValue\n ? { src: logoSrcValue, alt: data.logoAlt ?? 'monday.com', href: '/' }\n : undefined\n return <FooterSection {...FOOTER_DEFAULTS} logo={logo} />\n },\n\n ContactSection(data) {\n const logos = data.logos\n ?.map((item) => {\n const src = resolveLogoSrc(item.key)\n return src ? { src, name: item.name } : null\n })\n .filter((l): l is { src: string; name: string } => l !== null)\n return (\n <ContactSection\n heading={data.heading}\n description={data.description}\n ratingValue={data.ratingValue}\n ratingLabel={data.ratingLabel}\n formTitle={data.formTitle}\n submitLabel={data.submitLabel}\n fields={data.fields}\n logos={logos}\n badges={data.badges}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n TrustSection(data) {\n return (\n <TrustSection\n layout={data.layout}\n heading={data.heading}\n ratingValue={data.ratingValue}\n ratingOut={data.ratingOut}\n ratingLabel={data.ratingLabel}\n badges={data.badges}\n ctaLabel={data.ctaLabel}\n ctaHref={data.ctaHref}\n topicLabel={data.topicLabel}\n securityTitle={data.securityTitle}\n securityDescription={data.securityDescription}\n securityLinkLabel={data.securityLinkLabel}\n securityLinkHref={data.securityLinkHref}\n complianceLogos={data.complianceLogos}\n statCards={data.statCards}\n />\n )\n },\n\n NumbersSection(data) {\n return (\n <NumbersSection\n layout={data.layout}\n heading={data.heading}\n items={data.items}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n IntegrationsSection(data) {\n // naming skew: IntegrationsSection (agent-facing) → Integrations (React export)\n const integrations = data.integrations\n ?.map((item) => {\n const src =\n resolveLogoSrc(item.key) ??\n resolveLogoSrc(`integrations/${item.name.toLowerCase()}`)\n return src ? { name: item.name, src } : null\n })\n .filter((i): i is { name: string; src: string } => i !== null)\n return (\n <Integrations\n layout={data.layout}\n heading={data.heading}\n description={data.description}\n integrations={integrations}\n statValue={data.statValue}\n statLabel={data.statLabel}\n ctaLabel={data.ctaLabel}\n ctaHref={data.ctaHref}\n />\n )\n },\n}\n\n// ── public API ───────────────────────────────────────────────────────────────\n\nexport interface RenderResult {\n /** Complete self-contained HTML document */\n html: string\n /** Combined CSS (tokens + component styles) for reference */\n css: string\n}\n\n/**\n * Parse a PageSpec and render it to static HTML using real Clay React components.\n * Throws a ZodError on invalid input.\n */\nexport function renderPageSpec(input: unknown): RenderResult {\n const spec = PageSpec.parse(input)\n\n const sectionElements = spec.sections.map((section, i) => {\n const schema = sectionSchemas[section.type as SectionType]\n const props = schema.parse(section.props)\n const render = SECTION_REGISTRY[section.type as SectionType]\n return <Fragment key={i}>{render(props as never)}</Fragment>\n })\n\n const css = loadCss()\n\n const bodyHtml = renderToStaticMarkup(\n <>\n <NavbarMenu />\n {sectionElements}\n </>\n )\n\n const html = `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<title>${spec.brand ?? 'Landing Page'}</title>\n<style>${css}</style>\n</head>\n<body>\n${bodyHtml}\n</body>\n</html>`\n\n return { html, css }\n}\n"],"names":["__dirname","require","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sources":["../src/ssr/renderPageSpec.tsx"],"sourcesContent":["/**\n * renderPageSpec — maps a typed PageSpec to real Clay React components and\n * returns self-contained static HTML + CSS.\n *\n * Node-safe (no import.meta.glob, no Vite-only APIs).\n * v1 is static-only (renderToStaticMarkup); no hydration.\n *\n * Naming skew resolved here (not in the public PageSpec contract):\n * IntegrationsSection → exported `Integrations` component\n * TrustSection layout=\"bento\" → TrustSection with layout=\"bento\"\n */\n\nimport type { ReactNode } from 'react'\nimport { Fragment } from 'react'\nimport { renderToStaticMarkup } from 'react-dom/server'\nimport { readFileSync } from 'node:fs'\nimport { join, dirname } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { createRequire } from 'node:module'\n\nimport {\n Button,\n CustomerLogo,\n CustomerLogoSection,\n HeaderSection,\n FeaturesSection,\n CardsSection,\n TestimonialsSection,\n FaqSection,\n BulletsSection,\n CtaSection,\n FooterSection,\n FOOTER_DEFAULTS,\n ContactSection,\n TrustSection,\n NumbersSection,\n Integrations,\n NavbarMenu,\n MediaSlot,\n} from '../index'\n\nimport { logoSvg } from '../logos/resolve'\nimport { PageSpec, sectionSchemas, type SectionType } from '../page-spec/index'\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\nconst require = createRequire(import.meta.url)\n\n// ── helpers ─────────────────────────────────────────────────────────────────\n\nfunction svgDataUrl(svg: string): string {\n return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`\n}\n\nfunction resolveLogoSrc(key: string): string | null {\n const svg = logoSvg(key)\n return svg ? svgDataUrl(svg) : null\n}\n\nconst BulletDefaultIcon = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"10\" cy=\"10\" r=\"6\" fill=\"currentColor\" />\n </svg>\n)\n\nfunction makeCtas(ctas: { label: string; href: string }[] | undefined): ReactNode {\n if (!ctas?.length) return undefined\n return (\n <>\n {ctas.map((c, i) => (\n <a key={i} href={c.href} style={{ display: 'contents' }}>\n {/* Adapter sets semantics (first CTA = primary) only; color is Clay's to decide\n (Button defaults to the brand color). Never hard-code a color here. */}\n <Button buttonStyle={i === 0 ? 'primary' : 'secondary'} size=\"regular\">\n {c.label}\n </Button>\n </a>\n ))}\n </>\n )\n}\n\nfunction makeMedia(\n m:\n | {\n src: string\n type?: 'image' | 'video'\n alt?: string\n fit?: 'contain' | 'cover' | 'fill'\n aspectRatio?: string\n }\n | undefined\n): ReactNode {\n if (!m?.src) return undefined\n const isVideo = m.type === 'video'\n return (\n <MediaSlot\n type={isVideo ? 'video' : 'image'}\n src={m.src}\n alt={m.alt}\n fit={m.fit}\n aspectRatio={m.aspectRatio}\n {...(isVideo ? { autoPlay: true, loop: true } : {})}\n />\n )\n}\n\n// ── CSS loader (cached) ──────────────────────────────────────────────────────\n\nlet _css: string | null = null\n\nfunction loadCss(): string {\n if (_css) return _css\n const tokensCssPath = require.resolve('@clay-ds/tokens/css')\n const tokensCss = readFileSync(tokensCssPath, 'utf8')\n const componentCss = readFileSync(join(__dirname, 'index.css'), 'utf8')\n _css = tokensCss + '\\n' + componentCss\n return _css\n}\n\n// ── section registry ─────────────────────────────────────────────────────────\n\ntype SectionRenderers = {\n [K in SectionType]: (props: import('zod').infer<(typeof sectionSchemas)[K]>) => ReactNode\n}\n\nconst SECTION_REGISTRY: SectionRenderers = {\n HeaderSection(data) {\n const logos = data.logoKeys?.length ? (\n <>\n {data.logoKeys.map((key, i) => {\n const src = resolveLogoSrc(key)\n if (!src) return null\n const name = key.split('/').pop() ?? key\n return <CustomerLogo key={i} src={src} name={name} placement=\"web\" />\n })}\n </>\n ) : undefined\n return (\n <HeaderSection\n layout={data.layout}\n heading={data.heading}\n description={data.description}\n actionCaption={data.actionCaption}\n actions={makeCtas(data.ctas)}\n logos={logos}\n media={makeMedia(data.media)}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n CustomerLogoSection(data) {\n // Drop unresolved keys rather than emit a broken <img src=\"\">.\n const logos = data.logoKeys\n .map((key) => {\n const src = resolveLogoSrc(key)\n if (!src) return null\n return { name: key.split('/').pop() ?? key, srcBlack: src, srcColored: src }\n })\n .filter((l): l is { name: string; srcBlack: string; srcColored: string } => l !== null)\n return (\n <CustomerLogoSection\n heading={data.heading}\n logos={logos}\n colorMode={data.colorMode}\n />\n )\n },\n\n FeaturesSection(data) {\n const items = data.items.map((it) => ({\n ...it,\n media: makeMedia(it.media),\n }))\n return (\n <FeaturesSection\n layout={data.layout}\n sectionHeading={data.sectionHeading}\n sectionTopic={data.sectionTopic}\n sectionDescription={data.sectionDescription}\n items={items}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n CardsSection(data) {\n const cards = data.cards?.map((c) => ({\n ...c,\n media: makeMedia(c.media),\n }))\n return (\n <CardsSection\n layout={data.layout}\n tagline={data.tagline}\n sectionHeading={data.sectionHeading}\n sectionDescription={data.sectionDescription}\n cards={cards}\n revealCards={data.revealCards}\n valueCards={data.valueCards}\n iconLinkCards={data.iconLinkCards}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n TestimonialsSection(data) {\n const cards = data.cards?.map((c) => ({\n quote: c.quote,\n authorName: c.authorName,\n authorRole: c.authorRole,\n stars: c.stars,\n stat: c.stat,\n statLabel: c.statLabel,\n ctaLabel: c.ctaLabel,\n ctaHref: c.ctaHref,\n logo: c.logoKey\n ? (() => {\n const src = resolveLogoSrc(c.logoKey)\n if (!src) return undefined\n return (\n <CustomerLogo\n src={src}\n name={c.logoKey.split('/').pop() ?? c.logoKey}\n placement=\"marketing\"\n />\n )\n })()\n : undefined,\n }))\n return (\n <TestimonialsSection\n layout={data.layout}\n heading={data.heading}\n description={data.description}\n miniTitle={data.miniTitle}\n ctaLabel={data.ctaLabel}\n ctaHref={data.ctaHref}\n cards={cards}\n carouselCards={data.carouselCards}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n FaqSection(data) {\n return (\n <FaqSection\n layout={data.layout}\n heading={data.heading}\n items={data.items}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n BulletsSection(data) {\n const action = data.cta ? (\n <a href={data.cta.href} style={{ display: 'contents' }}>\n <Button buttonStyle=\"secondary\" size=\"regular\">\n {data.cta.label}\n </Button>\n </a>\n ) : undefined\n return (\n <BulletsSection\n layout={data.layout}\n miniTitle={data.miniTitle}\n heading={data.heading}\n description={data.description}\n columns={data.columns}\n items={data.items.map((item) => ({\n icon: <BulletDefaultIcon />,\n title: item.title,\n description: item.description,\n }))}\n action={action}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n CtaSection(data) {\n return (\n <CtaSection\n layout={data.layout}\n heading={data.heading}\n description={data.description}\n actions={makeCtas(data.ctas)}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n FooterSection(data) {\n const logoSrcValue = data.logoKey ? resolveLogoSrc(data.logoKey) : undefined\n // FOOTER_DEFAULTS deliberately omits logo (consumers supply per-brand).\n // Only pass logo when we have a resolvable src — never an empty string,\n // which would render a broken <img> and trigger a React warning.\n const logo = logoSrcValue\n ? { src: logoSrcValue, alt: data.logoAlt ?? 'monday.com', href: '/' }\n : undefined\n return <FooterSection {...FOOTER_DEFAULTS} logo={logo} />\n },\n\n ContactSection(data) {\n const logos = data.logos\n ?.map((item) => {\n const src = resolveLogoSrc(item.key)\n return src ? { src, name: item.name } : null\n })\n .filter((l): l is { src: string; name: string } => l !== null)\n return (\n <ContactSection\n heading={data.heading}\n description={data.description}\n ratingValue={data.ratingValue}\n ratingLabel={data.ratingLabel}\n formTitle={data.formTitle}\n submitLabel={data.submitLabel}\n fields={data.fields}\n logos={logos}\n badges={data.badges}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n TrustSection(data) {\n return (\n <TrustSection\n layout={data.layout}\n heading={data.heading}\n ratingValue={data.ratingValue}\n ratingOut={data.ratingOut}\n ratingLabel={data.ratingLabel}\n badges={data.badges}\n ctaLabel={data.ctaLabel}\n ctaHref={data.ctaHref}\n topicLabel={data.topicLabel}\n securityTitle={data.securityTitle}\n securityDescription={data.securityDescription}\n securityLinkLabel={data.securityLinkLabel}\n securityLinkHref={data.securityLinkHref}\n complianceLogos={data.complianceLogos}\n statCards={data.statCards}\n />\n )\n },\n\n NumbersSection(data) {\n return (\n <NumbersSection\n layout={data.layout}\n heading={data.heading}\n items={data.items}\n containerWidth={data.containerWidth}\n />\n )\n },\n\n IntegrationsSection(data) {\n // naming skew: IntegrationsSection (agent-facing) → Integrations (React export)\n const integrations = data.integrations\n ?.map((item) => {\n const src =\n resolveLogoSrc(item.key) ??\n resolveLogoSrc(`integrations/${item.name.toLowerCase()}`)\n return src ? { name: item.name, src } : null\n })\n .filter((i): i is { name: string; src: string } => i !== null)\n return (\n <Integrations\n layout={data.layout}\n heading={data.heading}\n description={data.description}\n integrations={integrations}\n statValue={data.statValue}\n statLabel={data.statLabel}\n ctaLabel={data.ctaLabel}\n ctaHref={data.ctaHref}\n />\n )\n },\n}\n\n// ── public API ───────────────────────────────────────────────────────────────\n\nexport interface RenderResult {\n /** Complete self-contained HTML document */\n html: string\n /** Combined CSS (tokens + component styles) for reference */\n css: string\n}\n\n/**\n * Parse a PageSpec and render it to static HTML using real Clay React components.\n * Throws a ZodError on invalid input.\n */\nexport function renderPageSpec(input: unknown): RenderResult {\n const spec = PageSpec.parse(input)\n\n const sectionElements = spec.sections.map((section, i) => {\n const schema = sectionSchemas[section.type as SectionType]\n const props = schema.parse(section.props)\n const render = SECTION_REGISTRY[section.type as SectionType]\n return <Fragment key={i}>{render(props as never)}</Fragment>\n })\n\n const css = loadCss()\n\n // Resolve the monday.com colored wordmark — Master layout, black type, \".com\" on.\n // Only pass logoSrc when we have a real src; never pass an empty string (broken <img>).\n const navLogoSrc = resolveLogoSrc('products/monday-com/Layout=Master, Type Color=Black, Com=On') ?? undefined\n\n // Default primary CTA for campaign-style bars: mirrors the real monday.com top bar.\n const navActions = (\n <a href=\"#\" style={{ display: 'contents' }}>\n <Button buttonStyle=\"primary\" size=\"regular\">Get started</Button>\n </a>\n )\n\n const bodyHtml = renderToStaticMarkup(\n <>\n <NavbarMenu logoSrc={navLogoSrc} actions={navActions} />\n {sectionElements}\n </>\n )\n\n const html = `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<title>${spec.brand ?? 'Landing Page'}</title>\n<style>${css}</style>\n</head>\n<body>\n${bodyHtml}\n</body>\n</html>`\n\n return { html, css }\n}\n"],"names":["__dirname","require","Fragment"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clay-ds/react",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "type": "module",
5
5
  "sideEffects": [
6
6
  "**/*.css"