Files
aragrp/components/blog-pullquote.tsx
alirez.brandCursor a47ec493c5 feat: add version history drawer with release notes
Introduce a footer-triggered Version History drawer with categorized release notes, hardcoded release data, and semver tracking at v0.3.0. Also ships blog blockquote/table styling, site-wide typography, home page image updates, header refinements, and related bug fixes.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-02 02:46:20 +03:30

42 lines
1.4 KiB
TypeScript

import type { BlockquoteBlockPayload } from "@/lib/blog-blocks";
import { sanitizeBlockquoteContent } from "@/lib/blockquote-content";
import { blockquoteVariantClass } from "@/components/blog-blockquote-styles";
import { BlogBlockquoteDecorations } from "@/components/blog-blockquote-decorations";
import { cn } from "@/lib/utils";
import { Quote } from "lucide-react";
interface BlogPullquoteProps {
payload: BlockquoteBlockPayload;
}
export function BlogPullquote({ payload }: BlogPullquoteProps) {
const { content, citation, variant = "gray" } = payload;
const cleanContent = sanitizeBlockquoteContent(content);
if (!cleanContent.trim()) return null;
return (
<figure className="my-10 not-prose">
<blockquote
className={cn(
"blog-blockquote blog-pullquote text-foreground",
blockquoteVariantClass[variant]
)}
>
<BlogBlockquoteDecorations variant={variant} />
<Quote className="blog-blockquote__icon" aria-hidden />
<div
className="blog-blockquote__content"
dangerouslySetInnerHTML={{ __html: cleanContent }}
/>
{citation ? (
<footer className="blog-blockquote__footer">
<cite className="text-sm text-muted-foreground not-italic">
{citation}
</cite>
</footer>
) : null}
</blockquote>
</figure>
);
}