@ship-it-ui/shipit 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/cn.ts","../src/ai/AskBar.tsx","../src/ai/Citation.tsx","../src/ai/ConfidenceIndicator.tsx","../src/ai/CopilotMessage.tsx","../src/ai/ReasoningBlock.tsx","../src/ai/SuggestionChip.tsx","../src/ai/ToolCallCard.tsx","../src/entity/types.ts","../src/entity/EntityBadge.tsx","../src/entity/EntityCard.tsx","../src/entity/EntityListRow.tsx","../src/graph/GraphEdge.tsx","../src/graph/GraphInspector.tsx","../src/graph/GraphLegend.tsx","../src/graph/GraphMinimap.tsx","../src/graph/GraphNode.tsx","../src/graph/PathOverlay.tsx","../src/marketing/CTAStrip.tsx","../src/marketing/FeatureGrid.tsx","../src/marketing/Footer.tsx","../src/marketing/Hero.tsx","../src/marketing/PricingCard.tsx","../src/marketing/Testimonial.tsx"],"names":["twMerge","clsx","forwardRef","AskBar","useControllableState","useRef","jsxs","jsx","Button","Citation","Fragment","ConfidenceIndicator","CopilotMessage","Avatar","ReasoningBlock","Children","ReasoningStep","SuggestionChip","ToolCallCard","Badge","EntityBadge","EntityCard","EntityListRow","GraphEdge","GraphInspector","GraphLegend","GraphMinimap","typeColorVar","GraphNode","PathOverlay","CTAStrip","FeatureGrid","Footer","Hero","PricingCard","Testimonial"],"mappings":"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","file":"index.cjs","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { Button, useControllableState } from '@ship-it-ui/ui';\nimport {\n forwardRef,\n useRef,\n type FormEvent,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\n\nimport { cn } from '../utils/cn';\n\n/**\n * AskBar — the primary \"ask anything\" input. The leading ✦ glyph + accent\n * caret give it the same identity as the Copilot bubbles. Submit with the\n * button or `⌘↵` / `Ctrl↵`.\n *\n * Children are rendered as scope chips below the textarea (use the existing\n * `<Chip>` from @ship-it-ui/ui to mark a scoped query). Children render slot is\n * the \"scopes\" row — leave empty for an unscoped bar.\n */\n\nexport interface AskBarProps extends Omit<\n HTMLAttributes<HTMLFormElement>,\n 'onSubmit' | 'onChange'\n> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n /** Fires with the current query when submitted (button or ⌘↵). */\n onSubmit?: (value: string) => void;\n placeholder?: string;\n /** Streaming caret next to the input. */\n streaming?: boolean;\n /** Submit button label. Default `Ask`. */\n submitLabel?: ReactNode;\n /** Disable submit. */\n disabled?: boolean;\n /** Pixel max-width. Default 620. */\n maxWidth?: number | string;\n}\n\nexport const AskBar = forwardRef<HTMLFormElement, AskBarProps>(function AskBar(\n {\n value: valueProp,\n defaultValue,\n onValueChange,\n onSubmit,\n placeholder = 'Ask anything…',\n streaming,\n submitLabel = 'Ask',\n disabled,\n maxWidth = 620,\n className,\n children,\n ...props\n },\n ref,\n) {\n const [value, setValue] = useControllableState<string>({\n value: valueProp,\n defaultValue: defaultValue ?? '',\n onChange: onValueChange,\n });\n const inputRef = useRef<HTMLTextAreaElement>(null);\n\n const submit = () => {\n const v = (value ?? '').trim();\n if (!v) return;\n onSubmit?.(v);\n };\n\n const handleSubmit = (e: FormEvent) => {\n e.preventDefault();\n submit();\n };\n\n const handleKey = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n submit();\n }\n };\n\n return (\n <form\n ref={ref}\n role=\"search\"\n onSubmit={handleSubmit}\n style={{ maxWidth }}\n className={cn(\n 'border-border-strong bg-panel w-full rounded-xl border p-[14px] shadow',\n 'focus-within:border-accent focus-within:ring-accent-dim focus-within:ring-[3px]',\n className,\n )}\n {...props}\n >\n <div className=\"mb-[10px] flex items-start gap-[10px]\">\n <span aria-hidden className=\"text-accent text-[16px]\">\n ✦\n </span>\n <textarea\n ref={inputRef}\n value={value ?? ''}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={handleKey}\n placeholder={placeholder}\n aria-label={placeholder}\n rows={1}\n className={cn(\n 'text-text flex-1 resize-none border-0 bg-transparent text-[14px] leading-[1.5] outline-none',\n 'placeholder:text-text-dim',\n )}\n />\n {streaming && (\n <span\n aria-hidden\n className=\"bg-accent mt-[3px] inline-block h-4 w-px animate-[ship-pulse_1s_infinite]\"\n />\n )}\n </div>\n <div className=\"flex flex-wrap items-center gap-[6px]\">\n {children}\n <div className=\"ml-auto flex items-center gap-2\">\n <span aria-hidden className=\"text-text-dim font-mono text-[11px]\">\n ⌘↵\n </span>\n <Button\n type=\"submit\"\n size=\"sm\"\n variant=\"primary\"\n disabled={disabled || !(value ?? '').trim()}\n >\n {submitLabel}\n </Button>\n </div>\n </div>\n </form>\n );\n});\n\nAskBar.displayName = 'AskBar';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../utils/cn';\n\n/**\n * Citation — superscript-style numbered chip + source label, used in answer\n * bodies to point back to the document/line that supports the claim.\n *\n * Pass `inline` for the inline superscript variant (rendered next to the\n * referenced text). The default block variant lives below the answer with a\n * source preview.\n */\n\nconst SUPERSCRIPTS = ['⁰', '¹', '²', '³', '⁴', '⁵', '⁶', '⁷', '⁸', '⁹'];\n\nfunction toSuperscript(n: number): string {\n return String(n)\n .split('')\n .map((d) => SUPERSCRIPTS[Number(d)] ?? d)\n .join('');\n}\n\nexport interface CitationProps extends HTMLAttributes<HTMLSpanElement> {\n /** Citation number (1-indexed). */\n index: number;\n /** Source label — e.g., `runbook-oncall.md:L42`. */\n source?: ReactNode;\n /** Connector / origin line — e.g., `notion · updated 2d ago`. */\n meta?: ReactNode;\n /** Inline superscript variant (renders the number only, no source row). */\n inline?: boolean;\n}\n\nexport const Citation = forwardRef<HTMLSpanElement, CitationProps>(function Citation(\n { index, source, meta, inline, className, ...props },\n ref,\n) {\n if (inline) {\n return (\n <sup\n ref={ref as never}\n aria-label={\n typeof source === 'string' ? `Citation ${index}: ${source}` : `Citation ${index}`\n }\n className={cn('text-accent ml-[2px] font-mono text-[10px]', className)}\n {...props}\n >\n {toSuperscript(index)}\n </sup>\n );\n }\n return (\n <span ref={ref} className={cn('inline-flex items-center gap-2', className)} {...props}>\n <span\n aria-hidden\n className=\"bg-accent-dim text-accent rounded-xs px-[6px] py-[2px] font-mono text-[10px]\"\n >\n {toSuperscript(index)}\n </span>\n <span className=\"text-text-muted text-[12px]\">\n {source != null && <>from {source}</>}\n {source != null && meta != null && <span className=\"text-text-dim\"> · </span>}\n {meta}\n </span>\n </span>\n );\n});\n\nCitation.displayName = 'Citation';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../utils/cn';\n\n/**\n * ConfidenceIndicator — horizontal bar + percent + tier label. The tier tone\n * is derived automatically from the value (high ≥ 95, medium ≥ 80, low ≥ 50,\n * unverified < 50) but can be overridden via `tier`.\n */\n\nexport type ConfidenceTier = 'high' | 'medium' | 'low' | 'unverified';\n\nconst tierLabel: Record<ConfidenceTier, string> = {\n high: 'High',\n medium: 'Medium',\n low: 'Low · review',\n unverified: 'Unverified',\n};\n\nconst tierBarClass: Record<ConfidenceTier, string> = {\n high: 'bg-ok',\n medium: 'bg-accent',\n low: 'bg-warn',\n unverified: 'bg-err',\n};\n\nconst tierTextClass: Record<ConfidenceTier, string> = {\n high: 'text-ok',\n medium: 'text-accent',\n low: 'text-warn',\n unverified: 'text-err',\n};\n\nfunction deriveTier(value: number): ConfidenceTier {\n if (value >= 95) return 'high';\n if (value >= 80) return 'medium';\n if (value >= 50) return 'low';\n return 'unverified';\n}\n\nexport interface ConfidenceIndicatorProps extends HTMLAttributes<HTMLDivElement> {\n /** Confidence value 0..100. */\n value: number;\n /** Override the auto-derived tier. */\n tier?: ConfidenceTier;\n /** Override the tier label. */\n label?: ReactNode;\n /** Pixel width of the bar. Default 120. */\n width?: number;\n /** Hide the percent number. */\n hideValue?: boolean;\n}\n\nexport const ConfidenceIndicator = forwardRef<HTMLDivElement, ConfidenceIndicatorProps>(\n function ConfidenceIndicator(\n { value, tier: tierProp, label, width = 120, hideValue, className, ...props },\n ref,\n ) {\n const tier = tierProp ?? deriveTier(value);\n const pct = Math.max(0, Math.min(100, value));\n const display = label ?? tierLabel[tier];\n return (\n <div\n ref={ref}\n role=\"meter\"\n aria-label={props['aria-label'] ?? 'Confidence'}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(pct)}\n aria-valuetext={`${Math.round(pct)}% — ${typeof display === 'string' ? display : tierLabel[tier]}`}\n className={cn('inline-flex items-center gap-[10px] text-[11px]', className)}\n {...props}\n >\n <span aria-hidden style={{ width }} className=\"bg-panel-2 h-1 overflow-hidden rounded-full\">\n <span\n className={cn(\n 'block h-full rounded-full transition-[width] duration-(--duration-step)',\n tierBarClass[tier],\n )}\n style={{ width: `${pct}%` }}\n />\n </span>\n {!hideValue && (\n <span className=\"text-text min-w-[44px] font-mono tabular-nums\">{pct.toFixed(1)}%</span>\n )}\n <span className={tierTextClass[tier]}>{display}</span>\n </div>\n );\n },\n);\n\nConfidenceIndicator.displayName = 'ConfidenceIndicator';\n","import { Avatar } from '@ship-it-ui/ui';\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../utils/cn';\n\n/**\n * CopilotMessage — chat bubble for the AI conversation. Two roles:\n * `user` (right-aligned implicit, panel-2 background) and `assistant`\n * (left-aligned, framed panel + border). Pass `streaming` to render a pulsing\n * caret at the end of the body.\n */\n\nexport type CopilotRole = 'user' | 'assistant';\n\nexport interface CopilotMessageProps extends HTMLAttributes<HTMLDivElement> {\n role: CopilotRole;\n /** Avatar initials (or full node) shown on the side. */\n avatar?: ReactNode;\n /** Streaming caret at the end of the body. */\n streaming?: boolean;\n}\n\nexport const CopilotMessage = forwardRef<HTMLDivElement, CopilotMessageProps>(\n function CopilotMessage({ role, avatar, streaming, className, children, ...props }, ref) {\n const isAssistant = role === 'assistant';\n return (\n <div\n ref={ref}\n className={cn('flex items-start gap-[10px]', className)}\n data-role={role}\n {...props}\n >\n {isAssistant ? (\n <span\n aria-hidden\n className=\"bg-accent-dim text-accent grid h-6 w-6 shrink-0 place-items-center rounded-full text-[11px] font-semibold\"\n >\n ✦\n </span>\n ) : typeof avatar === 'string' ? (\n <Avatar size=\"sm\" name={avatar} />\n ) : (\n (avatar ?? null)\n )}\n <div\n className={cn(\n 'rounded-base min-w-0 flex-1 px-[14px] py-3 text-[13px] leading-[1.6]',\n isAssistant ? 'bg-panel border-border border' : 'bg-panel-2',\n )}\n >\n {children}\n {streaming && (\n <span\n aria-hidden\n className=\"bg-accent ml-[2px] inline-block h-[14px] w-px animate-[ship-pulse_1s_infinite] align-middle\"\n />\n )}\n </div>\n </div>\n );\n },\n);\n\nCopilotMessage.displayName = 'CopilotMessage';\n","import { useControllableState } from '@ship-it-ui/ui';\nimport { Children, forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../utils/cn';\n\n/**\n * ReasoningBlock — collapsible \"Reasoning · N steps · 1.8s\" disclosure. Shows\n * the chain-of-thought / step trace expanded or collapsed. Pass `<ReasoningStep>`\n * children for each step.\n */\n\nexport interface ReasoningBlockProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Override the heading label (defaults to `Reasoning · N steps`). */\n label?: ReactNode;\n /** Visible step count when label is auto. Defaults to children length. */\n stepCount?: number;\n /** Visible duration label (e.g., `1.8s`). */\n duration?: ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport const ReasoningBlock = forwardRef<HTMLDivElement, ReasoningBlockProps>(\n function ReasoningBlock(\n {\n label,\n stepCount,\n duration,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n className,\n children,\n ...props\n },\n ref,\n ) {\n const [open, setOpen] = useControllableState<boolean>({\n value: openProp,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n\n const inferredCount = stepCount ?? Children.count(children);\n const heading = label ?? `Reasoning · ${inferredCount} step${inferredCount === 1 ? '' : 's'}`;\n\n return (\n <div\n ref={ref}\n className={cn('border-border bg-panel-2 overflow-hidden rounded-md border', className)}\n {...props}\n >\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => setOpen(!open)}\n className=\"focus-visible:ring-accent-dim flex w-full cursor-pointer items-center gap-[10px] border-0 bg-transparent px-[14px] py-[10px] text-left outline-none focus-visible:ring-[3px]\"\n >\n <span aria-hidden className=\"text-text-dim font-mono text-[11px]\">\n {open ? '▾' : '▸'}\n </span>\n <span className=\"text-[12px] font-medium\">{heading}</span>\n {duration != null && (\n <span className=\"text-text-dim ml-auto font-mono text-[10px]\">{duration}</span>\n )}\n </button>\n {open && (\n <div className=\"border-border text-text-muted border-t px-[14px] py-[10px] pl-9 text-[11px] leading-[1.7]\">\n {children}\n </div>\n )}\n </div>\n );\n },\n);\n\nReasoningBlock.displayName = 'ReasoningBlock';\n\nexport interface ReasoningStepProps extends HTMLAttributes<HTMLDivElement> {\n /** 1-indexed step number. Renders accent-colored before the body. */\n step: number;\n}\n\nexport const ReasoningStep = forwardRef<HTMLDivElement, ReasoningStepProps>(function ReasoningStep(\n { step, className, children, ...props },\n ref,\n) {\n return (\n <div ref={ref} className={cn('mb-[2px] last:mb-0', className)} {...props}>\n <span className=\"text-accent mr-[6px] font-mono\">{step}.</span>\n {children}\n </div>\n );\n});\n\nReasoningStep.displayName = 'ReasoningStep';\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../utils/cn';\n\n/**\n * SuggestionChip — pill-shaped prompt suggestion. The ✦ glyph prefix signals\n * \"ask about this\" and matches the AskBar's identity.\n */\n\nexport interface SuggestionChipProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Override the leading glyph. Defaults to `✦`. */\n glyph?: ReactNode;\n}\n\nexport const SuggestionChip = forwardRef<HTMLButtonElement, SuggestionChipProps>(\n function SuggestionChip({ glyph = '✦', className, children, type, ...props }, ref) {\n return (\n <button\n ref={ref}\n type={type ?? 'button'}\n className={cn(\n 'border-border bg-panel text-text inline-flex cursor-pointer items-center gap-[6px] rounded-full border px-[10px] py-[6px] text-[12px] outline-none',\n 'transition-colors duration-(--duration-micro)',\n 'hover:border-border-strong hover:bg-panel-2',\n 'focus-visible:ring-accent-dim focus-visible:ring-[3px]',\n className,\n )}\n {...props}\n >\n <span aria-hidden className=\"text-accent\">\n {glyph}\n </span>\n {children}\n </button>\n );\n },\n);\n\nSuggestionChip.displayName = 'SuggestionChip';\n","import { Badge } from '@ship-it-ui/ui';\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../utils/cn';\n\n/**\n * ToolCallCard — visual card for a function/tool invocation in the AI\n * conversation. Shows a `TOOL` badge, the tool name, status (running →\n * duration · result), and an optional code/args preview body.\n *\n * Pass `running` to render a streaming caret next to the timing. When the\n * call completes, replace `running` with `duration` and optionally `result`.\n */\n\nexport interface ToolCallCardProps extends HTMLAttributes<HTMLDivElement> {\n /** Tool / function name. Rendered in mono. */\n name: ReactNode;\n /** Status text — e.g., `94ms · 142 rows`. */\n status?: ReactNode;\n /** When true, shows a streaming caret next to the status. */\n running?: boolean;\n /** Optional preformatted body — typically args or a query preview. */\n children?: ReactNode;\n}\n\nexport const ToolCallCard = forwardRef<HTMLDivElement, ToolCallCardProps>(function ToolCallCard(\n { name, status, running, className, children, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn('border-border bg-panel rounded-md border px-[14px] py-[10px]', className)}\n {...props}\n >\n <div className=\"flex items-center gap-[10px]\">\n <Badge size=\"sm\" variant=\"accent\">\n TOOL\n </Badge>\n <span className=\"font-mono text-[12px] font-medium\">{name}</span>\n <span className=\"text-text-dim ml-auto inline-flex items-center font-mono text-[10px]\">\n {running ? (\n <>\n running\n <span\n aria-hidden\n className=\"bg-accent ml-1 inline-block h-3 w-px animate-[ship-pulse_1s_infinite] align-middle\"\n />\n </>\n ) : (\n status\n )}\n </span>\n </div>\n {children && (\n <pre className=\"text-text-muted m-0 mt-[6px] font-mono text-[11px] leading-[1.6] break-words whitespace-pre-wrap\">\n {children}\n </pre>\n )}\n </div>\n );\n});\n\nToolCallCard.displayName = 'ToolCallCard';\n","/**\n * Canonical ShipIt entity vocabulary. The six types are the categories the\n * graph cares about — anything else is rendered as `service` by default.\n */\n\nexport type EntityType = 'service' | 'person' | 'document' | 'deployment' | 'incident' | 'ticket';\n\nexport const ENTITY_GLYPH: Record<EntityType, string> = {\n service: '◇',\n person: '○',\n document: '▤',\n deployment: '↑',\n incident: '◎',\n ticket: '▢',\n};\n\nexport const ENTITY_LABEL: Record<EntityType, string> = {\n service: 'Service',\n person: 'Person',\n document: 'Document',\n deployment: 'Deployment',\n incident: 'Incident',\n ticket: 'Ticket',\n};\n\nexport const ENTITY_TONE_CLASS: Record<EntityType, string> = {\n service: 'text-accent',\n person: 'text-text-muted',\n document: 'text-purple',\n deployment: 'text-ok',\n incident: 'text-err',\n ticket: 'text-warn',\n};\n\nexport const ENTITY_TONE_BG: Record<EntityType, string> = {\n service: 'bg-accent-dim',\n person: 'bg-panel-2',\n document: 'bg-[color-mix(in_oklab,var(--color-purple),transparent_85%)]',\n deployment: 'bg-[color-mix(in_oklab,var(--color-ok),transparent_85%)]',\n incident: 'bg-[color-mix(in_oklab,var(--color-err),transparent_85%)]',\n ticket: 'bg-[color-mix(in_oklab,var(--color-warn),transparent_85%)]',\n};\n","import { Badge, type BadgeProps } from '@ship-it-ui/ui';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { cn } from '../utils/cn';\n\nimport { ENTITY_GLYPH, ENTITY_LABEL, type EntityType } from './types';\n\n/**\n * EntityBadge — small chip identifying an entity type. Resolves the canonical\n * glyph + label from the type, but accepts a `label` override for cases where\n * the consumer wants to show the entity's actual name.\n */\n\nconst typeVariant: Record<EntityType, BadgeProps['variant']> = {\n service: 'accent',\n person: 'neutral',\n document: 'purple',\n deployment: 'ok',\n incident: 'err',\n ticket: 'warn',\n};\n\nexport interface EntityBadgeProps extends Omit<BadgeProps, 'variant'> {\n type: EntityType;\n /** Override the visible label. Defaults to the canonical type label. */\n label?: ReactNode;\n /** Hide the leading glyph. */\n hideGlyph?: boolean;\n}\n\nexport const EntityBadge = forwardRef<HTMLSpanElement, EntityBadgeProps>(function EntityBadge(\n { type, label, hideGlyph, className, children, ...props },\n ref,\n) {\n return (\n <Badge ref={ref} variant={typeVariant[type]} className={cn(className)} {...props}>\n {!hideGlyph && (\n <span aria-hidden className=\"font-mono\">\n {ENTITY_GLYPH[type]}\n </span>\n )}\n {children ?? label ?? ENTITY_LABEL[type]}\n </Badge>\n );\n});\n\nEntityBadge.displayName = 'EntityBadge';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../utils/cn';\n\nimport { EntityBadge } from './EntityBadge';\nimport { ENTITY_GLYPH, ENTITY_TONE_BG, ENTITY_TONE_CLASS, type EntityType } from './types';\n\n/**\n * EntityCard — display card for a graph entity. Plate (icon + tinted bg),\n * title, optional subtitle / description, and an optional stats grid.\n *\n * Stats render in a 2- or 3-column grid below the description; pass `[]` (or\n * omit) to skip them.\n */\n\nexport interface EntityStat {\n label: ReactNode;\n value: ReactNode;\n /** Tone for the value text — defaults to plain `text-text`. */\n tone?: 'accent' | 'ok' | 'warn' | 'err' | 'muted';\n}\n\nexport interface EntityCardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n type: EntityType;\n title: ReactNode;\n /** Subtitle line — typically owner / scope. */\n subtitle?: ReactNode;\n /** Body description. */\n description?: ReactNode;\n /** Stat tiles. Up to 6 fit comfortably across one row. */\n stats?: ReadonlyArray<EntityStat>;\n /** Right-side actions (buttons). */\n actions?: ReactNode;\n /** Override the leading glyph. */\n glyph?: ReactNode;\n}\n\nconst statToneClass = {\n accent: 'text-accent',\n ok: 'text-ok',\n warn: 'text-warn',\n err: 'text-err',\n muted: 'text-text-muted',\n} as const;\n\nexport const EntityCard = forwardRef<HTMLDivElement, EntityCardProps>(function EntityCard(\n { type, title, subtitle, description, stats, actions, glyph, className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-base border-border bg-panel flex flex-col gap-3 border p-5',\n className,\n )}\n {...props}\n >\n <div className=\"flex items-start gap-3\">\n <span\n aria-hidden\n className={cn(\n 'rounded-base grid h-12 w-12 shrink-0 place-items-center text-[20px]',\n ENTITY_TONE_BG[type],\n ENTITY_TONE_CLASS[type],\n )}\n >\n {glyph ?? ENTITY_GLYPH[type]}\n </span>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <EntityBadge type={type} size=\"sm\" />\n {subtitle && <span className=\"text-text-dim font-mono text-[11px]\">{subtitle}</span>}\n </div>\n <div className=\"mt-1 truncate font-mono text-[18px] font-medium tracking-tight\">\n {title}\n </div>\n {description && (\n <div className=\"text-text-muted mt-1 text-[13px] leading-[1.5]\">{description}</div>\n )}\n </div>\n {actions && <div className=\"shrink-0\">{actions}</div>}\n </div>\n {stats && stats.length > 0 && (\n <div\n className=\"divide-border border-border bg-panel-2 grid divide-x rounded-md border\"\n style={{ gridTemplateColumns: `repeat(${Math.min(stats.length, 6)}, 1fr)` }}\n >\n {stats.map((stat, i) => (\n <div key={i} className=\"px-4 py-3\">\n <div className=\"text-text-dim font-mono text-[10px] tracking-[1.3px] uppercase\">\n {stat.label}\n </div>\n <div\n className={cn(\n 'mt-1 text-[16px] font-medium tracking-tight',\n stat.tone ? statToneClass[stat.tone] : 'text-text',\n )}\n >\n {stat.value}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n});\n\nEntityCard.displayName = 'EntityCard';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../utils/cn';\n\nimport { ENTITY_GLYPH, ENTITY_TONE_CLASS, type EntityType } from './types';\n\n/**\n * EntityListRow — compact row for entity lists (e.g., dependents / dependencies\n * panels on a detail page). Glyph dot + name + optional relation pill +\n * optional trailing meta.\n *\n * Renders as a button when `onClick` is supplied; otherwise a plain row.\n */\n\nexport interface EntityListRowProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {\n type: EntityType;\n /** Entity name / id. Rendered in mono. */\n name: ReactNode;\n /** Trailing pill (e.g., relation type: `OWNED_BY`). */\n relation?: ReactNode;\n /** Trailing meta line (e.g., a timestamp). */\n meta?: ReactNode;\n /** When provided, the row becomes a clickable button. */\n onClick?: () => void;\n /** When true, hides the leading glyph dot. */\n hideGlyph?: boolean;\n}\n\nexport const EntityListRow = forwardRef<HTMLElement, EntityListRowProps>(function EntityListRow(\n { type, name, relation, meta, onClick, hideGlyph, className, ...props },\n ref,\n) {\n const interactive = typeof onClick === 'function';\n const baseClass = cn(\n 'flex w-full items-center gap-3 border-0 bg-transparent px-2 py-2 text-left',\n 'border-b border-border last:border-0',\n interactive &&\n 'cursor-pointer outline-none transition-colors duration-(--duration-micro) hover:bg-panel-2 focus-visible:ring-[3px] focus-visible:ring-accent-dim',\n className,\n );\n\n const inner = (\n <>\n {!hideGlyph && (\n <span\n aria-hidden\n className={cn('font-mono text-[14px] leading-none', ENTITY_TONE_CLASS[type])}\n >\n {ENTITY_GLYPH[type]}\n </span>\n )}\n <span className=\"text-text min-w-0 flex-1 truncate font-mono text-[12px]\">{name}</span>\n {relation && (\n <span className=\"border-border bg-panel-2 text-text-muted rounded-full border px-2 py-[2px] font-mono text-[10px]\">\n {relation}\n </span>\n )}\n {meta && <span className=\"text-text-dim font-mono text-[10px]\">{meta}</span>}\n </>\n );\n\n if (interactive) {\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n onClick={onClick}\n className={baseClass}\n {...props}\n >\n {inner}\n </button>\n );\n }\n\n return (\n <div ref={ref as React.Ref<HTMLDivElement>} className={baseClass} {...props}>\n {inner}\n </div>\n );\n});\n\nEntityListRow.displayName = 'EntityListRow';\n","import { forwardRef, type SVGAttributes } from 'react';\n\n/**\n * GraphEdge — SVG `<line>` (or `<path>` if curve points are provided) rendered\n * with one of four canonical styles. Place inside a parent `<svg>`.\n *\n * For curves, pass `curve={{ cx, cy }}` — the edge becomes `M x1,y1 Q cx,cy x2,y2`.\n * Pass `arrowheadId=\"arr-accent\"` and define a matching `<defs><marker id=\"arr-accent\">…</marker></defs>`\n * once in your SVG to enable arrows.\n */\n\nexport type GraphEdgeStyle = 'solid' | 'dashed' | 'highlighted' | 'dim';\n\nexport interface GraphEdgeProps extends Omit<SVGAttributes<SVGElement>, 'd'> {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n /** Optional Q-curve control point. */\n curve?: { cx: number; cy: number };\n edgeStyle?: GraphEdgeStyle;\n /** Stroke color override. Defaults to the style's tone. */\n color?: string;\n /** Marker id for an arrowhead. */\n arrowheadId?: string;\n}\n\nconst styleProps: Record<\n GraphEdgeStyle,\n { stroke: string; strokeWidth: number; strokeDasharray?: string; opacity?: number }\n> = {\n solid: { stroke: 'var(--color-accent)', strokeWidth: 1.5 },\n dashed: { stroke: 'var(--color-accent)', strokeWidth: 1.5, strokeDasharray: '4 3' },\n highlighted: { stroke: 'var(--color-purple)', strokeWidth: 2.5 },\n dim: { stroke: 'var(--color-text-dim)', strokeWidth: 1, opacity: 0.4 },\n};\n\nexport const GraphEdge = forwardRef<SVGElement, GraphEdgeProps>(function GraphEdge(\n { x1, y1, x2, y2, curve, edgeStyle = 'solid', color, arrowheadId, ...props },\n ref,\n) {\n const base = styleProps[edgeStyle];\n const stroke = color ?? base.stroke;\n const sharedProps = {\n fill: 'none' as const,\n stroke,\n strokeWidth: base.strokeWidth,\n strokeDasharray: base.strokeDasharray,\n opacity: base.opacity,\n markerEnd: arrowheadId ? `url(#${arrowheadId})` : undefined,\n ...props,\n };\n if (curve) {\n return (\n <path\n ref={ref as React.Ref<SVGPathElement>}\n d={`M${x1},${y1} Q${curve.cx},${curve.cy} ${x2},${y2}`}\n {...sharedProps}\n />\n );\n }\n return (\n <line ref={ref as React.Ref<SVGLineElement>} x1={x1} y1={y1} x2={x2} y2={y2} {...sharedProps} />\n );\n});\n\nGraphEdge.displayName = 'GraphEdge';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { EntityBadge } from '../entity/EntityBadge';\nimport { type EntityType } from '../entity/types';\nimport { cn } from '../utils/cn';\n\n/**\n * GraphInspector — drill-in panel that appears next to a selected graph node.\n * Header (type badge + id), title + description, properties table, and a\n * relations list.\n *\n * The component is presentation-only: data shape mirrors what an inspector\n * needs to show, without prescribing how the consumer fetches it.\n */\n\nexport interface InspectorProperty {\n key: ReactNode;\n value: ReactNode;\n}\n\nexport interface InspectorRelation {\n /** Direction or label, e.g., `→ depends on`. Rendered in mono. */\n relation: ReactNode;\n /** Related entity name. */\n entity: ReactNode;\n}\n\nexport interface GraphInspectorProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n type: EntityType;\n /** Right-side machine id (e.g., `ent_0x7a2f`). */\n entityId?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n properties?: ReadonlyArray<InspectorProperty>;\n relations?: ReadonlyArray<InspectorRelation>;\n /** Total relation count if `relations` is a partial slice. */\n relationCount?: number;\n}\n\nexport const GraphInspector = forwardRef<HTMLDivElement, GraphInspectorProps>(\n function GraphInspector(\n {\n type,\n entityId,\n title,\n description,\n properties,\n relations,\n relationCount,\n className,\n ...props\n },\n ref,\n ) {\n const total = relationCount ?? relations?.length ?? 0;\n return (\n <aside\n ref={ref}\n aria-label={typeof title === 'string' ? `${title} inspector` : 'Node inspector'}\n className={cn(\n 'rounded-base border-border bg-panel flex w-[340px] flex-col gap-3 border p-4',\n className,\n )}\n {...props}\n >\n <div className=\"flex items-center\">\n <EntityBadge type={type} size=\"sm\" />\n {entityId && (\n <span className=\"text-text-dim ml-auto font-mono text-[10px]\">{entityId}</span>\n )}\n </div>\n <div>\n <div className=\"text-[17px] font-medium\">{title}</div>\n {description && <div className=\"text-text-muted mt-[2px] text-[12px]\">{description}</div>}\n </div>\n {properties && properties.length > 0 && (\n <section>\n <div className=\"text-text-dim mb-2 font-mono text-[9px] tracking-[1.4px] uppercase\">\n Properties\n </div>\n <dl className=\"m-0 flex flex-col gap-1 font-mono text-[11px]\">\n {properties.map((p, i) => (\n <div\n key={i}\n className={cn('border-border flex py-1', i < properties.length - 1 && 'border-b')}\n >\n <dt className=\"text-text-dim w-[70px]\">{p.key}</dt>\n <dd className=\"m-0 flex-1\">{p.value}</dd>\n </div>\n ))}\n </dl>\n </section>\n )}\n {relations && relations.length > 0 && (\n <section>\n <div className=\"text-text-dim mb-2 font-mono text-[9px] tracking-[1.4px] uppercase\">\n Relations · {total}\n </div>\n <ul className=\"m-0 flex list-none flex-col gap-1 p-0 text-[11px]\">\n {relations.map((r, i) => (\n <li key={i} className=\"flex gap-2\">\n <span className=\"text-text-dim w-[100px] font-mono\">{r.relation}</span>\n <span>{r.entity}</span>\n </li>\n ))}\n </ul>\n </section>\n )}\n </aside>\n );\n },\n);\n\nGraphInspector.displayName = 'GraphInspector';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { ENTITY_LABEL, type EntityType } from '../entity/types';\nimport { cn } from '../utils/cn';\n\n/**\n * GraphLegend — translucent floating legend panel for the graph viewport.\n * Use the `entries` prop for the canonical entity-type list, or compose\n * children directly for a custom legend.\n */\n\nconst typeColorVar: Record<EntityType, string> = {\n service: 'var(--color-accent)',\n person: 'var(--color-purple)',\n document: 'var(--color-pink)',\n deployment: 'var(--color-ok)',\n incident: 'var(--color-warn)',\n ticket: 'var(--color-text-muted)',\n};\n\nexport interface GraphLegendEntry {\n /** Entity type (resolves color + label automatically) or a custom shape. */\n type?: EntityType;\n color?: string;\n label: ReactNode;\n}\n\nexport interface GraphLegendProps extends HTMLAttributes<HTMLDivElement> {\n entries?: ReadonlyArray<GraphLegendEntry>;\n /** Heading rendered above the entries. Default `Legend`. */\n heading?: ReactNode;\n}\n\nconst DEFAULT_ENTRIES: GraphLegendEntry[] = [\n { type: 'service', label: ENTITY_LABEL.service },\n { type: 'person', label: ENTITY_LABEL.person },\n { type: 'document', label: ENTITY_LABEL.document },\n];\n\nexport const GraphLegend = forwardRef<HTMLDivElement, GraphLegendProps>(function GraphLegend(\n { entries = DEFAULT_ENTRIES, heading = 'Legend', className, children, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-base border-border bg-panel/85 inline-flex flex-col gap-[6px] border p-[10px] text-[11px] backdrop-blur-[8px]',\n className,\n )}\n {...props}\n >\n {heading && (\n <div className=\"text-text-dim font-mono text-[9px] tracking-[1.4px] uppercase\">\n {heading}\n </div>\n )}\n {children ??\n entries.map((entry, i) => {\n const color = entry.color ?? (entry.type ? typeColorVar[entry.type] : 'currentColor');\n return (\n <div key={i} className=\"flex items-center gap-[6px]\">\n <span aria-hidden className=\"h-2 w-2 rounded-full\" style={{ background: color }} />\n <span>{entry.label}</span>\n </div>\n );\n })}\n </div>\n );\n});\n\nGraphLegend.displayName = 'GraphLegend';\n","import { forwardRef, type HTMLAttributes } from 'react';\n\nimport { cn } from '../utils/cn';\n\n/**\n * GraphMinimap — miniature scatter of node positions with a translucent\n * rectangle marking the current viewport. Coordinates are normalized to\n * [0, 1] × [0, 1]; the minimap renders them inside its fixed pixel box.\n */\n\nexport interface MinimapPoint {\n /** Normalized x, 0..1. */\n x: number;\n /** Normalized y, 0..1. */\n y: number;\n /** Optional dot color. */\n color?: string;\n}\n\nexport interface MinimapViewport {\n /** Top-left x, normalized 0..1. */\n x: number;\n /** Top-left y, normalized 0..1. */\n y: number;\n /** Width as a fraction of the minimap, 0..1. */\n width: number;\n /** Height as a fraction of the minimap, 0..1. */\n height: number;\n}\n\nexport interface GraphMinimapProps extends HTMLAttributes<HTMLDivElement> {\n points: ReadonlyArray<MinimapPoint>;\n viewport?: MinimapViewport;\n /** Pixel width. Default 120. */\n width?: number;\n /** Pixel height. Default 72. */\n height?: number;\n}\n\nexport const GraphMinimap = forwardRef<HTMLDivElement, GraphMinimapProps>(function GraphMinimap(\n { points, viewport, width = 120, height = 72, className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n role=\"img\"\n aria-label=\"Graph minimap\"\n className={cn(\n 'border-border bg-panel/85 relative rounded-md border p-1 backdrop-blur-[8px]',\n className,\n )}\n style={{ width, height }}\n {...props}\n >\n <div className=\"relative h-full w-full\">\n {points.map((p, i) => (\n <span\n key={i}\n aria-hidden\n className=\"absolute h-[2px] w-[2px] rounded-full\"\n style={{\n left: `${p.x * 100}%`,\n top: `${p.y * 100}%`,\n background: p.color ?? 'var(--color-accent)',\n }}\n />\n ))}\n {viewport && (\n <span\n aria-hidden\n className=\"border-accent absolute rounded-[2px] border\"\n style={{\n left: `${viewport.x * 100}%`,\n top: `${viewport.y * 100}%`,\n width: `${viewport.width * 100}%`,\n height: `${viewport.height * 100}%`,\n background: 'oklch(0.8 0.12 200 / 0.12)',\n }}\n />\n )}\n </div>\n </div>\n );\n});\n\nGraphMinimap.displayName = 'GraphMinimap';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { ENTITY_GLYPH, type EntityType } from '../entity/types';\nimport { cn } from '../utils/cn';\n\n/**\n * GraphNode — visual representation of a graph node. Six entity-type variants\n * × five states (default, hover, selected, on-path, dimmed). The component\n * itself is presentation-only; pan / zoom / drag is the host's job.\n */\n\nexport type GraphNodeState = 'default' | 'hover' | 'selected' | 'path' | 'dim';\n\nconst typeColorVar: Record<EntityType, string> = {\n service: 'var(--color-accent)',\n person: 'var(--color-purple)',\n document: 'var(--color-pink)',\n deployment: 'var(--color-ok)',\n incident: 'var(--color-warn)',\n ticket: 'var(--color-text-muted)',\n};\n\nexport interface GraphNodeProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n type: EntityType;\n state?: GraphNodeState;\n /** Override the leading glyph. */\n glyph?: ReactNode;\n /** Caption rendered below the node. */\n label?: ReactNode;\n /** Pixel size of the square. Default 52. */\n size?: number;\n /** Use the node's \"on a path\" purple ring even if state isn't `path`. */\n pathColor?: string;\n}\n\nexport const GraphNode = forwardRef<HTMLDivElement, GraphNodeProps>(function GraphNode(\n { type, state = 'default', glyph, label, size = 52, pathColor, className, style, ...props },\n ref,\n) {\n const color = state === 'path' ? (pathColor ?? 'var(--color-purple)') : typeColorVar[type];\n const glowAlpha = state === 'hover' ? '80' : '40';\n const opacity = state === 'dim' ? 0.35 : 1;\n const showRing = state === 'selected' || state === 'path';\n\n return (\n <div\n ref={ref}\n role=\"img\"\n aria-label={typeof label === 'string' ? label : `${type} node`}\n data-state={state}\n data-entity-type={type}\n className={cn('inline-flex flex-col items-center gap-[6px]', className)}\n style={style}\n {...props}\n >\n <div\n className=\"bg-panel grid place-items-center rounded-[14px] border-[1.5px] transition-all duration-(--duration-micro)\"\n style={{\n width: size,\n height: size,\n borderColor: color,\n color,\n fontSize: Math.round(size * 0.42),\n boxShadow: `0 0 ${state === 'hover' ? 30 : 20}px ${color}${glowAlpha}`,\n outline: showRing ? `2px solid ${color}` : undefined,\n outlineOffset: showRing ? 4 : undefined,\n opacity,\n }}\n >\n {glyph ?? ENTITY_GLYPH[type]}\n </div>\n {label && <span className=\"text-text-dim font-mono text-[10px]\">{label}</span>}\n </div>\n );\n});\n\nGraphNode.displayName = 'GraphNode';\n","import { forwardRef, type SVGAttributes } from 'react';\n\n/**\n * PathOverlay — `<polyline>` highlighting a multi-hop path through the graph.\n * Renders inside a parent `<svg>`; takes the path as a list of `{ x, y }`\n * waypoints and draws a thicker, accent-tone line plus an optional shadow\n * stroke for legibility on busy backgrounds.\n */\n\nexport interface PathPoint {\n x: number;\n y: number;\n}\n\nexport interface PathOverlayProps extends Omit<SVGAttributes<SVGGElement>, 'points'> {\n points: ReadonlyArray<PathPoint>;\n /** Stroke color. Defaults to the path-emphasis purple. */\n color?: string;\n /** Stroke width in px. Default 2.5. */\n width?: number;\n /** Halo shadow stroke for legibility. Default true. */\n halo?: boolean;\n}\n\nexport const PathOverlay = forwardRef<SVGGElement, PathOverlayProps>(function PathOverlay(\n { points, color = 'var(--color-purple)', width = 2.5, halo = true, ...props },\n ref,\n) {\n if (points.length < 2) return null;\n const coords = points.map((p) => `${p.x},${p.y}`).join(' ');\n return (\n <g ref={ref} {...props}>\n {halo && (\n <polyline\n points={coords}\n fill=\"none\"\n stroke=\"var(--color-bg)\"\n strokeWidth={width + 4}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n opacity={0.65}\n />\n )}\n <polyline\n points={coords}\n fill=\"none\"\n stroke={color}\n strokeWidth={width}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n );\n});\n\nPathOverlay.displayName = 'PathOverlay';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../utils/cn';\n\n/**\n * CTAStrip — full-width call-to-action band. Title + body + actions, on a\n * gradient panel background. Sits between feature sections and the footer.\n */\n\nexport interface CTAStripProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {\n title: ReactNode;\n description?: ReactNode;\n actions?: ReactNode;\n}\n\nexport const CTAStrip = forwardRef<HTMLElement, CTAStripProps>(function CTAStrip(\n { title, description, actions, className, ...props },\n ref,\n) {\n return (\n <section\n ref={ref}\n className={cn(\n 'rounded-xl px-10 py-12 text-center',\n 'bg-[linear-gradient(135deg,oklch(0.2_0.08_260),oklch(0.16_0.06_300))]',\n className,\n )}\n {...props}\n >\n <h2 className=\"m-0 mb-[10px] text-[28px] font-medium tracking-[-0.4px]\">{title}</h2>\n {description && <p className=\"text-text-muted m-0 mb-5 text-[13px]\">{description}</p>}\n {actions && <div className=\"flex flex-wrap justify-center gap-2\">{actions}</div>}\n </section>\n );\n});\n\nCTAStrip.displayName = 'CTAStrip';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../utils/cn';\n\n/**\n * FeatureGrid — responsive grid of feature tiles. Each tile shows a glyph,\n * title, body description.\n */\n\nexport interface Feature {\n glyph: ReactNode;\n title: ReactNode;\n description: ReactNode;\n}\n\nexport interface FeatureGridProps extends HTMLAttributes<HTMLDivElement> {\n features: ReadonlyArray<Feature>;\n /** Columns at the largest breakpoint. Default 3. */\n columns?: 2 | 3 | 4;\n}\n\nconst colsClass = {\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-2 lg:grid-cols-4',\n} as const;\n\nexport const FeatureGrid = forwardRef<HTMLDivElement, FeatureGridProps>(function FeatureGrid(\n { features, columns = 3, className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn('grid grid-cols-1 gap-3', colsClass[columns], className)}\n {...props}\n >\n {features.map((f, i) => (\n <div key={i} className=\"rounded-base border-border bg-panel border p-5\">\n <div aria-hidden className=\"text-accent mb-3 text-[22px]\">\n {f.glyph}\n </div>\n <div className=\"mb-[6px] text-[14px] font-medium\">{f.title}</div>\n <div className=\"text-text-muted text-[12px] leading-[1.55]\">{f.description}</div>\n </div>\n ))}\n </div>\n );\n});\n\nFeatureGrid.displayName = 'FeatureGrid';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../utils/cn';\n\n/**\n * Footer — site footer with brand on the left and grouped link columns on\n * the right, plus a copyright line below a divider.\n */\n\nexport interface FooterLink {\n label: ReactNode;\n href: string;\n}\n\nexport interface FooterColumn {\n heading: ReactNode;\n links: ReadonlyArray<FooterLink>;\n}\n\nexport interface FooterProps extends HTMLAttributes<HTMLElement> {\n /** Brand label (logo + word mark). */\n brand?: ReactNode;\n columns: ReadonlyArray<FooterColumn>;\n /** Copyright / legal line. */\n copyright?: ReactNode;\n /** Right-side closing line (e.g., `made with care · san francisco`). */\n closing?: ReactNode;\n}\n\nexport const Footer = forwardRef<HTMLElement, FooterProps>(function Footer(\n { brand, columns, copyright, closing, className, ...props },\n ref,\n) {\n return (\n <footer ref={ref} className={cn('px-7 py-7', className)} {...props}>\n <div className=\"mb-7 flex flex-wrap gap-8\">\n {brand && <div>{brand}</div>}\n <div className=\"text-text-muted ml-auto flex flex-wrap gap-6 text-[12px]\">\n {columns.map((col, i) => (\n <div key={i} className=\"flex flex-col gap-[6px]\">\n <div className=\"text-text-dim font-mono text-[10px] tracking-[1.2px] uppercase\">\n {col.heading}\n </div>\n {col.links.map((link, j) => (\n <a\n key={j}\n href={link.href}\n className=\"text-text-muted hover:text-text no-underline\"\n >\n {link.label}\n </a>\n ))}\n </div>\n ))}\n </div>\n </div>\n <div className=\"border-border text-text-dim flex border-t pt-4 font-mono text-[11px]\">\n {copyright && <span>{copyright}</span>}\n {closing && <span className=\"ml-auto\">{closing}</span>}\n </div>\n </footer>\n );\n});\n\nFooter.displayName = 'Footer';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../utils/cn';\n\n/**\n * Hero — landing-page top section. Optional eyebrow / pill above the headline,\n * a large heading (children of `<h1>`), a body description, and an action row.\n *\n * Designed for marketing surfaces only — do not bring this into the app.\n */\n\nexport interface HeroProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {\n /** Eyebrow / pill rendered above the headline. */\n eyebrow?: ReactNode;\n /** Headline. Pass JSX to highlight a phrase (e.g., `<span className=\"text-accent\">…</span>`). */\n title: ReactNode;\n /** Subheading. */\n description?: ReactNode;\n /** Action buttons row. */\n actions?: ReactNode;\n /** Trailing visual (right-side image, animation). When provided, the hero\n * switches to a two-column layout. */\n visual?: ReactNode;\n}\n\nexport const Hero = forwardRef<HTMLElement, HeroProps>(function Hero(\n { eyebrow, title, description, actions, visual, className, ...props },\n ref,\n) {\n const hasVisual = visual != null;\n return (\n <section\n ref={ref}\n className={cn(\n 'flex flex-col items-center justify-between gap-10 px-6 py-16 md:py-24',\n hasVisual && 'md:flex-row md:items-center md:gap-16',\n className,\n )}\n {...props}\n >\n <div className={cn('max-w-[680px]', !hasVisual && 'mx-auto text-center')}>\n {eyebrow}\n <h1\n className={cn(\n 'mb-4 text-[44px] leading-[1.05] font-medium tracking-[-1.6px] md:text-[56px]',\n eyebrow && 'mt-5',\n )}\n >\n {title}\n </h1>\n {description && (\n <p className=\"text-text-muted mb-7 text-[17px] leading-[1.6]\">{description}</p>\n )}\n {actions && (\n <div className={cn('flex flex-wrap gap-2', !hasVisual && 'justify-center')}>\n {actions}\n </div>\n )}\n </div>\n {visual && <div className=\"flex-1\">{visual}</div>}\n </section>\n );\n});\n\nHero.displayName = 'Hero';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../utils/cn';\n\n/**\n * PricingCard — single tier in a pricing table. Shows tier name, price,\n * description, list of features (with ✓ markers), and an action button slot.\n *\n * Pass `featured` to highlight the card with an accent border + tinted\n * background for the \"recommended\" tier.\n */\n\nexport interface PricingCardProps extends HTMLAttributes<HTMLDivElement> {\n /** Tier name — e.g., `Pro`, `Team`. */\n tier: ReactNode;\n /** Price. Pass JSX (`<span>$29</span><span> / mo</span>`) for layout. */\n price: ReactNode;\n /** Short description below the tier name. */\n description?: ReactNode;\n /** Feature bullet list. */\n features: ReadonlyArray<ReactNode>;\n /** Action button (typically a `<Button>`). */\n action?: ReactNode;\n /** Highlight as the recommended tier. */\n featured?: boolean;\n}\n\nexport const PricingCard = forwardRef<HTMLDivElement, PricingCardProps>(function PricingCard(\n { tier, price, description, features, action, featured, className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\n 'bg-panel flex flex-col gap-5 rounded-lg border p-6',\n featured ? 'border-accent shadow-lg' : 'border-border',\n className,\n )}\n {...props}\n >\n <div>\n <div className=\"mb-1 flex items-center gap-2\">\n <span className=\"text-[14px] font-medium\">{tier}</span>\n {featured && (\n <span className=\"bg-accent-dim text-accent rounded-full px-[6px] py-[1px] font-mono text-[10px]\">\n recommended\n </span>\n )}\n </div>\n {description && <div className=\"text-text-muted text-[12px]\">{description}</div>}\n </div>\n <div className=\"font-mono text-[28px] font-medium tracking-[-0.5px]\">{price}</div>\n <ul className=\"m-0 flex list-none flex-col gap-2 p-0\">\n {features.map((f, i) => (\n <li key={i} className=\"flex items-start gap-2 text-[13px]\">\n <span aria-hidden className=\"text-accent\">\n ✓\n </span>\n <span>{f}</span>\n </li>\n ))}\n </ul>\n {action && <div className=\"mt-auto\">{action}</div>}\n </div>\n );\n});\n\nPricingCard.displayName = 'PricingCard';\n","import { Avatar } from '@ship-it-ui/ui';\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../utils/cn';\n\n/**\n * Testimonial — pull-quote with author + role. Centered for marketing\n * surfaces.\n */\n\nexport interface TestimonialProps extends Omit<HTMLAttributes<HTMLElement>, 'cite' | 'role'> {\n /** The quoted body. */\n quote: ReactNode;\n /** Author display name. */\n author: ReactNode;\n /** Author role / company. */\n role?: ReactNode;\n /** Avatar initials or full node. */\n avatar?: ReactNode;\n}\n\nexport const Testimonial = forwardRef<HTMLElement, TestimonialProps>(function Testimonial(\n { quote, author, role, avatar, className, ...props },\n ref,\n) {\n return (\n <figure\n ref={ref}\n className={cn('mx-auto max-w-[620px] px-6 py-10 text-center', className)}\n {...props}\n >\n <div aria-hidden className=\"text-accent mb-4 text-[40px] leading-none\">\n &ldquo;\n </div>\n <blockquote className=\"m-0 text-[22px] leading-[1.45] font-medium tracking-[-0.3px]\">\n {quote}\n </blockquote>\n <figcaption className=\"mt-5 flex items-center justify-center gap-[10px]\">\n {typeof avatar === 'string' ? <Avatar size=\"md\" name={avatar} /> : avatar}\n <div className=\"text-left\">\n <div className=\"text-[13px] font-medium\">{author}</div>\n {role && <div className=\"text-text-dim text-[11px]\">{role}</div>}\n </div>\n </figcaption>\n </figure>\n );\n});\n\nTestimonial.displayName = 'Testimonial';\n"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/ai/AskBar.tsx","../src/ai/Citation.tsx","../src/ai/ConfidenceIndicator.tsx","../src/ai/CopilotMessage.tsx","../src/ai/ReasoningBlock.tsx","../src/ai/SuggestionChip.tsx","../src/ai/ToolCallCard.tsx","../src/entity/EntityBadge.tsx","../src/entity/types.ts","../src/entity/EntityCard.tsx","../src/entity/EntityListRow.tsx","../src/graph/GraphEdge.tsx","../src/graph/GraphInspector.tsx","../src/graph/GraphLegend.tsx","../src/graph/GraphMinimap.tsx","../src/graph/GraphNode.tsx","../src/graph/PathOverlay.tsx","../src/marketing/CTAStrip.tsx","../src/marketing/FeatureGrid.tsx","../src/marketing/Footer.tsx","../src/marketing/Hero.tsx","../src/marketing/PricingCard.tsx","../src/marketing/Testimonial.tsx"],"sourcesContent":["/**\n * @ship-it-ui/shipit — ShipIt-AI domain composites built on @ship-it-ui/ui.\n *\n * AI surfaces, knowledge-graph chrome, entity displays, and marketing\n * sections. Add new composites here as they're built. Keep exports\n * alphabetical within each category.\n */\n\n// Utilities — re-exported from @ship-it-ui/ui to keep the canonical implementation\n// in one place (clsx + tailwind-merge live there).\nexport { cn } from '@ship-it-ui/ui';\n\n// AI surfaces\nexport * from './ai';\n\n// Entity displays\nexport * from './entity';\n\n// Graph chrome\nexport * from './graph';\n\n// Marketing\nexport * from './marketing';\n","'use client';\n\nimport { Button, useControllableState } from '@ship-it-ui/ui';\nimport {\n forwardRef,\n useRef,\n type FormEvent,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\n\nimport { cn } from '@ship-it-ui/ui';\n\n/**\n * AskBar — the primary \"ask anything\" input. The leading ✦ glyph + accent\n * caret give it the same identity as the Copilot bubbles. Submit with the\n * button or `⌘↵` / `Ctrl↵`.\n *\n * Children are rendered as scope chips below the textarea (use the existing\n * `<Chip>` from @ship-it-ui/ui to mark a scoped query). Children render slot is\n * the \"scopes\" row — leave empty for an unscoped bar.\n */\n\nexport interface AskBarProps extends Omit<\n HTMLAttributes<HTMLFormElement>,\n 'onSubmit' | 'onChange'\n> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n /** Fires with the current query when submitted (button or ⌘↵). */\n onSubmit?: (value: string) => void;\n placeholder?: string;\n /** Streaming caret next to the input. */\n streaming?: boolean;\n /** Submit button label. Default `Ask`. */\n submitLabel?: ReactNode;\n /** Disable submit. */\n disabled?: boolean;\n /** Pixel max-width. Default 620. */\n maxWidth?: number | string;\n}\n\nexport const AskBar = forwardRef<HTMLFormElement, AskBarProps>(function AskBar(\n {\n value: valueProp,\n defaultValue,\n onValueChange,\n onSubmit,\n placeholder = 'Ask anything…',\n streaming,\n submitLabel = 'Ask',\n disabled,\n maxWidth = 620,\n className,\n children,\n ...props\n },\n ref,\n) {\n const [value, setValue] = useControllableState<string>({\n value: valueProp,\n defaultValue: defaultValue ?? '',\n onChange: onValueChange,\n });\n const inputRef = useRef<HTMLTextAreaElement>(null);\n\n const submit = () => {\n const v = (value ?? '').trim();\n if (!v) return;\n onSubmit?.(v);\n };\n\n const handleSubmit = (e: FormEvent) => {\n e.preventDefault();\n submit();\n };\n\n const handleKey = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n submit();\n }\n };\n\n return (\n <form\n ref={ref}\n role=\"search\"\n onSubmit={handleSubmit}\n style={{ maxWidth }}\n className={cn(\n 'border-border-strong bg-panel w-full rounded-xl border p-[14px] shadow',\n 'focus-within:border-accent focus-within:ring-accent-dim focus-within:ring-[3px]',\n className,\n )}\n {...props}\n >\n <div className=\"mb-[10px] flex items-start gap-[10px]\">\n <span aria-hidden className=\"text-accent text-[16px]\">\n ✦\n </span>\n <textarea\n ref={inputRef}\n value={value ?? ''}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={handleKey}\n placeholder={placeholder}\n aria-label={placeholder}\n rows={1}\n className={cn(\n 'text-text flex-1 resize-none border-0 bg-transparent text-[14px] leading-[1.5] outline-none',\n 'placeholder:text-text-dim',\n )}\n />\n {streaming && (\n <span\n aria-hidden\n className=\"bg-accent mt-[3px] inline-block h-4 w-px animate-[ship-pulse_1s_infinite]\"\n />\n )}\n </div>\n <div className=\"flex flex-wrap items-center gap-[6px]\">\n {children}\n <div className=\"ml-auto flex items-center gap-2\">\n <span aria-hidden className=\"text-text-dim font-mono text-[11px]\">\n ⌘↵\n </span>\n <Button\n type=\"submit\"\n size=\"sm\"\n variant=\"primary\"\n disabled={disabled || !(value ?? '').trim()}\n >\n {submitLabel}\n </Button>\n </div>\n </div>\n </form>\n );\n});\n\nAskBar.displayName = 'AskBar';\n","'use client';\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '@ship-it-ui/ui';\n\n/**\n * Citation — superscript-style numbered chip + source label, used in answer\n * bodies to point back to the document/line that supports the claim.\n *\n * Pass `inline` for the inline superscript variant (rendered next to the\n * referenced text). The default block variant lives below the answer with a\n * source preview.\n */\n\nconst SUPERSCRIPTS = ['⁰', '¹', '²', '³', '⁴', '⁵', '⁶', '⁷', '⁸', '⁹'];\n\nfunction toSuperscript(n: number): string {\n return String(n)\n .split('')\n .map((d) => SUPERSCRIPTS[Number(d)] ?? d)\n .join('');\n}\n\nexport interface CitationProps extends HTMLAttributes<HTMLElement> {\n /** Citation number (1-indexed). */\n index: number;\n /** Source label — e.g., `runbook-oncall.md:L42`. */\n source?: ReactNode;\n /** Connector / origin line — e.g., `notion · updated 2d ago`. */\n meta?: ReactNode;\n /** Inline superscript variant (renders the number only, no source row). */\n inline?: boolean;\n}\n\nexport const Citation = forwardRef<HTMLElement, CitationProps>(function Citation(\n { index, source, meta, inline, className, ...props },\n ref,\n) {\n if (inline) {\n return (\n <sup\n ref={ref}\n aria-label={\n typeof source === 'string' ? `Citation ${index}: ${source}` : `Citation ${index}`\n }\n className={cn('text-accent ml-[2px] font-mono text-[10px]', className)}\n {...props}\n >\n {toSuperscript(index)}\n </sup>\n );\n }\n return (\n <span ref={ref} className={cn('inline-flex items-center gap-2', className)} {...props}>\n <span\n aria-hidden\n className=\"bg-accent-dim text-accent rounded-xs px-[6px] py-[2px] font-mono text-[10px]\"\n >\n {toSuperscript(index)}\n </span>\n <span className=\"text-text-muted text-[12px]\">\n {source != null && <>from {source}</>}\n {source != null && meta != null && <span className=\"text-text-dim\"> · </span>}\n {meta}\n </span>\n </span>\n );\n});\n\nCitation.displayName = 'Citation';\n","'use client';\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '@ship-it-ui/ui';\n\n/**\n * ConfidenceIndicator — horizontal bar + percent + tier label. The tier tone\n * is derived automatically from the value (high ≥ 95, medium ≥ 80, low ≥ 50,\n * unverified < 50) but can be overridden via `tier`.\n */\n\nexport type ConfidenceTier = 'high' | 'medium' | 'low' | 'unverified';\n\nconst tierLabel: Record<ConfidenceTier, string> = {\n high: 'High',\n medium: 'Medium',\n low: 'Low · review',\n unverified: 'Unverified',\n};\n\nconst tierBarClass: Record<ConfidenceTier, string> = {\n high: 'bg-ok',\n medium: 'bg-accent',\n low: 'bg-warn',\n unverified: 'bg-err',\n};\n\nconst tierTextClass: Record<ConfidenceTier, string> = {\n high: 'text-ok',\n medium: 'text-accent',\n low: 'text-warn',\n unverified: 'text-err',\n};\n\nfunction deriveTier(value: number): ConfidenceTier {\n if (value >= 95) return 'high';\n if (value >= 80) return 'medium';\n if (value >= 50) return 'low';\n return 'unverified';\n}\n\nexport interface ConfidenceIndicatorProps extends HTMLAttributes<HTMLDivElement> {\n /** Confidence value 0..100. */\n value: number;\n /** Override the auto-derived tier. */\n tier?: ConfidenceTier;\n /** Override the tier label. */\n label?: ReactNode;\n /** Pixel width of the bar. Default 120. */\n width?: number;\n /** Hide the percent number. */\n hideValue?: boolean;\n}\n\nexport const ConfidenceIndicator = forwardRef<HTMLDivElement, ConfidenceIndicatorProps>(\n function ConfidenceIndicator(\n { value, tier: tierProp, label, width = 120, hideValue, className, ...props },\n ref,\n ) {\n const tier = tierProp ?? deriveTier(value);\n const pct = Math.max(0, Math.min(100, value));\n const display = label ?? tierLabel[tier];\n return (\n <div\n ref={ref}\n role=\"meter\"\n aria-label={props['aria-label'] ?? 'Confidence'}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(pct)}\n aria-valuetext={`${Math.round(pct)}% — ${typeof display === 'string' ? display : tierLabel[tier]}`}\n className={cn('inline-flex items-center gap-[10px] text-[11px]', className)}\n {...props}\n >\n <span aria-hidden style={{ width }} className=\"bg-panel-2 h-1 overflow-hidden rounded-full\">\n <span\n className={cn(\n 'block h-full rounded-full transition-[width] duration-(--duration-step)',\n tierBarClass[tier],\n )}\n style={{ width: `${pct}%` }}\n />\n </span>\n {!hideValue && (\n <span className=\"text-text min-w-[44px] font-mono tabular-nums\">{pct.toFixed(1)}%</span>\n )}\n <span className={tierTextClass[tier]}>{display}</span>\n </div>\n );\n },\n);\n\nConfidenceIndicator.displayName = 'ConfidenceIndicator';\n","'use client';\n\nimport { Avatar } from '@ship-it-ui/ui';\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '@ship-it-ui/ui';\n\n/**\n * CopilotMessage — chat bubble for the AI conversation. Two roles:\n * `user` (right-aligned implicit, panel-2 background) and `assistant`\n * (left-aligned, framed panel + border). Pass `streaming` to render a pulsing\n * caret at the end of the body.\n */\n\nexport type CopilotRole = 'user' | 'assistant';\n\nexport interface CopilotMessageProps extends HTMLAttributes<HTMLDivElement> {\n role: CopilotRole;\n /** Avatar initials (or full node) shown on the side. */\n avatar?: ReactNode;\n /** Streaming caret at the end of the body. */\n streaming?: boolean;\n}\n\nexport const CopilotMessage = forwardRef<HTMLDivElement, CopilotMessageProps>(\n function CopilotMessage({ role, avatar, streaming, className, children, ...props }, ref) {\n const isAssistant = role === 'assistant';\n return (\n <div\n ref={ref}\n className={cn('flex items-start gap-[10px]', className)}\n data-role={role}\n {...props}\n >\n {isAssistant ? (\n <span\n aria-hidden\n className=\"bg-accent-dim text-accent grid h-6 w-6 shrink-0 place-items-center rounded-full text-[11px] font-semibold\"\n >\n ✦\n </span>\n ) : typeof avatar === 'string' ? (\n <Avatar size=\"sm\" name={avatar} />\n ) : (\n (avatar ?? null)\n )}\n <div\n className={cn(\n 'rounded-base min-w-0 flex-1 px-[14px] py-3 text-[13px] leading-[1.6]',\n isAssistant ? 'bg-panel border-border border' : 'bg-panel-2',\n )}\n >\n {children}\n {streaming && (\n <span\n aria-hidden\n className=\"bg-accent ml-[2px] inline-block h-[14px] w-px animate-[ship-pulse_1s_infinite] align-middle\"\n />\n )}\n </div>\n </div>\n );\n },\n);\n\nCopilotMessage.displayName = 'CopilotMessage';\n","'use client';\n\nimport { useControllableState } from '@ship-it-ui/ui';\nimport { Children, forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '@ship-it-ui/ui';\n\n/**\n * ReasoningBlock — collapsible \"Reasoning · N steps · 1.8s\" disclosure. Shows\n * the chain-of-thought / step trace expanded or collapsed. Pass `<ReasoningStep>`\n * children for each step.\n */\n\nexport interface ReasoningBlockProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Override the heading label (defaults to `Reasoning · N steps`). */\n label?: ReactNode;\n /** Visible step count when label is auto. Defaults to children length. */\n stepCount?: number;\n /** Visible duration label (e.g., `1.8s`). */\n duration?: ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport const ReasoningBlock = forwardRef<HTMLDivElement, ReasoningBlockProps>(\n function ReasoningBlock(\n {\n label,\n stepCount,\n duration,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n className,\n children,\n ...props\n },\n ref,\n ) {\n const [open, setOpen] = useControllableState<boolean>({\n value: openProp,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n\n const inferredCount = stepCount ?? Children.count(children);\n const heading = label ?? `Reasoning · ${inferredCount} step${inferredCount === 1 ? '' : 's'}`;\n\n return (\n <div\n ref={ref}\n className={cn('border-border bg-panel-2 overflow-hidden rounded-md border', className)}\n {...props}\n >\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => setOpen(!open)}\n className=\"focus-visible:ring-accent-dim flex w-full cursor-pointer items-center gap-[10px] border-0 bg-transparent px-[14px] py-[10px] text-left outline-none focus-visible:ring-[3px]\"\n >\n <span aria-hidden className=\"text-text-dim font-mono text-[11px]\">\n {open ? '▾' : '▸'}\n </span>\n <span className=\"text-[12px] font-medium\">{heading}</span>\n {duration != null && (\n <span className=\"text-text-dim ml-auto font-mono text-[10px]\">{duration}</span>\n )}\n </button>\n {open && (\n <div className=\"border-border text-text-muted border-t px-[14px] py-[10px] pl-9 text-[11px] leading-[1.7]\">\n {children}\n </div>\n )}\n </div>\n );\n },\n);\n\nReasoningBlock.displayName = 'ReasoningBlock';\n\nexport interface ReasoningStepProps extends HTMLAttributes<HTMLDivElement> {\n /** 1-indexed step number. Renders accent-colored before the body. */\n step: number;\n}\n\nexport const ReasoningStep = forwardRef<HTMLDivElement, ReasoningStepProps>(function ReasoningStep(\n { step, className, children, ...props },\n ref,\n) {\n return (\n <div ref={ref} className={cn('mb-[2px] last:mb-0', className)} {...props}>\n <span className=\"text-accent mr-[6px] font-mono\">{step}.</span>\n {children}\n </div>\n );\n});\n\nReasoningStep.displayName = 'ReasoningStep';\n","'use client';\n\nimport { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '@ship-it-ui/ui';\n\n/**\n * SuggestionChip — pill-shaped prompt suggestion. The ✦ glyph prefix signals\n * \"ask about this\" and matches the AskBar's identity.\n */\n\nexport interface SuggestionChipProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Override the leading glyph. Defaults to `✦`. */\n glyph?: ReactNode;\n}\n\nexport const SuggestionChip = forwardRef<HTMLButtonElement, SuggestionChipProps>(\n function SuggestionChip({ glyph = '✦', className, children, type, ...props }, ref) {\n return (\n <button\n ref={ref}\n type={type ?? 'button'}\n className={cn(\n 'border-border bg-panel text-text inline-flex cursor-pointer items-center gap-[6px] rounded-full border px-[10px] py-[6px] text-[12px] outline-none',\n 'transition-colors duration-(--duration-micro)',\n 'hover:border-border-strong hover:bg-panel-2',\n 'focus-visible:ring-accent-dim focus-visible:ring-[3px]',\n className,\n )}\n {...props}\n >\n <span aria-hidden className=\"text-accent\">\n {glyph}\n </span>\n {children}\n </button>\n );\n },\n);\n\nSuggestionChip.displayName = 'SuggestionChip';\n","'use client';\n\nimport { Badge } from '@ship-it-ui/ui';\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '@ship-it-ui/ui';\n\n/**\n * ToolCallCard — visual card for a function/tool invocation in the AI\n * conversation. Shows a `TOOL` badge, the tool name, status (running →\n * duration · result), and an optional code/args preview body.\n *\n * Pass `running` to render a streaming caret next to the timing. When the\n * call completes, replace `running` with `duration` and optionally `result`.\n */\n\nexport interface ToolCallCardProps extends HTMLAttributes<HTMLDivElement> {\n /** Tool / function name. Rendered in mono. */\n name: ReactNode;\n /** Status text — e.g., `94ms · 142 rows`. */\n status?: ReactNode;\n /** When true, shows a streaming caret next to the status. */\n running?: boolean;\n /** Optional preformatted body — typically args or a query preview. */\n children?: ReactNode;\n}\n\nexport const ToolCallCard = forwardRef<HTMLDivElement, ToolCallCardProps>(function ToolCallCard(\n { name, status, running, className, children, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn('border-border bg-panel rounded-md border px-[14px] py-[10px]', className)}\n {...props}\n >\n <div className=\"flex items-center gap-[10px]\">\n <Badge size=\"sm\" variant=\"accent\">\n TOOL\n </Badge>\n <span className=\"font-mono text-[12px] font-medium\">{name}</span>\n <span className=\"text-text-dim ml-auto inline-flex items-center font-mono text-[10px]\">\n {running ? (\n <>\n running\n <span\n aria-hidden\n className=\"bg-accent ml-1 inline-block h-3 w-px animate-[ship-pulse_1s_infinite] align-middle\"\n />\n </>\n ) : (\n status\n )}\n </span>\n </div>\n {children && (\n <pre className=\"text-text-muted m-0 mt-[6px] font-mono text-[11px] leading-[1.6] break-words whitespace-pre-wrap\">\n {children}\n </pre>\n )}\n </div>\n );\n});\n\nToolCallCard.displayName = 'ToolCallCard';\n","'use client';\n\nimport { Badge, type BadgeProps } from '@ship-it-ui/ui';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { cn } from '@ship-it-ui/ui';\n\nimport { ENTITY_GLYPH, ENTITY_LABEL, type EntityType } from './types';\n\n/**\n * EntityBadge — small chip identifying an entity type. Resolves the canonical\n * glyph + label from the type, but accepts a `label` override for cases where\n * the consumer wants to show the entity's actual name.\n */\n\nconst typeVariant: Record<EntityType, BadgeProps['variant']> = {\n service: 'accent',\n person: 'neutral',\n document: 'purple',\n deployment: 'ok',\n incident: 'err',\n ticket: 'warn',\n};\n\nexport interface EntityBadgeProps extends Omit<BadgeProps, 'variant'> {\n type: EntityType;\n /** Override the visible label. Defaults to the canonical type label. */\n label?: ReactNode;\n /** Hide the leading glyph. */\n hideGlyph?: boolean;\n}\n\nexport const EntityBadge = forwardRef<HTMLSpanElement, EntityBadgeProps>(function EntityBadge(\n { type, label, hideGlyph, className, children, ...props },\n ref,\n) {\n return (\n <Badge ref={ref} variant={typeVariant[type]} className={cn(className)} {...props}>\n {!hideGlyph && (\n <span aria-hidden className=\"font-mono\">\n {ENTITY_GLYPH[type]}\n </span>\n )}\n {children ?? label ?? ENTITY_LABEL[type]}\n </Badge>\n );\n});\n\nEntityBadge.displayName = 'EntityBadge';\n","/**\n * Canonical ShipIt entity vocabulary. The six types are the categories the\n * graph cares about — anything else is rendered as `service` by default.\n */\n\nexport type EntityType = 'service' | 'person' | 'document' | 'deployment' | 'incident' | 'ticket';\n\nexport const ENTITY_GLYPH: Record<EntityType, string> = {\n service: '◇',\n person: '○',\n document: '▤',\n deployment: '↑',\n incident: '◎',\n ticket: '▢',\n};\n\nexport const ENTITY_LABEL: Record<EntityType, string> = {\n service: 'Service',\n person: 'Person',\n document: 'Document',\n deployment: 'Deployment',\n incident: 'Incident',\n ticket: 'Ticket',\n};\n\nexport const ENTITY_TONE_CLASS: Record<EntityType, string> = {\n service: 'text-accent',\n person: 'text-text-muted',\n document: 'text-purple',\n deployment: 'text-ok',\n incident: 'text-err',\n ticket: 'text-warn',\n};\n\nexport const ENTITY_TONE_BG: Record<EntityType, string> = {\n service: 'bg-accent-dim',\n person: 'bg-panel-2',\n document: 'bg-[color-mix(in_oklab,var(--color-purple),transparent_85%)]',\n deployment: 'bg-[color-mix(in_oklab,var(--color-ok),transparent_85%)]',\n incident: 'bg-[color-mix(in_oklab,var(--color-err),transparent_85%)]',\n ticket: 'bg-[color-mix(in_oklab,var(--color-warn),transparent_85%)]',\n};\n","'use client';\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '@ship-it-ui/ui';\n\nimport { EntityBadge } from './EntityBadge';\nimport { ENTITY_GLYPH, ENTITY_TONE_BG, ENTITY_TONE_CLASS, type EntityType } from './types';\n\n/**\n * EntityCard — display card for a graph entity. Plate (icon + tinted bg),\n * title, optional subtitle / description, and an optional stats grid.\n *\n * Stats render in a 2- or 3-column grid below the description; pass `[]` (or\n * omit) to skip them.\n */\n\nexport interface EntityStat {\n label: ReactNode;\n value: ReactNode;\n /** Tone for the value text — defaults to plain `text-text`. */\n tone?: 'accent' | 'ok' | 'warn' | 'err' | 'muted';\n}\n\nexport interface EntityCardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n type: EntityType;\n title: ReactNode;\n /** Subtitle line — typically owner / scope. */\n subtitle?: ReactNode;\n /** Body description. */\n description?: ReactNode;\n /** Stat tiles. Up to 6 fit comfortably across one row. */\n stats?: ReadonlyArray<EntityStat>;\n /** Right-side actions (buttons). */\n actions?: ReactNode;\n /** Override the leading glyph. */\n glyph?: ReactNode;\n}\n\nconst statToneClass = {\n accent: 'text-accent',\n ok: 'text-ok',\n warn: 'text-warn',\n err: 'text-err',\n muted: 'text-text-muted',\n} as const;\n\nexport const EntityCard = forwardRef<HTMLDivElement, EntityCardProps>(function EntityCard(\n { type, title, subtitle, description, stats, actions, glyph, className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-base border-border bg-panel flex flex-col gap-3 border p-5',\n className,\n )}\n {...props}\n >\n <div className=\"flex items-start gap-3\">\n <span\n aria-hidden\n className={cn(\n 'rounded-base grid h-12 w-12 shrink-0 place-items-center text-[20px]',\n ENTITY_TONE_BG[type],\n ENTITY_TONE_CLASS[type],\n )}\n >\n {glyph ?? ENTITY_GLYPH[type]}\n </span>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <EntityBadge type={type} size=\"sm\" />\n {subtitle && <span className=\"text-text-dim font-mono text-[11px]\">{subtitle}</span>}\n </div>\n <div className=\"mt-1 truncate font-mono text-[18px] font-medium tracking-tight\">\n {title}\n </div>\n {description && (\n <div className=\"text-text-muted mt-1 text-[13px] leading-[1.5]\">{description}</div>\n )}\n </div>\n {actions && <div className=\"shrink-0\">{actions}</div>}\n </div>\n {stats && stats.length > 0 && (\n <div\n className=\"divide-border border-border bg-panel-2 grid divide-x rounded-md border\"\n style={{ gridTemplateColumns: `repeat(${Math.min(stats.length, 6)}, 1fr)` }}\n >\n {stats.map((stat, i) => (\n <div key={i} className=\"px-4 py-3\">\n <div className=\"text-text-dim font-mono text-[10px] tracking-[1.3px] uppercase\">\n {stat.label}\n </div>\n <div\n className={cn(\n 'mt-1 text-[16px] font-medium tracking-tight',\n stat.tone ? statToneClass[stat.tone] : 'text-text',\n )}\n >\n {stat.value}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n});\n\nEntityCard.displayName = 'EntityCard';\n","'use client';\n\nimport {\n forwardRef,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type MouseEventHandler,\n type ReactNode,\n} from 'react';\n\nimport { cn } from '@ship-it-ui/ui';\n\nimport { ENTITY_GLYPH, ENTITY_TONE_CLASS, type EntityType } from './types';\n\n/**\n * EntityListRow — compact row for entity lists (e.g., dependents / dependencies\n * panels on a detail page). Glyph dot + name + optional relation pill +\n * optional trailing meta.\n *\n * Renders as a button when `onClick` is supplied; otherwise a plain row.\n *\n * For strongly-typed refs use the specialized exports `EntityListRowDiv`\n * (non-interactive) and `EntityListRowButton` (interactive). The default\n * `EntityListRow` is a thin wrapper that picks the right underlying element\n * based on whether `onClick` is provided.\n */\n\ninterface EntityListRowCommonProps {\n type: EntityType;\n /** Entity name / id. Rendered in mono. */\n name: ReactNode;\n /** Trailing pill (e.g., relation type: `OWNED_BY`). */\n relation?: ReactNode;\n /** Trailing meta line (e.g., a timestamp). */\n meta?: ReactNode;\n /** When true, hides the leading glyph dot. */\n hideGlyph?: boolean;\n}\n\nconst baseClassNames = (interactive: boolean, className?: string) =>\n cn(\n 'flex w-full items-center gap-3 border-0 bg-transparent px-2 py-2 text-left',\n 'border-b border-border last:border-0',\n interactive &&\n 'cursor-pointer outline-none transition-colors duration-(--duration-micro) hover:bg-panel-2 focus-visible:ring-[3px] focus-visible:ring-accent-dim',\n className,\n );\n\nfunction RowInner({\n type,\n name,\n relation,\n meta,\n hideGlyph,\n}: Pick<EntityListRowCommonProps, 'type' | 'name' | 'relation' | 'meta' | 'hideGlyph'>) {\n return (\n <>\n {!hideGlyph && (\n <span\n aria-hidden\n className={cn('font-mono text-[14px] leading-none', ENTITY_TONE_CLASS[type])}\n >\n {ENTITY_GLYPH[type]}\n </span>\n )}\n <span className=\"text-text min-w-0 flex-1 truncate font-mono text-[12px]\">{name}</span>\n {relation && (\n <span className=\"border-border bg-panel-2 text-text-muted rounded-full border px-2 py-[2px] font-mono text-[10px]\">\n {relation}\n </span>\n )}\n {meta && <span className=\"text-text-dim font-mono text-[10px]\">{meta}</span>}\n </>\n );\n}\n\nexport interface EntityListRowDivProps\n extends EntityListRowCommonProps, Omit<HTMLAttributes<HTMLDivElement>, 'title' | 'name'> {}\n\n/** Non-interactive row. Use this when you have a static list of entities. */\nexport const EntityListRowDiv = forwardRef<HTMLDivElement, EntityListRowDivProps>(\n function EntityListRowDiv({ type, name, relation, meta, hideGlyph, className, ...props }, ref) {\n return (\n <div ref={ref} className={baseClassNames(false, className)} {...props}>\n <RowInner type={type} name={name} relation={relation} meta={meta} hideGlyph={hideGlyph} />\n </div>\n );\n },\n);\n\nEntityListRowDiv.displayName = 'EntityListRowDiv';\n\nexport interface EntityListRowButtonProps\n extends\n EntityListRowCommonProps,\n Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'title' | 'type' | 'name' | 'onClick'> {\n /** Click handler. Required for the button variant. */\n onClick: MouseEventHandler<HTMLButtonElement>;\n}\n\n/** Interactive row rendered as a `<button>`. Use this when the row navigates. */\nexport const EntityListRowButton = forwardRef<HTMLButtonElement, EntityListRowButtonProps>(\n function EntityListRowButton(\n { type, name, relation, meta, hideGlyph, className, onClick, ...props },\n ref,\n ) {\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={onClick}\n className={baseClassNames(true, className)}\n {...props}\n >\n <RowInner type={type} name={name} relation={relation} meta={meta} hideGlyph={hideGlyph} />\n </button>\n );\n },\n);\n\nEntityListRowButton.displayName = 'EntityListRowButton';\n\nexport interface EntityListRowProps extends Omit<\n HTMLAttributes<HTMLElement>,\n 'title' | 'name' | 'onClick'\n> {\n type: EntityType;\n /** Entity name / id. Rendered in mono. */\n name: ReactNode;\n /** Trailing pill (e.g., relation type: `OWNED_BY`). */\n relation?: ReactNode;\n /** Trailing meta line (e.g., a timestamp). */\n meta?: ReactNode;\n /** When provided, the row becomes a clickable button. */\n onClick?: MouseEventHandler<HTMLButtonElement>;\n /** When true, hides the leading glyph dot. */\n hideGlyph?: boolean;\n}\n\n/**\n * Convenience wrapper: chooses `EntityListRowButton` when `onClick` is\n * supplied, otherwise `EntityListRowDiv`. Does not forward refs — when you\n * need a typed ref, reach for the specialized component directly.\n */\nexport function EntityListRow({\n type,\n name,\n relation,\n meta,\n hideGlyph,\n onClick,\n className,\n ...props\n}: EntityListRowProps) {\n if (typeof onClick === 'function') {\n return (\n <EntityListRowButton\n type={type}\n name={name}\n relation={relation}\n meta={meta}\n hideGlyph={hideGlyph}\n onClick={onClick}\n className={className}\n {...(props as Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'title' | 'type' | 'name' | 'onClick'\n >)}\n />\n );\n }\n return (\n <EntityListRowDiv\n type={type}\n name={name}\n relation={relation}\n meta={meta}\n hideGlyph={hideGlyph}\n className={className}\n {...(props as Omit<HTMLAttributes<HTMLDivElement>, 'title' | 'name'>)}\n />\n );\n}\n\nEntityListRow.displayName = 'EntityListRow';\n","'use client';\n\nimport { forwardRef, type SVGAttributes } from 'react';\n\n/**\n * GraphEdge — SVG `<line>` (or `<path>` if curve points are provided) rendered\n * with one of four canonical styles. Place inside a parent `<svg>`.\n *\n * For curves, pass `curve={{ cx, cy }}` — the edge becomes `M x1,y1 Q cx,cy x2,y2`.\n * Pass `arrowheadId=\"arr-accent\"` and define a matching `<defs><marker id=\"arr-accent\">…</marker></defs>`\n * once in your SVG to enable arrows.\n */\n\nexport type GraphEdgeStyle = 'solid' | 'dashed' | 'highlighted' | 'dim';\n\nexport interface GraphEdgeProps extends Omit<SVGAttributes<SVGElement>, 'd'> {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n /** Optional Q-curve control point. */\n curve?: { cx: number; cy: number };\n edgeStyle?: GraphEdgeStyle;\n /** Stroke color override. Defaults to the style's tone. */\n color?: string;\n /** Marker id for an arrowhead. */\n arrowheadId?: string;\n}\n\nconst styleProps: Record<\n GraphEdgeStyle,\n { stroke: string; strokeWidth: number; strokeDasharray?: string; opacity?: number }\n> = {\n solid: { stroke: 'var(--color-accent)', strokeWidth: 1.5 },\n dashed: { stroke: 'var(--color-accent)', strokeWidth: 1.5, strokeDasharray: '4 3' },\n highlighted: { stroke: 'var(--color-purple)', strokeWidth: 2.5 },\n dim: { stroke: 'var(--color-text-dim)', strokeWidth: 1, opacity: 0.4 },\n};\n\nexport const GraphEdge = forwardRef<SVGElement, GraphEdgeProps>(function GraphEdge(\n { x1, y1, x2, y2, curve, edgeStyle = 'solid', color, arrowheadId, ...props },\n ref,\n) {\n const base = styleProps[edgeStyle];\n const stroke = color ?? base.stroke;\n const sharedProps = {\n fill: 'none' as const,\n stroke,\n strokeWidth: base.strokeWidth,\n strokeDasharray: base.strokeDasharray,\n opacity: base.opacity,\n markerEnd: arrowheadId ? `url(#${arrowheadId})` : undefined,\n ...props,\n };\n if (curve) {\n return (\n <path\n ref={ref as React.Ref<SVGPathElement>}\n d={`M${x1},${y1} Q${curve.cx},${curve.cy} ${x2},${y2}`}\n {...sharedProps}\n />\n );\n }\n return (\n <line ref={ref as React.Ref<SVGLineElement>} x1={x1} y1={y1} x2={x2} y2={y2} {...sharedProps} />\n );\n});\n\nGraphEdge.displayName = 'GraphEdge';\n","'use client';\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { EntityBadge } from '../entity/EntityBadge';\nimport { type EntityType } from '../entity/types';\nimport { cn } from '@ship-it-ui/ui';\n\n/**\n * GraphInspector — drill-in panel that appears next to a selected graph node.\n * Header (type badge + id), title + description, properties table, and a\n * relations list.\n *\n * The component is presentation-only: data shape mirrors what an inspector\n * needs to show, without prescribing how the consumer fetches it.\n */\n\nexport interface InspectorProperty {\n key: ReactNode;\n value: ReactNode;\n}\n\nexport interface InspectorRelation {\n /** Direction or label, e.g., `→ depends on`. Rendered in mono. */\n relation: ReactNode;\n /** Related entity name. */\n entity: ReactNode;\n}\n\nexport interface GraphInspectorProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n type: EntityType;\n /** Right-side machine id (e.g., `ent_0x7a2f`). */\n entityId?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n properties?: ReadonlyArray<InspectorProperty>;\n relations?: ReadonlyArray<InspectorRelation>;\n /** Total relation count if `relations` is a partial slice. */\n relationCount?: number;\n}\n\nexport const GraphInspector = forwardRef<HTMLDivElement, GraphInspectorProps>(\n function GraphInspector(\n {\n type,\n entityId,\n title,\n description,\n properties,\n relations,\n relationCount,\n className,\n ...props\n },\n ref,\n ) {\n const total = relationCount ?? relations?.length ?? 0;\n return (\n <aside\n ref={ref}\n aria-label={typeof title === 'string' ? `${title} inspector` : 'Node inspector'}\n className={cn(\n 'rounded-base border-border bg-panel flex w-[340px] flex-col gap-3 border p-4',\n className,\n )}\n {...props}\n >\n <div className=\"flex items-center\">\n <EntityBadge type={type} size=\"sm\" />\n {entityId && (\n <span className=\"text-text-dim ml-auto font-mono text-[10px]\">{entityId}</span>\n )}\n </div>\n <div>\n <div className=\"text-[17px] font-medium\">{title}</div>\n {description && <div className=\"text-text-muted mt-[2px] text-[12px]\">{description}</div>}\n </div>\n {properties && properties.length > 0 && (\n <section>\n <div className=\"text-text-dim mb-2 font-mono text-[9px] tracking-[1.4px] uppercase\">\n Properties\n </div>\n <dl className=\"m-0 flex flex-col gap-1 font-mono text-[11px]\">\n {properties.map((p, i) => (\n <div\n key={i}\n className={cn('border-border flex py-1', i < properties.length - 1 && 'border-b')}\n >\n <dt className=\"text-text-dim w-[70px]\">{p.key}</dt>\n <dd className=\"m-0 flex-1\">{p.value}</dd>\n </div>\n ))}\n </dl>\n </section>\n )}\n {relations && relations.length > 0 && (\n <section>\n <div className=\"text-text-dim mb-2 font-mono text-[9px] tracking-[1.4px] uppercase\">\n Relations · {total}\n </div>\n <ul className=\"m-0 flex list-none flex-col gap-1 p-0 text-[11px]\">\n {relations.map((r, i) => (\n <li key={i} className=\"flex gap-2\">\n <span className=\"text-text-dim w-[100px] font-mono\">{r.relation}</span>\n <span>{r.entity}</span>\n </li>\n ))}\n </ul>\n </section>\n )}\n </aside>\n );\n },\n);\n\nGraphInspector.displayName = 'GraphInspector';\n","'use client';\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { ENTITY_LABEL, type EntityType } from '../entity/types';\nimport { cn } from '@ship-it-ui/ui';\n\n/**\n * GraphLegend — translucent floating legend panel for the graph viewport.\n * Use the `entries` prop for the canonical entity-type list, or compose\n * children directly for a custom legend.\n */\n\nconst typeColorVar: Record<EntityType, string> = {\n service: 'var(--color-accent)',\n person: 'var(--color-purple)',\n document: 'var(--color-pink)',\n deployment: 'var(--color-ok)',\n incident: 'var(--color-warn)',\n ticket: 'var(--color-text-muted)',\n};\n\nexport interface GraphLegendEntry {\n /** Entity type (resolves color + label automatically) or a custom shape. */\n type?: EntityType;\n color?: string;\n label: ReactNode;\n}\n\nexport interface GraphLegendProps extends HTMLAttributes<HTMLDivElement> {\n entries?: ReadonlyArray<GraphLegendEntry>;\n /** Heading rendered above the entries. Default `Legend`. */\n heading?: ReactNode;\n}\n\nconst DEFAULT_ENTRIES: GraphLegendEntry[] = [\n { type: 'service', label: ENTITY_LABEL.service },\n { type: 'person', label: ENTITY_LABEL.person },\n { type: 'document', label: ENTITY_LABEL.document },\n];\n\nexport const GraphLegend = forwardRef<HTMLDivElement, GraphLegendProps>(function GraphLegend(\n { entries = DEFAULT_ENTRIES, heading = 'Legend', className, children, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-base border-border bg-panel/85 inline-flex flex-col gap-[6px] border p-[10px] text-[11px] backdrop-blur-[8px]',\n className,\n )}\n {...props}\n >\n {heading && (\n <div className=\"text-text-dim font-mono text-[9px] tracking-[1.4px] uppercase\">\n {heading}\n </div>\n )}\n {children ??\n entries.map((entry, i) => {\n const color = entry.color ?? (entry.type ? typeColorVar[entry.type] : 'currentColor');\n return (\n <div key={i} className=\"flex items-center gap-[6px]\">\n <span aria-hidden className=\"h-2 w-2 rounded-full\" style={{ background: color }} />\n <span>{entry.label}</span>\n </div>\n );\n })}\n </div>\n );\n});\n\nGraphLegend.displayName = 'GraphLegend';\n","'use client';\n\nimport { forwardRef, type HTMLAttributes } from 'react';\n\nimport { cn } from '@ship-it-ui/ui';\n\n/**\n * GraphMinimap — miniature scatter of node positions with a translucent\n * rectangle marking the current viewport. Coordinates are normalized to\n * [0, 1] × [0, 1]; the minimap renders them inside its fixed pixel box.\n */\n\nexport interface MinimapPoint {\n /** Normalized x, 0..1. */\n x: number;\n /** Normalized y, 0..1. */\n y: number;\n /** Optional dot color. */\n color?: string;\n}\n\nexport interface MinimapViewport {\n /** Top-left x, normalized 0..1. */\n x: number;\n /** Top-left y, normalized 0..1. */\n y: number;\n /** Width as a fraction of the minimap, 0..1. */\n width: number;\n /** Height as a fraction of the minimap, 0..1. */\n height: number;\n}\n\nexport interface GraphMinimapProps extends HTMLAttributes<HTMLDivElement> {\n points: ReadonlyArray<MinimapPoint>;\n viewport?: MinimapViewport;\n /** Pixel width. Default 120. */\n width?: number;\n /** Pixel height. Default 72. */\n height?: number;\n}\n\nexport const GraphMinimap = forwardRef<HTMLDivElement, GraphMinimapProps>(function GraphMinimap(\n { points, viewport, width = 120, height = 72, className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n role=\"img\"\n aria-label=\"Graph minimap\"\n className={cn(\n 'border-border bg-panel/85 relative rounded-md border p-1 backdrop-blur-[8px]',\n className,\n )}\n style={{ width, height }}\n {...props}\n >\n <div className=\"relative h-full w-full\">\n {points.map((p, i) => (\n <span\n key={i}\n aria-hidden\n className=\"absolute h-[2px] w-[2px] rounded-full\"\n style={{\n left: `${p.x * 100}%`,\n top: `${p.y * 100}%`,\n background: p.color ?? 'var(--color-accent)',\n }}\n />\n ))}\n {viewport && (\n <span\n aria-hidden\n data-testid=\"minimap-viewport\"\n className=\"border-accent absolute rounded-[2px] border\"\n style={{\n left: `${viewport.x * 100}%`,\n top: `${viewport.y * 100}%`,\n width: `${viewport.width * 100}%`,\n height: `${viewport.height * 100}%`,\n background: 'var(--color-accent-glow)',\n }}\n />\n )}\n </div>\n </div>\n );\n});\n\nGraphMinimap.displayName = 'GraphMinimap';\n","'use client';\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { ENTITY_GLYPH, type EntityType } from '../entity/types';\nimport { cn } from '@ship-it-ui/ui';\n\n/**\n * GraphNode — visual representation of a graph node. Six entity-type variants\n * × five states (default, hover, selected, on-path, dimmed). The component\n * itself is presentation-only; pan / zoom / drag is the host's job.\n */\n\nexport type GraphNodeState = 'default' | 'hover' | 'selected' | 'path' | 'dim';\n\nconst typeColorVar: Record<EntityType, string> = {\n service: 'var(--color-accent)',\n person: 'var(--color-purple)',\n document: 'var(--color-pink)',\n deployment: 'var(--color-ok)',\n incident: 'var(--color-warn)',\n ticket: 'var(--color-text-muted)',\n};\n\nexport interface GraphNodeProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n type: EntityType;\n state?: GraphNodeState;\n /** Override the leading glyph. */\n glyph?: ReactNode;\n /** Caption rendered below the node. */\n label?: ReactNode;\n /** Pixel size of the square. Default 52. */\n size?: number;\n /** Use the node's \"on a path\" purple ring even if state isn't `path`. */\n pathColor?: string;\n}\n\nexport const GraphNode = forwardRef<HTMLDivElement, GraphNodeProps>(function GraphNode(\n { type, state = 'default', glyph, label, size = 52, pathColor, className, style, ...props },\n ref,\n) {\n const color = state === 'path' ? (pathColor ?? 'var(--color-purple)') : typeColorVar[type];\n // Glow opacity expressed as a percent for color-mix; hover ≈ 50% (was hex 80), default ≈ 25% (was hex 40).\n const glowPct = state === 'hover' ? 50 : 25;\n const opacity = state === 'dim' ? 0.35 : 1;\n const showRing = state === 'selected' || state === 'path';\n\n return (\n <div\n ref={ref}\n role=\"img\"\n aria-label={typeof label === 'string' ? label : `${type} node`}\n data-state={state}\n data-entity-type={type}\n className={cn('inline-flex flex-col items-center gap-[6px]', className)}\n style={style}\n {...props}\n >\n <div\n className=\"bg-panel grid place-items-center rounded-[14px] border-[1.5px] transition-all duration-(--duration-micro)\"\n style={{\n width: size,\n height: size,\n borderColor: color,\n color,\n fontSize: Math.round(size * 0.42),\n boxShadow: `0 0 ${state === 'hover' ? 30 : 20}px color-mix(in oklab, ${color} ${glowPct}%, transparent)`,\n outline: showRing ? `2px solid ${color}` : undefined,\n outlineOffset: showRing ? 4 : undefined,\n opacity,\n }}\n >\n {glyph ?? ENTITY_GLYPH[type]}\n </div>\n {label && <span className=\"text-text-dim font-mono text-[10px]\">{label}</span>}\n </div>\n );\n});\n\nGraphNode.displayName = 'GraphNode';\n","'use client';\n\nimport { forwardRef, type SVGAttributes } from 'react';\n\n/**\n * PathOverlay — `<polyline>` highlighting a multi-hop path through the graph.\n * Renders inside a parent `<svg>`; takes the path as a list of `{ x, y }`\n * waypoints and draws a thicker, accent-tone line plus an optional shadow\n * stroke for legibility on busy backgrounds.\n */\n\nexport interface PathPoint {\n x: number;\n y: number;\n}\n\nexport interface PathOverlayProps extends Omit<SVGAttributes<SVGGElement>, 'points'> {\n points: ReadonlyArray<PathPoint>;\n /** Stroke color. Defaults to the path-emphasis purple. */\n color?: string;\n /** Stroke width in px. Default 2.5. */\n width?: number;\n /** Halo shadow stroke for legibility. Default true. */\n halo?: boolean;\n}\n\nexport const PathOverlay = forwardRef<SVGGElement, PathOverlayProps>(function PathOverlay(\n { points, color = 'var(--color-purple)', width = 2.5, halo = true, ...props },\n ref,\n) {\n if (points.length < 2) return null;\n const coords = points.map((p) => `${p.x},${p.y}`).join(' ');\n return (\n <g ref={ref} {...props}>\n {halo && (\n <polyline\n points={coords}\n fill=\"none\"\n stroke=\"var(--color-bg)\"\n strokeWidth={width + 4}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n opacity={0.65}\n />\n )}\n <polyline\n points={coords}\n fill=\"none\"\n stroke={color}\n strokeWidth={width}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </g>\n );\n});\n\nPathOverlay.displayName = 'PathOverlay';\n","'use client';\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '@ship-it-ui/ui';\n\n/**\n * CTAStrip — full-width call-to-action band. Title + body + actions, on a\n * gradient panel background. Sits between feature sections and the footer.\n */\n\nexport interface CTAStripProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {\n title: ReactNode;\n description?: ReactNode;\n actions?: ReactNode;\n}\n\nexport const CTAStrip = forwardRef<HTMLElement, CTAStripProps>(function CTAStrip(\n { title, description, actions, className, ...props },\n ref,\n) {\n return (\n <section\n ref={ref}\n className={cn(\n 'rounded-xl px-10 py-12 text-center',\n 'bg-[linear-gradient(135deg,var(--color-cta-from),var(--color-cta-to))]',\n className,\n )}\n {...props}\n >\n <h2 className=\"m-0 mb-[10px] text-[28px] font-medium tracking-[-0.4px]\">{title}</h2>\n {description && <p className=\"text-text-muted m-0 mb-5 text-[13px]\">{description}</p>}\n {actions && <div className=\"flex flex-wrap justify-center gap-2\">{actions}</div>}\n </section>\n );\n});\n\nCTAStrip.displayName = 'CTAStrip';\n","'use client';\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '@ship-it-ui/ui';\n\n/**\n * FeatureGrid — responsive grid of feature tiles. Each tile shows a glyph,\n * title, body description.\n */\n\nexport interface Feature {\n glyph: ReactNode;\n title: ReactNode;\n description: ReactNode;\n}\n\nexport interface FeatureGridProps extends HTMLAttributes<HTMLDivElement> {\n features: ReadonlyArray<Feature>;\n /** Columns at the largest breakpoint. Default 3. */\n columns?: 2 | 3 | 4;\n}\n\nconst colsClass = {\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-2 lg:grid-cols-4',\n} as const;\n\nexport const FeatureGrid = forwardRef<HTMLDivElement, FeatureGridProps>(function FeatureGrid(\n { features, columns = 3, className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn('grid grid-cols-1 gap-3', colsClass[columns], className)}\n {...props}\n >\n {features.map((f, i) => (\n <div key={i} className=\"rounded-base border-border bg-panel border p-5\">\n <div aria-hidden className=\"text-accent mb-3 text-[22px]\">\n {f.glyph}\n </div>\n <div className=\"mb-[6px] text-[14px] font-medium\">{f.title}</div>\n <div className=\"text-text-muted text-[12px] leading-[1.55]\">{f.description}</div>\n </div>\n ))}\n </div>\n );\n});\n\nFeatureGrid.displayName = 'FeatureGrid';\n","'use client';\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '@ship-it-ui/ui';\n\n/**\n * Footer — site footer with brand on the left and grouped link columns on\n * the right, plus a copyright line below a divider.\n */\n\nexport interface FooterLink {\n label: ReactNode;\n href: string;\n}\n\nexport interface FooterColumn {\n heading: ReactNode;\n links: ReadonlyArray<FooterLink>;\n}\n\nexport interface FooterProps extends HTMLAttributes<HTMLElement> {\n /** Brand label (logo + word mark). */\n brand?: ReactNode;\n columns: ReadonlyArray<FooterColumn>;\n /** Copyright / legal line. */\n copyright?: ReactNode;\n /** Right-side closing line (e.g., `made with care · san francisco`). */\n closing?: ReactNode;\n}\n\nexport const Footer = forwardRef<HTMLElement, FooterProps>(function Footer(\n { brand, columns, copyright, closing, className, ...props },\n ref,\n) {\n return (\n <footer ref={ref} className={cn('px-7 py-7', className)} {...props}>\n <div className=\"mb-7 flex flex-wrap gap-8\">\n {brand && <div>{brand}</div>}\n <div className=\"text-text-muted ml-auto flex flex-wrap gap-6 text-[12px]\">\n {columns.map((col, i) => (\n <div key={i} className=\"flex flex-col gap-[6px]\">\n <div className=\"text-text-dim font-mono text-[10px] tracking-[1.2px] uppercase\">\n {col.heading}\n </div>\n {col.links.map((link, j) => (\n <a\n key={j}\n href={link.href}\n className=\"text-text-muted hover:text-text no-underline\"\n >\n {link.label}\n </a>\n ))}\n </div>\n ))}\n </div>\n </div>\n <div className=\"border-border text-text-dim flex border-t pt-4 font-mono text-[11px]\">\n {copyright && <span>{copyright}</span>}\n {closing && <span className=\"ml-auto\">{closing}</span>}\n </div>\n </footer>\n );\n});\n\nFooter.displayName = 'Footer';\n","'use client';\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '@ship-it-ui/ui';\n\n/**\n * Hero — landing-page top section. Optional eyebrow / pill above the headline,\n * a large heading (children of `<h1>`), a body description, and an action row.\n *\n * Designed for marketing surfaces only — do not bring this into the app.\n */\n\nexport interface HeroProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {\n /** Eyebrow / pill rendered above the headline. */\n eyebrow?: ReactNode;\n /** Headline. Pass JSX to highlight a phrase (e.g., `<span className=\"text-accent\">…</span>`). */\n title: ReactNode;\n /** Subheading. */\n description?: ReactNode;\n /** Action buttons row. */\n actions?: ReactNode;\n /** Trailing visual (right-side image, animation). When provided, the hero\n * switches to a two-column layout. */\n visual?: ReactNode;\n}\n\nexport const Hero = forwardRef<HTMLElement, HeroProps>(function Hero(\n { eyebrow, title, description, actions, visual, className, ...props },\n ref,\n) {\n const hasVisual = visual != null;\n return (\n <section\n ref={ref}\n className={cn(\n 'flex flex-col items-center justify-between gap-10 px-6 py-16 md:py-24',\n hasVisual && 'md:flex-row md:items-center md:gap-16',\n className,\n )}\n {...props}\n >\n <div className={cn('max-w-[680px]', !hasVisual && 'mx-auto text-center')}>\n {eyebrow}\n <h1\n className={cn(\n 'mb-4 text-[44px] leading-[1.05] font-medium tracking-[-1.6px] md:text-[56px]',\n eyebrow && 'mt-5',\n )}\n >\n {title}\n </h1>\n {description && (\n <p className=\"text-text-muted mb-7 text-[17px] leading-[1.6]\">{description}</p>\n )}\n {actions && (\n <div className={cn('flex flex-wrap gap-2', !hasVisual && 'justify-center')}>\n {actions}\n </div>\n )}\n </div>\n {visual && <div className=\"flex-1\">{visual}</div>}\n </section>\n );\n});\n\nHero.displayName = 'Hero';\n","'use client';\n\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '@ship-it-ui/ui';\n\n/**\n * PricingCard — single tier in a pricing table. Shows tier name, price,\n * description, list of features (with ✓ markers), and an action button slot.\n *\n * Pass `featured` to highlight the card with an accent border + tinted\n * background for the \"recommended\" tier.\n */\n\nexport interface PricingCardProps extends HTMLAttributes<HTMLDivElement> {\n /** Tier name — e.g., `Pro`, `Team`. */\n tier: ReactNode;\n /** Price. Pass JSX (`<span>$29</span><span> / mo</span>`) for layout. */\n price: ReactNode;\n /** Short description below the tier name. */\n description?: ReactNode;\n /** Feature bullet list. */\n features: ReadonlyArray<ReactNode>;\n /** Action button (typically a `<Button>`). */\n action?: ReactNode;\n /** Highlight as the recommended tier. */\n featured?: boolean;\n}\n\nexport const PricingCard = forwardRef<HTMLDivElement, PricingCardProps>(function PricingCard(\n { tier, price, description, features, action, featured, className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\n 'bg-panel flex flex-col gap-5 rounded-lg border p-6',\n featured ? 'border-accent shadow-lg' : 'border-border',\n className,\n )}\n {...props}\n >\n <div>\n <div className=\"mb-1 flex items-center gap-2\">\n <span className=\"text-[14px] font-medium\">{tier}</span>\n {featured && (\n <span className=\"bg-accent-dim text-accent rounded-full px-[6px] py-[1px] font-mono text-[10px]\">\n recommended\n </span>\n )}\n </div>\n {description && <div className=\"text-text-muted text-[12px]\">{description}</div>}\n </div>\n <div className=\"font-mono text-[28px] font-medium tracking-[-0.5px]\">{price}</div>\n <ul className=\"m-0 flex list-none flex-col gap-2 p-0\">\n {features.map((f, i) => (\n <li key={i} className=\"flex items-start gap-2 text-[13px]\">\n <span aria-hidden className=\"text-accent\">\n ✓\n </span>\n <span>{f}</span>\n </li>\n ))}\n </ul>\n {action && <div className=\"mt-auto\">{action}</div>}\n </div>\n );\n});\n\nPricingCard.displayName = 'PricingCard';\n","'use client';\n\nimport { Avatar } from '@ship-it-ui/ui';\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '@ship-it-ui/ui';\n\n/**\n * Testimonial — pull-quote with author + role. Centered for marketing\n * surfaces.\n */\n\nexport interface TestimonialProps extends Omit<HTMLAttributes<HTMLElement>, 'cite' | 'role'> {\n /** The quoted body. */\n quote: ReactNode;\n /** Author display name. */\n author: ReactNode;\n /** Author role / company. */\n role?: ReactNode;\n /** Avatar initials or full node. */\n avatar?: ReactNode;\n}\n\nexport const Testimonial = forwardRef<HTMLElement, TestimonialProps>(function Testimonial(\n { quote, author, role, avatar, className, ...props },\n ref,\n) {\n return (\n <figure\n ref={ref}\n className={cn('mx-auto max-w-[620px] px-6 py-10 text-center', className)}\n {...props}\n >\n <div aria-hidden className=\"text-accent mb-4 text-[40px] leading-none\">\n &ldquo;\n </div>\n <blockquote className=\"m-0 text-[22px] leading-[1.45] font-medium tracking-[-0.3px]\">\n {quote}\n </blockquote>\n <figcaption className=\"mt-5 flex items-center justify-center gap-[10px]\">\n {typeof avatar === 'string' ? <Avatar size=\"md\" name={avatar} /> : avatar}\n <div className=\"text-left\">\n <div className=\"text-[13px] font-medium\">{author}</div>\n {role && <div className=\"text-text-dim text-[11px]\">{role}</div>}\n </div>\n </figcaption>\n </figure>\n );\n});\n\nTestimonial.displayName = 'Testimonial';\n"],"mappings":"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","names":["import_ui","import_ui","AskBar","import_react","import_ui","import_jsx_runtime","Citation","import_react","import_ui","import_jsx_runtime","ConfidenceIndicator","import_ui","import_react","import_jsx_runtime","CopilotMessage","import_ui","import_react","import_jsx_runtime","ReasoningBlock","ReasoningStep","import_react","import_ui","import_jsx_runtime","SuggestionChip","import_ui","import_react","import_jsx_runtime","ToolCallCard","import_ui","import_react","import_jsx_runtime","EntityBadge","import_react","import_ui","import_jsx_runtime","EntityCard","import_react","import_ui","import_jsx_runtime","EntityListRowDiv","EntityListRowButton","import_react","import_jsx_runtime","GraphEdge","import_react","import_ui","import_jsx_runtime","GraphInspector","import_react","import_ui","import_jsx_runtime","GraphLegend","import_react","import_ui","import_jsx_runtime","GraphMinimap","import_react","import_ui","import_jsx_runtime","typeColorVar","GraphNode","import_react","import_jsx_runtime","PathOverlay","import_react","import_ui","import_jsx_runtime","CTAStrip","import_react","import_ui","import_jsx_runtime","FeatureGrid","import_react","import_ui","import_jsx_runtime","Footer","import_react","import_ui","import_jsx_runtime","Hero","import_react","import_ui","import_jsx_runtime","PricingCard","import_ui","import_react","import_jsx_runtime","Testimonial"]}
package/dist/index.d.cts CHANGED
@@ -1,9 +1,8 @@
1
- import { ClassValue } from 'clsx';
2
- import * as react from 'react';
3
- import { HTMLAttributes, ReactNode, ButtonHTMLAttributes, SVGAttributes } from 'react';
4
1
  import { BadgeProps } from '@ship-it-ui/ui';
5
-
6
- declare function cn(...inputs: ClassValue[]): string;
2
+ export { cn } from '@ship-it-ui/ui';
3
+ import * as react from 'react';
4
+ import { HTMLAttributes, ReactNode, ButtonHTMLAttributes, MouseEventHandler, SVGAttributes } from 'react';
5
+ import * as react_jsx_runtime from 'react/jsx-runtime';
7
6
 
8
7
  /**
9
8
  * AskBar — the primary "ask anything" input. The leading ✦ glyph + accent
@@ -32,7 +31,7 @@ interface AskBarProps extends Omit<HTMLAttributes<HTMLFormElement>, 'onSubmit' |
32
31
  }
33
32
  declare const AskBar: react.ForwardRefExoticComponent<AskBarProps & react.RefAttributes<HTMLFormElement>>;
34
33
 
35
- interface CitationProps extends HTMLAttributes<HTMLSpanElement> {
34
+ interface CitationProps extends HTMLAttributes<HTMLElement> {
36
35
  /** Citation number (1-indexed). */
37
36
  index: number;
38
37
  /** Source label — e.g., `runbook-oncall.md:L42`. */
@@ -42,7 +41,7 @@ interface CitationProps extends HTMLAttributes<HTMLSpanElement> {
42
41
  /** Inline superscript variant (renders the number only, no source row). */
43
42
  inline?: boolean;
44
43
  }
45
- declare const Citation: react.ForwardRefExoticComponent<CitationProps & react.RefAttributes<HTMLSpanElement>>;
44
+ declare const Citation: react.ForwardRefExoticComponent<CitationProps & react.RefAttributes<HTMLElement>>;
46
45
 
47
46
  /**
48
47
  * ConfidenceIndicator — horizontal bar + percent + tier label. The tier tone
@@ -187,8 +186,34 @@ declare const EntityCard: react.ForwardRefExoticComponent<EntityCardProps & reac
187
186
  * optional trailing meta.
188
187
  *
189
188
  * Renders as a button when `onClick` is supplied; otherwise a plain row.
189
+ *
190
+ * For strongly-typed refs use the specialized exports `EntityListRowDiv`
191
+ * (non-interactive) and `EntityListRowButton` (interactive). The default
192
+ * `EntityListRow` is a thin wrapper that picks the right underlying element
193
+ * based on whether `onClick` is provided.
190
194
  */
191
- interface EntityListRowProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
195
+ interface EntityListRowCommonProps {
196
+ type: EntityType;
197
+ /** Entity name / id. Rendered in mono. */
198
+ name: ReactNode;
199
+ /** Trailing pill (e.g., relation type: `OWNED_BY`). */
200
+ relation?: ReactNode;
201
+ /** Trailing meta line (e.g., a timestamp). */
202
+ meta?: ReactNode;
203
+ /** When true, hides the leading glyph dot. */
204
+ hideGlyph?: boolean;
205
+ }
206
+ interface EntityListRowDivProps extends EntityListRowCommonProps, Omit<HTMLAttributes<HTMLDivElement>, 'title' | 'name'> {
207
+ }
208
+ /** Non-interactive row. Use this when you have a static list of entities. */
209
+ declare const EntityListRowDiv: react.ForwardRefExoticComponent<EntityListRowDivProps & react.RefAttributes<HTMLDivElement>>;
210
+ interface EntityListRowButtonProps extends EntityListRowCommonProps, Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'title' | 'type' | 'name' | 'onClick'> {
211
+ /** Click handler. Required for the button variant. */
212
+ onClick: MouseEventHandler<HTMLButtonElement>;
213
+ }
214
+ /** Interactive row rendered as a `<button>`. Use this when the row navigates. */
215
+ declare const EntityListRowButton: react.ForwardRefExoticComponent<EntityListRowButtonProps & react.RefAttributes<HTMLButtonElement>>;
216
+ interface EntityListRowProps extends Omit<HTMLAttributes<HTMLElement>, 'title' | 'name' | 'onClick'> {
192
217
  type: EntityType;
193
218
  /** Entity name / id. Rendered in mono. */
194
219
  name: ReactNode;
@@ -197,11 +222,19 @@ interface EntityListRowProps extends Omit<HTMLAttributes<HTMLElement>, 'title'>
197
222
  /** Trailing meta line (e.g., a timestamp). */
198
223
  meta?: ReactNode;
199
224
  /** When provided, the row becomes a clickable button. */
200
- onClick?: () => void;
225
+ onClick?: MouseEventHandler<HTMLButtonElement>;
201
226
  /** When true, hides the leading glyph dot. */
202
227
  hideGlyph?: boolean;
203
228
  }
204
- declare const EntityListRow: react.ForwardRefExoticComponent<EntityListRowProps & react.RefAttributes<HTMLElement>>;
229
+ /**
230
+ * Convenience wrapper: chooses `EntityListRowButton` when `onClick` is
231
+ * supplied, otherwise `EntityListRowDiv`. Does not forward refs — when you
232
+ * need a typed ref, reach for the specialized component directly.
233
+ */
234
+ declare function EntityListRow({ type, name, relation, meta, hideGlyph, onClick, className, ...props }: EntityListRowProps): react_jsx_runtime.JSX.Element;
235
+ declare namespace EntityListRow {
236
+ var displayName: string;
237
+ }
205
238
 
206
239
  /**
207
240
  * GraphEdge — SVG `<line>` (or `<path>` if curve points are provided) rendered
@@ -458,4 +491,4 @@ interface TestimonialProps extends Omit<HTMLAttributes<HTMLElement>, 'cite' | 'r
458
491
  }
459
492
  declare const Testimonial: react.ForwardRefExoticComponent<TestimonialProps & react.RefAttributes<HTMLElement>>;
460
493
 
461
- export { AskBar, type AskBarProps, CTAStrip, type CTAStripProps, Citation, type CitationProps, ConfidenceIndicator, type ConfidenceIndicatorProps, type ConfidenceTier, CopilotMessage, type CopilotMessageProps, type CopilotRole, ENTITY_GLYPH, ENTITY_LABEL, ENTITY_TONE_BG, ENTITY_TONE_CLASS, EntityBadge, type EntityBadgeProps, EntityCard, type EntityCardProps, EntityListRow, type EntityListRowProps, type EntityStat, type EntityType, type Feature, FeatureGrid, type FeatureGridProps, Footer, type FooterColumn, type FooterLink, type FooterProps, GraphEdge, type GraphEdgeProps, type GraphEdgeStyle, GraphInspector, type GraphInspectorProps, GraphLegend, type GraphLegendEntry, type GraphLegendProps, GraphMinimap, type GraphMinimapProps, GraphNode, type GraphNodeProps, type GraphNodeState, Hero, type HeroProps, type InspectorProperty, type InspectorRelation, type MinimapPoint, type MinimapViewport, PathOverlay, type PathOverlayProps, type PathPoint, PricingCard, type PricingCardProps, ReasoningBlock, type ReasoningBlockProps, ReasoningStep, type ReasoningStepProps, SuggestionChip, type SuggestionChipProps, Testimonial, type TestimonialProps, ToolCallCard, type ToolCallCardProps, cn };
494
+ export { AskBar, type AskBarProps, CTAStrip, type CTAStripProps, Citation, type CitationProps, ConfidenceIndicator, type ConfidenceIndicatorProps, type ConfidenceTier, CopilotMessage, type CopilotMessageProps, type CopilotRole, ENTITY_GLYPH, ENTITY_LABEL, ENTITY_TONE_BG, ENTITY_TONE_CLASS, EntityBadge, type EntityBadgeProps, EntityCard, type EntityCardProps, EntityListRow, EntityListRowButton, type EntityListRowButtonProps, EntityListRowDiv, type EntityListRowDivProps, type EntityListRowProps, type EntityStat, type EntityType, type Feature, FeatureGrid, type FeatureGridProps, Footer, type FooterColumn, type FooterLink, type FooterProps, GraphEdge, type GraphEdgeProps, type GraphEdgeStyle, GraphInspector, type GraphInspectorProps, GraphLegend, type GraphLegendEntry, type GraphLegendProps, GraphMinimap, type GraphMinimapProps, GraphNode, type GraphNodeProps, type GraphNodeState, Hero, type HeroProps, type InspectorProperty, type InspectorRelation, type MinimapPoint, type MinimapViewport, PathOverlay, type PathOverlayProps, type PathPoint, PricingCard, type PricingCardProps, ReasoningBlock, type ReasoningBlockProps, ReasoningStep, type ReasoningStepProps, SuggestionChip, type SuggestionChipProps, Testimonial, type TestimonialProps, ToolCallCard, type ToolCallCardProps };