react-dev-panel 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +130 -0
  3. package/dist/adapters/next.cjs +95 -0
  4. package/dist/adapters/next.cjs.map +1 -0
  5. package/dist/adapters/next.d.cts +17 -0
  6. package/dist/adapters/next.d.ts +17 -0
  7. package/dist/adapters/next.js +65 -0
  8. package/dist/adapters/next.js.map +1 -0
  9. package/dist/adapters/server.cjs +72 -0
  10. package/dist/adapters/server.cjs.map +1 -0
  11. package/dist/adapters/server.d.cts +24 -0
  12. package/dist/adapters/server.d.ts +24 -0
  13. package/dist/adapters/server.js +4 -0
  14. package/dist/adapters/server.js.map +1 -0
  15. package/dist/adapters/vite.cjs +301 -0
  16. package/dist/adapters/vite.cjs.map +1 -0
  17. package/dist/adapters/vite.d.cts +35 -0
  18. package/dist/adapters/vite.d.ts +35 -0
  19. package/dist/adapters/vite.js +31 -0
  20. package/dist/adapters/vite.js.map +1 -0
  21. package/dist/chunk-2ZAPVMUL.js +25 -0
  22. package/dist/chunk-2ZAPVMUL.js.map +1 -0
  23. package/dist/chunk-MAYMGQIM.js +64 -0
  24. package/dist/chunk-MAYMGQIM.js.map +1 -0
  25. package/dist/chunk-XZ4DPO52.js +190 -0
  26. package/dist/chunk-XZ4DPO52.js.map +1 -0
  27. package/dist/cli/index.cjs +221 -0
  28. package/dist/cli/index.cjs.map +1 -0
  29. package/dist/cli/index.d.cts +1 -0
  30. package/dist/cli/index.d.ts +1 -0
  31. package/dist/cli/index.js +35 -0
  32. package/dist/cli/index.js.map +1 -0
  33. package/dist/generate-UK65K5BU.js +3 -0
  34. package/dist/generate-UK65K5BU.js.map +1 -0
  35. package/dist/index.cjs +1745 -0
  36. package/dist/index.cjs.map +1 -0
  37. package/dist/index.d.cts +53 -0
  38. package/dist/index.d.ts +53 -0
  39. package/dist/index.js +1711 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/server-open-B4FK0jQF.d.cts +92 -0
  42. package/dist/server-open-B4FK0jQF.d.ts +92 -0
  43. package/package.json +77 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/styles.ts","../src/core/registry.ts","../src/core/icons.tsx","../src/tools/dev-logs/store.ts","../src/tools/dev-logs/index.tsx","../src/tools/page-performance/index.tsx","../src/core/config.tsx","../src/tools/component-graph/Search.tsx","../src/tools/component-graph/NodeDetails.tsx","../src/tools/component-graph/graph-utils.ts","../src/tools/component-graph/Tree.tsx","../src/tools/component-graph/PageList.tsx","../src/tools/component-graph/store.ts","../src/tools/component-graph/Panel.tsx","../src/tools/component-graph/Overlay.tsx","../src/tools/component-graph/index.tsx","../src/core/Launcher.tsx","../src/core/DevPanel.tsx","../src/core/server-open.ts","../src/index.ts"],"names":["jsx","jsxs","useSyncExternalStore","useState","listeners","emit","installed","onLCP","onCLS","onINP","onFCP","onTTFB","EMPTY","createContext","useMemo","useContext","Fragment","useCallback","useEffect","state","useRef","tools"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Self-contained styling for react-dev-panel — zero CSS-in-JS dependency, zero design-system\n * coupling. A single `<style>` tag (prefixed `.rdp-*`, scoped under `.rdp-root`) is injected\n * once; components use class names + inline styles. CSS variables hold the dark \"premium\" theme\n * and can be overridden per-instance via the root element's inline style.\n */\n\nexport const RDP_STYLE_ID = 'react-dev-panel-styles';\n\n/** Above virtually everything (MUI modal is 1300; this clears app stacking contexts). */\nexport const RDP_Z = 2147483000;\n\nconst CSS = `\n.rdp-root, .rdp-root * { box-sizing: border-box; }\n.rdp-root {\n --rdp-bg: #11161d;\n --rdp-bg-elev: #1a212b;\n --rdp-bg-soft: rgba(148,163,184,0.06);\n --rdp-border: rgba(255,255,255,0.09);\n --rdp-text: #e6e9ee;\n --rdp-text-dim: #9aa4b2;\n --rdp-text-faint: #6b7585;\n --rdp-accent: #6950E8;\n --rdp-accent-contrast: #ffffff;\n --rdp-success: #3ddc84;\n --rdp-warning: #e0a82e;\n --rdp-error: #e5575c;\n --rdp-info: #56a6e8;\n --rdp-radius: 10px;\n --rdp-shadow: 0 8px 28px rgba(0,0,0,0.5);\n --rdp-mono: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n --rdp-sans: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n color: var(--rdp-text);\n font-family: var(--rdp-sans);\n font-size: 13px;\n line-height: 1.4;\n}\n\n/* Launcher FAB */\n.rdp-fab {\n position: fixed; width: 52px; height: 52px; border-radius: 50%;\n display: grid; place-items: center; cursor: grab; border: none;\n color: var(--rdp-accent-contrast);\n background: linear-gradient(135deg, var(--rdp-accent), #4a36b8);\n box-shadow: 0 4px 12px rgba(105,80,232,0.35), 0 8px 24px rgba(0,0,0,0.5);\n z-index: ${RDP_Z};\n}\n.rdp-fab:active { cursor: grabbing; }\n.rdp-fab-badge {\n position: absolute; bottom: -3px; right: -3px; min-width: 18px; height: 18px;\n padding: 0 5px; border-radius: 999px; background: var(--rdp-error); color: #fff;\n font-size: 10px; font-weight: 700; display: grid; place-items: center;\n border: 2px solid var(--rdp-bg);\n}\n\n/* Floating surfaces */\n.rdp-surface {\n position: fixed; background: var(--rdp-bg); border: 1px solid var(--rdp-border);\n border-radius: var(--rdp-radius); box-shadow: var(--rdp-shadow); overflow: hidden;\n display: flex; flex-direction: column; z-index: ${RDP_Z};\n}\n.rdp-menu { width: 320px; }\n.rdp-panel { width: min(460px, calc(100vw - 32px)); max-height: min(78vh, 720px); }\n\n.rdp-header {\n display: flex; align-items: center; gap: 10px; padding: 10px 14px;\n border-bottom: 1px solid var(--rdp-border); flex-shrink: 0;\n}\n.rdp-menu-head {\n background: linear-gradient(135deg, rgba(105,80,232,0.18), rgba(105,80,232,0.04));\n}\n.rdp-title { font-weight: 700; font-size: 13px; }\n.rdp-sub { color: var(--rdp-text-dim); font-size: 12px; }\n.rdp-body { flex: 1; overflow-y: auto; padding: 12px; }\n\n/* Menu rows */\n.rdp-row {\n display: flex; align-items: flex-start; gap: 12px; padding: 10px 12px;\n border-radius: 8px; cursor: pointer; width: 100%; text-align: left; border: none;\n background: transparent; color: inherit; font: inherit;\n}\n.rdp-row:hover { background: rgba(255,255,255,0.05); }\n.rdp-tile {\n width: 38px; height: 38px; flex-shrink: 0; border-radius: 9px;\n display: grid; place-items: center;\n}\n\n/* Primitives */\n.rdp-chip {\n display: inline-flex; align-items: center; height: 18px; padding: 0 7px;\n border-radius: 999px; font-size: 11px; font-weight: 700; line-height: 1;\n}\n.rdp-btn {\n display: inline-flex; align-items: center; gap: 6px; padding: 5px 10px;\n border-radius: 8px; border: 1px solid var(--rdp-border); background: transparent;\n color: var(--rdp-text); font: inherit; font-size: 12px; cursor: pointer;\n}\n.rdp-btn:hover { background: rgba(255,255,255,0.05); }\n.rdp-btn-primary {\n background: var(--rdp-accent); color: var(--rdp-accent-contrast); border-color: transparent;\n font-weight: 600; justify-content: center; width: 100%;\n}\n.rdp-btn-primary:hover { filter: brightness(1.08); }\n.rdp-btn-sm { padding: 2px 7px; font-size: 11px; border-radius: 6px; }\n.rdp-iconbtn {\n display: grid; place-items: center; width: 28px; height: 28px; border-radius: 7px;\n border: 1px solid var(--rdp-border); background: transparent; color: var(--rdp-text);\n cursor: pointer;\n}\n.rdp-iconbtn:hover { background: rgba(255,255,255,0.06); }\n.rdp-iconbtn-bare { border: none; width: 22px; height: 22px; color: var(--rdp-text-dim); }\n.rdp-iconbtn-bare:hover { color: var(--rdp-text); background: rgba(255,255,255,0.06); }\n\n.rdp-tabs { display: flex; gap: 4px; background: var(--rdp-bg-soft); padding: 3px; border-radius: 9px; }\n.rdp-tab {\n flex: 1; display: inline-flex; align-items: center; justify-content: center; gap: 5px;\n padding: 6px 4px; border-radius: 7px; border: none; background: transparent;\n color: var(--rdp-text-dim); font: inherit; font-size: 12px; cursor: pointer;\n}\n.rdp-tab[aria-selected=\"true\"] { background: var(--rdp-bg-elev); color: var(--rdp-text); box-shadow: 0 1px 2px rgba(0,0,0,0.3); }\n\n.rdp-input {\n display: flex; align-items: center; gap: 8px; padding: 6px 10px; border-radius: 9px;\n border: 1px solid var(--rdp-border); background: var(--rdp-bg-soft);\n}\n.rdp-input input {\n flex: 1; background: transparent; border: none; outline: none; color: var(--rdp-text);\n font: inherit; font-size: 13px;\n}\n.rdp-mono { font-family: var(--rdp-mono); }\n.rdp-section-label {\n display: block; margin: 8px 0 2px; color: var(--rdp-text-faint); font-weight: 700;\n text-transform: uppercase; letter-spacing: 0.5px; font-size: 10px;\n}\n\n/* Inspector overlay bits */\n.rdp-overlay { position: fixed; inset: 0; pointer-events: none; z-index: ${RDP_Z - 1}; }\n.rdp-hl {\n position: fixed; border: 1px solid var(--rdp-accent); border-radius: 3px;\n background: rgba(105,80,232,0.14); box-shadow: 0 0 0 1px rgba(105,80,232,0.4);\n transition: all 60ms linear; pointer-events: none;\n}\n.rdp-tooltip {\n position: fixed; max-width: 360px; padding: 8px 10px; border-radius: 9px;\n background: rgba(15,18,24,0.86); backdrop-filter: blur(8px);\n border: 1px solid rgba(255,255,255,0.12); box-shadow: var(--rdp-shadow); color: #fff;\n pointer-events: none;\n}\n.rdp-toast {\n position: fixed; bottom: 24px; left: 50%; transform: translateX(-50%);\n padding: 7px 14px; border-radius: 9px; background: rgba(15,18,24,0.92);\n border: 1px solid rgba(255,255,255,0.12); box-shadow: var(--rdp-shadow);\n font-size: 12px; font-weight: 600; z-index: ${RDP_Z};\n}\n\n.rdp-body::-webkit-scrollbar, .rdp-scroll::-webkit-scrollbar { width: 8px; height: 8px; }\n.rdp-body::-webkit-scrollbar-thumb, .rdp-scroll::-webkit-scrollbar-thumb {\n background: rgba(255,255,255,0.14); border-radius: 8px;\n}\n.rdp-kbd {\n padding: 1px 5px; border-radius: 5px; border: 1px solid var(--rdp-border);\n background: rgba(255,255,255,0.04); font-family: var(--rdp-mono); font-size: 11px;\n color: var(--rdp-text-dim);\n}\n`;\n\nlet injected = false;\n\n/** Inject the stylesheet once (idempotent, SSR-safe). */\nexport function injectBaseStyles(): void {\n if (injected || typeof document === 'undefined') return;\n if (document.getElementById(RDP_STYLE_ID)) {\n injected = true;\n return;\n }\n const style = document.createElement('style');\n style.id = RDP_STYLE_ID;\n style.textContent = CSS;\n document.head.appendChild(style);\n injected = true;\n}\n\n/** Map a tool color key to a CSS variable. */\nexport function colorVar(key?: string): string {\n switch (key) {\n case 'info':\n return 'var(--rdp-info)';\n case 'warning':\n return 'var(--rdp-warning)';\n case 'success':\n return 'var(--rdp-success)';\n case 'error':\n return 'var(--rdp-error)';\n default:\n return 'var(--rdp-accent)';\n }\n}\n\n/** Tiny classnames helper. */\nexport function cx(...parts: Array<string | false | null | undefined>): string {\n return parts.filter(Boolean).join(' ');\n}\n","import type { ToolDefinition } from './types';\n\n// Module-level registry. Bundled tools self-register on import; hosts can add their own via\n// `registerTool`. `DevPanel` reads this list (optionally filtered/ordered by config.tools).\nconst tools = new Map<string, ToolDefinition>();\n\nexport function registerTool(def: ToolDefinition): void {\n tools.set(def.id, def);\n}\n\nexport function getRegisteredTools(): ToolDefinition[] {\n return [...tools.values()];\n}\n\n/** Resolve the active tool list, honoring an optional id allow-list/order from config. */\nexport function resolveTools(ids?: string[]): ToolDefinition[] {\n if (!ids || ids.length === 0) return getRegisteredTools();\n return ids.map((id) => tools.get(id)).filter((t): t is ToolDefinition => Boolean(t));\n}\n","import type { ReactNode } from 'react';\n\n/** Minimal inline-SVG icon set (no icon-library dependency). Stroke inherits `currentColor`. */\nfunction Svg({ children, size = 16 }: { children: ReactNode; size?: number }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n {children}\n </svg>\n );\n}\n\nexport const IconWrench = ({ size }: { size?: number }) => (\n <Svg size={size}>\n <path d=\"M14.7 6.3a4 4 0 0 0-5.4 5.3L3 18v3h3l6.4-6.3a4 4 0 0 0 5.3-5.4l-2.5 2.5-2.1-2.1z\" />\n </Svg>\n);\nexport const IconBug = ({ size }: { size?: number }) => (\n <Svg size={size}>\n <rect x=\"8\" y=\"6\" width=\"8\" height=\"14\" rx=\"4\" />\n <path d=\"M9 6a3 3 0 0 1 6 0M3 13h5M16 13h5M4 18l4-2M20 18l-4-2M4 8l4 2M20 8l-4 2\" />\n </Svg>\n);\nexport const IconGauge = ({ size }: { size?: number }) => (\n <Svg size={size}>\n <path d=\"M12 14l3-3\" />\n <path d=\"M3.5 18a9 9 0 1 1 17 0\" />\n </Svg>\n);\nexport const IconGraph = ({ size }: { size?: number }) => (\n <Svg size={size}>\n <rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1.5\" />\n <rect x=\"14\" y=\"14\" width=\"7\" height=\"7\" rx=\"1.5\" />\n <path d=\"M10 6.5h4a3 3 0 0 1 3 3V14\" />\n </Svg>\n);\nexport const IconX = ({ size }: { size?: number }) => (\n <Svg size={size}>\n <path d=\"M6 6l12 12M18 6L6 18\" />\n </Svg>\n);\nexport const IconChevronRight = ({ size }: { size?: number }) => (\n <Svg size={size}>\n <path d=\"M9 6l6 6-6 6\" />\n </Svg>\n);\nexport const IconChevronDown = ({ size }: { size?: number }) => (\n <Svg size={size}>\n <path d=\"M6 9l6 6 6-6\" />\n </Svg>\n);\nexport const IconSearch = ({ size }: { size?: number }) => (\n <Svg size={size}>\n <circle cx=\"11\" cy=\"11\" r=\"7\" />\n <path d=\"M21 21l-4-4\" />\n </Svg>\n);\nexport const IconCopy = ({ size }: { size?: number }) => (\n <Svg size={size}>\n <rect x=\"9\" y=\"9\" width=\"11\" height=\"11\" rx=\"2\" />\n <path d=\"M5 15V5a2 2 0 0 1 2-2h10\" />\n </Svg>\n);\nexport const IconFileCode = ({ size }: { size?: number }) => (\n <Svg size={size}>\n <path d=\"M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z\" />\n <path d=\"M14 3v5h5M10 12l-2 2 2 2M14 12l2 2-2 2\" />\n </Svg>\n);\nexport const IconRefresh = ({ size }: { size?: number }) => (\n <Svg size={size}>\n <path d=\"M21 12a9 9 0 1 1-3-6.7L21 8\" />\n <path d=\"M21 3v5h-5\" />\n </Svg>\n);\nexport const IconPointer = ({ size }: { size?: number }) => (\n <Svg size={size}>\n <path d=\"M5 3l16 7-7 2-2 7z\" />\n </Svg>\n);\nexport const IconLayers = ({ size }: { size?: number }) => (\n <Svg size={size}>\n <path d=\"M12 3l9 5-9 5-9-5 9-5zM3 13l9 5 9-5\" />\n </Svg>\n);\nexport const IconArrowUp = ({ size }: { size?: number }) => (\n <Svg size={size}>\n <path d=\"M12 19V5M6 11l6-6 6 6\" />\n </Svg>\n);\n","/**\n * Console + network capture store for the Developer Logs tool. Patches console methods and\n * fetch/XHR once, keeps a bounded ring buffer, and exposes a `useSyncExternalStore` snapshot.\n * Framework-agnostic — no dependencies beyond the browser.\n */\n\nexport type LogLevel = 'log' | 'info' | 'warn' | 'error' | 'network';\n\nexport interface LogEntry {\n id: number;\n level: LogLevel;\n time: number;\n message: string;\n /** For network entries: HTTP status + method + url. */\n meta?: string;\n}\n\nconst MAX = 500;\nlet buffer: LogEntry[] = [];\nlet nextId = 1;\nconst listeners = new Set<() => void>();\n\nfunction emit() {\n listeners.forEach((l) => l());\n}\n\nfunction push(level: LogLevel, message: string, meta?: string) {\n buffer = [...buffer.slice(-(MAX - 1)), { id: nextId++, level, time: Date.now(), message, meta }];\n emit();\n}\n\nfunction stringify(args: unknown[]): string {\n return args\n .map((a) => {\n if (typeof a === 'string') return a;\n try {\n return JSON.stringify(a);\n } catch {\n return String(a);\n }\n })\n .join(' ')\n .slice(0, 2000);\n}\n\nlet installed = false;\n\n/** Patch console + fetch + XHR once. Safe to call repeatedly; no-op after the first. */\nexport function installCapture(): void {\n if (installed || typeof window === 'undefined') return;\n installed = true;\n\n (['log', 'info', 'warn', 'error'] as const).forEach((level) => {\n const original = console[level].bind(console);\n console[level] = (...args: unknown[]) => {\n push(level, stringify(args));\n original(...args);\n };\n });\n\n if (typeof window.fetch === 'function') {\n const orig = window.fetch.bind(window);\n window.fetch = async (input: RequestInfo | URL, init?: RequestInit) => {\n const method = (init?.method ?? 'GET').toUpperCase();\n const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;\n const start = Date.now();\n try {\n const res = await orig(input, init);\n push(res.ok ? 'network' : 'error', `${method} ${url}`, `${res.status} · ${Date.now() - start}ms`);\n return res;\n } catch (err) {\n push('error', `${method} ${url}`, `failed · ${String(err)}`);\n throw err;\n }\n };\n }\n}\n\nexport function subscribeLogs(listener: () => void): () => void {\n listeners.add(listener);\n return () => listeners.delete(listener);\n}\nexport function getLogs(): LogEntry[] {\n return buffer;\n}\nconst EMPTY: LogEntry[] = [];\nexport function getServerLogs(): LogEntry[] {\n return EMPTY;\n}\nexport function clearLogs(): void {\n buffer = [];\n emit();\n}\nexport function errorCount(): number {\n return buffer.reduce((n, e) => (e.level === 'error' ? n + 1 : n), 0);\n}\n","import { useState, useSyncExternalStore } from 'react';\n\nimport type { ToolDefinition, ToolPanelProps } from '../../core/types';\nimport { cx } from '../../core/styles';\nimport { registerTool } from '../../core/registry';\nimport { IconBug, IconX } from '../../core/icons';\nimport type { LogLevel } from './store';\nimport {\n getLogs,\n clearLogs,\n errorCount,\n getServerLogs,\n subscribeLogs,\n installCapture,\n} from './store';\n\nconst LEVELS: Array<LogLevel | 'all'> = ['all', 'log', 'warn', 'error', 'network'];\n\nconst LEVEL_COLOR: Record<LogLevel, string> = {\n log: 'var(--rdp-text-dim)',\n info: 'var(--rdp-info)',\n warn: 'var(--rdp-warning)',\n error: 'var(--rdp-error)',\n network: 'var(--rdp-info)',\n};\n\nfunction DevLogsPanel({ onClose }: ToolPanelProps) {\n const logs = useSyncExternalStore(subscribeLogs, getLogs, getServerLogs);\n const [filter, setFilter] = useState<LogLevel | 'all'>('all');\n const shown = filter === 'all' ? logs : logs.filter((l) => l.level === filter);\n\n return (\n <div className=\"rdp-surface rdp-panel\" style={{ bottom: 88, right: 20 }}>\n <div className=\"rdp-header\">\n <IconBug size={16} />\n <span className=\"rdp-title\" style={{ flex: 1 }}>\n Developer Logs\n </span>\n <button type=\"button\" className=\"rdp-iconbtn-bare\" onClick={clearLogs} title=\"Clear\" style={{ width: 'auto', padding: '0 8px' }}>\n Clear\n </button>\n <button type=\"button\" className=\"rdp-iconbtn-bare\" onClick={onClose} aria-label=\"Close\">\n <IconX size={16} />\n </button>\n </div>\n\n <div style={{ padding: '8px 12px 0', display: 'flex', gap: 4, flexWrap: 'wrap' }}>\n {LEVELS.map((lvl) => (\n <button\n key={lvl}\n type=\"button\"\n className={cx('rdp-btn', 'rdp-btn-sm')}\n style={filter === lvl ? { borderColor: 'var(--rdp-accent)', color: 'var(--rdp-accent)' } : undefined}\n onClick={() => setFilter(lvl)}\n >\n {lvl}\n </button>\n ))}\n </div>\n\n <div className=\"rdp-body rdp-mono\" style={{ fontSize: 12 }}>\n {shown.length === 0 ? (\n <div style={{ color: 'var(--rdp-text-faint)' }}>No log entries captured yet.</div>\n ) : (\n shown\n .slice()\n .reverse()\n .map((entry) => (\n <div key={entry.id} style={{ padding: '3px 0', borderBottom: '1px solid var(--rdp-border)' }}>\n <span style={{ color: LEVEL_COLOR[entry.level], fontWeight: 700, marginRight: 6 }}>\n {entry.level === 'network' ? 'net' : entry.level}\n </span>\n <span style={{ wordBreak: 'break-word' }}>{entry.message}</span>\n {entry.meta && (\n <span style={{ color: 'var(--rdp-text-faint)', marginLeft: 6 }}>{entry.meta}</span>\n )}\n </div>\n ))\n )}\n </div>\n </div>\n );\n}\n\nfunction useBadge() {\n const logs = useSyncExternalStore(subscribeLogs, getLogs, getServerLogs);\n const errors = logs.filter((l) => l.level === 'error').length;\n if (logs.length === 0) return null;\n return errors > 0\n ? { label: String(errors), tone: 'error' as const }\n : { label: String(logs.length), tone: 'neutral' as const };\n}\n\nexport const devLogsTool: ToolDefinition = {\n id: 'logs',\n title: 'Developer Logs',\n subtitle: 'Client & network activity',\n color: 'info',\n icon: <IconBug size={19} />,\n Panel: DevLogsPanel,\n useBadge,\n init: installCapture,\n};\n\nexport function registerDevLogs() {\n registerTool(devLogsTool);\n}\n\nexport { errorCount };\n","import { useSyncExternalStore } from 'react';\nimport { onLCP, onCLS, onINP, onFCP, onTTFB, type Metric } from 'web-vitals';\n\nimport type { ToolDefinition, ToolPanelProps } from '../../core/types';\nimport { registerTool } from '../../core/registry';\nimport { IconGauge, IconX } from '../../core/icons';\n\ntype Rating = 'good' | 'needs-improvement' | 'poor';\ninterface MetricSnapshot {\n name: string;\n value: number;\n rating: Rating;\n unit: 'ms' | '';\n}\n\nconst HINTS: Record<string, string> = {\n LCP: 'Largest Contentful Paint — optimize hero image/font, reduce server time.',\n CLS: 'Cumulative Layout Shift — set sizes on images/embeds, reserve space.',\n INP: 'Interaction to Next Paint — break up long tasks, defer work.',\n FCP: 'First Contentful Paint — reduce render-blocking CSS/JS.',\n TTFB: 'Time to First Byte — server/edge latency, caching.',\n};\n\nlet metrics: Record<string, MetricSnapshot> = {};\nconst listeners = new Set<() => void>();\nfunction emit() {\n listeners.forEach((l) => l());\n}\n\nfunction record(m: Metric) {\n metrics = {\n ...metrics,\n [m.name]: {\n name: m.name,\n value: m.value,\n rating: m.rating as Rating,\n unit: m.name === 'CLS' ? '' : 'ms',\n },\n };\n emit();\n}\n\nlet installed = false;\nfunction installPerf(): void {\n if (installed || typeof window === 'undefined') return;\n installed = true;\n onLCP(record);\n onCLS(record);\n onINP(record);\n onFCP(record);\n onTTFB(record);\n}\n\nfunction subscribe(l: () => void): () => void {\n listeners.add(l);\n return () => listeners.delete(l);\n}\nfunction snapshot(): Record<string, MetricSnapshot> {\n return metrics;\n}\nconst EMPTY: Record<string, MetricSnapshot> = {};\nfunction serverSnapshot() {\n return EMPTY;\n}\n\nconst RATING_COLOR: Record<Rating, string> = {\n good: 'var(--rdp-success)',\n 'needs-improvement': 'var(--rdp-warning)',\n poor: 'var(--rdp-error)',\n};\n\nfunction PagePerformancePanel({ onClose }: ToolPanelProps) {\n const data = useSyncExternalStore(subscribe, snapshot, serverSnapshot);\n const order = ['LCP', 'INP', 'CLS', 'FCP', 'TTFB'];\n\n return (\n <div className=\"rdp-surface rdp-panel\" style={{ bottom: 88, right: 20 }}>\n <div className=\"rdp-header\">\n <IconGauge size={16} />\n <span className=\"rdp-title\" style={{ flex: 1 }}>\n Page Performance\n </span>\n <button type=\"button\" className=\"rdp-iconbtn-bare\" onClick={onClose} aria-label=\"Close\">\n <IconX size={16} />\n </button>\n </div>\n <div className=\"rdp-body\">\n {order.every((k) => !data[k]) && (\n <div style={{ color: 'var(--rdp-text-faint)' }}>\n Collecting Web Vitals… interact with the page (INP needs an interaction).\n </div>\n )}\n {order.map((key) => {\n const m = data[key];\n if (!m) return null;\n return (\n <div key={key} style={{ padding: '8px 0', borderBottom: '1px solid var(--rdp-border)' }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n <span className=\"rdp-chip\" style={{ background: RATING_COLOR[m.rating], color: '#06210f' }}>\n {m.name}\n </span>\n <span className=\"rdp-mono\" style={{ fontWeight: 700 }}>\n {m.unit === 'ms' ? Math.round(m.value) : m.value.toFixed(3)}\n {m.unit}\n </span>\n <span style={{ color: RATING_COLOR[m.rating], fontSize: 11, marginLeft: 'auto' }}>\n {m.rating}\n </span>\n </div>\n <div className=\"rdp-sub\" style={{ marginTop: 2 }}>\n {HINTS[key]}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport const pagePerformanceTool: ToolDefinition = {\n id: 'perf',\n title: 'Page Performance',\n subtitle: 'Web Vitals & fix suggestions',\n color: 'warning',\n icon: <IconGauge size={19} />,\n Panel: PagePerformancePanel,\n init: installPerf,\n};\n\nexport function registerPagePerformance() {\n registerTool(pagePerformanceTool);\n}\n","import type { ReactNode } from 'react';\nimport { createContext, useContext, useMemo } from 'react';\n\nimport type {\n EditorType,\n OpenInEditor,\n DevPanelConfig,\n SourceLocation,\n ResolvedDevPanelConfig,\n} from './types';\n\nfunction buildProtocolUrl(editor: EditorType, loc: SourceLocation): string | null {\n const line = loc.line ?? 1;\n const col = loc.column ?? 1;\n switch (editor) {\n case 'cursor':\n return `cursor://file/${loc.file}:${line}:${col}`;\n case 'webstorm':\n return `webstorm://open?file=${encodeURIComponent(loc.file)}&line=${line}&column=${col}`;\n case 'zed':\n return `zed://file/${loc.file}:${line}:${col}`;\n case 'vscode':\n case 'auto':\n default:\n return `vscode://file/${loc.file}:${line}:${col}`;\n }\n}\n\n/**\n * Fallback opener used when the host/adapter provides none: tries the editor's protocol URL,\n * then copies the path. Adapters (Next/Vite/server) replace this with a server-backed open that\n * launches the editor running the project regardless of OS protocol registration.\n */\nexport const defaultOpenInEditor: OpenInEditor = async (loc, editor = 'auto') => {\n const url = buildProtocolUrl(editor, loc);\n if (url && typeof window !== 'undefined') {\n try {\n window.location.assign(url);\n return true;\n } catch {\n /* fall through to copy */\n }\n }\n if (typeof navigator !== 'undefined' && navigator.clipboard) {\n await navigator.clipboard\n .writeText(`${loc.file}${loc.line ? `:${loc.line}` : ''}`)\n .catch(() => undefined);\n }\n return false;\n};\n\nconst DevPanelContext = createContext<ResolvedDevPanelConfig | null>(null);\n\nfunction resolve(config: DevPanelConfig): ResolvedDevPanelConfig {\n const enabled =\n config.enabled ??\n (typeof process !== 'undefined' ? process.env.NODE_ENV !== 'production' : true);\n return {\n enabled,\n editor: config.editor ?? 'auto',\n getRoute: config.getRoute ?? (() => (typeof location !== 'undefined' ? location.pathname : undefined)),\n openInEditor: config.openInEditor ?? defaultOpenInEditor,\n graphEndpoint: config.graphEndpoint,\n theme: config.theme ?? {},\n tools: config.tools,\n };\n}\n\nexport function DevPanelConfigProvider({\n config,\n children,\n}: {\n config: DevPanelConfig;\n children: ReactNode;\n}) {\n const value = useMemo(() => resolve(config), [config]);\n return <DevPanelContext.Provider value={value}>{children}</DevPanelContext.Provider>;\n}\n\nexport function useDevPanelConfig(): ResolvedDevPanelConfig {\n const ctx = useContext(DevPanelContext);\n if (!ctx) throw new Error('useDevPanelConfig must be used within <DevPanel> / DevPanelConfigProvider');\n return ctx;\n}\n","import { IconX, IconSearch } from '../../core/icons';\n\nexport function GraphSearch({\n value,\n onChange,\n placeholder = 'Search components…',\n}: {\n value: string;\n onChange: (v: string) => void;\n placeholder?: string;\n}) {\n return (\n <div className=\"rdp-input\">\n <span style={{ color: 'var(--rdp-text-faint)', display: 'grid', placeItems: 'center' }}>\n <IconSearch size={15} />\n </span>\n <input value={value} onChange={(e) => onChange(e.target.value)} placeholder={placeholder} aria-label=\"Search components\" />\n {value && (\n <button type=\"button\" className=\"rdp-iconbtn-bare\" onClick={() => onChange('')} aria-label=\"Clear\">\n <IconX size={14} />\n </button>\n )}\n </div>\n );\n}\n","import type { Selected } from './store';\nimport { cx } from '../../core/styles';\nimport { IconCopy, IconFileCode } from '../../core/icons';\n\nfunction Chips({ names, onSelect }: { names: string[]; onSelect: (n: string) => void }) {\n return (\n <span style={{ display: 'flex', flexWrap: 'wrap', gap: 4 }}>\n {names.map((n) => (\n <button\n key={n}\n type=\"button\"\n className=\"rdp-chip rdp-mono\"\n style={{ border: '1px solid var(--rdp-border)', background: 'transparent', color: 'var(--rdp-text)', cursor: 'pointer' }}\n onClick={() => onSelect(n)}\n >\n {n}\n </button>\n ))}\n </span>\n );\n}\n\nfunction Row({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <div style={{ display: 'flex', gap: 8, marginTop: 5 }}>\n <span style={{ minWidth: 52, color: 'var(--rdp-text-faint)', fontWeight: 600, flexShrink: 0, fontSize: 11 }}>\n {label}\n </span>\n <span style={{ minWidth: 0, flex: 1 }}>{children}</span>\n </div>\n );\n}\n\nexport function NodeDetails({\n selected,\n onOpen,\n onCopyInfo,\n onCopyPath,\n onSelectName,\n}: {\n selected: Selected | null;\n onOpen: () => void;\n onCopyInfo: () => void;\n onCopyPath: () => void;\n onSelectName: (name: string) => void;\n}) {\n if (!selected) {\n return (\n <div style={{ color: 'var(--rdp-text-faint)', padding: '6px 2px' }}>\n Nothing selected. Enable inspect mode and click a component, or pick one from the tree.\n </div>\n );\n }\n return (\n <div\n style={{\n padding: 10,\n borderRadius: 9,\n border: '1px solid var(--rdp-border)',\n background: 'var(--rdp-bg-soft)',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>\n <span className=\"rdp-chip\" style={{ background: 'rgba(105,80,232,0.22)', color: 'var(--rdp-accent)' }}>\n {selected.componentName}\n </span>\n {selected.domTag && (\n <span className=\"rdp-mono\" style={{ color: 'var(--rdp-text-faint)', fontSize: 11 }}>{`<${selected.domTag}>`}</span>\n )}\n </div>\n\n {selected.filePath ? (\n <div className=\"rdp-mono\" style={{ marginTop: 6, fontSize: 11.5, color: 'var(--rdp-text-dim)', wordBreak: 'break-all' }}>\n {selected.filePath}\n {selected.line ? `:${selected.line}` : ''}\n {selected.line && selected.column ? `:${selected.column}` : ''}\n </div>\n ) : (\n <div style={{ marginTop: 6, fontSize: 11.5, color: 'var(--rdp-warning)' }}>\n No source path — run the graph generator (npx dev-panel-graph) or mount an adapter.\n </div>\n )}\n\n {selected.route && (\n <Row label=\"Route\">\n <span className=\"rdp-mono\" style={{ fontSize: 12 }}>{selected.route}</span>\n </Row>\n )}\n {selected.parent && (\n <Row label=\"Parent\">\n <Chips names={[selected.parent]} onSelect={onSelectName} />\n </Row>\n )}\n {selected.children.length > 0 && (\n <Row label=\"Renders\">\n <Chips names={selected.children} onSelect={onSelectName} />\n </Row>\n )}\n {selected.imports.length > 0 && (\n <Row label=\"Imports\">\n <Chips names={selected.imports} onSelect={onSelectName} />\n </Row>\n )}\n {selected.props && selected.props.length > 0 && (\n <Row label=\"Props\">\n <span className=\"rdp-mono\" style={{ fontSize: 11, color: 'var(--rdp-text-dim)' }}>\n {selected.props.map((p) => (\n <span key={p.name} style={{ marginRight: 8, display: 'inline-block' }}>\n <span style={{ color: 'var(--rdp-accent)' }}>{p.name}</span>={p.value}\n </span>\n ))}\n </span>\n </Row>\n )}\n\n <button type=\"button\" className={cx('rdp-btn', 'rdp-btn-primary')} style={{ marginTop: 12 }} onClick={onOpen}>\n <IconFileCode size={14} /> Open in editor\n </button>\n <div style={{ display: 'flex', gap: 8, marginTop: 8 }}>\n <button type=\"button\" className=\"rdp-iconbtn\" onClick={onCopyInfo} title=\"Copy component info\">\n <IconCopy size={15} />\n </button>\n <button\n type=\"button\"\n className=\"rdp-iconbtn\"\n onClick={onCopyPath}\n disabled={!selected.filePath && !selected.absFilePath}\n title=\"Copy file path\"\n >\n <IconFileCode size={15} />\n </button>\n </div>\n </div>\n );\n}\n","/**\n * Runtime helpers for the Component Graph Inspector: a memoized graph index, fiber-tree walking,\n * graph-aware component resolution (climb to the nearest ancestor that's in the graph), a safe\n * props preview, and a live \"what's mounted on this page\" scan. All defensive — React internals\n * can vary between versions, so every read is guarded.\n */\nimport type { ComponentGraph, ComponentGraphNode } from '../../core/graph-types';\nimport type { Selected, PropEntry } from './store';\n\n// ── index ───────────────────────────────────────────────────────────────────\ninterface GraphIndex {\n byName: Map<string, ComponentGraphNode>;\n childrenOf: Map<string, string[]>;\n parentsOf: Map<string, string[]>;\n importsOf: Map<string, string[]>;\n}\nconst indexCache = new WeakMap<ComponentGraph, GraphIndex>();\nfunction pushUnique(map: Map<string, string[]>, k: string, v: string) {\n const a = map.get(k);\n if (a) {\n if (!a.includes(v)) a.push(v);\n } else map.set(k, [v]);\n}\nfunction getIndex(graph: ComponentGraph | null): GraphIndex | null {\n if (!graph) return null;\n let idx = indexCache.get(graph);\n if (idx) return idx;\n idx = { byName: new Map(), childrenOf: new Map(), parentsOf: new Map(), importsOf: new Map() };\n for (const n of graph.nodes) {\n idx.byName.set(n.id, n);\n idx.byName.set(n.name, n);\n }\n for (const e of graph.edges) {\n if (e.type === 'renders') {\n pushUnique(idx.childrenOf, e.from, e.to);\n pushUnique(idx.parentsOf, e.to, e.from);\n } else if (e.type === 'route') {\n pushUnique(idx.parentsOf, e.to, e.from);\n } else if (e.type === 'imports') {\n pushUnique(idx.importsOf, e.from, e.to);\n }\n }\n indexCache.set(graph, idx);\n return idx;\n}\n\nexport function findNode(graph: ComponentGraph | null, name: string): ComponentGraphNode | null {\n return getIndex(graph)?.byName.get(name) ?? null;\n}\nexport function getParents(graph: ComponentGraph | null, id: string): string[] {\n return getIndex(graph)?.parentsOf.get(id) ?? [];\n}\nexport function getChildren(graph: ComponentGraph | null, id: string): string[] {\n return getIndex(graph)?.childrenOf.get(id) ?? [];\n}\nexport function getImports(graph: ComponentGraph | null, id: string): string[] {\n return getIndex(graph)?.importsOf.get(id) ?? [];\n}\nexport function searchNodes(graph: ComponentGraph | null, query: string, limit = 40): ComponentGraphNode[] {\n if (!graph) return [];\n const q = query.trim().toLowerCase();\n const matches = q\n ? graph.nodes.filter((n) => n.name.toLowerCase().includes(q) || n.filePath.toLowerCase().includes(q))\n : graph.nodes.filter((n) => n.type === 'component');\n matches.sort((a, b) => (a.type !== b.type ? (a.type === 'component' ? -1 : 1) : a.name.localeCompare(b.name)));\n return matches.slice(0, limit);\n}\n\n// ── path helpers ─────────────────────────────────────────────────────────────\nfunction isAbs(p: string): boolean {\n return p.startsWith('/') || /^[A-Za-z]:[\\\\/]/.test(p);\n}\nexport function toDisplayPath(graph: ComponentGraph | null, file: string): string {\n const root = graph?.root;\n if (root && file.startsWith(root)) return file.slice(root.length).replace(/^[/\\\\]/, '');\n return file;\n}\nexport function toAbsPath(graph: ComponentGraph | null, file: string): string | undefined {\n if (isAbs(file)) return file;\n return graph?.root ? `${graph.root}/${file}` : undefined;\n}\n\n// ── fiber ────────────────────────────────────────────────────────────────────\ninterface FiberLike {\n type: unknown;\n return: FiberLike | null;\n child?: FiberLike | null;\n sibling?: FiberLike | null;\n memoizedProps?: Record<string, unknown> | null;\n}\nfunction getFiber(node: Element): FiberLike | null {\n const key = Object.keys(node).find(\n (k) => k.startsWith('__reactFiber$') || k.startsWith('__reactInternalInstance$'),\n );\n return key ? ((node as unknown as Record<string, FiberLike>)[key] ?? null) : null;\n}\nfunction getDisplayName(type: unknown): string | null {\n if (!type || typeof type === 'string') return null;\n if (typeof type === 'function') {\n const fn = type as { displayName?: string; name?: string };\n return fn.displayName || fn.name || null;\n }\n const o = type as { displayName?: string; render?: unknown; type?: unknown };\n if (o.displayName) return o.displayName;\n if (o.render) return getDisplayName(o.render);\n if (o.type) return getDisplayName(o.type);\n return null;\n}\nfunction chain(el: Element): string[] {\n const out: string[] = [];\n try {\n let f = getFiber(el);\n let hops = 0;\n while (f && hops < 200) {\n const n = getDisplayName(f.type);\n if (n && out[out.length - 1] !== n) out.push(n);\n f = f.return;\n hops += 1;\n }\n } catch {\n /* ignore */\n }\n return out;\n}\n\nexport const IGNORE_ATTR = 'data-rdp-ignore';\nexport function isIgnored(el: Element | null): boolean {\n return !!el?.closest(`[${IGNORE_ATTR}]`);\n}\n\nfunction summarize(v: unknown): string | null {\n if (v == null) return String(v);\n switch (typeof v) {\n case 'string':\n return v.length > 40 ? `\"${v.slice(0, 40)}…\"` : `\"${v}\"`;\n case 'number':\n case 'boolean':\n return String(v);\n case 'function':\n return 'ƒ';\n case 'object':\n if (Array.isArray(v)) return `Array(${v.length})`;\n if ((v as { $$typeof?: symbol }).$$typeof) return null;\n return '{…}';\n default:\n return null;\n }\n}\nexport function extractProps(el: Element): PropEntry[] | undefined {\n try {\n let f = getFiber(el);\n while (f && typeof f.type === 'string') f = f.return;\n const props = f?.memoizedProps;\n if (!props || typeof props !== 'object') return undefined;\n const out: PropEntry[] = [];\n for (const name of Object.keys(props)) {\n if (name === 'children') continue;\n const s = summarize(props[name]);\n if (s == null) continue;\n out.push({ name, value: s });\n if (out.length >= 12) break;\n }\n return out.length ? out : undefined;\n } catch {\n return undefined;\n }\n}\n\ninterface RawMeta {\n componentName: string;\n filePath?: string;\n line?: number;\n column?: number;\n domTag: string;\n}\n// Reads data-dev-* attrs if a build transform injected them, else the fiber component name.\nfunction extractRaw(el: Element): RawMeta {\n const host = el.closest('[data-dev-file], [data-dev-component]');\n const attrFile = host?.getAttribute('data-dev-file') ?? undefined;\n const attrLine = host?.getAttribute('data-dev-line');\n const attrCol = host?.getAttribute('data-dev-column');\n let fiberName: string | null = null;\n try {\n fiberName = chain(el)[0] ?? null;\n } catch {\n /* ignore */\n }\n const domTag = el.tagName.toLowerCase();\n return {\n componentName: fiberName || host?.getAttribute('data-dev-component') || domTag,\n filePath: attrFile,\n line: attrLine ? Number(attrLine) : undefined,\n column: attrCol ? Number(attrCol) : undefined,\n domTag,\n };\n}\n\nfunction graphMatch(el: Element, graph: ComponentGraph | null, fallbackName: string) {\n const idx = getIndex(graph);\n if (idx) {\n const name = chain(el).find((n) => idx.byName.has(n));\n if (name) return { componentName: name, node: idx.byName.get(name) ?? null };\n }\n return { componentName: fallbackName, node: findNode(graph, fallbackName) };\n}\n\n/** Lightweight resolution for the hover tooltip. */\nexport function resolveDisplay(el: Element, graph: ComponentGraph | null, route?: string) {\n const raw = extractRaw(el);\n const { componentName, node } = graphMatch(el, graph, raw.componentName);\n return {\n componentName,\n filePath: raw.filePath ?? node?.filePath,\n line: raw.line ?? node?.line,\n domTag: raw.domTag,\n route,\n };\n}\n\n/** Full selection for a locked element, merged with the matching graph node. */\nexport function resolveSelected(\n el: Element,\n graph: ComponentGraph | null,\n route?: string,\n): Selected {\n const raw = extractRaw(el);\n const { componentName, node } = graphMatch(el, graph, raw.componentName);\n const rel = node?.filePath;\n const absFromAttr = raw.filePath && isAbs(raw.filePath) ? raw.filePath : undefined;\n const absFilePath = absFromAttr ?? (rel ? toAbsPath(graph, rel) : undefined);\n const display = rel ?? (raw.filePath ? toDisplayPath(graph, raw.filePath) : undefined);\n const parents = node ? getParents(graph, node.id) : [];\n return {\n componentName,\n filePath: display,\n absFilePath,\n line: raw.line ?? node?.line,\n column: raw.column ?? node?.column,\n route: route ?? node?.route,\n domTag: raw.domTag,\n parent: parents[0],\n parents,\n children: node ? getChildren(graph, node.id) : [],\n imports: node ? getImports(graph, node.id) : [],\n props: extractProps(el),\n source: 'hover',\n nodeId: node?.id,\n };\n}\n\nexport function selectFromNode(graph: ComponentGraph | null, node: ComponentGraphNode): Selected {\n return {\n componentName: node.name,\n filePath: node.filePath,\n absFilePath: toAbsPath(graph, node.filePath),\n line: node.line,\n column: node.column,\n route: node.route,\n parent: getParents(graph, node.id)[0],\n parents: getParents(graph, node.id),\n children: getChildren(graph, node.id),\n imports: getImports(graph, node.id),\n source: 'graph',\n nodeId: node.id,\n };\n}\n\nexport interface MountedComponent {\n name: string;\n node: ComponentGraphNode;\n count: number;\n}\n/** Walk the live fiber tree; list app components mounted on the current page (in the graph). */\nexport function collectMounted(graph: ComponentGraph | null): MountedComponent[] {\n const idx = getIndex(graph);\n if (!idx || typeof document === 'undefined') return [];\n try {\n let root: FiberLike | null = null;\n const all = document.body.getElementsByTagName('*');\n for (let i = 0; i < all.length; i += 1) {\n let f = getFiber(all[i]);\n if (f) {\n let g = 0;\n while (f.return && g < 100000) {\n f = f.return;\n g += 1;\n }\n root = f;\n break;\n }\n }\n if (!root) return [];\n const counts = new Map<string, number>();\n const stack: Array<FiberLike | null | undefined> = [root];\n let visited = 0;\n while (stack.length && visited < 200000) {\n const cur = stack.pop();\n if (!cur) continue;\n visited += 1;\n const name = getDisplayName(cur.type);\n if (name) {\n const node = idx.byName.get(name);\n if (node && node.type === 'component') counts.set(name, (counts.get(name) ?? 0) + 1);\n }\n if (cur.child) stack.push(cur.child);\n if (cur.sibling) stack.push(cur.sibling);\n }\n return [...counts.entries()]\n .map(([name, count]) => ({ name, node: idx.byName.get(name) as ComponentGraphNode, count }))\n .sort((a, b) => a.name.localeCompare(b.name));\n } catch {\n return [];\n }\n}\n\nexport function formatForCopy(s: Selected): string {\n const lines = [`Component: ${s.componentName}`];\n if (s.filePath) lines.push(`File: ${s.filePath}${s.line ? `:${s.line}` : ''}`);\n if (s.route) lines.push(`Route: ${s.route}`);\n if (s.parent) lines.push(`Parent: ${s.parent}`);\n if (s.children.length) lines.push(`Children: ${s.children.join(', ')}`);\n if (s.imports.length) lines.push(`Imports: ${s.imports.join(', ')}`);\n return lines.join('\\n');\n}\n","import type { ReactNode } from 'react';\n\nimport type { ComponentGraph, ComponentGraphNode } from '../../core/graph-types';\nimport type { Selected } from './store';\nimport { IconCopy, IconArrowUp, IconFileCode, IconChevronDown, IconChevronRight } from '../../core/icons';\nimport { findNode, getChildren, searchNodes } from './graph-utils';\n\nconst MAX_DEPTH = 6;\n\nexport interface TreeProps {\n graph: ComponentGraph | null;\n selected: Selected | null;\n search: string;\n expanded: ReadonlySet<string>;\n onSelect: (node: ComponentGraphNode) => void;\n onToggle: (id: string) => void;\n onOpen: (node: ComponentGraphNode) => void;\n onCopy: (node: ComponentGraphNode) => void;\n}\n\nfunction Label({ children }: { children: ReactNode }) {\n return <span className=\"rdp-section-label\">{children}</span>;\n}\n\nfunction RowActions({\n node,\n onOpen,\n onCopy,\n}: {\n node: ComponentGraphNode;\n onOpen: (n: ComponentGraphNode) => void;\n onCopy: (n: ComponentGraphNode) => void;\n}) {\n return (\n <span style={{ display: 'inline-flex', gap: 2 }}>\n <button type=\"button\" className=\"rdp-iconbtn-bare\" title=\"Open in editor\" onClick={(e) => { e.stopPropagation(); onOpen(node); }}>\n <IconFileCode size={13} />\n </button>\n <button type=\"button\" className=\"rdp-iconbtn-bare\" title=\"Copy file path\" onClick={(e) => { e.stopPropagation(); onCopy(node); }}>\n <IconCopy size={13} />\n </button>\n </span>\n );\n}\n\nfunction RowShell({\n depth = 0,\n active,\n caret,\n label,\n isRoute,\n onLabel,\n actions,\n}: {\n depth?: number;\n active?: boolean;\n caret?: ReactNode;\n label: string;\n isRoute?: boolean;\n onLabel: () => void;\n actions?: ReactNode;\n}) {\n return (\n <div\n className=\"rdp-row\"\n style={{\n padding: '3px 6px',\n paddingLeft: 6 + depth * 14,\n gap: 4,\n alignItems: 'center',\n background: active ? 'rgba(105,80,232,0.16)' : undefined,\n }}\n >\n <span style={{ width: 16, display: 'grid', placeItems: 'center', color: 'var(--rdp-text-faint)' }}>{caret}</span>\n <button\n type=\"button\"\n onClick={onLabel}\n className=\"rdp-mono\"\n style={{\n flex: 1,\n minWidth: 0,\n textAlign: 'left',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n fontSize: 12,\n fontWeight: active ? 700 : 500,\n color: isRoute ? 'var(--rdp-info)' : active ? 'var(--rdp-accent)' : 'var(--rdp-text)',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {label}\n </button>\n {actions}\n </div>\n );\n}\n\nfunction Branch({ name, depth, trail, p }: { name: string; depth: number; trail: ReadonlySet<string>; p: TreeProps }) {\n const node = findNode(p.graph, name);\n const id = node?.id ?? name;\n const kids = node ? getChildren(p.graph, id) : [];\n const hasKids = kids.length > 0 && depth < MAX_DEPTH && !trail.has(id);\n const open = p.expanded.has(id);\n const active = p.selected?.nodeId === id || p.selected?.componentName === name;\n return (\n <div>\n <RowShell\n depth={depth}\n active={active}\n isRoute={node?.type === 'route'}\n caret={\n hasKids ? (\n <span style={{ cursor: 'pointer' }} onClick={() => p.onToggle(id)}>\n {open ? <IconChevronDown size={13} /> : <IconChevronRight size={13} />}\n </span>\n ) : null\n }\n label={name}\n onLabel={() => node && p.onSelect(node)}\n actions={node ? <RowActions node={node} onOpen={p.onOpen} onCopy={p.onCopy} /> : null}\n />\n {hasKids && open && kids.map((k) => <Branch key={`${id}>${k}`} name={k} depth={depth + 1} trail={new Set([...trail, id])} p={p} />)}\n </div>\n );\n}\n\nexport function ComponentGraphTree(p: TreeProps) {\n const { graph, selected, search } = p;\n\n if (graph && search.trim()) {\n const results = searchNodes(graph, search);\n return (\n <div>\n <Label>{results.length} match{results.length === 1 ? '' : 'es'}</Label>\n {results.map((node) => (\n <RowShell\n key={node.id}\n active={selected?.nodeId === node.id}\n isRoute={node.type === 'route'}\n label={node.name}\n onLabel={() => p.onSelect(node)}\n actions={<RowActions node={node} onOpen={p.onOpen} onCopy={p.onCopy} />}\n />\n ))}\n {results.length === 0 && (\n <div style={{ color: 'var(--rdp-text-faint)', paddingLeft: 8 }}>No components match “{search}”.</div>\n )}\n </div>\n );\n }\n\n if (!selected) {\n return (\n <div style={{ color: 'var(--rdp-text-faint)', padding: '8px 2px' }}>\n Lock a component (hover + click) or search above to explore the tree.\n </div>\n );\n }\n\n return (\n <div>\n {selected.parents.length > 0 && (\n <>\n <Label>Parent chain</Label>\n {selected.parents.map((parent) => {\n const node = findNode(graph, parent);\n return (\n <RowShell\n key={`p:${parent}`}\n isRoute={node?.type === 'route'}\n caret={<IconArrowUp size={12} />}\n label={parent}\n onLabel={() => node && p.onSelect(node)}\n actions={node ? <RowActions node={node} onOpen={p.onOpen} onCopy={p.onCopy} /> : null}\n />\n );\n })}\n </>\n )}\n\n <Label>Selected</Label>\n <RowShell active label={selected.componentName} onLabel={() => undefined} />\n\n <Label>Renders ({selected.children.length})</Label>\n {selected.children.length === 0 ? (\n <div style={{ color: 'var(--rdp-text-faint)', paddingLeft: 20 }}>No child components detected.</div>\n ) : (\n selected.children.map((c) => (\n <Branch key={`c:${c}`} name={c} depth={0} trail={new Set(selected.nodeId ? [selected.nodeId] : [])} p={p} />\n ))\n )}\n\n {selected.imports.length > 0 && (\n <>\n <Label>Imports ({selected.imports.length})</Label>\n {selected.imports.map((imp) => {\n const node = findNode(graph, imp);\n return (\n <RowShell\n key={`i:${imp}`}\n isRoute={node?.type === 'route'}\n label={imp}\n onLabel={() => node && p.onSelect(node)}\n actions={node ? <RowActions node={node} onOpen={p.onOpen} onCopy={p.onCopy} /> : null}\n />\n );\n })}\n </>\n )}\n </div>\n );\n}\n","import { useState, useEffect, useCallback } from 'react';\n\nimport type { ComponentGraph, ComponentGraphNode } from '../../core/graph-types';\nimport { GraphSearch } from './Search';\nimport { IconCopy, IconRefresh, IconFileCode } from '../../core/icons';\nimport { collectMounted, type MountedComponent } from './graph-utils';\n\nexport function ComponentGraphPageList({\n graph,\n route,\n selectedName,\n onSelect,\n onOpen,\n onCopy,\n}: {\n graph: ComponentGraph | null;\n route?: string;\n selectedName?: string;\n onSelect: (node: ComponentGraphNode) => void;\n onOpen: (node: ComponentGraphNode) => void;\n onCopy: (node: ComponentGraphNode) => void;\n}) {\n const [items, setItems] = useState<MountedComponent[]>([]);\n const [query, setQuery] = useState('');\n\n const scan = useCallback(() => setItems(collectMounted(graph)), [graph]);\n\n // Scan on open / graph load / route change; two frames + a late pass for streamed content.\n useEffect(() => {\n let raf2 = 0;\n const raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(scan);\n });\n const late = setTimeout(scan, 600);\n return () => {\n cancelAnimationFrame(raf1);\n cancelAnimationFrame(raf2);\n clearTimeout(late);\n };\n }, [scan, route]);\n\n if (!graph) {\n return (\n <div style={{ color: 'var(--rdp-text-faint)', padding: '6px 2px' }}>\n Load the component graph (Graph tab) to map mounted components to source files.\n </div>\n );\n }\n\n const q = query.trim().toLowerCase();\n const filtered = q\n ? items.filter((i) => i.name.toLowerCase().includes(q) || i.node.filePath.toLowerCase().includes(q))\n : items;\n\n return (\n <div>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: 6 }}>\n <span className=\"rdp-sub\">\n <span className=\"rdp-mono\" style={{ color: 'var(--rdp-info)' }}>{route ?? '/'}</span> ·{' '}\n {q ? `${filtered.length} / ${items.length}` : items.length} component{items.length === 1 ? '' : 's'}\n </span>\n <button type=\"button\" className=\"rdp-btn rdp-btn-sm\" onClick={scan}>\n <IconRefresh size={13} /> Rescan\n </button>\n </div>\n\n <div style={{ marginBottom: 8 }}>\n <GraphSearch value={query} onChange={setQuery} placeholder=\"Filter components on this page…\" />\n </div>\n\n {items.length === 0 ? (\n <div style={{ color: 'var(--rdp-text-faint)', paddingLeft: 4 }}>\n No graph components detected in the live tree. Try Rescan, or regenerate the graph.\n </div>\n ) : filtered.length === 0 ? (\n <div style={{ color: 'var(--rdp-text-faint)', paddingLeft: 4 }}>No components match “{query}”.</div>\n ) : (\n filtered.map(({ name, node, count }) => (\n <div\n key={node.id}\n className=\"rdp-row\"\n style={{ padding: '4px 6px', alignItems: 'center', background: selectedName === name ? 'rgba(105,80,232,0.16)' : undefined }}\n onClick={() => onSelect(node)}\n >\n <span style={{ flex: 1, minWidth: 0 }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: 6 }}>\n <span className=\"rdp-mono\" style={{ fontWeight: 600, fontSize: 12, whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>\n {name}\n </span>\n {count > 1 && (\n <span className=\"rdp-chip\" style={{ background: 'var(--rdp-bg-soft)', color: 'var(--rdp-text-dim)', height: 15 }}>\n ×{count}\n </span>\n )}\n </span>\n <span style={{ display: 'block', color: 'var(--rdp-text-faint)', fontSize: 11, whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>\n {node.filePath}\n </span>\n </span>\n <span style={{ display: 'inline-flex', gap: 2 }}>\n <button type=\"button\" className=\"rdp-iconbtn-bare\" title=\"Open in editor\" onClick={(e) => { e.stopPropagation(); onOpen(node); }}>\n <IconFileCode size={13} />\n </button>\n <button type=\"button\" className=\"rdp-iconbtn-bare\" title=\"Copy file path\" onClick={(e) => { e.stopPropagation(); onCopy(node); }}>\n <IconCopy size={13} />\n </button>\n </span>\n </div>\n ))\n )}\n </div>\n );\n}\n","/**\n * State store for the Component Graph Inspector (useSyncExternalStore). Holds the enabled flag,\n * active mode, locked selection, the lazily-fetched static graph, search/expansion UI state, and\n * a transient toast. Self-contained — no persistence beyond an in-memory snapshot.\n */\nimport type { ComponentGraph } from '../../core/graph-types';\n\nexport type GraphMode = 'hover' | 'graph' | 'page' | 'file';\nexport type GraphStatus = 'idle' | 'loading' | 'ready' | 'empty' | 'error';\n\nexport interface PropEntry {\n name: string;\n value: string;\n}\n\nexport interface Selected {\n componentName: string;\n filePath?: string;\n absFilePath?: string;\n line?: number;\n column?: number;\n route?: string;\n domTag?: string;\n parent?: string;\n parents: string[];\n children: string[];\n imports: string[];\n props?: PropEntry[];\n source: 'hover' | 'graph';\n nodeId?: string;\n}\n\nexport interface Toast {\n message: string;\n tone: 'success' | 'error' | 'info';\n}\n\ninterface State {\n enabled: boolean;\n mode: GraphMode;\n selected: Selected | null;\n graph: ComponentGraph | null;\n status: GraphStatus;\n search: string;\n expanded: ReadonlySet<string>;\n toast: Toast | null;\n}\n\nlet state: State = {\n enabled: false,\n mode: 'hover',\n selected: null,\n graph: null,\n status: 'idle',\n search: '',\n expanded: new Set<string>(),\n toast: null,\n};\n\nconst listeners = new Set<() => void>();\nlet scheduled = false;\nlet toastTimer: ReturnType<typeof setTimeout> | null = null;\n\nfunction emit() {\n if (scheduled) return;\n scheduled = true;\n const flush = () => {\n scheduled = false;\n listeners.forEach((l) => l());\n };\n if (typeof queueMicrotask === 'function') queueMicrotask(flush);\n else void Promise.resolve().then(flush);\n}\nfunction set(patch: Partial<State>) {\n state = { ...state, ...patch };\n emit();\n}\n\nexport function subscribeGraph(l: () => void): () => void {\n listeners.add(l);\n return () => listeners.delete(l);\n}\nexport function getGraphState(): State {\n return state;\n}\nconst SERVER: State = { ...state };\nexport function getGraphServerState(): State {\n return SERVER;\n}\n\nexport function enableInspector(endpoint?: string) {\n if (!state.enabled) set({ enabled: true });\n void loadGraph(endpoint);\n}\nexport function disableInspector() {\n if (state.enabled) set({ enabled: false });\n}\nexport function toggleInspector(endpoint?: string) {\n set({ enabled: !state.enabled });\n if (state.enabled) void loadGraph(endpoint);\n}\nexport function setMode(mode: GraphMode) {\n if (state.mode !== mode) set({ mode });\n}\nexport function setSelected(selected: Selected | null) {\n set({ selected });\n}\nexport function setSearch(search: string) {\n set({ search });\n}\nexport function toggleExpanded(id: string) {\n const expanded = new Set(state.expanded);\n if (expanded.has(id)) expanded.delete(id);\n else expanded.add(id);\n set({ expanded });\n}\nexport function showToast(toast: Toast) {\n set({ toast });\n if (toastTimer) clearTimeout(toastTimer);\n toastTimer = setTimeout(() => {\n toastTimer = null;\n set({ toast: null });\n }, 2600);\n}\n\nlet graphPromise: Promise<void> | null = null;\nexport function loadGraph(endpoint?: string, force = false): Promise<void> {\n if (!endpoint) {\n set({ status: 'empty' });\n return Promise.resolve();\n }\n if (!force && (state.status === 'ready' || state.status === 'loading')) {\n return graphPromise ?? Promise.resolve();\n }\n set({ status: 'loading' });\n graphPromise = (async () => {\n try {\n const res = await fetch(endpoint, { headers: { Accept: 'application/json' } });\n if (res.status === 404) return set({ graph: null, status: 'empty' });\n if (!res.ok) return set({ status: 'error' });\n const graph = (await res.json()) as ComponentGraph;\n set({ graph, status: graph.nodes?.length ? 'ready' : 'empty' });\n } catch {\n set({ status: 'error' });\n }\n })();\n return graphPromise;\n}\n","import { useMemo, useCallback, useSyncExternalStore } from 'react';\n\nimport type { ToolPanelProps } from '../../core/types';\nimport type { ComponentGraphNode } from '../../core/graph-types';\nimport { cx } from '../../core/styles';\nimport { useDevPanelConfig } from '../../core/config';\nimport { GraphSearch } from './Search';\nimport { NodeDetails } from './NodeDetails';\nimport { ComponentGraphTree } from './Tree';\nimport { ComponentGraphPageList } from './PageList';\nimport type { Selected, GraphMode } from './store';\nimport { IconX, IconGraph, IconLayers, IconPointer, IconFileCode } from '../../core/icons';\nimport { selectFromNode, formatForCopy } from './graph-utils';\nimport {\n setMode,\n loadGraph,\n setSearch,\n setSelected,\n showToast,\n toggleExpanded,\n getGraphState,\n subscribeGraph,\n toggleInspector,\n getGraphServerState,\n} from './store';\n\nconst TABS: Array<{ value: GraphMode; label: string; icon: React.ReactNode }> = [\n { value: 'hover', label: 'Hover', icon: <IconPointer size={14} /> },\n { value: 'graph', label: 'Graph', icon: <IconGraph size={14} /> },\n { value: 'page', label: 'Page', icon: <IconLayers size={14} /> },\n { value: 'file', label: 'File', icon: <IconFileCode size={14} /> },\n];\n\nasync function copy(text: string): Promise<boolean> {\n if (typeof navigator === 'undefined' || !navigator.clipboard) return false;\n return navigator.clipboard.writeText(text).then(\n () => true,\n () => false,\n );\n}\n\nexport function ComponentGraphPanel({ onClose }: ToolPanelProps) {\n const state = useSyncExternalStore(subscribeGraph, getGraphState, getGraphServerState);\n const config = useDevPanelConfig();\n const route = config.getRoute();\n const { enabled, mode, selected, graph, status, search, expanded } = state;\n\n const openLoc = useCallback(\n async (sel: Selected | null) => {\n const file = sel?.absFilePath ?? sel?.filePath;\n if (!file) {\n showToast({ message: 'No source path available', tone: 'error' });\n return;\n }\n const ok = await config.openInEditor?.({ file, line: sel?.line, column: sel?.column }, config.editor);\n showToast(ok === false ? { message: 'Editor unavailable — path copied', tone: 'info' } : { message: 'Opening in your editor…', tone: 'success' });\n },\n [config],\n );\n\n const copyInfo = useCallback(() => {\n if (!selected) return;\n void copy(formatForCopy(selected)).then((ok) => showToast({ message: ok ? 'Component info copied' : 'Copy failed', tone: ok ? 'success' : 'error' }));\n }, [selected]);\n\n const copyPath = useCallback(\n (sel: Selected | null) => {\n const path = sel?.filePath ?? sel?.absFilePath;\n if (!path) return showToast({ message: 'No path to copy', tone: 'info' });\n void copy(`${path}${sel?.line ? `:${sel.line}` : ''}`).then((ok) => showToast({ message: ok ? 'File path copied' : 'Copy failed', tone: ok ? 'success' : 'error' }));\n },\n [],\n );\n\n const selectName = useCallback(\n (name: string) => {\n const node = graph?.nodes.find((n) => n.name === name || n.id === name);\n if (node) setSelected(selectFromNode(graph, node));\n },\n [graph],\n );\n const selectNode = useCallback((node: ComponentGraphNode) => setSelected(selectFromNode(graph, node)), [graph]);\n const openNode = useCallback((node: ComponentGraphNode) => void openLoc(selectFromNode(graph, node)), [graph, openLoc]);\n const copyNode = useCallback((node: ComponentGraphNode) => copyPath(selectFromNode(graph, node)), [graph, copyPath]);\n\n const statusText = useMemo(() => {\n if (status === 'ready' && graph) return `${graph.nodes.length} components · ${graph.edges.length} relationships`;\n if (status === 'loading' || status === 'idle') return 'Loading component graph…';\n if (status === 'empty') return 'Graph not generated — run `npx dev-panel-graph` (or add an adapter)';\n return 'Graph endpoint unavailable.';\n }, [status, graph]);\n\n const details = (\n <NodeDetails\n selected={selected}\n onOpen={() => void openLoc(selected)}\n onCopyInfo={copyInfo}\n onCopyPath={() => copyPath(selected)}\n onSelectName={selectName}\n />\n );\n\n return (\n <div className=\"rdp-surface rdp-panel\" style={{ bottom: 88, right: 20 }}>\n <div className=\"rdp-header\">\n <IconGraph size={16} />\n <span className=\"rdp-title\" style={{ flex: 1 }}>\n Component Graph Inspector\n </span>\n {enabled && (\n <span className=\"rdp-chip\" style={{ background: 'var(--rdp-success)', color: '#06210f' }}>ON</span>\n )}\n <button type=\"button\" className=\"rdp-iconbtn-bare\" onClick={onClose} aria-label=\"Close\">\n <IconX size={16} />\n </button>\n </div>\n\n <div className=\"rdp-body\">\n {/* enable */}\n <div\n style={{\n padding: 12,\n borderRadius: 9,\n border: `1px solid ${enabled ? 'rgba(61,220,132,0.5)' : 'var(--rdp-border)'}`,\n background: enabled ? 'rgba(61,220,132,0.08)' : 'var(--rdp-bg-elev)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <span>\n <span className=\"rdp-title\" style={{ display: 'block' }}>\n Inspect mode\n </span>\n <span className=\"rdp-sub\">{enabled ? 'Hover the UI, click to lock · Esc to exit' : 'Enable, then hover the UI'}</span>\n </span>\n <button\n type=\"button\"\n className={cx('rdp-btn', enabled && 'rdp-btn-primary')}\n style={{ width: 'auto' }}\n onClick={() => toggleInspector(config.graphEndpoint)}\n >\n {enabled ? 'On' : 'Enable'}\n </button>\n </div>\n\n {/* tabs */}\n <div className=\"rdp-tabs\" style={{ marginTop: 12 }}>\n {TABS.map((t) => (\n <button\n key={t.value}\n type=\"button\"\n className=\"rdp-tab\"\n aria-selected={mode === t.value}\n onClick={() => {\n setMode(t.value);\n if (t.value === 'graph' || t.value === 'page') void loadGraph(config.graphEndpoint);\n }}\n >\n {t.icon}\n {t.label}\n </button>\n ))}\n </div>\n\n <div style={{ marginTop: 12 }}>\n {mode === 'hover' && (\n <div>\n <span className=\"rdp-section-label\">Last locked component</span>\n {details}\n </div>\n )}\n\n {mode === 'graph' && (\n <div>\n <div className=\"rdp-sub\" style={{ marginBottom: 6, color: status === 'ready' ? 'var(--rdp-success)' : 'var(--rdp-text-faint)' }}>\n {statusText}\n </div>\n {(status === 'empty' || status === 'error') && (\n <button type=\"button\" className=\"rdp-btn rdp-btn-sm\" style={{ marginBottom: 8 }} onClick={() => loadGraph(config.graphEndpoint, true)}>\n Retry graph load\n </button>\n )}\n <GraphSearch value={search} onChange={setSearch} />\n <div style={{ marginTop: 8 }}>\n <ComponentGraphTree\n graph={graph}\n selected={selected}\n search={search}\n expanded={expanded}\n onSelect={selectNode}\n onToggle={toggleExpanded}\n onOpen={openNode}\n onCopy={copyNode}\n />\n </div>\n {selected && !search.trim() && <div style={{ marginTop: 12 }}>{details}</div>}\n </div>\n )}\n\n {mode === 'page' && (\n <div>\n <ComponentGraphPageList\n graph={graph}\n route={route}\n selectedName={selected?.componentName}\n onSelect={selectNode}\n onOpen={openNode}\n onCopy={copyNode}\n />\n {selected && <div style={{ marginTop: 12 }}>{details}</div>}\n </div>\n )}\n\n {mode === 'file' && details}\n </div>\n </div>\n </div>\n );\n}\n","import { useState, useEffect, useCallback } from 'react';\n\nimport { useDevPanelConfig } from '../../core/config';\nimport { isIgnored, resolveDisplay, resolveSelected } from './graph-utils';\nimport {\n setMode,\n showToast,\n setSelected,\n getGraphState,\n subscribeGraph,\n disableInspector,\n getGraphServerState,\n} from './store';\nimport { useSyncExternalStore } from 'react';\n\ninterface Hover {\n name: string;\n filePath?: string;\n line?: number;\n domTag: string;\n route?: string;\n rect: { top: number; left: number; width: number; height: number };\n x: number;\n y: number;\n}\n\n/** Always-mounted overlay. Renders nothing until inspect mode is on. pointer-events:none. */\nexport function ComponentGraphOverlay() {\n const state = useSyncExternalStore(subscribeGraph, getGraphState, getGraphServerState);\n const config = useDevPanelConfig();\n const [hover, setHover] = useState<Hover | null>(null);\n const route = config.getRoute();\n const { enabled } = state;\n\n const openSelected = useCallback(\n async (file?: string, line?: number, column?: number, name?: string) => {\n if (!file) {\n showToast({ message: 'No source path — generate the graph or use inspect build', tone: 'error' });\n return;\n }\n const ok = await config.openInEditor?.({ file, line, column }, config.editor);\n showToast(\n ok === false\n ? { message: `Editor unavailable — path copied (${name ?? ''})`, tone: 'info' }\n : { message: 'Opening in your editor…', tone: 'success' },\n );\n },\n [config],\n );\n\n useEffect(() => {\n if (!enabled) return undefined;\n let raf = 0;\n let last: PointerEvent | null = null;\n\n const onMove = (e: PointerEvent) => {\n last = e;\n if (raf) return;\n raf = requestAnimationFrame(() => {\n raf = 0;\n const ev = last;\n const target = ev?.target as Element | null;\n if (!ev || !target || !(target instanceof Element) || isIgnored(target)) {\n setHover(null);\n return;\n }\n const meta = resolveDisplay(target, getGraphState().graph, route);\n const r = target.getBoundingClientRect();\n setHover({\n name: meta.componentName,\n filePath: meta.filePath,\n line: meta.line,\n domTag: meta.domTag,\n route: meta.route,\n rect: { top: r.top, left: r.left, width: r.width, height: r.height },\n x: ev.clientX,\n y: ev.clientY,\n });\n });\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') disableInspector();\n };\n const onClick = (e: MouseEvent) => {\n const target = e.target as Element | null;\n if (!target || !(target instanceof Element) || isIgnored(target)) return;\n const sel = resolveSelected(target, getGraphState().graph, route);\n e.preventDefault();\n e.stopPropagation();\n setSelected(sel);\n setMode('graph');\n if (e.metaKey || e.ctrlKey) {\n void openSelected(sel.absFilePath ?? sel.filePath, sel.line, sel.column, sel.componentName);\n } else {\n showToast({ message: `Locked ${sel.componentName}`, tone: 'success' });\n }\n };\n\n document.addEventListener('pointermove', onMove, { passive: true });\n document.addEventListener('keydown', onKey, true);\n document.addEventListener('click', onClick, true);\n return () => {\n if (raf) cancelAnimationFrame(raf);\n document.removeEventListener('pointermove', onMove);\n document.removeEventListener('keydown', onKey, true);\n document.removeEventListener('click', onClick, true);\n setHover(null);\n };\n }, [enabled, route, openSelected]);\n\n if (!enabled) return null;\n\n const flipX = typeof window !== 'undefined' && hover && hover.x + 374 > window.innerWidth;\n const flipY = typeof window !== 'undefined' && hover && hover.y + 140 > window.innerHeight;\n\n return (\n <div className=\"rdp-overlay\">\n {hover && (\n <div\n className=\"rdp-hl\"\n style={{ top: hover.rect.top, left: hover.rect.left, width: hover.rect.width, height: hover.rect.height }}\n />\n )}\n {hover && (\n <div\n className=\"rdp-tooltip\"\n style={{\n top: flipY ? undefined : hover.y + 14,\n bottom: flipY ? window.innerHeight - hover.y + 14 : undefined,\n left: flipX ? undefined : hover.x + 14,\n right: flipX ? window.innerWidth - hover.x + 14 : undefined,\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, marginBottom: hover.filePath ? 4 : 0 }}>\n <span className=\"rdp-chip\" style={{ background: 'rgba(105,80,232,0.5)', color: '#fff' }}>\n {hover.name}\n </span>\n <span className=\"rdp-mono\" style={{ color: 'rgba(255,255,255,0.6)', fontSize: 11 }}>\n {`<${hover.domTag}>`}\n </span>\n </div>\n <div className=\"rdp-mono\" style={{ fontSize: 11.5, color: 'rgba(255,255,255,0.85)', wordBreak: 'break-all' }}>\n {hover.filePath ? `${hover.filePath}${hover.line ? `:${hover.line}` : ''}` : 'source resolved from graph on lock'}\n </div>\n {hover.route && (\n <div style={{ fontSize: 11, color: 'rgba(255,255,255,0.45)' }}>{hover.route}</div>\n )}\n <div style={{ fontSize: 10.5, marginTop: 4, color: 'rgba(255,255,255,0.5)' }}>\n click to lock · ⌘/Ctrl + click to open · Esc to exit\n </div>\n </div>\n )}\n {state.toast && (\n <div\n className=\"rdp-toast\"\n style={{\n color:\n state.toast.tone === 'success'\n ? 'var(--rdp-success)'\n : state.toast.tone === 'error'\n ? 'var(--rdp-error)'\n : '#fff',\n }}\n >\n {state.toast.message}\n </div>\n )}\n </div>\n );\n}\n","import type { ToolDefinition } from '../../core/types';\nimport { IconGraph } from '../../core/icons';\nimport { registerTool } from '../../core/registry';\nimport { ComponentGraphPanel } from './Panel';\nimport { ComponentGraphOverlay } from './Overlay';\n\nexport const componentGraphTool: ToolDefinition = {\n id: 'graph',\n title: 'Component Graph Inspector',\n subtitle: 'Inspect component tree & open source files',\n color: 'primary',\n icon: <IconGraph size={19} />,\n Panel: ComponentGraphPanel,\n Overlay: ComponentGraphOverlay,\n};\n\nexport function registerComponentGraph() {\n registerTool(componentGraphTool);\n}\n","import type { MouseEvent as ReactMouseEvent, PointerEvent as ReactPointerEvent } from 'react';\nimport { useRef, useState, useEffect, useCallback } from 'react';\n\nimport type { ToolDefinition } from './types';\nimport { colorVar } from './styles';\nimport { IconWrench, IconChevronRight } from './icons';\n\ntype Corner = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\nconst STORAGE_KEY = 'react-dev-panel:corner';\nconst GAP = 20;\nconst FAB = 52;\nconst DRAG_THRESHOLD = 5;\n\nfunction isCorner(v: string | null): v is Corner {\n return v === 'top-left' || v === 'top-right' || v === 'bottom-left' || v === 'bottom-right';\n}\nfunction readCorner(): Corner {\n if (typeof window === 'undefined') return 'bottom-right';\n try {\n const s = window.localStorage.getItem(STORAGE_KEY);\n if (isCorner(s)) return s;\n } catch {\n /* ignore */\n }\n return 'bottom-right';\n}\n\nfunction useDraggableCorner() {\n const [corner, setCorner] = useState<Corner>('bottom-right');\n const [drag, setDrag] = useState<{ x: number; y: number } | null>(null);\n const moved = useRef(false);\n const offset = useRef({ x: 0, y: 0 });\n\n useEffect(() => setCorner(readCorner()), []);\n\n const onPointerDown = useCallback((e: ReactPointerEvent<HTMLButtonElement>) => {\n if (e.button !== 0) return;\n const rect = e.currentTarget.getBoundingClientRect();\n offset.current = { x: e.clientX - rect.left, y: e.clientY - rect.top };\n moved.current = false;\n const sx = e.clientX;\n const sy = e.clientY;\n const move = (ev: PointerEvent) => {\n if (!moved.current && Math.hypot(ev.clientX - sx, ev.clientY - sy) < DRAG_THRESHOLD) return;\n moved.current = true;\n setDrag({ x: ev.clientX - offset.current.x, y: ev.clientY - offset.current.y });\n };\n const up = (ev: PointerEvent) => {\n window.removeEventListener('pointermove', move);\n window.removeEventListener('pointerup', up);\n if (moved.current) {\n const cxp = ev.clientX - offset.current.x + FAB / 2;\n const cyp = ev.clientY - offset.current.y + FAB / 2;\n const next = `${cyp < window.innerHeight / 2 ? 'top' : 'bottom'}-${\n cxp < window.innerWidth / 2 ? 'left' : 'right'\n }` as Corner;\n setCorner(next);\n try {\n window.localStorage.setItem(STORAGE_KEY, next);\n } catch {\n /* ignore */\n }\n }\n setDrag(null);\n };\n window.addEventListener('pointermove', move);\n window.addEventListener('pointerup', up);\n }, []);\n\n const onClickCapture = useCallback((e: ReactMouseEvent) => {\n if (moved.current) {\n e.stopPropagation();\n e.preventDefault();\n moved.current = false;\n }\n }, []);\n\n const isTop = corner.startsWith('top');\n const isLeft = corner.endsWith('left');\n const pos = drag\n ? { top: drag.y, left: drag.x }\n : {\n top: isTop ? GAP : undefined,\n bottom: isTop ? undefined : GAP,\n left: isLeft ? GAP : undefined,\n right: isLeft ? undefined : GAP,\n };\n return { pos, isTop, isLeft, onPointerDown, onClickCapture };\n}\n\nfunction ToolBadge({ tool }: { tool: ToolDefinition }) {\n const badge = tool.useBadge?.();\n if (!badge) return null;\n const bg =\n badge.tone === 'error'\n ? 'var(--rdp-error)'\n : badge.tone === 'success'\n ? 'var(--rdp-success)'\n : 'var(--rdp-bg-soft)';\n const color = badge.tone === 'success' ? '#06210f' : '#fff';\n return (\n <span className=\"rdp-chip\" style={{ background: bg, color }}>\n {badge.label}\n </span>\n );\n}\n\n/** Floating launcher: draggable FAB that opens a menu listing the registered tools. */\nexport function Launcher({\n tools,\n onOpenTool,\n}: {\n tools: ToolDefinition[];\n onOpenTool: (id: string) => void;\n}) {\n const { pos, isTop, isLeft, onPointerDown, onClickCapture } = useDraggableCorner();\n const [menuOpen, setMenuOpen] = useState(false);\n\n const menuPos = {\n top: isTop ? pos.top !== undefined ? (pos.top as number) + FAB + 8 : GAP + FAB + 8 : undefined,\n bottom: isTop ? undefined : GAP + FAB + 8,\n left: isLeft ? GAP : undefined,\n right: isLeft ? undefined : GAP,\n };\n\n return (\n <>\n <button\n type=\"button\"\n className=\"rdp-fab\"\n style={pos}\n onPointerDown={onPointerDown}\n onClickCapture={onClickCapture}\n onClick={() => setMenuOpen((v) => !v)}\n aria-label=\"Open Developer Tools\"\n aria-haspopup=\"menu\"\n >\n <IconWrench size={22} />\n </button>\n\n {menuOpen && (\n <>\n {/* click-away */}\n <div\n style={{ position: 'fixed', inset: 0, zIndex: 1 }}\n onClick={() => setMenuOpen(false)}\n aria-hidden\n />\n <div className=\"rdp-surface rdp-menu\" style={menuPos} role=\"menu\">\n <div className=\"rdp-header rdp-menu-head\">\n <span className=\"rdp-tile\" style={{ color: 'var(--rdp-accent)', background: 'rgba(105,80,232,0.16)' }}>\n <IconWrench size={17} />\n </span>\n <div>\n <div className=\"rdp-title\">Developer Tools</div>\n <div className=\"rdp-sub\">Internal utilities</div>\n </div>\n </div>\n <div style={{ padding: 8 }}>\n {tools.map((tool) => (\n <button\n key={tool.id}\n type=\"button\"\n className=\"rdp-row\"\n role=\"menuitem\"\n onClick={() => {\n onOpenTool(tool.id);\n setMenuOpen(false);\n }}\n >\n <span\n className=\"rdp-tile\"\n style={{ color: colorVar(tool.color), background: 'rgba(148,163,184,0.1)' }}\n >\n {tool.icon}\n </span>\n <span style={{ flex: 1, minWidth: 0 }}>\n <span className=\"rdp-title\" style={{ display: 'block' }}>\n {tool.title}\n </span>\n <span className=\"rdp-sub\" style={{ display: 'block' }}>\n {tool.subtitle}\n </span>\n </span>\n <span style={{ display: 'inline-flex', alignItems: 'center', gap: 6, color: 'var(--rdp-text-faint)' }}>\n <ToolBadge tool={tool} />\n <IconChevronRight size={16} />\n </span>\n </button>\n ))}\n </div>\n </div>\n </>\n )}\n </>\n );\n}\n","import type { CSSProperties } from 'react';\nimport { useState, useEffect, useMemo } from 'react';\n\nimport type { DevPanelConfig } from './types';\nimport { Launcher } from './Launcher';\nimport { resolveTools } from './registry';\nimport { injectBaseStyles } from './styles';\nimport { DevPanelConfigProvider } from './config';\n\n/**\n * The single component a host mounts (once, near the app root). Renders the floating launcher,\n * the active tool's panel, and every tool's always-on overlay — all gated by `enabled`.\n *\n * <DevPanel enabled={isInternalUser} getRoute={() => pathname} openInEditor={...} />\n */\nexport function DevPanel(config: DevPanelConfig) {\n const enabled =\n config.enabled ??\n (typeof process !== 'undefined' ? process.env.NODE_ENV !== 'production' : true);\n\n useEffect(() => {\n if (enabled) injectBaseStyles();\n }, [enabled]);\n\n if (!enabled) return null;\n return (\n <DevPanelConfigProvider config={config}>\n <DevPanelInner ids={config.tools} theme={config.theme} />\n </DevPanelConfigProvider>\n );\n}\n\nfunction DevPanelInner({\n ids,\n theme,\n}: {\n ids?: string[];\n theme?: { accent?: string; accentContrast?: string };\n}) {\n const tools = useMemo(() => resolveTools(ids), [ids]);\n const [openId, setOpenId] = useState<string | null>(null);\n\n // One-time tool init (console capture, perf observers, …).\n useEffect(() => {\n tools.forEach((t) => t.init?.());\n }, [tools]);\n\n const rootStyle: CSSProperties = {};\n if (theme?.accent) (rootStyle as Record<string, string>)['--rdp-accent'] = theme.accent;\n if (theme?.accentContrast)\n (rootStyle as Record<string, string>)['--rdp-accent-contrast'] = theme.accentContrast;\n\n const ActivePanel = tools.find((t) => t.id === openId)?.Panel ?? null;\n\n return (\n <div className=\"rdp-root\" style={rootStyle} data-rdp-ignore=\"\">\n <Launcher tools={tools} onOpenTool={setOpenId} />\n {ActivePanel && <ActivePanel onClose={() => setOpenId(null)} />}\n {tools.map((t) => (t.Overlay ? <t.Overlay key={t.id} /> : null))}\n </div>\n );\n}\n","import type { OpenInEditor } from './types';\n\n/**\n * Default endpoint paths the adapters mount and the client talks to. No leading underscore —\n * Next.js App Router treats `_`-prefixed segments as private (non-routable), so this path works\n * uniformly across the Next, Vite, and generic-server adapters.\n */\nexport const DEFAULT_GRAPH_ENDPOINT = '/dev-panel/graph';\nexport const DEFAULT_OPEN_ENDPOINT = '/dev-panel/open-file';\n\n/**\n * A client `openInEditor` that POSTs to a server endpoint (mounted by an adapter), which opens\n * the file in the editor running the project via `launch-editor`. Falls back to copying the\n * path when the endpoint is unreachable. Pass to `<DevPanel openInEditor={serverOpenInEditor} />`.\n */\nexport function createServerOpenInEditor(endpoint = DEFAULT_OPEN_ENDPOINT): OpenInEditor {\n return async (loc, editor = 'auto') => {\n try {\n const res = await fetch(endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ file: loc.file, line: loc.line, column: loc.column, editor }),\n });\n if (res.ok) return true;\n } catch {\n /* fall through to copy */\n }\n if (typeof navigator !== 'undefined' && navigator.clipboard) {\n await navigator.clipboard\n .writeText(`${loc.file}${loc.line ? `:${loc.line}` : ''}`)\n .catch(() => undefined);\n }\n return false;\n };\n}\n\n/** Ready-to-use server opener pointed at the default endpoint. */\nexport const serverOpenInEditor: OpenInEditor = createServerOpenInEditor();\n","/**\n * react-dev-panel — a framework-agnostic, self-contained floating dev panel for React.\n *\n * import { DevPanel } from 'react-dev-panel';\n * <DevPanel enabled={isInternalUser} getRoute={() => pathname} />\n *\n * Bundled tools register themselves on import (below). Hosts can add their own via\n * `registerTool` before mounting <DevPanel/>, or restrict/order via the `tools` prop.\n */\n\nimport { registerDevLogs } from './tools/dev-logs/index';\nimport { registerPagePerformance } from './tools/page-performance/index';\nimport { registerComponentGraph } from './tools/component-graph/index';\n\n// Register the bundled tools once, at import time.\nregisterDevLogs();\nregisterPagePerformance();\nregisterComponentGraph();\n\nexport { DevPanel } from './core/DevPanel';\nexport { registerTool, getRegisteredTools } from './core/registry';\nexport { defaultOpenInEditor, useDevPanelConfig } from './core/config';\nexport { injectBaseStyles } from './core/styles';\nexport {\n serverOpenInEditor,\n createServerOpenInEditor,\n DEFAULT_GRAPH_ENDPOINT,\n DEFAULT_OPEN_ENDPOINT,\n} from './core/server-open';\n\nexport type { ComponentGraph, ComponentGraphNode, ComponentGraphEdge } from './core/graph-types';\n\nexport type {\n DevPanelConfig,\n DevPanelTheme,\n ToolDefinition,\n ToolPanelProps,\n EditorType,\n SourceLocation,\n OpenInEditor,\n} from './core/types';\n"]}
@@ -0,0 +1,53 @@
1
+ import * as react from 'react';
2
+ import { b as DevPanelConfig, T as ToolDefinition, O as OpenInEditor, R as ResolvedDevPanelConfig } from './server-open-B4FK0jQF.cjs';
3
+ export { D as DEFAULT_GRAPH_ENDPOINT, a as DEFAULT_OPEN_ENDPOINT, c as DevPanelTheme, E as EditorType, S as SourceLocation, d as ToolPanelProps, e as createServerOpenInEditor, s as serverOpenInEditor } from './server-open-B4FK0jQF.cjs';
4
+
5
+ /**
6
+ * The single component a host mounts (once, near the app root). Renders the floating launcher,
7
+ * the active tool's panel, and every tool's always-on overlay — all gated by `enabled`.
8
+ *
9
+ * <DevPanel enabled={isInternalUser} getRoute={() => pathname} openInEditor={...} />
10
+ */
11
+ declare function DevPanel(config: DevPanelConfig): react.JSX.Element | null;
12
+
13
+ declare function registerTool(def: ToolDefinition): void;
14
+ declare function getRegisteredTools(): ToolDefinition[];
15
+
16
+ /**
17
+ * Fallback opener used when the host/adapter provides none: tries the editor's protocol URL,
18
+ * then copies the path. Adapters (Next/Vite/server) replace this with a server-backed open that
19
+ * launches the editor running the project regardless of OS protocol registration.
20
+ */
21
+ declare const defaultOpenInEditor: OpenInEditor;
22
+ declare function useDevPanelConfig(): ResolvedDevPanelConfig;
23
+
24
+ /** Inject the stylesheet once (idempotent, SSR-safe). */
25
+ declare function injectBaseStyles(): void;
26
+
27
+ /** Pure data types for the component graph — shared by the CLI generator and the React tool. */
28
+ type GraphNodeType = 'component' | 'route';
29
+ interface ComponentGraphNode {
30
+ id: string;
31
+ name: string;
32
+ filePath: string;
33
+ line?: number;
34
+ column?: number;
35
+ type: GraphNodeType;
36
+ exported?: boolean;
37
+ route?: string;
38
+ }
39
+ type GraphEdgeType = 'renders' | 'imports' | 'route';
40
+ interface ComponentGraphEdge {
41
+ from: string;
42
+ to: string;
43
+ type: GraphEdgeType;
44
+ }
45
+ interface ComponentGraph {
46
+ /** Absolute repo root — used client-side to build absolute paths for editor protocol URLs. */
47
+ root: string;
48
+ generatedAt: string;
49
+ nodes: ComponentGraphNode[];
50
+ edges: ComponentGraphEdge[];
51
+ }
52
+
53
+ export { type ComponentGraph, type ComponentGraphEdge, type ComponentGraphNode, DevPanel, DevPanelConfig, OpenInEditor, ToolDefinition, defaultOpenInEditor, getRegisteredTools, injectBaseStyles, registerTool, useDevPanelConfig };
@@ -0,0 +1,53 @@
1
+ import * as react from 'react';
2
+ import { b as DevPanelConfig, T as ToolDefinition, O as OpenInEditor, R as ResolvedDevPanelConfig } from './server-open-B4FK0jQF.js';
3
+ export { D as DEFAULT_GRAPH_ENDPOINT, a as DEFAULT_OPEN_ENDPOINT, c as DevPanelTheme, E as EditorType, S as SourceLocation, d as ToolPanelProps, e as createServerOpenInEditor, s as serverOpenInEditor } from './server-open-B4FK0jQF.js';
4
+
5
+ /**
6
+ * The single component a host mounts (once, near the app root). Renders the floating launcher,
7
+ * the active tool's panel, and every tool's always-on overlay — all gated by `enabled`.
8
+ *
9
+ * <DevPanel enabled={isInternalUser} getRoute={() => pathname} openInEditor={...} />
10
+ */
11
+ declare function DevPanel(config: DevPanelConfig): react.JSX.Element | null;
12
+
13
+ declare function registerTool(def: ToolDefinition): void;
14
+ declare function getRegisteredTools(): ToolDefinition[];
15
+
16
+ /**
17
+ * Fallback opener used when the host/adapter provides none: tries the editor's protocol URL,
18
+ * then copies the path. Adapters (Next/Vite/server) replace this with a server-backed open that
19
+ * launches the editor running the project regardless of OS protocol registration.
20
+ */
21
+ declare const defaultOpenInEditor: OpenInEditor;
22
+ declare function useDevPanelConfig(): ResolvedDevPanelConfig;
23
+
24
+ /** Inject the stylesheet once (idempotent, SSR-safe). */
25
+ declare function injectBaseStyles(): void;
26
+
27
+ /** Pure data types for the component graph — shared by the CLI generator and the React tool. */
28
+ type GraphNodeType = 'component' | 'route';
29
+ interface ComponentGraphNode {
30
+ id: string;
31
+ name: string;
32
+ filePath: string;
33
+ line?: number;
34
+ column?: number;
35
+ type: GraphNodeType;
36
+ exported?: boolean;
37
+ route?: string;
38
+ }
39
+ type GraphEdgeType = 'renders' | 'imports' | 'route';
40
+ interface ComponentGraphEdge {
41
+ from: string;
42
+ to: string;
43
+ type: GraphEdgeType;
44
+ }
45
+ interface ComponentGraph {
46
+ /** Absolute repo root — used client-side to build absolute paths for editor protocol URLs. */
47
+ root: string;
48
+ generatedAt: string;
49
+ nodes: ComponentGraphNode[];
50
+ edges: ComponentGraphEdge[];
51
+ }
52
+
53
+ export { type ComponentGraph, type ComponentGraphEdge, type ComponentGraphNode, DevPanel, DevPanelConfig, OpenInEditor, ToolDefinition, defaultOpenInEditor, getRegisteredTools, injectBaseStyles, registerTool, useDevPanelConfig };