@aiready/components 0.14.2 → 0.14.4

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/cn.ts","../src/components/button.tsx","../src/components/card.tsx","../src/components/input.tsx","../src/components/label.tsx","../src/components/badge.tsx","../src/components/modal.tsx","../src/components/icons/IconBase.tsx","../src/components/icons/index.tsx","../src/components/container.tsx","../src/components/grid.tsx","../src/components/stack.tsx","../src/components/separator.tsx","../src/components/checkbox.tsx","../src/components/radio-group.tsx","../src/components/switch.tsx","../src/components/textarea.tsx","../src/components/select.tsx","../src/code-block/CodeBlock.tsx","../src/navigation/Breadcrumb.tsx","../src/navigation/PlatformShell.tsx","../src/data-display/ScoreBar.tsx","../src/data-display/ScoreCircle.tsx","../src/feedback/LoadingSpinner.tsx","../src/feedback/ErrorDisplay.tsx","../src/feedback/FeedbackWidget.tsx","../src/theme/ThemeProvider.tsx","../src/utils/colors.ts","../src/utils/formatters.ts","../src/utils/score.ts","../src/hooks/useDebounce.ts","../src/hooks/useD3.ts","../src/hooks/simulation-helpers.ts","../src/hooks/useForceSimulation.ts","../src/charts/force-directed/useGraphInteractions.ts","../src/charts/constants.ts","../src/charts/layout-utils.ts","../src/charts/force-directed/useGraphLayout.ts","../src/charts/force-directed/useImperativeHandle.ts","../src/charts/force-directed/ControlButton.tsx","../src/charts/force-directed/GraphControls.tsx","../src/charts/NodeItem.tsx","../src/charts/LinkItem.tsx","../src/charts/PackageBoundaries.tsx","../src/charts/force-directed/GraphCanvas.tsx","../src/charts/force-directed/ForceDirectedGraph.tsx"],"names":["React","jsx","React3","cva","React4","jsxs","React5","React6","React7","React8","React9","React10","React11","React12","React13","AnimatePresence","motion","useState","useEffect","Fragment","getCoreRating","scoreColor","X","useRef","d3","d33","zoom","useCallback","useMemo","d34","forwardRef","d35"],"mappings":"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","file":"index.js","sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Merges class names using clsx and tailwind-merge\n * @param inputs - Class values to merge\n * @returns Merged class names\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../utils/cn';\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive:\n 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n outline:\n 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\n secondary:\n 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n // Platform specific high-polish variants\n glow: 'bg-gradient-to-r from-cyan-600 to-blue-600 text-white shadow-lg shadow-cyan-500/20 hover:shadow-cyan-500/40 hover:scale-[1.02] active:scale-[0.98]',\n glass:\n 'bg-slate-800/50 backdrop-blur-sm border border-slate-700 text-slate-200 hover:bg-slate-700/50 hover:text-white',\n accent:\n 'bg-cyan-500/10 text-cyan-400 border border-cyan-500/20 hover:bg-cyan-500/20',\n },\n size: {\n default: 'h-10 px-4 py-2',\n sm: 'h-9 rounded-md px-3',\n lg: 'h-11 rounded-md px-8',\n icon: 'h-10 w-10',\n // Extra sizes for dashboard use\n xs: 'h-7 rounded-md px-2 text-[10px] font-bold uppercase tracking-wider',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nexport interface ButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, ...props }, ref) => {\n return (\n <button\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n }\n);\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border bg-card text-card-foreground shadow-sm',\n className\n )}\n {...props}\n />\n));\nCard.displayName = 'Card';\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('flex flex-col space-y-1.5 p-6', className)}\n {...props}\n />\n));\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\n 'text-2xl font-semibold leading-none tracking-tight',\n className\n )}\n {...props}\n />\n));\nCardTitle.displayName = 'CardTitle';\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n));\nCardDescription.displayName = 'CardDescription';\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />\n));\nCardContent.displayName = 'CardContent';\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('flex items-center p-6 pt-0', className)}\n {...props}\n />\n));\nCardFooter.displayName = 'CardFooter';\n\n// GlassCard - Highly polished platform style\nconst GlassCard = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'rounded-2xl border border-indigo-500/20 bg-slate-900/40 backdrop-blur-md shadow-xl transition-all hover:border-indigo-500/30',\n className\n )}\n {...props}\n />\n));\nGlassCard.displayName = 'GlassCard';\n\nconst GlassCardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex flex-col space-y-1.5 p-6 border-b border-indigo-500/10',\n className\n )}\n {...props}\n />\n));\nGlassCardHeader.displayName = 'GlassCardHeader';\n\nconst GlassCardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6', className)} {...props} />\n));\nGlassCardContent.displayName = 'GlassCardContent';\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardDescription,\n CardContent,\n GlassCard,\n GlassCardHeader,\n GlassCardContent,\n};\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport type InputProps = React.InputHTMLAttributes<HTMLInputElement>;\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n 'flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = 'Input';\n\nexport { Input };\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../utils/cn';\n\nconst labelVariants = cva(\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70'\n);\n\nexport interface LabelProps\n extends\n React.LabelHTMLAttributes<HTMLLabelElement>,\n VariantProps<typeof labelVariants> {}\n\nconst Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, ...props }, ref) => (\n <label ref={ref} className={cn(labelVariants(), className)} {...props} />\n )\n);\nLabel.displayName = 'Label';\n\nexport { Label };\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../utils/cn';\n\nconst badgeVariants = cva(\n 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n {\n variants: {\n variant: {\n default:\n 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',\n secondary:\n 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\n destructive:\n 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80',\n outline: 'text-foreground',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nexport interface BadgeProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nexport { Badge, badgeVariants };\n","'use client';\n\nimport * as React from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { X } from 'lucide-react';\nimport { useEffect } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n children: React.ReactNode;\n maxWidth?: string;\n showClose?: boolean;\n variant?: 'default' | 'glass';\n}\n\nexport function Modal({\n isOpen,\n onClose,\n children,\n maxWidth = 'max-w-4xl',\n showClose = true,\n variant = 'glass',\n}: ModalProps) {\n // Prevent scrolling when modal is open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = 'unset';\n }\n return () => {\n document.body.style.overflow = 'unset';\n };\n }, [isOpen]);\n\n // Close on escape key\n useEffect(() => {\n const handleEsc = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n window.addEventListener('keydown', handleEsc);\n return () => window.removeEventListener('keydown', handleEsc);\n }, [onClose]);\n\n return (\n <AnimatePresence>\n {isOpen && (\n <div className=\"fixed inset-0 z-[100] flex items-center justify-center p-4\">\n {/* Backdrop */}\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={onClose}\n className=\"absolute inset-0 bg-slate-950/60 backdrop-blur-md\"\n />\n\n {/* Modal Content */}\n <motion.div\n initial={{ opacity: 0, scale: 0.95, y: 20 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.95, y: 20 }}\n className={cn(\n 'relative w-full max-h-[90vh] overflow-y-auto shadow-2xl transition-all',\n maxWidth,\n variant === 'glass'\n ? 'bg-slate-900/90 backdrop-blur-xl rounded-3xl border border-indigo-500/30'\n : 'bg-white rounded-3xl',\n 'scrollbar-thin scrollbar-thumb-slate-700'\n )}\n >\n {/* Close Button */}\n {showClose && (\n <button\n onClick={onClose}\n className={cn(\n 'absolute top-6 right-6 p-2 rounded-full transition-colors z-50',\n variant === 'glass'\n ? 'text-slate-400 hover:text-white hover:bg-slate-800'\n : 'bg-white/80 backdrop-blur-sm text-slate-500 hover:bg-slate-100'\n )}\n aria-label=\"Close modal\"\n >\n <X className=\"w-6 h-6\" />\n </button>\n )}\n\n <div className=\"p-2 sm:p-4\">{children}</div>\n </motion.div>\n </div>\n )}\n </AnimatePresence>\n );\n}\n","/**\n * Props for the IconBase component.\n */\nexport interface IconBaseProps extends React.SVGProps<SVGSVGElement> {\n /** Additional CSS classes for styling. Defaults to w-6 h-6. */\n className?: string;\n /** The child elements (paths, circles, etc.) of the SVG. */\n children?: React.ReactNode;\n /** Viewbox of the icon. Defaults to \"0 0 24 24\". */\n viewBox?: string;\n}\n\n/**\n * Common stroke props for line-based icons.\n * Reduces duplication across icon components.\n */\nexport const STROKE_ICON_PROPS = {\n strokeWidth: 2,\n strokeLinecap: 'round' as const,\n strokeLinejoin: 'round' as const,\n};\n\n/**\n * Creates an icon component with common stroke props pre-applied.\n * Reduces semantic duplicate patterns in icon definitions.\n *\n * @param _name - Name of the icon (reserved for debugging/future use)\n * @param children - SVG child elements (paths, circles, etc.)\n * @param additionalProps - Additional props to pass to IconBase\n * @returns Icon component with standard stroke styling\n */\nexport function createStrokeIcon(\n _name: string,\n children: React.ReactNode,\n additionalProps?: Partial<IconBaseProps>\n): React.ReactElement {\n return (\n <IconBase {...STROKE_ICON_PROPS} {...additionalProps}>\n {children}\n </IconBase>\n );\n}\n\n/**\n * A shared base component for all icons to reduce code duplication\n * and improve AI signal clarity.\n *\n * @param props - Icon properties and SVG attributes.\n * @returns A standardized SVG icon element.\n */\nexport const IconBase = ({\n className = 'w-6 h-6',\n children,\n viewBox = '0 0 24 24',\n ...props\n}: IconBaseProps) => {\n return (\n <svg\n viewBox={viewBox}\n fill=\"none\"\n stroke=\"currentColor\"\n className={className}\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {children}\n </svg>\n );\n};\n","import { IconBase, IconBaseProps, createStrokeIcon } from './IconBase';\n\n// Icons using common stroke props - uses factory to reduce duplication\nexport function AlertCircleIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'AlertCircle',\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </>,\n props\n );\n}\n\nexport function AlertTriangleIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'AlertTriangle',\n <>\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </>,\n props\n );\n}\n\nexport function ArrowRightIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'ArrowRight',\n <>\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n <polyline points=\"12 5 19 12 12 19\" />\n </>,\n props\n );\n}\n\nexport function BrainIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Brain',\n <>\n <path d=\"M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.74-3.41A2.5 2.5 0 0 1 2 14c0-1.5 1-2 1-2s-1-.5-1-2a2.5 2.5 0 0 1 2.3-2.48A2.5 2.5 0 0 1 7 5.5a2.5 2.5 0 0 1 2.5-3.5z\" />\n <path d=\"M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.74-3.41A2.5 2.5 0 0 0 22 14c0-1.5-1-2-1-2s1-.5 1-2a2.5 2.5 0 0 0-2.3-2.48A2.5 2.5 0 0 0 17 5.5a2.5 2.5 0 0 0-2.5-3.5z\" />\n </>,\n props\n );\n}\n\nexport function ChartIcon(props: IconBaseProps) {\n return (\n <IconBase {...props}>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" strokeWidth=\"1.2\" />\n <rect x=\"7\" y=\"11\" width=\"2\" height=\"6\" fill=\"currentColor\" />\n <rect x=\"11\" y=\"8\" width=\"2\" height=\"9\" fill=\"currentColor\" />\n <rect x=\"15\" y=\"5\" width=\"2\" height=\"12\" fill=\"currentColor\" />\n </IconBase>\n );\n}\n\nexport function ClockIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Clock',\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </>,\n props\n );\n}\n\nexport function FileIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'File',\n <>\n <path d=\"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n </>,\n props\n );\n}\n\nexport function HammerIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Hammer',\n <>\n <path d=\"M18.42 13.59L7.46 2.63a1 1 0 0 0-1.42 0l-4.7 4.7a1 1 0 0 0 0 1.42L11 18.23l1.07-1.07-1.41-1.41 1.42-1.42 1.41 1.41 1.41-1.41-1.41-1.41 1.42-1.42 1.41 1.41 2-2z\" />\n <path d=\"M13 18l6 6\" />\n </>,\n props\n );\n}\n\nexport function InfoIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Info',\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </>,\n props\n );\n}\n\nexport function PlayIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Play',\n <polygon points=\"5 3 19 12 5 21 5 3\" />,\n props\n );\n}\n\nexport function RefreshCwIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'RefreshCw',\n <>\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M3 21v-5h5\" />\n </>,\n props\n );\n}\n\nexport function RobotIcon(props: IconBaseProps) {\n return (\n <IconBase {...props}>\n <rect x=\"3\" y=\"7\" width=\"18\" height=\"11\" rx=\"2\" strokeWidth=\"1.2\" />\n <rect x=\"7\" y=\"10\" width=\"2\" height=\"2\" fill=\"currentColor\" />\n <rect x=\"15\" y=\"10\" width=\"2\" height=\"2\" fill=\"currentColor\" />\n <path d=\"M9 3v2M15 3v2\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </IconBase>\n );\n}\n\nexport function RocketIcon(props: IconBaseProps) {\n return (\n <IconBase {...props}>\n <path\n d=\"M12 2c1.5 0 3 1 3 1s1.2 1.8 1.2 4.2c0 2.4-1.2 5-3.6 7.4-2.4 2.4-5 3.6-7.4 3.6C3.8 18.2 2 17 2 17S3 15.5 3 14c0-2.1 1.5-3.6 1.5-3.6S7.5 9 9 9c2.4 0 3-7 3-7z\"\n strokeWidth=\"0\"\n fill=\"currentColor\"\n />\n <path\n d=\"M14 10c.8.8 2 2 3 3\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </IconBase>\n );\n}\n\nexport function SaveIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Save',\n <>\n <path d=\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\" />\n <polyline points=\"17 21 17 13 7 13 7 21\" />\n <polyline points=\"7 3 7 8 15 8\" />\n </>,\n props\n );\n}\n\nexport function SettingsIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Settings',\n <>\n <path d=\"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.38a2 2 0 0 0-.73-2.73l-.15-.1a2 2 0 0 1-1-1.72v-.51a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </>,\n props\n );\n}\n\nexport function ShieldCheckIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'ShieldCheck',\n <>\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />\n <path d=\"M9 12l2 2 4-4\" />\n </>,\n props\n );\n}\n\nexport function ShieldIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Shield',\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />,\n props\n );\n}\n\nexport function TargetIcon(props: IconBaseProps) {\n return (\n <IconBase {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" strokeWidth=\"1.2\" />\n <circle cx=\"12\" cy=\"12\" r=\"5\" fill=\"currentColor\" />\n <path\n d=\"M22 12h-3M5 12H2M12 2v3M12 19v3\"\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n />\n </IconBase>\n );\n}\n\nexport function TerminalIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Terminal',\n <>\n <polyline points=\"4 17 10 11 4 5\" />\n <line x1=\"12\" y1=\"19\" x2=\"20\" y2=\"19\" />\n </>,\n props\n );\n}\n\nexport function TrashIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Trash',\n <>\n <polyline points=\"3 6 5 6 21 6\" />\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\n </>,\n props\n );\n}\n\nexport function TrendingUpIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'TrendingUp',\n <>\n <polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\" />\n <polyline points=\"17 6 23 6 23 12\" />\n </>,\n props\n );\n}\n\nexport function UploadIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Upload',\n <>\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v4\" />\n <polyline points=\"17 8 12 3 7 8\" />\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\" />\n </>,\n props\n );\n}\n\nexport function WalletIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Wallet',\n <>\n <path d=\"M21 12V7a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-1\" />\n <path d=\"M16 12h5\" />\n <circle cx=\"16\" cy=\"12\" r=\"1\" />\n </>,\n props\n );\n}\n\nexport function ZapIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Zap',\n <polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\" />,\n props\n );\n}\n\nexport default {\n AlertCircleIcon,\n AlertTriangleIcon,\n ArrowRightIcon,\n BrainIcon,\n ChartIcon,\n ClockIcon,\n FileIcon,\n HammerIcon,\n InfoIcon,\n PlayIcon,\n RefreshCwIcon,\n RobotIcon,\n RocketIcon,\n SaveIcon,\n SettingsIcon,\n ShieldCheckIcon,\n ShieldIcon,\n TargetIcon,\n TerminalIcon,\n TrashIcon,\n TrendingUpIcon,\n UploadIcon,\n WalletIcon,\n ZapIcon,\n};\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n}\n\nconst Container = React.forwardRef<HTMLDivElement, ContainerProps>(\n ({ className, size = 'lg', ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'mx-auto w-full px-4 sm:px-6 lg:px-8',\n {\n 'max-w-screen-sm': size === 'sm',\n 'max-w-screen-md': size === 'md',\n 'max-w-screen-lg': size === 'lg',\n 'max-w-screen-xl': size === 'xl',\n 'max-w-full': size === 'full',\n },\n className\n )}\n {...props}\n />\n );\n }\n);\nContainer.displayName = 'Container';\n\nexport { Container };\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\n cols?: 1 | 2 | 3 | 4 | 5 | 6 | 12;\n gap?: 'sm' | 'md' | 'lg' | 'xl';\n}\n\nconst Grid = React.forwardRef<HTMLDivElement, GridProps>(\n ({ className, cols = 3, gap = 'md', ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'grid',\n {\n 'grid-cols-1': cols === 1,\n 'grid-cols-1 sm:grid-cols-2': cols === 2,\n 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3': cols === 3,\n 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4': cols === 4,\n 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-5': cols === 5,\n 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-6': cols === 6,\n 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-12': cols === 12,\n },\n {\n 'gap-2': gap === 'sm',\n 'gap-4': gap === 'md',\n 'gap-6': gap === 'lg',\n 'gap-8': gap === 'xl',\n },\n className\n )}\n {...props}\n />\n );\n }\n);\nGrid.displayName = 'Grid';\n\nexport { Grid };\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: 'horizontal' | 'vertical';\n spacing?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n align?: 'start' | 'center' | 'end' | 'stretch';\n justify?: 'start' | 'center' | 'end' | 'between' | 'around';\n}\n\nconst Stack = React.forwardRef<HTMLDivElement, StackProps>(\n (\n {\n className,\n direction = 'vertical',\n spacing = 'md',\n align = 'stretch',\n justify = 'start',\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex',\n {\n 'flex-col': direction === 'vertical',\n 'flex-row': direction === 'horizontal',\n },\n {\n 'gap-1': spacing === 'xs',\n 'gap-2': spacing === 'sm',\n 'gap-4': spacing === 'md',\n 'gap-6': spacing === 'lg',\n 'gap-8': spacing === 'xl',\n },\n {\n 'items-start': align === 'start',\n 'items-center': align === 'center',\n 'items-end': align === 'end',\n 'items-stretch': align === 'stretch',\n },\n {\n 'justify-start': justify === 'start',\n 'justify-center': justify === 'center',\n 'justify-end': justify === 'end',\n 'justify-between': justify === 'between',\n 'justify-around': justify === 'around',\n },\n className\n )}\n {...props}\n />\n );\n }\n);\nStack.displayName = 'Stack';\n\nexport { Stack };\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface SeparatorProps extends React.HTMLAttributes<HTMLDivElement> {\n orientation?: 'horizontal' | 'vertical';\n decorative?: boolean;\n}\n\nconst Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n (\n { className, orientation = 'horizontal', decorative = true, ...props },\n ref\n ) => (\n <div\n ref={ref}\n role={decorative ? 'none' : 'separator'}\n aria-orientation={orientation}\n className={cn(\n 'shrink-0 bg-border',\n orientation === 'horizontal' ? 'h-[1px] w-full' : 'h-full w-[1px]',\n className\n )}\n {...props}\n />\n )\n);\nSeparator.displayName = 'Separator';\n\nexport { Separator };\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface CheckboxProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'type'\n> {\n label?: string;\n}\n\nconst Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n ({ className, label, id, ...props }, ref) => {\n const checkboxId = id || React.useId();\n\n return (\n <div className=\"flex items-center\">\n <input\n type=\"checkbox\"\n id={checkboxId}\n ref={ref}\n className={cn(\n 'h-4 w-4 rounded border-gray-300 text-primary focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n />\n {label && (\n <label\n htmlFor={checkboxId}\n className=\"ml-2 text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {label}\n </label>\n )}\n </div>\n );\n }\n);\nCheckbox.displayName = 'Checkbox';\n\nexport { Checkbox };\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\nimport { ComponentOption } from '../types';\n\nexport type RadioOption = ComponentOption;\n\nexport interface RadioGroupProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'onChange'\n> {\n options: RadioOption[];\n value?: string;\n onChange?: (value: string) => void;\n name: string;\n orientation?: 'horizontal' | 'vertical';\n}\n\nconst RadioGroup = React.forwardRef<HTMLDivElement, RadioGroupProps>(\n (\n {\n className,\n options,\n value,\n onChange,\n name,\n orientation = 'vertical',\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex',\n orientation === 'vertical' ? 'flex-col gap-2' : 'flex-row gap-4',\n className\n )}\n {...props}\n >\n {options.map((option) => {\n const id = `${name}-${option.value}`;\n return (\n <div key={option.value} className=\"flex items-center\">\n <input\n type=\"radio\"\n id={id}\n name={name}\n value={option.value}\n checked={value === option.value}\n disabled={option.disabled}\n onChange={(e) => onChange?.(e.target.value)}\n className=\"h-4 w-4 border-gray-300 text-primary focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\n />\n <label\n htmlFor={id}\n className=\"ml-2 text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {option.label}\n </label>\n </div>\n );\n })}\n </div>\n );\n }\n);\nRadioGroup.displayName = 'RadioGroup';\n\nexport { RadioGroup };\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface SwitchProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'type'\n> {\n label?: string;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nconst Switch = React.forwardRef<HTMLInputElement, SwitchProps>(\n (\n { className, label, id, checked, onCheckedChange, onChange, ...props },\n ref\n ) => {\n const switchId = id || React.useId();\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e);\n onCheckedChange?.(e.target.checked);\n };\n\n return (\n <div className=\"flex items-center\">\n <label\n htmlFor={switchId}\n className=\"relative inline-flex cursor-pointer items-center\"\n >\n <input\n type=\"checkbox\"\n id={switchId}\n ref={ref}\n checked={checked}\n onChange={handleChange}\n className=\"peer sr-only\"\n {...props}\n />\n <div\n className={cn(\n 'peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[\"\"] peer-checked:bg-primary peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-ring peer-focus:ring-offset-2 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',\n className\n )}\n />\n </label>\n {label && (\n <span className=\"ml-3 text-sm font-medium text-foreground\">\n {label}\n </span>\n )}\n </div>\n );\n }\n);\nSwitch.displayName = 'Switch';\n\nexport { Switch };\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport type TextareaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement>;\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n 'flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nTextarea.displayName = 'Textarea';\n\nexport { Textarea };\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\nimport { ComponentOption } from '../types';\n\nexport type SelectOption = ComponentOption;\n\nexport interface SelectProps extends Omit<\n React.SelectHTMLAttributes<HTMLSelectElement>,\n 'onChange'\n> {\n options: SelectOption[];\n placeholder?: string;\n onChange?: (value: string) => void;\n}\n\nconst Select = React.forwardRef<HTMLSelectElement, SelectProps>(\n ({ className, options, placeholder, onChange, ...props }, ref) => {\n const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n onChange?.(e.target.value);\n };\n\n return (\n <select\n ref={ref}\n className={cn(\n 'flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n onChange={handleChange}\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((option) => (\n <option\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n {option.label}\n </option>\n ))}\n </select>\n );\n }\n);\nSelect.displayName = 'Select';\n\nexport { Select };\n","'use client';\n\nimport React, { useState, useCallback, useMemo } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { cn } from '../utils/cn';\n\nexport interface CodeBlockProps {\n children: React.ReactNode;\n language?: string;\n showCopy?: boolean;\n showHeader?: boolean;\n className?: string;\n variant?: 'default' | 'glass';\n}\n\n// Dedent helper - removes common leading indentation\nfunction dedentCode(code: string): string {\n const normalized = code.replace(/\\t/g, ' ').replace(/[ \\t]+$/gm, '');\n const lines = normalized.split('\\n');\n if (lines.length <= 1) return normalized.trim();\n\n let start = 0;\n while (start < lines.length && lines[start].trim() === '') start++;\n let end = lines.length - 1;\n while (end >= 0 && lines[end].trim() === '') end--;\n\n if (start > end) return '';\n const relevantLines = lines.slice(start, end + 1);\n\n const nonEmpty = relevantLines.filter((l) => l.trim() !== '');\n const minIndent = nonEmpty.reduce((min, line) => {\n const m = line.match(/^\\s*/)?.[0].length ?? 0;\n return Math.min(min, m);\n }, Infinity);\n\n return minIndent === Infinity || minIndent === 0\n ? relevantLines.join('\\n')\n : relevantLines\n .map((l) =>\n l.startsWith(' '.repeat(minIndent)) ? l.slice(minIndent) : l\n )\n .join('\\n');\n}\n\nfunction CopyButton({ code }: { code: string }) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n const textarea = document.createElement('textarea');\n textarea.value = code;\n textarea.style.position = 'fixed';\n textarea.style.opacity = '0';\n document.body.appendChild(textarea);\n textarea.select();\n document.execCommand('copy');\n document.body.removeChild(textarea);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }\n }, [code]);\n\n return (\n <button\n onClick={handleCopy}\n className=\"flex items-center gap-1.5 rounded-md px-2 py-1 text-[10px] font-bold uppercase tracking-wider text-slate-400 hover:bg-slate-700/50 hover:text-cyan-400 transition-all\"\n >\n <AnimatePresence mode=\"wait\">\n {copied ? (\n <motion.span\n key=\"copied\"\n initial={{ opacity: 0, y: 5 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -5 }}\n className=\"text-cyan-400\"\n >\n Copied!\n </motion.span>\n ) : (\n <motion.span\n key=\"copy\"\n initial={{ opacity: 0, y: 5 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -5 }}\n >\n Copy\n </motion.span>\n )}\n </AnimatePresence>\n </button>\n );\n}\n\nexport function CodeBlock({\n children,\n language = 'typescript',\n showCopy = true,\n showHeader = true,\n className = '',\n variant = 'glass',\n}: CodeBlockProps) {\n const codeString = useMemo(() => {\n if (typeof children === 'string') return dedentCode(children);\n try {\n const raw = React.Children.toArray(children)\n .map((c) =>\n typeof c === 'string' ? c : typeof c === 'number' ? String(c) : ''\n )\n .join('');\n return dedentCode(raw);\n } catch {\n return '';\n }\n }, [children]);\n\n return (\n <div\n className={cn(\n 'group relative my-6 overflow-hidden rounded-2xl border transition-all',\n variant === 'glass'\n ? 'border-indigo-500/20 bg-slate-950/40 backdrop-blur-md shadow-2xl'\n : 'border-slate-700 bg-slate-900 shadow-lg',\n className\n )}\n >\n {showHeader && (\n <div\n className={cn(\n 'flex items-center justify-between px-4 py-2 border-b',\n variant === 'glass'\n ? 'border-indigo-500/10 bg-slate-900/20'\n : 'border-slate-800 bg-slate-800/50'\n )}\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"flex gap-1.5\">\n <div className=\"h-2.5 w-2.5 rounded-full bg-red-500/20 border border-red-500/40\" />\n <div className=\"h-2.5 w-2.5 rounded-full bg-amber-500/20 border border-amber-500/40\" />\n <div className=\"h-2.5 w-2.5 rounded-full bg-emerald-500/20 border border-emerald-500/40\" />\n </div>\n <span className=\"ml-2 text-[10px] font-bold uppercase tracking-widest text-slate-500 font-mono\">\n {language}\n </span>\n </div>\n {showCopy && <CopyButton code={codeString} />}\n </div>\n )}\n\n <pre className=\"overflow-x-auto p-4 text-sm leading-relaxed scrollbar-thin scrollbar-thumb-slate-700\">\n <code className=\"font-mono block whitespace-pre text-slate-300\">\n {codeString}\n </code>\n </pre>\n </div>\n );\n}\n\nexport function InlineCode({\n children,\n className = '',\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <code\n className={cn(\n 'rounded-md bg-slate-800/50 border border-slate-700/50 px-1.5 py-0.5 text-xs font-mono text-cyan-400',\n className\n )}\n >\n {children}\n </code>\n );\n}\n","'use client';\n\nimport { motion } from 'framer-motion';\nimport { cn } from '../utils/cn';\n\nexport interface BreadcrumbItem {\n label: string;\n href: string;\n}\n\nexport interface BreadcrumbProps {\n items: BreadcrumbItem[];\n className?: string;\n}\n\nexport function Breadcrumb({ items, className }: BreadcrumbProps) {\n return (\n <nav aria-label=\"Breadcrumb\" className={cn('mb-8', className)}>\n <ol className=\"flex items-center gap-2 text-sm\">\n {items.map((item, index) => (\n <motion.li\n key={item.href}\n initial={{ opacity: 0, x: -10 }}\n animate={{ opacity: 1, x: 0 }}\n transition={{ delay: index * 0.1 }}\n className=\"flex items-center gap-2\"\n >\n {index > 0 && <span className=\"text-slate-600\">/</span>}\n {index === items.length - 1 ? (\n <span className=\"text-cyan-400 font-medium\">{item.label}</span>\n ) : (\n <a\n href={item.href}\n className=\"text-slate-400 hover:text-white transition-colors\"\n >\n {item.label}\n </a>\n )}\n </motion.li>\n ))}\n </ol>\n </nav>\n );\n}\n","'use client';\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { cn } from '../utils/cn';\nimport {\n RocketIcon,\n ChartIcon,\n TrendingUpIcon,\n RobotIcon,\n SettingsIcon,\n} from '../components/icons';\n\n// --- Types ---\n\nexport interface NavItem {\n href: string;\n label: string;\n icon: React.ElementType;\n}\n\nexport interface User {\n id: string;\n name?: string | null;\n email?: string | null;\n image?: string | null;\n}\n\nexport interface Team {\n id: string;\n name: string;\n}\n\nexport interface TeamMember {\n teamId: string;\n team: Team;\n}\n\nexport interface PlatformShellProps {\n children: React.ReactNode;\n user: User | null;\n teams?: TeamMember[];\n overallScore?: number | null;\n activePage?: string;\n pathname?: string;\n onNavigate?: (href: string) => void;\n onSignOut?: () => void;\n onSwitchTeam?: (teamId: string | 'personal') => void;\n logoUrl?: string;\n navItems?: NavItem[];\n LinkComponent?: React.ElementType;\n}\n\n// --- Internal Components ---\n\nfunction NavItemComponent({\n href,\n label,\n icon: Icon,\n isActive,\n onClick,\n LinkComponent = 'a',\n}: NavItem & {\n isActive: boolean;\n onClick?: (e: React.MouseEvent) => void;\n LinkComponent?: any;\n}) {\n const Component = LinkComponent;\n return (\n <Component href={href} onClick={onClick} className=\"block group\">\n <div\n className={cn(\n 'flex items-center gap-3 px-4 py-3 rounded-xl transition-all',\n isActive\n ? 'bg-cyan-500/10 text-cyan-400 border border-cyan-500/20 glow-blue'\n : 'text-slate-400 hover:text-white hover:bg-slate-800/50 border border-transparent hover:glow-blue'\n )}\n >\n <Icon\n className={cn(\n 'w-5 h-5',\n isActive\n ? 'text-cyan-400'\n : 'text-slate-500 group-hover:text-slate-300'\n )}\n />\n <span className=\"text-sm font-semibold tracking-tight\">{label}</span>\n {isActive && (\n <motion.div\n layoutId=\"sidebar-active\"\n className=\"ml-auto w-1.5 h-1.5 rounded-full bg-cyan-400 shadow-[0_0_8px_rgba(34,211,238,0.8)]\"\n />\n )}\n </div>\n </Component>\n );\n}\n\nfunction UserMenu({\n user,\n teams = [],\n currentTeamId,\n onSwitchTeam,\n onSignOut,\n}: {\n user: User;\n teams: TeamMember[];\n currentTeamId: string | 'personal';\n onSwitchTeam?: (teamId: string | 'personal') => void;\n onSignOut?: () => void;\n}) {\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n }\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const currentWorkspaceName =\n currentTeamId === 'personal'\n ? 'Personal Workspace'\n : teams.find((t) => t.teamId === currentTeamId)?.team.name ||\n 'Team Workspace';\n\n return (\n <div className=\"relative\" ref={dropdownRef}>\n <button\n onClick={() => setIsOpen(!isOpen)}\n className=\"flex items-center gap-2 p-1.5 rounded-xl hover:bg-slate-800/50 transition-all border border-transparent hover:border-slate-700/50\"\n >\n {user.image ? (\n <img\n src={user.image}\n alt={user.name || 'User'}\n className=\"w-8 h-8 rounded-lg border border-cyan-500/30\"\n />\n ) : (\n <div className=\"w-8 h-8 rounded-lg bg-indigo-600 flex items-center justify-center text-xs font-bold text-white\">\n {user.name?.[0] || user.email?.[0]}\n </div>\n )}\n <div className=\"text-left hidden sm:block\">\n <p className=\"text-xs font-bold text-white leading-none mb-0.5\">\n {user.name || user.email?.split('@')[0]}\n </p>\n <p className=\"text-[10px] text-slate-400 leading-none truncate max-w-[100px]\">\n {currentWorkspaceName}\n </p>\n </div>\n <svg\n className={cn(\n 'w-4 h-4 text-slate-500 transition-transform',\n isOpen && 'rotate-180'\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </button>\n\n <AnimatePresence>\n {isOpen && (\n <motion.div\n initial={{ opacity: 0, y: 10, scale: 0.95 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: 10, scale: 0.95 }}\n className=\"absolute right-0 mt-2 w-64 bg-slate-900 border border-slate-700 rounded-2xl shadow-2xl z-50 overflow-hidden\"\n >\n <div className=\"p-4 border-b border-slate-800\">\n <p className=\"text-sm font-bold text-white\">{user.name}</p>\n <p className=\"text-xs text-slate-400 truncate\">{user.email}</p>\n </div>\n\n <div className=\"p-2 border-b border-slate-800\">\n <p className=\"px-3 py-1 text-[10px] font-black text-slate-500 uppercase tracking-widest mb-1\">\n Workspaces\n </p>\n <button\n onClick={() => {\n onSwitchTeam?.('personal');\n setIsOpen(false);\n }}\n className={cn(\n 'w-full flex items-center gap-3 px-3 py-2 rounded-lg text-sm transition-colors',\n currentTeamId === 'personal'\n ? 'bg-cyan-500/10 text-cyan-400'\n : 'text-slate-400 hover:bg-slate-800 hover:text-white'\n )}\n >\n <div className=\"w-5 h-5 rounded bg-slate-700 flex items-center justify-center text-[10px] font-bold\">\n P\n </div>\n Personal\n </button>\n {teams.map((t) => (\n <button\n key={t.teamId}\n onClick={() => {\n onSwitchTeam?.(t.teamId);\n setIsOpen(false);\n }}\n className={cn(\n 'w-full flex items-center gap-3 px-3 py-2 rounded-lg text-sm transition-colors',\n currentTeamId === t.teamId\n ? 'bg-purple-500/10 text-purple-400'\n : 'text-slate-400 hover:bg-slate-800 hover:text-white'\n )}\n >\n <div className=\"w-5 h-5 rounded bg-purple-600 flex items-center justify-center text-[10px] font-bold\">\n {t.team.name[0]}\n </div>\n {t.team.name}\n </button>\n ))}\n </div>\n\n <div className=\"p-2\">\n <button\n onClick={onSignOut}\n className=\"w-full flex items-center gap-3 px-3 py-2 rounded-lg text-sm text-red-400 hover:bg-red-500/10 transition-colors\"\n >\n <svg\n className=\"w-4 h-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1\"\n />\n </svg>\n Sign out\n </button>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n}\n\n// --- Main Shell ---\n\nexport function PlatformShell({\n children,\n user,\n teams = [],\n overallScore,\n activePage,\n pathname = '',\n onNavigate,\n onSignOut,\n onSwitchTeam,\n logoUrl = '/logo-text-transparent-dark-theme.png',\n navItems = [\n { href: '/dashboard', label: 'Dashboard', icon: RocketIcon },\n { href: '/strategy', label: 'Scan Strategy', icon: SettingsIcon },\n { href: '/trends', label: 'Trends Explorer', icon: TrendingUpIcon },\n { href: '/map', label: 'Codebase Map', icon: RobotIcon },\n { href: '/metrics', label: 'Methodology', icon: ChartIcon },\n ],\n LinkComponent = 'a',\n}: PlatformShellProps) {\n const [currentTeamId, setCurrentTeamId] = useState<string | 'personal'>(\n 'personal'\n );\n\n const handleSwitchTeam = (teamId: string | 'personal') => {\n setCurrentTeamId(teamId);\n onSwitchTeam?.(teamId);\n };\n\n const Sidebar = () => (\n <aside className=\"hidden lg:flex flex-col w-64 bg-slate-950/50 border-r border-slate-800 h-screen sticky top-0 overflow-y-auto\">\n <div className=\"p-6 flex flex-col h-full\">\n <div className=\"flex items-center justify-center mb-10\">\n <img src={logoUrl} alt=\"AIReady\" className=\"h-9 w-auto\" />\n </div>\n\n <nav className=\"space-y-1.5 flex-1\">\n <p className=\"px-4 py-2 text-[10px] font-black text-slate-500 uppercase tracking-widest mb-2\">\n Workspace\n </p>\n {navItems.map((item) => (\n <NavItemComponent\n key={item.href}\n {...item}\n LinkComponent={LinkComponent}\n isActive={\n pathname === item.href ||\n (item.href !== '/dashboard' && pathname.startsWith(item.href))\n }\n onClick={(e) => {\n if (onNavigate) {\n e.preventDefault();\n onNavigate(item.href);\n }\n }}\n />\n ))}\n </nav>\n\n <div className=\"mt-auto pt-6 space-y-4\">\n <div className=\"p-4 rounded-2xl bg-gradient-to-br from-indigo-500/10 to-purple-500/10 border border-indigo-500/20\">\n <p className=\"text-xs font-bold text-white mb-1\">AI Insights</p>\n <p className=\"text-[10px] text-slate-400 leading-relaxed\">\n {overallScore != null\n ? `Your codebase is ${overallScore}% ready for AI agents.`\n : 'Run a scan to see your AI-readiness score.'}\n </p>\n </div>\n </div>\n </div>\n </aside>\n );\n\n const Navbar = () => (\n <header className=\"sticky top-0 z-20 h-16 border-b border-indigo-500/10 backdrop-blur-md bg-slate-950/20 px-4 sm:px-6 lg:px-8\">\n <div className=\"h-full flex items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <p className=\"text-xs font-semibold text-slate-400 uppercase tracking-widest hidden sm:block glow-text\">\n {activePage || 'Dashboard'}\n </p>\n </div>\n\n <div className=\"flex items-center gap-4\">\n {user && (\n <UserMenu\n user={user}\n teams={teams}\n currentTeamId={currentTeamId}\n onSwitchTeam={handleSwitchTeam}\n onSignOut={onSignOut}\n />\n )}\n </div>\n </div>\n </header>\n );\n\n return (\n <div\n className={cn(\n 'min-h-screen bg-[#0a0a0f]',\n user && 'flex overflow-hidden'\n )}\n >\n {user && <Sidebar />}\n\n <div className={cn('flex-1 flex flex-col min-w-0', user && 'h-screen')}>\n {user && <Navbar />}\n\n <main\n className={cn('relative flex-1', user && 'overflow-y-auto', 'z-10')}\n >\n {user && (\n <>\n <div className=\"absolute inset-0 pointer-events-none -z-10 overflow-hidden\">\n <div\n className=\"absolute rounded-full blur-[60px] opacity-20 bg-radial-gradient from-blue-600/60 to-transparent w-96 h-96 -top-48 -right-48\"\n style={{\n background:\n 'radial-gradient(circle, rgba(59, 130, 246, 0.6), transparent)',\n }}\n />\n <div\n className=\"absolute rounded-full blur-[60px] opacity-20 bg-radial-gradient from-purple-600/60 to-transparent w-80 h-80 bottom-0 -left-40\"\n style={{\n background:\n 'radial-gradient(circle, rgba(139, 92, 246, 0.6), transparent)',\n }}\n />\n </div>\n <div\n className=\"absolute inset-0 opacity-10 -z-10\"\n style={{\n backgroundImage:\n 'linear-gradient(rgba(59, 130, 246, 0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(59, 130, 246, 0.03) 1px, transparent 1px)',\n backgroundSize: '50px 50px',\n }}\n />\n </>\n )}\n {children}\n </main>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { getRating as getCoreRating } from '@aiready/core/client';\nimport { cn } from '../utils/cn';\n\nexport type ScoreRating =\n | 'excellent'\n | 'good'\n | 'fair'\n | 'needs-work'\n | 'critical';\n\nexport interface ScoreBarProps {\n score: number;\n maxScore?: number;\n label: string;\n showScore?: boolean;\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\nconst ratingConfig: Record<\n ScoreRating,\n { color: string; bgColor: string; label: string }\n> = {\n excellent: {\n color: 'bg-green-500',\n bgColor: 'bg-green-100',\n label: 'Excellent',\n },\n good: { color: 'bg-emerald-500', bgColor: 'bg-emerald-100', label: 'Good' },\n fair: { color: 'bg-amber-500', bgColor: 'bg-amber-100', label: 'Fair' },\n 'needs-work': {\n color: 'bg-orange-500',\n bgColor: 'bg-orange-100',\n label: 'Needs Work',\n },\n critical: { color: 'bg-red-500', bgColor: 'bg-red-100', label: 'Critical' },\n};\n\n// Convert Title Case rating from core to lowercase for component use\nfunction getRating(score: number): ScoreRating {\n const coreRating = getCoreRating(score);\n const ratingMap: Record<string, ScoreRating> = {\n Excellent: 'excellent',\n Good: 'good',\n Fair: 'fair',\n 'Needs Work': 'needs-work',\n Critical: 'critical',\n };\n return ratingMap[coreRating] || 'critical';\n}\n\nconst sizeConfig = {\n sm: { height: 'h-1.5', text: 'text-xs', score: 'text-sm' },\n md: { height: 'h-2', text: 'text-sm', score: 'text-base' },\n lg: { height: 'h-3', text: 'text-base', score: 'text-lg' },\n};\n\nexport function ScoreBar({\n score,\n maxScore = 100,\n label,\n showScore = true,\n size = 'md',\n className,\n}: ScoreBarProps) {\n const percentage = Math.min(100, Math.max(0, (score / maxScore) * 100));\n const rating = getRating(percentage);\n const config = ratingConfig[rating];\n const sizes = sizeConfig[size];\n\n return (\n <div className={cn('space-y-1', className)}>\n <div className=\"flex items-center justify-between\">\n <span className={cn('text-slate-700', sizes.text)}>{label}</span>\n {showScore && (\n <span className={cn('font-bold text-slate-900', sizes.score)}>\n {score}/{maxScore}\n </span>\n )}\n </div>\n <div className={cn('w-full rounded-full bg-slate-200', sizes.height)}>\n <div\n className={cn(\n 'rounded-full transition-all duration-500',\n config.color,\n sizes.height\n )}\n style={{ width: `${percentage}%` }}\n />\n </div>\n </div>\n );\n}\n\nexport interface ScoreCardProps {\n score: number;\n title?: string;\n breakdown?: Array<{\n label: string;\n score: number;\n weight?: number;\n }>;\n className?: string;\n}\n\nexport function ScoreCard({\n score,\n title,\n breakdown,\n className,\n}: ScoreCardProps) {\n const rating = getRating(score);\n const config = ratingConfig[rating];\n\n return (\n <div\n className={cn(\n 'rounded-xl border-2 border-slate-200 bg-white p-6 shadow-lg',\n className\n )}\n >\n <div className=\"mb-4\">\n <div className=\"text-4xl font-black text-slate-900\">{score}/100</div>\n <div\n className={cn(\n 'text-lg font-bold',\n `text-${rating === 'excellent' ? 'green' : rating === 'good' ? 'emerald' : rating === 'fair' ? 'amber' : rating === 'needs-work' ? 'orange' : 'red'}-600`\n )}\n >\n {config.label} Rating\n </div>\n {title && <p className=\"text-sm text-slate-600 mt-1\">{title}</p>}\n </div>\n\n {breakdown && breakdown.length > 0 && (\n <div className=\"space-y-3\">\n {breakdown.map((item, index) => (\n <ScoreBar\n key={index}\n score={item.score}\n label={item.label}\n size=\"sm\"\n />\n ))}\n </div>\n )}\n\n {breakdown && breakdown.length > 0 && (\n <div className=\"mt-4 text-xs text-slate-600 bg-slate-50 p-3 rounded-lg\">\n <strong>Formula:</strong>{' '}\n {breakdown\n .map((item) => `${item.score}×${item.weight || 1}`)\n .join(' + ')}{' '}\n / 100 = {score}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { motion } from 'framer-motion';\nimport { cn } from '../utils/cn';\n\nexport interface ScoreCircleProps {\n score: number;\n progress?: number;\n isInView?: boolean;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n showLabel?: boolean;\n className?: string;\n}\n\nexport function ScoreCircle({\n score,\n progress: customProgress,\n isInView = true,\n size = 'md',\n showLabel = true,\n className,\n}: ScoreCircleProps) {\n const progress = customProgress ?? score;\n\n const getScoreColor = () => {\n if (score >= 80)\n return { stroke: '#10b981', glow: 'rgba(16, 185, 129, 0.3)' };\n if (score >= 60)\n return { stroke: '#eab308', glow: 'rgba(234, 179, 8, 0.3)' };\n return { stroke: '#ef4444', glow: 'rgba(239, 68, 68, 0.3)' };\n };\n\n const scoreColor = getScoreColor();\n\n const sizeMap = {\n sm: 'w-32 h-32',\n md: 'w-48 h-48',\n lg: 'w-64 h-64',\n xl: 'w-80 h-80',\n };\n\n const textMap = {\n sm: { score: 'text-3xl', label: 'text-[8px]', title: 'text-sm' },\n md: { score: 'text-5xl', label: 'text-[10px]', title: 'text-lg' },\n lg: { score: 'text-6xl', label: 'text-xs', title: 'text-xl' },\n xl: { score: 'text-7xl', label: 'text-sm', title: 'text-2xl' },\n };\n\n const currentSize = sizeMap[size];\n const currentText = textMap[size];\n\n return (\n <div className={cn('relative', currentSize, className)}>\n <div\n className=\"absolute inset-0 rounded-full blur-2xl opacity-50 transition-all duration-500\"\n style={{ backgroundColor: scoreColor.glow }}\n />\n\n <svg\n className=\"w-full h-full transform -rotate-90 relative z-10\"\n viewBox=\"0 0 100 100\"\n >\n {Array.from({ length: 20 }).map((_, i) => {\n const angle = (i * 360) / 20;\n const startAngle = angle - 85;\n const radius = 42; // Out of 50\n const strokeWidth = 6;\n const gapAngle = 4;\n\n const startX = 50 + radius * Math.cos((startAngle * Math.PI) / 180);\n const startY = 50 + radius * Math.sin((startAngle * Math.PI) / 180);\n const endX =\n 50 +\n radius *\n Math.cos(((startAngle + 360 / 20 - gapAngle) * Math.PI) / 180);\n const endY =\n 50 +\n radius *\n Math.sin(((startAngle + 360 / 20 - gapAngle) * Math.PI) / 180);\n\n const isActive = (i / 20) * 100 <= progress;\n\n return (\n <motion.line\n key={i}\n x1={`${startX}`}\n y1={`${startY}`}\n x2={`${endX}`}\n y2={`${endY}`}\n stroke={isActive ? scoreColor.stroke : '#334155'}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n initial={{ opacity: 0.3 }}\n animate={{\n opacity: isActive ? 1 : 0.3,\n filter: isActive\n ? `drop-shadow(0 0 2px ${scoreColor.stroke})`\n : 'none',\n }}\n transition={{ duration: 0.3 }}\n />\n );\n })}\n </svg>\n\n <div className=\"absolute inset-0 flex flex-col items-center justify-center z-20\">\n <motion.div\n initial={{ scale: 0 }}\n animate={isInView ? { scale: 1 } : { scale: 0 }}\n transition={{ duration: 0.5, delay: 0.3 }}\n className=\"text-center\"\n >\n <motion.div\n className={cn('font-black mb-1', currentText.score)}\n style={{ color: scoreColor.stroke }}\n animate={{\n textShadow: `0 0 20px ${scoreColor.glow}, 0 0 40px ${scoreColor.glow}`,\n }}\n >\n {score}\n </motion.div>\n {showLabel && (\n <>\n <div\n className={cn(\n 'font-bold uppercase tracking-wider text-slate-400 mb-0.5',\n currentText.label\n )}\n >\n AI Readiness\n </div>\n <div\n className={cn('font-black tracking-tight', currentText.title)}\n style={{ color: scoreColor.stroke }}\n >\n SCORE\n </div>\n </>\n )}\n </motion.div>\n </div>\n </div>\n );\n}\n","'use client';\n\nexport interface LoadingSpinnerProps {\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\nconst sizeClasses = {\n sm: 'h-4 w-4',\n md: 'h-8 w-8',\n lg: 'h-12 w-12',\n};\n\nexport function LoadingSpinner({\n size = 'md',\n className = '',\n}: LoadingSpinnerProps) {\n return (\n <div className={`flex items-center justify-center ${className}`}>\n <div\n className={`${sizeClasses[size]} animate-spin rounded-full border-2 border-slate-300 border-t-blue-600`}\n />\n </div>\n );\n}\n\nexport interface LoadingOverlayProps {\n message?: string;\n}\n\nexport function LoadingOverlay({\n message = 'Loading...',\n}: LoadingOverlayProps) {\n return (\n <div className=\"flex flex-col items-center justify-center min-h-[200px] gap-4\">\n <LoadingSpinner size=\"lg\" />\n <p className=\"text-sm text-slate-500 animate-pulse\">{message}</p>\n </div>\n );\n}\n","'use client';\n\nimport React from 'react';\n\nexport interface ErrorDisplayProps {\n title?: string;\n message: string;\n retry?: () => void;\n retryLabel?: string;\n}\n\nexport function ErrorDisplay({\n title = 'Something went wrong',\n message,\n retry,\n retryLabel = 'Try again',\n}: ErrorDisplayProps) {\n return (\n <div className=\"flex flex-col items-center justify-center min-h-[200px] gap-4 p-8\">\n <div className=\"rounded-full bg-red-100 p-3\">\n <svg\n className=\"h-6 w-6 text-red-600\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"1.5\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z\"\n />\n </svg>\n </div>\n <div className=\"text-center\">\n <h3 className=\"text-lg font-semibold text-slate-900\">{title}</h3>\n <p className=\"mt-2 text-sm text-slate-500\">{message}</p>\n </div>\n {retry && (\n <button\n onClick={retry}\n className=\"mt-2 inline-flex items-center gap-2 rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 transition-colors\"\n >\n <svg\n className=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"1.5\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99\"\n />\n </svg>\n {retryLabel}\n </button>\n )}\n </div>\n );\n}\n\nexport interface EmptyStateProps {\n title: string;\n description?: string;\n icon?: React.ReactNode;\n action?: {\n label: string;\n onClick: () => void;\n };\n}\n\nexport function EmptyState({\n title,\n description,\n icon,\n action,\n}: EmptyStateProps) {\n return (\n <div className=\"flex flex-col items-center justify-center min-h-[200px] gap-4 p-8\">\n {icon && <div className=\"rounded-full bg-slate-100 p-3\">{icon}</div>}\n <div className=\"text-center\">\n <h3 className=\"text-lg font-semibold text-slate-900\">{title}</h3>\n {description && (\n <p className=\"mt-2 text-sm text-slate-500\">{description}</p>\n )}\n </div>\n {action && (\n <button\n onClick={action.onClick}\n className=\"mt-2 inline-flex items-center gap-2 rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 transition-colors\"\n >\n {action.label}\n </button>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { MessageSquare, X, Send, Loader2 } from 'lucide-react';\nimport { cn } from '../utils/cn';\n\nexport interface FeedbackWidgetProps {\n apiEndpoint?: string;\n onSuccess?: (message: string) => void;\n onError?: (error: any) => void;\n title?: string;\n description?: string;\n className?: string;\n}\n\nexport function FeedbackWidget({\n apiEndpoint = '/api/feedback',\n onSuccess,\n onError,\n title = 'Share Feedback',\n description = 'What features would you like to see? Found a bug? Let us know!',\n className,\n}: FeedbackWidgetProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [message, setMessage] = useState('');\n const [status, setStatus] = useState<'idle' | 'loading'>('idle');\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!message.trim()) return;\n\n setStatus('loading');\n try {\n const res = await fetch(apiEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ message }),\n });\n\n if (!res.ok) throw new Error('Failed to send feedback');\n\n onSuccess?.(message);\n setMessage('');\n setIsOpen(false);\n } catch (err) {\n onError?.(err);\n } finally {\n setStatus('idle');\n }\n };\n\n return (\n <div className={cn('fixed bottom-6 right-6 z-50', className)}>\n <AnimatePresence>\n {isOpen && (\n <motion.div\n initial={{ opacity: 0, scale: 0.9, y: 20 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.9, y: 20 }}\n className=\"absolute bottom-full mb-4 right-0 w-80 rounded-2xl p-4 bg-slate-900 border border-cyan-500/30 shadow-2xl backdrop-blur-xl top-auto\"\n >\n <div className=\"flex items-center justify-between mb-4\">\n <h4 className=\"font-bold text-white flex items-center gap-2 text-sm\">\n <MessageSquare className=\"w-4 h-4 text-cyan-400\" />\n {title}\n </h4>\n <button\n onClick={() => setIsOpen(false)}\n className=\"text-slate-500 hover:text-white\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n <p className=\"text-xs text-slate-400 mb-4\">{description}</p>\n\n <form onSubmit={handleSubmit} className=\"space-y-3\">\n <textarea\n autoFocus\n value={message}\n onChange={(e) => setMessage(e.target.value)}\n placeholder=\"Type your feedback here...\"\n required\n className=\"w-full bg-slate-800/50 border border-slate-700 rounded-xl px-3 py-2 text-sm text-white h-24 resize-none focus:outline-none focus:ring-1 focus:ring-cyan-500 transition-all\"\n />\n <button\n type=\"submit\"\n disabled={status === 'loading' || !message.trim()}\n className=\"w-full py-2 bg-cyan-600 hover:bg-cyan-500 disabled:opacity-50 text-white font-bold rounded-lg text-sm transition-all flex items-center justify-center gap-2\"\n >\n {status === 'loading' ? (\n <Loader2 className=\"w-4 h-4 animate-spin\" />\n ) : (\n <>\n <Send className=\"w-3 h-3\" />\n Send Feedback\n </>\n )}\n </button>\n </form>\n </motion.div>\n )}\n </AnimatePresence>\n\n <motion.button\n whileHover={{ scale: 1.05 }}\n whileTap={{ scale: 0.95 }}\n onClick={() => setIsOpen(!isOpen)}\n className=\"w-12 h-12 bg-gradient-to-br from-cyan-600 to-blue-600 text-white rounded-full flex items-center justify-center shadow-lg shadow-cyan-500/20 group overflow-hidden relative\"\n >\n <div className=\"absolute inset-0 bg-white/20 opacity-0 group-hover:opacity-100 transition-opacity\" />\n {isOpen ? (\n <X className=\"w-6 h-6\" />\n ) : (\n <MessageSquare className=\"w-6 h-6\" />\n )}\n </motion.button>\n </div>\n );\n}\n","'use client';\n\nimport React, { createContext, useContext, useEffect, useState } from 'react';\n\nexport type Theme = 'dark' | 'light' | 'system';\nexport type EffectiveTheme = 'dark' | 'light';\n\ninterface ThemeContextValue {\n theme: Theme;\n setTheme: (theme: Theme) => void;\n effectiveTheme: EffectiveTheme;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | undefined>(undefined);\n\nconst STORAGE_KEY = 'aiready-theme';\n\nfunction getSystemTheme(): EffectiveTheme {\n if (typeof window === 'undefined') return 'light';\n return window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light';\n}\n\nfunction getStoredTheme(): Theme {\n if (typeof window === 'undefined') return 'system';\n try {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored === 'dark' || stored === 'light' || stored === 'system') {\n return stored;\n }\n } catch {\n // localStorage not available\n }\n return 'system';\n}\n\ninterface ThemeProviderProps {\n children: React.ReactNode;\n defaultTheme?: Theme;\n storageKey?: string;\n}\n\nexport function ThemeProvider({\n children,\n defaultTheme = 'system',\n storageKey = STORAGE_KEY,\n}: ThemeProviderProps) {\n const [theme, setThemeState] = useState<Theme>(defaultTheme);\n const [effectiveTheme, setEffectiveTheme] = useState<EffectiveTheme>('light');\n const [mounted, setMounted] = useState(false);\n\n // Initialize theme from storage on mount\n useEffect(() => {\n const storedTheme = getStoredTheme();\n setThemeState(storedTheme);\n setMounted(true);\n }, []);\n\n // Update effective theme when theme or system preference changes\n useEffect(() => {\n if (!mounted) return;\n\n const updateEffectiveTheme = () => {\n if (theme === 'system') {\n setEffectiveTheme(getSystemTheme());\n } else {\n setEffectiveTheme(theme);\n }\n };\n\n updateEffectiveTheme();\n\n // Listen for system theme changes\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = () => {\n if (theme === 'system') {\n setEffectiveTheme(getSystemTheme());\n }\n };\n\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, [theme, mounted]);\n\n // Apply theme class to document\n useEffect(() => {\n if (!mounted) return;\n\n const root = document.documentElement;\n root.classList.remove('light', 'dark');\n root.classList.add(effectiveTheme);\n }, [effectiveTheme, mounted]);\n\n const setTheme = (newTheme: Theme) => {\n setThemeState(newTheme);\n try {\n localStorage.setItem(storageKey, newTheme);\n } catch {\n // localStorage not available\n }\n };\n\n // Prevent hydration mismatch\n if (!mounted) {\n return (\n <ThemeContext.Provider\n value={{\n theme: defaultTheme,\n setTheme: () => {},\n effectiveTheme: 'light',\n }}\n >\n {children}\n </ThemeContext.Provider>\n );\n }\n\n return (\n <ThemeContext.Provider value={{ theme, setTheme, effectiveTheme }}>\n {children}\n </ThemeContext.Provider>\n );\n}\n\nexport function useTheme(): ThemeContextValue {\n const context = useContext(ThemeContext);\n if (context === undefined) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n}\n","/**\n * Color utilities for charts and visualizations\n */\n\n// Severity colors for issue highlighting\nexport const severityColors = {\n critical: '#ef4444', // red-500\n major: '#f59e0b', // amber-500\n minor: '#eab308', // yellow-500\n info: '#60a5fa', // blue-400\n} as const;\n\n// Domain colors for clustering and categorization\nexport const domainColors = [\n '#3b82f6', // blue-500\n '#8b5cf6', // violet-500\n '#ec4899', // pink-500\n '#10b981', // green-500\n '#f59e0b', // amber-500\n '#06b6d4', // cyan-500\n '#f97316', // orange-500\n '#a855f7', // purple-500\n] as const;\n\n// Chart colors\nexport const chartColors = {\n primary: '#3b82f6',\n success: '#10b981',\n warning: '#f59e0b',\n danger: '#ef4444',\n info: '#06b6d4',\n} as const;\n\n/**\n * Get a color for a domain/category by index\n */\nexport function getDomainColor(index: number): string {\n return domainColors[index % domainColors.length];\n}\n\n/**\n * Get severity color by level\n */\nexport function getSeverityColor(\n severity: keyof typeof severityColors\n): string {\n return severityColors[severity];\n}\n\n/**\n * Convert hex color to RGBA\n */\nexport function hexToRgba(hex: string, alpha: number): string {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n","/**\n * Number formatting utilities for data visualization\n */\n\n/**\n * Format a number with commas for thousands\n * @example formatNumber(1234567) => \"1,234,567\"\n */\nexport function formatNumber(value: number): string {\n return new Intl.NumberFormat('en-US').format(value);\n}\n\n/**\n * Format a number with K/M/B abbreviations\n * @example formatCompactNumber(1234) => \"1.2K\"\n * @example formatCompactNumber(1234567) => \"1.2M\"\n */\nexport function formatCompactNumber(value: number): string {\n return new Intl.NumberFormat('en-US', {\n notation: 'compact',\n maximumFractionDigits: 1,\n }).format(value);\n}\n\n/**\n * Format a percentage with optional decimal places\n * @example formatPercentage(0.1234) => \"12.3%\"\n * @example formatPercentage(0.1234, 0) => \"12%\"\n */\nexport function formatPercentage(value: number, decimals: number = 1): string {\n return `${(value * 100).toFixed(decimals)}%`;\n}\n\n/**\n * Format file size in bytes to human-readable format\n * @example formatFileSize(1024) => \"1.0 KB\"\n * @example formatFileSize(1048576) => \"1.0 MB\"\n */\nexport function formatFileSize(bytes: number): string {\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n let size = bytes;\n let unitIndex = 0;\n\n while (size >= 1024 && unitIndex < units.length - 1) {\n size /= 1024;\n unitIndex++;\n }\n\n return `${size.toFixed(1)} ${units[unitIndex]}`;\n}\n\n/**\n * Format a date as relative time (e.g., \"2 hours ago\")\n * @example formatRelativeTime(new Date(Date.now() - 3600000)) => \"1 hour ago\"\n */\nexport function formatRelativeTime(date: Date): string {\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffSec = Math.floor(diffMs / 1000);\n const diffMin = Math.floor(diffSec / 60);\n const diffHour = Math.floor(diffMin / 60);\n const diffDay = Math.floor(diffHour / 24);\n const diffMonth = Math.floor(diffDay / 30);\n const diffYear = Math.floor(diffDay / 365);\n\n if (diffYear > 0) {\n return `${diffYear} year${diffYear > 1 ? 's' : ''} ago`;\n }\n if (diffMonth > 0) {\n return `${diffMonth} month${diffMonth > 1 ? 's' : ''} ago`;\n }\n if (diffDay > 0) {\n return `${diffDay} day${diffDay > 1 ? 's' : ''} ago`;\n }\n if (diffHour > 0) {\n return `${diffHour} hour${diffHour > 1 ? 's' : ''} ago`;\n }\n if (diffMin > 0) {\n return `${diffMin} minute${diffMin > 1 ? 's' : ''} ago`;\n }\n return 'just now';\n}\n\n/**\n * Format a date in short format (e.g., \"Jan 15, 2024\")\n */\nexport function formatDate(date: Date): string {\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n }).format(date);\n}\n\n/**\n * Format a date with time (e.g., \"Jan 15, 2024 at 3:45 PM\")\n */\nexport function formatDateTime(date: Date): string {\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n }).format(date);\n}\n\n/**\n * Format duration in milliseconds to human-readable format\n * @example formatDuration(3661000) => \"1h 1m 1s\"\n */\nexport function formatDuration(ms: number): string {\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n if (hours > 0) {\n return `${hours}h ${minutes % 60}m ${seconds % 60}s`;\n }\n if (minutes > 0) {\n return `${minutes}m ${seconds % 60}s`;\n }\n return `${seconds}s`;\n}\n\n/**\n * Format a metric value with appropriate unit and precision\n * Useful for displaying various metrics in charts\n */\nexport function formatMetric(\n value: number,\n unit: 'number' | 'bytes' | 'percentage' | 'duration' = 'number'\n): string {\n switch (unit) {\n case 'bytes':\n return formatFileSize(value);\n case 'percentage':\n return formatPercentage(value);\n case 'duration':\n return formatDuration(value);\n default:\n return formatCompactNumber(value);\n }\n}\n\n/**\n * Format a range of values\n * @example formatRange(100, 200) => \"100 - 200\"\n */\nexport function formatRange(min: number, max: number): string {\n return `${formatCompactNumber(min)} - ${formatCompactNumber(max)}`;\n}\n\n/**\n * Format a number with a specific number of decimal places\n * @example formatDecimal(3.14159, 2) => \"3.14\"\n */\nexport function formatDecimal(value: number, decimals: number = 2): string {\n return value.toFixed(decimals);\n}\n","import { getRatingSlug } from '@aiready/core/client';\n\ntype RatingSlug = 'excellent' | 'good' | 'fair' | 'needs-work' | 'critical';\n\ninterface ScoreMetadata {\n color: string;\n bg: string;\n label: string;\n glow: string;\n}\n\nconst SCORE_METADATA: Record<RatingSlug, ScoreMetadata> = {\n excellent: {\n color: 'text-emerald-400',\n bg: 'bg-emerald-900/30 border-emerald-500/30',\n label: 'Excellent',\n glow: 'shadow-emerald-500/20',\n },\n good: {\n color: 'text-emerald-400',\n bg: 'bg-emerald-900/30 border-emerald-500/30',\n label: 'AI-Ready',\n glow: 'shadow-emerald-500/20',\n },\n fair: {\n color: 'text-amber-400',\n bg: 'bg-amber-900/30 border-amber-500/30',\n label: 'Fair',\n glow: 'shadow-amber-500/20',\n },\n 'needs-work': {\n color: 'text-red-400',\n bg: 'bg-red-900/30 border-red-500/30',\n label: 'Needs Improvement',\n glow: 'shadow-red-500/20',\n },\n critical: {\n color: 'text-red-400',\n bg: 'bg-red-900/30 border-red-500/30',\n label: 'Critical Issues',\n glow: 'shadow-red-500/20',\n },\n};\n\nconst DEFAULT_METADATA: ScoreMetadata = {\n color: 'text-slate-400',\n bg: 'bg-slate-800/50 border-slate-700',\n label: 'Not analyzed',\n glow: '',\n};\n\n/**\n * Get the metadata for a score using core rating system\n */\nfunction getMetadata(score: number | null | undefined): ScoreMetadata {\n if (score == null) return DEFAULT_METADATA;\n const rating = getRatingSlug(score) as RatingSlug;\n return SCORE_METADATA[rating] || SCORE_METADATA.critical;\n}\n\n/**\n * Get the Tailwind color class for a score using core rating system\n */\nexport function scoreColor(score: number | null | undefined): string {\n return getMetadata(score).color;\n}\n\n/**\n * Get the Tailwind background/border class for a score using core rating system\n */\nexport function scoreBg(score: number | null | undefined): string {\n return getMetadata(score).bg;\n}\n\n/**\n * Get the display label for a score using core rating system\n */\nexport function scoreLabel(score: number | null | undefined): string {\n return getMetadata(score).label;\n}\n\n/**\n * Get the Tailwind shadow glow class for a score using core rating system\n */\nexport function scoreGlow(score: number | null | undefined): string {\n return getMetadata(score).glow;\n}\n\n/**\n * Get rating from score (for use with ScoreBar component)\n */\nexport function getScoreRating(score: number | null | undefined): RatingSlug {\n if (score == null) return 'critical';\n return getRatingSlug(score) as RatingSlug;\n}\n","import { useEffect, useState } from 'react';\n\n/**\n * Debounce a value with a specified delay\n * Useful for search inputs, filters, and other frequently changing values\n *\n * @param value - The value to debounce\n * @param delay - Delay in milliseconds (default: 300ms)\n * @returns The debounced value\n *\n * @example\n * ```tsx\n * function SearchInput() {\n * const [searchTerm, setSearchTerm] = useState('');\n * const debouncedSearchTerm = useDebounce(searchTerm, 500);\n *\n * useEffect(() => {\n * // This will only run when user stops typing for 500ms\n * if (debouncedSearchTerm) {\n * performSearch(debouncedSearchTerm);\n * }\n * }, [debouncedSearchTerm]);\n *\n * return <input value={searchTerm} onChange={(e) => setSearchTerm(e.target.value)} />;\n * }\n * ```\n */\nexport function useDebounce<T>(value: T, delay: number = 300): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n // Set up the timeout to update debounced value after delay\n const timer = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n // Clean up the timeout if value changes or component unmounts\n return () => {\n clearTimeout(timer);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n","import { useEffect, useRef } from 'react';\nimport * as d3 from 'd3';\n\n/**\n * Hook for managing D3 selections with React lifecycle\n * Provides a ref to the SVG/container element and runs a render function when dependencies change\n *\n * @param renderFn - Function that receives the D3 selection and performs rendering\n * @param dependencies - Array of dependencies that trigger re-render\n * @returns Ref to attach to the SVG/container element\n *\n * @example\n * ```tsx\n * function BarChart({ data }: { data: number[] }) {\n * const ref = useD3(\n * (svg) => {\n * const width = 600;\n * const height = 400;\n * const margin = { top: 20, right: 20, bottom: 30, left: 40 };\n *\n * // Clear previous content\n * svg.selectAll('*').remove();\n *\n * // Set up scales\n * const x = d3.scaleBand()\n * .domain(data.map((_, i) => i.toString()))\n * .range([margin.left, width - margin.right])\n * .padding(0.1);\n *\n * const y = d3.scaleLinear()\n * .domain([0, d3.max(data) || 0])\n * .range([height - margin.bottom, margin.top]);\n *\n * // Draw bars\n * svg.selectAll('rect')\n * .data(data)\n * .join('rect')\n * .attr('x', (_, i) => x(i.toString())!)\n * .attr('y', d => y(d))\n * .attr('width', x.bandwidth())\n * .attr('height', d => y(0) - y(d))\n * .attr('fill', 'steelblue');\n * },\n * [data]\n * );\n *\n * return <svg ref={ref} width={600} height={400} />;\n * }\n * ```\n */\nexport function useD3<T extends SVGSVGElement | HTMLDivElement>(\n renderFn: (selection: d3.Selection<T, unknown, null, undefined>) => void,\n dependencies: React.DependencyList = []\n): React.RefObject<T | null> {\n const ref = useRef<T | null>(null);\n\n useEffect(() => {\n if (ref.current) {\n const selection = d3.select(ref.current);\n renderFn(selection);\n }\n }, dependencies);\n\n return ref;\n}\n\n/**\n * Hook for managing D3 selections with automatic resize handling\n * Similar to useD3 but also triggers re-render on window resize\n *\n * @param renderFn - Function that receives the D3 selection and performs rendering\n * @param dependencies - Array of dependencies that trigger re-render\n * @returns Ref to attach to the SVG/container element\n *\n * @example\n * ```tsx\n * function ResponsiveChart({ data }: { data: number[] }) {\n * const ref = useD3WithResize(\n * (svg) => {\n * const container = svg.node();\n * const width = container?.clientWidth || 600;\n * const height = container?.clientHeight || 400;\n *\n * // Render with responsive dimensions\n * // ...\n * },\n * [data]\n * );\n *\n * return <svg ref={ref} style={{ width: '100%', height: '400px' }} />;\n * }\n * ```\n */\nexport function useD3WithResize<T extends SVGSVGElement | HTMLDivElement>(\n renderFn: (selection: d3.Selection<T, unknown, null, undefined>) => void,\n dependencies: React.DependencyList = []\n): React.RefObject<T | null> {\n const ref = useRef<T | null>(null);\n\n useEffect(() => {\n if (!ref.current) return;\n\n const selection = d3.select(ref.current);\n const render = () => renderFn(selection);\n\n // Initial render\n render();\n\n // Set up resize observer\n const resizeObserver = new ResizeObserver(() => {\n render();\n });\n\n resizeObserver.observe(ref.current);\n\n // Cleanup\n return () => {\n resizeObserver.disconnect();\n };\n }, dependencies);\n\n return ref;\n}\n","import { SimulationNode } from './simulation-types';\n\n/**\n * Stabilizes nodes by zeroing velocities and rounding positions.\n * Extracted to reduce duplicate patterns in useForceSimulation.\n */\nexport function stabilizeNodes(nodes: SimulationNode[]): void {\n nodes.forEach((n) => {\n (n as any).vx = 0;\n (n as any).vy = 0;\n if (typeof n.x === 'number') n.x = Number(n.x.toFixed(3));\n if (typeof n.y === 'number') n.y = Number(n.y.toFixed(3));\n });\n}\n\n/**\n * Seeds nodes with random positions within bounds.\n * Used as fallback when initial positioning fails.\n */\nexport function seedRandomPositions(\n nodes: SimulationNode[],\n width: number,\n height: number\n): void {\n nodes.forEach((n) => {\n n.x = Math.random() * width;\n n.y = Math.random() * height;\n (n as any).vx = (Math.random() - 0.5) * 10;\n (n as any).vy = (Math.random() - 0.5) * 10;\n });\n}\n","// Import helpers from separate module\nimport { stabilizeNodes, seedRandomPositions } from './simulation-helpers';\nimport type {\n SimulationNode,\n SimulationLink,\n ForceSimulationOptions,\n UseForceSimulationReturn,\n} from './simulation-types';\n\nimport { useEffect, useRef, useState } from 'react';\nimport * as d3 from 'd3';\n\n/**\n * Hook for managing d3-force simulations\n * Automatically handles simulation lifecycle, tick updates, and cleanup\n *\n * @param initialNodes - Initial nodes for the simulation\n * @param initialLinks - Initial links for the simulation\n * @param options - Configuration options for the force simulation\n * @returns Simulation state and control functions\n *\n * @example\n * ```tsx\n * function NetworkGraph() {\n * const nodes = [\n * { id: 'node1', name: 'Node 1' },\n * { id: 'node2', name: 'Node 2' },\n * { id: 'node3', name: 'Node 3' },\n * ];\n *\n * const links = [\n * { source: 'node1', target: 'node2' },\n * { source: 'node2', target: 'node3' },\n * ];\n *\n * const { nodes: simulatedNodes, links: simulatedLinks, restart } = useForceSimulation(\n * nodes,\n * links,\n * {\n * width: 800,\n * height: 600,\n * chargeStrength: -500,\n * linkDistance: 150,\n * }\n * );\n *\n * return (\n * <svg width={800} height={600}>\n * {simulatedLinks.map((link, i) => (\n * <line\n * key={i}\n * x1={(link.source as SimulationNode).x}\n * y1={(link.source as SimulationNode).y}\n * x2={(link.target as SimulationNode).x}\n * y2={(link.target as SimulationNode).y}\n * stroke=\"#999\"\n * />\n * ))}\n * {simulatedNodes.map((node) => (\n * <circle\n * key={node.id}\n * cx={node.x}\n * cy={node.y}\n * r={10}\n * fill=\"#69b3a2\"\n * />\n * ))}\n * </svg>\n * );\n * }\n * ```\n */\nexport function useForceSimulation(\n initialNodes: SimulationNode[],\n initialLinks: SimulationLink[],\n options: ForceSimulationOptions\n): UseForceSimulationReturn & { setForcesEnabled: (enabled: boolean) => void } {\n /**\n * Enable or disable the simulation forces (charge and link forces).\n * When disabled, nodes can still be dragged but won't be affected by forces.\n * @param enabled - When true, simulation forces are active; when false, forces are disabled\n */\n const {\n chargeStrength = -300,\n linkDistance = 100,\n linkStrength = 1,\n collisionStrength = 1,\n collisionRadius = 10,\n centerStrength = 0.1,\n width,\n height,\n alphaDecay = 0.0228,\n velocityDecay = 0.4,\n alphaTarget = 0,\n warmAlpha = 0.3,\n alphaMin = 0.01,\n onTick,\n // Optional throttle in milliseconds for tick updates (reduce React re-renders)\n // Lower values = smoother but more CPU; default ~30ms (~33fps)\n stabilizeOnStop = true,\n tickThrottleMs = 33,\n maxSimulationTimeMs = 3000,\n } = options;\n\n const [nodes, setNodes] = useState<SimulationNode[]>(initialNodes);\n const [links, setLinks] = useState<SimulationLink[]>(initialLinks);\n const [isRunning, setIsRunning] = useState(false);\n const [alpha, setAlpha] = useState(1);\n\n const simulationRef = useRef<d3.Simulation<\n SimulationNode,\n SimulationLink\n > | null>(null);\n const stopTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Create lightweight keys for nodes/links so we only recreate the simulation\n // when the actual identity/content of inputs change (not when parent passes\n // new array references on each render).\n const nodesKey = initialNodes.map((n) => n.id).join('|');\n const linksKey = (initialLinks || [])\n .map((l) => {\n const sourceId =\n typeof l.source === 'string'\n ? l.source\n : (l.source as SimulationNode)?.id;\n const targetId =\n typeof l.target === 'string'\n ? l.target\n : (l.target as SimulationNode)?.id;\n const linkType = (l as SimulationLink & { type?: string }).type || '';\n return `${sourceId}->${targetId}:${linkType}`;\n })\n .join('|');\n\n useEffect(() => {\n // Create a copy of nodes and links to avoid mutating the original data\n const nodesCopy = initialNodes.map((node) => ({ ...node }));\n const linksCopy = initialLinks.map((link) => ({ ...link }));\n\n // ALWAYS seed initial positions to ensure nodes don't stack at origin\n // This is critical for force-directed graphs to work properly\n try {\n // Always seed positions for all nodes when simulation is created\n // This ensures nodes start spread out even if they have coordinates\n nodesCopy.forEach((n, i) => {\n // Use deterministic but more widely spread positions based on index\n const angle = (i * 2 * Math.PI) / nodesCopy.length;\n // Larger seed radius to encourage an initial spread\n const radius = Math.min(width, height) * 0.45;\n n.x = width / 2 + radius * Math.cos(angle);\n n.y = height / 2 + radius * Math.sin(angle);\n // Add very small random velocity to avoid large initial motion\n n.vx = (Math.random() - 0.5) * 2;\n n.vy = (Math.random() - 0.5) * 2;\n });\n } catch (e) {\n console.warn('Failed to seed node positions, falling back to random:', e);\n // If error, fall back to random positions\n seedRandomPositions(nodesCopy, width, height);\n }\n\n // Create the simulation\n const simulation = d3.forceSimulation(\n nodesCopy as SimulationNode[]\n ) as d3.Simulation<SimulationNode, SimulationLink>;\n\n // Configure link force separately to avoid using generic type args on d3 helpers\n try {\n const linkForce = d3.forceLink(\n linksCopy as d3.SimulationLinkDatum<SimulationNode>[]\n ) as d3.ForceLink<SimulationNode, d3.SimulationLinkDatum<SimulationNode>>;\n linkForce\n .id((d: SimulationNode) => d.id)\n .distance((d: d3.SimulationLinkDatum<SimulationNode>) => {\n const link = d as SimulationLink & { distance?: number };\n return link && link.distance != null ? link.distance : linkDistance;\n })\n .strength(linkStrength);\n simulation.force(\n 'link',\n linkForce as d3.Force<\n SimulationNode,\n d3.SimulationLinkDatum<SimulationNode>\n >\n );\n } catch (e) {\n console.warn('Failed to configure link force, using fallback:', e);\n // fallback: attach a plain link force\n try {\n simulation.force(\n 'link',\n d3.forceLink(\n linksCopy as d3.SimulationLinkDatum<SimulationNode>[]\n ) as d3.Force<SimulationNode, d3.SimulationLinkDatum<SimulationNode>>\n );\n } catch (fallbackError) {\n console.warn('Fallback link force also failed:', fallbackError);\n }\n }\n try {\n simulation.force(\n 'charge',\n d3.forceManyBody().strength(chargeStrength) as d3.Force<\n SimulationNode,\n d3.SimulationLinkDatum<SimulationNode>\n >\n );\n simulation.force(\n 'center',\n d3\n .forceCenter(width / 2, height / 2)\n .strength(centerStrength) as d3.Force<\n SimulationNode,\n d3.SimulationLinkDatum<SimulationNode>\n >\n );\n const collide = d3\n .forceCollide()\n .radius((d: d3.SimulationNodeDatum) => {\n const node = d as SimulationNode;\n const nodeSize = node && node.size ? (node.size as number) : 10;\n return nodeSize + collisionRadius;\n })\n .strength(collisionStrength) as d3.Force<\n SimulationNode,\n d3.SimulationLinkDatum<SimulationNode>\n >;\n simulation.force('collision', collide);\n simulation.force(\n 'x',\n d3\n .forceX(width / 2)\n .strength(Math.max(0.02, centerStrength * 0.5)) as d3.Force<\n SimulationNode,\n d3.SimulationLinkDatum<SimulationNode>\n >\n );\n simulation.force(\n 'y',\n d3\n .forceY(height / 2)\n .strength(Math.max(0.02, centerStrength * 0.5)) as d3.Force<\n SimulationNode,\n d3.SimulationLinkDatum<SimulationNode>\n >\n );\n simulation.alphaDecay(alphaDecay);\n simulation.velocityDecay(velocityDecay);\n simulation.alphaMin(alphaMin);\n try {\n simulation.alphaTarget(alphaTarget);\n } catch (e) {\n console.warn('Failed to set alpha target:', e);\n }\n try {\n simulation.alpha(warmAlpha);\n } catch (e) {\n console.warn('Failed to set initial alpha:', e);\n }\n } catch (e) {\n console.warn('Failed to configure simulation forces:', e);\n // ignore force configuration errors\n }\n\n simulationRef.current = simulation;\n\n // Force-stop timeout to ensure simulation doesn't run forever.\n if (stopTimeoutRef.current != null) {\n try {\n globalThis.clearTimeout(stopTimeoutRef.current);\n } catch (e) {\n console.warn('Failed to clear simulation timeout:', e);\n }\n stopTimeoutRef.current = null;\n }\n if (maxSimulationTimeMs && maxSimulationTimeMs > 0) {\n stopTimeoutRef.current = globalThis.setTimeout(() => {\n try {\n if (stabilizeOnStop) {\n stabilizeNodes(nodesCopy);\n }\n simulation.alpha(0);\n simulation.stop();\n } catch (e) {\n console.warn('Failed to stop simulation:', e);\n }\n setIsRunning(false);\n setNodes([...nodesCopy]);\n setLinks([...linksCopy]);\n }, maxSimulationTimeMs);\n }\n\n // Update state on each tick. Batch updates via requestAnimationFrame to avoid\n // excessive React re-renders which can cause visual flicker.\n let rafId: number | null = null;\n let lastUpdate = 0;\n const tickHandler = () => {\n try {\n if (typeof onTick === 'function')\n onTick(nodesCopy, linksCopy, simulation);\n } catch (e) {\n console.warn('Tick callback error:', e);\n }\n\n // If simulation alpha has cooled below the configured minimum, stop it to\n // ensure nodes don't drift indefinitely (acts as a hard-stop safeguard).\n try {\n if (simulation.alpha() <= alphaMin) {\n try {\n if (stabilizeOnStop) {\n stabilizeNodes(nodesCopy);\n }\n simulation.stop();\n } catch (e) {\n console.warn('Failed to stop simulation:', e);\n }\n setAlpha(simulation.alpha());\n setIsRunning(false);\n setNodes([...nodesCopy]);\n setLinks([...linksCopy]);\n return;\n }\n } catch (e) {\n console.warn('Error checking simulation alpha:', e);\n }\n\n const now = Date.now();\n const shouldUpdate = now - lastUpdate >= tickThrottleMs;\n if (rafId == null && shouldUpdate) {\n rafId = (\n globalThis.requestAnimationFrame ||\n ((cb: FrameRequestCallback) => setTimeout(cb, 16))\n )(() => {\n rafId = null;\n lastUpdate = Date.now();\n setNodes([...nodesCopy]);\n setLinks([...linksCopy]);\n setAlpha(simulation.alpha());\n setIsRunning(simulation.alpha() > simulation.alphaMin());\n });\n }\n };\n\n simulation.on('tick', tickHandler);\n\n simulation.on('end', () => {\n setIsRunning(false);\n });\n\n // Cleanup on unmount\n return () => {\n try {\n simulation.on('tick', null);\n } catch (e) {\n console.warn('Failed to clear simulation tick handler:', e);\n }\n if (stopTimeoutRef.current != null) {\n try {\n globalThis.clearTimeout(stopTimeoutRef.current);\n } catch (e) {\n console.warn('Failed to clear timeout on cleanup:', e);\n }\n stopTimeoutRef.current = null;\n }\n if (rafId != null) {\n try {\n (\n globalThis.cancelAnimationFrame ||\n ((id: number) => clearTimeout(id))\n )(rafId);\n } catch (e) {\n console.warn('Failed to cancel animation frame:', e);\n }\n rafId = null;\n }\n simulation.stop();\n };\n }, [\n nodesKey,\n linksKey,\n chargeStrength,\n linkDistance,\n linkStrength,\n collisionStrength,\n collisionRadius,\n centerStrength,\n width,\n height,\n alphaDecay,\n velocityDecay,\n alphaTarget,\n alphaMin,\n stabilizeOnStop,\n tickThrottleMs,\n maxSimulationTimeMs,\n ]);\n\n const restart = () => {\n if (simulationRef.current) {\n // Reheat the simulation to a modest alpha target rather than forcing\n // full heat; this matches the Observable pattern and helps stability.\n try {\n simulationRef.current.alphaTarget(warmAlpha).restart();\n } catch {\n simulationRef.current.restart();\n }\n setIsRunning(true);\n // Reset safety timeout when simulation is manually restarted\n if (stopTimeoutRef.current != null) {\n try {\n globalThis.clearTimeout(stopTimeoutRef.current);\n } catch (e) {\n console.warn('Failed to clear simulation timeout:', e);\n }\n stopTimeoutRef.current = null;\n }\n if (maxSimulationTimeMs && maxSimulationTimeMs > 0) {\n stopTimeoutRef.current = globalThis.setTimeout(() => {\n try {\n simulationRef.current?.alpha(0);\n simulationRef.current?.stop();\n } catch (e) {\n console.warn('Failed to stop simulation:', e);\n }\n setIsRunning(false);\n }, maxSimulationTimeMs);\n }\n }\n };\n\n const stop = () => {\n if (simulationRef.current) {\n simulationRef.current.stop();\n setIsRunning(false);\n }\n };\n\n const originalForcesRef = useRef({\n charge: chargeStrength,\n link: linkStrength,\n collision: collisionStrength,\n });\n const forcesEnabledRef = useRef(true);\n\n const setForcesEnabled = (enabled: boolean) => {\n const sim = simulationRef.current;\n if (!sim) return;\n // avoid repeated updates\n if (forcesEnabledRef.current === enabled) return;\n forcesEnabledRef.current = enabled;\n\n try {\n // Only toggle charge and link forces to avoid collapse; keep collision/centering\n const charge = sim.force(\n 'charge'\n ) as d3.ForceManyBody<SimulationNode> | null;\n if (charge && typeof charge.strength === 'function') {\n charge.strength(enabled ? originalForcesRef.current.charge : 0);\n }\n\n const link = sim.force('link') as d3.ForceLink<\n SimulationNode,\n d3.SimulationLinkDatum<SimulationNode>\n > | null;\n if (link && typeof link.strength === 'function') {\n link.strength(enabled ? originalForcesRef.current.link : 0);\n }\n } catch (e) {\n console.warn('Failed to toggle simulation forces:', e);\n }\n };\n\n return {\n nodes,\n links,\n restart,\n stop,\n isRunning,\n alpha,\n setForcesEnabled,\n };\n}\n\n/**\n * Hook for creating a draggable force simulation\n * Provides drag handlers that can be attached to node elements\n *\n * @param simulation - The d3 force simulation instance\n * @returns Drag behavior that can be applied to nodes\n *\n * @example\n * ```tsx\n * function DraggableNetworkGraph() {\n * const simulation = useRef<d3.Simulation<SimulationNode, SimulationLink>>();\n * const drag = useDrag(simulation.current);\n *\n * return (\n * <svg>\n * {nodes.map((node) => (\n * <circle\n * key={node.id}\n * {...drag}\n * cx={node.x}\n * cy={node.y}\n * r={10}\n * />\n * ))}\n * </svg>\n * );\n * }\n * ```\n */\nexport function useDrag(\n simulation: d3.Simulation<SimulationNode, any> | null | undefined\n) {\n const dragStarted = (event: any, node: SimulationNode) => {\n if (!simulation) return;\n if (!event.active) simulation.alphaTarget(0.3).restart();\n node.fx = node.x;\n node.fy = node.y;\n };\n\n const dragged = (event: any, node: SimulationNode) => {\n node.fx = event.x;\n node.fy = event.y;\n };\n\n const dragEnded = (event: any, node: SimulationNode) => {\n if (!simulation) return;\n if (!event.active) simulation.alphaTarget(0);\n node.fx = null;\n node.fy = null;\n };\n\n return {\n onDragStart: dragStarted,\n onDrag: dragged,\n onDragEnd: dragEnded,\n };\n}\n","import { useCallback, useEffect } from 'react';\nimport * as d3 from 'd3';\nimport { GraphNode } from './types';\n\n/** Pins a node to its current position (sets fx/fy to current x/y) */\nexport function pinNode(node: GraphNode): void {\n node.fx = node.x;\n node.fy = node.y;\n}\n\n/** Unpins a node (sets fx/fy to null) */\nexport function unpinNode(node: GraphNode): void {\n node.fx = null;\n node.fy = null;\n}\n\n/** Unpins all nodes - helper for bulk unpin operations */\nexport function unpinAllNodes(nodes: GraphNode[]): void {\n nodes.forEach(unpinNode);\n}\n\n/**\n * Hook for managing D3 zoom behavior on an SVG element.\n */\nexport function useGraphZoom(\n svgRef: React.RefObject<SVGSVGElement | null>,\n gRef: React.RefObject<SVGGElement | null>,\n enableZoom: boolean,\n setTransform: (transform: { k: number; x: number; y: number }) => void,\n transformRef: React.MutableRefObject<{ k: number; x: number; y: number }>\n) {\n useEffect(() => {\n if (!enableZoom || !svgRef.current || !gRef.current) return;\n\n const svg = d3.select(svgRef.current);\n const g = d3.select(gRef.current);\n\n const zoom = (d3 as any)\n .zoom()\n .scaleExtent([0.1, 10])\n .on('zoom', (event: any) => {\n g.attr('transform', event.transform);\n transformRef.current = event.transform;\n setTransform(event.transform);\n });\n\n svg.call(zoom);\n\n return () => {\n svg.on('.zoom', null);\n };\n }, [enableZoom, svgRef, gRef, setTransform, transformRef]);\n}\n\n/**\n * Hook for managing window-level drag events for smooth node dragging.\n */\nexport function useWindowDrag(\n enableDrag: boolean,\n svgRef: React.RefObject<SVGSVGElement | null>,\n transformRef: React.MutableRefObject<{ k: number; x: number; y: number }>,\n dragActiveRef: React.MutableRefObject<boolean>,\n dragNodeRef: React.MutableRefObject<GraphNode | null>,\n onDragEnd: () => void\n) {\n useEffect(() => {\n if (!enableDrag) return;\n\n const handleWindowMove = (event: MouseEvent) => {\n if (!dragActiveRef.current || !dragNodeRef.current) return;\n const svg = svgRef.current;\n if (!svg) return;\n const rect = svg.getBoundingClientRect();\n const t: any = transformRef.current;\n const x = (event.clientX - rect.left - t.x) / t.k;\n const y = (event.clientY - rect.top - t.y) / t.k;\n dragNodeRef.current.fx = x;\n dragNodeRef.current.fy = y;\n };\n\n const handleWindowUp = () => {\n if (!dragActiveRef.current) return;\n onDragEnd();\n dragNodeRef.current = null;\n dragActiveRef.current = false;\n };\n\n const handleWindowLeave = (event: MouseEvent) => {\n if (event.relatedTarget === null) handleWindowUp();\n };\n\n window.addEventListener('mousemove', handleWindowMove);\n window.addEventListener('mouseup', handleWindowUp);\n window.addEventListener('mouseout', handleWindowLeave);\n window.addEventListener('blur', handleWindowUp);\n\n return () => {\n window.removeEventListener('mousemove', handleWindowMove);\n window.removeEventListener('mouseup', handleWindowUp);\n window.removeEventListener('mouseout', handleWindowLeave);\n window.removeEventListener('blur', handleWindowUp);\n };\n }, [enableDrag, svgRef, transformRef, dragActiveRef, dragNodeRef, onDragEnd]);\n}\n\n/**\n * Hook for managing node interactions (drag, double-click pinning).\n */\nexport function useNodeInteractions(\n enableDrag: boolean,\n _nodes: GraphNode[],\n _pinnedNodes: Set<string>,\n setPinnedNodes: React.Dispatch<React.SetStateAction<Set<string>>>,\n restart: () => void,\n stop: () => void\n) {\n const handleDragStart = useCallback(\n (event: React.MouseEvent, node: GraphNode) => {\n if (!enableDrag) return;\n event.preventDefault();\n event.stopPropagation();\n pinNode(node);\n setPinnedNodes((prev) => new Set([...prev, node.id]));\n stop();\n },\n [enableDrag, stop, setPinnedNodes]\n );\n\n const handleNodeDoubleClick = useCallback(\n (event: React.MouseEvent, node: GraphNode) => {\n event.stopPropagation();\n if (!enableDrag) return;\n if (node.fx === null || node.fx === undefined) {\n pinNode(node);\n setPinnedNodes((prev) => new Set([...prev, node.id]));\n } else {\n unpinNode(node);\n setPinnedNodes((prev) => {\n const next = new Set(prev);\n next.delete(node.id);\n return next;\n });\n }\n restart();\n },\n [enableDrag, restart, setPinnedNodes]\n );\n\n return { handleDragStart, handleNodeDoubleClick };\n}\n","/**\n * Default visual constants for the ForceDirectedGraph component.\n */\nexport const DEFAULT_NODE_COLOR = '#64748b';\nexport const DEFAULT_NODE_SIZE = 10;\nexport const DEFAULT_LINK_COLOR = '#94a3b8';\nexport const DEFAULT_LINK_WIDTH = 1;\n\n/**\n * Layout and interaction thresholds.\n */\nexport const CIRCULAR_LAYOUT_RADIUS_RATIO = 0.35;\nexport const FIT_VIEW_PADDING = 40;\nexport const ZOOM_MIN_SCALE = 0.1;\nexport const ZOOM_MAX_SCALE = 10;\n\n/**\n * Transition and animation durations.\n */\nexport const TRANSITION_DURATION_MS = 300;\n\n/**\n * Package boundary styling.\n */\nexport const PACKAGE_BOUNDARY_FILL = 'rgba(148,163,184,0.06)';\nexport const PACKAGE_BOUNDARY_STROKE = '#475569';\nexport const PACKAGE_BOUNDARY_STROKE_WIDTH = 2;\nexport const PACKAGE_BOUNDARY_DASH = '6 6';\nexport const PACKAGE_LABEL_FONT_SIZE = 11;\nexport const PACKAGE_LABEL_COLOR = '#475569';\n","import { GraphNode } from './force-directed/types';\nimport { CIRCULAR_LAYOUT_RADIUS_RATIO } from './constants';\n\n/**\n * Calculates node positions for a circular layout.\n *\n * @param nodes - Array of dependency nodes.\n * @param width - Canvas width.\n * @param height - Canvas height.\n * @lastUpdated 2026-03-18\n */\nexport function applyCircularLayout(\n nodes: GraphNode[],\n width: number,\n height: number\n): void {\n const centerX = width / 2;\n const centerY = height / 2;\n const radius = Math.min(width, height) * CIRCULAR_LAYOUT_RADIUS_RATIO;\n\n nodes.forEach((node, i) => {\n const angle = (2 * Math.PI * i) / nodes.length;\n node.fx = centerX + Math.cos(angle) * radius;\n node.fy = centerY + Math.sin(angle) * radius;\n node.x = node.fx;\n node.y = node.fy;\n });\n}\n\n/**\n * Calculates node positions for a hierarchical layout by grouping packages.\n *\n * @param nodes - Array of dependency nodes.\n * @param width - Canvas width.\n * @param height - Canvas height.\n * @lastUpdated 2026-03-18\n */\nexport function applyHierarchicalLayout(\n nodes: GraphNode[],\n width: number,\n height: number\n): void {\n const groups = new Map<string, GraphNode[]>();\n nodes.forEach((n: any) => {\n const key = n.packageGroup || n.group || 'root';\n if (!groups.has(key)) groups.set(key, []);\n groups.get(key)!.push(n);\n });\n\n const groupArray = Array.from(groups.entries());\n const cols = Math.ceil(Math.sqrt(groupArray.length));\n const groupSpacingX = (width * 0.8) / cols;\n const groupSpacingY = (height * 0.8) / Math.ceil(groupArray.length / cols);\n\n groupArray.forEach(([groupKey, groupNodes], gi) => {\n const col = gi % cols;\n const row = Math.floor(gi / cols);\n const groupX = (col + 0.5) * groupSpacingX;\n const groupY = (row + 0.5) * groupSpacingY;\n\n if (groupKey.startsWith('pkg:') || groupKey === groupKey) {\n groupNodes.forEach((n, ni) => {\n const angle = (2 * Math.PI * ni) / groupNodes.length;\n const r = Math.min(80, 20 + groupNodes.length * 8);\n n.fx = groupX + Math.cos(angle) * r;\n n.fy = groupY + Math.sin(angle) * r;\n n.x = n.fx;\n n.y = n.fy;\n });\n }\n });\n}\n\n/**\n * Calculates initial random positions for nodes in a force-directed layout.\n *\n * @param nodes - Array of dependency nodes.\n * @param width - Canvas width.\n * @param height - Canvas height.\n * @lastUpdated 2026-03-18\n */\nexport function applyInitialForceLayout(\n nodes: GraphNode[],\n width: number,\n height: number\n): void {\n nodes.forEach((node) => {\n if (node.fx === undefined || node.fx === null) {\n node.x = Math.random() * width;\n node.y = Math.random() * height;\n }\n });\n}\n","import { useCallback, useEffect, useMemo } from 'react';\nimport { GraphNode, LayoutType } from './types';\nimport {\n applyCircularLayout,\n applyHierarchicalLayout,\n applyInitialForceLayout,\n} from '../layout-utils';\n\n/**\n * Hook for managing graph layout algorithms.\n */\nexport function useGraphLayout(\n initialNodes: GraphNode[],\n width: number,\n height: number,\n layout: LayoutType,\n restart: () => void\n) {\n // Initial positioning - delegate to layout utils\n const nodes = useMemo(() => {\n if (!initialNodes || !initialNodes.length) return initialNodes;\n const copy = initialNodes.map((n) => ({ ...n }));\n if (layout === 'circular') applyCircularLayout(copy, width, height);\n else if (layout === 'hierarchical')\n applyHierarchicalLayout(copy, width, height);\n else applyInitialForceLayout(copy, width, height);\n return copy;\n }, [initialNodes, width, height, layout]);\n\n // Apply layout-specific positioning when layout changes\n useEffect(() => {\n if (!nodes || nodes.length === 0) return;\n if (layout === 'circular') applyCircularLayout(nodes, width, height);\n else if (layout === 'hierarchical')\n applyHierarchicalLayout(nodes, width, height);\n\n restart();\n }, [layout, nodes, width, height, restart]);\n\n return { nodes };\n}\n\n/**\n * Hook for managing simulation controls (stubs for API compatibility).\n */\nexport function useSimulationControls() {\n const restart = useCallback(() => {}, []);\n const stop = useCallback(() => {}, []);\n const setForcesEnabled = useCallback((enabled?: boolean) => {\n void enabled;\n }, []);\n\n return { restart, stop, setForcesEnabled };\n}\n","import { useCallback } from 'react';\nimport * as d3 from 'd3';\nimport { GraphNode, LayoutType, ForceDirectedGraphHandle } from './types';\nimport { pinNode, unpinAllNodes } from './useGraphInteractions';\nimport {\n DEFAULT_NODE_SIZE,\n FIT_VIEW_PADDING,\n TRANSITION_DURATION_MS,\n} from '../constants';\n\ninterface UseImperativeHandleProps {\n nodes: GraphNode[];\n pinnedNodes: Set<string>;\n setPinnedNodes: React.Dispatch<React.SetStateAction<Set<string>>>;\n restart: () => void;\n width: number;\n height: number;\n layout: LayoutType;\n handleLayoutChange: (layout: LayoutType) => void;\n setForcesEnabled: (enabled: boolean) => void;\n svgRef: React.RefObject<SVGSVGElement | null>;\n gRef: React.RefObject<SVGGElement | null>;\n setTransform: (transform: { k: number; x: number; y: number }) => void;\n internalDragEnabledRef: React.MutableRefObject<boolean>;\n}\n\n/**\n * Creates the imperative handle methods for the ForceDirectedGraph component.\n */\nexport function useImperativeHandleMethods({\n nodes,\n pinnedNodes,\n setPinnedNodes,\n restart,\n width,\n height,\n layout,\n handleLayoutChange,\n svgRef,\n gRef,\n setTransform,\n internalDragEnabledRef,\n}: UseImperativeHandleProps): ForceDirectedGraphHandle {\n const pinAll = useCallback(() => {\n const newPinned = new Set<string>();\n nodes.forEach((node) => {\n pinNode(node);\n newPinned.add(node.id);\n });\n setPinnedNodes(newPinned);\n restart();\n }, [nodes, setPinnedNodes, restart]);\n\n const unpinAll = useCallback(() => {\n unpinAllNodes(nodes);\n setPinnedNodes(new Set());\n restart();\n }, [nodes, setPinnedNodes, restart]);\n\n const resetLayout = useCallback(() => {\n unpinAllNodes(nodes);\n setPinnedNodes(new Set());\n restart();\n }, [nodes, setPinnedNodes, restart]);\n\n const fitView = useCallback(() => {\n if (!svgRef.current || !nodes.length) return;\n let minX = Infinity,\n maxX = -Infinity,\n minY = Infinity,\n maxY = -Infinity;\n nodes.forEach((node) => {\n if (node.x !== undefined && node.y !== undefined) {\n const size = node.size || DEFAULT_NODE_SIZE;\n minX = Math.min(minX, node.x - size);\n maxX = Math.max(maxX, node.x + size);\n minY = Math.min(minY, node.y - size);\n maxY = Math.max(maxY, node.y + size);\n }\n });\n if (!isFinite(minX)) return;\n const scale = Math.min(\n (width - FIT_VIEW_PADDING * 2) / (maxX - minX),\n (height - FIT_VIEW_PADDING * 2) / (maxY - minY),\n 10\n );\n const x = width / 2 - ((minX + maxX) / 2) * scale;\n const y = height / 2 - ((minY + maxY) / 2) * scale;\n if (gRef.current && svgRef.current) {\n const svg = d3.select(svgRef.current);\n const newTransform = d3.zoomIdentity.translate(x, y).scale(scale);\n svg\n .transition()\n .duration(TRANSITION_DURATION_MS)\n .call((d3 as any).zoom().transform as any, newTransform);\n setTransform(newTransform);\n }\n }, [nodes, width, height, svgRef, gRef, setTransform]);\n\n const getPinnedNodes = useCallback(\n () => Array.from(pinnedNodes),\n [pinnedNodes]\n );\n\n const setDragMode = useCallback(\n (enabled: boolean) => {\n internalDragEnabledRef.current = enabled;\n },\n [internalDragEnabledRef]\n );\n\n const setLayoutMethod = useCallback(\n (newLayout: LayoutType) => {\n handleLayoutChange(newLayout);\n },\n [handleLayoutChange]\n );\n\n const getLayout = useCallback(() => layout, [layout]);\n\n return {\n pinAll,\n unpinAll,\n resetLayout,\n fitView,\n getPinnedNodes,\n setDragMode,\n setLayout: setLayoutMethod,\n getLayout,\n };\n}\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ControlButtonProps {\n onClick: () => void;\n active?: boolean;\n icon: string;\n label: string;\n disabled?: boolean;\n}\n\nexport const ControlButton: React.FC<ControlButtonProps> = ({\n onClick,\n active = false,\n icon,\n label,\n disabled = false,\n}) => (\n <div className=\"relative group\">\n <button\n onClick={onClick}\n disabled={disabled}\n className={cn(\n 'p-2 rounded-lg transition-all duration-200',\n active\n ? 'bg-blue-500 text-white shadow-md hover:bg-blue-600'\n : 'bg-gray-100 text-gray-700 hover:bg-gray-200',\n disabled && 'opacity-50 cursor-not-allowed hover:bg-gray-100',\n 'dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600 dark:active:bg-blue-600'\n )}\n title={label}\n >\n <span className=\"text-lg\">{icon}</span>\n </button>\n <div className=\"absolute left-full ml-2 px-2 py-1 bg-gray-900 text-white text-xs rounded whitespace-nowrap opacity-0 group-hover:opacity-100 transition-opacity duration-200 pointer-events-none z-50\">\n {label}\n </div>\n </div>\n);\n","import React from 'react';\nimport { cn } from '../../utils/cn';\nimport { ControlButton } from './ControlButton';\n\nexport interface GraphControlsProps {\n dragEnabled?: boolean;\n onDragToggle?: (enabled: boolean) => void;\n manualLayout?: boolean;\n onManualLayoutToggle?: (enabled: boolean) => void;\n onPinAll?: () => void;\n onUnpinAll?: () => void;\n onReset?: () => void;\n onFitView?: () => void;\n pinnedCount?: number;\n totalNodes?: number;\n visible?: boolean;\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n className?: string;\n}\n\nexport const GraphControls: React.FC<GraphControlsProps> = ({\n dragEnabled = true,\n onDragToggle,\n manualLayout = false,\n onManualLayoutToggle,\n onPinAll,\n onUnpinAll,\n onReset,\n onFitView,\n pinnedCount = 0,\n totalNodes = 0,\n visible = true,\n position = 'top-left',\n className,\n}) => {\n if (!visible) return null;\n\n const positionClasses: Record<string, string> = {\n 'top-left': 'top-4 left-4',\n 'top-right': 'top-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'bottom-right': 'bottom-4 right-4',\n };\n\n return (\n <div\n className={cn(\n 'fixed z-40 bg-white dark:bg-gray-800 rounded-lg shadow-lg p-2 border border-gray-200 dark:border-gray-700',\n positionClasses[position],\n className\n )}\n >\n <div className=\"flex flex-col gap-2\">\n <ControlButton\n onClick={() => onDragToggle?.(!dragEnabled)}\n active={dragEnabled}\n icon=\"✋\"\n label={dragEnabled ? 'Drag enabled' : 'Drag disabled'}\n />\n\n <ControlButton\n onClick={() => onManualLayoutToggle?.(!manualLayout)}\n active={manualLayout}\n icon=\"🔧\"\n label={manualLayout ? 'Manual layout: ON' : 'Manual layout: OFF'}\n />\n\n <div className=\"w-8 h-px bg-gray-300 dark:bg-gray-600 mx-auto my-1\" />\n\n <div className=\"flex gap-1\">\n <ControlButton\n onClick={() => onPinAll?.()}\n disabled={totalNodes === 0}\n icon=\"📌\"\n label={`Pin all nodes (${totalNodes})`}\n />\n <ControlButton\n onClick={() => onUnpinAll?.()}\n disabled={pinnedCount === 0}\n icon=\"📍\"\n label={`Unpin all (${pinnedCount} pinned)`}\n />\n </div>\n\n <div className=\"w-8 h-px bg-gray-300 dark:bg-gray-600 mx-auto my-1\" />\n\n <ControlButton\n onClick={() => onFitView?.()}\n disabled={totalNodes === 0}\n icon=\"🎯\"\n label=\"Fit all nodes in view\"\n />\n\n <ControlButton\n onClick={() => onReset?.()}\n disabled={totalNodes === 0}\n icon=\"↺\"\n label=\"Reset to auto-layout\"\n />\n </div>\n\n <div className=\"mt-3 pt-3 border-t border-gray-200 dark:border-gray-700 text-xs text-gray-600 dark:text-gray-400\">\n <div className=\"whitespace-nowrap\">\n <strong>Nodes:</strong> {totalNodes}\n </div>\n {pinnedCount > 0 && (\n <div className=\"whitespace-nowrap\">\n <strong>Pinned:</strong> {pinnedCount}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nGraphControls.displayName = 'GraphControls';\n","import React from 'react';\nimport type { GraphNode } from './force-directed/types';\n\nexport interface NodeItemProps {\n node: GraphNode;\n isSelected: boolean;\n isHovered: boolean;\n pinned: boolean;\n defaultNodeSize: number;\n defaultNodeColor: string;\n showLabel?: boolean;\n onClick?: (n: GraphNode) => void;\n onDoubleClick?: (e: React.MouseEvent, n: GraphNode) => void;\n onMouseEnter?: (n: GraphNode) => void;\n onMouseLeave?: () => void;\n onMouseDown?: (e: React.MouseEvent, n: GraphNode) => void;\n}\n\nexport const NodeItem: React.FC<NodeItemProps> = ({\n node,\n isSelected,\n isHovered,\n pinned,\n defaultNodeSize,\n defaultNodeColor,\n showLabel = true,\n onClick,\n onDoubleClick,\n onMouseEnter,\n onMouseLeave,\n onMouseDown,\n}) => {\n const nodeSize = node.size || defaultNodeSize;\n const nodeColor = node.color || defaultNodeColor;\n\n const x = node.x ?? 0;\n const y = node.y ?? 0;\n\n return (\n <g\n key={node.id}\n className=\"cursor-pointer node\"\n data-id={node.id}\n transform={`translate(${x},${y})`}\n onClick={() => onClick?.(node)}\n onDoubleClick={(e) => onDoubleClick?.(e, node)}\n onMouseEnter={() => onMouseEnter?.(node)}\n onMouseLeave={() => onMouseLeave?.()}\n onMouseDown={(e) => onMouseDown?.(e, node)}\n >\n <circle\n r={nodeSize}\n fill={nodeColor}\n stroke={isSelected ? '#000' : isHovered ? '#666' : 'none'}\n strokeWidth={pinned ? 3 : isSelected ? 2.5 : isHovered ? 2 : 1.5}\n opacity={isHovered || isSelected ? 1 : 0.9}\n />\n {pinned && (\n <circle\n r={nodeSize + 4}\n fill=\"none\"\n stroke=\"#ff6b6b\"\n strokeWidth={1}\n opacity={0.5}\n className=\"pointer-events-none\"\n />\n )}\n {showLabel && node.label && (\n <text\n y={nodeSize + 15}\n fill=\"#333\"\n fontSize=\"12\"\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n pointerEvents=\"none\"\n className=\"select-none\"\n >\n {node.label}\n </text>\n )}\n </g>\n );\n};\n\nexport default NodeItem;\n","import React from 'react';\nimport type { GraphLink, GraphNode } from './force-directed/types';\n\nexport interface LinkItemProps {\n link: GraphLink;\n onClick?: (l: GraphLink) => void;\n defaultWidth?: number;\n showLabel?: boolean;\n nodes?: GraphNode[]; // Optional nodes array to resolve string IDs to node objects\n}\n\nexport const LinkItem: React.FC<LinkItemProps> = ({\n link,\n onClick,\n defaultWidth,\n showLabel = true,\n nodes = [],\n}) => {\n const src =\n (link.source as any)?.id ??\n (typeof link.source === 'string' ? link.source : undefined);\n const tgt =\n (link.target as any)?.id ??\n (typeof link.target === 'string' ? link.target : undefined);\n\n // Helper to get node position from source/target (which could be node object or string ID)\n const getNodePosition = (\n nodeOrId: string | GraphNode\n ): { x: number; y: number } | null => {\n if (typeof nodeOrId === 'object' && nodeOrId !== null) {\n // It's a node object\n const node = nodeOrId as GraphNode;\n return { x: node.x ?? 0, y: node.y ?? 0 };\n } else if (typeof nodeOrId === 'string') {\n // It's a string ID, try to find in nodes array\n const found = nodes.find((n) => n.id === nodeOrId);\n if (found) return { x: found.x ?? 0, y: found.y ?? 0 };\n }\n return null;\n };\n\n const sourcePos = getNodePosition(link.source);\n const targetPos = getNodePosition(link.target);\n\n // If we can't get positions, render nothing (or a placeholder)\n if (!sourcePos || !targetPos) {\n return null;\n }\n\n // Calculate midpoint for label positioning\n const midX = (sourcePos.x + targetPos.x) / 2;\n const midY = (sourcePos.y + targetPos.y) / 2;\n\n return (\n <g>\n <line\n x1={sourcePos.x}\n y1={sourcePos.y}\n x2={targetPos.x}\n y2={targetPos.y}\n data-source={src}\n data-target={tgt}\n stroke={link.color}\n strokeWidth={link.width ?? defaultWidth ?? 1}\n opacity={0.6}\n className=\"cursor-pointer transition-opacity hover:opacity-100\"\n onClick={() => onClick?.(link)}\n />\n {showLabel && link.label && (\n <text\n x={midX}\n y={midY}\n fill=\"#666\"\n fontSize=\"10\"\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n pointerEvents=\"none\"\n >\n {link.label}\n </text>\n )}\n </g>\n );\n};\n\nexport default LinkItem;\n","import React from 'react';\nimport {\n PACKAGE_BOUNDARY_FILL,\n PACKAGE_BOUNDARY_STROKE,\n PACKAGE_BOUNDARY_STROKE_WIDTH,\n PACKAGE_BOUNDARY_DASH,\n PACKAGE_LABEL_COLOR,\n PACKAGE_LABEL_FONT_SIZE,\n} from './constants';\n\ninterface PackageBoundariesProps {\n packageBounds: Record<string, { x: number; y: number; r: number }>;\n}\n\n/**\n * Renders the circular boundaries and labels for package groups in the force-directed graph.\n *\n * @lastUpdated 2026-03-18\n */\nexport const PackageBoundaries: React.FC<PackageBoundariesProps> = ({\n packageBounds,\n}) => {\n if (!packageBounds || Object.keys(packageBounds).length === 0) return null;\n\n return (\n <g className=\"package-boundaries\" pointerEvents=\"none\">\n {Object.entries(packageBounds).map(([pid, b]) => (\n <g key={pid}>\n <circle\n cx={b.x}\n cy={b.y}\n r={b.r}\n fill={PACKAGE_BOUNDARY_FILL}\n stroke={PACKAGE_BOUNDARY_STROKE}\n strokeWidth={PACKAGE_BOUNDARY_STROKE_WIDTH}\n strokeDasharray={PACKAGE_BOUNDARY_DASH}\n opacity={0.9}\n />\n <text\n x={b.x}\n y={Math.max(12, b.y - b.r + 14)}\n fill={PACKAGE_LABEL_COLOR}\n fontSize={PACKAGE_LABEL_FONT_SIZE}\n textAnchor=\"middle\"\n pointerEvents=\"none\"\n >\n {pid.replace(/^pkg:/, '')}\n </text>\n </g>\n ))}\n </g>\n );\n};\n\nPackageBoundaries.displayName = 'PackageBoundaries';\n","import React from 'react';\nimport { cn } from '../../utils/cn';\nimport NodeItem from '../NodeItem';\nimport LinkItem from '../LinkItem';\nimport { PackageBoundaries } from '../PackageBoundaries';\nimport {\n DEFAULT_NODE_COLOR,\n DEFAULT_NODE_SIZE,\n DEFAULT_LINK_COLOR,\n DEFAULT_LINK_WIDTH,\n} from '../constants';\nimport { GraphNode, GraphLink, ForceDirectedGraphProps } from './types';\nimport { unpinAllNodes } from './useGraphInteractions';\n\ninterface GraphCanvasProps extends Pick<\n ForceDirectedGraphProps,\n | 'width'\n | 'height'\n | 'className'\n | 'selectedNodeId'\n | 'hoveredNodeId'\n | 'defaultNodeColor'\n | 'defaultNodeSize'\n | 'defaultLinkColor'\n | 'defaultLinkWidth'\n | 'showNodeLabels'\n | 'showLinkLabels'\n | 'onNodeClick'\n | 'onNodeHover'\n | 'onLinkClick'\n | 'packageBounds'\n> {\n svgRef: React.RefObject<SVGSVGElement | null>;\n gRef: React.RefObject<SVGGElement | null>;\n nodes: GraphNode[];\n links: GraphLink[];\n pinnedNodes: Set<string>;\n handleNodeDoubleClick: (e: React.MouseEvent, node: GraphNode) => void;\n handleDragStart: (e: React.MouseEvent, node: GraphNode) => void;\n restart: () => void;\n setPinnedNodes: React.Dispatch<React.SetStateAction<Set<string>>>;\n}\n\nexport const GraphCanvas: React.FC<GraphCanvasProps> = ({\n svgRef,\n gRef,\n width,\n height,\n className,\n nodes,\n links,\n pinnedNodes,\n selectedNodeId,\n hoveredNodeId,\n defaultNodeColor = DEFAULT_NODE_COLOR,\n defaultNodeSize = DEFAULT_NODE_SIZE,\n defaultLinkColor = DEFAULT_LINK_COLOR,\n defaultLinkWidth = DEFAULT_LINK_WIDTH,\n showNodeLabels = true,\n showLinkLabels = false,\n onNodeClick,\n onNodeHover,\n onLinkClick,\n packageBounds,\n handleNodeDoubleClick,\n handleDragStart,\n restart,\n setPinnedNodes,\n}) => {\n return (\n <svg\n ref={svgRef}\n width={width}\n height={height}\n className={cn('bg-white dark:bg-gray-900', className)}\n onDoubleClick={() => {\n unpinAllNodes(nodes);\n setPinnedNodes(new Set());\n restart();\n }}\n >\n <defs>\n <marker\n id=\"arrow\"\n viewBox=\"0 0 10 10\"\n refX=\"20\"\n refY=\"5\"\n markerWidth=\"6\"\n markerHeight=\"6\"\n orient=\"auto\"\n >\n <path d=\"M 0 0 L 10 5 L 0 10 z\" fill={defaultLinkColor} />\n </marker>\n </defs>\n\n <g ref={gRef}>\n {links.map((link, i) => (\n <LinkItem\n key={`link-${i}`}\n link={link as GraphLink}\n onClick={onLinkClick}\n defaultWidth={defaultLinkWidth}\n showLabel={showLinkLabels}\n nodes={nodes}\n />\n ))}\n\n {nodes.map((node) => (\n <NodeItem\n key={node.id}\n node={node}\n isSelected={selectedNodeId === node.id}\n isHovered={hoveredNodeId === node.id}\n pinned={pinnedNodes.has(node.id)}\n defaultNodeSize={defaultNodeSize}\n defaultNodeColor={defaultNodeColor}\n showLabel={showNodeLabels}\n onClick={onNodeClick}\n onDoubleClick={handleNodeDoubleClick}\n onMouseEnter={(n) => onNodeHover?.(n)}\n onMouseLeave={() => onNodeHover?.(null)}\n onMouseDown={handleDragStart}\n />\n ))}\n <PackageBoundaries packageBounds={packageBounds || {}} />\n </g>\n </svg>\n );\n};\n","import {\n useCallback,\n useEffect,\n useRef,\n useState,\n forwardRef,\n useImperativeHandle,\n} from 'react';\nimport * as d3 from 'd3';\nimport {\n GraphNode,\n LayoutType,\n ForceDirectedGraphHandle,\n ForceDirectedGraphProps,\n} from './types';\nimport {\n useGraphZoom,\n useWindowDrag,\n useNodeInteractions,\n} from './useGraphInteractions';\nimport { useGraphLayout, useSimulationControls } from './useGraphLayout';\nimport { useImperativeHandleMethods } from './useImperativeHandle';\nimport { GraphCanvas } from './GraphCanvas';\n\nexport const ForceDirectedGraph = forwardRef<\n ForceDirectedGraphHandle,\n ForceDirectedGraphProps\n>(\n (\n {\n nodes: initialNodes,\n links: initialLinks,\n width,\n height,\n enableZoom = true,\n enableDrag = true,\n onNodeClick,\n onNodeHover,\n onLinkClick,\n selectedNodeId,\n hoveredNodeId,\n defaultNodeColor,\n defaultNodeSize,\n defaultLinkColor,\n defaultLinkWidth,\n showNodeLabels,\n showLinkLabels,\n className,\n manualLayout = false,\n onManualLayoutChange,\n packageBounds,\n layout: externalLayout,\n onLayoutChange,\n },\n ref\n ) => {\n const svgRef = useRef<SVGSVGElement>(null);\n const gRef = useRef<SVGGElement>(null);\n const [transform, setTransform] = useState({ k: 1, x: 0, y: 0 });\n const transformRef = useRef(transform);\n const dragNodeRef = useRef<GraphNode | null>(null);\n const dragActiveRef = useRef(false);\n const [pinnedNodes, setPinnedNodes] = useState<Set<string>>(new Set());\n const internalDragEnabledRef = useRef(enableDrag);\n const [layout, setLayout] = useState<LayoutType>(externalLayout || 'force');\n\n useEffect(() => {\n if (externalLayout && externalLayout !== layout)\n setLayout(externalLayout);\n }, [externalLayout, layout]);\n\n const handleLayoutChange = useCallback(\n (newLayout: LayoutType) => {\n setLayout(newLayout);\n onLayoutChange?.(newLayout);\n },\n [onLayoutChange]\n );\n\n useEffect(() => {\n internalDragEnabledRef.current = enableDrag;\n }, [enableDrag]);\n\n const { restart, stop, setForcesEnabled } = useSimulationControls();\n const { nodes } = useGraphLayout(\n initialNodes,\n width,\n height,\n layout,\n restart\n );\n\n useEffect(() => {\n setForcesEnabled(!(manualLayout || pinnedNodes.size > 0));\n }, [manualLayout, pinnedNodes, setForcesEnabled]);\n\n useImperativeHandle(\n ref,\n () =>\n useImperativeHandleMethods({\n nodes,\n pinnedNodes,\n setPinnedNodes,\n restart,\n width,\n height,\n layout,\n handleLayoutChange,\n setForcesEnabled,\n svgRef,\n gRef,\n setTransform,\n internalDragEnabledRef,\n }),\n [\n nodes,\n pinnedNodes,\n restart,\n width,\n height,\n layout,\n handleLayoutChange,\n setForcesEnabled,\n ]\n );\n\n useEffect(() => {\n onManualLayoutChange?.(manualLayout);\n }, [manualLayout, onManualLayoutChange]);\n\n useGraphZoom(svgRef, gRef, enableZoom, setTransform, transformRef);\n useWindowDrag(\n enableDrag,\n svgRef,\n transformRef,\n dragActiveRef,\n dragNodeRef,\n () => {\n setForcesEnabled(true);\n restart();\n }\n );\n\n useEffect(() => {\n if (!gRef.current) return;\n const g = d3.select(gRef.current);\n g.selectAll('g.node').each(function (this: any) {\n const d = d3.select(this).datum() as any;\n if (d)\n d3.select(this).attr(\n 'transform',\n `translate(${d.x || 0},${d.y || 0})`\n );\n });\n g.selectAll('line').each(function (this: any) {\n const l = d3.select(this).datum() as any;\n if (!l) return;\n const s =\n typeof l.source === 'object'\n ? l.source\n : nodes.find((n) => n.id === l.source);\n const t =\n typeof l.target === 'object'\n ? l.target\n : nodes.find((n) => n.id === l.target);\n if (s && t)\n d3.select(this)\n .attr('x1', s.x)\n .attr('y1', s.y)\n .attr('x2', t.x)\n .attr('y2', t.y);\n });\n }, [nodes, initialLinks]);\n\n const { handleDragStart, handleNodeDoubleClick } = useNodeInteractions(\n enableDrag,\n nodes,\n pinnedNodes,\n setPinnedNodes,\n restart,\n stop\n );\n\n useEffect(() => {\n if (!gRef.current || !enableDrag) return;\n const g = d3.select(gRef.current);\n const dragBehavior = (d3 as any)\n .drag()\n .on('start', (event: any) => {\n const target = (event.sourceEvent?.target || event.target) as Element;\n const id = target.closest?.('g.node')?.getAttribute('data-id');\n if (!id || !internalDragEnabledRef.current) return;\n const node = nodes.find((n) => n.id === id);\n if (!node) return;\n if (!event.active) restart();\n dragActiveRef.current = true;\n dragNodeRef.current = node;\n })\n .on('drag', (event: any) => {\n if (!dragActiveRef.current || !dragNodeRef.current || !svgRef.current)\n return;\n const rect = svgRef.current.getBoundingClientRect();\n dragNodeRef.current.fx =\n (event.sourceEvent.clientX - rect.left - transform.x) / transform.k;\n dragNodeRef.current.fy =\n (event.sourceEvent.clientY - rect.top - transform.y) / transform.k;\n })\n .on('end', () => {\n setForcesEnabled(true);\n restart();\n });\n\n g.selectAll('g.node').call(dragBehavior);\n return () => {\n g.selectAll('g.node').on('.drag', null);\n };\n }, [gRef, enableDrag, nodes, transform, restart, setForcesEnabled]);\n\n return (\n <GraphCanvas\n svgRef={svgRef}\n gRef={gRef}\n width={width}\n height={height}\n className={className}\n nodes={nodes}\n links={initialLinks}\n pinnedNodes={pinnedNodes}\n selectedNodeId={selectedNodeId}\n hoveredNodeId={hoveredNodeId}\n defaultNodeColor={defaultNodeColor}\n defaultNodeSize={defaultNodeSize}\n defaultLinkColor={defaultLinkColor}\n defaultLinkWidth={defaultLinkWidth}\n showNodeLabels={showNodeLabels}\n showLinkLabels={showLinkLabels}\n onNodeClick={onNodeClick}\n onNodeHover={onNodeHover}\n onLinkClick={onLinkClick}\n packageBounds={packageBounds}\n handleNodeDoubleClick={handleNodeDoubleClick}\n handleDragStart={handleDragStart}\n restart={restart}\n setPinnedNodes={setPinnedNodes}\n />\n );\n }\n);\n\nForceDirectedGraph.displayName = 'ForceDirectedGraph';\n"]}
1
+ {"version":3,"sources":["../src/utils/cn.ts","../src/components/button.tsx","../src/components/card.tsx","../src/components/input.tsx","../src/components/label.tsx","../src/components/badge.tsx","../src/components/modal.tsx","../src/components/icons/IconBase.tsx","../src/components/icons/index.tsx","../src/components/container.tsx","../src/components/grid.tsx","../src/components/stack.tsx","../src/components/separator.tsx","../src/components/checkbox.tsx","../src/components/radio-group.tsx","../src/components/switch.tsx","../src/components/textarea.tsx","../src/components/select.tsx","../src/code-block/CodeBlock.tsx","../src/navigation/Breadcrumb.tsx","../src/navigation/PlatformShell.tsx","../src/data-display/ScoreBar.tsx","../src/data-display/ScoreCircle.tsx","../src/feedback/LoadingSpinner.tsx","../src/feedback/ErrorDisplay.tsx","../src/feedback/FeedbackWidget.tsx","../src/theme/ThemeProvider.tsx","../src/utils/colors.ts","../src/utils/formatters.ts","../src/utils/score.ts","../src/hooks/useDebounce.ts","../src/hooks/useD3.ts","../src/hooks/simulation-helpers.ts","../src/hooks/simulation-constants.ts","../src/hooks/useForceSimulation.ts","../src/charts/force-directed/useGraphInteractions.ts","../src/charts/constants.ts","../src/charts/layout-utils.ts","../src/charts/force-directed/useGraphLayout.ts","../src/charts/force-directed/useImperativeHandle.ts","../src/charts/force-directed/ControlButton.tsx","../src/charts/force-directed/GraphControls.tsx","../src/charts/NodeItem.tsx","../src/charts/LinkItem.tsx","../src/charts/PackageBoundaries.tsx","../src/charts/force-directed/GraphCanvas.tsx","../src/charts/force-directed/ForceDirectedGraph.tsx"],"names":["React","jsx","React3","cva","React4","jsxs","React5","React6","React7","React8","React9","React10","React11","React12","React13","AnimatePresence","motion","useState","useEffect","Fragment","getCoreRating","scoreColor","X","useRef","d3","useCallback","d33","zoom","useMemo","d34","forwardRef","d35"],"mappings":"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","file":"index.js","sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Merges class names using clsx and tailwind-merge\n * @param inputs - Class values to merge\n * @returns Merged class names\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../utils/cn';\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive:\n 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n outline:\n 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\n secondary:\n 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n // Platform specific high-polish variants\n glow: 'bg-gradient-to-r from-cyan-600 to-blue-600 text-white shadow-lg shadow-cyan-500/20 hover:shadow-cyan-500/40 hover:scale-[1.02] active:scale-[0.98]',\n glass:\n 'bg-slate-800/50 backdrop-blur-sm border border-slate-700 text-slate-200 hover:bg-slate-700/50 hover:text-white',\n accent:\n 'bg-cyan-500/10 text-cyan-400 border border-cyan-500/20 hover:bg-cyan-500/20',\n },\n size: {\n default: 'h-10 px-4 py-2',\n sm: 'h-9 rounded-md px-3',\n lg: 'h-11 rounded-md px-8',\n icon: 'h-10 w-10',\n // Extra sizes for dashboard use\n xs: 'h-7 rounded-md px-2 text-[10px] font-bold uppercase tracking-wider',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nexport interface ButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, ...props }, ref) => {\n return (\n <button\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n }\n);\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'rounded-lg border bg-card text-card-foreground shadow-sm',\n className\n )}\n {...props}\n />\n));\nCard.displayName = 'Card';\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('flex flex-col space-y-1.5 p-6', className)}\n {...props}\n />\n));\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\n 'text-2xl font-semibold leading-none tracking-tight',\n className\n )}\n {...props}\n />\n));\nCardTitle.displayName = 'CardTitle';\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n));\nCardDescription.displayName = 'CardDescription';\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />\n));\nCardContent.displayName = 'CardContent';\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('flex items-center p-6 pt-0', className)}\n {...props}\n />\n));\nCardFooter.displayName = 'CardFooter';\n\n// GlassCard - Highly polished platform style\nconst GlassCard = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'rounded-2xl border border-indigo-500/20 bg-slate-900/40 backdrop-blur-md shadow-xl transition-all hover:border-indigo-500/30',\n className\n )}\n {...props}\n />\n));\nGlassCard.displayName = 'GlassCard';\n\nconst GlassCardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'flex flex-col space-y-1.5 p-6 border-b border-indigo-500/10',\n className\n )}\n {...props}\n />\n));\nGlassCardHeader.displayName = 'GlassCardHeader';\n\nconst GlassCardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6', className)} {...props} />\n));\nGlassCardContent.displayName = 'GlassCardContent';\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardDescription,\n CardContent,\n GlassCard,\n GlassCardHeader,\n GlassCardContent,\n};\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport type InputProps = React.InputHTMLAttributes<HTMLInputElement>;\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n 'flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nInput.displayName = 'Input';\n\nexport { Input };\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../utils/cn';\n\nconst labelVariants = cva(\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70'\n);\n\nexport interface LabelProps\n extends\n React.LabelHTMLAttributes<HTMLLabelElement>,\n VariantProps<typeof labelVariants> {}\n\nconst Label = React.forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, ...props }, ref) => (\n <label ref={ref} className={cn(labelVariants(), className)} {...props} />\n )\n);\nLabel.displayName = 'Label';\n\nexport { Label };\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../utils/cn';\n\nconst badgeVariants = cva(\n 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n {\n variants: {\n variant: {\n default:\n 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',\n secondary:\n 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\n destructive:\n 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80',\n outline: 'text-foreground',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nexport interface BadgeProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nexport { Badge, badgeVariants };\n","'use client';\n\nimport * as React from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { X } from 'lucide-react';\nimport { useEffect } from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n children: React.ReactNode;\n maxWidth?: string;\n showClose?: boolean;\n variant?: 'default' | 'glass';\n}\n\nexport function Modal({\n isOpen,\n onClose,\n children,\n maxWidth = 'max-w-4xl',\n showClose = true,\n variant = 'glass',\n}: ModalProps) {\n // Prevent scrolling when modal is open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = 'unset';\n }\n return () => {\n document.body.style.overflow = 'unset';\n };\n }, [isOpen]);\n\n // Close on escape key\n useEffect(() => {\n const handleEsc = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n window.addEventListener('keydown', handleEsc);\n return () => window.removeEventListener('keydown', handleEsc);\n }, [onClose]);\n\n return (\n <AnimatePresence>\n {isOpen && (\n <div className=\"fixed inset-0 z-[100] flex items-center justify-center p-4\">\n {/* Backdrop */}\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n onClick={onClose}\n className=\"absolute inset-0 bg-slate-950/60 backdrop-blur-md\"\n />\n\n {/* Modal Content */}\n <motion.div\n initial={{ opacity: 0, scale: 0.95, y: 20 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.95, y: 20 }}\n className={cn(\n 'relative w-full max-h-[90vh] overflow-y-auto shadow-2xl transition-all',\n maxWidth,\n variant === 'glass'\n ? 'bg-slate-900/90 backdrop-blur-xl rounded-3xl border border-indigo-500/30'\n : 'bg-white rounded-3xl',\n 'scrollbar-thin scrollbar-thumb-slate-700'\n )}\n >\n {/* Close Button */}\n {showClose && (\n <button\n onClick={onClose}\n className={cn(\n 'absolute top-6 right-6 p-2 rounded-full transition-colors z-50',\n variant === 'glass'\n ? 'text-slate-400 hover:text-white hover:bg-slate-800'\n : 'bg-white/80 backdrop-blur-sm text-slate-500 hover:bg-slate-100'\n )}\n aria-label=\"Close modal\"\n >\n <X className=\"w-6 h-6\" />\n </button>\n )}\n\n <div className=\"p-2 sm:p-4\">{children}</div>\n </motion.div>\n </div>\n )}\n </AnimatePresence>\n );\n}\n","/**\n * Props for the IconBase component.\n */\nexport interface IconBaseProps extends React.SVGProps<SVGSVGElement> {\n /** Additional CSS classes for styling. Defaults to w-6 h-6. */\n className?: string;\n /** The child elements (paths, circles, etc.) of the SVG. */\n children?: React.ReactNode;\n /** Viewbox of the icon. Defaults to \"0 0 24 24\". */\n viewBox?: string;\n}\n\n/**\n * Common stroke props for line-based icons.\n * Reduces duplication across icon components.\n */\nexport const STROKE_ICON_PROPS = {\n strokeWidth: 2,\n strokeLinecap: 'round' as const,\n strokeLinejoin: 'round' as const,\n};\n\n/**\n * Creates an icon component with common stroke props pre-applied.\n * Reduces semantic duplicate patterns in icon definitions.\n *\n * @param _name - Name of the icon (reserved for debugging/future use)\n * @param children - SVG child elements (paths, circles, etc.)\n * @param additionalProps - Additional props to pass to IconBase\n * @returns Icon component with standard stroke styling\n */\nexport function createStrokeIcon(\n _name: string,\n children: React.ReactNode,\n additionalProps?: Partial<IconBaseProps>\n): React.ReactElement {\n return (\n <IconBase {...STROKE_ICON_PROPS} {...additionalProps}>\n {children}\n </IconBase>\n );\n}\n\n/**\n * A shared base component for all icons to reduce code duplication\n * and improve AI signal clarity.\n *\n * @param props - Icon properties and SVG attributes.\n * @returns A standardized SVG icon element.\n */\nexport const IconBase = ({\n className = 'w-6 h-6',\n children,\n viewBox = '0 0 24 24',\n ...props\n}: IconBaseProps) => {\n return (\n <svg\n viewBox={viewBox}\n fill=\"none\"\n stroke=\"currentColor\"\n className={className}\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {children}\n </svg>\n );\n};\n","import { IconBase, IconBaseProps, createStrokeIcon } from './IconBase';\n\n// Icons using common stroke props - uses factory to reduce duplication\nexport function AlertCircleIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'AlertCircle',\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </>,\n props\n );\n}\n\nexport function AlertTriangleIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'AlertTriangle',\n <>\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </>,\n props\n );\n}\n\nexport function ArrowRightIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'ArrowRight',\n <>\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n <polyline points=\"12 5 19 12 12 19\" />\n </>,\n props\n );\n}\n\nexport function BrainIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Brain',\n <>\n <path d=\"M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.74-3.41A2.5 2.5 0 0 1 2 14c0-1.5 1-2 1-2s-1-.5-1-2a2.5 2.5 0 0 1 2.3-2.48A2.5 2.5 0 0 1 7 5.5a2.5 2.5 0 0 1 2.5-3.5z\" />\n <path d=\"M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.74-3.41A2.5 2.5 0 0 0 22 14c0-1.5-1-2-1-2s1-.5 1-2a2.5 2.5 0 0 0-2.3-2.48A2.5 2.5 0 0 0 17 5.5a2.5 2.5 0 0 0-2.5-3.5z\" />\n </>,\n props\n );\n}\n\nexport function ChartIcon(props: IconBaseProps) {\n return (\n <IconBase {...props}>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" strokeWidth=\"1.2\" />\n <rect x=\"7\" y=\"11\" width=\"2\" height=\"6\" fill=\"currentColor\" />\n <rect x=\"11\" y=\"8\" width=\"2\" height=\"9\" fill=\"currentColor\" />\n <rect x=\"15\" y=\"5\" width=\"2\" height=\"12\" fill=\"currentColor\" />\n </IconBase>\n );\n}\n\nexport function ClockIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Clock',\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </>,\n props\n );\n}\n\nexport function FileIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'File',\n <>\n <path d=\"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n </>,\n props\n );\n}\n\nexport function HammerIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Hammer',\n <>\n <path d=\"M18.42 13.59L7.46 2.63a1 1 0 0 0-1.42 0l-4.7 4.7a1 1 0 0 0 0 1.42L11 18.23l1.07-1.07-1.41-1.41 1.42-1.42 1.41 1.41 1.41-1.41-1.41-1.41 1.42-1.42 1.41 1.41 2-2z\" />\n <path d=\"M13 18l6 6\" />\n </>,\n props\n );\n}\n\nexport function InfoIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Info',\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </>,\n props\n );\n}\n\nexport function PlayIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Play',\n <polygon points=\"5 3 19 12 5 21 5 3\" />,\n props\n );\n}\n\nexport function RefreshCwIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'RefreshCw',\n <>\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M3 21v-5h5\" />\n </>,\n props\n );\n}\n\nexport function RobotIcon(props: IconBaseProps) {\n return (\n <IconBase {...props}>\n <rect x=\"3\" y=\"7\" width=\"18\" height=\"11\" rx=\"2\" strokeWidth=\"1.2\" />\n <rect x=\"7\" y=\"10\" width=\"2\" height=\"2\" fill=\"currentColor\" />\n <rect x=\"15\" y=\"10\" width=\"2\" height=\"2\" fill=\"currentColor\" />\n <path d=\"M9 3v2M15 3v2\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </IconBase>\n );\n}\n\nexport function RocketIcon(props: IconBaseProps) {\n return (\n <IconBase {...props}>\n <path\n d=\"M12 2c1.5 0 3 1 3 1s1.2 1.8 1.2 4.2c0 2.4-1.2 5-3.6 7.4-2.4 2.4-5 3.6-7.4 3.6C3.8 18.2 2 17 2 17S3 15.5 3 14c0-2.1 1.5-3.6 1.5-3.6S7.5 9 9 9c2.4 0 3-7 3-7z\"\n strokeWidth=\"0\"\n fill=\"currentColor\"\n />\n <path\n d=\"M14 10c.8.8 2 2 3 3\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </IconBase>\n );\n}\n\nexport function SaveIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Save',\n <>\n <path d=\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\" />\n <polyline points=\"17 21 17 13 7 13 7 21\" />\n <polyline points=\"7 3 7 8 15 8\" />\n </>,\n props\n );\n}\n\nexport function SettingsIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Settings',\n <>\n <path d=\"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.38a2 2 0 0 0-.73-2.73l-.15-.1a2 2 0 0 1-1-1.72v-.51a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </>,\n props\n );\n}\n\nexport function ShieldCheckIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'ShieldCheck',\n <>\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />\n <path d=\"M9 12l2 2 4-4\" />\n </>,\n props\n );\n}\n\nexport function ShieldIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Shield',\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />,\n props\n );\n}\n\nexport function TargetIcon(props: IconBaseProps) {\n return (\n <IconBase {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" strokeWidth=\"1.2\" />\n <circle cx=\"12\" cy=\"12\" r=\"5\" fill=\"currentColor\" />\n <path\n d=\"M22 12h-3M5 12H2M12 2v3M12 19v3\"\n strokeWidth=\"1.2\"\n strokeLinecap=\"round\"\n />\n </IconBase>\n );\n}\n\nexport function TerminalIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Terminal',\n <>\n <polyline points=\"4 17 10 11 4 5\" />\n <line x1=\"12\" y1=\"19\" x2=\"20\" y2=\"19\" />\n </>,\n props\n );\n}\n\nexport function TrashIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Trash',\n <>\n <polyline points=\"3 6 5 6 21 6\" />\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\n </>,\n props\n );\n}\n\nexport function TrendingUpIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'TrendingUp',\n <>\n <polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\" />\n <polyline points=\"17 6 23 6 23 12\" />\n </>,\n props\n );\n}\n\nexport function UploadIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Upload',\n <>\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v4\" />\n <polyline points=\"17 8 12 3 7 8\" />\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\" />\n </>,\n props\n );\n}\n\nexport function WalletIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Wallet',\n <>\n <path d=\"M21 12V7a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-1\" />\n <path d=\"M16 12h5\" />\n <circle cx=\"16\" cy=\"12\" r=\"1\" />\n </>,\n props\n );\n}\n\nexport function ZapIcon(props: IconBaseProps) {\n return createStrokeIcon(\n 'Zap',\n <polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\" />,\n props\n );\n}\n\nexport default {\n AlertCircleIcon,\n AlertTriangleIcon,\n ArrowRightIcon,\n BrainIcon,\n ChartIcon,\n ClockIcon,\n FileIcon,\n HammerIcon,\n InfoIcon,\n PlayIcon,\n RefreshCwIcon,\n RobotIcon,\n RocketIcon,\n SaveIcon,\n SettingsIcon,\n ShieldCheckIcon,\n ShieldIcon,\n TargetIcon,\n TerminalIcon,\n TrashIcon,\n TrendingUpIcon,\n UploadIcon,\n WalletIcon,\n ZapIcon,\n};\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface ContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n}\n\nconst Container = React.forwardRef<HTMLDivElement, ContainerProps>(\n ({ className, size = 'lg', ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'mx-auto w-full px-4 sm:px-6 lg:px-8',\n {\n 'max-w-screen-sm': size === 'sm',\n 'max-w-screen-md': size === 'md',\n 'max-w-screen-lg': size === 'lg',\n 'max-w-screen-xl': size === 'xl',\n 'max-w-full': size === 'full',\n },\n className\n )}\n {...props}\n />\n );\n }\n);\nContainer.displayName = 'Container';\n\nexport { Container };\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\n cols?: 1 | 2 | 3 | 4 | 5 | 6 | 12;\n gap?: 'sm' | 'md' | 'lg' | 'xl';\n}\n\nconst Grid = React.forwardRef<HTMLDivElement, GridProps>(\n ({ className, cols = 3, gap = 'md', ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'grid',\n {\n 'grid-cols-1': cols === 1,\n 'grid-cols-1 sm:grid-cols-2': cols === 2,\n 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3': cols === 3,\n 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4': cols === 4,\n 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-5': cols === 5,\n 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-6': cols === 6,\n 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-12': cols === 12,\n },\n {\n 'gap-2': gap === 'sm',\n 'gap-4': gap === 'md',\n 'gap-6': gap === 'lg',\n 'gap-8': gap === 'xl',\n },\n className\n )}\n {...props}\n />\n );\n }\n);\nGrid.displayName = 'Grid';\n\nexport { Grid };\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: 'horizontal' | 'vertical';\n spacing?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n align?: 'start' | 'center' | 'end' | 'stretch';\n justify?: 'start' | 'center' | 'end' | 'between' | 'around';\n}\n\nconst Stack = React.forwardRef<HTMLDivElement, StackProps>(\n (\n {\n className,\n direction = 'vertical',\n spacing = 'md',\n align = 'stretch',\n justify = 'start',\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex',\n {\n 'flex-col': direction === 'vertical',\n 'flex-row': direction === 'horizontal',\n },\n {\n 'gap-1': spacing === 'xs',\n 'gap-2': spacing === 'sm',\n 'gap-4': spacing === 'md',\n 'gap-6': spacing === 'lg',\n 'gap-8': spacing === 'xl',\n },\n {\n 'items-start': align === 'start',\n 'items-center': align === 'center',\n 'items-end': align === 'end',\n 'items-stretch': align === 'stretch',\n },\n {\n 'justify-start': justify === 'start',\n 'justify-center': justify === 'center',\n 'justify-end': justify === 'end',\n 'justify-between': justify === 'between',\n 'justify-around': justify === 'around',\n },\n className\n )}\n {...props}\n />\n );\n }\n);\nStack.displayName = 'Stack';\n\nexport { Stack };\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface SeparatorProps extends React.HTMLAttributes<HTMLDivElement> {\n orientation?: 'horizontal' | 'vertical';\n decorative?: boolean;\n}\n\nconst Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n (\n { className, orientation = 'horizontal', decorative = true, ...props },\n ref\n ) => (\n <div\n ref={ref}\n role={decorative ? 'none' : 'separator'}\n aria-orientation={orientation}\n className={cn(\n 'shrink-0 bg-border',\n orientation === 'horizontal' ? 'h-[1px] w-full' : 'h-full w-[1px]',\n className\n )}\n {...props}\n />\n )\n);\nSeparator.displayName = 'Separator';\n\nexport { Separator };\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface CheckboxProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'type'\n> {\n label?: string;\n}\n\nconst Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n ({ className, label, id, ...props }, ref) => {\n const checkboxId = id || React.useId();\n\n return (\n <div className=\"flex items-center\">\n <input\n type=\"checkbox\"\n id={checkboxId}\n ref={ref}\n className={cn(\n 'h-4 w-4 rounded border-gray-300 text-primary focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n />\n {label && (\n <label\n htmlFor={checkboxId}\n className=\"ml-2 text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {label}\n </label>\n )}\n </div>\n );\n }\n);\nCheckbox.displayName = 'Checkbox';\n\nexport { Checkbox };\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\nimport { ComponentOption } from '../types';\n\nexport type RadioOption = ComponentOption;\n\nexport interface RadioGroupProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'onChange'\n> {\n options: RadioOption[];\n value?: string;\n onChange?: (value: string) => void;\n name: string;\n orientation?: 'horizontal' | 'vertical';\n}\n\nconst RadioGroup = React.forwardRef<HTMLDivElement, RadioGroupProps>(\n (\n {\n className,\n options,\n value,\n onChange,\n name,\n orientation = 'vertical',\n ...props\n },\n ref\n ) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex',\n orientation === 'vertical' ? 'flex-col gap-2' : 'flex-row gap-4',\n className\n )}\n {...props}\n >\n {options.map((option) => {\n const id = `${name}-${option.value}`;\n return (\n <div key={option.value} className=\"flex items-center\">\n <input\n type=\"radio\"\n id={id}\n name={name}\n value={option.value}\n checked={value === option.value}\n disabled={option.disabled}\n onChange={(e) => onChange?.(e.target.value)}\n className=\"h-4 w-4 border-gray-300 text-primary focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\n />\n <label\n htmlFor={id}\n className=\"ml-2 text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {option.label}\n </label>\n </div>\n );\n })}\n </div>\n );\n }\n);\nRadioGroup.displayName = 'RadioGroup';\n\nexport { RadioGroup };\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport interface SwitchProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'type'\n> {\n label?: string;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nconst Switch = React.forwardRef<HTMLInputElement, SwitchProps>(\n (\n { className, label, id, checked, onCheckedChange, onChange, ...props },\n ref\n ) => {\n const switchId = id || React.useId();\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e);\n onCheckedChange?.(e.target.checked);\n };\n\n return (\n <div className=\"flex items-center\">\n <label\n htmlFor={switchId}\n className=\"relative inline-flex cursor-pointer items-center\"\n >\n <input\n type=\"checkbox\"\n id={switchId}\n ref={ref}\n checked={checked}\n onChange={handleChange}\n className=\"peer sr-only\"\n {...props}\n />\n <div\n className={cn(\n 'peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[\"\"] peer-checked:bg-primary peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-ring peer-focus:ring-offset-2 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',\n className\n )}\n />\n </label>\n {label && (\n <span className=\"ml-3 text-sm font-medium text-foreground\">\n {label}\n </span>\n )}\n </div>\n );\n }\n);\nSwitch.displayName = 'Switch';\n\nexport { Switch };\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\n\nexport type TextareaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement>;\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n 'flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n ref={ref}\n {...props}\n />\n );\n }\n);\nTextarea.displayName = 'Textarea';\n\nexport { Textarea };\n","import * as React from 'react';\nimport { cn } from '../utils/cn';\nimport { ComponentOption } from '../types';\n\nexport type SelectOption = ComponentOption;\n\nexport interface SelectProps extends Omit<\n React.SelectHTMLAttributes<HTMLSelectElement>,\n 'onChange'\n> {\n options: SelectOption[];\n placeholder?: string;\n onChange?: (value: string) => void;\n}\n\nconst Select = React.forwardRef<HTMLSelectElement, SelectProps>(\n ({ className, options, placeholder, onChange, ...props }, ref) => {\n const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n onChange?.(e.target.value);\n };\n\n return (\n <select\n ref={ref}\n className={cn(\n 'flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n onChange={handleChange}\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((option) => (\n <option\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n {option.label}\n </option>\n ))}\n </select>\n );\n }\n);\nSelect.displayName = 'Select';\n\nexport { Select };\n","'use client';\n\nimport React, { useState, useCallback, useMemo } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { cn } from '../utils/cn';\n\nexport interface CodeBlockProps {\n children: React.ReactNode;\n language?: string;\n showCopy?: boolean;\n showHeader?: boolean;\n className?: string;\n variant?: 'default' | 'glass';\n}\n\n// Dedent helper - removes common leading indentation\nfunction dedentCode(code: string): string {\n const normalized = code.replace(/\\t/g, ' ').replace(/[ \\t]+$/gm, '');\n const lines = normalized.split('\\n');\n if (lines.length <= 1) return normalized.trim();\n\n let start = 0;\n while (start < lines.length && lines[start].trim() === '') start++;\n let end = lines.length - 1;\n while (end >= 0 && lines[end].trim() === '') end--;\n\n if (start > end) return '';\n const relevantLines = lines.slice(start, end + 1);\n\n const nonEmpty = relevantLines.filter((l) => l.trim() !== '');\n const minIndent = nonEmpty.reduce((min, line) => {\n const m = line.match(/^\\s*/)?.[0].length ?? 0;\n return Math.min(min, m);\n }, Infinity);\n\n return minIndent === Infinity || minIndent === 0\n ? relevantLines.join('\\n')\n : relevantLines\n .map((l) =>\n l.startsWith(' '.repeat(minIndent)) ? l.slice(minIndent) : l\n )\n .join('\\n');\n}\n\nfunction CopyButton({ code }: { code: string }) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n const textarea = document.createElement('textarea');\n textarea.value = code;\n textarea.style.position = 'fixed';\n textarea.style.opacity = '0';\n document.body.appendChild(textarea);\n textarea.select();\n document.execCommand('copy');\n document.body.removeChild(textarea);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }\n }, [code]);\n\n return (\n <button\n onClick={handleCopy}\n className=\"flex items-center gap-1.5 rounded-md px-2 py-1 text-[10px] font-bold uppercase tracking-wider text-slate-400 hover:bg-slate-700/50 hover:text-cyan-400 transition-all\"\n >\n <AnimatePresence mode=\"wait\">\n {copied ? (\n <motion.span\n key=\"copied\"\n initial={{ opacity: 0, y: 5 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -5 }}\n className=\"text-cyan-400\"\n >\n Copied!\n </motion.span>\n ) : (\n <motion.span\n key=\"copy\"\n initial={{ opacity: 0, y: 5 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -5 }}\n >\n Copy\n </motion.span>\n )}\n </AnimatePresence>\n </button>\n );\n}\n\nexport function CodeBlock({\n children,\n language = 'typescript',\n showCopy = true,\n showHeader = true,\n className = '',\n variant = 'glass',\n}: CodeBlockProps) {\n const codeString = useMemo(() => {\n if (typeof children === 'string') return dedentCode(children);\n try {\n const raw = React.Children.toArray(children)\n .map((c) =>\n typeof c === 'string' ? c : typeof c === 'number' ? String(c) : ''\n )\n .join('');\n return dedentCode(raw);\n } catch {\n return '';\n }\n }, [children]);\n\n return (\n <div\n className={cn(\n 'group relative my-6 overflow-hidden rounded-2xl border transition-all',\n variant === 'glass'\n ? 'border-indigo-500/20 bg-slate-950/40 backdrop-blur-md shadow-2xl'\n : 'border-slate-700 bg-slate-900 shadow-lg',\n className\n )}\n >\n {showHeader && (\n <div\n className={cn(\n 'flex items-center justify-between px-4 py-2 border-b',\n variant === 'glass'\n ? 'border-indigo-500/10 bg-slate-900/20'\n : 'border-slate-800 bg-slate-800/50'\n )}\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"flex gap-1.5\">\n <div className=\"h-2.5 w-2.5 rounded-full bg-red-500/20 border border-red-500/40\" />\n <div className=\"h-2.5 w-2.5 rounded-full bg-amber-500/20 border border-amber-500/40\" />\n <div className=\"h-2.5 w-2.5 rounded-full bg-emerald-500/20 border border-emerald-500/40\" />\n </div>\n <span className=\"ml-2 text-[10px] font-bold uppercase tracking-widest text-slate-500 font-mono\">\n {language}\n </span>\n </div>\n {showCopy && <CopyButton code={codeString} />}\n </div>\n )}\n\n <pre className=\"overflow-x-auto p-4 text-sm leading-relaxed scrollbar-thin scrollbar-thumb-slate-700\">\n <code className=\"font-mono block whitespace-pre text-slate-300\">\n {codeString}\n </code>\n </pre>\n </div>\n );\n}\n\nexport function InlineCode({\n children,\n className = '',\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <code\n className={cn(\n 'rounded-md bg-slate-800/50 border border-slate-700/50 px-1.5 py-0.5 text-xs font-mono text-cyan-400',\n className\n )}\n >\n {children}\n </code>\n );\n}\n","'use client';\n\nimport { motion } from 'framer-motion';\nimport { cn } from '../utils/cn';\n\nexport interface BreadcrumbItem {\n label: string;\n href: string;\n}\n\nexport interface BreadcrumbProps {\n items: BreadcrumbItem[];\n className?: string;\n}\n\nexport function Breadcrumb({ items, className }: BreadcrumbProps) {\n return (\n <nav aria-label=\"Breadcrumb\" className={cn('mb-8', className)}>\n <ol className=\"flex items-center gap-2 text-sm\">\n {items.map((item, index) => (\n <motion.li\n key={item.href}\n initial={{ opacity: 0, x: -10 }}\n animate={{ opacity: 1, x: 0 }}\n transition={{ delay: index * 0.1 }}\n className=\"flex items-center gap-2\"\n >\n {index > 0 && <span className=\"text-slate-600\">/</span>}\n {index === items.length - 1 ? (\n <span className=\"text-cyan-400 font-medium\">{item.label}</span>\n ) : (\n <a\n href={item.href}\n className=\"text-slate-400 hover:text-white transition-colors\"\n >\n {item.label}\n </a>\n )}\n </motion.li>\n ))}\n </ol>\n </nav>\n );\n}\n","'use client';\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { cn } from '../utils/cn';\nimport {\n RocketIcon,\n ChartIcon,\n TrendingUpIcon,\n RobotIcon,\n SettingsIcon,\n} from '../components/icons';\n\n// --- Types ---\n\nexport interface NavItem {\n href: string;\n label: string;\n icon: React.ElementType;\n}\n\nexport interface User {\n id: string;\n name?: string | null;\n email?: string | null;\n image?: string | null;\n}\n\nexport interface Team {\n id: string;\n name: string;\n}\n\nexport interface TeamMember {\n teamId: string;\n team: Team;\n}\n\nexport interface PlatformShellProps {\n children: React.ReactNode;\n user: User | null;\n teams?: TeamMember[];\n overallScore?: number | null;\n activePage?: string;\n pathname?: string;\n onNavigate?: (href: string) => void;\n onSignOut?: () => void;\n onSwitchTeam?: (teamId: string | 'personal') => void;\n logoUrl?: string;\n navItems?: NavItem[];\n LinkComponent?: React.ElementType;\n}\n\n// --- Internal Components ---\n\nfunction NavItemComponent({\n href,\n label,\n icon: Icon,\n isActive,\n onClick,\n LinkComponent = 'a',\n}: NavItem & {\n isActive: boolean;\n onClick?: (e: React.MouseEvent) => void;\n LinkComponent?: any;\n}) {\n const Component = LinkComponent;\n return (\n <Component href={href} onClick={onClick} className=\"block group\">\n <div\n className={cn(\n 'flex items-center gap-3 px-4 py-3 rounded-xl transition-all',\n isActive\n ? 'bg-cyan-500/10 text-cyan-400 border border-cyan-500/20 glow-blue'\n : 'text-slate-400 hover:text-white hover:bg-slate-800/50 border border-transparent hover:glow-blue'\n )}\n >\n <Icon\n className={cn(\n 'w-5 h-5',\n isActive\n ? 'text-cyan-400'\n : 'text-slate-500 group-hover:text-slate-300'\n )}\n />\n <span className=\"text-sm font-semibold tracking-tight\">{label}</span>\n {isActive && (\n <motion.div\n layoutId=\"sidebar-active\"\n className=\"ml-auto w-1.5 h-1.5 rounded-full bg-cyan-400 shadow-[0_0_8px_rgba(34,211,238,0.8)]\"\n />\n )}\n </div>\n </Component>\n );\n}\n\nfunction UserMenu({\n user,\n teams = [],\n currentTeamId,\n onSwitchTeam,\n onSignOut,\n}: {\n user: User;\n teams: TeamMember[];\n currentTeamId: string | 'personal';\n onSwitchTeam?: (teamId: string | 'personal') => void;\n onSignOut?: () => void;\n}) {\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n }\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const currentWorkspaceName =\n currentTeamId === 'personal'\n ? 'Personal Workspace'\n : teams.find((t) => t.teamId === currentTeamId)?.team.name ||\n 'Team Workspace';\n\n return (\n <div className=\"relative\" ref={dropdownRef}>\n <button\n onClick={() => setIsOpen(!isOpen)}\n className=\"flex items-center gap-2 p-1.5 rounded-xl hover:bg-slate-800/50 transition-all border border-transparent hover:border-slate-700/50\"\n >\n {user.image ? (\n <img\n src={user.image}\n alt={user.name || 'User'}\n className=\"w-8 h-8 rounded-lg border border-cyan-500/30\"\n />\n ) : (\n <div className=\"w-8 h-8 rounded-lg bg-indigo-600 flex items-center justify-center text-xs font-bold text-white\">\n {user.name?.[0] || user.email?.[0]}\n </div>\n )}\n <div className=\"text-left hidden sm:block\">\n <p className=\"text-xs font-bold text-white leading-none mb-0.5\">\n {user.name || user.email?.split('@')[0]}\n </p>\n <p className=\"text-[10px] text-slate-400 leading-none truncate max-w-[100px]\">\n {currentWorkspaceName}\n </p>\n </div>\n <svg\n className={cn(\n 'w-4 h-4 text-slate-500 transition-transform',\n isOpen && 'rotate-180'\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </button>\n\n <AnimatePresence>\n {isOpen && (\n <motion.div\n initial={{ opacity: 0, y: 10, scale: 0.95 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: 10, scale: 0.95 }}\n className=\"absolute right-0 mt-2 w-64 bg-slate-900 border border-slate-700 rounded-2xl shadow-2xl z-50 overflow-hidden\"\n >\n <div className=\"p-4 border-b border-slate-800\">\n <p className=\"text-sm font-bold text-white\">{user.name}</p>\n <p className=\"text-xs text-slate-400 truncate\">{user.email}</p>\n </div>\n\n <div className=\"p-2 border-b border-slate-800\">\n <p className=\"px-3 py-1 text-[10px] font-black text-slate-500 uppercase tracking-widest mb-1\">\n Workspaces\n </p>\n <button\n onClick={() => {\n onSwitchTeam?.('personal');\n setIsOpen(false);\n }}\n className={cn(\n 'w-full flex items-center gap-3 px-3 py-2 rounded-lg text-sm transition-colors',\n currentTeamId === 'personal'\n ? 'bg-cyan-500/10 text-cyan-400'\n : 'text-slate-400 hover:bg-slate-800 hover:text-white'\n )}\n >\n <div className=\"w-5 h-5 rounded bg-slate-700 flex items-center justify-center text-[10px] font-bold\">\n P\n </div>\n Personal\n </button>\n {teams.map((t) => (\n <button\n key={t.teamId}\n onClick={() => {\n onSwitchTeam?.(t.teamId);\n setIsOpen(false);\n }}\n className={cn(\n 'w-full flex items-center gap-3 px-3 py-2 rounded-lg text-sm transition-colors',\n currentTeamId === t.teamId\n ? 'bg-purple-500/10 text-purple-400'\n : 'text-slate-400 hover:bg-slate-800 hover:text-white'\n )}\n >\n <div className=\"w-5 h-5 rounded bg-purple-600 flex items-center justify-center text-[10px] font-bold\">\n {t.team.name[0]}\n </div>\n {t.team.name}\n </button>\n ))}\n </div>\n\n <div className=\"p-2\">\n <button\n onClick={onSignOut}\n className=\"w-full flex items-center gap-3 px-3 py-2 rounded-lg text-sm text-red-400 hover:bg-red-500/10 transition-colors\"\n >\n <svg\n className=\"w-4 h-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1\"\n />\n </svg>\n Sign out\n </button>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n}\n\n// --- Main Shell ---\n\nexport function PlatformShell({\n children,\n user,\n teams = [],\n overallScore,\n activePage,\n pathname = '',\n onNavigate,\n onSignOut,\n onSwitchTeam,\n logoUrl = '/logo-text-transparent-dark-theme.png',\n navItems = [\n { href: '/dashboard', label: 'Dashboard', icon: RocketIcon },\n { href: '/strategy', label: 'Scan Strategy', icon: SettingsIcon },\n { href: '/trends', label: 'Trends Explorer', icon: TrendingUpIcon },\n { href: '/map', label: 'Codebase Map', icon: RobotIcon },\n { href: '/metrics', label: 'Methodology', icon: ChartIcon },\n ],\n LinkComponent = 'a',\n}: PlatformShellProps) {\n const [currentTeamId, setCurrentTeamId] = useState<string | 'personal'>(\n 'personal'\n );\n\n const handleSwitchTeam = (teamId: string | 'personal') => {\n setCurrentTeamId(teamId);\n onSwitchTeam?.(teamId);\n };\n\n const Sidebar = () => (\n <aside className=\"hidden lg:flex flex-col w-64 bg-slate-950/50 border-r border-slate-800 h-screen sticky top-0 overflow-y-auto\">\n <div className=\"p-6 flex flex-col h-full\">\n <div className=\"flex items-center justify-center mb-10\">\n <img src={logoUrl} alt=\"AIReady\" className=\"h-9 w-auto\" />\n </div>\n\n <nav className=\"space-y-1.5 flex-1\">\n <p className=\"px-4 py-2 text-[10px] font-black text-slate-500 uppercase tracking-widest mb-2\">\n Workspace\n </p>\n {navItems.map((item) => (\n <NavItemComponent\n key={item.href}\n {...item}\n LinkComponent={LinkComponent}\n isActive={\n pathname === item.href ||\n (item.href !== '/dashboard' && pathname.startsWith(item.href))\n }\n onClick={(e) => {\n if (onNavigate) {\n e.preventDefault();\n onNavigate(item.href);\n }\n }}\n />\n ))}\n </nav>\n\n <div className=\"mt-auto pt-6 space-y-4\">\n <div className=\"p-4 rounded-2xl bg-gradient-to-br from-indigo-500/10 to-purple-500/10 border border-indigo-500/20\">\n <p className=\"text-xs font-bold text-white mb-1\">AI Insights</p>\n <p className=\"text-[10px] text-slate-400 leading-relaxed\">\n {overallScore != null\n ? `Your codebase is ${overallScore}% ready for AI agents.`\n : 'Run a scan to see your AI-readiness score.'}\n </p>\n </div>\n </div>\n </div>\n </aside>\n );\n\n const Navbar = () => (\n <header className=\"sticky top-0 z-20 h-16 border-b border-indigo-500/10 backdrop-blur-md bg-slate-950/20 px-4 sm:px-6 lg:px-8\">\n <div className=\"h-full flex items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <p className=\"text-xs font-semibold text-slate-400 uppercase tracking-widest hidden sm:block glow-text\">\n {activePage || 'Dashboard'}\n </p>\n </div>\n\n <div className=\"flex items-center gap-4\">\n {user && (\n <UserMenu\n user={user}\n teams={teams}\n currentTeamId={currentTeamId}\n onSwitchTeam={handleSwitchTeam}\n onSignOut={onSignOut}\n />\n )}\n </div>\n </div>\n </header>\n );\n\n return (\n <div\n className={cn(\n 'min-h-screen bg-[#0a0a0f]',\n user && 'flex overflow-hidden'\n )}\n >\n {user && <Sidebar />}\n\n <div className={cn('flex-1 flex flex-col min-w-0', user && 'h-screen')}>\n {user && <Navbar />}\n\n <main\n className={cn('relative flex-1', user && 'overflow-y-auto', 'z-10')}\n >\n {user && (\n <>\n <div className=\"absolute inset-0 pointer-events-none -z-10 overflow-hidden\">\n <div\n className=\"absolute rounded-full blur-[60px] opacity-20 bg-radial-gradient from-blue-600/60 to-transparent w-96 h-96 -top-48 -right-48\"\n style={{\n background:\n 'radial-gradient(circle, rgba(59, 130, 246, 0.6), transparent)',\n }}\n />\n <div\n className=\"absolute rounded-full blur-[60px] opacity-20 bg-radial-gradient from-purple-600/60 to-transparent w-80 h-80 bottom-0 -left-40\"\n style={{\n background:\n 'radial-gradient(circle, rgba(139, 92, 246, 0.6), transparent)',\n }}\n />\n </div>\n <div\n className=\"absolute inset-0 opacity-10 -z-10\"\n style={{\n backgroundImage:\n 'linear-gradient(rgba(59, 130, 246, 0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(59, 130, 246, 0.03) 1px, transparent 1px)',\n backgroundSize: '50px 50px',\n }}\n />\n </>\n )}\n {children}\n </main>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { getRating as getCoreRating } from '@aiready/core/client';\nimport { cn } from '../utils/cn';\n\nexport type ScoreRating =\n | 'excellent'\n | 'good'\n | 'fair'\n | 'needs-work'\n | 'critical';\n\nexport interface ScoreBarProps {\n score: number;\n maxScore?: number;\n label: string;\n showScore?: boolean;\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\nconst ratingConfig: Record<\n ScoreRating,\n { color: string; bgColor: string; label: string }\n> = {\n excellent: {\n color: 'bg-green-500',\n bgColor: 'bg-green-100',\n label: 'Excellent',\n },\n good: { color: 'bg-emerald-500', bgColor: 'bg-emerald-100', label: 'Good' },\n fair: { color: 'bg-amber-500', bgColor: 'bg-amber-100', label: 'Fair' },\n 'needs-work': {\n color: 'bg-orange-500',\n bgColor: 'bg-orange-100',\n label: 'Needs Work',\n },\n critical: { color: 'bg-red-500', bgColor: 'bg-red-100', label: 'Critical' },\n};\n\n// Convert Title Case rating from core to lowercase for component use\nfunction getRating(score: number): ScoreRating {\n const coreRating = getCoreRating(score);\n const ratingMap: Record<string, ScoreRating> = {\n Excellent: 'excellent',\n Good: 'good',\n Fair: 'fair',\n 'Needs Work': 'needs-work',\n Critical: 'critical',\n };\n return ratingMap[coreRating] || 'critical';\n}\n\nconst sizeConfig = {\n sm: { height: 'h-1.5', text: 'text-xs', score: 'text-sm' },\n md: { height: 'h-2', text: 'text-sm', score: 'text-base' },\n lg: { height: 'h-3', text: 'text-base', score: 'text-lg' },\n};\n\nexport function ScoreBar({\n score,\n maxScore = 100,\n label,\n showScore = true,\n size = 'md',\n className,\n}: ScoreBarProps) {\n const percentage = Math.min(100, Math.max(0, (score / maxScore) * 100));\n const rating = getRating(percentage);\n const config = ratingConfig[rating];\n const sizes = sizeConfig[size];\n\n return (\n <div className={cn('space-y-1', className)}>\n <div className=\"flex items-center justify-between\">\n <span className={cn('text-slate-700', sizes.text)}>{label}</span>\n {showScore && (\n <span className={cn('font-bold text-slate-900', sizes.score)}>\n {score}/{maxScore}\n </span>\n )}\n </div>\n <div className={cn('w-full rounded-full bg-slate-200', sizes.height)}>\n <div\n className={cn(\n 'rounded-full transition-all duration-500',\n config.color,\n sizes.height\n )}\n style={{ width: `${percentage}%` }}\n />\n </div>\n </div>\n );\n}\n\nexport interface ScoreCardProps {\n score: number;\n title?: string;\n breakdown?: Array<{\n label: string;\n score: number;\n weight?: number;\n }>;\n className?: string;\n}\n\nexport function ScoreCard({\n score,\n title,\n breakdown,\n className,\n}: ScoreCardProps) {\n const rating = getRating(score);\n const config = ratingConfig[rating];\n\n return (\n <div\n className={cn(\n 'rounded-xl border-2 border-slate-200 bg-white p-6 shadow-lg',\n className\n )}\n >\n <div className=\"mb-4\">\n <div className=\"text-4xl font-black text-slate-900\">{score}/100</div>\n <div\n className={cn(\n 'text-lg font-bold',\n `text-${rating === 'excellent' ? 'green' : rating === 'good' ? 'emerald' : rating === 'fair' ? 'amber' : rating === 'needs-work' ? 'orange' : 'red'}-600`\n )}\n >\n {config.label} Rating\n </div>\n {title && <p className=\"text-sm text-slate-600 mt-1\">{title}</p>}\n </div>\n\n {breakdown && breakdown.length > 0 && (\n <div className=\"space-y-3\">\n {breakdown.map((item, index) => (\n <ScoreBar\n key={index}\n score={item.score}\n label={item.label}\n size=\"sm\"\n />\n ))}\n </div>\n )}\n\n {breakdown && breakdown.length > 0 && (\n <div className=\"mt-4 text-xs text-slate-600 bg-slate-50 p-3 rounded-lg\">\n <strong>Formula:</strong>{' '}\n {breakdown\n .map((item) => `${item.score}×${item.weight || 1}`)\n .join(' + ')}{' '}\n / 100 = {score}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { motion } from 'framer-motion';\nimport { cn } from '../utils/cn';\n\nexport interface ScoreCircleProps {\n score: number;\n progress?: number;\n isInView?: boolean;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n showLabel?: boolean;\n className?: string;\n}\n\nexport function ScoreCircle({\n score,\n progress: customProgress,\n isInView = true,\n size = 'md',\n showLabel = true,\n className,\n}: ScoreCircleProps) {\n const progress = customProgress ?? score;\n\n const getScoreColor = () => {\n if (score >= 80)\n return { stroke: '#10b981', glow: 'rgba(16, 185, 129, 0.3)' };\n if (score >= 60)\n return { stroke: '#eab308', glow: 'rgba(234, 179, 8, 0.3)' };\n return { stroke: '#ef4444', glow: 'rgba(239, 68, 68, 0.3)' };\n };\n\n const scoreColor = getScoreColor();\n\n const sizeMap = {\n sm: 'w-32 h-32',\n md: 'w-48 h-48',\n lg: 'w-64 h-64',\n xl: 'w-80 h-80',\n };\n\n const textMap = {\n sm: { score: 'text-3xl', label: 'text-[8px]', title: 'text-sm' },\n md: { score: 'text-5xl', label: 'text-[10px]', title: 'text-lg' },\n lg: { score: 'text-6xl', label: 'text-xs', title: 'text-xl' },\n xl: { score: 'text-7xl', label: 'text-sm', title: 'text-2xl' },\n };\n\n const currentSize = sizeMap[size];\n const currentText = textMap[size];\n\n return (\n <div className={cn('relative', currentSize, className)}>\n <div\n className=\"absolute inset-0 rounded-full blur-2xl opacity-50 transition-all duration-500\"\n style={{ backgroundColor: scoreColor.glow }}\n />\n\n <svg\n className=\"w-full h-full transform -rotate-90 relative z-10\"\n viewBox=\"0 0 100 100\"\n >\n {Array.from({ length: 20 }).map((_, i) => {\n const angle = (i * 360) / 20;\n const startAngle = angle - 85;\n const radius = 42; // Out of 50\n const strokeWidth = 6;\n const gapAngle = 4;\n\n const startX = 50 + radius * Math.cos((startAngle * Math.PI) / 180);\n const startY = 50 + radius * Math.sin((startAngle * Math.PI) / 180);\n const endX =\n 50 +\n radius *\n Math.cos(((startAngle + 360 / 20 - gapAngle) * Math.PI) / 180);\n const endY =\n 50 +\n radius *\n Math.sin(((startAngle + 360 / 20 - gapAngle) * Math.PI) / 180);\n\n const isActive = (i / 20) * 100 <= progress;\n\n return (\n <motion.line\n key={i}\n x1={`${startX}`}\n y1={`${startY}`}\n x2={`${endX}`}\n y2={`${endY}`}\n stroke={isActive ? scoreColor.stroke : '#334155'}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n initial={{ opacity: 0.3 }}\n animate={{\n opacity: isActive ? 1 : 0.3,\n filter: isActive\n ? `drop-shadow(0 0 2px ${scoreColor.stroke})`\n : 'none',\n }}\n transition={{ duration: 0.3 }}\n />\n );\n })}\n </svg>\n\n <div className=\"absolute inset-0 flex flex-col items-center justify-center z-20\">\n <motion.div\n initial={{ scale: 0 }}\n animate={isInView ? { scale: 1 } : { scale: 0 }}\n transition={{ duration: 0.5, delay: 0.3 }}\n className=\"text-center\"\n >\n <motion.div\n className={cn('font-black mb-1', currentText.score)}\n style={{ color: scoreColor.stroke }}\n animate={{\n textShadow: `0 0 20px ${scoreColor.glow}, 0 0 40px ${scoreColor.glow}`,\n }}\n >\n {score}\n </motion.div>\n {showLabel && (\n <>\n <div\n className={cn(\n 'font-bold uppercase tracking-wider text-slate-400 mb-0.5',\n currentText.label\n )}\n >\n AI Readiness\n </div>\n <div\n className={cn('font-black tracking-tight', currentText.title)}\n style={{ color: scoreColor.stroke }}\n >\n SCORE\n </div>\n </>\n )}\n </motion.div>\n </div>\n </div>\n );\n}\n","'use client';\n\nexport interface LoadingSpinnerProps {\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\nconst sizeClasses = {\n sm: 'h-4 w-4',\n md: 'h-8 w-8',\n lg: 'h-12 w-12',\n};\n\nexport function LoadingSpinner({\n size = 'md',\n className = '',\n}: LoadingSpinnerProps) {\n return (\n <div className={`flex items-center justify-center ${className}`}>\n <div\n className={`${sizeClasses[size]} animate-spin rounded-full border-2 border-slate-300 border-t-blue-600`}\n />\n </div>\n );\n}\n\nexport interface LoadingOverlayProps {\n message?: string;\n}\n\nexport function LoadingOverlay({\n message = 'Loading...',\n}: LoadingOverlayProps) {\n return (\n <div className=\"flex flex-col items-center justify-center min-h-[200px] gap-4\">\n <LoadingSpinner size=\"lg\" />\n <p className=\"text-sm text-slate-500 animate-pulse\">{message}</p>\n </div>\n );\n}\n","'use client';\n\nimport React from 'react';\n\nexport interface ErrorDisplayProps {\n title?: string;\n message: string;\n retry?: () => void;\n retryLabel?: string;\n}\n\nexport function ErrorDisplay({\n title = 'Something went wrong',\n message,\n retry,\n retryLabel = 'Try again',\n}: ErrorDisplayProps) {\n return (\n <div className=\"flex flex-col items-center justify-center min-h-[200px] gap-4 p-8\">\n <div className=\"rounded-full bg-red-100 p-3\">\n <svg\n className=\"h-6 w-6 text-red-600\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"1.5\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z\"\n />\n </svg>\n </div>\n <div className=\"text-center\">\n <h3 className=\"text-lg font-semibold text-slate-900\">{title}</h3>\n <p className=\"mt-2 text-sm text-slate-500\">{message}</p>\n </div>\n {retry && (\n <button\n onClick={retry}\n className=\"mt-2 inline-flex items-center gap-2 rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 transition-colors\"\n >\n <svg\n className=\"h-4 w-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n strokeWidth=\"1.5\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99\"\n />\n </svg>\n {retryLabel}\n </button>\n )}\n </div>\n );\n}\n\nexport interface EmptyStateProps {\n title: string;\n description?: string;\n icon?: React.ReactNode;\n action?: {\n label: string;\n onClick: () => void;\n };\n}\n\nexport function EmptyState({\n title,\n description,\n icon,\n action,\n}: EmptyStateProps) {\n return (\n <div className=\"flex flex-col items-center justify-center min-h-[200px] gap-4 p-8\">\n {icon && <div className=\"rounded-full bg-slate-100 p-3\">{icon}</div>}\n <div className=\"text-center\">\n <h3 className=\"text-lg font-semibold text-slate-900\">{title}</h3>\n {description && (\n <p className=\"mt-2 text-sm text-slate-500\">{description}</p>\n )}\n </div>\n {action && (\n <button\n onClick={action.onClick}\n className=\"mt-2 inline-flex items-center gap-2 rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 transition-colors\"\n >\n {action.label}\n </button>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { MessageSquare, X, Send, Loader2 } from 'lucide-react';\nimport { cn } from '../utils/cn';\n\nexport interface FeedbackWidgetProps {\n apiEndpoint?: string;\n onSuccess?: (message: string) => void;\n onError?: (error: any) => void;\n title?: string;\n description?: string;\n className?: string;\n}\n\nexport function FeedbackWidget({\n apiEndpoint = '/api/feedback',\n onSuccess,\n onError,\n title = 'Share Feedback',\n description = 'What features would you like to see? Found a bug? Let us know!',\n className,\n}: FeedbackWidgetProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [message, setMessage] = useState('');\n const [status, setStatus] = useState<'idle' | 'loading'>('idle');\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n if (!message.trim()) return;\n\n setStatus('loading');\n try {\n const res = await fetch(apiEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ message }),\n });\n\n if (!res.ok) throw new Error('Failed to send feedback');\n\n onSuccess?.(message);\n setMessage('');\n setIsOpen(false);\n } catch (err) {\n onError?.(err);\n } finally {\n setStatus('idle');\n }\n };\n\n return (\n <div className={cn('fixed bottom-6 right-6 z-50', className)}>\n <AnimatePresence>\n {isOpen && (\n <motion.div\n initial={{ opacity: 0, scale: 0.9, y: 20 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.9, y: 20 }}\n className=\"absolute bottom-full mb-4 right-0 w-80 rounded-2xl p-4 bg-slate-900 border border-cyan-500/30 shadow-2xl backdrop-blur-xl top-auto\"\n >\n <div className=\"flex items-center justify-between mb-4\">\n <h4 className=\"font-bold text-white flex items-center gap-2 text-sm\">\n <MessageSquare className=\"w-4 h-4 text-cyan-400\" />\n {title}\n </h4>\n <button\n onClick={() => setIsOpen(false)}\n className=\"text-slate-500 hover:text-white\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n <p className=\"text-xs text-slate-400 mb-4\">{description}</p>\n\n <form onSubmit={handleSubmit} className=\"space-y-3\">\n <textarea\n autoFocus\n value={message}\n onChange={(e) => setMessage(e.target.value)}\n placeholder=\"Type your feedback here...\"\n required\n className=\"w-full bg-slate-800/50 border border-slate-700 rounded-xl px-3 py-2 text-sm text-white h-24 resize-none focus:outline-none focus:ring-1 focus:ring-cyan-500 transition-all\"\n />\n <button\n type=\"submit\"\n disabled={status === 'loading' || !message.trim()}\n className=\"w-full py-2 bg-cyan-600 hover:bg-cyan-500 disabled:opacity-50 text-white font-bold rounded-lg text-sm transition-all flex items-center justify-center gap-2\"\n >\n {status === 'loading' ? (\n <Loader2 className=\"w-4 h-4 animate-spin\" />\n ) : (\n <>\n <Send className=\"w-3 h-3\" />\n Send Feedback\n </>\n )}\n </button>\n </form>\n </motion.div>\n )}\n </AnimatePresence>\n\n <motion.button\n whileHover={{ scale: 1.05 }}\n whileTap={{ scale: 0.95 }}\n onClick={() => setIsOpen(!isOpen)}\n className=\"w-12 h-12 bg-gradient-to-br from-cyan-600 to-blue-600 text-white rounded-full flex items-center justify-center shadow-lg shadow-cyan-500/20 group overflow-hidden relative\"\n >\n <div className=\"absolute inset-0 bg-white/20 opacity-0 group-hover:opacity-100 transition-opacity\" />\n {isOpen ? (\n <X className=\"w-6 h-6\" />\n ) : (\n <MessageSquare className=\"w-6 h-6\" />\n )}\n </motion.button>\n </div>\n );\n}\n","'use client';\n\nimport React, { createContext, useContext, useEffect, useState } from 'react';\n\nexport type Theme = 'dark' | 'light' | 'system';\nexport type EffectiveTheme = 'dark' | 'light';\n\ninterface ThemeContextValue {\n theme: Theme;\n setTheme: (theme: Theme) => void;\n effectiveTheme: EffectiveTheme;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | undefined>(undefined);\n\nconst STORAGE_KEY = 'aiready-theme';\n\nfunction getSystemTheme(): EffectiveTheme {\n if (typeof window === 'undefined') return 'light';\n return window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light';\n}\n\nfunction getStoredTheme(): Theme {\n if (typeof window === 'undefined') return 'system';\n try {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored === 'dark' || stored === 'light' || stored === 'system') {\n return stored;\n }\n } catch {\n // localStorage not available\n }\n return 'system';\n}\n\ninterface ThemeProviderProps {\n children: React.ReactNode;\n defaultTheme?: Theme;\n storageKey?: string;\n}\n\nexport function ThemeProvider({\n children,\n defaultTheme = 'system',\n storageKey = STORAGE_KEY,\n}: ThemeProviderProps) {\n const [theme, setThemeState] = useState<Theme>(defaultTheme);\n const [effectiveTheme, setEffectiveTheme] = useState<EffectiveTheme>('light');\n const [mounted, setMounted] = useState(false);\n\n // Initialize theme from storage on mount\n useEffect(() => {\n const storedTheme = getStoredTheme();\n setThemeState(storedTheme);\n setMounted(true);\n }, []);\n\n // Update effective theme when theme or system preference changes\n useEffect(() => {\n if (!mounted) return;\n\n const updateEffectiveTheme = () => {\n if (theme === 'system') {\n setEffectiveTheme(getSystemTheme());\n } else {\n setEffectiveTheme(theme);\n }\n };\n\n updateEffectiveTheme();\n\n // Listen for system theme changes\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = () => {\n if (theme === 'system') {\n setEffectiveTheme(getSystemTheme());\n }\n };\n\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, [theme, mounted]);\n\n // Apply theme class to document\n useEffect(() => {\n if (!mounted) return;\n\n const root = document.documentElement;\n root.classList.remove('light', 'dark');\n root.classList.add(effectiveTheme);\n }, [effectiveTheme, mounted]);\n\n const setTheme = (newTheme: Theme) => {\n setThemeState(newTheme);\n try {\n localStorage.setItem(storageKey, newTheme);\n } catch {\n // localStorage not available\n }\n };\n\n // Prevent hydration mismatch\n if (!mounted) {\n return (\n <ThemeContext.Provider\n value={{\n theme: defaultTheme,\n setTheme: () => {},\n effectiveTheme: 'light',\n }}\n >\n {children}\n </ThemeContext.Provider>\n );\n }\n\n return (\n <ThemeContext.Provider value={{ theme, setTheme, effectiveTheme }}>\n {children}\n </ThemeContext.Provider>\n );\n}\n\nexport function useTheme(): ThemeContextValue {\n const context = useContext(ThemeContext);\n if (context === undefined) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n}\n","/**\n * Color utilities for charts and visualizations\n */\n\n// Severity colors for issue highlighting\nexport const severityColors = {\n critical: '#ef4444', // red-500\n major: '#f59e0b', // amber-500\n minor: '#eab308', // yellow-500\n info: '#60a5fa', // blue-400\n} as const;\n\n// Domain colors for clustering and categorization\nexport const domainColors = [\n '#3b82f6', // blue-500\n '#8b5cf6', // violet-500\n '#ec4899', // pink-500\n '#10b981', // green-500\n '#f59e0b', // amber-500\n '#06b6d4', // cyan-500\n '#f97316', // orange-500\n '#a855f7', // purple-500\n] as const;\n\n// Chart colors\nexport const chartColors = {\n primary: '#3b82f6',\n success: '#10b981',\n warning: '#f59e0b',\n danger: '#ef4444',\n info: '#06b6d4',\n} as const;\n\n/**\n * Get a color for a domain/category by index\n */\nexport function getDomainColor(index: number): string {\n return domainColors[index % domainColors.length];\n}\n\n/**\n * Get severity color by level\n */\nexport function getSeverityColor(\n severity: keyof typeof severityColors\n): string {\n return severityColors[severity];\n}\n\n/**\n * Convert hex color to RGBA\n */\nexport function hexToRgba(hex: string, alpha: number): string {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n","/**\n * Number formatting utilities for data visualization\n */\n\n/**\n * Format a number with commas for thousands\n * @example formatNumber(1234567) => \"1,234,567\"\n */\nexport function formatNumber(value: number): string {\n return new Intl.NumberFormat('en-US').format(value);\n}\n\n/**\n * Format a number with K/M/B abbreviations\n * @example formatCompactNumber(1234) => \"1.2K\"\n * @example formatCompactNumber(1234567) => \"1.2M\"\n */\nexport function formatCompactNumber(value: number): string {\n return new Intl.NumberFormat('en-US', {\n notation: 'compact',\n maximumFractionDigits: 1,\n }).format(value);\n}\n\n/**\n * Format a percentage with optional decimal places\n * @example formatPercentage(0.1234) => \"12.3%\"\n * @example formatPercentage(0.1234, 0) => \"12%\"\n */\nexport function formatPercentage(value: number, decimals: number = 1): string {\n return `${(value * 100).toFixed(decimals)}%`;\n}\n\n/**\n * Format file size in bytes to human-readable format\n * @example formatFileSize(1024) => \"1.0 KB\"\n * @example formatFileSize(1048576) => \"1.0 MB\"\n */\nexport function formatFileSize(bytes: number): string {\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n let size = bytes;\n let unitIndex = 0;\n\n while (size >= 1024 && unitIndex < units.length - 1) {\n size /= 1024;\n unitIndex++;\n }\n\n return `${size.toFixed(1)} ${units[unitIndex]}`;\n}\n\n/**\n * Format a date as relative time (e.g., \"2 hours ago\")\n * @example formatRelativeTime(new Date(Date.now() - 3600000)) => \"1 hour ago\"\n */\nexport function formatRelativeTime(date: Date): string {\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffSec = Math.floor(diffMs / 1000);\n const diffMin = Math.floor(diffSec / 60);\n const diffHour = Math.floor(diffMin / 60);\n const diffDay = Math.floor(diffHour / 24);\n const diffMonth = Math.floor(diffDay / 30);\n const diffYear = Math.floor(diffDay / 365);\n\n if (diffYear > 0) {\n return `${diffYear} year${diffYear > 1 ? 's' : ''} ago`;\n }\n if (diffMonth > 0) {\n return `${diffMonth} month${diffMonth > 1 ? 's' : ''} ago`;\n }\n if (diffDay > 0) {\n return `${diffDay} day${diffDay > 1 ? 's' : ''} ago`;\n }\n if (diffHour > 0) {\n return `${diffHour} hour${diffHour > 1 ? 's' : ''} ago`;\n }\n if (diffMin > 0) {\n return `${diffMin} minute${diffMin > 1 ? 's' : ''} ago`;\n }\n return 'just now';\n}\n\n/**\n * Format a date in short format (e.g., \"Jan 15, 2024\")\n */\nexport function formatDate(date: Date): string {\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n }).format(date);\n}\n\n/**\n * Format a date with time (e.g., \"Jan 15, 2024 at 3:45 PM\")\n */\nexport function formatDateTime(date: Date): string {\n return new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n }).format(date);\n}\n\n/**\n * Format duration in milliseconds to human-readable format\n * @example formatDuration(3661000) => \"1h 1m 1s\"\n */\nexport function formatDuration(ms: number): string {\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n if (hours > 0) {\n return `${hours}h ${minutes % 60}m ${seconds % 60}s`;\n }\n if (minutes > 0) {\n return `${minutes}m ${seconds % 60}s`;\n }\n return `${seconds}s`;\n}\n\n/**\n * Format a metric value with appropriate unit and precision\n * Useful for displaying various metrics in charts\n */\nexport function formatMetric(\n value: number,\n unit: 'number' | 'bytes' | 'percentage' | 'duration' = 'number'\n): string {\n switch (unit) {\n case 'bytes':\n return formatFileSize(value);\n case 'percentage':\n return formatPercentage(value);\n case 'duration':\n return formatDuration(value);\n default:\n return formatCompactNumber(value);\n }\n}\n\n/**\n * Format a range of values\n * @example formatRange(100, 200) => \"100 - 200\"\n */\nexport function formatRange(min: number, max: number): string {\n return `${formatCompactNumber(min)} - ${formatCompactNumber(max)}`;\n}\n\n/**\n * Format a number with a specific number of decimal places\n * @example formatDecimal(3.14159, 2) => \"3.14\"\n */\nexport function formatDecimal(value: number, decimals: number = 2): string {\n return value.toFixed(decimals);\n}\n","import { getRatingSlug } from '@aiready/core/client';\n\ntype RatingSlug = 'excellent' | 'good' | 'fair' | 'needs-work' | 'critical';\n\ninterface ScoreMetadata {\n color: string;\n bg: string;\n label: string;\n glow: string;\n}\n\nconst SCORE_METADATA: Record<RatingSlug, ScoreMetadata> = {\n excellent: {\n color: 'text-emerald-400',\n bg: 'bg-emerald-900/30 border-emerald-500/30',\n label: 'Excellent',\n glow: 'shadow-emerald-500/20',\n },\n good: {\n color: 'text-emerald-400',\n bg: 'bg-emerald-900/30 border-emerald-500/30',\n label: 'AI-Ready',\n glow: 'shadow-emerald-500/20',\n },\n fair: {\n color: 'text-amber-400',\n bg: 'bg-amber-900/30 border-amber-500/30',\n label: 'Fair',\n glow: 'shadow-amber-500/20',\n },\n 'needs-work': {\n color: 'text-red-400',\n bg: 'bg-red-900/30 border-red-500/30',\n label: 'Needs Improvement',\n glow: 'shadow-red-500/20',\n },\n critical: {\n color: 'text-red-400',\n bg: 'bg-red-900/30 border-red-500/30',\n label: 'Critical Issues',\n glow: 'shadow-red-500/20',\n },\n};\n\nconst DEFAULT_METADATA: ScoreMetadata = {\n color: 'text-slate-400',\n bg: 'bg-slate-800/50 border-slate-700',\n label: 'Not analyzed',\n glow: '',\n};\n\n/**\n * Get the metadata for a score using core rating system\n */\nfunction getMetadata(score: number | null | undefined): ScoreMetadata {\n if (score == null) return DEFAULT_METADATA;\n const rating = getRatingSlug(score) as RatingSlug;\n return SCORE_METADATA[rating] || SCORE_METADATA.critical;\n}\n\n/**\n * Get the Tailwind color class for a score using core rating system\n */\nexport function scoreColor(score: number | null | undefined): string {\n return getMetadata(score).color;\n}\n\n/**\n * Get the Tailwind background/border class for a score using core rating system\n */\nexport function scoreBg(score: number | null | undefined): string {\n return getMetadata(score).bg;\n}\n\n/**\n * Get the display label for a score using core rating system\n */\nexport function scoreLabel(score: number | null | undefined): string {\n return getMetadata(score).label;\n}\n\n/**\n * Get the Tailwind shadow glow class for a score using core rating system\n */\nexport function scoreGlow(score: number | null | undefined): string {\n return getMetadata(score).glow;\n}\n\n/**\n * Get rating from score (for use with ScoreBar component)\n */\nexport function getScoreRating(score: number | null | undefined): RatingSlug {\n if (score == null) return 'critical';\n return getRatingSlug(score) as RatingSlug;\n}\n","import { useEffect, useState } from 'react';\n\n/**\n * Debounce a value with a specified delay\n * Useful for search inputs, filters, and other frequently changing values\n *\n * @param value - The value to debounce\n * @param delay - Delay in milliseconds (default: 300ms)\n * @returns The debounced value\n *\n * @example\n * ```tsx\n * function SearchInput() {\n * const [searchTerm, setSearchTerm] = useState('');\n * const debouncedSearchTerm = useDebounce(searchTerm, 500);\n *\n * useEffect(() => {\n * // This will only run when user stops typing for 500ms\n * if (debouncedSearchTerm) {\n * performSearch(debouncedSearchTerm);\n * }\n * }, [debouncedSearchTerm]);\n *\n * return <input value={searchTerm} onChange={(e) => setSearchTerm(e.target.value)} />;\n * }\n * ```\n */\nexport function useDebounce<T>(value: T, delay: number = 300): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n // Set up the timeout to update debounced value after delay\n const timer = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n // Clean up the timeout if value changes or component unmounts\n return () => {\n clearTimeout(timer);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n","import { useEffect, useRef } from 'react';\nimport * as d3 from 'd3';\n\n/**\n * Hook for managing D3 selections with React lifecycle\n * Provides a ref to the SVG/container element and runs a render function when dependencies change\n *\n * @param renderFn - Function that receives the D3 selection and performs rendering\n * @param dependencies - Array of dependencies that trigger re-render\n * @returns Ref to attach to the SVG/container element\n *\n * @example\n * ```tsx\n * function BarChart({ data }: { data: number[] }) {\n * const ref = useD3(\n * (svg) => {\n * const width = 600;\n * const height = 400;\n * const margin = { top: 20, right: 20, bottom: 30, left: 40 };\n *\n * // Clear previous content\n * svg.selectAll('*').remove();\n *\n * // Set up scales\n * const x = d3.scaleBand()\n * .domain(data.map((_, i) => i.toString()))\n * .range([margin.left, width - margin.right])\n * .padding(0.1);\n *\n * const y = d3.scaleLinear()\n * .domain([0, d3.max(data) || 0])\n * .range([height - margin.bottom, margin.top]);\n *\n * // Draw bars\n * svg.selectAll('rect')\n * .data(data)\n * .join('rect')\n * .attr('x', (_, i) => x(i.toString())!)\n * .attr('y', d => y(d))\n * .attr('width', x.bandwidth())\n * .attr('height', d => y(0) - y(d))\n * .attr('fill', 'steelblue');\n * },\n * [data]\n * );\n *\n * return <svg ref={ref} width={600} height={400} />;\n * }\n * ```\n */\nexport function useD3<T extends SVGSVGElement | HTMLDivElement>(\n renderFn: (selection: d3.Selection<T, unknown, null, undefined>) => void,\n dependencies: React.DependencyList = []\n): React.RefObject<T | null> {\n const ref = useRef<T | null>(null);\n\n useEffect(() => {\n if (ref.current) {\n const selection = d3.select(ref.current);\n renderFn(selection);\n }\n }, dependencies);\n\n return ref;\n}\n\n/**\n * Hook for managing D3 selections with automatic resize handling\n * Similar to useD3 but also triggers re-render on window resize\n *\n * @param renderFn - Function that receives the D3 selection and performs rendering\n * @param dependencies - Array of dependencies that trigger re-render\n * @returns Ref to attach to the SVG/container element\n *\n * @example\n * ```tsx\n * function ResponsiveChart({ data }: { data: number[] }) {\n * const ref = useD3WithResize(\n * (svg) => {\n * const container = svg.node();\n * const width = container?.clientWidth || 600;\n * const height = container?.clientHeight || 400;\n *\n * // Render with responsive dimensions\n * // ...\n * },\n * [data]\n * );\n *\n * return <svg ref={ref} style={{ width: '100%', height: '400px' }} />;\n * }\n * ```\n */\nexport function useD3WithResize<T extends SVGSVGElement | HTMLDivElement>(\n renderFn: (selection: d3.Selection<T, unknown, null, undefined>) => void,\n dependencies: React.DependencyList = []\n): React.RefObject<T | null> {\n const ref = useRef<T | null>(null);\n\n useEffect(() => {\n if (!ref.current) return;\n\n const selection = d3.select(ref.current);\n const render = () => renderFn(selection);\n\n // Initial render\n render();\n\n // Set up resize observer\n const resizeObserver = new ResizeObserver(() => {\n render();\n });\n\n resizeObserver.observe(ref.current);\n\n // Cleanup\n return () => {\n resizeObserver.disconnect();\n };\n }, dependencies);\n\n return ref;\n}\n","import { SimulationNode } from './simulation-types';\n\n/**\n * Stabilizes nodes by zeroing velocities and rounding positions.\n * Extracted to reduce duplicate patterns in useForceSimulation.\n */\nexport function stabilizeNodes(nodes: SimulationNode[]): void {\n nodes.forEach((n) => {\n n.vx = 0;\n n.vy = 0;\n if (typeof n.x === 'number') n.x = Number(n.x.toFixed(3));\n if (typeof n.y === 'number') n.y = Number(n.y.toFixed(3));\n });\n}\n\n/**\n * Seeds nodes with initial positions in a spread circle.\n * This ensures nodes don't stack at origin and have some initial velocity.\n */\nexport function seedCircularPositions(\n nodes: SimulationNode[],\n width: number,\n height: number\n): void {\n const radius = Math.min(width, height) * 0.45;\n nodes.forEach((n, i) => {\n const angle = (i * 2 * Math.PI) / nodes.length;\n n.x = width / 2 + radius * Math.cos(angle);\n n.y = height / 2 + radius * Math.sin(angle);\n // Add very small random velocity to avoid large initial motion\n n.vx = (Math.random() - 0.5) * 2;\n n.vy = (Math.random() - 0.5) * 2;\n });\n}\n\n/**\n * Seeds nodes with random positions within bounds.\n * Used as fallback when initial positioning fails.\n */\nexport function seedRandomPositions(\n nodes: SimulationNode[],\n width: number,\n height: number\n): void {\n nodes.forEach((n) => {\n n.x = Math.random() * width;\n n.y = Math.random() * height;\n n.vx = (Math.random() - 0.5) * 10;\n n.vy = (Math.random() - 0.5) * 10;\n });\n}\n\n/**\n * Safely stops a d3 simulation and performs cleanup tasks.\n */\nexport function safelyStopSimulation(\n simulation: d3.Simulation<SimulationNode, any>,\n nodes: SimulationNode[],\n options: { stabilize?: boolean } = {}\n): void {\n try {\n if (options.stabilize) {\n stabilizeNodes(nodes);\n }\n simulation.stop();\n } catch (error) {\n console.warn('AIReady: Failed to stop simulation safely:', error);\n }\n}\n","/**\n * Constants for force simulation defaults and configuration\n */\nexport const SIMULATION_DEFAULTS = {\n CHARGE_STRENGTH: -300,\n LINK_DISTANCE: 100,\n LINK_STRENGTH: 1,\n COLLISION_STRENGTH: 1,\n COLLISION_RADIUS: 10,\n CENTER_STRENGTH: 0.1,\n ALPHA_DECAY: 0.0228,\n VELOCITY_DECAY: 0.4,\n ALPHA_TARGET: 0,\n WARM_ALPHA: 0.3,\n ALPHA_MIN: 0.01,\n TICK_THROTTLE_MS: 33, // ~30 fps\n MAX_SIMULATION_TIME_MS: 3000,\n STABILIZE_ON_STOP: true,\n} as const;\n\n/**\n * Force names used in d3-force\n */\nexport const FORCE_NAMES = {\n LINK: 'link',\n CHARGE: 'charge',\n CENTER: 'center',\n COLLISION: 'collision',\n X: 'x',\n Y: 'y',\n} as const;\n\n/**\n * Event names used in d3-force\n */\nexport const EVENT_NAMES = {\n TICK: 'tick',\n END: 'end',\n} as const;\n","/**\n * Hook for managing d3-force simulations\n * Automatically handles simulation lifecycle, tick updates, and cleanup\n */\n\nimport { useEffect, useRef, useState, useCallback } from 'react';\nimport * as d3 from 'd3';\nimport {\n seedRandomPositions,\n seedCircularPositions,\n safelyStopSimulation,\n} from './simulation-helpers';\nimport {\n SIMULATION_DEFAULTS,\n FORCE_NAMES,\n EVENT_NAMES,\n} from './simulation-constants';\nimport type {\n SimulationNode,\n SimulationLink,\n ForceSimulationOptions,\n UseForceSimulationReturn,\n} from './simulation-types';\n\n/**\n * Enhanced return type for the force simulation hook\n */\nexport interface UseForceSimulationReturnExt extends UseForceSimulationReturn {\n /**\n * Enable or disable simulation forces (charge and link forces)\n */\n setForcesEnabled: (enabled: boolean) => void;\n}\n\n/**\n * useForceSimulation: robust d3-force management with React\n * @lastUpdated 2026-03-27\n */\nexport function useForceSimulation(\n initialNodes: SimulationNode[],\n initialLinks: SimulationLink[],\n options: ForceSimulationOptions\n): UseForceSimulationReturnExt {\n const {\n chargeStrength = SIMULATION_DEFAULTS.CHARGE_STRENGTH,\n linkDistance = SIMULATION_DEFAULTS.LINK_DISTANCE,\n linkStrength = SIMULATION_DEFAULTS.LINK_STRENGTH,\n collisionStrength = SIMULATION_DEFAULTS.COLLISION_STRENGTH,\n collisionRadius = SIMULATION_DEFAULTS.COLLISION_RADIUS,\n centerStrength = SIMULATION_DEFAULTS.CENTER_STRENGTH,\n width,\n height,\n alphaDecay = SIMULATION_DEFAULTS.ALPHA_DECAY,\n velocityDecay = SIMULATION_DEFAULTS.VELOCITY_DECAY,\n alphaTarget = SIMULATION_DEFAULTS.ALPHA_TARGET,\n warmAlpha = SIMULATION_DEFAULTS.WARM_ALPHA,\n alphaMin = SIMULATION_DEFAULTS.ALPHA_MIN,\n onTick,\n stabilizeOnStop = SIMULATION_DEFAULTS.STABILIZE_ON_STOP,\n tickThrottleMs = SIMULATION_DEFAULTS.TICK_THROTTLE_MS,\n maxSimulationTimeMs = SIMULATION_DEFAULTS.MAX_SIMULATION_TIME_MS,\n } = options;\n\n const [nodes, setNodes] = useState<SimulationNode[]>(initialNodes);\n const [links, setLinks] = useState<SimulationLink[]>(initialLinks);\n const [isRunning, setIsRunning] = useState(false);\n const [alpha, setAlpha] = useState(1);\n\n const simulationRef = useRef<d3.Simulation<\n SimulationNode,\n SimulationLink\n > | null>(null);\n const stopTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const forcesEnabledRef = useRef(true);\n const originalForcesRef = useRef({\n charge: chargeStrength,\n link: linkStrength,\n });\n\n // Unique keys to detect when to rebuild the simulation\n const nodesKey = initialNodes.map((n) => n.id).join('|');\n const linksKey = initialLinks\n .map((l) => {\n const sourceId =\n typeof l.source === 'string'\n ? l.source\n : (l.source as SimulationNode)?.id;\n const targetId =\n typeof l.target === 'string'\n ? l.target\n : (l.target as SimulationNode)?.id;\n const linkType = (l as any).type || '';\n return `${sourceId}->${targetId}:${linkType}`;\n })\n .join('|');\n\n /**\n * Internal effect to manage simulation lifecycle\n */\n useEffect(() => {\n const nodesCopy = initialNodes.map((node) => ({ ...node }));\n const linksCopy = initialLinks.map((link) => ({ ...link }));\n\n try {\n seedCircularPositions(nodesCopy, width, height);\n } catch (error) {\n console.warn(\n 'AIReady: Position seeding failed, using random fallback:',\n error\n );\n seedRandomPositions(nodesCopy, width, height);\n }\n\n const simulation = d3.forceSimulation<SimulationNode, SimulationLink>(\n nodesCopy\n );\n applySimulationForces(simulation, linksCopy);\n configureSimulationParameters(simulation);\n\n simulationRef.current = simulation;\n\n const rafState = { rafId: null as number | null, lastUpdate: 0 };\n setupTickHandler(simulation, nodesCopy, linksCopy, rafState);\n\n setupStopTimer(simulation, nodesCopy, linksCopy);\n\n return () => cleanupSimulation(simulation, rafState);\n }, [\n nodesKey,\n linksKey,\n chargeStrength,\n linkDistance,\n linkStrength,\n collisionStrength,\n collisionRadius,\n centerStrength,\n width,\n height,\n alphaDecay,\n velocityDecay,\n alphaTarget,\n alphaMin,\n stabilizeOnStop,\n tickThrottleMs,\n maxSimulationTimeMs,\n ]);\n\n /**\n * Applies d3 forces to the simulation instance\n */\n const applySimulationForces = (\n simulation: d3.Simulation<SimulationNode, SimulationLink>,\n linksCopy: SimulationLink[]\n ) => {\n try {\n const linkForce = d3\n .forceLink<SimulationNode, SimulationLink>(linksCopy)\n .id((d) => d.id)\n .distance((d) => (d as any).distance ?? linkDistance)\n .strength(linkStrength);\n\n simulation\n .force(FORCE_NAMES.LINK, linkForce)\n .force(FORCE_NAMES.CHARGE, d3.forceManyBody().strength(chargeStrength))\n .force(\n FORCE_NAMES.CENTER,\n d3.forceCenter(width / 2, height / 2).strength(centerStrength)\n )\n .force(\n FORCE_NAMES.COLLISION,\n d3\n .forceCollide<SimulationNode>()\n .radius((d) => (d.size ?? 10) + collisionRadius)\n .strength(collisionStrength)\n )\n .force(\n FORCE_NAMES.X,\n d3.forceX(width / 2).strength(Math.max(0.02, centerStrength * 0.5))\n )\n .force(\n FORCE_NAMES.Y,\n d3.forceY(height / 2).strength(Math.max(0.02, centerStrength * 0.5))\n );\n } catch (error) {\n console.warn('AIReady: Failed to configure simulation forces:', error);\n }\n };\n\n /**\n * Configures simulation decay and heat parameters\n */\n const configureSimulationParameters = (\n simulation: d3.Simulation<SimulationNode, SimulationLink>\n ) => {\n simulation\n .alphaDecay(alphaDecay)\n .velocityDecay(velocityDecay)\n .alphaMin(alphaMin)\n .alphaTarget(alphaTarget)\n .alpha(warmAlpha);\n };\n\n /**\n * Sets up a timer to force-stop the simulation after maxSimulationTimeMs\n */\n const setupStopTimer = (\n simulation: d3.Simulation<SimulationNode, SimulationLink>,\n nodesCopy: SimulationNode[],\n linksCopy: SimulationLink[]\n ) => {\n if (stopTimeoutRef.current) {\n clearTimeout(stopTimeoutRef.current);\n }\n\n if (maxSimulationTimeMs > 0) {\n stopTimeoutRef.current = setTimeout(() => {\n safelyStopSimulation(simulation, nodesCopy, {\n stabilize: stabilizeOnStop,\n });\n updateStateAfterStop(nodesCopy, linksCopy, 0);\n }, maxSimulationTimeMs);\n }\n };\n\n /**\n * Updates state variables after simulation stops\n */\n const updateStateAfterStop = (\n nodesCopy: SimulationNode[],\n linksCopy: SimulationLink[],\n currentAlpha: number\n ) => {\n setIsRunning(false);\n setAlpha(currentAlpha);\n setNodes([...nodesCopy]);\n setLinks([...linksCopy]);\n };\n\n /**\n * Manages simulation ticks and React state sync\n */\n const setupTickHandler = (\n simulation: d3.Simulation<SimulationNode, SimulationLink>,\n nodesCopy: SimulationNode[],\n linksCopy: SimulationLink[],\n rafState: { rafId: number | null; lastUpdate: number }\n ) => {\n const handleTick = () => {\n if (onTick) {\n try {\n onTick(nodesCopy, linksCopy, simulation);\n } catch (error) {\n console.warn('AIReady: Simulation onTick callback failed:', error);\n }\n }\n\n const currentAlpha = simulation.alpha();\n if (currentAlpha <= alphaMin) {\n safelyStopSimulation(simulation, nodesCopy, {\n stabilize: stabilizeOnStop,\n });\n updateStateAfterStop(nodesCopy, linksCopy, currentAlpha);\n return;\n }\n\n syncStateOnTick(nodesCopy, linksCopy, currentAlpha, rafState);\n };\n\n simulation.on(EVENT_NAMES.TICK, handleTick);\n simulation.on(EVENT_NAMES.END, () => setIsRunning(false));\n };\n\n /**\n * Syncs simulation results to React state using requestAnimationFrame\n */\n const syncStateOnTick = (\n nodesCopy: SimulationNode[],\n linksCopy: SimulationLink[],\n currentAlpha: number,\n rafState: { rafId: number | null; lastUpdate: number }\n ) => {\n const now = Date.now();\n if (\n rafState.rafId === null &&\n now - rafState.lastUpdate >= tickThrottleMs\n ) {\n rafState.rafId = requestAnimationFrame(() => {\n rafState.rafId = null;\n rafState.lastUpdate = Date.now();\n setNodes([...nodesCopy]);\n setLinks([...linksCopy]);\n setAlpha(currentAlpha);\n setIsRunning(currentAlpha > alphaMin);\n });\n }\n };\n\n /**\n * Cleanup routine for simulation unmount or rebuild\n */\n const cleanupSimulation = (\n simulation: d3.Simulation<SimulationNode, SimulationLink>,\n rafState: { rafId: number | null }\n ) => {\n simulation.on(EVENT_NAMES.TICK, null);\n if (stopTimeoutRef.current) clearTimeout(stopTimeoutRef.current);\n if (rafState.rafId !== null) cancelAnimationFrame(rafState.rafId);\n simulation.stop();\n };\n\n /**\n * Restart the simulation manually\n */\n const restartSimulation = useCallback(() => {\n const sim = simulationRef.current;\n if (!sim) return;\n\n try {\n sim.alphaTarget(warmAlpha).restart();\n setIsRunning(true);\n if (stopTimeoutRef.current) clearTimeout(stopTimeoutRef.current);\n if (maxSimulationTimeMs > 0) {\n stopTimeoutRef.current = setTimeout(() => {\n sim.alpha(0);\n sim.stop();\n setIsRunning(false);\n }, maxSimulationTimeMs);\n }\n } catch (error) {\n console.warn('AIReady: Failed to restart simulation:', error);\n }\n }, [warmAlpha, maxSimulationTimeMs]);\n\n /**\n * Stop the simulation manually\n */\n const stopSimulation = useCallback(() => {\n if (simulationRef.current) {\n simulationRef.current.stop();\n setIsRunning(false);\n }\n }, []);\n\n /**\n * Enable or disable simulation forces\n */\n const setForcesEnabled = useCallback(\n (enabled: boolean) => {\n const sim = simulationRef.current;\n if (!sim || forcesEnabledRef.current === enabled) return;\n\n forcesEnabledRef.current = enabled;\n\n try {\n const charge = sim.force(\n FORCE_NAMES.CHARGE\n ) as d3.ForceManyBody<SimulationNode> | null;\n if (charge) {\n charge.strength(enabled ? originalForcesRef.current.charge : 0);\n }\n\n const link = sim.force(FORCE_NAMES.LINK) as d3.ForceLink<\n SimulationNode,\n SimulationLink\n > | null;\n if (link) {\n link.strength(enabled ? originalForcesRef.current.link : 0);\n }\n\n sim.alpha(warmAlpha).restart();\n } catch (error) {\n console.warn('AIReady: Failed to toggle simulation forces:', error);\n }\n },\n [warmAlpha]\n );\n\n return {\n nodes,\n links,\n restart: restartSimulation,\n stop: stopSimulation,\n isRunning,\n alpha,\n setForcesEnabled,\n };\n}\n\n/**\n * Hook for creating a draggable force simulation\n */\nexport function useDrag(\n simulation: d3.Simulation<SimulationNode, any> | null | undefined\n) {\n const handleDragStart = useCallback(\n (event: any, node: SimulationNode) => {\n if (!simulation) return;\n if (!event.active) simulation.alphaTarget(0.3).restart();\n node.fx = node.x;\n node.fy = node.y;\n },\n [simulation]\n );\n\n const handleDragged = useCallback((event: any, node: SimulationNode) => {\n node.fx = event.x;\n node.fy = event.y;\n }, []);\n\n const handleDragEnd = useCallback(\n (event: any, node: SimulationNode) => {\n if (!simulation) return;\n if (!event.active) simulation.alphaTarget(0);\n node.fx = null;\n node.fy = null;\n },\n [simulation]\n );\n\n return {\n onDragStart: handleDragStart,\n onDrag: handleDragged,\n onDragEnd: handleDragEnd,\n };\n}\n","import { useCallback, useEffect } from 'react';\nimport * as d3 from 'd3';\nimport { GraphNode } from './types';\n\n/** Pins a node to its current position (sets fx/fy to current x/y) */\nexport function pinNode(node: GraphNode): void {\n node.fx = node.x;\n node.fy = node.y;\n}\n\n/** Unpins a node (sets fx/fy to null) */\nexport function unpinNode(node: GraphNode): void {\n node.fx = null;\n node.fy = null;\n}\n\n/** Unpins all nodes - helper for bulk unpin operations */\nexport function unpinAllNodes(nodes: GraphNode[]): void {\n nodes.forEach(unpinNode);\n}\n\n/**\n * Hook for managing D3 zoom behavior on an SVG element.\n */\nexport function useGraphZoom(\n svgRef: React.RefObject<SVGSVGElement | null>,\n gRef: React.RefObject<SVGGElement | null>,\n enableZoom: boolean,\n setTransform: (transform: { k: number; x: number; y: number }) => void,\n transformRef: React.MutableRefObject<{ k: number; x: number; y: number }>\n) {\n useEffect(() => {\n if (!enableZoom || !svgRef.current || !gRef.current) return;\n\n const svg = d3.select(svgRef.current);\n const g = d3.select(gRef.current);\n\n const zoom = (d3 as any)\n .zoom()\n .scaleExtent([0.1, 10])\n .on('zoom', (event: any) => {\n g.attr('transform', event.transform);\n transformRef.current = event.transform;\n setTransform(event.transform);\n });\n\n svg.call(zoom);\n\n return () => {\n svg.on('.zoom', null);\n };\n }, [enableZoom, svgRef, gRef, setTransform, transformRef]);\n}\n\n/**\n * Hook for managing window-level drag events for smooth node dragging.\n */\nexport function useWindowDrag(\n enableDrag: boolean,\n svgRef: React.RefObject<SVGSVGElement | null>,\n transformRef: React.MutableRefObject<{ k: number; x: number; y: number }>,\n dragActiveRef: React.MutableRefObject<boolean>,\n dragNodeRef: React.MutableRefObject<GraphNode | null>,\n onDragEnd: () => void\n) {\n useEffect(() => {\n if (!enableDrag) return;\n\n const handleWindowMove = (event: MouseEvent) => {\n if (!dragActiveRef.current || !dragNodeRef.current) return;\n const svg = svgRef.current;\n if (!svg) return;\n const rect = svg.getBoundingClientRect();\n const t: any = transformRef.current;\n const x = (event.clientX - rect.left - t.x) / t.k;\n const y = (event.clientY - rect.top - t.y) / t.k;\n dragNodeRef.current.fx = x;\n dragNodeRef.current.fy = y;\n };\n\n const handleWindowUp = () => {\n if (!dragActiveRef.current) return;\n onDragEnd();\n dragNodeRef.current = null;\n dragActiveRef.current = false;\n };\n\n const handleWindowLeave = (event: MouseEvent) => {\n if (event.relatedTarget === null) handleWindowUp();\n };\n\n window.addEventListener('mousemove', handleWindowMove);\n window.addEventListener('mouseup', handleWindowUp);\n window.addEventListener('mouseout', handleWindowLeave);\n window.addEventListener('blur', handleWindowUp);\n\n return () => {\n window.removeEventListener('mousemove', handleWindowMove);\n window.removeEventListener('mouseup', handleWindowUp);\n window.removeEventListener('mouseout', handleWindowLeave);\n window.removeEventListener('blur', handleWindowUp);\n };\n }, [enableDrag, svgRef, transformRef, dragActiveRef, dragNodeRef, onDragEnd]);\n}\n\n/**\n * Hook for managing node interactions (drag, double-click pinning).\n */\nexport function useNodeInteractions(\n enableDrag: boolean,\n _nodes: GraphNode[],\n _pinnedNodes: Set<string>,\n setPinnedNodes: React.Dispatch<React.SetStateAction<Set<string>>>,\n restart: () => void,\n stop: () => void\n) {\n const handleDragStart = useCallback(\n (event: React.MouseEvent, node: GraphNode) => {\n if (!enableDrag) return;\n event.preventDefault();\n event.stopPropagation();\n pinNode(node);\n setPinnedNodes((prev) => new Set([...prev, node.id]));\n stop();\n },\n [enableDrag, stop, setPinnedNodes]\n );\n\n const handleNodeDoubleClick = useCallback(\n (event: React.MouseEvent, node: GraphNode) => {\n event.stopPropagation();\n if (!enableDrag) return;\n if (node.fx === null || node.fx === undefined) {\n pinNode(node);\n setPinnedNodes((prev) => new Set([...prev, node.id]));\n } else {\n unpinNode(node);\n setPinnedNodes((prev) => {\n const next = new Set(prev);\n next.delete(node.id);\n return next;\n });\n }\n restart();\n },\n [enableDrag, restart, setPinnedNodes]\n );\n\n return { handleDragStart, handleNodeDoubleClick };\n}\n","/**\n * Default visual constants for the ForceDirectedGraph component.\n */\nexport const DEFAULT_NODE_COLOR = '#64748b';\nexport const DEFAULT_NODE_SIZE = 10;\nexport const DEFAULT_LINK_COLOR = '#94a3b8';\nexport const DEFAULT_LINK_WIDTH = 1;\n\n/**\n * Layout and interaction thresholds.\n */\nexport const CIRCULAR_LAYOUT_RADIUS_RATIO = 0.35;\nexport const FIT_VIEW_PADDING = 40;\nexport const ZOOM_MIN_SCALE = 0.1;\nexport const ZOOM_MAX_SCALE = 10;\n\n/**\n * Transition and animation durations.\n */\nexport const TRANSITION_DURATION_MS = 300;\n\n/**\n * Package boundary styling.\n */\nexport const PACKAGE_BOUNDARY_FILL = 'rgba(148,163,184,0.06)';\nexport const PACKAGE_BOUNDARY_STROKE = '#475569';\nexport const PACKAGE_BOUNDARY_STROKE_WIDTH = 2;\nexport const PACKAGE_BOUNDARY_DASH = '6 6';\nexport const PACKAGE_LABEL_FONT_SIZE = 11;\nexport const PACKAGE_LABEL_COLOR = '#475569';\n","import { GraphNode } from './force-directed/types';\nimport { CIRCULAR_LAYOUT_RADIUS_RATIO } from './constants';\n\n/**\n * Calculates node positions for a circular layout.\n *\n * @param nodes - Array of dependency nodes.\n * @param width - Canvas width.\n * @param height - Canvas height.\n * @lastUpdated 2026-03-18\n */\nexport function applyCircularLayout(\n nodes: GraphNode[],\n width: number,\n height: number\n): void {\n const centerX = width / 2;\n const centerY = height / 2;\n const radius = Math.min(width, height) * CIRCULAR_LAYOUT_RADIUS_RATIO;\n\n nodes.forEach((node, i) => {\n const angle = (2 * Math.PI * i) / nodes.length;\n node.fx = centerX + Math.cos(angle) * radius;\n node.fy = centerY + Math.sin(angle) * radius;\n node.x = node.fx;\n node.y = node.fy;\n });\n}\n\n/**\n * Calculates node positions for a hierarchical layout by grouping packages.\n *\n * @param nodes - Array of dependency nodes.\n * @param width - Canvas width.\n * @param height - Canvas height.\n * @lastUpdated 2026-03-18\n */\nexport function applyHierarchicalLayout(\n nodes: GraphNode[],\n width: number,\n height: number\n): void {\n const groups = new Map<string, GraphNode[]>();\n nodes.forEach((n: any) => {\n const key = n.packageGroup || n.group || 'root';\n if (!groups.has(key)) groups.set(key, []);\n groups.get(key)!.push(n);\n });\n\n const groupArray = Array.from(groups.entries());\n const cols = Math.ceil(Math.sqrt(groupArray.length));\n const groupSpacingX = (width * 0.8) / cols;\n const groupSpacingY = (height * 0.8) / Math.ceil(groupArray.length / cols);\n\n groupArray.forEach(([groupKey, groupNodes], gi) => {\n const col = gi % cols;\n const row = Math.floor(gi / cols);\n const groupX = (col + 0.5) * groupSpacingX;\n const groupY = (row + 0.5) * groupSpacingY;\n\n if (groupKey.startsWith('pkg:') || groupKey === groupKey) {\n groupNodes.forEach((n, ni) => {\n const angle = (2 * Math.PI * ni) / groupNodes.length;\n const r = Math.min(80, 20 + groupNodes.length * 8);\n n.fx = groupX + Math.cos(angle) * r;\n n.fy = groupY + Math.sin(angle) * r;\n n.x = n.fx;\n n.y = n.fy;\n });\n }\n });\n}\n\n/**\n * Calculates initial random positions for nodes in a force-directed layout.\n *\n * @param nodes - Array of dependency nodes.\n * @param width - Canvas width.\n * @param height - Canvas height.\n * @lastUpdated 2026-03-18\n */\nexport function applyInitialForceLayout(\n nodes: GraphNode[],\n width: number,\n height: number\n): void {\n nodes.forEach((node) => {\n if (node.fx === undefined || node.fx === null) {\n node.x = Math.random() * width;\n node.y = Math.random() * height;\n }\n });\n}\n","import { useCallback, useEffect, useMemo } from 'react';\nimport { GraphNode, LayoutType } from './types';\nimport {\n applyCircularLayout,\n applyHierarchicalLayout,\n applyInitialForceLayout,\n} from '../layout-utils';\n\n/**\n * Hook for managing graph layout algorithms.\n */\nexport function useGraphLayout(\n initialNodes: GraphNode[],\n width: number,\n height: number,\n layout: LayoutType,\n restart: () => void\n) {\n // Initial positioning - delegate to layout utils\n const nodes = useMemo(() => {\n if (!initialNodes || !initialNodes.length) return initialNodes;\n const copy = initialNodes.map((n) => ({ ...n }));\n if (layout === 'circular') applyCircularLayout(copy, width, height);\n else if (layout === 'hierarchical')\n applyHierarchicalLayout(copy, width, height);\n else applyInitialForceLayout(copy, width, height);\n return copy;\n }, [initialNodes, width, height, layout]);\n\n // Apply layout-specific positioning when layout changes\n useEffect(() => {\n if (!nodes || nodes.length === 0) return;\n if (layout === 'circular') applyCircularLayout(nodes, width, height);\n else if (layout === 'hierarchical')\n applyHierarchicalLayout(nodes, width, height);\n\n restart();\n }, [layout, nodes, width, height, restart]);\n\n return { nodes };\n}\n\n/**\n * Hook for managing simulation controls (stubs for API compatibility).\n */\nexport function useSimulationControls() {\n const restart = useCallback(() => {}, []);\n const stop = useCallback(() => {}, []);\n const setForcesEnabled = useCallback((enabled?: boolean) => {\n void enabled;\n }, []);\n\n return { restart, stop, setForcesEnabled };\n}\n","import { useCallback } from 'react';\nimport * as d3 from 'd3';\nimport { GraphNode, LayoutType, ForceDirectedGraphHandle } from './types';\nimport { pinNode, unpinAllNodes } from './useGraphInteractions';\nimport {\n DEFAULT_NODE_SIZE,\n FIT_VIEW_PADDING,\n TRANSITION_DURATION_MS,\n} from '../constants';\n\ninterface UseImperativeHandleProps {\n nodes: GraphNode[];\n pinnedNodes: Set<string>;\n setPinnedNodes: React.Dispatch<React.SetStateAction<Set<string>>>;\n restart: () => void;\n width: number;\n height: number;\n layout: LayoutType;\n handleLayoutChange: (layout: LayoutType) => void;\n setForcesEnabled: (enabled: boolean) => void;\n svgRef: React.RefObject<SVGSVGElement | null>;\n gRef: React.RefObject<SVGGElement | null>;\n setTransform: (transform: { k: number; x: number; y: number }) => void;\n internalDragEnabledRef: React.MutableRefObject<boolean>;\n}\n\n/**\n * Creates the imperative handle methods for the ForceDirectedGraph component.\n */\nexport function useImperativeHandleMethods({\n nodes,\n pinnedNodes,\n setPinnedNodes,\n restart,\n width,\n height,\n layout,\n handleLayoutChange,\n svgRef,\n gRef,\n setTransform,\n internalDragEnabledRef,\n}: UseImperativeHandleProps): ForceDirectedGraphHandle {\n const pinAll = useCallback(() => {\n const newPinned = new Set<string>();\n nodes.forEach((node) => {\n pinNode(node);\n newPinned.add(node.id);\n });\n setPinnedNodes(newPinned);\n restart();\n }, [nodes, setPinnedNodes, restart]);\n\n const unpinAll = useCallback(() => {\n unpinAllNodes(nodes);\n setPinnedNodes(new Set());\n restart();\n }, [nodes, setPinnedNodes, restart]);\n\n const resetLayout = useCallback(() => {\n unpinAllNodes(nodes);\n setPinnedNodes(new Set());\n restart();\n }, [nodes, setPinnedNodes, restart]);\n\n const fitView = useCallback(() => {\n if (!svgRef.current || !nodes.length) return;\n let minX = Infinity,\n maxX = -Infinity,\n minY = Infinity,\n maxY = -Infinity;\n nodes.forEach((node) => {\n if (node.x !== undefined && node.y !== undefined) {\n const size = node.size || DEFAULT_NODE_SIZE;\n minX = Math.min(minX, node.x - size);\n maxX = Math.max(maxX, node.x + size);\n minY = Math.min(minY, node.y - size);\n maxY = Math.max(maxY, node.y + size);\n }\n });\n if (!isFinite(minX)) return;\n const scale = Math.min(\n (width - FIT_VIEW_PADDING * 2) / (maxX - minX),\n (height - FIT_VIEW_PADDING * 2) / (maxY - minY),\n 10\n );\n const x = width / 2 - ((minX + maxX) / 2) * scale;\n const y = height / 2 - ((minY + maxY) / 2) * scale;\n if (gRef.current && svgRef.current) {\n const svg = d3.select(svgRef.current);\n const newTransform = d3.zoomIdentity.translate(x, y).scale(scale);\n svg\n .transition()\n .duration(TRANSITION_DURATION_MS)\n .call((d3 as any).zoom().transform as any, newTransform);\n setTransform(newTransform);\n }\n }, [nodes, width, height, svgRef, gRef, setTransform]);\n\n const getPinnedNodes = useCallback(\n () => Array.from(pinnedNodes),\n [pinnedNodes]\n );\n\n const setDragMode = useCallback(\n (enabled: boolean) => {\n internalDragEnabledRef.current = enabled;\n },\n [internalDragEnabledRef]\n );\n\n const setLayoutMethod = useCallback(\n (newLayout: LayoutType) => {\n handleLayoutChange(newLayout);\n },\n [handleLayoutChange]\n );\n\n const getLayout = useCallback(() => layout, [layout]);\n\n return {\n pinAll,\n unpinAll,\n resetLayout,\n fitView,\n getPinnedNodes,\n setDragMode,\n setLayout: setLayoutMethod,\n getLayout,\n };\n}\n","import React from 'react';\nimport { cn } from '../../utils/cn';\n\nexport interface ControlButtonProps {\n onClick: () => void;\n active?: boolean;\n icon: string;\n label: string;\n disabled?: boolean;\n}\n\nexport const ControlButton: React.FC<ControlButtonProps> = ({\n onClick,\n active = false,\n icon,\n label,\n disabled = false,\n}) => (\n <div className=\"relative group\">\n <button\n onClick={onClick}\n disabled={disabled}\n className={cn(\n 'p-2 rounded-lg transition-all duration-200',\n active\n ? 'bg-blue-500 text-white shadow-md hover:bg-blue-600'\n : 'bg-gray-100 text-gray-700 hover:bg-gray-200',\n disabled && 'opacity-50 cursor-not-allowed hover:bg-gray-100',\n 'dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600 dark:active:bg-blue-600'\n )}\n title={label}\n >\n <span className=\"text-lg\">{icon}</span>\n </button>\n <div className=\"absolute left-full ml-2 px-2 py-1 bg-gray-900 text-white text-xs rounded whitespace-nowrap opacity-0 group-hover:opacity-100 transition-opacity duration-200 pointer-events-none z-50\">\n {label}\n </div>\n </div>\n);\n","import React from 'react';\nimport { cn } from '../../utils/cn';\nimport { ControlButton } from './ControlButton';\n\nexport interface GraphControlsProps {\n dragEnabled?: boolean;\n onDragToggle?: (enabled: boolean) => void;\n manualLayout?: boolean;\n onManualLayoutToggle?: (enabled: boolean) => void;\n onPinAll?: () => void;\n onUnpinAll?: () => void;\n onReset?: () => void;\n onFitView?: () => void;\n pinnedCount?: number;\n totalNodes?: number;\n visible?: boolean;\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n className?: string;\n}\n\nexport const GraphControls: React.FC<GraphControlsProps> = ({\n dragEnabled = true,\n onDragToggle,\n manualLayout = false,\n onManualLayoutToggle,\n onPinAll,\n onUnpinAll,\n onReset,\n onFitView,\n pinnedCount = 0,\n totalNodes = 0,\n visible = true,\n position = 'top-left',\n className,\n}) => {\n if (!visible) return null;\n\n const positionClasses: Record<string, string> = {\n 'top-left': 'top-4 left-4',\n 'top-right': 'top-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'bottom-right': 'bottom-4 right-4',\n };\n\n return (\n <div\n className={cn(\n 'fixed z-40 bg-white dark:bg-gray-800 rounded-lg shadow-lg p-2 border border-gray-200 dark:border-gray-700',\n positionClasses[position],\n className\n )}\n >\n <div className=\"flex flex-col gap-2\">\n <ControlButton\n onClick={() => onDragToggle?.(!dragEnabled)}\n active={dragEnabled}\n icon=\"✋\"\n label={dragEnabled ? 'Drag enabled' : 'Drag disabled'}\n />\n\n <ControlButton\n onClick={() => onManualLayoutToggle?.(!manualLayout)}\n active={manualLayout}\n icon=\"🔧\"\n label={manualLayout ? 'Manual layout: ON' : 'Manual layout: OFF'}\n />\n\n <div className=\"w-8 h-px bg-gray-300 dark:bg-gray-600 mx-auto my-1\" />\n\n <div className=\"flex gap-1\">\n <ControlButton\n onClick={() => onPinAll?.()}\n disabled={totalNodes === 0}\n icon=\"📌\"\n label={`Pin all nodes (${totalNodes})`}\n />\n <ControlButton\n onClick={() => onUnpinAll?.()}\n disabled={pinnedCount === 0}\n icon=\"📍\"\n label={`Unpin all (${pinnedCount} pinned)`}\n />\n </div>\n\n <div className=\"w-8 h-px bg-gray-300 dark:bg-gray-600 mx-auto my-1\" />\n\n <ControlButton\n onClick={() => onFitView?.()}\n disabled={totalNodes === 0}\n icon=\"🎯\"\n label=\"Fit all nodes in view\"\n />\n\n <ControlButton\n onClick={() => onReset?.()}\n disabled={totalNodes === 0}\n icon=\"↺\"\n label=\"Reset to auto-layout\"\n />\n </div>\n\n <div className=\"mt-3 pt-3 border-t border-gray-200 dark:border-gray-700 text-xs text-gray-600 dark:text-gray-400\">\n <div className=\"whitespace-nowrap\">\n <strong>Nodes:</strong> {totalNodes}\n </div>\n {pinnedCount > 0 && (\n <div className=\"whitespace-nowrap\">\n <strong>Pinned:</strong> {pinnedCount}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nGraphControls.displayName = 'GraphControls';\n","import React from 'react';\nimport type { GraphNode } from './force-directed/types';\n\nexport interface NodeItemProps {\n node: GraphNode;\n isSelected: boolean;\n isHovered: boolean;\n pinned: boolean;\n defaultNodeSize: number;\n defaultNodeColor: string;\n showLabel?: boolean;\n onClick?: (n: GraphNode) => void;\n onDoubleClick?: (e: React.MouseEvent, n: GraphNode) => void;\n onMouseEnter?: (n: GraphNode) => void;\n onMouseLeave?: () => void;\n onMouseDown?: (e: React.MouseEvent, n: GraphNode) => void;\n}\n\nexport const NodeItem: React.FC<NodeItemProps> = ({\n node,\n isSelected,\n isHovered,\n pinned,\n defaultNodeSize,\n defaultNodeColor,\n showLabel = true,\n onClick,\n onDoubleClick,\n onMouseEnter,\n onMouseLeave,\n onMouseDown,\n}) => {\n const nodeSize = node.size || defaultNodeSize;\n const nodeColor = node.color || defaultNodeColor;\n\n const x = node.x ?? 0;\n const y = node.y ?? 0;\n\n return (\n <g\n key={node.id}\n className=\"cursor-pointer node\"\n data-id={node.id}\n transform={`translate(${x},${y})`}\n onClick={() => onClick?.(node)}\n onDoubleClick={(e) => onDoubleClick?.(e, node)}\n onMouseEnter={() => onMouseEnter?.(node)}\n onMouseLeave={() => onMouseLeave?.()}\n onMouseDown={(e) => onMouseDown?.(e, node)}\n >\n <circle\n r={nodeSize}\n fill={nodeColor}\n stroke={isSelected ? '#000' : isHovered ? '#666' : 'none'}\n strokeWidth={pinned ? 3 : isSelected ? 2.5 : isHovered ? 2 : 1.5}\n opacity={isHovered || isSelected ? 1 : 0.9}\n />\n {pinned && (\n <circle\n r={nodeSize + 4}\n fill=\"none\"\n stroke=\"#ff6b6b\"\n strokeWidth={1}\n opacity={0.5}\n className=\"pointer-events-none\"\n />\n )}\n {showLabel && node.label && (\n <text\n y={nodeSize + 15}\n fill=\"#333\"\n fontSize=\"12\"\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n pointerEvents=\"none\"\n className=\"select-none\"\n >\n {node.label}\n </text>\n )}\n </g>\n );\n};\n\nexport default NodeItem;\n","import React from 'react';\nimport type { GraphLink, GraphNode } from './force-directed/types';\n\nexport interface LinkItemProps {\n link: GraphLink;\n onClick?: (l: GraphLink) => void;\n defaultWidth?: number;\n showLabel?: boolean;\n nodes?: GraphNode[]; // Optional nodes array to resolve string IDs to node objects\n}\n\nexport const LinkItem: React.FC<LinkItemProps> = ({\n link,\n onClick,\n defaultWidth,\n showLabel = true,\n nodes = [],\n}) => {\n const src =\n (link.source as any)?.id ??\n (typeof link.source === 'string' ? link.source : undefined);\n const tgt =\n (link.target as any)?.id ??\n (typeof link.target === 'string' ? link.target : undefined);\n\n // Helper to get node position from source/target (which could be node object or string ID)\n const getNodePosition = (\n nodeOrId: string | GraphNode\n ): { x: number; y: number } | null => {\n if (typeof nodeOrId === 'object' && nodeOrId !== null) {\n // It's a node object\n const node = nodeOrId as GraphNode;\n return { x: node.x ?? 0, y: node.y ?? 0 };\n } else if (typeof nodeOrId === 'string') {\n // It's a string ID, try to find in nodes array\n const found = nodes.find((n) => n.id === nodeOrId);\n if (found) return { x: found.x ?? 0, y: found.y ?? 0 };\n }\n return null;\n };\n\n const sourcePos = getNodePosition(link.source);\n const targetPos = getNodePosition(link.target);\n\n // If we can't get positions, render nothing (or a placeholder)\n if (!sourcePos || !targetPos) {\n return null;\n }\n\n // Calculate midpoint for label positioning\n const midX = (sourcePos.x + targetPos.x) / 2;\n const midY = (sourcePos.y + targetPos.y) / 2;\n\n return (\n <g>\n <line\n x1={sourcePos.x}\n y1={sourcePos.y}\n x2={targetPos.x}\n y2={targetPos.y}\n data-source={src}\n data-target={tgt}\n stroke={link.color}\n strokeWidth={link.width ?? defaultWidth ?? 1}\n opacity={0.6}\n className=\"cursor-pointer transition-opacity hover:opacity-100\"\n onClick={() => onClick?.(link)}\n />\n {showLabel && link.label && (\n <text\n x={midX}\n y={midY}\n fill=\"#666\"\n fontSize=\"10\"\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n pointerEvents=\"none\"\n >\n {link.label}\n </text>\n )}\n </g>\n );\n};\n\nexport default LinkItem;\n","import React from 'react';\nimport {\n PACKAGE_BOUNDARY_FILL,\n PACKAGE_BOUNDARY_STROKE,\n PACKAGE_BOUNDARY_STROKE_WIDTH,\n PACKAGE_BOUNDARY_DASH,\n PACKAGE_LABEL_COLOR,\n PACKAGE_LABEL_FONT_SIZE,\n} from './constants';\n\ninterface PackageBoundariesProps {\n packageBounds: Record<string, { x: number; y: number; r: number }>;\n}\n\n/**\n * Renders the circular boundaries and labels for package groups in the force-directed graph.\n *\n * @lastUpdated 2026-03-18\n */\nexport const PackageBoundaries: React.FC<PackageBoundariesProps> = ({\n packageBounds,\n}) => {\n if (!packageBounds || Object.keys(packageBounds).length === 0) return null;\n\n return (\n <g className=\"package-boundaries\" pointerEvents=\"none\">\n {Object.entries(packageBounds).map(([pid, b]) => (\n <g key={pid}>\n <circle\n cx={b.x}\n cy={b.y}\n r={b.r}\n fill={PACKAGE_BOUNDARY_FILL}\n stroke={PACKAGE_BOUNDARY_STROKE}\n strokeWidth={PACKAGE_BOUNDARY_STROKE_WIDTH}\n strokeDasharray={PACKAGE_BOUNDARY_DASH}\n opacity={0.9}\n />\n <text\n x={b.x}\n y={Math.max(12, b.y - b.r + 14)}\n fill={PACKAGE_LABEL_COLOR}\n fontSize={PACKAGE_LABEL_FONT_SIZE}\n textAnchor=\"middle\"\n pointerEvents=\"none\"\n >\n {pid.replace(/^pkg:/, '')}\n </text>\n </g>\n ))}\n </g>\n );\n};\n\nPackageBoundaries.displayName = 'PackageBoundaries';\n","import React from 'react';\nimport { cn } from '../../utils/cn';\nimport NodeItem from '../NodeItem';\nimport LinkItem from '../LinkItem';\nimport { PackageBoundaries } from '../PackageBoundaries';\nimport {\n DEFAULT_NODE_COLOR,\n DEFAULT_NODE_SIZE,\n DEFAULT_LINK_COLOR,\n DEFAULT_LINK_WIDTH,\n} from '../constants';\nimport { GraphNode, GraphLink, ForceDirectedGraphProps } from './types';\nimport { unpinAllNodes } from './useGraphInteractions';\n\ninterface GraphCanvasProps extends Pick<\n ForceDirectedGraphProps,\n | 'width'\n | 'height'\n | 'className'\n | 'selectedNodeId'\n | 'hoveredNodeId'\n | 'defaultNodeColor'\n | 'defaultNodeSize'\n | 'defaultLinkColor'\n | 'defaultLinkWidth'\n | 'showNodeLabels'\n | 'showLinkLabels'\n | 'onNodeClick'\n | 'onNodeHover'\n | 'onLinkClick'\n | 'packageBounds'\n> {\n svgRef: React.RefObject<SVGSVGElement | null>;\n gRef: React.RefObject<SVGGElement | null>;\n nodes: GraphNode[];\n links: GraphLink[];\n pinnedNodes: Set<string>;\n handleNodeDoubleClick: (e: React.MouseEvent, node: GraphNode) => void;\n handleDragStart: (e: React.MouseEvent, node: GraphNode) => void;\n restart: () => void;\n setPinnedNodes: React.Dispatch<React.SetStateAction<Set<string>>>;\n}\n\nexport const GraphCanvas: React.FC<GraphCanvasProps> = ({\n svgRef,\n gRef,\n width,\n height,\n className,\n nodes,\n links,\n pinnedNodes,\n selectedNodeId,\n hoveredNodeId,\n defaultNodeColor = DEFAULT_NODE_COLOR,\n defaultNodeSize = DEFAULT_NODE_SIZE,\n defaultLinkColor = DEFAULT_LINK_COLOR,\n defaultLinkWidth = DEFAULT_LINK_WIDTH,\n showNodeLabels = true,\n showLinkLabels = false,\n onNodeClick,\n onNodeHover,\n onLinkClick,\n packageBounds,\n handleNodeDoubleClick,\n handleDragStart,\n restart,\n setPinnedNodes,\n}) => {\n return (\n <svg\n ref={svgRef}\n width={width}\n height={height}\n className={cn('bg-white dark:bg-gray-900', className)}\n onDoubleClick={() => {\n unpinAllNodes(nodes);\n setPinnedNodes(new Set());\n restart();\n }}\n >\n <defs>\n <marker\n id=\"arrow\"\n viewBox=\"0 0 10 10\"\n refX=\"20\"\n refY=\"5\"\n markerWidth=\"6\"\n markerHeight=\"6\"\n orient=\"auto\"\n >\n <path d=\"M 0 0 L 10 5 L 0 10 z\" fill={defaultLinkColor} />\n </marker>\n </defs>\n\n <g ref={gRef}>\n {links.map((link, i) => (\n <LinkItem\n key={`link-${i}`}\n link={link as GraphLink}\n onClick={onLinkClick}\n defaultWidth={defaultLinkWidth}\n showLabel={showLinkLabels}\n nodes={nodes}\n />\n ))}\n\n {nodes.map((node) => (\n <NodeItem\n key={node.id}\n node={node}\n isSelected={selectedNodeId === node.id}\n isHovered={hoveredNodeId === node.id}\n pinned={pinnedNodes.has(node.id)}\n defaultNodeSize={defaultNodeSize}\n defaultNodeColor={defaultNodeColor}\n showLabel={showNodeLabels}\n onClick={onNodeClick}\n onDoubleClick={handleNodeDoubleClick}\n onMouseEnter={(n) => onNodeHover?.(n)}\n onMouseLeave={() => onNodeHover?.(null)}\n onMouseDown={handleDragStart}\n />\n ))}\n <PackageBoundaries packageBounds={packageBounds || {}} />\n </g>\n </svg>\n );\n};\n","import {\n useCallback,\n useEffect,\n useRef,\n useState,\n forwardRef,\n useImperativeHandle,\n} from 'react';\nimport * as d3 from 'd3';\nimport {\n GraphNode,\n LayoutType,\n ForceDirectedGraphHandle,\n ForceDirectedGraphProps,\n} from './types';\nimport {\n useGraphZoom,\n useWindowDrag,\n useNodeInteractions,\n} from './useGraphInteractions';\nimport { useGraphLayout, useSimulationControls } from './useGraphLayout';\nimport { useImperativeHandleMethods } from './useImperativeHandle';\nimport { GraphCanvas } from './GraphCanvas';\n\nexport const ForceDirectedGraph = forwardRef<\n ForceDirectedGraphHandle,\n ForceDirectedGraphProps\n>(\n (\n {\n nodes: initialNodes,\n links: initialLinks,\n width,\n height,\n enableZoom = true,\n enableDrag = true,\n onNodeClick,\n onNodeHover,\n onLinkClick,\n selectedNodeId,\n hoveredNodeId,\n defaultNodeColor,\n defaultNodeSize,\n defaultLinkColor,\n defaultLinkWidth,\n showNodeLabels,\n showLinkLabels,\n className,\n manualLayout = false,\n onManualLayoutChange,\n packageBounds,\n layout: externalLayout,\n onLayoutChange,\n },\n ref\n ) => {\n const svgRef = useRef<SVGSVGElement>(null);\n const gRef = useRef<SVGGElement>(null);\n const [transform, setTransform] = useState({ k: 1, x: 0, y: 0 });\n const transformRef = useRef(transform);\n const dragNodeRef = useRef<GraphNode | null>(null);\n const dragActiveRef = useRef(false);\n const [pinnedNodes, setPinnedNodes] = useState<Set<string>>(new Set());\n const internalDragEnabledRef = useRef(enableDrag);\n const [layout, setLayout] = useState<LayoutType>(externalLayout || 'force');\n\n useEffect(() => {\n if (externalLayout && externalLayout !== layout)\n setLayout(externalLayout);\n }, [externalLayout, layout]);\n\n const handleLayoutChange = useCallback(\n (newLayout: LayoutType) => {\n setLayout(newLayout);\n onLayoutChange?.(newLayout);\n },\n [onLayoutChange]\n );\n\n useEffect(() => {\n internalDragEnabledRef.current = enableDrag;\n }, [enableDrag]);\n\n const { restart, stop, setForcesEnabled } = useSimulationControls();\n const { nodes } = useGraphLayout(\n initialNodes,\n width,\n height,\n layout,\n restart\n );\n\n useEffect(() => {\n setForcesEnabled(!(manualLayout || pinnedNodes.size > 0));\n }, [manualLayout, pinnedNodes, setForcesEnabled]);\n\n useImperativeHandle(\n ref,\n () =>\n useImperativeHandleMethods({\n nodes,\n pinnedNodes,\n setPinnedNodes,\n restart,\n width,\n height,\n layout,\n handleLayoutChange,\n setForcesEnabled,\n svgRef,\n gRef,\n setTransform,\n internalDragEnabledRef,\n }),\n [\n nodes,\n pinnedNodes,\n restart,\n width,\n height,\n layout,\n handleLayoutChange,\n setForcesEnabled,\n ]\n );\n\n useEffect(() => {\n onManualLayoutChange?.(manualLayout);\n }, [manualLayout, onManualLayoutChange]);\n\n useGraphZoom(svgRef, gRef, enableZoom, setTransform, transformRef);\n useWindowDrag(\n enableDrag,\n svgRef,\n transformRef,\n dragActiveRef,\n dragNodeRef,\n () => {\n setForcesEnabled(true);\n restart();\n }\n );\n\n useEffect(() => {\n if (!gRef.current) return;\n const g = d3.select(gRef.current);\n g.selectAll('g.node').each(function (this: any) {\n const d = d3.select(this).datum() as any;\n if (d)\n d3.select(this).attr(\n 'transform',\n `translate(${d.x || 0},${d.y || 0})`\n );\n });\n g.selectAll('line').each(function (this: any) {\n const l = d3.select(this).datum() as any;\n if (!l) return;\n const s =\n typeof l.source === 'object'\n ? l.source\n : nodes.find((n) => n.id === l.source);\n const t =\n typeof l.target === 'object'\n ? l.target\n : nodes.find((n) => n.id === l.target);\n if (s && t)\n d3.select(this)\n .attr('x1', s.x)\n .attr('y1', s.y)\n .attr('x2', t.x)\n .attr('y2', t.y);\n });\n }, [nodes, initialLinks]);\n\n const { handleDragStart, handleNodeDoubleClick } = useNodeInteractions(\n enableDrag,\n nodes,\n pinnedNodes,\n setPinnedNodes,\n restart,\n stop\n );\n\n useEffect(() => {\n if (!gRef.current || !enableDrag) return;\n const g = d3.select(gRef.current);\n const dragBehavior = (d3 as any)\n .drag()\n .on('start', (event: any) => {\n const target = (event.sourceEvent?.target || event.target) as Element;\n const id = target.closest?.('g.node')?.getAttribute('data-id');\n if (!id || !internalDragEnabledRef.current) return;\n const node = nodes.find((n) => n.id === id);\n if (!node) return;\n if (!event.active) restart();\n dragActiveRef.current = true;\n dragNodeRef.current = node;\n })\n .on('drag', (event: any) => {\n if (!dragActiveRef.current || !dragNodeRef.current || !svgRef.current)\n return;\n const rect = svgRef.current.getBoundingClientRect();\n dragNodeRef.current.fx =\n (event.sourceEvent.clientX - rect.left - transform.x) / transform.k;\n dragNodeRef.current.fy =\n (event.sourceEvent.clientY - rect.top - transform.y) / transform.k;\n })\n .on('end', () => {\n setForcesEnabled(true);\n restart();\n });\n\n g.selectAll('g.node').call(dragBehavior);\n return () => {\n g.selectAll('g.node').on('.drag', null);\n };\n }, [gRef, enableDrag, nodes, transform, restart, setForcesEnabled]);\n\n return (\n <GraphCanvas\n svgRef={svgRef}\n gRef={gRef}\n width={width}\n height={height}\n className={className}\n nodes={nodes}\n links={initialLinks}\n pinnedNodes={pinnedNodes}\n selectedNodeId={selectedNodeId}\n hoveredNodeId={hoveredNodeId}\n defaultNodeColor={defaultNodeColor}\n defaultNodeSize={defaultNodeSize}\n defaultLinkColor={defaultLinkColor}\n defaultLinkWidth={defaultLinkWidth}\n showNodeLabels={showNodeLabels}\n showLinkLabels={showLinkLabels}\n onNodeClick={onNodeClick}\n onNodeHover={onNodeHover}\n onLinkClick={onLinkClick}\n packageBounds={packageBounds}\n handleNodeDoubleClick={handleNodeDoubleClick}\n handleDragStart={handleDragStart}\n restart={restart}\n setPinnedNodes={setPinnedNodes}\n />\n );\n }\n);\n\nForceDirectedGraph.displayName = 'ForceDirectedGraph';\n"]}