@mdxui/named 6.1.0 → 6.3.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/shared/scroll-reveal/scroll-reveal.tsx","../../src/shared/animated-beam/animated-beam.tsx","../../src/lib/utils.ts","../../src/shared/marquee/marquee.tsx","../../src/shared/code-window/code-window.tsx","../../src/shared/grid-pattern/grid-pattern.tsx"],"sourcesContent":["'use client'\n\nimport { motion, Variants } from 'motion/react'\nimport { ReactNode } from 'react'\n\nexport interface ScrollRevealProps {\n children: ReactNode\n className?: string\n delay?: number\n direction?: 'up' | 'down' | 'left' | 'right' | 'none'\n duration?: number\n trigger?: 'inView' | 'mount'\n once?: boolean\n margin?: string\n}\n\nconst directionVariants: Record<string, Variants> = {\n up: {\n hidden: { opacity: 0, y: 50 },\n visible: { opacity: 1, y: 0 },\n },\n down: {\n hidden: { opacity: 0, y: -50 },\n visible: { opacity: 1, y: 0 },\n },\n left: {\n hidden: { opacity: 0, x: -50 },\n visible: { opacity: 1, x: 0 },\n },\n right: {\n hidden: { opacity: 0, x: 50 },\n visible: { opacity: 1, x: 0 },\n },\n none: {\n hidden: { opacity: 0 },\n visible: { opacity: 1 },\n },\n}\n\nexport function ScrollReveal({\n children,\n className,\n delay = 0,\n direction = 'up',\n duration = 0.5,\n trigger = 'inView',\n once = true,\n margin = '-100px',\n}: ScrollRevealProps) {\n if (trigger === 'mount') {\n return (\n <motion.div\n initial=\"hidden\"\n animate=\"visible\"\n transition={{ duration, delay, ease: 'easeOut' }}\n variants={directionVariants[direction]}\n className={className}\n >\n {children}\n </motion.div>\n )\n }\n\n return (\n <motion.div\n initial=\"hidden\"\n whileInView=\"visible\"\n viewport={{ once, margin }}\n transition={{ duration, delay, ease: 'easeOut' }}\n variants={directionVariants[direction]}\n className={className}\n >\n {children}\n </motion.div>\n )\n}\n","'use client'\n\nimport { RefObject, useEffect, useId, useState } from 'react'\nimport { motion } from 'motion/react'\nimport { cn } from '../../lib/utils'\n\nexport interface AnimatedBeamProps {\n className?: string\n containerRef: RefObject<HTMLElement | null>\n fromRef: RefObject<HTMLElement | null>\n toRef: RefObject<HTMLElement | null>\n curvature?: number\n reverse?: boolean\n pathColor?: string\n pathWidth?: number\n pathOpacity?: number\n gradientStartColor?: string\n gradientStopColor?: string\n delay?: number\n duration?: number\n startXOffset?: number\n startYOffset?: number\n endXOffset?: number\n endYOffset?: number\n}\n\nexport function AnimatedBeam({\n className,\n containerRef,\n fromRef,\n toRef,\n curvature = 0,\n reverse = false,\n duration = Math.random() * 3 + 4,\n delay = 0,\n pathColor = 'gray',\n pathWidth = 2,\n pathOpacity = 0.2,\n gradientStartColor = '#ffaa40',\n gradientStopColor = '#9c40ff',\n startXOffset = 0,\n startYOffset = 0,\n endXOffset = 0,\n endYOffset = 0,\n}: AnimatedBeamProps) {\n const id = useId()\n const [pathD, setPathD] = useState('')\n const [svgDimensions, setSvgDimensions] = useState({ width: 0, height: 0 })\n\n const gradientCoordinates = reverse\n ? {\n x1: ['90%', '-10%'],\n x2: ['100%', '0%'],\n y1: ['0%', '0%'],\n y2: ['0%', '0%'],\n }\n : {\n x1: ['10%', '110%'],\n x2: ['0%', '100%'],\n y1: ['0%', '0%'],\n y2: ['0%', '0%'],\n }\n\n useEffect(() => {\n const updatePath = () => {\n if (containerRef.current && fromRef.current && toRef.current) {\n const containerRect = containerRef.current.getBoundingClientRect()\n const rectA = fromRef.current.getBoundingClientRect()\n const rectB = toRef.current.getBoundingClientRect()\n\n const svgWidth = containerRect.width\n const svgHeight = containerRect.height\n setSvgDimensions({ width: svgWidth, height: svgHeight })\n\n const startX = rectA.left - containerRect.left + rectA.width / 2 + startXOffset\n const startY = rectA.top - containerRect.top + rectA.height / 2 + startYOffset\n const endX = rectB.left - containerRect.left + rectB.width / 2 + endXOffset\n const endY = rectB.top - containerRect.top + rectB.height / 2 + endYOffset\n\n const controlY = startY - curvature\n const d = `M ${startX},${startY} Q ${(startX + endX) / 2},${controlY} ${endX},${endY}`\n setPathD(d)\n }\n }\n\n const resizeObserver = new ResizeObserver(() => {\n updatePath()\n })\n\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current)\n }\n\n updatePath()\n\n return () => {\n resizeObserver.disconnect()\n }\n }, [containerRef, fromRef, toRef, curvature, startXOffset, startYOffset, endXOffset, endYOffset])\n\n return (\n <svg\n fill=\"none\"\n width={svgDimensions.width}\n height={svgDimensions.height}\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn('pointer-events-none absolute top-0 left-0 transform-gpu stroke-2', className)}\n viewBox={`0 0 ${svgDimensions.width} ${svgDimensions.height}`}\n >\n <path d={pathD} stroke={pathColor} strokeWidth={pathWidth} strokeOpacity={pathOpacity} strokeLinecap=\"round\" />\n <path d={pathD} strokeWidth={pathWidth} stroke={`url(#${id})`} strokeOpacity=\"1\" strokeLinecap=\"round\" />\n <defs>\n <motion.linearGradient\n className=\"transform-gpu\"\n id={id}\n gradientUnits={'userSpaceOnUse'}\n initial={{\n x1: '0%',\n x2: '0%',\n y1: '0%',\n y2: '0%',\n }}\n animate={{\n x1: gradientCoordinates.x1,\n x2: gradientCoordinates.x2,\n y1: gradientCoordinates.y1,\n y2: gradientCoordinates.y2,\n }}\n transition={{\n delay,\n duration,\n ease: [0.16, 1, 0.3, 1],\n repeat: Infinity,\n repeatDelay: 0,\n }}\n >\n <stop stopColor={gradientStartColor} stopOpacity=\"0\"></stop>\n <stop stopColor={gradientStartColor}></stop>\n <stop offset=\"32.5%\" stopColor={gradientStopColor}></stop>\n <stop offset=\"100%\" stopColor={gradientStopColor} stopOpacity=\"0\"></stop>\n </motion.linearGradient>\n </defs>\n </svg>\n )\n}\n","import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import { ComponentPropsWithoutRef } from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface MarqueeProps extends ComponentPropsWithoutRef<'div'> {\n /**\n * Optional CSS class name to apply custom styles\n */\n className?: string\n /**\n * Whether to reverse the animation direction\n * @default false\n */\n reverse?: boolean\n /**\n * Whether to pause the animation on hover\n * @default false\n */\n pauseOnHover?: boolean\n /**\n * Content to be displayed in the marquee\n */\n children: React.ReactNode\n /**\n * Whether to animate vertically instead of horizontally\n * @default false\n */\n vertical?: boolean\n /**\n * Number of times to repeat the content\n * @default 4\n */\n repeat?: number\n}\n\nexport function Marquee({\n className,\n reverse = false,\n pauseOnHover = false,\n children,\n vertical = false,\n repeat = 4,\n ...props\n}: MarqueeProps) {\n return (\n <div\n {...props}\n className={cn(\n 'group flex [gap:var(--gap)] overflow-hidden p-2 [--duration:40s] [--gap:1rem]',\n {\n 'flex-row': !vertical,\n 'flex-col': vertical,\n },\n className\n )}\n >\n {Array(repeat)\n .fill(0)\n .map((_, i) => (\n <div\n key={i}\n className={cn('flex shrink-0 justify-around [gap:var(--gap)]', {\n 'animate-marquee flex-row': !vertical,\n 'animate-marquee-vertical flex-col': vertical,\n 'group-hover:[animation-play-state:paused]': pauseOnHover,\n '[animation-direction:reverse]': reverse,\n })}\n >\n {children}\n </div>\n ))}\n </div>\n )\n}\n","import React from 'react'\n\nexport interface CodeWindowProps {\n code: string\n className?: string\n}\n\nexport function CodeWindow({ code, className }: CodeWindowProps) {\n const highlightCode = (code: string) => {\n const lines = code.split('\\n')\n const result: React.ReactElement[] = []\n let prevWasComment = false\n let prevWasCode = false\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]\n const isComment = line.trim().startsWith('//')\n const isEmpty = line.trim() === ''\n const isCode = !isComment && !isEmpty\n\n if (isComment && prevWasCode) {\n result.push(<div key={`space-before-${i}`} className=\"h-5\"></div>)\n }\n\n if (prevWasComment && isCode) {\n result.push(<div key={`space-after-${i}`} className=\"h-5\"></div>)\n }\n\n if (isEmpty) {\n result.push(<div key={i} className=\"h-5\"></div>)\n prevWasComment = false\n prevWasCode = false\n continue\n }\n\n if (isComment) {\n result.push(\n <div key={i} className=\"text-[#7d8590]\">\n {line}\n </div>\n )\n prevWasComment = true\n prevWasCode = false\n continue\n }\n\n let highlighted = line\n\n // Function names and properties with dots\n highlighted = highlighted.replace(\n /\\$\\.(\\w+)\\.(\\w+)/g,\n '<span class=\"text-[#79c0ff]\">$</span>.<span class=\"text-[#d2a8ff]\">$1</span>.<span class=\"text-[#ffa657]\">$2</span>'\n )\n\n // Object properties\n highlighted = highlighted.replace(/(\\w+):/g, '<span class=\"text-[#79c0ff]\">$1</span>:')\n\n // Strings\n highlighted = highlighted.replace(/'([^']*)'/g, \"<span class=\\\"text-[#a5d6ff]\\\">'$1'</span>\")\n\n // Numbers\n highlighted = highlighted.replace(/\\b(\\d+)\\b/g, '<span class=\"text-[#79c0ff]\">$1</span>')\n\n result.push(<div key={i} dangerouslySetInnerHTML={{ __html: highlighted }} />)\n\n prevWasComment = false\n prevWasCode = true\n }\n\n return result\n }\n\n return (\n <div className={`w-full h-full bg-[#0d1117] rounded-lg overflow-hidden ${className ?? ''}`}>\n <div className=\"flex-1 overflow-auto p-6 lg:p-8\">\n <pre className=\"text-sm lg:text-sm leading-relaxed font-mono text-[#e6edf3]\">{highlightCode(code)}</pre>\n </div>\n </div>\n )\n}\n","import { useId } from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface GridPatternProps extends React.SVGProps<SVGSVGElement> {\n width?: number\n height?: number\n x?: number\n y?: number\n squares?: Array<[x: number, y: number]>\n strokeDasharray?: string\n className?: string\n}\n\nexport function GridPattern({\n width = 40,\n height = 40,\n x = -1,\n y = -1,\n strokeDasharray = '0',\n squares,\n className,\n ...props\n}: GridPatternProps) {\n const id = useId()\n\n return (\n <svg\n aria-hidden=\"true\"\n className={cn('pointer-events-none absolute inset-0 h-full w-full fill-gray-400/30 stroke-gray-400/30', className)}\n {...props}\n >\n <defs>\n <pattern id={id} width={width} height={height} patternUnits=\"userSpaceOnUse\" x={x} y={y}>\n <path d={`M.5 ${height}V.5H${width}`} fill=\"none\" strokeDasharray={strokeDasharray} />\n </pattern>\n </defs>\n <rect width=\"100%\" height=\"100%\" strokeWidth={0} fill={`url(#${id})`} />\n {squares && (\n <svg x={x} y={y} className=\"overflow-visible\">\n {squares.map(([sx, sy]) => (\n <rect strokeWidth=\"0\" key={`${sx}-${sy}`} width={width - 1} height={height - 1} x={sx * width + 1} y={sy * height + 1} />\n ))}\n </svg>\n )}\n </svg>\n )\n}\n"],"mappings":"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","names":["motion","jsx","motion","jsx","jsx","code","useId","jsx","jsxs","useId"]}
1
+ {"version":3,"sources":["../../src/shared/scroll-reveal/scroll-reveal.tsx","../../src/shared/animated-beam/animated-beam.tsx","../../src/lib/utils.ts","../../src/shared/marquee/marquee.tsx","../../src/shared/code-window/code-window.tsx","../../src/shared/grid-pattern/grid-pattern.tsx"],"sourcesContent":["'use client'\n\nimport { motion, Variants } from 'motion/react'\nimport { ReactNode } from 'react'\n\nexport interface ScrollRevealProps {\n children: ReactNode\n className?: string\n delay?: number\n direction?: 'up' | 'down' | 'left' | 'right' | 'none'\n duration?: number\n trigger?: 'inView' | 'mount'\n once?: boolean\n margin?: string\n}\n\nconst directionVariants: Record<string, Variants> = {\n up: {\n hidden: { opacity: 0, y: 50 },\n visible: { opacity: 1, y: 0 },\n },\n down: {\n hidden: { opacity: 0, y: -50 },\n visible: { opacity: 1, y: 0 },\n },\n left: {\n hidden: { opacity: 0, x: -50 },\n visible: { opacity: 1, x: 0 },\n },\n right: {\n hidden: { opacity: 0, x: 50 },\n visible: { opacity: 1, x: 0 },\n },\n none: {\n hidden: { opacity: 0 },\n visible: { opacity: 1 },\n },\n}\n\nexport function ScrollReveal({\n children,\n className,\n delay = 0,\n direction = 'up',\n duration = 0.5,\n trigger = 'inView',\n once = true,\n margin = '-100px',\n}: ScrollRevealProps) {\n if (trigger === 'mount') {\n return (\n <motion.div\n initial=\"hidden\"\n animate=\"visible\"\n transition={{ duration, delay, ease: 'easeOut' }}\n variants={directionVariants[direction]}\n className={className}\n >\n {children}\n </motion.div>\n )\n }\n\n return (\n <motion.div\n initial=\"hidden\"\n whileInView=\"visible\"\n viewport={{ once, margin }}\n transition={{ duration, delay, ease: 'easeOut' }}\n variants={directionVariants[direction]}\n className={className}\n >\n {children}\n </motion.div>\n )\n}\n","'use client'\n\nimport { RefObject, useEffect, useId, useState } from 'react'\nimport { motion } from 'motion/react'\nimport { cn } from '../../lib/utils'\n\nexport interface AnimatedBeamProps {\n className?: string\n containerRef: RefObject<HTMLElement | null>\n fromRef: RefObject<HTMLElement | null>\n toRef: RefObject<HTMLElement | null>\n curvature?: number\n reverse?: boolean\n pathColor?: string\n pathWidth?: number\n pathOpacity?: number\n gradientStartColor?: string\n gradientStopColor?: string\n delay?: number\n duration?: number\n startXOffset?: number\n startYOffset?: number\n endXOffset?: number\n endYOffset?: number\n}\n\nexport function AnimatedBeam({\n className,\n containerRef,\n fromRef,\n toRef,\n curvature = 0,\n reverse = false,\n duration = Math.random() * 3 + 4,\n delay = 0,\n pathColor = 'gray',\n pathWidth = 2,\n pathOpacity = 0.2,\n gradientStartColor = '#ffaa40',\n gradientStopColor = '#9c40ff',\n startXOffset = 0,\n startYOffset = 0,\n endXOffset = 0,\n endYOffset = 0,\n}: AnimatedBeamProps) {\n const id = useId()\n const [pathD, setPathD] = useState('')\n const [svgDimensions, setSvgDimensions] = useState({ width: 0, height: 0 })\n\n const gradientCoordinates = reverse\n ? {\n x1: ['90%', '-10%'],\n x2: ['100%', '0%'],\n y1: ['0%', '0%'],\n y2: ['0%', '0%'],\n }\n : {\n x1: ['10%', '110%'],\n x2: ['0%', '100%'],\n y1: ['0%', '0%'],\n y2: ['0%', '0%'],\n }\n\n useEffect(() => {\n const updatePath = () => {\n if (containerRef.current && fromRef.current && toRef.current) {\n const containerRect = containerRef.current.getBoundingClientRect()\n const rectA = fromRef.current.getBoundingClientRect()\n const rectB = toRef.current.getBoundingClientRect()\n\n const svgWidth = containerRect.width\n const svgHeight = containerRect.height\n setSvgDimensions({ width: svgWidth, height: svgHeight })\n\n const startX = rectA.left - containerRect.left + rectA.width / 2 + startXOffset\n const startY = rectA.top - containerRect.top + rectA.height / 2 + startYOffset\n const endX = rectB.left - containerRect.left + rectB.width / 2 + endXOffset\n const endY = rectB.top - containerRect.top + rectB.height / 2 + endYOffset\n\n const controlY = startY - curvature\n const d = `M ${startX},${startY} Q ${(startX + endX) / 2},${controlY} ${endX},${endY}`\n setPathD(d)\n }\n }\n\n const resizeObserver = new ResizeObserver(() => {\n updatePath()\n })\n\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current)\n }\n\n updatePath()\n\n return () => {\n resizeObserver.disconnect()\n }\n }, [containerRef, fromRef, toRef, curvature, startXOffset, startYOffset, endXOffset, endYOffset])\n\n return (\n <svg\n fill=\"none\"\n width={svgDimensions.width}\n height={svgDimensions.height}\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn('pointer-events-none absolute top-0 left-0 transform-gpu stroke-2', className)}\n viewBox={`0 0 ${svgDimensions.width} ${svgDimensions.height}`}\n >\n <path d={pathD} stroke={pathColor} strokeWidth={pathWidth} strokeOpacity={pathOpacity} strokeLinecap=\"round\" />\n <path d={pathD} strokeWidth={pathWidth} stroke={`url(#${id})`} strokeOpacity=\"1\" strokeLinecap=\"round\" />\n <defs>\n <motion.linearGradient\n className=\"transform-gpu\"\n id={id}\n gradientUnits={'userSpaceOnUse'}\n initial={{\n x1: '0%',\n x2: '0%',\n y1: '0%',\n y2: '0%',\n }}\n animate={{\n x1: gradientCoordinates.x1,\n x2: gradientCoordinates.x2,\n y1: gradientCoordinates.y1,\n y2: gradientCoordinates.y2,\n }}\n transition={{\n delay,\n duration,\n ease: [0.16, 1, 0.3, 1],\n repeat: Infinity,\n repeatDelay: 0,\n }}\n >\n <stop stopColor={gradientStartColor} stopOpacity=\"0\"></stop>\n <stop stopColor={gradientStartColor}></stop>\n <stop offset=\"32.5%\" stopColor={gradientStopColor}></stop>\n <stop offset=\"100%\" stopColor={gradientStopColor} stopOpacity=\"0\"></stop>\n </motion.linearGradient>\n </defs>\n </svg>\n )\n}\n","import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import { ComponentPropsWithoutRef } from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface MarqueeProps extends ComponentPropsWithoutRef<'div'> {\n /**\n * Optional CSS class name to apply custom styles\n */\n className?: string\n /**\n * Whether to reverse the animation direction\n * @default false\n */\n reverse?: boolean\n /**\n * Whether to pause the animation on hover\n * @default false\n */\n pauseOnHover?: boolean\n /**\n * Content to be displayed in the marquee\n */\n children: React.ReactNode\n /**\n * Whether to animate vertically instead of horizontally\n * @default false\n */\n vertical?: boolean\n /**\n * Number of times to repeat the content\n * @default 4\n */\n repeat?: number\n}\n\nexport function Marquee({\n className,\n reverse = false,\n pauseOnHover = false,\n children,\n vertical = false,\n repeat = 4,\n ...props\n}: MarqueeProps) {\n return (\n <div\n {...props}\n className={cn(\n 'group flex [gap:var(--gap)] overflow-hidden p-2 [--duration:40s] [--gap:1rem]',\n {\n 'flex-row': !vertical,\n 'flex-col': vertical,\n },\n className\n )}\n >\n {Array(repeat)\n .fill(0)\n .map((_, i) => (\n <div\n key={i}\n className={cn('flex shrink-0 justify-around [gap:var(--gap)]', {\n 'animate-marquee flex-row': !vertical,\n 'animate-marquee-vertical flex-col': vertical,\n 'group-hover:[animation-play-state:paused]': pauseOnHover,\n '[animation-direction:reverse]': reverse,\n })}\n >\n {children}\n </div>\n ))}\n </div>\n )\n}\n","import React from 'react'\n\nexport interface CodeWindowProps {\n code: string\n className?: string\n}\n\nexport function CodeWindow({ code, className }: CodeWindowProps) {\n const highlightCode = (code: string) => {\n const lines = code.split('\\n')\n const result: React.ReactElement[] = []\n let prevWasComment = false\n let prevWasCode = false\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]\n const isComment = line.trim().startsWith('//')\n const isEmpty = line.trim() === ''\n const isCode = !isComment && !isEmpty\n\n if (isComment && prevWasCode) {\n result.push(<div key={`space-before-${i}`} className=\"h-5\"></div>)\n }\n\n if (prevWasComment && isCode) {\n result.push(<div key={`space-after-${i}`} className=\"h-5\"></div>)\n }\n\n if (isEmpty) {\n result.push(<div key={i} className=\"h-5\"></div>)\n prevWasComment = false\n prevWasCode = false\n continue\n }\n\n if (isComment) {\n result.push(\n <div key={i} className=\"text-[#7d8590]\">\n {line}\n </div>\n )\n prevWasComment = true\n prevWasCode = false\n continue\n }\n\n let highlighted = line\n\n // Function names and properties with dots\n highlighted = highlighted.replace(\n /\\$\\.(\\w+)\\.(\\w+)/g,\n '<span class=\"text-[#79c0ff]\">$</span>.<span class=\"text-[#d2a8ff]\">$1</span>.<span class=\"text-[#ffa657]\">$2</span>'\n )\n\n // Object properties\n highlighted = highlighted.replace(/(\\w+):/g, '<span class=\"text-[#79c0ff]\">$1</span>:')\n\n // Strings\n highlighted = highlighted.replace(/'([^']*)'/g, \"<span class=\\\"text-[#a5d6ff]\\\">'$1'</span>\")\n\n // Numbers\n highlighted = highlighted.replace(/\\b(\\d+)\\b/g, '<span class=\"text-[#79c0ff]\">$1</span>')\n\n result.push(<div key={i} dangerouslySetInnerHTML={{ __html: highlighted }} />)\n\n prevWasComment = false\n prevWasCode = true\n }\n\n return result\n }\n\n return (\n <div className={`w-full h-full bg-[#0d1117] rounded-lg overflow-hidden ${className ?? ''}`}>\n <div className=\"flex-1 overflow-auto p-6 lg:p-8\">\n <pre className=\"text-sm lg:text-sm leading-relaxed font-mono text-[#e6edf3]\">{highlightCode(code)}</pre>\n </div>\n </div>\n )\n}\n","import { useId } from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface GridPatternProps extends React.SVGProps<SVGSVGElement> {\n width?: number\n height?: number\n x?: number\n y?: number\n squares?: Array<[x: number, y: number]>\n strokeDasharray?: string\n className?: string\n}\n\nexport function GridPattern({\n width = 40,\n height = 40,\n x = -1,\n y = -1,\n strokeDasharray = '0',\n squares,\n className,\n ...props\n}: GridPatternProps) {\n const id = useId()\n\n return (\n <svg\n aria-hidden=\"true\"\n className={cn('pointer-events-none absolute inset-0 h-full w-full fill-muted-foreground/20 stroke-muted-foreground/20', className)}\n {...props}\n >\n <defs>\n <pattern id={id} width={width} height={height} patternUnits=\"userSpaceOnUse\" x={x} y={y}>\n <path d={`M.5 ${height}V.5H${width}`} fill=\"none\" strokeDasharray={strokeDasharray} />\n </pattern>\n </defs>\n <rect width=\"100%\" height=\"100%\" strokeWidth={0} fill={`url(#${id})`} />\n {squares && (\n <svg x={x} y={y} className=\"overflow-visible\">\n {squares.map(([sx, sy]) => (\n <rect strokeWidth=\"0\" key={`${sx}-${sy}`} width={width - 1} height={height - 1} x={sx * width + 1} y={sy * height + 1} />\n ))}\n </svg>\n )}\n </svg>\n )\n}\n"],"mappings":"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","names":["motion","jsx","motion","jsx","jsx","code","useId","jsx","jsxs","useId"]}
@@ -0,0 +1,160 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { DialectViewProps } from '@mdxui/dialect';
3
+ import { IconType } from 'react-icons';
4
+ import { W as WorkflowItem } from '../problem-B2-XszSB.js';
5
+
6
+ /** Single FAQ item. */
7
+ type NamedAgentFaqItem = {
8
+ question: string;
9
+ answer: string;
10
+ };
11
+ /** Hero — persona pill (badge), heading/description, single CTA, optional
12
+ * split image + a tool marquee below. */
13
+ type NamedAgentHero = {
14
+ badgeEmoji?: string;
15
+ badgeText?: string;
16
+ badgeHref?: string;
17
+ heading: string;
18
+ description: string;
19
+ ctaText: string;
20
+ ctaHref: string;
21
+ /** Modelled for richer Startups; the named Hero renders a single CTA today. */
22
+ secondaryCtaText?: string;
23
+ secondaryCtaHref?: string;
24
+ rightImageSrc?: string;
25
+ rightImageAlt?: string;
26
+ showIconOverlay?: boolean;
27
+ marqueeTitle?: string;
28
+ marqueeImages?: string[];
29
+ };
30
+ /** Problem — workflow chips + dual-line headline. `icon` is a free-form hint
31
+ * string (the wire can't carry a React component); the mapper resolves it to
32
+ * a react-icons glyph, falling back to a neutral dot. */
33
+ type NamedAgentWorkflow = {
34
+ icon: string;
35
+ label: string;
36
+ };
37
+ type NamedAgentProblem = {
38
+ heading: string;
39
+ workflows: NamedAgentWorkflow[];
40
+ subheading: string;
41
+ subheadingHighlight: string;
42
+ };
43
+ /** Features — numbered cards (title + description + bullet items + code window). */
44
+ type NamedAgentFeature = {
45
+ title: string;
46
+ description: string;
47
+ items: {
48
+ text: string;
49
+ }[];
50
+ code: string;
51
+ badge: string;
52
+ };
53
+ type NamedAgentFeatures = {
54
+ heading: string;
55
+ description: string;
56
+ features: NamedAgentFeature[];
57
+ };
58
+ /** Pricing — Pricing1 (single tier) vs Pricing2 (multi-tier) fork, discriminated
59
+ * on `variant` so both are expressible on one wire field. */
60
+ type NamedAgentPricingFeature = {
61
+ text: string;
62
+ };
63
+ type NamedAgentPricingTier = {
64
+ title: string;
65
+ description: string;
66
+ price: string;
67
+ priceUnit: string;
68
+ ctaText: string;
69
+ ctaVariant?: 'primary' | 'secondary';
70
+ ctaHref?: string;
71
+ features: NamedAgentPricingFeature[];
72
+ image?: string;
73
+ imageAlt?: string;
74
+ featured?: boolean;
75
+ };
76
+ type NamedAgentPricing = {
77
+ variant: 'single';
78
+ heading: string;
79
+ subheading?: string;
80
+ price: string;
81
+ priceUnit: string;
82
+ trialText?: string;
83
+ ctaText: string;
84
+ ctaHref: string;
85
+ featuresHeading?: string;
86
+ features: NamedAgentPricingFeature[];
87
+ securityNote?: string;
88
+ } | {
89
+ variant: 'tiers';
90
+ heading: string;
91
+ subheading?: string;
92
+ tiers: NamedAgentPricingTier[];
93
+ securityNote?: string;
94
+ };
95
+ type NamedAgentFaq = {
96
+ heading: string;
97
+ faqs: NamedAgentFaqItem[];
98
+ };
99
+ type NamedAgentCtaButton = {
100
+ text: string;
101
+ href: string;
102
+ variant?: 'primary' | 'secondary';
103
+ showArrow?: boolean;
104
+ };
105
+ type NamedAgentCta = {
106
+ heading: string;
107
+ subheading?: string;
108
+ buttons: NamedAgentCtaButton[];
109
+ };
110
+ /** Integration — animated-beam two-node motif. `content` is a free-form string
111
+ * (icon name / image src / label); `type` tells the component how to render it. */
112
+ type NamedAgentIntegrationNode = {
113
+ type: 'image' | 'icon' | 'component';
114
+ content: string;
115
+ alt?: string;
116
+ };
117
+ type NamedAgentIntegration = {
118
+ title: string;
119
+ description: string;
120
+ buttonText?: string;
121
+ buttonHref?: string;
122
+ leftNode: NamedAgentIntegrationNode;
123
+ rightNode: NamedAgentIntegrationNode;
124
+ };
125
+ /** Contact — presentation-only form (no submit handler on the wire). */
126
+ type NamedAgentContactField = {
127
+ id: string;
128
+ label: string;
129
+ type: 'text' | 'email' | 'tel' | 'textarea';
130
+ placeholder?: string;
131
+ required?: boolean;
132
+ };
133
+ type NamedAgentContact = {
134
+ heading: string;
135
+ subheading?: string;
136
+ fields: NamedAgentContactField[];
137
+ submitButtonText: string;
138
+ };
139
+ /** Full named-agent landing content. */
140
+ type NamedAgentLandingContent = {
141
+ hero: NamedAgentHero;
142
+ problem: NamedAgentProblem;
143
+ features: NamedAgentFeatures;
144
+ integration?: NamedAgentIntegration;
145
+ pricing: NamedAgentPricing;
146
+ faq: NamedAgentFaq;
147
+ cta: NamedAgentCta;
148
+ contact?: NamedAgentContact;
149
+ };
150
+
151
+ type NamedAgentViewProps = DialectViewProps<NamedAgentLandingContent>;
152
+ declare function NamedAgentView({ content, theme, mode, brandName, hostname }: NamedAgentViewProps): react_jsx_runtime.JSX.Element;
153
+
154
+ /** Resolve one workflow icon hint to a react-icons component. */
155
+ declare function resolveWorkflowIcon(hint: string): IconType;
156
+ /** Map wire workflows ({ icon: hint, label }) → named Problem `WorkflowItem[]`
157
+ * ({ icon: IconType, label }). */
158
+ declare function mapWorkflows(workflows: NamedAgentWorkflow[]): WorkflowItem[];
159
+
160
+ export { type NamedAgentContact, type NamedAgentContactField, type NamedAgentCta, type NamedAgentCtaButton, type NamedAgentFaq, type NamedAgentFaqItem, type NamedAgentFeature, type NamedAgentFeatures, type NamedAgentHero, type NamedAgentIntegration, type NamedAgentIntegrationNode, type NamedAgentLandingContent, type NamedAgentPricing, type NamedAgentPricingFeature, type NamedAgentPricingTier, type NamedAgentProblem, NamedAgentView, type NamedAgentViewProps, type NamedAgentWorkflow, NamedAgentView as default, mapWorkflows, resolveWorkflowIcon };