{"$schema":"https:\/\/ui.particle.academy\/schema\/registry-item.json","name":"pull-quote","type":"registry:ui","title":"PullQuote","description":"Editorial pull quote with optional attribution.","package":"react-fancy","dependencies":[],"registryDependencies":[],"files":[{"path":"components\/fancy\/pull-quote\/PullQuote.tsx","content":"import { forwardRef } from \"react\";\nimport { cn } from \"..\/..\/utils\/cn\";\nimport type { PullQuoteProps } from \".\/PullQuote.types\";\n\n\/**\n * A pull quote \u2014 the oversized line lifted out of body copy, with optional\n * attribution and a rule-bracketed treatment.\n *\n * Twelve gallery styles build one. The reason this is a component rather than a\n * class is the same reason `<Kbd>` renders a real `<kbd>`: of the eight quote\n * elements in those styles, **one** was a `<blockquote>` \u2014 five were `<p>` and\n * two were `<div>` \u2014 and **none** used `<cite>` for the attribution. They all\n * look right and none of them says what it is.\n *\n * `citeUrl` maps to `<blockquote cite>`, which is the attribute's actual job\n * (the source URL) and is routinely confused with the visible `<cite>` element\n * (the work's title). Keeping them as separate props stops the two collapsing\n * into one another.\n *\/\nexport const PullQuote = forwardRef<HTMLQuoteElement, PullQuoteProps>(\n  ({ attribution, source, citeUrl, rule = false, className, children, ...props }, ref) => {\n    return (\n      <blockquote\n        ref={ref}\n        cite={citeUrl}\n        data-react-fancy-pull-quote=\"\"\n        className={cn(\n          \"m-0 text-2xl font-medium leading-snug tracking-tight text-zinc-900 dark:text-zinc-100\",\n          rule && \"border-y border-zinc-200 py-6 dark:border-zinc-800\",\n          className,\n        )}\n        {...props}\n      >\n        <p data-react-fancy-pull-quote-text=\"\" className=\"m-0\">\n          {children}\n        <\/p>\n\n        {(attribution != null || source != null) && (\n          <footer\n            data-react-fancy-pull-quote-attribution=\"\"\n            className=\"mt-3 text-sm font-normal tracking-normal text-zinc-500 dark:text-zinc-400\"\n          >\n            {attribution != null && <cite className=\"not-italic\">{attribution}<\/cite>}\n            {attribution != null && source != null && <span aria-hidden> \u00b7 <\/span>}\n            {source}\n          <\/footer>\n        )}\n      <\/blockquote>\n    );\n  },\n);\n\nPullQuote.displayName = \"PullQuote\";\n","type":"registry:ui","target":"components\/fancy\/pull-quote\/PullQuote.tsx"},{"path":"components\/fancy\/pull-quote\/PullQuote.types.ts","content":"import type { HTMLAttributes, ReactNode } from \"react\";\n\nexport interface PullQuoteProps extends Omit<HTMLAttributes<HTMLQuoteElement>, \"cite\"> {\n  \/** Who said it. Rendered in a `<cite>`. *\/\n  attribution?: ReactNode;\n  \/** Where it is from \u2014 publication, page, role. Follows the attribution. *\/\n  source?: ReactNode;\n  \/** URL the quote came from. Becomes the `<blockquote cite>` attribute. *\/\n  citeUrl?: string;\n  \/** Rule-bracketed treatment: hairlines above and below. Default `false`. *\/\n  rule?: boolean;\n  children?: ReactNode;\n}\n","type":"registry:ui","target":"components\/fancy\/pull-quote\/PullQuote.types.ts"},{"path":"components\/fancy\/pull-quote\/index.ts","content":"export { PullQuote } from \".\/PullQuote\";\nexport type { PullQuoteProps } from \".\/PullQuote.types\";\n","type":"registry:ui","target":"components\/fancy\/pull-quote\/index.ts"}],"since":"0.5"}