@lacspace/og 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @lacspace/og\n * Beautiful, dynamic Open Graph images — a design system you configure once and\n * call per page. Produces a `next/og` element tree *and* a zero-dependency SVG\n * from the same options, with auto-fitting titles, presets and palettes.\n *\n * ```tsx\n * // app/og/route.tsx\n * import { ImageResponse } from \"next/og\";\n * import { ogCard } from \"@lacspace/og\";\n *\n * export const runtime = \"edge\";\n * export function GET(req: Request) {\n * const title = new URL(req.url).searchParams.get(\"title\") ?? \"My site\";\n * return new ImageResponse(\n * ogCard({ title, subtitle: \"my-site.com\", from: \"#22d3ee\", to: \"#6366f1\" }) as any,\n * { width: 1200, height: 630 },\n * );\n * }\n * ```\n *\n * Zero dependencies · isomorphic · fully typed.\n */\n\n/* ------------------------------------------------------------------ *\n * Options\n * ------------------------------------------------------------------ */\n\nexport type OgPreset = \"gradient\" | \"split\" | \"minimal\" | \"terminal\";\nexport type OgTheme = \"dark\" | \"light\";\n\nexport interface OgOptions {\n /** The headline. Font size auto-fits to length. */\n title: string;\n /** Secondary line under the title (often your domain). */\n subtitle?: string;\n /** Small uppercase label above the title (a section or category). */\n eyebrow?: string;\n /** A pill badge (e.g. \"NEW\", \"Guide\"). */\n badge?: string;\n /** Text/initial/emoji for the corner logo mark. */\n logo?: string;\n /** Footer line, bottom-left (e.g. your URL). */\n footer?: string;\n /** Accent gradient start / end. */\n from?: string;\n to?: string;\n /** \"dark\" (default) or \"light\" ground. */\n theme?: OgTheme;\n /** Layout preset. */\n preset?: OgPreset;\n /** Canvas size. Defaults to the OG standard 1200×630. */\n width?: number;\n height?: number;\n}\n\ninterface Resolved extends Required<Omit<OgOptions, \"subtitle\" | \"eyebrow\" | \"badge\" | \"logo\" | \"footer\">> {\n subtitle?: string;\n eyebrow?: string;\n badge?: string;\n logo?: string;\n footer?: string;\n}\n\nconst DEFAULTS = {\n from: \"#22d3ee\",\n to: \"#6366f1\",\n theme: \"dark\" as OgTheme,\n preset: \"gradient\" as OgPreset,\n width: 1200,\n height: 630,\n};\n\nfunction resolve(o: OgOptions): Resolved {\n return {\n title: o.title,\n subtitle: o.subtitle,\n eyebrow: o.eyebrow,\n badge: o.badge,\n logo: o.logo,\n footer: o.footer,\n from: o.from ?? DEFAULTS.from,\n to: o.to ?? DEFAULTS.to,\n theme: o.theme ?? DEFAULTS.theme,\n preset: o.preset ?? DEFAULTS.preset,\n width: o.width ?? DEFAULTS.width,\n height: o.height ?? DEFAULTS.height,\n };\n}\n\n/* ------------------------------------------------------------------ *\n * Shared design math\n * ------------------------------------------------------------------ */\n\n/** Pick a title font size that keeps long headlines readable and short ones bold. */\nexport function fitFontSize(\n title: string,\n opts: { max?: number; min?: number } = {},\n): number {\n const max = opts.max ?? 78;\n const min = opts.min ?? 42;\n const len = title.length;\n if (len <= 20) return max;\n if (len >= 90) return min;\n // Linear falloff between the two anchors.\n const t = (len - 20) / (90 - 20);\n return Math.round(max - t * (max - min));\n}\n\ninterface Palette {\n bg: string;\n fg: string;\n muted: string;\n border: string;\n from: string;\n to: string;\n}\n\nfunction palette(r: Resolved): Palette {\n const dark = r.theme === \"dark\";\n return {\n bg: dark ? \"#0a0a0f\" : \"#ffffff\",\n fg: dark ? \"#ffffff\" : \"#0a0a0f\",\n muted: dark ? \"rgba(255,255,255,0.68)\" : \"rgba(10,10,15,0.62)\",\n border: dark ? \"rgba(255,255,255,0.14)\" : \"rgba(10,10,15,0.10)\",\n from: r.from,\n to: r.to,\n };\n}\n\n/* ------------------------------------------------------------------ *\n * next/og element tree\n * ------------------------------------------------------------------ */\n\nexport type OgStyle = Record<string, string | number>;\nexport interface OgNode {\n type: string;\n props: { style?: OgStyle; children?: (OgNode | string)[] | OgNode | string; [k: string]: unknown };\n key?: null;\n}\n\nfunction el(type: string, style: OgStyle, children?: (OgNode | string)[] | OgNode | string): OgNode {\n return { type, key: null, props: { style, ...(children === undefined ? {} : { children }) } };\n}\n\n/**\n * Build a `next/og`-compatible element tree for a share card. Pass it straight\n * to `new ImageResponse(ogCard(opts) as any, { width, height })`.\n *\n * (The `as any` sidesteps a React type mismatch — the object is a valid Satori\n * node, which is what `next/og` renders under the hood.)\n */\nexport function ogCard(options: OgOptions): OgNode {\n const r = resolve(options);\n const p = palette(r);\n const pad = Math.round(r.width * 0.075);\n const titleSize = fitFontSize(r.title);\n\n const accentBar = el(\"div\", {\n position: \"absolute\",\n top: \"0\",\n left: \"0\",\n width: \"100%\",\n height: `${Math.round(r.height * 0.02)}px`,\n background: `linear-gradient(90deg, ${p.from}, ${p.to})`,\n });\n\n const glow = el(\"div\", {\n position: \"absolute\",\n top: `-${Math.round(r.height * 0.35)}px`,\n right: `-${Math.round(r.width * 0.18)}px`,\n width: `${Math.round(r.width * 0.55)}px`,\n height: `${Math.round(r.width * 0.55)}px`,\n borderRadius: \"9999px\",\n background: `linear-gradient(135deg, ${p.from}, ${p.to})`,\n opacity: r.theme === \"dark\" ? \"0.22\" : \"0.16\",\n filter: \"blur(20px)\",\n });\n\n const topRow: (OgNode | string)[] = [];\n if (r.eyebrow) {\n topRow.push(\n el(\n \"div\",\n {\n display: \"flex\",\n fontSize: \"26px\",\n fontWeight: 600,\n letterSpacing: \"0.12em\",\n textTransform: \"uppercase\",\n color: p.from,\n },\n r.eyebrow.toUpperCase(),\n ),\n );\n }\n if (r.badge) {\n topRow.push(\n el(\n \"div\",\n {\n display: \"flex\",\n alignItems: \"center\",\n padding: \"8px 20px\",\n borderRadius: \"9999px\",\n fontSize: \"24px\",\n fontWeight: 700,\n color: p.fg,\n background: `linear-gradient(90deg, ${p.from}33, ${p.to}33)`,\n border: `1px solid ${p.border}`,\n },\n r.badge,\n ),\n );\n }\n\n const header = el(\n \"div\",\n { display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", width: \"100%\" },\n [\n topRow.length\n ? el(\"div\", { display: \"flex\", gap: \"20px\", alignItems: \"center\" }, topRow)\n : el(\"div\", { display: \"flex\" }, \"\"),\n r.logo\n ? el(\n \"div\",\n {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"76px\",\n height: \"76px\",\n borderRadius: \"20px\",\n fontSize: \"40px\",\n fontWeight: 800,\n color: \"#0a0a0f\",\n background: `linear-gradient(135deg, ${p.from}, ${p.to})`,\n },\n r.logo,\n )\n : el(\"div\", { display: \"flex\" }, \"\"),\n ],\n );\n\n const body: (OgNode | string)[] = [\n el(\n \"div\",\n {\n display: \"flex\",\n fontSize: `${titleSize}px`,\n fontWeight: 800,\n lineHeight: 1.05,\n letterSpacing: \"-0.02em\",\n color: p.fg,\n },\n r.title,\n ),\n ];\n if (r.subtitle) {\n body.push(\n el(\n \"div\",\n { display: \"flex\", marginTop: \"28px\", fontSize: \"34px\", fontWeight: 500, color: p.muted },\n r.subtitle,\n ),\n );\n }\n\n const children: OgNode[] = [\n accentBar,\n glow,\n header,\n el(\"div\", { display: \"flex\", flexDirection: \"column\" }, body),\n ];\n\n if (r.footer) {\n children.push(\n el(\n \"div\",\n { display: \"flex\", fontSize: \"26px\", fontWeight: 500, color: p.muted },\n r.footer,\n ),\n );\n }\n\n return el(\n \"div\",\n {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n width: \"100%\",\n height: \"100%\",\n padding: `${pad}px`,\n background: r.preset === \"split\" ? `linear-gradient(135deg, ${p.from}, ${p.to})` : p.bg,\n color: p.fg,\n fontFamily: \"sans-serif\",\n },\n children,\n );\n}\n\n/* ------------------------------------------------------------------ *\n * Zero-dependency SVG (previews, emails, icons, guaranteed fallback)\n * ------------------------------------------------------------------ */\n\nfunction esc(s: string): string {\n return s.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n}\n\n/** Greedy word-wrap by estimated glyph width. */\nfunction wrap(text: string, fontSize: number, maxWidth: number, maxLines: number): string[] {\n const charW = fontSize * 0.56;\n const perLine = Math.max(1, Math.floor(maxWidth / charW));\n const words = text.split(/\\s+/);\n const lines: string[] = [];\n let cur = \"\";\n for (const w of words) {\n const next = cur ? `${cur} ${w}` : w;\n if (next.length > perLine && cur) {\n lines.push(cur);\n cur = w;\n if (lines.length === maxLines - 1) break;\n } else {\n cur = next;\n }\n }\n if (cur && lines.length < maxLines) lines.push(cur);\n const used = lines.join(\" \").length;\n if (used < text.length && lines.length) {\n lines[lines.length - 1] = `${lines[lines.length - 1]!.replace(/\\.*$/, \"\")}…`;\n }\n return lines;\n}\n\n/**\n * Render a share card as a standalone SVG string — no browser, no runtime deps.\n * Perfect for previews, email headers, README banners and icons.\n */\nexport function ogSvg(options: OgOptions): string {\n const r = resolve(options);\n const p = palette(r);\n const W = r.width;\n const H = r.height;\n const pad = Math.round(W * 0.075);\n const titleSize = fitFontSize(r.title);\n const contentW = W - pad * 2;\n const split = r.preset === \"split\";\n\n const titleLines = wrap(r.title, titleSize, contentW, 3);\n const titleBlockH = titleLines.length * titleSize * 1.08;\n const titleTop = H / 2 - titleBlockH / 2 + titleSize * 0.8;\n\n const parts: string[] = [];\n parts.push(\n `<svg width=\"${W}\" height=\"${H}\" viewBox=\"0 0 ${W} ${H}\" xmlns=\"http://www.w3.org/2000/svg\" font-family=\"Inter, ui-sans-serif, system-ui, sans-serif\">`,\n );\n parts.push(`<defs>\n <linearGradient id=\"accent\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n <stop offset=\"0\" stop-color=\"${esc(p.from)}\"/><stop offset=\"1\" stop-color=\"${esc(p.to)}\"/>\n </linearGradient>\n <radialGradient id=\"glow\" cx=\"0.85\" cy=\"0.1\" r=\"0.7\">\n <stop offset=\"0\" stop-color=\"${esc(p.from)}\" stop-opacity=\"${r.theme === \"dark\" ? 0.28 : 0.2}\"/>\n <stop offset=\"1\" stop-color=\"${esc(p.to)}\" stop-opacity=\"0\"/>\n </radialGradient>\n </defs>`);\n\n // background\n parts.push(`<rect width=\"${W}\" height=\"${H}\" fill=\"${split ? \"url(#accent)\" : esc(p.bg)}\"/>`);\n if (!split) parts.push(`<rect width=\"${W}\" height=\"${H}\" fill=\"url(#glow)\"/>`);\n // accent bar\n parts.push(`<rect width=\"${W}\" height=\"${Math.round(H * 0.02)}\" fill=\"url(#accent)\"/>`);\n\n // eyebrow\n let topY = pad + 34;\n if (r.eyebrow) {\n parts.push(\n `<text x=\"${pad}\" y=\"${topY}\" font-size=\"26\" font-weight=\"600\" letter-spacing=\"3\" fill=\"${esc(p.from)}\">${esc(\n r.eyebrow.toUpperCase(),\n )}</text>`,\n );\n }\n // logo mark (top-right)\n if (r.logo) {\n const s = 76;\n const lx = W - pad - s;\n const ly = pad;\n parts.push(`<rect x=\"${lx}\" y=\"${ly}\" width=\"${s}\" height=\"${s}\" rx=\"20\" fill=\"url(#accent)\"/>`);\n parts.push(\n `<text x=\"${lx + s / 2}\" y=\"${ly + s / 2 + 14}\" font-size=\"40\" font-weight=\"800\" text-anchor=\"middle\" fill=\"#0a0a0f\">${esc(\n r.logo,\n )}</text>`,\n );\n }\n // badge\n if (r.badge) {\n const bx = pad + (r.eyebrow ? 0 : 0);\n parts.push(\n `<rect x=\"${bx}\" y=\"${topY + 14}\" width=\"${r.badge.length * 16 + 40}\" height=\"44\" rx=\"22\" fill=\"${esc(\n p.from,\n )}\" opacity=\"0.18\"/>`,\n );\n parts.push(\n `<text x=\"${bx + 20}\" y=\"${topY + 43}\" font-size=\"24\" font-weight=\"700\" fill=\"${esc(p.fg)}\">${esc(\n r.badge,\n )}</text>`,\n );\n topY += 60;\n }\n\n // title (wrapped)\n titleLines.forEach((line, i) => {\n parts.push(\n `<text x=\"${pad}\" y=\"${titleTop + i * titleSize * 1.08}\" font-size=\"${titleSize}\" font-weight=\"800\" letter-spacing=\"-1\" fill=\"${esc(\n p.fg,\n )}\">${esc(line)}</text>`,\n );\n });\n // subtitle\n if (r.subtitle) {\n parts.push(\n `<text x=\"${pad}\" y=\"${titleTop + titleLines.length * titleSize * 1.08 + 46}\" font-size=\"34\" font-weight=\"500\" fill=\"${esc(\n p.muted,\n )}\">${esc(r.subtitle)}</text>`,\n );\n }\n // footer\n if (r.footer) {\n parts.push(\n `<text x=\"${pad}\" y=\"${H - pad}\" font-size=\"26\" font-weight=\"500\" fill=\"${esc(p.muted)}\">${esc(\n r.footer,\n )}</text>`,\n );\n }\n\n parts.push(`</svg>`);\n return parts.join(\"\");\n}\n\n/** SVG as a `data:` URI — drop straight into `src` / `background-image`. */\nexport function ogSvgDataUri(options: OgOptions): string {\n return `data:image/svg+xml;utf8,${encodeURIComponent(ogSvg(options))}`;\n}\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @lacspace/og\n * Beautiful, dynamic Open Graph images — a design system you configure once and\n * call per page. Produces a `next/og` element tree *and* a zero-dependency SVG\n * from the same options, with auto-fitting titles, presets and palettes.\n *\n * ```tsx\n * // app/og/route.tsx\n * import { ImageResponse } from \"next/og\";\n * import { ogCard } from \"@lacspace/og\";\n *\n * export const runtime = \"edge\";\n * export function GET(req: Request) {\n * const title = new URL(req.url).searchParams.get(\"title\") ?? \"My site\";\n * return new ImageResponse(\n * ogCard({ title, subtitle: \"my-site.com\", from: \"#22d3ee\", to: \"#6366f1\" }) as any,\n * { width: 1200, height: 630 },\n * );\n * }\n * ```\n *\n * Zero dependencies · isomorphic · fully typed.\n */\n\n/* ------------------------------------------------------------------ *\n * Options\n * ------------------------------------------------------------------ */\n\nexport type OgPreset = \"gradient\" | \"split\" | \"minimal\" | \"terminal\";\nexport type OgTheme = \"dark\" | \"light\";\n\nexport interface OgOptions {\n /** The headline. Font size auto-fits to length. */\n title: string;\n /** Secondary line under the title (often your domain). */\n subtitle?: string;\n /** Small uppercase label above the title (a section or category). */\n eyebrow?: string;\n /** A pill badge (e.g. \"NEW\", \"Guide\"). */\n badge?: string;\n /** Text/initial/emoji for the corner logo mark. */\n logo?: string;\n /** Footer line, bottom-left (e.g. your URL). */\n footer?: string;\n /** Accent gradient start / end. */\n from?: string;\n to?: string;\n /** \"dark\" (default) or \"light\" ground. */\n theme?: OgTheme;\n /** Layout preset. */\n preset?: OgPreset;\n /** Canvas size. Defaults to the OG standard 1200×630. */\n width?: number;\n height?: number;\n}\n\ninterface Resolved extends Required<Omit<OgOptions, \"subtitle\" | \"eyebrow\" | \"badge\" | \"logo\" | \"footer\">> {\n subtitle?: string;\n eyebrow?: string;\n badge?: string;\n logo?: string;\n footer?: string;\n}\n\nconst DEFAULTS = {\n from: \"#22d3ee\",\n to: \"#6366f1\",\n theme: \"dark\" as OgTheme,\n preset: \"gradient\" as OgPreset,\n width: 1200,\n height: 630,\n};\n\nfunction resolve(o: OgOptions): Resolved {\n return {\n title: o.title,\n subtitle: o.subtitle,\n eyebrow: o.eyebrow,\n badge: o.badge,\n logo: o.logo,\n footer: o.footer,\n from: o.from ?? DEFAULTS.from,\n to: o.to ?? DEFAULTS.to,\n theme: o.theme ?? DEFAULTS.theme,\n preset: o.preset ?? DEFAULTS.preset,\n width: o.width ?? DEFAULTS.width,\n height: o.height ?? DEFAULTS.height,\n };\n}\n\n/* ------------------------------------------------------------------ *\n * Shared design math\n * ------------------------------------------------------------------ */\n\n/** Pick a title font size that keeps long headlines readable and short ones bold. */\nexport function fitFontSize(\n title: string,\n opts: { max?: number; min?: number } = {},\n): number {\n const max = opts.max ?? 78;\n const min = opts.min ?? 42;\n const len = title.length;\n if (len <= 20) return max;\n if (len >= 90) return min;\n // Linear falloff between the two anchors.\n const t = (len - 20) / (90 - 20);\n return Math.round(max - t * (max - min));\n}\n\ninterface Palette {\n bg: string;\n fg: string;\n muted: string;\n border: string;\n from: string;\n to: string;\n}\n\nfunction palette(r: Resolved): Palette {\n const dark = r.theme === \"dark\";\n return {\n bg: dark ? \"#0a0a0f\" : \"#ffffff\",\n fg: dark ? \"#ffffff\" : \"#0a0a0f\",\n muted: dark ? \"rgba(255,255,255,0.68)\" : \"rgba(10,10,15,0.62)\",\n border: dark ? \"rgba(255,255,255,0.14)\" : \"rgba(10,10,15,0.10)\",\n from: r.from,\n to: r.to,\n };\n}\n\n/* ------------------------------------------------------------------ *\n * next/og element tree\n * ------------------------------------------------------------------ */\n\nexport type OgStyle = Record<string, string | number>;\nexport interface OgNode {\n type: string;\n props: { style?: OgStyle; children?: (OgNode | string)[] | OgNode | string; [k: string]: unknown };\n key?: null;\n}\n\nfunction el(type: string, style: OgStyle, children?: (OgNode | string)[] | OgNode | string): OgNode {\n return { type, key: null, props: { style, ...(children === undefined ? {} : { children }) } };\n}\n\n/**\n * Build a `next/og`-compatible element tree for a share card. Pass it straight\n * to `new ImageResponse(ogCard(opts) as any, { width, height })`.\n *\n * (The `as any` sidesteps a React type mismatch — the object is a valid Satori\n * node, which is what `next/og` renders under the hood.)\n */\nexport function ogCard(options: OgOptions): OgNode {\n const r = resolve(options);\n const p = palette(r);\n const pad = Math.round(r.width * 0.075);\n const titleSize = fitFontSize(r.title);\n\n const accentBar = el(\"div\", {\n position: \"absolute\",\n top: \"0\",\n left: \"0\",\n width: \"100%\",\n height: `${Math.round(r.height * 0.02)}px`,\n background: `linear-gradient(90deg, ${p.from}, ${p.to})`,\n });\n\n const glow = el(\"div\", {\n position: \"absolute\",\n top: `-${Math.round(r.height * 0.35)}px`,\n right: `-${Math.round(r.width * 0.18)}px`,\n width: `${Math.round(r.width * 0.55)}px`,\n height: `${Math.round(r.width * 0.55)}px`,\n borderRadius: \"9999px\",\n background: `linear-gradient(135deg, ${p.from}, ${p.to})`,\n opacity: r.theme === \"dark\" ? \"0.22\" : \"0.16\",\n filter: \"blur(20px)\",\n });\n\n const topRow: (OgNode | string)[] = [];\n if (r.eyebrow) {\n topRow.push(\n el(\n \"div\",\n {\n display: \"flex\",\n fontSize: \"26px\",\n fontWeight: 600,\n letterSpacing: \"0.12em\",\n textTransform: \"uppercase\",\n color: p.from,\n },\n r.eyebrow.toUpperCase(),\n ),\n );\n }\n if (r.badge) {\n topRow.push(\n el(\n \"div\",\n {\n display: \"flex\",\n alignItems: \"center\",\n padding: \"8px 20px\",\n borderRadius: \"9999px\",\n fontSize: \"24px\",\n fontWeight: 700,\n color: p.fg,\n background: `linear-gradient(90deg, ${p.from}33, ${p.to}33)`,\n border: `1px solid ${p.border}`,\n },\n r.badge,\n ),\n );\n }\n\n const header = el(\n \"div\",\n { display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", width: \"100%\" },\n [\n topRow.length\n ? el(\"div\", { display: \"flex\", gap: \"20px\", alignItems: \"center\" }, topRow)\n : el(\"div\", { display: \"flex\" }, \"\"),\n r.logo\n ? el(\n \"div\",\n {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"76px\",\n height: \"76px\",\n borderRadius: \"20px\",\n fontSize: \"40px\",\n fontWeight: 800,\n color: \"#0a0a0f\",\n background: `linear-gradient(135deg, ${p.from}, ${p.to})`,\n },\n r.logo,\n )\n : el(\"div\", { display: \"flex\" }, \"\"),\n ],\n );\n\n const body: (OgNode | string)[] = [\n el(\n \"div\",\n {\n display: \"flex\",\n fontSize: `${titleSize}px`,\n fontWeight: 800,\n lineHeight: 1.05,\n letterSpacing: \"-0.02em\",\n color: p.fg,\n },\n r.title,\n ),\n ];\n if (r.subtitle) {\n body.push(\n el(\n \"div\",\n { display: \"flex\", marginTop: \"28px\", fontSize: \"34px\", fontWeight: 500, color: p.muted },\n r.subtitle,\n ),\n );\n }\n\n const children: OgNode[] = [\n accentBar,\n glow,\n header,\n el(\"div\", { display: \"flex\", flexDirection: \"column\" }, body),\n ];\n\n if (r.footer) {\n children.push(\n el(\n \"div\",\n { display: \"flex\", fontSize: \"26px\", fontWeight: 500, color: p.muted },\n r.footer,\n ),\n );\n }\n\n return el(\n \"div\",\n {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n width: \"100%\",\n height: \"100%\",\n padding: `${pad}px`,\n background: r.preset === \"split\" ? `linear-gradient(135deg, ${p.from}, ${p.to})` : p.bg,\n color: p.fg,\n fontFamily: \"sans-serif\",\n },\n children,\n );\n}\n\n/* ------------------------------------------------------------------ *\n * Zero-dependency SVG (previews, emails, icons, guaranteed fallback)\n * ------------------------------------------------------------------ */\n\nfunction esc(s: string): string {\n return s\n .replace(/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F]/g, \"\")\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\");\n}\n\n/** Greedy word-wrap by estimated glyph width. */\nfunction wrap(text: string, fontSize: number, maxWidth: number, maxLines: number): string[] {\n const charW = fontSize * 0.56;\n const perLine = Math.max(1, Math.floor(maxWidth / charW));\n const words = text.split(/\\s+/);\n const lines: string[] = [];\n let cur = \"\";\n for (const w of words) {\n const next = cur ? `${cur} ${w}` : w;\n if (next.length > perLine && cur) {\n lines.push(cur);\n cur = w;\n if (lines.length === maxLines - 1) break;\n } else {\n cur = next;\n }\n }\n if (cur && lines.length < maxLines) lines.push(cur);\n const used = lines.join(\" \").length;\n if (used < text.length && lines.length) {\n lines[lines.length - 1] = `${lines[lines.length - 1]!.replace(/\\.*$/, \"\")}…`;\n }\n return lines;\n}\n\n/**\n * Render a share card as a standalone SVG string — no browser, no runtime deps.\n * Perfect for previews, email headers, README banners and icons.\n */\nexport function ogSvg(options: OgOptions): string {\n const r = resolve(options);\n const p = palette(r);\n const W = r.width;\n const H = r.height;\n const pad = Math.round(W * 0.075);\n const titleSize = fitFontSize(r.title);\n const contentW = W - pad * 2;\n const split = r.preset === \"split\";\n\n const titleLines = wrap(r.title, titleSize, contentW, 3);\n const titleBlockH = titleLines.length * titleSize * 1.08;\n const titleTop = H / 2 - titleBlockH / 2 + titleSize * 0.8;\n\n const parts: string[] = [];\n parts.push(\n `<svg width=\"${W}\" height=\"${H}\" viewBox=\"0 0 ${W} ${H}\" xmlns=\"http://www.w3.org/2000/svg\" font-family=\"Inter, ui-sans-serif, system-ui, sans-serif\">`,\n );\n parts.push(`<defs>\n <linearGradient id=\"accent\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n <stop offset=\"0\" stop-color=\"${esc(p.from)}\"/><stop offset=\"1\" stop-color=\"${esc(p.to)}\"/>\n </linearGradient>\n <radialGradient id=\"glow\" cx=\"0.85\" cy=\"0.1\" r=\"0.7\">\n <stop offset=\"0\" stop-color=\"${esc(p.from)}\" stop-opacity=\"${r.theme === \"dark\" ? 0.28 : 0.2}\"/>\n <stop offset=\"1\" stop-color=\"${esc(p.to)}\" stop-opacity=\"0\"/>\n </radialGradient>\n </defs>`);\n\n // background\n parts.push(`<rect width=\"${W}\" height=\"${H}\" fill=\"${split ? \"url(#accent)\" : esc(p.bg)}\"/>`);\n if (!split) parts.push(`<rect width=\"${W}\" height=\"${H}\" fill=\"url(#glow)\"/>`);\n // accent bar\n parts.push(`<rect width=\"${W}\" height=\"${Math.round(H * 0.02)}\" fill=\"url(#accent)\"/>`);\n\n // eyebrow\n let topY = pad + 34;\n if (r.eyebrow) {\n parts.push(\n `<text x=\"${pad}\" y=\"${topY}\" font-size=\"26\" font-weight=\"600\" letter-spacing=\"3\" fill=\"${esc(p.from)}\">${esc(\n r.eyebrow.toUpperCase(),\n )}</text>`,\n );\n }\n // logo mark (top-right)\n if (r.logo) {\n const s = 76;\n const lx = W - pad - s;\n const ly = pad;\n parts.push(`<rect x=\"${lx}\" y=\"${ly}\" width=\"${s}\" height=\"${s}\" rx=\"20\" fill=\"url(#accent)\"/>`);\n parts.push(\n `<text x=\"${lx + s / 2}\" y=\"${ly + s / 2 + 14}\" font-size=\"40\" font-weight=\"800\" text-anchor=\"middle\" fill=\"#0a0a0f\">${esc(\n r.logo,\n )}</text>`,\n );\n }\n // badge\n if (r.badge) {\n const bx = pad + (r.eyebrow ? 0 : 0);\n parts.push(\n `<rect x=\"${bx}\" y=\"${topY + 14}\" width=\"${r.badge.length * 16 + 40}\" height=\"44\" rx=\"22\" fill=\"${esc(\n p.from,\n )}\" opacity=\"0.18\"/>`,\n );\n parts.push(\n `<text x=\"${bx + 20}\" y=\"${topY + 43}\" font-size=\"24\" font-weight=\"700\" fill=\"${esc(p.fg)}\">${esc(\n r.badge,\n )}</text>`,\n );\n topY += 60;\n }\n\n // title (wrapped)\n titleLines.forEach((line, i) => {\n parts.push(\n `<text x=\"${pad}\" y=\"${titleTop + i * titleSize * 1.08}\" font-size=\"${titleSize}\" font-weight=\"800\" letter-spacing=\"-1\" fill=\"${esc(\n p.fg,\n )}\">${esc(line)}</text>`,\n );\n });\n // subtitle\n if (r.subtitle) {\n parts.push(\n `<text x=\"${pad}\" y=\"${titleTop + titleLines.length * titleSize * 1.08 + 46}\" font-size=\"34\" font-weight=\"500\" fill=\"${esc(\n p.muted,\n )}\">${esc(r.subtitle)}</text>`,\n );\n }\n // footer\n if (r.footer) {\n parts.push(\n `<text x=\"${pad}\" y=\"${H - pad}\" font-size=\"26\" font-weight=\"500\" fill=\"${esc(p.muted)}\">${esc(\n r.footer,\n )}</text>`,\n );\n }\n\n parts.push(`</svg>`);\n return parts.join(\"\");\n}\n\n/** SVG as a `data:` URI — drop straight into `src` / `background-image`. */\nexport function ogSvgDataUri(options: OgOptions): string {\n return `data:image/svg+xml;utf8,${encodeURIComponent(ogSvg(options))}`;\n}\n\n/* ================================================================== *\n * More card layouts (new, backward-compatible additions)\n *\n * Each function below returns the same element-tree shape `ogCard`\n * returns — pass straight to `new ImageResponse(fn(opts) as any, …)`.\n * Zero deps, isomorphic, edge-safe. All optional fields degrade\n * gracefully when missing, and titles keep auto-scaling via\n * `fitFontSize`.\n * ================================================================== */\n\n/**\n * Named gradient presets ({ from, to }). Pass a `gradient` name to any of the\n * new card functions as a shorthand for explicit `from`/`to` — an explicit\n * `from`/`to` always wins over the preset.\n */\nexport const ogThemes = {\n lacspace: { from: \"#22d3ee\", to: \"#6366f1\" },\n ocean: { from: \"#0ea5e9\", to: \"#2563eb\" },\n sunset: { from: \"#f43f5e\", to: \"#f59e0b\" },\n forest: { from: \"#10b981\", to: \"#065f46\" },\n grape: { from: \"#a855f7\", to: \"#6366f1\" },\n slate: { from: \"#94a3b8\", to: \"#1e293b\" },\n} as const;\n\nexport type OgThemeName = keyof typeof ogThemes;\n\n/** Optional faint background texture behind card content. */\nexport type OgPattern = \"dots\" | \"glow\" | \"none\";\n\n/** Options shared by the new card layouts — a superset of {@link OgOptions}. */\nexport interface OgCardOptions extends OgOptions {\n /** A named gradient from {@link ogThemes}; shorthand for `from`/`to`. */\n gradient?: OgThemeName;\n /** Subtle background texture. Defaults to `\"none\"`. */\n pattern?: OgPattern;\n}\n\n/** Options for {@link ogArticle}. */\nexport interface OgArticleOptions extends OgCardOptions {\n /** Author / byline shown in the footer row. */\n author?: string;\n /** Publish date shown in the footer row. */\n date?: string;\n /** Optional reading time (e.g. `\"6 min read\"`). */\n readingTime?: string;\n}\n\n/** Options for {@link ogProduct}. */\nexport interface OgProductOptions extends OgCardOptions {\n /** The price value (rendered large). */\n price?: string | number;\n /** Currency symbol / code prefixed to the price (e.g. `\"$\"`, `\"रु\"`). */\n currency?: string;\n}\n\n/** Apply a named gradient preset unless explicit from/to were given. */\nfunction withGradient<T extends OgCardOptions>(o: T): T {\n if (o.gradient && ogThemes[o.gradient]) {\n const g = ogThemes[o.gradient];\n return { ...o, from: o.from ?? g.from, to: o.to ?? g.to };\n }\n return o;\n}\n\n/** Reusable soft radial glow (matches `ogCard`'s glow). */\nfunction glowLayer(r: Resolved, p: Palette): OgNode {\n return el(\"div\", {\n position: \"absolute\",\n top: `-${Math.round(r.height * 0.35)}px`,\n right: `-${Math.round(r.width * 0.18)}px`,\n width: `${Math.round(r.width * 0.55)}px`,\n height: `${Math.round(r.width * 0.55)}px`,\n borderRadius: \"9999px\",\n background: `linear-gradient(135deg, ${p.from}, ${p.to})`,\n opacity: r.theme === \"dark\" ? \"0.22\" : \"0.16\",\n filter: \"blur(20px)\",\n });\n}\n\n/**\n * Build an absolutely-positioned texture layer. Placed FIRST in a card's\n * children so it paints behind the content (Satori paints in document order).\n * `over` picks colours that read well on a solid ground vs. a gradient fill.\n */\nfunction patternLayer(\n kind: OgPattern | undefined,\n r: Resolved,\n p: Palette,\n over: \"ground\" | \"gradient\" = \"ground\",\n): OgNode | null {\n const k = kind ?? \"none\";\n if (k === \"none\") return null;\n if (k === \"glow\") {\n if (over === \"gradient\") {\n return el(\"div\", {\n position: \"absolute\",\n top: \"0\",\n left: \"0\",\n width: \"100%\",\n height: \"100%\",\n background:\n \"radial-gradient(circle at 82% 12%, rgba(255,255,255,0.28), transparent 55%)\",\n });\n }\n return glowLayer(r, p);\n }\n // dots\n const dot =\n over === \"gradient\"\n ? \"rgba(255,255,255,0.16)\"\n : r.theme === \"dark\"\n ? \"rgba(255,255,255,0.10)\"\n : \"rgba(10,10,15,0.08)\";\n return el(\"div\", {\n position: \"absolute\",\n top: \"0\",\n left: \"0\",\n width: \"100%\",\n height: \"100%\",\n backgroundImage: `radial-gradient(${dot} 2px, transparent 2px)`,\n backgroundSize: \"44px 44px\",\n });\n}\n\n/** Small uppercase eyebrow node (accent-coloured). */\nfunction eyebrowNode(text: string, color: string): OgNode {\n return el(\n \"div\",\n {\n display: \"flex\",\n fontSize: \"26px\",\n fontWeight: 600,\n letterSpacing: \"0.12em\",\n textTransform: \"uppercase\",\n color,\n },\n text.toUpperCase(),\n );\n}\n\n/** Pill badge node. */\nfunction badgeNode(text: string, p: Palette): OgNode {\n return el(\n \"div\",\n {\n display: \"flex\",\n alignItems: \"center\",\n padding: \"8px 20px\",\n borderRadius: \"9999px\",\n fontSize: \"24px\",\n fontWeight: 700,\n color: p.fg,\n background: `linear-gradient(90deg, ${p.from}33, ${p.to}33)`,\n border: `1px solid ${p.border}`,\n },\n text,\n );\n}\n\n/**\n * Two-column layout: eyebrow / title / subtitle / badge on the left, a large\n * gradient accent panel on the right showing the `logo` (or the title's first\n * letter as a fallback).\n */\nexport function ogCardSplit(options: OgCardOptions): OgNode {\n const r = resolve(withGradient(options));\n const p = palette(r);\n const pad = Math.round(r.width * 0.065);\n const titleSize = fitFontSize(r.title, { max: 68, min: 40 });\n\n const leftChildren: (OgNode | string)[] = [];\n if (r.eyebrow) leftChildren.push(eyebrowNode(r.eyebrow, p.from));\n leftChildren.push(\n el(\n \"div\",\n {\n display: \"flex\",\n fontSize: `${titleSize}px`,\n fontWeight: 800,\n lineHeight: 1.05,\n letterSpacing: \"-0.02em\",\n color: p.fg,\n },\n r.title,\n ),\n );\n if (r.subtitle) {\n leftChildren.push(\n el(\n \"div\",\n { display: \"flex\", fontSize: \"32px\", fontWeight: 500, color: p.muted },\n r.subtitle,\n ),\n );\n }\n if (r.badge) leftChildren.push(badgeNode(r.badge, p));\n\n const left = el(\n \"div\",\n {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n gap: \"24px\",\n width: \"62%\",\n height: \"100%\",\n padding: `${pad}px`,\n },\n leftChildren,\n );\n\n const mark = r.logo ?? (r.title.trim().charAt(0).toUpperCase() || \"•\");\n const right = el(\n \"div\",\n {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"38%\",\n height: \"100%\",\n background: `linear-gradient(135deg, ${p.from}, ${p.to})`,\n },\n [\n el(\n \"div\",\n { display: \"flex\", fontSize: \"220px\", fontWeight: 800, color: \"#0a0a0f\" },\n mark,\n ),\n ],\n );\n\n const children: OgNode[] = [];\n const pat = patternLayer(options.pattern, r, p);\n if (pat) children.push(pat);\n children.push(left, right);\n if (r.footer) {\n children.push(\n el(\n \"div\",\n {\n position: \"absolute\",\n bottom: `${Math.round(pad * 0.7)}px`,\n left: `${pad}px`,\n display: \"flex\",\n fontSize: \"26px\",\n fontWeight: 500,\n color: p.muted,\n },\n r.footer,\n ),\n );\n }\n\n return el(\n \"div\",\n {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"row\",\n width: \"100%\",\n height: \"100%\",\n background: p.bg,\n color: p.fg,\n fontFamily: \"sans-serif\",\n },\n children,\n );\n}\n\n/**\n * A big centered title on a full-bleed gradient background — minimal chrome.\n * Optional eyebrow above and subtitle below the title.\n */\nexport function ogCardMinimal(options: OgCardOptions): OgNode {\n const r = resolve(withGradient(options));\n const p = palette(r);\n const pad = Math.round(r.width * 0.09);\n const titleSize = fitFontSize(r.title, { max: 96, min: 52 });\n\n const center: (OgNode | string)[] = [];\n if (r.eyebrow) {\n center.push(\n el(\n \"div\",\n {\n display: \"flex\",\n fontSize: \"28px\",\n fontWeight: 600,\n letterSpacing: \"0.16em\",\n textTransform: \"uppercase\",\n color: \"rgba(255,255,255,0.85)\",\n },\n r.eyebrow.toUpperCase(),\n ),\n );\n }\n center.push(\n el(\n \"div\",\n {\n display: \"flex\",\n fontSize: `${titleSize}px`,\n fontWeight: 800,\n lineHeight: 1.04,\n letterSpacing: \"-0.02em\",\n color: \"#ffffff\",\n textAlign: \"center\",\n },\n r.title,\n ),\n );\n if (r.subtitle) {\n center.push(\n el(\n \"div\",\n {\n display: \"flex\",\n fontSize: \"34px\",\n fontWeight: 500,\n color: \"rgba(255,255,255,0.82)\",\n textAlign: \"center\",\n },\n r.subtitle,\n ),\n );\n }\n\n const children: OgNode[] = [];\n const pat = patternLayer(options.pattern, r, p, \"gradient\");\n if (pat) children.push(pat);\n children.push(\n el(\n \"div\",\n {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: \"28px\",\n width: \"100%\",\n height: \"100%\",\n padding: `${pad}px`,\n },\n center,\n ),\n );\n if (r.footer) {\n children.push(\n el(\n \"div\",\n {\n position: \"absolute\",\n bottom: `${Math.round(r.height * 0.06)}px`,\n left: \"0\",\n width: \"100%\",\n display: \"flex\",\n justifyContent: \"center\",\n fontSize: \"26px\",\n fontWeight: 500,\n color: \"rgba(255,255,255,0.78)\",\n },\n r.footer,\n ),\n );\n }\n\n return el(\n \"div\",\n {\n position: \"relative\",\n display: \"flex\",\n width: \"100%\",\n height: \"100%\",\n background: `linear-gradient(135deg, ${p.from}, ${p.to})`,\n color: \"#ffffff\",\n fontFamily: \"sans-serif\",\n },\n children,\n );\n}\n\n/** A muted separator dot for footer rows. */\nfunction metaDot(color: string): OgNode {\n return el(\n \"div\",\n { display: \"flex\", fontSize: \"26px\", color, opacity: \"0.6\" },\n \"·\",\n );\n}\n\n/**\n * An article / blog share card: category eyebrow, headline, and a footer row\n * with author · date · optional reading time. Missing meta simply drops out.\n */\nexport function ogArticle(options: OgArticleOptions): OgNode {\n const r = resolve(withGradient(options));\n const p = palette(r);\n const pad = Math.round(r.width * 0.075);\n const titleSize = fitFontSize(r.title, { max: 74, min: 40 });\n\n const accentBar = el(\"div\", {\n position: \"absolute\",\n top: \"0\",\n left: \"0\",\n width: \"100%\",\n height: `${Math.round(r.height * 0.02)}px`,\n background: `linear-gradient(90deg, ${p.from}, ${p.to})`,\n });\n\n // Header: category eyebrow + optional logo mark.\n const header = el(\n \"div\",\n {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n width: \"100%\",\n },\n [\n r.eyebrow\n ? eyebrowNode(r.eyebrow, p.from)\n : el(\"div\", { display: \"flex\" }, \"\"),\n r.logo\n ? el(\n \"div\",\n {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"72px\",\n height: \"72px\",\n borderRadius: \"18px\",\n fontSize: \"38px\",\n fontWeight: 800,\n color: \"#0a0a0f\",\n background: `linear-gradient(135deg, ${p.from}, ${p.to})`,\n },\n r.logo,\n )\n : el(\"div\", { display: \"flex\" }, \"\"),\n ],\n );\n\n const title = el(\n \"div\",\n {\n display: \"flex\",\n fontSize: `${titleSize}px`,\n fontWeight: 800,\n lineHeight: 1.06,\n letterSpacing: \"-0.02em\",\n color: p.fg,\n },\n r.title,\n );\n\n // Footer meta row: author · date · reading time.\n const metaItems: OgNode[] = [];\n if (options.author) {\n metaItems.push(\n el(\n \"div\",\n { display: \"flex\", fontSize: \"28px\", fontWeight: 700, color: p.fg },\n options.author,\n ),\n );\n }\n const muted = (t: string) =>\n el(\n \"div\",\n { display: \"flex\", fontSize: \"26px\", fontWeight: 500, color: p.muted },\n t,\n );\n if (options.date) {\n if (metaItems.length) metaItems.push(metaDot(p.muted));\n metaItems.push(muted(options.date));\n }\n if (options.readingTime) {\n if (metaItems.length) metaItems.push(metaDot(p.muted));\n metaItems.push(muted(options.readingTime));\n }\n const footerRow = metaItems.length\n ? el(\n \"div\",\n { display: \"flex\", alignItems: \"center\", gap: \"16px\" },\n metaItems,\n )\n : r.footer\n ? muted(r.footer)\n : el(\"div\", { display: \"flex\" }, \"\");\n\n const children: OgNode[] = [accentBar];\n const pat = patternLayer(options.pattern, r, p);\n if (pat) children.push(pat);\n children.push(\n header,\n el(\"div\", { display: \"flex\", flexDirection: \"column\" }, [title]),\n footerRow,\n );\n\n return el(\n \"div\",\n {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n width: \"100%\",\n height: \"100%\",\n padding: `${pad}px`,\n background: p.bg,\n color: p.fg,\n fontFamily: \"sans-serif\",\n },\n children,\n );\n}\n\n/**\n * A product / pricing share card: optional badge, title, subtitle and a large\n * price with an optional currency prefix.\n */\nexport function ogProduct(options: OgProductOptions): OgNode {\n const r = resolve(withGradient(options));\n const p = palette(r);\n const pad = Math.round(r.width * 0.075);\n const titleSize = fitFontSize(r.title, { max: 76, min: 42 });\n\n // Header: badge (left) + optional logo mark (right).\n const header = el(\n \"div\",\n {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n width: \"100%\",\n },\n [\n r.badge ? badgeNode(r.badge, p) : el(\"div\", { display: \"flex\" }, \"\"),\n r.logo\n ? el(\n \"div\",\n {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"76px\",\n height: \"76px\",\n borderRadius: \"20px\",\n fontSize: \"40px\",\n fontWeight: 800,\n color: \"#0a0a0f\",\n background: `linear-gradient(135deg, ${p.from}, ${p.to})`,\n },\n r.logo,\n )\n : el(\"div\", { display: \"flex\" }, \"\"),\n ],\n );\n\n const body: (OgNode | string)[] = [\n el(\n \"div\",\n {\n display: \"flex\",\n fontSize: `${titleSize}px`,\n fontWeight: 800,\n lineHeight: 1.05,\n letterSpacing: \"-0.02em\",\n color: p.fg,\n },\n r.title,\n ),\n ];\n if (r.subtitle) {\n body.push(\n el(\n \"div\",\n {\n display: \"flex\",\n marginTop: \"22px\",\n fontSize: \"32px\",\n fontWeight: 500,\n color: p.muted,\n },\n r.subtitle,\n ),\n );\n }\n\n const priceStr =\n options.price === undefined || options.price === null\n ? undefined\n : `${options.currency ?? \"\"}${options.price}`;\n const priceNode = priceStr\n ? el(\n \"div\",\n {\n display: \"flex\",\n alignItems: \"center\",\n fontSize: \"88px\",\n fontWeight: 800,\n letterSpacing: \"-0.02em\",\n background: `linear-gradient(90deg, ${p.from}, ${p.to})`,\n backgroundClip: \"text\",\n color: \"transparent\",\n },\n priceStr,\n )\n : r.footer\n ? el(\n \"div\",\n { display: \"flex\", fontSize: \"26px\", fontWeight: 500, color: p.muted },\n r.footer,\n )\n : el(\"div\", { display: \"flex\" }, \"\");\n\n const children: OgNode[] = [];\n const pat = patternLayer(options.pattern, r, p);\n if (pat) children.push(pat);\n children.push(\n header,\n el(\"div\", { display: \"flex\", flexDirection: \"column\" }, body),\n priceNode,\n );\n\n return el(\n \"div\",\n {\n position: \"relative\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"space-between\",\n width: \"100%\",\n height: \"100%\",\n padding: `${pad}px`,\n background: p.bg,\n color: p.fg,\n fontFamily: \"sans-serif\",\n },\n children,\n );\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -77,5 +77,83 @@ declare function ogCard(options: OgOptions): OgNode;
77
77
  declare function ogSvg(options: OgOptions): string;
78
78
  /** SVG as a `data:` URI — drop straight into `src` / `background-image`. */
79
79
  declare function ogSvgDataUri(options: OgOptions): string;
80
+ /**
81
+ * Named gradient presets ({ from, to }). Pass a `gradient` name to any of the
82
+ * new card functions as a shorthand for explicit `from`/`to` — an explicit
83
+ * `from`/`to` always wins over the preset.
84
+ */
85
+ declare const ogThemes: {
86
+ readonly lacspace: {
87
+ readonly from: "#22d3ee";
88
+ readonly to: "#6366f1";
89
+ };
90
+ readonly ocean: {
91
+ readonly from: "#0ea5e9";
92
+ readonly to: "#2563eb";
93
+ };
94
+ readonly sunset: {
95
+ readonly from: "#f43f5e";
96
+ readonly to: "#f59e0b";
97
+ };
98
+ readonly forest: {
99
+ readonly from: "#10b981";
100
+ readonly to: "#065f46";
101
+ };
102
+ readonly grape: {
103
+ readonly from: "#a855f7";
104
+ readonly to: "#6366f1";
105
+ };
106
+ readonly slate: {
107
+ readonly from: "#94a3b8";
108
+ readonly to: "#1e293b";
109
+ };
110
+ };
111
+ type OgThemeName = keyof typeof ogThemes;
112
+ /** Optional faint background texture behind card content. */
113
+ type OgPattern = "dots" | "glow" | "none";
114
+ /** Options shared by the new card layouts — a superset of {@link OgOptions}. */
115
+ interface OgCardOptions extends OgOptions {
116
+ /** A named gradient from {@link ogThemes}; shorthand for `from`/`to`. */
117
+ gradient?: OgThemeName;
118
+ /** Subtle background texture. Defaults to `"none"`. */
119
+ pattern?: OgPattern;
120
+ }
121
+ /** Options for {@link ogArticle}. */
122
+ interface OgArticleOptions extends OgCardOptions {
123
+ /** Author / byline shown in the footer row. */
124
+ author?: string;
125
+ /** Publish date shown in the footer row. */
126
+ date?: string;
127
+ /** Optional reading time (e.g. `"6 min read"`). */
128
+ readingTime?: string;
129
+ }
130
+ /** Options for {@link ogProduct}. */
131
+ interface OgProductOptions extends OgCardOptions {
132
+ /** The price value (rendered large). */
133
+ price?: string | number;
134
+ /** Currency symbol / code prefixed to the price (e.g. `"$"`, `"रु"`). */
135
+ currency?: string;
136
+ }
137
+ /**
138
+ * Two-column layout: eyebrow / title / subtitle / badge on the left, a large
139
+ * gradient accent panel on the right showing the `logo` (or the title's first
140
+ * letter as a fallback).
141
+ */
142
+ declare function ogCardSplit(options: OgCardOptions): OgNode;
143
+ /**
144
+ * A big centered title on a full-bleed gradient background — minimal chrome.
145
+ * Optional eyebrow above and subtitle below the title.
146
+ */
147
+ declare function ogCardMinimal(options: OgCardOptions): OgNode;
148
+ /**
149
+ * An article / blog share card: category eyebrow, headline, and a footer row
150
+ * with author · date · optional reading time. Missing meta simply drops out.
151
+ */
152
+ declare function ogArticle(options: OgArticleOptions): OgNode;
153
+ /**
154
+ * A product / pricing share card: optional badge, title, subtitle and a large
155
+ * price with an optional currency prefix.
156
+ */
157
+ declare function ogProduct(options: OgProductOptions): OgNode;
80
158
 
81
- export { type OgNode, type OgOptions, type OgPreset, type OgStyle, type OgTheme, fitFontSize, ogCard, ogSvg, ogSvgDataUri };
159
+ export { type OgArticleOptions, type OgCardOptions, type OgNode, type OgOptions, type OgPattern, type OgPreset, type OgProductOptions, type OgStyle, type OgTheme, type OgThemeName, fitFontSize, ogArticle, ogCard, ogCardMinimal, ogCardSplit, ogProduct, ogSvg, ogSvgDataUri, ogThemes };
package/dist/index.d.ts CHANGED
@@ -77,5 +77,83 @@ declare function ogCard(options: OgOptions): OgNode;
77
77
  declare function ogSvg(options: OgOptions): string;
78
78
  /** SVG as a `data:` URI — drop straight into `src` / `background-image`. */
79
79
  declare function ogSvgDataUri(options: OgOptions): string;
80
+ /**
81
+ * Named gradient presets ({ from, to }). Pass a `gradient` name to any of the
82
+ * new card functions as a shorthand for explicit `from`/`to` — an explicit
83
+ * `from`/`to` always wins over the preset.
84
+ */
85
+ declare const ogThemes: {
86
+ readonly lacspace: {
87
+ readonly from: "#22d3ee";
88
+ readonly to: "#6366f1";
89
+ };
90
+ readonly ocean: {
91
+ readonly from: "#0ea5e9";
92
+ readonly to: "#2563eb";
93
+ };
94
+ readonly sunset: {
95
+ readonly from: "#f43f5e";
96
+ readonly to: "#f59e0b";
97
+ };
98
+ readonly forest: {
99
+ readonly from: "#10b981";
100
+ readonly to: "#065f46";
101
+ };
102
+ readonly grape: {
103
+ readonly from: "#a855f7";
104
+ readonly to: "#6366f1";
105
+ };
106
+ readonly slate: {
107
+ readonly from: "#94a3b8";
108
+ readonly to: "#1e293b";
109
+ };
110
+ };
111
+ type OgThemeName = keyof typeof ogThemes;
112
+ /** Optional faint background texture behind card content. */
113
+ type OgPattern = "dots" | "glow" | "none";
114
+ /** Options shared by the new card layouts — a superset of {@link OgOptions}. */
115
+ interface OgCardOptions extends OgOptions {
116
+ /** A named gradient from {@link ogThemes}; shorthand for `from`/`to`. */
117
+ gradient?: OgThemeName;
118
+ /** Subtle background texture. Defaults to `"none"`. */
119
+ pattern?: OgPattern;
120
+ }
121
+ /** Options for {@link ogArticle}. */
122
+ interface OgArticleOptions extends OgCardOptions {
123
+ /** Author / byline shown in the footer row. */
124
+ author?: string;
125
+ /** Publish date shown in the footer row. */
126
+ date?: string;
127
+ /** Optional reading time (e.g. `"6 min read"`). */
128
+ readingTime?: string;
129
+ }
130
+ /** Options for {@link ogProduct}. */
131
+ interface OgProductOptions extends OgCardOptions {
132
+ /** The price value (rendered large). */
133
+ price?: string | number;
134
+ /** Currency symbol / code prefixed to the price (e.g. `"$"`, `"रु"`). */
135
+ currency?: string;
136
+ }
137
+ /**
138
+ * Two-column layout: eyebrow / title / subtitle / badge on the left, a large
139
+ * gradient accent panel on the right showing the `logo` (or the title's first
140
+ * letter as a fallback).
141
+ */
142
+ declare function ogCardSplit(options: OgCardOptions): OgNode;
143
+ /**
144
+ * A big centered title on a full-bleed gradient background — minimal chrome.
145
+ * Optional eyebrow above and subtitle below the title.
146
+ */
147
+ declare function ogCardMinimal(options: OgCardOptions): OgNode;
148
+ /**
149
+ * An article / blog share card: category eyebrow, headline, and a footer row
150
+ * with author · date · optional reading time. Missing meta simply drops out.
151
+ */
152
+ declare function ogArticle(options: OgArticleOptions): OgNode;
153
+ /**
154
+ * A product / pricing share card: optional badge, title, subtitle and a large
155
+ * price with an optional currency prefix.
156
+ */
157
+ declare function ogProduct(options: OgProductOptions): OgNode;
80
158
 
81
- export { type OgNode, type OgOptions, type OgPreset, type OgStyle, type OgTheme, fitFontSize, ogCard, ogSvg, ogSvgDataUri };
159
+ export { type OgArticleOptions, type OgCardOptions, type OgNode, type OgOptions, type OgPattern, type OgPreset, type OgProductOptions, type OgStyle, type OgTheme, type OgThemeName, fitFontSize, ogArticle, ogCard, ogCardMinimal, ogCardSplit, ogProduct, ogSvg, ogSvgDataUri, ogThemes };