{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "theme-minimal",
  "title": "Minimal Theme",
  "description": "minimal theme tokens",
  "files": [
    {
      "path": "registry/themes/minimal.ts",
      "content": "import type { PdfcnTheme } from \"@/registry/types/pdf-themes\";\n\nimport { defaultPrimitives } from \"./primitives\";\n\n/**\n * Minimal theme preset.\n *\n * Character: Courier headings, zinc neutrals, maximum whitespace.\n * shadcn-inspired restrained palette. Ideal for clean documentation,\n * technical specs, and literary manuscripts.\n */\nexport const minimalTheme: PdfcnTheme = {\n  colors: {\n    accent: \"#71717a\",\n    background: \"#ffffff\",\n    border: \"#e4e4e7\",\n    destructive: \"#b91c1c\",\n    foreground: \"#18181b\",\n    info: \"#0369a1\",\n    muted: \"#fafafa\",\n    mutedForeground: \"#a1a1aa\",\n    primary: \"#18181b\",\n    primaryForeground: \"#ffffff\",\n    success: \"#15803d\",\n    warning: \"#a16207\",\n  },\n  name: \"minimal\",\n  page: {\n    orientation: \"portrait\",\n    size: \"A4\",\n  },\n  primitives: defaultPrimitives,\n  spacing: {\n    componentGap: 18,\n    page: {\n      marginBottom: 72,\n      marginLeft: 56,\n      marginRight: 56,\n      marginTop: 72,\n    },\n    paragraphGap: 14,\n    sectionGap: 36,\n  },\n  typography: {\n    body: {\n      fontFamily: \"Helvetica\",\n      fontSize: 11,\n      lineHeight: 1.65,\n    },\n    heading: {\n      fontFamily: \"Courier\",\n      fontSize: {\n        h1: 24,\n        h2: 20,\n        h3: 16,\n        h4: 14,\n        h5: 12,\n        h6: 10,\n      },\n      fontWeight: 600,\n      lineHeight: 1.25,\n    },\n  },\n};\n",
      "type": "registry:theme",
      "target": "lib/pdf-themes/minimal.ts"
    },
    {
      "path": "registry/themes/primitives.ts",
      "content": "import type { PrimitiveTokens } from \"@/registry/types/pdf-themes\";\n\n/**\n * Default primitive tokens shared by all theme presets.\n *\n * These define the raw design scales — the \"palette\" of values available.\n * Themes select from these scales when assigning semantic tokens.\n *\n * - Typography: Major Third (1.25) ratio, 12pt base\n * - Spacing: 4pt grid system\n * - Font weights: 400–700\n * - Line heights: 1.2–1.6\n * - Border radius: 0–8pt (plus full for pills)\n * - Letter spacing: -0.025 to 0.05 (em-like ratios for PDF points)\n */\nexport const defaultPrimitives: PrimitiveTokens = {\n  borderRadius: {\n    full: 9999,\n    lg: 8,\n    md: 4,\n    none: 0,\n    sm: 2,\n  },\n  fontWeights: {\n    bold: 700,\n    medium: 500,\n    regular: 400,\n    semibold: 600,\n  },\n  letterSpacing: {\n    normal: 0,\n    tight: -0.025,\n    wide: 0.025,\n    wider: 0.05,\n  },\n  lineHeights: {\n    normal: 1.4,\n    relaxed: 1.6,\n    tight: 1.2,\n  },\n  spacing: {\n    0: 0,\n    0.5: 2,\n    1: 4,\n    10: 40,\n    12: 48,\n    16: 64,\n    2: 8,\n    3: 12,\n    4: 16,\n    5: 20,\n    6: 24,\n    8: 32,\n  },\n  typography: {\n    \"2xl\": 28,\n    \"3xl\": 36,\n    base: 15,\n    lg: 18,\n    sm: 12,\n    xl: 22,\n    xs: 10,\n  },\n};\n",
      "type": "registry:theme",
      "target": "lib/pdf-themes/primitives.ts"
    },
    {
      "path": "registry/types/pdf-themes.ts",
      "content": "/**\n * pdfcn Theme System — Type Definitions\n *\n * Defines the complete type hierarchy for the pdfcn PDF theme system.\n * All PDF components consume these tokens instead of hardcoding style values.\n *\n * Architecture:\n * - PrimitiveTokens: Raw design scales (typography, spacing, weights, line heights)\n * - ColorTokens: Semantic color mappings (foreground/background pairs)\n * - TypographyTokens: Font family, size, weight, and line height decisions\n * - SpacingTokens: Page margins, section/paragraph/component gaps\n * - PageTokens: Default page size and orientation\n * - PdfcnTheme: The complete theme object combining all token layers\n *\n * @example\n * ```ts\n * import type { PdfcnTheme } from '@/registry/themes';\n *\n * const myTheme: PdfcnTheme = {\n *   name: 'custom',\n *   primitives: { ... },\n *   colors: { foreground: '#1a1a1a', ... },\n *   typography: { body: { ... }, heading: { ... } },\n *   spacing: { page: { ... }, sectionGap: 24, ... },\n *   page: { size: 'A4', orientation: 'portrait' },\n * };\n * ```\n */\n\n// ─── Primitive Tokens ───────────────────────────────────────────────────────\n// Raw design scales. These define WHAT values are available.\n// Themes choose from these when populating semantic tokens.\n\n/** Typography scale using a Major Third (1.25) ratio with 12pt base */\nexport interface TypographyScale {\n  /** 10pt — Captions, footnotes */\n  xs: number;\n  /** 12pt — Body text (PDF standard) */\n  sm: number;\n  /** 15pt — Large body, small headings */\n  base: number;\n  /** 18pt — H4 equivalent */\n  lg: number;\n  /** 22pt — H3 equivalent */\n  xl: number;\n  /** 28pt — H2 equivalent */\n  \"2xl\": number;\n  /** 36pt — H1 equivalent */\n  \"3xl\": number;\n}\n\n/** Spacing scale based on a 4pt grid system */\nexport interface SpacingScale {\n  /** 0pt */\n  0: number;\n  /** 2pt */\n  0.5: number;\n  /** 4pt */\n  1: number;\n  /** 8pt */\n  2: number;\n  /** 12pt */\n  3: number;\n  /** 16pt */\n  4: number;\n  /** 20pt */\n  5: number;\n  /** 24pt */\n  6: number;\n  /** 32pt */\n  8: number;\n  /** 40pt */\n  10: number;\n  /** 48pt */\n  12: number;\n  /** 64pt */\n  16: number;\n}\n\n/** Font weight scale */\nexport interface FontWeights {\n  regular: number;\n  medium: number;\n  semibold: number;\n  bold: number;\n}\n\n/** Line height scale */\nexport interface LineHeights {\n  /** 1.2 — Tight, for headings */\n  tight: number;\n  /** 1.4 — Normal, for body text */\n  normal: number;\n  /** 1.6 — Relaxed, for reading-heavy content */\n  relaxed: number;\n}\n\n/** Border radius scale for rounded corners */\nexport interface BorderRadiusScale {\n  /** 0pt — Sharp corners */\n  none: number;\n  /** 2pt — Subtle rounding */\n  sm: number;\n  /** 4pt — Standard rounding */\n  md: number;\n  /** 8pt — Pronounced rounding */\n  lg: number;\n  /** 9999pt — Pill/circle shape */\n  full: number;\n}\n\n/** Letter spacing scale for typography adjustments */\nexport interface LetterSpacingScale {\n  /** -0.025em — Tighter spacing */\n  tight: number;\n  /** 0em — Normal spacing */\n  normal: number;\n  /** 0.025em — Slightly wider spacing */\n  wide: number;\n  /** 0.05em — Much wider spacing (for uppercase) */\n  wider: number;\n}\n\n/** Raw design scales shared across themes */\nexport interface PrimitiveTokens {\n  typography: TypographyScale;\n  spacing: SpacingScale;\n  fontWeights: FontWeights;\n  lineHeights: LineHeights;\n  borderRadius: BorderRadiusScale;\n  letterSpacing: LetterSpacingScale;\n}\n\n// ─── Semantic Tokens ────────────────────────────────────────────────────────\n// These map primitives to design intent. Themes differ primarily here.\n\n/**\n * Semantic color tokens using the foreground/background pair convention.\n * All values must be hex strings (e.g., '#1a1a1a').\n * react-pdf supports hex, rgb(), and hsl() — but NOT oklch.\n */\nexport interface ColorTokens {\n  /** Primary text and content color */\n  foreground: string;\n  /** Page background color */\n  background: string;\n  /** Subtle background for secondary areas (e.g., code blocks, table headers) */\n  muted: string;\n  /** Text on muted backgrounds (captions, footnotes, timestamps) */\n  mutedForeground: string;\n  /** Brand/accent color for emphasis and highlights */\n  primary: string;\n  /** Text on primary-colored backgrounds */\n  primaryForeground: string;\n  /** Table borders, dividers, rules */\n  border: string;\n  /** Secondary accent for call-to-action elements, badges */\n  accent: string;\n  /** Error text, warning indicators */\n  destructive: string;\n  /** Success states (e.g., badges, confirmations) */\n  success: string;\n  /** Warning states (e.g., badges, alerts) */\n  warning: string;\n  /** Info states (e.g., badges, informational alerts) */\n  info: string;\n}\n\n/** Typography semantic tokens — what fonts and sizes to use where */\nexport interface TypographyTokens {\n  /** Body text settings */\n  body: {\n    /** Font family for body text (e.g., 'Helvetica') */\n    fontFamily: string;\n    /** Base font size in points */\n    fontSize: number;\n    /** Line height multiplier */\n    lineHeight: number;\n  };\n  /** Heading text settings */\n  heading: {\n    /** Font family for headings (e.g., 'Times-Roman', 'Courier') */\n    fontFamily: string;\n    /** Font weight as numeric value (400-700) */\n    fontWeight: number;\n    /** Line height multiplier for headings */\n    lineHeight: number;\n    /** Font sizes for each heading level in points */\n    fontSize: {\n      h1: number;\n      h2: number;\n      h3: number;\n      h4: number;\n      h5: number;\n      h6: number;\n    };\n  };\n}\n\n/** Spacing semantic tokens — consistent spacing across the document */\nexport interface SpacingTokens {\n  /** Page margin settings in points */\n  page: {\n    marginTop: number;\n    marginRight: number;\n    marginBottom: number;\n    marginLeft: number;\n  };\n  /** Space between major document sections (after h2, before new sections) */\n  sectionGap: number;\n  /** Space between paragraphs and after text blocks */\n  paragraphGap: number;\n  /** Space between inline components, list items, table rows */\n  componentGap: number;\n}\n\n/** Page layout defaults */\nexport interface PageTokens {\n  /** Default page size */\n  size: \"A4\" | \"LETTER\" | \"LEGAL\";\n  /** Default page orientation */\n  orientation: \"portrait\" | \"landscape\";\n}\n\n// ─── Full Theme ─────────────────────────────────────────────────────────────\n\n/**\n * The complete pdfcn theme object.\n *\n * Components import this and use its tokens for all style values.\n * Since React Context doesn't work in @react-pdf/renderer,\n * the theme is a plain TypeScript object imported directly by components.\n *\n * @example\n * ```tsx\n * // In a component:\n * import { theme } from '../lib/pdf-theme';\n *\n * function createStyles(t: PdfcnTheme) {\n *   return StyleSheet.create({\n *     text: {\n *       fontFamily: t.typography.body.fontFamily,\n *       fontSize: t.typography.body.fontSize,\n *       color: t.colors.foreground,\n *     },\n *   });\n * }\n *\n * const styles = createStyles(theme);\n * ```\n */\nexport interface PdfcnTheme {\n  /** Theme name identifier */\n  name: string;\n  /** Raw design scales */\n  primitives: PrimitiveTokens;\n  /** Semantic color mappings */\n  colors: ColorTokens;\n  /** Typography settings for body and headings */\n  typography: TypographyTokens;\n  /** Spacing settings for page, sections, and components */\n  spacing: SpacingTokens;\n  /** Page layout defaults */\n  page: PageTokens;\n}\n",
      "type": "registry:theme",
      "target": "types/pdf-themes.ts"
    },
    {
      "path": "registry/types/pdf-components.ts",
      "content": "import type { ReactNode } from \"react\";\n\n/** CSS-like style object compatible with both Takumi and Forme */\nexport type Style = Record<string, unknown>;\n\n/**\n * Base props shared by all pdfcn PDF components.\n */\nexport interface PDFComponentProps {\n  style?: Style;\n  children: ReactNode;\n}\n",
      "type": "registry:theme",
      "target": "types/pdf-components.ts"
    }
  ],
  "type": "registry:theme"
}